{"owner":"zarazhangrui","repo":"frontend-slides","hasSkills":true,"totalSkillsCount":77,"totalTokensCount":427452,"categories":["marketplace","anthropic-skill","plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":[".claude-plugin/marketplace.json","SKILL.md","plugins/frontend-slides/.claude-plugin/plugin.json","plugins/frontend-slides/skills/frontend-slides/SKILL.md","plugins/frontend-slides/skills/frontend-slides/STYLE_PRESETS.md","plugins/frontend-slides/skills/frontend-slides/animation-patterns.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/README.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/selection-index.json","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/emerald-editorial/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/emerald-editorial/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/grove/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/grove/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/long-table/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/long-table/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/mat/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/mat/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/monochrome/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/monochrome/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/neo-grid-bold/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/neo-grid-bold/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/peoples-platform/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/peoples-platform/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pin-and-paper/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pin-and-paper/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pink-script/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pink-script/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/playful/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/playful/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/raw-grid/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/raw-grid/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-windows/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-windows/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-zine/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-zine/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/sakura-chroma/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/sakura-chroma/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/scatterbrain/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/scatterbrain/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/signal/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/signal/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/soft-editorial/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/soft-editorial/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/stencil-tablet/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/stencil-tablet/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/studio/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/studio/preview.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/vellum/design.md","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/vellum/preview.md","plugins/frontend-slides/skills/frontend-slides/html-template.md"],"skills":{".claude-plugin/marketplace.json":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=.claude-plugin%2Fmarketplace.json -->","SKILL.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=SKILL.md -->","plugins/frontend-slides/.claude-plugin/plugin.json":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2F.claude-plugin%2Fplugin.json -->","plugins/frontend-slides/skills/frontend-slides/SKILL.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2FSKILL.md -->","plugins/frontend-slides/skills/frontend-slides/STYLE_PRESETS.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2FSTYLE_PRESETS.md -->","plugins/frontend-slides/skills/frontend-slides/animation-patterns.md":"# Animation Patterns Reference\n\nUse this reference when generating presentations. Match animations to the intended feeling.\n\n## Effect-to-Feeling Guide\n\n| Feeling | Animations | Visual Cues |\n|---------|-----------|-------------|\n| **Dramatic / Cinematic** | Slow fade-ins (1-1.5s), large scale transitions (0.9 to 1), parallax scrolling | Dark backgrounds, spotlight effects, full-bleed images |\n| **Techy / Futuristic** | Neon glow (box-shadow), glitch/scramble text, grid reveals | Particle systems (canvas), grid patterns, monospace accents, cyan/magenta/electric blue |\n| **Playful / Friendly** | Bouncy easing (spring physics), floating/bobbing | Rounded corners, pastel/bright colors, hand-drawn elements |\n| **Professional / Corporate** | Subtle fast animations (200-300ms), clean slides | Navy/slate/charcoal, precise spacing, data visualization focus |\n| **Calm / Minimal** | Very slow subtle motion, gentle fades | High whitespace, muted palette, serif typography, generous padding |\n| **Editorial / Magazine** | Staggered text reveals, image-text interplay | Strong type hierarchy, pull quotes, grid-breaking layouts, serif headlines + sans body |\n\n## Entrance Animations\n\n```css\n/* Fade + Slide Up (most versatile) */\n.reveal {\n    opacity: 0;\n    transform: translateY(30px);\n    transition: opacity 0.6s var(--ease-out-expo),\n                transform 0.6s var(--ease-out-expo);\n}\n.visible .reveal {\n    opacity: 1;\n    transform: translateY(0);\n}\n\n/* Scale In */\n.reveal-scale {\n    opacity: 0;\n    transform: scale(0.9);\n    transition: opacity 0.6s, transform 0.6s var(--ease-out-expo);\n}\n\n/* Slide from Left */\n.reveal-left {\n    opacity: 0;\n    transform: translateX(-50px);\n    transition: opacity 0.6s, transform 0.6s var(--ease-out-expo);\n}\n\n/* Blur In */\n.reveal-blur {\n    opacity: 0;\n    filter: blur(10px);\n    transition: opacity 0.8s, filter 0.8s var(--ease-out-expo);\n}\n```\n\n## Background Effects\n\n```css\n/* Gradient Mesh — layered radial gradients for depth */\n.gradient-bg {\n    background:\n        radial-gradient(ellipse at 20% 80%, rgba(120, 0, 255, 0.3) 0%, transparent 50%),\n        radial-gradient(ellipse at 80% 20%, rgba(0, 255, 200, 0.2) 0%, transparent 50%),\n        var(--bg-primary);\n}\n\n/* Noise Texture — inline SVG for grain */\n.noise-bg {\n    background-image: url(\"data:image/svg+xml,...\"); /* Inline SVG noise */\n}\n\n/* Grid Pattern — subtle structural lines */\n.grid-bg {\n    background-image:\n        linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px),\n        linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px);\n    background-size: 50px 50px;\n}\n```\n\n## Interactive Effects\n\n```javascript\n/* 3D Tilt on Hover — adds depth to cards/panels */\nclass TiltEffect {\n    constructor(element) {\n        this.element = element;\n        this.element.style.transformStyle = 'preserve-3d';\n        this.element.style.perspective = '1000px';\n\n        this.element.addEventListener('mousemove', (e) => {\n            const rect = this.element.getBoundingClientRect();\n            const x = (e.clientX - rect.left) / rect.width - 0.5;\n            const y = (e.clientY - rect.top) / rect.height - 0.5;\n            this.element.style.transform = `rotateY(${x * 10}deg) rotateX(${-y * 10}deg)`;\n        });\n\n        this.element.addEventListener('mouseleave', () => {\n            this.element.style.transform = 'rotateY(0) rotateX(0)';\n        });\n    }\n}\n```\n\n## Troubleshooting\n\n| Problem | Fix |\n|---------|-----|\n| Fonts not loading | Check Fontshare/Google Fonts URL; ensure font names match in CSS |\n| Animations not triggering | Verify Intersection Observer is running; check `.visible` class is being added |\n| Scroll snap not working | Ensure `scroll-snap-type: y mandatory` on html; each slide needs `scroll-snap-align: start` |\n| Mobile issues | Disable heavy effects at 768px breakpoint; test touch events; reduce particle count |\n| Performance issues | Use `will-change` sparingly; prefer `transform`/`opacity` animations; throttle scroll handlers |\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/README.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2FREADME.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/selection-index.json":"{\n  \"schema_version\": 1,\n  \"pack_name\": \"Beautiful HTML Templates - Bold Design Pack\",\n  \"source_repo\": \"zarazhangrui/beautiful-html-templates\",\n  \"template_count\": 34,\n  \"usage\": {\n    \"selection\": \"Read this compact index first to shortlist bold templates from metadata.\",\n    \"previews\": \"For title-slide previews, read only the preview_md files for the shortlisted bold candidates.\",\n    \"final_generation\": \"After the user chooses a bold template, read exactly that template design_md before generating the full deck.\",\n    \"never\": \"Do not bulk-read templates/*/design.md and do not read template.html unless the selected design.md is missing a critical implementation detail.\"\n  },\n  \"frontend_slides_policy\": {\n    \"layout_model\": \"fixed-stage\",\n    \"canvas_width\": 1920,\n    \"canvas_height\": 1080,\n    \"scaling\": \"scale-stage-to-viewport\",\n    \"mobile_behavior\": \"preserve 16:9 stage; letterbox or pillarbox instead of reflowing slide content\"\n  },\n  \"templates\": [\n    {\n      \"slug\": \"8-bit-orbit\",\n      \"name\": \"8-Bit Orbit\",\n      \"tagline\": \"Pixel-art neon arcade aesthetic on a deep navy void.\",\n      \"mood\": [\n        \"retro-tech\",\n        \"playful\",\n        \"cyberpunk\",\n        \"energetic\"\n      ],\n      \"tone\": [\n        \"geeky\",\n        \"neon\",\n        \"rebellious\",\n        \"sci-fi\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos. Just as good for a tech talk that wants to lean into nostalgic-digital craft, a synthwave brand deck, or a creative review that wants to feel like a console.\",\n      \"avoid_for\": \"Contexts where the dark neon palette would actively work against the message — quiet institutional finance disclosures, healthcare patient-facing materials, traditional luxury.\",\n      \"preview_md\": \"bold-template-pack/templates/8-bit-orbit/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/8-bit-orbit/design.md\"\n    },\n    {\n      \"slug\": \"biennale-yellow\",\n      \"name\": \"Biennale Yellow\",\n      \"tagline\": \"Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients.\",\n      \"mood\": [\n        \"editorial\",\n        \"atmospheric\",\n        \"warm\",\n        \"cultural-institution\",\n        \"poster-like\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"contemplative\",\n        \"warm-modern\",\n        \"Dutch-editorial\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, studio retrospectives. Equally good for any deck wanting Dutch-editorial atmosphere with an unmistakable single-color signature.\",\n      \"avoid_for\": \"Decks that need visual punch or saturated multi-color energy — the warm-paper canvas and one-yellow palette are intentionally quiet and atmospheric.\",\n      \"preview_md\": \"bold-template-pack/templates/biennale-yellow/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/biennale-yellow/design.md\"\n    },\n    {\n      \"slug\": \"block-frame\",\n      \"name\": \"BlockFrame\",\n      \"tagline\": \"Neobrutalist deck with pastel-neon color blocks and chunky black borders.\",\n      \"mood\": [\n        \"bold\",\n        \"playful\",\n        \"graphic\",\n        \"fresh\"\n      ],\n      \"tone\": [\n        \"confident\",\n        \"graphic\",\n        \"pop\",\n        \"design-led\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns. Also a strong unexpected pick for tech, finance, or research when the speaker wants to land as confident and contemporary rather than buttoned-up.\",\n      \"avoid_for\": \"Contexts that require quiet institutional restraint or traditional weight (regulated disclosures, formal legal briefs).\",\n      \"preview_md\": \"bold-template-pack/templates/block-frame/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/block-frame/design.md\"\n    },\n    {\n      \"slug\": \"blue-professional\",\n      \"name\": \"Blue Professional\",\n      \"tagline\": \"Cream paper background with electric cobalt blue accents; clean modern professional.\",\n      \"mood\": [\n        \"professional\",\n        \"modern\",\n        \"calm\",\n        \"trustworthy\"\n      ],\n      \"tone\": [\n        \"clean\",\n        \"considered\",\n        \"polished\",\n        \"neutral\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports. Also a clean, tasteful choice whenever you want to read as professional without going stiff — research synthesis, internal reviews, brand work for service businesses.\",\n      \"avoid_for\": \"Contexts where the deck should feel hot, playful, or intentionally informal — the cool electric-blue restraint will read as overly polished.\",\n      \"preview_md\": \"bold-template-pack/templates/blue-professional/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/blue-professional/design.md\"\n    },\n    {\n      \"slug\": \"bold-poster\",\n      \"name\": \"Bold Poster\",\n      \"tagline\": \"Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent.\",\n      \"mood\": [\n        \"bold\",\n        \"editorial\",\n        \"loud\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"dramatic\",\n        \"graphic\",\n        \"sharp\",\n        \"intentional\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews. Excellent any time you want a few words to feel like a poster — including unexpected fits like a tech keynote or a finance manifesto that wants to be quotable.\",\n      \"avoid_for\": \"Decks that need to communicate dense information per slide — the layout is built around a few large statements, not paragraphs of detail.\",\n      \"preview_md\": \"bold-template-pack/templates/bold-poster/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/bold-poster/design.md\"\n    },\n    {\n      \"slug\": \"broadside\",\n      \"name\": \"Broadside\",\n      \"tagline\": \"Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack.\",\n      \"mood\": [\n        \"editorial\",\n        \"dramatic\",\n        \"loud\",\n        \"newspaper\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"punchy\",\n        \"literary\",\n        \"considered\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements. Also a striking pick for tech, research, or business decks that want a dramatic single-accent editorial feel.\",\n      \"avoid_for\": \"Decks that need to feel quiet, warm, or institutionally traditional — the dark canvas with fire-orange accent commits to drama.\",\n      \"preview_md\": \"bold-template-pack/templates/broadside/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/broadside/design.md\"\n    },\n    {\n      \"slug\": \"capsule\",\n      \"name\": \"Capsule\",\n      \"tagline\": \"Modular pill-shaped cards on warm bone with a full pastel-pop palette.\",\n      \"mood\": [\n        \"playful\",\n        \"modern\",\n        \"warm\",\n        \"fresh\",\n        \"fun\"\n      ],\n      \"tone\": [\n        \"upbeat\",\n        \"graphic\",\n        \"approachable\",\n        \"cool\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials. Also fun for a playful tech demo or a research deck that wants pop-art clarity instead of gravitas.\",\n      \"avoid_for\": \"Contexts that require traditional institutional weight — the capsule shapes and pastel pops actively soften authority.\",\n      \"preview_md\": \"bold-template-pack/templates/capsule/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/capsule/design.md\"\n    },\n    {\n      \"slug\": \"cartesian\",\n      \"name\": \"Cartesian\",\n      \"tagline\": \"Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried.\",\n      \"mood\": [\n        \"quiet\",\n        \"considered\",\n        \"elegant\",\n        \"warm-minimal\"\n      ],\n      \"tone\": [\n        \"classical\",\n        \"literary\",\n        \"restrained\",\n        \"confident-quiet\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks. Also a strong choice for editorial features, founder reflections, or any deck where restraint is the message — including across tech and finance.\",\n      \"avoid_for\": \"Decks that need visual heat, multiple accents, or a sense of urgency — the warm-neutral palette is intentionally low-energy.\",\n      \"preview_md\": \"bold-template-pack/templates/cartesian/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/cartesian/design.md\"\n    },\n    {\n      \"slug\": \"cobalt-grid\",\n      \"name\": \"Cobalt Grid\",\n      \"tagline\": \"Electric cobalt serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules.\",\n      \"mood\": [\n        \"editorial\",\n        \"design-research\",\n        \"studious\",\n        \"modernist\",\n        \"tech-print\",\n        \"monochrome\"\n      ],\n      \"tone\": [\n        \"considered\",\n        \"literary\",\n        \"studious\",\n        \"quietly-modern\",\n        \"editorial\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report. Strong for studio annuals, agency capabilities decks, design-research publications, architecture / art / academic decks, and any deck wanting one strict accent colour and a printed-ledger calmness rather than corporate polish.\",\n      \"avoid_for\": \"Decks that need warmth, multi-colour energy, or a casual / playful voice — the strict cobalt + cream + grid palette is intentionally austere.\",\n      \"preview_md\": \"bold-template-pack/templates/cobalt-grid/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/cobalt-grid/design.md\"\n    },\n    {\n      \"slug\": \"coral\",\n      \"name\": \"Coral\",\n      \"tagline\": \"Cream and coral on near-black, set in oversized Bebas Neue.\",\n      \"mood\": [\n        \"bold\",\n        \"warm\",\n        \"modern\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"punchy\",\n        \"magazine\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials. Just as strong for a creator portfolio, a manifesto, or a tech / research deck that wants warmth and a single bold accent instead of corporate cool.\",\n      \"avoid_for\": \"Contexts that should feel quiet or institutional — the coral accent and oversized Bebas Neue commit hard to a confident magazine voice.\",\n      \"preview_md\": \"bold-template-pack/templates/coral/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/coral/design.md\"\n    },\n    {\n      \"slug\": \"creative-mode\",\n      \"name\": \"Creative Mode\",\n      \"tagline\": \"Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display.\",\n      \"mood\": [\n        \"creative\",\n        \"confident\",\n        \"playful\",\n        \"design-led\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"expressive\",\n        \"modern\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium-high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews. Also a great unexpected pick for a tech talk, research findings, or finance review when the speaker wants to lead with taste rather than convention.\",\n      \"avoid_for\": \"Contexts that demand institutional restraint and a quiet authority — the saturated multi-accent palette will read as expressive, not formal.\",\n      \"preview_md\": \"bold-template-pack/templates/creative-mode/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/creative-mode/design.md\"\n    },\n    {\n      \"slug\": \"daisy-days\",\n      \"name\": \"Daisy Days\",\n      \"tagline\": \"Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm.\",\n      \"mood\": [\n        \"cheerful\",\n        \"playful\",\n        \"warm\",\n        \"sunny\",\n        \"wholesome\"\n      ],\n      \"tone\": [\n        \"friendly\",\n        \"soft\",\n        \"encouraging\",\n        \"approachable\",\n        \"lighthearted\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration. Also lovely for an unexpected playful internal kickoff, a wedding planning deck, or any moment where warmth is the message — including across tech or business contexts.\",\n      \"avoid_for\": \"Contexts where the audience explicitly expects authority and precision — the hand-drawn pastel SVG decorations are the opposite of buttoned-up.\",\n      \"preview_md\": \"bold-template-pack/templates/daisy-days/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/daisy-days/design.md\"\n    },\n    {\n      \"slug\": \"editorial-forest\",\n      \"name\": \"Editorial Forest\",\n      \"tagline\": \"Forest green, dusty pink, and warm cream meet Source Serif 4 in a quiet, intentional quarterly-review deck.\",\n      \"mood\": [\n        \"editorial\",\n        \"quiet\",\n        \"considered\",\n        \"warm\",\n        \"intentional\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"thoughtful\",\n        \"warm\",\n        \"low-pressure\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like a considered editorial — quarterly reviews, internal readouts, studio updates, creative-agency presentations. Equally good for any deck that wants to feel warm and unhurried rather than corporate, including research recaps, book or program announcements, and team retrospectives.\",\n      \"avoid_for\": \"Contexts that need to feel urgent, punchy, or sales-driven — the palette and rhythm are intentionally quiet.\",\n      \"preview_md\": \"bold-template-pack/templates/editorial-forest/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/editorial-forest/design.md\"\n    },\n    {\n      \"slug\": \"editorial-tri-tone\",\n      \"name\": \"Editorial Tri-Tone\",\n      \"tagline\": \"Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif.\",\n      \"mood\": [\n        \"editorial\",\n        \"warm\",\n        \"intentional\",\n        \"moody\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"warm\",\n        \"considered\",\n        \"stylish\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews. Equally good for any deck — including tech, research, or business — that wants tri-tone discipline and serif/sans contrast instead of the usual neutrals.\",\n      \"avoid_for\": \"Decks that need to read as soft or comforting — the burgundy/pink/cream tri-tone is intentionally high-contrast and styled.\",\n      \"preview_md\": \"bold-template-pack/templates/editorial-tri-tone/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/editorial-tri-tone/design.md\"\n    },\n    {\n      \"slug\": \"emerald-editorial\",\n      \"name\": \"Emerald Editorial\",\n      \"tagline\": \"A magazine-cover business deck: emerald + navy + paper, double-rule masthead ornaments, and a bold Bodoni-style display serif.\",\n      \"mood\": [\n        \"editorial\",\n        \"considered\",\n        \"confident\",\n        \"magazine-cover\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"authoritative\",\n        \"warm\",\n        \"designed\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like the front of a serious magazine, including but not limited to leadership readouts, planning-office reviews, and strategy briefings. The double-rule masthead ornament gives it editorial gravitas without making it stiff — also a great unexpected pick for product launches or research recaps that want to feel considered rather than corporate.\",\n      \"avoid_for\": \"Contexts that need to read as quiet, neutral, or institutionally restrained — the emerald field is too saturated to disappear into the background.\",\n      \"preview_md\": \"bold-template-pack/templates/emerald-editorial/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/emerald-editorial/design.md\"\n    },\n    {\n      \"slug\": \"grove\",\n      \"name\": \"Grove\",\n      \"tagline\": \"Forest-green canvas with cream type, classical Playfair serifs, and a single rust accent.\",\n      \"mood\": [\n        \"organic\",\n        \"considered\",\n        \"warm\",\n        \"literary\",\n        \"natural\"\n      ],\n      \"tone\": [\n        \"classical\",\n        \"warm\",\n        \"considered\",\n        \"patient\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel organic, considered, and grown-up: sustainability and wellness brands, outdoor / nature products, wineries and restaurants, literary or arts decks, advisory deliverables, bilingual EN/CN reports. Also a calm, distinctive choice for tech, research, or business decks that want patience over urgency.\",\n      \"avoid_for\": \"Decks that need neon energy or rapid-fire pop — the forest-green canvas and Playfair serif commit to a slow, classical voice.\",\n      \"preview_md\": \"bold-template-pack/templates/grove/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/grove/design.md\"\n    },\n    {\n      \"slug\": \"long-table\",\n      \"name\": \"Long Table\",\n      \"tagline\": \"Warm cream and rust-red supper-club aesthetic with bold uppercase grotesk headlines, Fraunces serifs, and pill-shaped outlined buttons.\",\n      \"mood\": [\n        \"warm\",\n        \"intimate\",\n        \"modern\",\n        \"friendly\",\n        \"small-batch\",\n        \"social\",\n        \"hospitality\"\n      ],\n      \"tone\": [\n        \"warm\",\n        \"playful\",\n        \"considered\",\n        \"social\",\n        \"magazine-friendly\",\n        \"modern-editorial\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a warm, intimate, modern hospitality / community brand: supper clubs, dinner series, small restaurants, creative-studio events, membership pitches, lifestyle and wine brands. Equally good for any deck wanting a single warm accent colour, mixed-weight typography, and a social-media-aware modern-editorial voice.\",\n      \"avoid_for\": \"Decks that need corporate polish, technical density, or a cold / minimalist register — the rust-red palette and bold serif mix are intentionally warm and people-facing.\",\n      \"preview_md\": \"bold-template-pack/templates/long-table/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/long-table/design.md\"\n    },\n    {\n      \"slug\": \"mat\",\n      \"name\": \"Mat\",\n      \"tagline\": \"Dark sage canvas with bone paper and burnt-orange accent; mid-century modern with wood undertones.\",\n      \"mood\": [\n        \"warm-modern\",\n        \"considered\",\n        \"tactile\",\n        \"mid-century\"\n      ],\n      \"tone\": [\n        \"warm\",\n        \"design-led\",\n        \"intentional\",\n        \"considered\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel mid-century, tactile, and intentional: design studio credentials, architecture / interior brands, ceramics / craft / furniture, advisory decks. Also a warm, distinctive choice for tech, research, or business decks that want a considered analog feel instead of digital-cool.\",\n      \"avoid_for\": \"Contexts that need fast tech energy or institutional restraint — the muted sage and burnt-orange palette is intentionally warm and slow.\",\n      \"preview_md\": \"bold-template-pack/templates/mat/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/mat/design.md\"\n    },\n    {\n      \"slug\": \"monochrome\",\n      \"name\": \"Monochrome\",\n      \"tagline\": \"Ivory ledger paper with all-black type; Lora serif headlines, Jost body, no color at all.\",\n      \"mood\": [\n        \"restrained\",\n        \"literary\",\n        \"archival\",\n        \"ledger\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"neutral\",\n        \"honest\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a hand-typeset ledger: user research synthesis, white papers, longform reports, academic and policy briefs, advisory deliverables, bilingual EN/CN reports. Equally good for tech, design, or brand decks that want their words to be the only thing on the page.\",\n      \"avoid_for\": \"Decks that need visual personality or color-led storytelling — the all-ink palette is intentionally austere.\",\n      \"preview_md\": \"bold-template-pack/templates/monochrome/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/monochrome/design.md\"\n    },\n    {\n      \"slug\": \"neo-grid-bold\",\n      \"name\": \"Neo-Grid Bold\",\n      \"tagline\": \"Editorial neo-brutalism with a single neon yellow accent on off-white paper.\",\n      \"mood\": [\n        \"confident\",\n        \"punchy\",\n        \"editorial\",\n        \"modern\"\n      ],\n      \"tone\": [\n        \"bold\",\n        \"minimal\",\n        \"design-led\",\n        \"graphic\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel confident and editorial-graphic: design-led pitches, brand work, founder talks, conference keynotes. Excellent for stat-heavy slides, comparisons, and process flows. Just as strong for tech, research, or finance when the speaker wants to read as design-led rather than corporate.\",\n      \"avoid_for\": \"Contexts that need to feel quiet, traditional, or warm — the neon-yellow accent and uppercase display commit to a confident editorial voice.\",\n      \"preview_md\": \"bold-template-pack/templates/neo-grid-bold/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/neo-grid-bold/design.md\"\n    },\n    {\n      \"slug\": \"peoples-platform\",\n      \"name\": \"People's Platform (Block & Bold)\",\n      \"tagline\": \"Activist poster energy: blue, orange, red on cream, with Alfa Slab + Caveat Brush.\",\n      \"mood\": [\n        \"activist\",\n        \"loud\",\n        \"graphic\",\n        \"honest\"\n      ],\n      \"tone\": [\n        \"punchy\",\n        \"direct\",\n        \"expressive\",\n        \"warm-bold\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium-high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel honest, loud, and graphic: cultural commentary, manifestos, civic and community decks, design talks, campaign pitches. Excellent for founder-vision moments, mission statements, or any deck — including across industries — that wants protest-poster energy instead of corporate polish.\",\n      \"avoid_for\": \"Contexts where institutional restraint is the actual goal — the saturated political-poster palette commits hard to expressive energy.\",\n      \"preview_md\": \"bold-template-pack/templates/peoples-platform/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/peoples-platform/design.md\"\n    },\n    {\n      \"slug\": \"pin-and-paper\",\n      \"name\": \"Pin & Paper\",\n      \"tagline\": \"Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture.\",\n      \"mood\": [\n        \"crafted\",\n        \"handmade\",\n        \"warm\",\n        \"thoughtful\",\n        \"literary\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"intimate\",\n        \"warm\",\n        \"grounded\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel hand-crafted, warm, and literary: qualitative research findings, founder reflections, longform brand stories, workshop debriefs. The signature safety-pin illustrations and paper-grain texture make it especially good for any deck — including tech or business — that wants personality and warmth over polish.\",\n      \"avoid_for\": \"Decks that need to feel digital-native polished or rigorously data-driven — handwritten Caveat is intentionally informal.\",\n      \"preview_md\": \"bold-template-pack/templates/pin-and-paper/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/pin-and-paper/design.md\"\n    },\n    {\n      \"slug\": \"pink-script\",\n      \"name\": \"Pink Script — After Hours\",\n      \"tagline\": \"Black canvas, hot pink accent, pearl-cream paper, Instrument Serif headlines: late-night editorial luxury.\",\n      \"mood\": [\n        \"nocturnal\",\n        \"moody\",\n        \"intentional\",\n        \"luxe\",\n        \"expressive\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"sultry\",\n        \"considered\",\n        \"magazine\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"low\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel nocturnal, intentional, and a little luxe: fashion brand decks, creator personal brands, after-hours / nightlife / spirits launches, luxury product reveals, editorial features. Also a striking unexpected pick for a tech keynote, research synthesis, or business pitch that wants to land with magnetic confidence.\",\n      \"avoid_for\": \"Daytime corporate-professional and traditional B2B contexts where the dark canvas with hot-pink accent reads as too styled or too expressive.\",\n      \"preview_md\": \"bold-template-pack/templates/pink-script/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/pink-script/design.md\"\n    },\n    {\n      \"slug\": \"playful\",\n      \"name\": \"Playful\",\n      \"tagline\": \"Sun-warm peach background with Syne display: a friendly indie launch deck.\",\n      \"mood\": [\n        \"warm\",\n        \"approachable\",\n        \"indie\",\n        \"friendly\"\n      ],\n      \"tone\": [\n        \"upbeat\",\n        \"informal\",\n        \"welcoming\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel warm, indie, and approachable: creator portfolios, indie product launches, lifestyle brands, small-business pitches, newsletter / community decks. Also welcoming for any deck — including tech or research — that wants to feel friendly and human rather than corporate.\",\n      \"avoid_for\": \"Contexts where institutional credibility matters more than warmth — the peach palette is intentionally informal.\",\n      \"preview_md\": \"bold-template-pack/templates/playful/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/playful/design.md\"\n    },\n    {\n      \"slug\": \"raw-grid\",\n      \"name\": \"Raw Grid\",\n      \"tagline\": \"Neo-brutalist deck with thick borders, offset shadows, and a pink/sage/ink palette.\",\n      \"mood\": [\n        \"raw\",\n        \"punchy\",\n        \"energetic\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"direct\",\n        \"modern\",\n        \"no-nonsense\",\n        \"graphic\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel direct and graphic-confident: founder pitches, accelerator demos, brand decks, indie launches, creator portfolios. Strong for stat slides, comparison tables, and process flows. Equally good for tech, research, or finance when the speaker wants the deck to feel scrappy-confident rather than buttoned-up.\",\n      \"avoid_for\": \"Contexts that need to feel soft, warm, or intentionally quiet — the brutalist borders and offset shadows commit to a graphic voice.\",\n      \"preview_md\": \"bold-template-pack/templates/raw-grid/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/raw-grid/design.md\"\n    },\n    {\n      \"slug\": \"retro-windows\",\n      \"name\": \"Retro Windows\",\n      \"tagline\": \"Windows 95 chrome: gray title bars, MS Sans Serif, pixel typography, full nostalgia.\",\n      \"mood\": [\n        \"nostalgic\",\n        \"retro\",\n        \"geeky\",\n        \"playful\"\n      ],\n      \"tone\": [\n        \"winking\",\n        \"nostalgic\",\n        \"geeky\",\n        \"fun\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel knowingly nostalgic: retro gaming, Y2K-aesthetic brands, creator portfolios with a 90s vibe, tech-history talks, deliberately tongue-in-cheek decks. A great choice anywhere a playful retro reference is the entire point.\",\n      \"avoid_for\": \"Decks that need to read as modern, elegant, or institutionally credible — the Win95 chrome will always read as a costume.\",\n      \"preview_md\": \"bold-template-pack/templates/retro-windows/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/retro-windows/design.md\"\n    },\n    {\n      \"slug\": \"retro-zine\",\n      \"name\": \"Retro Zine\",\n      \"tagline\": \"Beige paper with green accent and Bebas Neue + Caveat: a riso-printed zine in HTML form.\",\n      \"mood\": [\n        \"crafted\",\n        \"lo-fi\",\n        \"underground\",\n        \"warm-retro\"\n      ],\n      \"tone\": [\n        \"scrappy\",\n        \"warm\",\n        \"intentional\",\n        \"DIY\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel printed, lo-fi, and crafted: indie zines and publications, music / arts brands, creator portfolios, small-batch craft launches, community decks. Also a great underdog choice for tech, research, or business decks that want a riso-print warmth instead of digital polish.\",\n      \"avoid_for\": \"Contexts that demand digital-native polish or fast modern-tech energy — the layered zine aesthetic intentionally feels handmade.\",\n      \"preview_md\": \"bold-template-pack/templates/retro-zine/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/retro-zine/design.md\"\n    },\n    {\n      \"slug\": \"sakura-chroma\",\n      \"name\": \"Sakura Chroma\",\n      \"tagline\": \"Vintage Japanese cassette-package aesthetic: cream paper, diagonal rainbow ribbons, condensed bold type, JIS-style spec checkboxes.\",\n      \"mood\": [\n        \"retro\",\n        \"playful\",\n        \"kawaii-tech\",\n        \"warm\",\n        \"tactile\",\n        \"product-catalogue\"\n      ],\n      \"tone\": [\n        \"playful\",\n        \"confident\",\n        \"warm\",\n        \"tactile\",\n        \"80s-Japanese-tech\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a vintage Japanese cassette package or a TDK / Sony / Sakura Color product catalogue: indie hardware brand decks, music-label release schedules, analog studio retrospectives, zine and magazine pitches, kawaii-tech product launches, creative-studio annual reports. Equally good for any deck wanting bold colour, condensed display type, and a tactile printed-product personality.\",\n      \"avoid_for\": \"Decks that need restrained, corporate, or quiet typography — the bold condensed lockups, ribbon stripes, and primary-colour palette are intentionally loud and product-page-y.\",\n      \"preview_md\": \"bold-template-pack/templates/sakura-chroma/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/sakura-chroma/design.md\"\n    },\n    {\n      \"slug\": \"scatterbrain\",\n      \"name\": \"Scatterbrain\",\n      \"tagline\": \"Post-it inspired: pastel sticky notes, Caveat handwriting, Shrikhand and Zilla Slab type stack.\",\n      \"mood\": [\n        \"playful\",\n        \"creative\",\n        \"warm\",\n        \"messy-on-purpose\",\n        \"workshop\"\n      ],\n      \"tone\": [\n        \"informal\",\n        \"warm\",\n        \"expressive\",\n        \"human\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a designer's whiteboard: brainstorms, workshops, creative-agency credentials, design-thinking sessions, ideation pitches, art-direction reviews. Equally fun for any deck — including tech, research, or business — that wants to read as in-progress thinking rather than polished conclusions.\",\n      \"avoid_for\": \"Contexts that demand precision and institutional weight — the post-it sticky-note aesthetic intentionally reads as warm and unfinished.\",\n      \"preview_md\": \"bold-template-pack/templates/scatterbrain/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/scatterbrain/design.md\"\n    },\n    {\n      \"slug\": \"signal\",\n      \"name\": \"Signal\",\n      \"tagline\": \"Deep navy canvas with bone paper and a single muted-gold accent; institutional with quiet weight.\",\n      \"mood\": [\n        \"institutional\",\n        \"trustworthy\",\n        \"considered\",\n        \"weighty\"\n      ],\n      \"tone\": [\n        \"sober\",\n        \"polished\",\n        \"established\",\n        \"literary\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"high\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel weighty, considered, and credibly institutional: investor decks, board presentations, consulting deliverables, legal / policy briefs, advisory pitches. Also a strong choice for tech, research, or brand work that wants to read as quietly authoritative rather than loud.\",\n      \"avoid_for\": \"Contexts that should feel hot, fast, or intentionally playful — the navy + gold restraint commits to a sober voice.\",\n      \"preview_md\": \"bold-template-pack/templates/signal/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/signal/design.md\"\n    },\n    {\n      \"slug\": \"soft-editorial\",\n      \"name\": \"Soft Editorial\",\n      \"tagline\": \"Cormorant Garamond serif on warm paper with sage, blush, and lemon accents.\",\n      \"mood\": [\n        \"literary\",\n        \"elegant\",\n        \"quiet\",\n        \"warm-classical\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"warm\",\n        \"magazine\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel literary, elegant, and unhurried: editorial features, longform brand stories, gallery / museum decks, advisory deliverables, wedding / lifestyle media, founder essays. Equally good for tech, research, or business decks that want a Sunday-supplement warmth instead of corporate polish.\",\n      \"avoid_for\": \"Decks that need visual heat or punch — the warm-paper palette and Cormorant serif are intentionally quiet.\",\n      \"preview_md\": \"bold-template-pack/templates/soft-editorial/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/soft-editorial/design.md\"\n    },\n    {\n      \"slug\": \"stencil-tablet\",\n      \"name\": \"Stencil & Tablet\",\n      \"tagline\": \"Bone paper with stencil-cut headlines and a six-color earth palette: archaeology meets brand.\",\n      \"mood\": [\n        \"archival\",\n        \"earthy\",\n        \"tactile\",\n        \"considered\",\n        \"graphic\"\n      ],\n      \"tone\": [\n        \"weighty\",\n        \"considered\",\n        \"tactile\",\n        \"literary\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel archival, tactile, and weighty-graphic: museum and cultural-institution decks, art / architecture brands, longform research, heritage and craft brands, manifestos. A great choice anytime — including across tech and business — when you want the deck to feel like a field manual rather than a slide deck.\",\n      \"avoid_for\": \"Contexts that demand digital-native polish or playful pop — the stencil-cut display and earth-tone palette commit to a deliberate analog feel.\",\n      \"preview_md\": \"bold-template-pack/templates/stencil-tablet/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/stencil-tablet/design.md\"\n    },\n    {\n      \"slug\": \"studio\",\n      \"name\": \"Studio\",\n      \"tagline\": \"Black canvas with electric-yellow type; high-voltage design studio aesthetic.\",\n      \"mood\": [\n        \"electric\",\n        \"bold\",\n        \"graphic\",\n        \"design-led\",\n        \"high-contrast\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"loud\",\n        \"modern\",\n        \"intentional\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel electric and design-led: studio credentials, creative agency pitches, brand showcases, art-direction reviews, fashion / sneaker brand work. Also a striking unexpected choice for tech, research, or business decks where the speaker wants the deck to *be* a brand statement.\",\n      \"avoid_for\": \"Contexts that should feel quiet or institutional — the black-and-electric-yellow palette is the loudest in the library.\",\n      \"preview_md\": \"bold-template-pack/templates/studio/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/studio/design.md\"\n    },\n    {\n      \"slug\": \"vellum\",\n      \"name\": \"Vellum\",\n      \"tagline\": \"Deep navy canvas with warm-yellow Cormorant serifs and a single dusty teal accent. A quiet, scholarly aesthetic.\",\n      \"mood\": [\n        \"scholarly\",\n        \"literary\",\n        \"considered\",\n        \"quiet\",\n        \"intellectual\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"patient\",\n        \"intelligent\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel scholarly, literary, and quietly intelligent: research synthesis, white papers, academic and policy briefs, advisory deliverables, longform editorial pieces, founder reflections. Equally strong for any deck — including tech, business, or creator work — that wants a calm, considered atmosphere instead of energetic visuals.\",\n      \"avoid_for\": \"Contexts that need visual heat or pop — the navy + warm-yellow Cormorant aesthetic is intentionally low-tempo.\",\n      \"preview_md\": \"bold-template-pack/templates/vellum/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/vellum/design.md\"\n    }\n  ]\n}\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/design.md":"---\nversion: alpha\nname: 8-Bit Orbit\ndescription: A retro-futuristic pixel-art presentation system that fuses 16-bit arcade nostalgia with editorial discipline. Display type runs in Tektur (a chunky geometric display face built on pixel-grid logic) paired with Chakra Petch for body and Space Mono for code-flavored labels and tabular data. The palette pivots on a deep cosmic navy (`#0F1B3D` / `#0A0E27`) lit by three saturated neons — cyan, hot pink, and a high-key yellow — with a soft lavender pastel for warm reprieves. Depth is built from stacked hard offset shadows in 4px increments (the pixel unit), CRT scanlines, atmospheric grain, vignettes, and animated starfields. The effect sits between an arcade cabinet and a Tron-era boardroom — unmistakably digital, intentionally lo-fi, and engineered to feel as if it just booted up.\n\ncolors:\n  dark-void: \"#0A0E27\"\n  deep-navy: \"#0F1B3D\"\n  neon-cyan: \"#5EDCF4\"\n  neon-pink: \"#F0A6CA\"\n  neon-yellow: \"#F4D03F\"\n  soft-lavender: \"#E2D5F2\"\n  white: \"#FFFFFF\"\n\nshadows:\n  pixel-stack-cyan-yellow: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}, 8px 4px 0 0 {colors.neon-yellow}, 4px 8px 0 0 {colors.neon-yellow}, 8px 8px 0 0 {colors.neon-yellow}\"\n  pixel-stack-pink-cyan: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}, 8px 4px 0 0 {colors.neon-cyan}, 4px 8px 0 0 {colors.neon-cyan}, 8px 8px 0 0 {colors.neon-cyan}\"\n  pixel-l-shape: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}\"\n  pixel-text-shadow: \"4px 4px 0 {colors.neon-yellow}, 8px 8px 0 {colors.deep-navy}\"\n  pixel-text-shadow-small: \"3px 3px 0 {colors.deep-navy}\"\n  card-offset: \"6px 6px 0 rgba(15, 27, 61, 0.15)\"\n  card-featured: \"8px 8px 0 {colors.neon-yellow}\"\n\ntypography:\n  pixel-hero:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(48px, 10vw, 128px)\"\n    fontWeight: 900\n    lineHeight: 1.05\n    letterSpacing: 0.04em\n  display:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(32px, 5vw, 64px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  headline:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(24px, 3.5vw, 45px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  subhead:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(17.6px, 2vw, 24px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  stat-number:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(32px, 4vw, 56px)\"\n    fontWeight: 900\n    lineHeight: 1\n  body:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(14.4px, 1.2vw, 18.4px)\"\n    fontWeight: 400\n    lineHeight: 1.7\n  hero-tagline:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(14.4px, 1.5vw, 19.2px)\"\n    fontWeight: 400\n    lineHeight: 1.8\n  quote-body:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(17.6px, 2.2vw, 25.6px)\"\n    fontWeight: 500\n    lineHeight: 1.8\n  label-pill:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12px\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 0.2em\n    textTransform: uppercase\n  label-eyebrow:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 13.6px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.3em\n    textTransform: uppercase\n  badge:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  chart-value:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12px\n    fontWeight: 700\n    lineHeight: 1\n  chart-label:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.05em\n  date-chip:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n  counter:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12.8px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.15em\n\nspacing:\n  pixel-unit: 4px\n  pad-slide-y: \"3vh\"\n  pad-slide-x: \"4vw\"\n  pad-card-lg: \"32px 40px\"\n  pad-card-md: \"28px\"\n  pad-card-sm: \"16px 20px\"\n  gap-grid-lg: 32px\n  gap-grid-md: 24px\n  gap-grid-sm: 16px\n  content-max-width: 1200px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  label-pill:\n    background: \"{colors.deep-navy}\"\n    color: \"{colors.neon-yellow}\"\n    padding: \"6px 14px\"\n    fontSize: 12px\n    fontWeight: 700\n    letterSpacing: 0.2em\n    textTransform: uppercase\n    fontFamily: \"'Space Mono', monospace\"\n    description: \"Universal section tag. Default fill is deep-navy with neon-yellow text. Variant fills swap text color so the pill stays legible (e.g., navy bg with cyan text, navy bg with pink text).\"\n  pixel-button:\n    background: \"{colors.neon-cyan}\"\n    color: \"{colors.deep-navy}\"\n    padding: \"16px 36px\"\n    fontFamily: \"'Tektur', cursive\"\n    fontWeight: 700\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    boxShadow: \"{shadows.pixel-stack-cyan-yellow}\"\n    description: \"The signature stacked-shadow CTA. The pink variant swaps cyan body for pink and yellow shadow halo for cyan halo.\"\n  pixel-corner-bracket:\n    width: 24px\n    height: 24px\n    borderWidth: 4px\n    description: \"Two outward-facing L-shapes (top-left + bottom-right) bracketing a region. Default color is neon-cyan; yellow and pink variants exist. Sits 8px outside the bracketed element.\"\n  feature-card:\n    background: \"rgba(255, 255, 255, 0.15)\"\n    backdropFilter: \"blur(8px)\"\n    padding: \"32px 24px\"\n    border: \"2px solid rgba(15, 27, 61, 0.2)\"\n    description: \"Frosted-glass card with inset navy L-brackets (top-left + bottom-right) replacing rounded corners. Used on light-surface slides.\"\n  stat-block:\n    background: \"rgba(94, 220, 244, 0.08)\"\n    border: \"2px solid rgba(94, 220, 244, 0.2)\"\n    padding: \"32px 16px\"\n    description: \"Cyan-tinted glass stat tile with cyan L-bracket accents at opposite corners. Used on dark surfaces. Stat numeral uses the pixel-text-shadow-small treatment.\"\n  bar-track-light:\n    height: 32px\n    background: \"rgba(15, 27, 61, 0.1)\"\n    description: \"Horizontal track for hbar charts on light surfaces. Fill is solid navy/cyan/pink with a yellow offset shadow.\"\n  bar-vertical:\n    background: \"{colors.neon-cyan}\"\n    boxShadow: \"{shadows.pixel-l-shape}\"\n    description: \"Vertical chart bar with three-piece navy L-shadow. Color cycles cyan → pink → yellow.\"\n  timeline-node:\n    width: 24px\n    height: 24px\n    background: \"{colors.neon-cyan}\"\n    border: \"4px solid {colors.deep-navy}\"\n    description: \"Square pixel node on timeline rails. Active state swaps fill to neon-yellow.\"\n  timeline-rail:\n    width: 4px\n    background: \"repeating-linear-gradient(to bottom, {colors.deep-navy} 0px, {colors.deep-navy} 16px, transparent 16px, transparent 24px)\"\n    description: \"Dashed pixel rail running between timeline nodes.\"\n  date-chip:\n    background: \"{colors.deep-navy}\"\n    color: \"{colors.neon-cyan}\"\n    padding: \"2px 10px\"\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    description: \"Small inline date marker on timeline events.\"\n  hero-badge:\n    border: \"2px solid {colors.neon-yellow}\"\n    color: \"{colors.neon-yellow}\"\n    padding: \"8px 16px\"\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    letterSpacing: 0.1em\n    textTransform: uppercase\n    description: \"Outline-only chip used in clusters under hero headlines.\"\n  bg-grid:\n    backgroundColor: \"{colors.dark-void}\"\n    backgroundImage: \"linear-gradient(rgba(94, 220, 244, 0.07) 1px, transparent 1px), linear-gradient(90deg, rgba(94, 220, 244, 0.07) 1px, transparent 1px)\"\n    backgroundSize: \"40px 40px\"\n    description: \"40px cyan-on-navy grid wallpaper for dark surfaces. Pink, cyan, and lavender variants invert the relationship (colored ground with low-opacity navy grid lines).\"\n  scanlines:\n    background: \"repeating-linear-gradient(0deg, transparent 0px, transparent 2px, rgba(10, 14, 39, 0.04) 2px, rgba(10, 14, 39, 0.04) 4px)\"\n    mixBlendMode: multiply\n    description: \"Horizontal CRT scanline overlay applied via ::after at z-index 50. Always present on every slide.\"\n  grain:\n    opacity: 0.035\n    description: \"SVG fractal-noise grain layer applied via ::before at z-index 49. Always present on every slide.\"\n  crt-glow:\n    background: \"radial-gradient(ellipse at center, transparent 50%, rgba(10, 14, 39, 0.25) 100%)\"\n    description: \"Radial vignette that darkens the corners to mimic a CRT bulge. Applied to dark-surface slides via ::after at z-index 51.\"\n  starfield:\n    description: \"Container of small 4-6px colored squares (cyan, yellow, pink) positioned absolutely with a 3s twinkle keyframe. Lives on dark surfaces only.\"\n  pixel-particles:\n    description: \"Floating 8px colored squares with an 8s float keyframe. Decorative ambient layer on hero and CTA-type surfaces.\"\n  nav-dot:\n    width: 12px\n    height: 12px\n    border: \"2px solid {colors.neon-cyan}\"\n    background: transparent\n    description: \"Hollow square pip with a 2px inset cyan fill on active state. Fixed vertical rail at right edge.\"\n  quote-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.neon-yellow}\"\n    boxShadow: \"4px 4px 0 {colors.deep-navy}\"\n    description: \"Short yellow rule with navy offset shadow, used as a separator under quote bodies.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\n8-Bit Orbit is a **retro-futuristic pixel-art presentation system**. Its foundational premise is the **4-pixel unit**: every shadow offset, every border, every corner bracket, every label height resolves to a multiple of 4px. Layouts feel as if they were rasterized on an old CRT and dragged into HTML — and atmospheric overlays (scanlines, grain, vignette glow, animated starfields) reinforce the illusion on every surface.\n\nThe type stack is three faces working in concert. **Tektur** is the display face — a chunky, geometric, semi-pixelated grotesque that carries headlines, hero text, stat numerals, and any text that needs to feel like it was drawn on the pixel grid. **Chakra Petch** is the body face — a humanist sans with subtle geometric cuts that reads cleanly at small sizes and avoids fighting Tektur for attention. **Space Mono** is the system face — used exclusively for labels, captions, badges, chart values, dates, and counters. The mono treatment + wide tracking on these elements makes them feel like HUD readouts, not editorial captions.\n\nThe palette is built around **deep navy as ground** (`{colors.dark-void}` and `{colors.deep-navy}`) lit by **three saturated neons** — cyan, hot pink, yellow — plus a soft lavender pastel. Surfaces alternate: a dark navy surface (cyan grid wallpaper, white text, neon accents glowing in front) followed by a colored surface (pink, cyan, or lavender ground with navy text and navy grid lines etched at low opacity). The neons never appear as body text — they are reserved for headlines, stat numerals, accent rules, and label fills. The result is high contrast without being harsh: the neons feel illuminated rather than printed.\n\nDepth is the system's signature trick: **stacked hard offset shadows in the pixel unit**. The flagship pattern is a six-piece shadow on buttons — three navy offsets stepping down-right at 4px, then three colored halo offsets stepping further at 8px. Hero text gets a two-layer text shadow (yellow at +4/+4, navy at +8/+8). Cards get either a 6px navy box shadow or an 8px yellow box shadow on the featured tier. Every shadow is hard-edged, zero blur, locked to the 4px grid. Atmospheric depth comes from the always-on **scanlines + grain + CRT glow** overlay trio that subtly modulates every surface.\n\n**Density philosophy: moderately dense, atmospherically loaded.** The system reads as broken when surfaces are clean and unaccompanied — without scanlines, grain, vignette, particles, or a colored grid behind, the type loses its arcade context and starts to look like generic web typography. Always layer the atmosphere. Within content regions, however, breathing room matters: cards are widely spaced (24-32px gaps), stat tiles get heavy internal padding, and hero text is allowed to dominate. A typical slide carries one display moment + a small constellation of supporting elements (badges, labels, a chart, or a small grid), all sitting on a fully decorated atmospheric background.\n\n**Key Characteristics:**\n- Three-font stack: Tektur (display), Chakra Petch (body), Space Mono (HUD/labels) — never substitute, never mix outside their roles.\n- Navy ground (`{colors.dark-void}` / `{colors.deep-navy}`) alternates with colored-grid surfaces (pink, cyan, lavender) — both carry the 40px etched grid.\n- Three neons (cyan, pink, yellow) reserved for display, stats, rules, and label fills — never for body text.\n- All measurements snap to the 4px pixel unit: borders 2-4px, shadow offsets 4px / 8px, corner brackets 24×24 with 4px stroke.\n- Stacked hard offset shadows are the system's depth language — never blurred, never colored on text shadows except in the yellow→navy cascade.\n- Every slide carries the persistent scanline + grain + CRT-vignette trio at z-index 49-51.\n- L-shaped corner brackets (`{components.pixel-corner-bracket}`) replace rounded corners and frame regions, cards, and stat tiles.\n- A monospace label pill (`{components.label-pill}`) sits as the universal eyebrow on every region — navy fill, neon text, 0.2em tracking, uppercase.\n- Animated starfields and floating particle squares wallpaper dark surfaces — ambient, not decorative.\n\n## Colors\n\n### Palette\n\n- **Dark Void** (`{colors.dark-void}` — `#0A0E27`): The deepest ground, used on `<body>` and as the base for dark-grid surfaces. Reads as black-with-blue-bias under the CRT vignette.\n- **Deep Navy** (`{colors.deep-navy}` — `#0F1B3D`): The structural color — all shadow stacks, label fills, dark cards, button text on neon surfaces, and chart bar text. Slightly warmer than the void; the two read as ground and figure when stacked.\n- **Neon Cyan** (`{colors.neon-cyan}` — `#5EDCF4`): The system's primary glow. Used for headlines on dark surfaces, primary button fill, stat numerals, primary chart bars, timeline nodes, navigation dots, corner brackets, and grid lines on dark surfaces (at 7% opacity).\n- **Neon Pink** (`{colors.neon-pink}` — `#F0A6CA`): The warm accent. Used as a colored surface ground (40px navy-on-pink grid), secondary button fill, secondary chart bars, mouth detail in pixel avatars, and tertiary corner brackets.\n- **Neon Yellow** (`{colors.neon-yellow}` — `#F4D03F`): The high-key alert color. Used in shadow halos behind buttons and on featured tier cards, as the active timeline-node fill, on hero badges, in label-pill text variants, in the quote-line, and as Tektur text-shadow layer 1.\n- **Soft Lavender** (`{colors.soft-lavender}` — `#E2D5F2`): The calm pastel surface — used as ground for slides that need a softer reprieve from the neon-on-navy intensity. Carries the same etched-navy grid wallpaper as the other colored surfaces.\n- **White** (`{colors.white}` — `#FFFFFF`): Text color on dark/neon surfaces only. Never used as a slide background.\n\n### Defaults\n\n- **Default surface background**: `{colors.dark-void}` with the 40px cyan grid (`{components.bg-grid}`). Always apply scanlines + grain + crt-glow on top.\n- **Default headline color on dark surfaces**: `{colors.neon-cyan}`, with the `{shadows.pixel-text-shadow-small}` or `{shadows.pixel-text-shadow}` treatment for hero-scale text.\n- **Default headline color on colored grids (pink/cyan/lavender)**: `{colors.deep-navy}` — neon text becomes illegible on neon grounds.\n- **Default body text color on dark surfaces**: `rgba(255, 255, 255, 0.7)` — softened white, not pure white.\n- **Default body text color on colored grids**: `rgba(15, 27, 61, 0.75)` — softened navy.\n- **Default label-pill fill**: `{colors.deep-navy}` with `{colors.neon-yellow}` text. On colored grids the text can swap to cyan or pink as long as contrast against navy holds.\n- **Default accent color for callouts and stat numerals**: `{colors.neon-cyan}`.\n- **Default chart palette order**: cyan → pink → yellow (in that order across series).\n- **Default corner bracket color**: `{colors.neon-cyan}`. Yellow and pink variants exist for thematic accents.\n\nWhen a slide needs to feel softer or warmer, switch the colored grid from cyan-on-navy (default) to navy-on-pink, navy-on-cyan, or navy-on-lavender — the structural relationship inverts (grid lines become navy at low opacity) but the typographic rules stay the same.\n\n## Typography\n\n### Font Family\nThe system runs three faces, each locked to its role.\n\n**Tektur** is the display face — a wide-bodied, semi-geometric grotesque with subtle pixel-grid cuts. Used for every hero title, headline, stat numeral, quote mark, and large numeral. Tektur's chunky personality is what makes the system feel arcade-native; replacing it with Inter or Space Grotesk breaks the entire aesthetic.\n\n**Chakra Petch** is the body face — a humanist sans with mild geometric/squared character that reads cleanly at 14-22px and has enough personality to sit next to Tektur without disappearing. Used for paragraphs, hero taglines, quote bodies, and any longer-form prose.\n\n**Space Mono** is the HUD face — a monospace used exclusively for labels, badges, chart values/axes, page counters, date chips, and any element that should feel like a system readout. The mono + wide-tracked uppercase combination is the system's \"interface\" voice.\n\nNever use Tektur for body, never use Chakra Petch for chrome/HUD, never use Space Mono for headlines. The three-role separation is the typographic structure.\n\n### Typography Scale\n\n| Token | Size (clamp) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.pixel-hero}` | 48–128px | Tektur | 900 | Hero or cover display title — always carries the two-layer text shadow |\n| `{typography.display}` | 32–64px | Tektur | 700 | Large section opener |\n| `{typography.headline}` | 24–45px | Tektur | 700 | Primary section headline |\n| `{typography.subhead}` | 17.6–24px | Tektur | 700 | Region-level subheading or card title |\n| `{typography.stat-number}` | 32–56px | Tektur | 900 | Stat tile numeral — pairs with the small text shadow |\n| `{typography.body}` | 14.4–18.4px | Chakra Petch | 400 | Paragraph body |\n| `{typography.hero-tagline}` | 14.4–19.2px | Chakra Petch | 400 | Hero subtitle / lede paragraph below a pixel-hero |\n| `{typography.quote-body}` | 17.6–25.6px | Chakra Petch | 500 | Quote text |\n| `{typography.label-pill}` | 12px | Space Mono | 700 | Text inside the navy label pill |\n| `{typography.label-eyebrow}` | 13.6px | Space Mono | 400 | Standalone uppercase eyebrow above a headline (heavier tracking than the pill) |\n| `{typography.badge}` | 11.2px | Space Mono | 400 | Outline-only hero badge text |\n| `{typography.chart-value}` | 12px | Space Mono | 700 | Chart bar value numerals |\n| `{typography.chart-label}` | 11.2px | Space Mono | 400 | Chart axis or category labels |\n| `{typography.date-chip}` | 11.2px | Space Mono | 400 | Date marker on timeline events |\n| `{typography.counter}` | 12.8px | Space Mono | 400 | Persistent slide counter (NN / NN) |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.pixel-hero}` (48–128px clamp) — always Tektur weight 900 with the two-layer text shadow.\n- **Default size for a primary section headline**: `{typography.headline}` (24–45px clamp) — Tektur weight 700.\n- **Default size for paragraph body**: `{typography.body}` (14.4–18.4px clamp) — Chakra Petch weight 400.\n- **Default size for a stat numeral**: `{typography.stat-number}` (32–56px clamp) — Tektur weight 900, always carries the 3px navy text shadow.\n- **Default size for an eyebrow label**: `{typography.label-pill}` (12px) housed in the navy pill — or `{typography.label-eyebrow}` (13.6px) if the eyebrow sits standalone.\n- **Default tracking for any Space Mono label**: 0.1em (badges) to 0.3em (eyebrow labels). Mono without wide tracking reads as code, not HUD.\n- **Default body weight**: 400 for Chakra Petch, 500 for quote bodies.\n- **Default display weight**: 700 for headlines, 900 for hero scale and stat numerals.\n\nWhen unsure which display token to reach for, default to `{typography.headline}` — it's the section-level workhorse. Reserve `{typography.pixel-hero}` for cover and CTA moments only.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every pixel-hero element carries the stacked text-shadow.** The pattern is `4px 4px 0 {colors.neon-yellow}, 8px 8px 0 {colors.deep-navy}` on cyan text. A pixel-hero element without this two-layer cascade reads as untreated display type and breaks the arcade voice.\n- **Every stat numeral carries the small text-shadow.** The pattern is `3px 3px 0 {colors.deep-navy}` on cyan text. Stat numerals on dark surfaces need this shadow to feel illuminated; without it they read flat.\n- **Every Space Mono element is uppercase with wide tracking** — minimum 0.05em for chart labels, 0.08–0.2em for pills and badges, 0.3em for standalone eyebrow labels. Sentence-case mono does not exist in this system.\n- **Every Tektur display element keeps its native letter-spacing or slight positive (+0.04em on hero scale).** Tektur is wide-bodied by design — adding negative tracking compresses it into something that no longer reads as the same face.\n- **Every Chakra Petch body block uses line-height ≥ 1.6.** The face is dense; tighter line-height on body bleeds into unreadable.\n- **Every label pill uses Space Mono at 12px with 0.2em letter-spacing.** No exceptions — the pill is the system's most recognizable small chrome and any deviation in size or tracking breaks it.\n- **Every chart bar value / axis label uses Space Mono.** Numerical chrome is mono, never Tektur or Chakra Petch.\n\n### Typography Principles\n\nThe voice contrast is **chunky display ↔ humanist body ↔ wide-tracked mono chrome**. Switching any of the three roles to a different face flattens the system into a generic dark-mode aesthetic. Italic is never used in display or body — the only italic that appears anywhere is implicit in the slight tilt on pixel-art decorative elements.\n\nTektur should always feel **planted** — left-aligned, generous line-height, never centered for body-length runs (centering is permitted on hero and CTA titles only). Chakra Petch should always feel **calm** — left-aligned by default, no all-caps treatment, no letter-spacing.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are stacked vertically inside a `slides-container` and translated via `transform: translateY(...)` for navigation. Only one slide occupies the viewport at a time, with cubic-bezier `(0.22, 1, 0.36, 1)` easing on an 800ms transition.\n\nDefault slide padding is `3vh 4vw`. The inner `slide-content` caps at `max-width: 1200px` and centers, so on wide displays content keeps editorial column width while the colored background fills the viewport.\n\n### Pixel Unit\nEvery measurement in the system snaps to a **4px grid**. Border widths are 2px or 4px. Shadow offsets are 4px or 8px. Corner brackets are 24×24 with 4px stroke. The background grid is 40px (10 × pixel-unit). Card padding usually resolves to multiples of 8 (16, 24, 32, 48). This discipline is what makes the system feel rasterized rather than vector.\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Navigation dot rail** — vertical stack of 12×12 cyan-bordered squares, fixed at `right: 24px`, vertically centered. Active state fills the inner 8×8 with cyan.\n- **Slide counter** — Space Mono `01 / 10` format, fixed at `bottom: 24px`, horizontally centered, dark-navy semi-transparent pill background.\n- **Nav hint** — `USE KEYS ↑ ↓`, Space Mono 11px at 50% opacity, fixed at `bottom: 24px right: 24px`.\n\nThe cursor across the entire deck is `crosshair` — an additional arcade signal.\n\n### Atmospheric Overlay Stack\nEvery slide carries (in z-order):\n1. Surface background — either `{components.bg-grid}` (cyan-on-navy) or one of the colored grid variants.\n2. Grain layer at z-index 49, opacity 0.035.\n3. Scanlines at z-index 50, multiply blend mode.\n4. CRT vignette glow at z-index 51 (dark surfaces only).\n5. Optional starfield / pixel particles at z-index 1 inside the surface.\n6. `.slide-content` at z-index 10 above the atmospheric layers.\n\nThis overlay stack is the system's identity. A slide rendered without it looks like a wireframe.\n\n## Depth and Elevation\n\n### Stacked Hard Offset Shadow (Signature)\nThe system uses **stacked, multi-step hard offset shadows** in the 4px pixel unit. Every shadow value is composed in one of three patterns:\n\n- **Three-step navy L-shape** (`{shadows.pixel-l-shape}`) — three offsets at `4px 0`, `0 4px`, `4px 4px` in deep-navy, zero blur. Used on chart bars and small elevated chrome to suggest a single-layer drop.\n- **Six-step button cascade** (`{shadows.pixel-stack-cyan-yellow}` / `{shadows.pixel-stack-pink-cyan}`) — three navy offsets at 4px stepping then three colored halo offsets at 8px stepping behind. Creates a two-layer pixel-bevel effect. Used exclusively on `{components.pixel-button}`.\n- **Two-layer text-shadow** (`{shadows.pixel-text-shadow}` / `{shadows.pixel-text-shadow-small}`) — yellow layer at +4/+4 then navy layer at +8/+8 (or just navy at +3/+3 for stat-scale numerals). Used on every Tektur display element.\n\nAll shadows are zero-blur, hard-edged, locked to the pixel unit. A blurred drop shadow does not exist anywhere in the system.\n\n### Card Shadows\nTwo simpler patterns serve cards:\n- `{shadows.card-offset}` = `6px 6px 0 rgba(15, 27, 61, 0.15)` — soft navy offset for non-featured tier cards on light surfaces.\n- `{shadows.card-featured}` = `8px 8px 0 {colors.neon-yellow}` — neon-yellow offset for featured tier cards, paired with a `-12px` translateY lift.\n\n### Corner Brackets as Depth\nThe L-shaped corner brackets (`{components.pixel-corner-bracket}`) replace traditional border treatments on regions and cards. Two brackets at opposite corners imply a frame without enclosing it — the eye fills in the missing edges. On stat blocks and feature cards, brackets sit inset at `top: -2px / left: -2px` and `bottom: -2px / right: -2px` so they break the cell edge slightly, reinforcing the pixel-bevel feel.\n\n### Atmospheric Depth\nThe scanline + grain + CRT-vignette stack provides ambient depth on every surface without requiring shadow on individual elements. Animated starfields and floating particles layer additional spatial cues behind content. None of these are decorative add-ons — they are core to the depth perception of the system.\n\n## Shapes and Treatment\n\n### Border Radius\nEffectively zero. The only round shape that appears anywhere is the donut-style nav dot inner-fill (which is still a square in this system — the nav dots are square pips, not circles). Rounded buttons, rounded cards, or rounded pill chips break the pixel-art aesthetic immediately.\n\nThe pixel-face avatar zone uses square eyes and a rectangular mouth — anatomy rendered in pixels, not curves.\n\n### Border Weights\n- **2px solid** — used on feature-card outlines, hero badges, nav dots, stat-block frames, chart bars (inline edges).\n- **3px stroke** — used for chart axes inside SVG charts (deep-navy).\n- **4px solid** — used on corner brackets, timeline node borders, the quote-line, and the inner pixel-bevel of buttons.\n\nBorders are always solid, always navy or neon, never dashed except for the timeline rail (`{components.timeline-rail}`) which is intentionally rendered as a 16px-on, 8px-off repeating linear gradient to mimic a pixel-dashed line.\n\n### Decorative Element Types\n\n**Pixel corner bracket** — Two outward L-shapes (top-left + bottom-right) bracketing a region. 24×24 with 4px stroke. Default color is cyan; yellow and pink variants exist. The bracket pattern is the system's most distinctive non-typographic mark.\n\n**Label pill** — Navy rectangle with neon-yellow Space Mono text at 12px / 0.2em. The universal section eyebrow. Variants flip the text color to cyan or pink while keeping the navy fill.\n\n**Hero badge** — Outline-only 2px yellow border with yellow Space Mono text. Appears in clusters under hero titles as feature tags.\n\n**Stat block** — Cyan-tinted glass tile (8% cyan fill, 20% cyan border) with cyan corner brackets at top-left and bottom-right. Holds a large stat numeral over a Space Mono pink label.\n\n**Feature card** — Frosted-glass white card (15% white fill, blur) with navy corner brackets at opposite corners. Used on colored-grid surfaces.\n\n**Pixel button** — Cyan rectangle with the six-step stacked shadow cascade. On hover, the button translates +2/+2 and the shadow collapses to a 4-step cascade — simulating a key-press in pixel art.\n\n**Quote-line** — A 60×4 yellow rectangle with a 4×4 navy offset shadow. Used as a separator beneath quote bodies.\n\n**Timeline node** — 24×24 cyan square with a 4px navy border, positioned on a dashed navy rail. Active state swaps fill to yellow.\n\n**Date chip** — Inline 2px-padded navy pill with cyan Space Mono text, used to mark timeline events.\n\n**Pixel face** — A 120×120 grouping of square \"facial features\" (cyan eyes, pink mouth) rendered as absolutely positioned divs inside a navy avatar zone. Functions as both a friendly mascot and a system-signature decorative module.\n\n**Tier card** — White rectangle, 6px navy offset shadow. Featured tier swaps fill to deep-navy and shadow to 8px yellow, with a `-12px` translateY lift. Tier features use a `+` ::before glyph in cyan instead of standard bullets.\n\n**Pixel landscape** — A row of variable-height navy mountains at the bottom of CTA-class surfaces, opacity 0.3. Pure decoration suggesting an arcade horizon.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply the scanlines + grain + CRT-vignette overlay stack to every slide. The atmosphere is the design system; surfaces without it look like wireframes.\n- Use `{colors.neon-cyan}` as the default headline color on dark surfaces and `{colors.deep-navy}` as the default headline color on colored grids (pink/cyan/lavender).\n- Apply `{shadows.pixel-text-shadow}` to every pixel-hero element and `{shadows.pixel-text-shadow-small}` to every stat numeral. Tektur display type without its text-shadow reads flat.\n- Snap every measurement to the 4px pixel unit — border widths, shadow offsets, padding, corner-bracket dimensions. Off-grid values break the rasterized feel.\n- Use Tektur for display, Chakra Petch for body, Space Mono for chrome — exclusively. Cross-mixing the three voices flattens the system.\n- Wrap eyebrows in the `{components.label-pill}` (navy bg, yellow Space Mono text, 0.2em tracking, uppercase) as the universal section tag.\n- Pair the navy ground with at least one neon glow per region — text, chart bar, corner bracket, or button shadow halo. Pure navy without a neon accent reads as dead screen.\n- Layer animated starfields and pixel-particle floaters on dark hero and CTA surfaces. The motion is part of the atmosphere.\n- Render charts with cyan → pink → yellow series order and Space Mono numerals/labels. The neon trio is the chart palette.\n- Bracket cards and stat tiles with the L-shaped corner brackets at opposite corners instead of fully outlining them. The implied frame is the system's signature card treatment.\n\n### Don't\n\n- Don't substitute fonts. Tektur, Chakra Petch, and Space Mono are the three voices — replacing any of them with Inter, Roboto, or Space Grotesk collapses the system.\n- Don't round any corner. The pixel aesthetic depends on square edges. Border-radius is reserved for SVG donut chart geometry only.\n- Don't blur any shadow. Every shadow is hard-edged at zero blur. `0 4px 12px rgba(0,0,0,0.1)` does not exist here.\n- Don't place neon text on neon surfaces. Cyan headlines on the pink grid become illegible — switch to deep-navy on colored grounds.\n- Don't use Tektur in sentence-case body runs or Chakra Petch in chrome/labels. Each face has a single role.\n- Don't introduce a fourth neon. The palette is cyan + pink + yellow + lavender pastel. Adding green or orange breaks the curated neon trio.\n- Don't omit the atmospheric overlay stack on any slide, even chart-heavy or table-heavy slides. The overlays are non-negotiable.\n- Don't use uppercase Chakra Petch body text. Body always sentence-case; uppercase is reserved for Space Mono and Tektur display.\n- Don't drop the navy label pill in favor of a plain text eyebrow. The pill is the most recognizable small chrome in the system.\n- Don't shadow text or chrome with off-axis offsets. Every shadow steps down-right in 4px increments — left or upward offsets do not exist.\n\n## Responsive Behavior\n\n8-Bit Orbit is a **viewport-fluid system** built around `vw/vh`-based sizing and CSS `clamp()` ranges. There are no hard breakpoints for the deck itself — every font size, padding value, and gap interpolates between a minimum and maximum based on viewport width.\n\n### Scaling Behavior\n- Hero text scales 48px → 128px on viewport width.\n- Stat numerals scale 32px → 56px.\n- Body scales 14.4px → 18.4px.\n- The 4px pixel unit, 40px grid size, scanline 4px stripe, and corner-bracket dimensions are fixed — they do not scale, which means at larger viewports the pixel chrome appears proportionally finer (intentionally — the larger the canvas, the smaller and more refined the pixels read).\n\n### Component Breakpoints\nThree component-level breakpoints exist:\n- `max-width: 1024px` — feature grid collapses 4→2 columns, two-column split layouts stack.\n- `max-width: 900px` — feature grid further collapses, hbar chart label column shrinks.\n- `max-width: 500px` — feature grid becomes single column, stats grid stacks.\n\n### Presenter Behavior\n- Slides advance via `ArrowDown`, `ArrowRight`, or `Space`.\n- Slides reverse via `ArrowUp` or `ArrowLeft`.\n- `Home` jumps to first, `End` to last.\n- Vertical swipe on touch devices advances/reverses with a 50px threshold.\n- Mouse wheel scroll advances/reverses with an 800ms debounce lock.\n- Slide transitions use 800ms cubic-bezier `(0.22, 1, 0.36, 1)` on a translateY transform.\n\n### Animation Triggers\nChart bars and stat counters animate in on slide entry with `setTimeout` staggers (100-150ms between items). When a slide is exited, its bars/counters reset to 0 so re-entry replays the animation. The `prefers-reduced-motion` media query disables transitions and the starfield/particle twinkle keyframes.\n\n### Print Behavior\nThe system has no `@media print` rule. The deck is screen-first; printing produces only the active slide. For static export, screenshots of each slide preserve all atmospheric overlays (scanlines and grain are CSS-rendered, not assets).\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / stat numerals | Tektur 700–900 | 思源黑体 Noto Sans SC 900 |\n| Body / hero tagline / quote body | Chakra Petch 400–500 | 思源黑体 Noto Sans SC 400 |\n| HUD labels / badges / chart values / counter | Space Mono 400–700 (uppercase + wide tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) — see Known CJK Gap below |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family with built-in Latin glyph coverage. Set every text element to `font-family: 'Noto Sans SC', sans-serif`. 思源黑体 ships Latin glyphs that read cleanly alongside Chinese characters, so a sentence like `使用 Tektur 字体` renders in one consistent face rather than font-switching mid-word. This system normally runs three faces (display / body / HUD); collapsing to one CJK face is the right tradeoff because none of the three Latin faces have credible Chinese counterparts, and visual hierarchy still works through weight (900 / 700 / 500 / 400) plus the system's signature shadow stacks.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.7–1.8), display 1.15–1.25 (up from 1.05–1.15). CJK characters are square and visually full — they crowd vertically more than Latin.\n- **Letter-spacing**: set to 0 on every CJK run. The template's positive tracking on Tektur display (+0.04em) and 0.1–0.3em mono tracking on Space Mono labels looks broken on square CJK glyphs — they're already evenly spaced by design.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Space Mono label in this system uses `text-transform: uppercase`; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `8 位赛博 / 1989 模式` not `8位赛博/1989模式`.\n- **One font per sentence**: 思源黑体 covers both CJK and Latin glyphs in a unified style — let it handle mixed sentences. Don't let the browser fall back to Tektur or Space Mono mid-sentence for ASCII characters.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on three voices — Tektur (chunky arcade display), Chakra Petch (humanist body), Space Mono (HUD readouts) — and a CJK build cannot preserve that three-face contrast. Compensate by leaning harder on the **non-typographic** signature elements: the stacked text-shadow (yellow at +4/+4, navy at +8/+8) still works on 思源黑体 900 headlines and is what carries the arcade voice when the face itself is generic. Keep all atmospheric overlays (scanlines, grain, CRT vignette, starfields, grid wallpaper) — they do more identity work in a CJK build than in the Latin original.\n\nThe system's Space Mono label-pill (navy fill, neon-yellow text, 0.2em tracking, uppercase) is the most recognizable small chrome and translates poorly: CJK characters won't accept the wide tracking or uppercase transform. Render Chinese label-pills with 思源黑体 weight 500 at 0 tracking, no transform, and a slightly tighter fontSize (10–11px instead of 12px) to preserve the chip's compact silhouette. The colored pill background and corner-bracket framing carry the recognition load.\n\n### Known CJK Gap\n\n- **No CDN-loadable Chinese pixel font.** The system's arcade aesthetic depends on Tektur's semi-pixel grotesque character — there is no equivalent Chinese face on Google Fonts or major CDNs that reads as \"pixel-art\" while remaining legible. 思源黑体 at weight 900 gives heft but loses the pixel-grid signal entirely. The atmospheric overlays (scanlines, grain, vignette, starfields) and pixel-bevel shadow stacks must carry the arcade voice on their own.\n- **No CDN Chinese monospace face for HUD labels.** Space Mono's \"system readout\" voice depends on monospaced rhythm + uppercase + 0.1–0.3em tracking — none of which transfer to CJK. The label-pill loses its mono character; lean on the navy fill + neon text + corner-bracket framing to keep chrome recognizable.\n\n## Iteration Guide\n\n1. Any new slide gets the full atmospheric overlay trio (scanlines + grain + crt-glow on dark surfaces, scanlines + grain on colored surfaces) and a 40px etched grid surface. Don't skip the overlays.\n2. Any new display element uses Tektur. Any new body element uses Chakra Petch. Any new label, badge, counter, or chart value uses Space Mono. Never cross the role boundaries.\n3. Any new headline gets `{colors.neon-cyan}` on dark surfaces or `{colors.deep-navy}` on colored grids — both with the appropriate Tektur weight and (for hero scale) the stacked text-shadow.\n4. Any new eyebrow uses the `{components.label-pill}` — navy fill, neon-yellow Space Mono text at 12px / 0.2em / uppercase. Don't substitute a plain h-tag.\n5. Any new card or region gets the L-shaped corner brackets at opposite corners (top-left + bottom-right) instead of a full outline. The implied frame is the system's signature.\n6. Any new measurement snaps to the 4px pixel unit. Borders 2-4px, shadow offsets 4px / 8px, corner brackets 24px, grid 40px. Off-grid values feel wrong.\n7. Any new shadow is hard-edged at zero blur. For buttons use the six-step cascade; for cards use 6px navy or 8px yellow; for text use the two-layer cascade.\n8. Any new chart cycles cyan → pink → yellow in series order. Numerical labels and axis labels are always Space Mono.\n9. If a surface needs to feel warmer or softer, switch to the pink, cyan, or lavender etched grid variant — but keep all typographic rules intact (navy headlines, softened-navy body).\n10. Animated elements (starfield, particles, chart bar grow, counter rollup) should respect `prefers-reduced-motion`. Atmospheric overlays (scanlines, grain, vignette) are not animated and stay on always.\n\n## Known Gaps\n\n- **Tektur, Chakra Petch, and Space Mono are Google Fonts** loaded via a preconnect + `<link>`. The system has no fallback strategy beyond `cursive` / `sans-serif` / `monospace` — in environments where Google Fonts fail (offline, restricted networks), the aesthetic collapses to system defaults and loses its character.\n- **Starfield and pixel-particle elements are generated by inline JS** that creates a fixed count of absolutely-positioned divs with random positions and animation delays. The animation keyframes are present in CSS, but the elements are only created if the JS runs successfully.\n- **The chart system is hardcoded**: bar heights, hbar widths, and stat counter targets are stored in `data-*` attributes and animated via `setTimeout` staggers triggered by slide-index matching. There is no data-binding layer — adding a new chart requires copying the HTML pattern and updating the JS slide-index matcher.\n- **The pixel-landscape on CTA surfaces is JS-generated** from a hardcoded heights array `[30, 50, 70, ...]`. Width varies per mountain (60 + (i % 3) * 20px). Replacing the landscape requires editing the JS heights array.\n- **The CRT vignette glow uses a fixed dark-navy radial gradient.** Adjusting it requires editing the CSS gradient stops; there is no tokenized vignette intensity.\n- **The cursor is set to `crosshair` deck-wide** for atmospheric reasons. This may conflict with text-selection expectations in contexts where the deck is embedded.\n- **No keyboard navigation hint exists for the wheel/touch fallback.** The nav-hint reads `USE KEYS ↑ ↓` even though wheel and touch are also wired up.\n- **The slide counter format is fixed at `NN / NN` zero-padded.** Decks with more than 99 slides would render with a layout-shifting counter.\n- **The pixel-corner-bracket sizing is fixed at 24×24 with 4px stroke** and does not scale with viewport. On very large or very small viewports the brackets may feel proportionally off.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/preview.md":"# 8-Bit Orbit Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/8-bit-orbit/design.md`\n- Preview card: `bold-template-pack/templates/8-bit-orbit/preview.md`\n\n## Selection Metadata\n\n- Slug: `8-bit-orbit`\n- Tagline: Pixel-art neon arcade aesthetic on a deep navy void.\n- Mood: retro-tech, playful, cyberpunk, energetic\n- Tone: geeky, neon, rebellious, sci-fi\n- Formality: low\n- Density: medium\n- Scheme: dark\n- Best for: Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos. Just as good for a tech talk that wants to lean into nostalgic-digital craft, a synthwave brand deck, or a creative review that wants to feel like a console.\n- Avoid for: Contexts where the dark neon palette would actively work against the message — quiet institutional finance disclosures, healthcare patient-facing materials, traditional luxury.\n\n## Visual Snapshot\n\nA retro-futuristic pixel-art presentation system that fuses 16-bit arcade nostalgia with editorial discipline. Display type runs in Tektur (a chunky geometric display face built on pixel-grid logic) paired with Chakra Petch for body and Space Mono for code-flavored labels and tabular data. The palette pivots on a deep cosmic navy (#0F1B3D / #0A0E27) lit by three saturated neons — cyan, hot pink, and a high-key yellow — with a soft lavender pastel for warm reprieves. Depth is built from stacked hard offset shadows in 4px increments (the pixel unit), CRT scanlines, atmospheric grain, vignettes, and animated starfields. The effect sits between an arcade cabinet and a Tron-era boardroom — unmistakably digital, intentionally lo-fi, and engineered to feel as if it just booted up.\n\n8-Bit Orbit is a retro-futuristic pixel-art presentation system. Its foundational premise is the 4-pixel unit: every shadow offset, every border, every corner bracket, every label height resolves to a multiple of 4px. Layouts feel as if they were rasterized on an old CRT and dragged into HTML — and atmospheric overlays (scanlines, grain, vignette glow, animated starfields) reinforce the illusion on every surface.\n\n## Preview Ingredients\n\n- Palette: dark-void #0A0E27; deep-navy #0F1B3D; neon-cyan #5EDCF4; neon-pink #F0A6CA; neon-yellow #F4D03F; soft-lavender #E2D5F2; white #FFFFFF\n- Typography: See full design doc after selection.\n- Signature move: Three-font stack: Tektur (display), Chakra Petch (body), Space Mono (HUD/labels) — never substitute, never mix outside their roles.\n- Signature move: Navy ground ({colors.dark-void} / {colors.deep-navy}) alternates with colored-grid surfaces (pink, cyan, lavender) — both carry the 40px etched grid.\n- Signature move: Three neons (cyan, pink, yellow) reserved for display, stats, rules, and label fills — never for body text.\n- Signature move: All measurements snap to the 4px pixel unit: borders 2-4px, shadow offsets 4px / 8px, corner brackets 24×24 with 4px stroke.\n- Signature move: Stacked hard offset shadows are the system's depth language — never blurred, never colored on text shadows except in the yellow→navy cascade.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/design.md":"---\nversion: alpha\nname: Biennale Yellow\ndescription: \"A literary-editorial presentation system in the visual register of an art biennale catalogue or quiet exhibition poster. The aesthetic is built on warm parchment grounds (`#E9E5DB`) flooded with soft solar yellow (`#F1EE2E`) radial blooms, set against a single deep indigo navy ink color. Display type is Instrument Serif — a contemporary high-contrast serif with tall ascenders and elegant italics — paired with Archivo for sans-serif chrome and JetBrains Mono for numerical and metadata callouts. No drop shadows, no rounded corners, no bordered cards: the only structural lines are hairline 1px rules in ink. The mood sits between a folded museum brochure, a slow-reading literary quarterly, and a Mediterranean exhibition poster — confident, atmospheric, and deeply restrained.\"\n\ncolors:\n  paper: \"#E9E5DB\"\n  paper-deep: \"#DCD6C4\"\n  sun: \"#F1EE2E\"\n  sun-soft: \"#F8F39B\"\n  haze: \"#F0DA7C\"\n  ink: \"#1B2566\"\n  ember: \"#E26B4A\"\n\ncolor-aliases:\n  line: ink\n\ntypography:\n  display:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, min(14.6vw, 22vh), 240px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-md:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(80px, min(10vw, 16vh), 200px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-sm:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(110px, min(11vw, 18vh), 200px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-it:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontStyle: italic\n    fontSize: \"clamp(56px, min(7vw, 11vh), 120px)\"\n    lineHeight: 1.04\n    letterSpacing: -0.005em\n  numeral-jumbo:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(220px, min(28vw, 64vh), 720px)\"\n    lineHeight: 0.84\n    letterSpacing: -0.04em\n  numeral-lg:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, min(15vw, 22vh), 280px)\"\n    lineHeight: 0.9\n    letterSpacing: -0.04em\n  numeral-md:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(72px, min(7vw, 12vh), 144px)\"\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n  headline:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(40px, min(4.6vw, 7vh), 88px)\"\n    lineHeight: 1.06\n    letterSpacing: -0.005em\n  headline-sm:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, min(3.6vw, 6vh), 56px)\"\n    lineHeight: 1\n  date-rail:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(48px, min(5.2vw, 9vh), 96px)\"\n    lineHeight: 0.96\n    letterSpacing: -0.005em\n  ledger-title:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(20px, 1.6vw, 30px)\"\n    lineHeight: 1.15\n  strand-title:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(22px, 1.7vw, 32px)\"\n    lineHeight: 1.1\n  strand-num:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 2vw, 38px)\"\n    lineHeight: 1\n  body-lede:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(15px, 1.05vw, 18px)\"\n    lineHeight: 1.55\n  body:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    lineHeight: 1.5\n  body-sm:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 0.78vw, 13px)\"\n    lineHeight: 1.5\n  micro-label:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(11px, 0.85vw, 14px)\"\n    lineHeight: 1.2\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  micro-label-tight:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.72vw, 12px)\"\n    lineHeight: 1.2\n    letterSpacing: 0.16em\n    textTransform: uppercase\n  rail-label:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    lineHeight: 1\n    letterSpacing: 0.32em\n    textTransform: uppercase\n  mono-data:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 0.85vw, 14px)\"\n    lineHeight: 1.4\n    letterSpacing: 0.04em\n  mono-date:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 0.95vw, 16px)\"\n    lineHeight: 1.4\n    letterSpacing: 0.02em\n  pagenum:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    lineHeight: 1\n    letterSpacing: 0.08em\n\nspacing:\n  pad-edge: \"clamp(40px, 4vw, 76px)\"\n  pad-region: \"clamp(40px, 4.2vw, 80px)\"\n  pad-foot: \"clamp(56px, 5vh, 88px)\"\n  pad-strand-y: \"clamp(12px, 1.6vh, 22px)\"\n  gap-region: \"clamp(20px, 2.5vw, 48px)\"\n  gap-strand: \"clamp(14px, 1.8vh, 22px)\"\n  gap-footer-col: \"clamp(20px, 2.4vw, 44px)\"\n  pagenum-bottom: \"clamp(22px, 2.4vh, 42px)\"\n  pagenum-right: \"clamp(24px, 2.4vw, 48px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.paper}\"\n\ncomponents:\n  pagenum:\n    position: \"absolute, right + bottom\"\n    color: \"{colors.ink}\"\n    opacity: 0.75\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    letterSpacing: 0.08em\n    description: \"Single mono pagenum NN / NN pinned to bottom-right of every slide at 75% opacity. The only persistent chrome on every surface.\"\n  hairline-rule:\n    border: \"1px solid {colors.ink}\"\n    description: \"1px solid ink horizontal or vertical rule. The system's only border treatment — separates header bands from content, footer columns from each other, ledger rows from each other. No thicker rule exists.\"\n  hairline-rule-soft:\n    border: \"1px solid rgba(27, 37, 102, 0.18-0.2)\"\n    description: \"1px ink at 18-20% opacity. Used for between-row separators inside dense ledger or strand lists where a full-weight rule would feel oppressive.\"\n  sun-bloom:\n    background: \"radial-gradient using {colors.sun} {colors.sun-soft} {colors.haze} blending to transparent on {colors.paper}\"\n    description: \"Large soft radial bloom of solar yellow placed off-center or behind a focal element. The system's primary atmospheric layer. Sized 42-70% of viewport in the larger axis.\"\n  ember-bloom:\n    background: \"radial-gradient using {colors.ember} at 15-22% opacity blending to transparent\"\n    description: \"Small warm peach bloom used as a counter-temperature accent in a corner opposite the sun bloom. Always subordinate; never dominant.\"\n  block-tile:\n    background: \"{colors.sun} at 40-70% opacity\"\n    description: \"Geometric blocks of translucent solar yellow placed on an 8-row × 4-column grid behind cover or colophon surfaces. Suggests a layered poster underprint.\"\n  yellow-panel:\n    background: \"{colors.sun}\"\n    color: \"{colors.ink}\"\n    description: \"Full-bleed yellow panel covering a column or third of the slide. The strongest possible color statement — used when a region needs to read as poster-fill, not paper.\"\n  bar-ink:\n    background: \"{colors.ink}\"\n    height: \"clamp(14px, 1.6vh, 22px)\"\n    description: \"Solid ink horizontal bar for data charts. Width carries the data value.\"\n  bar-lit:\n    background: \"{colors.sun}\"\n    border: \"1px solid {colors.ink}\"\n    height: \"clamp(14px, 1.6vh, 22px)\"\n    description: \"Highlighted variant of bar-ink — yellow fill with 1px ink stroke. Used to mark the current or featured row in a series.\"\n  strand-row:\n    layout: \"grid 56px 1fr, gap clamp(14px, 1.4vw, 24px), border-bottom hairline-soft, padding-bottom clamp(12px, 1.6vh, 22px)\"\n    description: \"Numbered editorial list row — numeral cell + content cell separated by hairline-soft. Used for programmes, agendas, and curated lists.\"\n  ledger-row:\n    layout: \"grid 92px 1.6fr 0.9fr 80px, gap clamp(14px, 1.4vw, 28px), border-bottom hairline-soft, padding clamp(10px, 1.3vh, 18px) 0\"\n    description: \"Four-column tabular row for calendars and itineraries. Date column is mono, title is serif, venue is sans, duration is mono right-aligned.\"\n  footer-band:\n    layout: \"grid 4-column with hairline-rule top border on each cell, gap clamp(20px, 2.4vw, 44px)\"\n    description: \"Four-column metadata strip pinned to the bottom of cover and colophon surfaces. Each cell has a tiny uppercase tag + a brief plain-English statement.\"\n  vertical-rail:\n    transform: \"rotate(-90deg) translateY(-50%) at left edge\"\n    fontFamily: \"'Archivo', sans-serif\"\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    letterSpacing: 0.32em\n    textTransform: uppercase\n    description: \"Rotated vertical text label running up the left edge. Used on chapter/divider surfaces as a section marker.\"\n  date-rail-stack:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontSize: \"clamp(48px, min(5.2vw, 9vh), 96px)\"\n    lineHeight: 0.96\n    textAlign: right\n    description: \"Large serif date or date-range stacked at top-right of cover surfaces. Uses an en-dash to indicate spans.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBiennale Yellow is a **literary-editorial presentation system** modeled on the visual language of European art biennale catalogues, slow exhibition posters, and quarterly literary publications. There are no cards, no buttons, no shadows, no rounded corners. The structural vocabulary is just three things: paper, ink, and yellow.\n\nThe typographic system pivots on **Instrument Serif**, a contemporary high-contrast serif with tall ascenders, elegant italics, and slightly flared terminals. It carries every display moment, every numeral, every quote — at scales ranging from headline-small (40px) to jumbo numerals over 700px. Set tight (line-height 0.86, letter-spacing −0.018em), it reads as confident editorial display; set looser in italic (line-height 1.04, letter-spacing −0.005em), it becomes a slow-reading quotation face. **Archivo** is the sans companion — used for body paragraphs and as small, wide-tracked uppercase labels (the \"micro-label\" treatment). **JetBrains Mono** handles all numerical and metadata callouts: dates, ledger figures, page numbers. The three-face system is rigid and disciplined; the contrast between them is the entire typographic story.\n\nThe color world is built on **warm parchment** (`{colors.paper}` — `#E9E5DB`) as the universal ground, marked by a single **ink** color (`{colors.ink}` — `#1B2566`, a deep indigo navy) used for every line of type and every rule. The system's signature color is **sun** (`{colors.sun}` — `#F1EE2E`), a highly saturated solar yellow used as a flooded panel, as a soft blooming radial gradient, or as a geometric tile underprint. A **soft ember peach** (`{colors.ember}` — `#E26B4A`) appears only as a subordinate counter-temperature accent, always at 15-22% opacity in a corner radial bloom. Inverted color treatments are not used; the system commits to navy ink on a warm ground.\n\nDepth is **atmospheric, not structural**. There are no drop shadows anywhere in the system. Depth comes from layered radial gradients of yellow (the sun-bloom and ember-bloom components) and the optional block-tile underprint on cover-class surfaces. Cards have no borders; regions are separated only by 1px hairline rules in ink. The lack of border weight is itself the aesthetic — the design feels printed, not engineered.\n\n**Density philosophy: editorial-restrained.** This system reads as elegant when sparse and broken when crowded. A typical surface holds one large display moment + a handful of supporting elements (a micro-label, a body paragraph, an ordered list, or a single radial bloom). Crowding the canvas with cards, buttons, panels, or stacked components turns the system into a different aesthetic entirely. Even dense surfaces (a calendar or programme) achieve density through tabular repetition, not visual richness — many quiet rows of hairline-separated metadata, not many bordered cells. Generous edge padding (40-76px) and wide footer/header bands let the canvas breathe.\n\n**Key Characteristics:**\n- Warm parchment ground (`{colors.paper}`) on every surface; never white, never gray.\n- Single ink color (`{colors.ink}`) for all text and all rules — no secondary text colors.\n- Solar yellow (`{colors.sun}`) deployed three ways: as a flooded panel, as a soft radial bloom, as a translucent geometric tile underprint.\n- Instrument Serif handles every display moment at scales from 40px to 720px+.\n- Archivo Bold uppercase + 0.16–0.32em tracking is the universal label voice.\n- JetBrains Mono is reserved exclusively for dates, ledger numerals, and page numbers.\n- 1px hairline rules in `{colors.ink}` are the only border treatment — used for header bands, ledger rows, footer columns, and strand separators.\n- No drop shadows, no rounded corners, no card outlines, no buttons. Decoration is atmospheric (radial blooms) or geometric (translucent tile blocks).\n- Persistent `01 / NN` JetBrains Mono pagenumber at bottom-right of every surface at 75% opacity.\n- Optional vertical rotated rail-label at the left edge of chapter/divider surfaces.\n\n## Colors\n\n### Palette\n\n- **Paper** (`{colors.paper}` — `#E9E5DB`): The warm parchment canvas. The default and near-universal background. Reads as a softened off-white with strong warmth — never neutral, never cold.\n- **Paper-deep** (`{colors.paper-deep}` — `#DCD6C4`): A slightly darker parchment tone, available as a secondary surface or to suggest a shadow band without using actual shadow. Reserved for moments that need surface differentiation while staying within the warm-paper family.\n- **Ink** (`{colors.ink}` — `#1B2566`): The single text and line color across the entire system. A deep indigo navy that reads as confident editorial black-with-blue-bias. Used for headlines, body, micro-labels, monos, hairline rules, and ink-bar fills. The `--line` CSS variable resolves to this same color.\n- **Sun** (`{colors.sun}` — `#F1EE2E`): The system's signature solar yellow. Highly saturated, slightly green-leaning. Used three ways: as a flooded full-bleed or column-bleed panel, as the core of soft radial blooms, and as 40-70% opacity geometric tile blocks.\n- **Sun-soft** (`{colors.sun-soft}` — `#F8F39B`): A paler buttery yellow used in the middle stops of sun-bloom gradients to soften the transition from saturated sun to paper.\n- **Haze** (`{colors.haze}` — `#F0DA7C`): A warmer mustard-leaning yellow used in the outermost stops of sun-bloom gradients to extend the bloom into the paper without a hard edge.\n- **Ember** (`{colors.ember}` — `#E26B4A`): A warm peach-orange used only as a subordinate counter-temperature accent in 15-22% opacity radial blooms. Never used as a fill color, never as a text color. Its job is to balance a sun-bloom on the opposite side of the canvas.\n\n### Defaults\n\n- **Default surface background**: `{colors.paper}`. Every surface starts here.\n- **Default headline color**: `{colors.ink}`. Always. Headlines never appear in yellow, ember, or paper-deep — only ink.\n- **Default body text color**: `{colors.ink}`. Body uses the same color as display; the contrast is achieved through size and weight, not color.\n- **Default rule color**: `{colors.ink}` (1px solid) for primary separators, ink at 18-20% opacity for secondary row separators.\n- **Default accent surface for poster moments**: `{colors.sun}` — a flooded panel of solar yellow with `{colors.ink}` text on top.\n- **Default atmospheric layer**: a single `{components.sun-bloom}` placed off-center on the surface, with an optional `{components.ember-bloom}` in the opposite corner.\n- **Default chart bar color**: `{colors.ink}`. The featured/current bar uses `{components.bar-lit}` (yellow fill, ink stroke).\n- **Default label color**: `{colors.ink}` for the text, no fill. Labels are tracking + uppercase + weight 600, not filled pills.\n\nThe system never inverts: ink text on a sun panel is correct (and a key signature treatment), but yellow text on an ink ground does not exist. Text is always ink; the variability lives in what's behind the text, not in the text color itself.\n\n## Typography\n\n### Font Family Stack\nThe system runs three faces, each with a tightly defined role.\n\n**Instrument Serif** (Google Fonts, italic + roman) is the display and editorial face. Its high contrast, tall ascenders, and slightly flared terminals give it a contemporary literary register — closer to a magazine masthead than a traditional book serif. Roman is used for headlines, numerals, ledger titles, and date rails. Italic is used for manifesto quotes and certain emphasis moments. Set tight (line-height ≤ 1.06, negative letter-spacing −0.005 to −0.04em).\n\n**Archivo** (Google Fonts) is the sans companion. Used at weight 400 for body paragraphs (line-height 1.5) and at weight 600 for the universal micro-label treatment (uppercase, 0.16-0.32em tracking, 10-14px). Never used at intermediate weights, never used for headlines.\n\n**JetBrains Mono** (Google Fonts) is the numerical/metadata face. Used exclusively for dates in ledgers, mono numerical callouts in data slides, page numbers, and the nav-hint. Its slab character gives editorial weight to numerical content without leaning on bold styling.\n\n### Typography Scale\n\n| Token | Size (clamp) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 120–240px | Instrument Serif | 400 | Cover-scale display title |\n| `{typography.display-sm}` | 110–200px | Instrument Serif | 400 | Editorial display in a panel context |\n| `{typography.display-md}` | 80–200px | Instrument Serif | 400 | Closing-statement display |\n| `{typography.display-it}` | 56–120px | Instrument Serif italic | 400 | Manifesto-scale italic quote body |\n| `{typography.numeral-jumbo}` | 220–720px | Instrument Serif | 400 | Chapter-divider ordinal numeral |\n| `{typography.numeral-lg}` | 120–280px | Instrument Serif | 400 | Decorative quotation mark, oversized punctuation |\n| `{typography.numeral-md}` | 72–144px | Instrument Serif | 400 | Hero stat figure |\n| `{typography.headline}` | 40–88px | Instrument Serif | 400 | Primary section headline, large quote body |\n| `{typography.headline-sm}` | 32–56px | Instrument Serif | 400 | Region headline, ledger/calendar topbar |\n| `{typography.date-rail}` | 48–96px | Instrument Serif | 400 | Date or date-range stacked at top of a surface |\n| `{typography.ledger-title}` | 20–30px | Instrument Serif | 400 | Title cell inside a calendar/ledger row |\n| `{typography.strand-title}` | 22–32px | Instrument Serif | 400 | Title inside a numbered strand/list row |\n| `{typography.strand-num}` | 28–38px | Instrument Serif | 400 | Numeral cell inside a strand row |\n| `{typography.body-lede}` | 15–18px | Archivo | 400 | Lede paragraph following a chapter headline |\n| `{typography.body}` | 14–16px | Archivo | 400 | Standard body paragraph |\n| `{typography.body-sm}` | 11–13px | Archivo | 400 | Footer-band body text, dense metadata |\n| `{typography.micro-label}` | 11–14px | Archivo | 600 | Universal uppercase eyebrow label |\n| `{typography.micro-label-tight}` | 10–12px | Archivo | 600 | Smaller uppercase label inside footer cells |\n| `{typography.rail-label}` | 11–13px | Archivo | 600 | Vertical rotated rail label |\n| `{typography.mono-data}` | 12–14px | JetBrains Mono | 400 | Chart year/value labels, mono inline data |\n| `{typography.mono-date}` | 13–16px | JetBrains Mono | 400 | Date column in calendar ledgers |\n| `{typography.pagenum}` | 11–13px | JetBrains Mono | 400 | Persistent page number |\n\n### Defaults\n\n- **Default size for a cover-scale display headline**: `{typography.display}` (120–240px clamp). Anything smaller reads as section-level, not cover-level.\n- **Default size for a primary section headline**: `{typography.headline}` (40–88px clamp).\n- **Default size for a chapter-divider numeral**: `{typography.numeral-jumbo}` (220–720px clamp). Don't shrink — the jumbo numeral is the point of a divider surface.\n- **Default size for a hero statistic**: `{typography.numeral-md}` (72–144px clamp). Stat figures share the same serif as headlines — they are display moments, not data chrome.\n- **Default size for a paragraph body**: `{typography.body}` (14–16px). For a lede after a chapter headline, step up to `{typography.body-lede}` (15–18px).\n- **Default size for any eyebrow label**: `{typography.micro-label}` (11–14px) at weight 600, uppercase, 0.18em tracking.\n- **Default weight for any Archivo body**: 400. Archivo body at any other weight breaks the rhythm.\n- **Default weight for any micro-label**: 600. Labels at weight 400 or 700 read as either timid or oversized.\n- **Default tracking for any uppercase label**: 0.16em minimum, 0.32em maximum. Labels without wide tracking read as code, not editorial.\n\nWhen unsure which display token to reach for, default to `{typography.headline}` (40–88px) for the primary moment, and `{typography.numeral-md}` (72–144px) for a single hero statistic. The display, display-sm, and display-md tokens are reserved for cover/colophon/poster-scale moments.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every display, numeral, headline, and ledger-title element is Instrument Serif at weight 400.** Bold serif display does not exist in this system — the face's contrast is its weight signal. Setting Instrument Serif at weight 700 collapses the entire elegance.\n- **Every Instrument Serif display element uses tight line-height (0.84–1.06).** Generous line-height on display destroys the editorial poster feel — large serif headlines must feel stacked, not aerated.\n- **Every Instrument Serif display element uses negative letter-spacing.** Display, headline, jumbo numerals at −0.018 to −0.04em; italic display at −0.005em. Without negative tracking, the wide-bodied glyphs read as untreated.\n- **Every micro-label is uppercase Archivo weight 600 with tracking ≥ 0.16em.** No exceptions. A label without uppercase + tracking is not a label in this system; it's a stray sans element.\n- **Every numerical metadata element (date, page number, chart value, calendar date) is JetBrains Mono.** Serif numerals are for display moments; mono numerals are for data chrome. Don't cross the line.\n- **Every italic manifesto-scale quote uses `{typography.display-it}`.** Setting an italic quote at headline scale (40–88px) reads as a smaller moment; the italic is meant to dominate.\n- **Every body paragraph is Archivo weight 400 with line-height ≥ 1.45.** Body in Instrument Serif does not exist — Instrument is for display only.\n\n### Typography Principles\n\nThe voice contrast is **slow elegant serif ↔ wide-tracked uppercase sans ↔ tabular mono**. Italic Instrument is the system's \"feeling\" voice (reserved for quotes and manifesto moments); roman Instrument is the \"statement\" voice; Archivo upper-tracked is the \"label\" voice; mono is the \"data\" voice. Each has a single job.\n\nMixing rules are tight: an `<em>` inside an Instrument Serif headline stays in italic Instrument Serif (no face switch). An `<em>` inside an Archivo body paragraph becomes italic Archivo, not a serif. Don't mix faces inline.\n\nColor is locked to ink on every element. There is no \"accent color text\" treatment in this system — accent is delivered through atmospheric blooms and panel fills, not text color.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and crossfade via opacity transition (280ms ease). Only one slide is `.active` at a time. Every measurement uses CSS `clamp()` with both vw and vh terms — typography clamps include `min(...vw, ...vh)` patterns so display type scales by whichever viewport axis is shorter.\n\n### Padding and Margin Scale\n\n| Token | Range | Use |\n|---|---|---|\n| `{spacing.pad-edge}` | 40–76px | Standard edge padding from any slide edge to content |\n| `{spacing.pad-region}` | 40–80px | Internal padding inside a flooded yellow panel or major region |\n| `{spacing.pad-foot}` | 56–88px | Bottom padding when the footer band is present |\n| `{spacing.gap-region}` | 20–48px | Gap between two major content columns/regions |\n| `{spacing.gap-strand}` | 14–22px | Gap between strand rows in a numbered list |\n| `{spacing.gap-footer-col}` | 20–44px | Gap between columns of the footer-band metadata strip |\n| `{spacing.pagenum-bottom}` | 22–42px | Bottom inset of the persistent pagenum |\n| `{spacing.pagenum-right}` | 24–48px | Right inset of the persistent pagenum |\n\n### Persistent Chrome\nThe **pagenum** is the only persistent on-canvas element. It appears at `bottom-right` of every slide in JetBrains Mono at 11–13px, color ink, opacity 0.75. A **nav-hint** (`← / → · space`) appears once, fixed to the bottom-left of the viewport in JetBrains Mono at 10–12px / opacity 0.4. The nav-hint is not part of the slide composition — it lives outside the `.stage`.\n\n### Edge Discipline\nEvery meaningful element respects a minimum 40px (mobile) to 76px (desktop) edge inset. The system's elegance depends on negative space at the edges — pushing content to the bleed (other than full-bleed panels, blooms, and tile blocks) breaks the catalogue feel.\n\n### Atmospheric Layer\nEvery slide may carry one or both atmospheric layers behind content:\n- A **sun-bloom** (`{components.sun-bloom}`) — a large soft radial gradient of solar yellow, sized 42-70% of viewport, placed off-center or behind a focal element.\n- An **ember-bloom** (`{components.ember-bloom}`) — a small warm peach radial gradient at 15-22% opacity, placed in a corner opposite the sun bloom.\n\nThese layers are not optional decoration — they are the system's primary depth mechanism. A surface without a bloom reads as flat parchment.\n\n## Depth and Elevation\n\n### No Drop Shadows\nThe system has **zero drop shadows**. No `box-shadow`, no `text-shadow`, no `filter: drop-shadow(...)`. Depth is delivered atmospherically.\n\n### Atmospheric Depth (Sun Bloom)\nThe primary depth mechanism is the **sun-bloom** — a large soft radial gradient of solar yellow blooming from a point on the canvas. Bloom anatomy is a layered radial gradient with three or four color stops:\n- 0%: `{colors.sun}` at 70-95% opacity (the hot core)\n- ~30-40%: `{colors.sun}` at 40-65% opacity (the bloom)\n- ~55-65%: `{colors.haze}` at 18-22% opacity (the soft extension)\n- 80-90%: `{colors.paper}` at 0% (smooth fade into ground)\n\nBloom size and position varies by surface need: cover surfaces use a centered or slightly-off-center bloom 42% × 38% of viewport; chapter surfaces use a corner-anchored 720px-radius bloom; closing surfaces use a bottom-anchored 55% × 50% bloom rising from below.\n\n### Counter-Temperature Accent (Ember Bloom)\nAn optional **ember-bloom** in a corner opposite the sun-bloom provides warm-cool color tension without raising the saturation of the canvas. Always at 15-22% opacity, always smaller than the sun-bloom, always subordinate.\n\n### Geometric Underprint (Block Tiles)\nOn cover and colophon surfaces, an additional **block-tile** layer can appear behind content — translucent solar yellow rectangles placed on an 8-row × 4-column grid system at 40-70% opacity. This layer suggests a layered poster underprint without committing to a solid panel. The tiles are decorative geometry, not active content regions.\n\n### Yellow Panel (Structural Color)\nFor surfaces that need the strongest possible color statement, a **yellow-panel** flood (`{components.yellow-panel}`) covers a column, half, or third of the canvas in saturated `{colors.sun}`. This is the only \"hard\" color treatment in the system — when a panel is used, ink text sits on top at full opacity. Panels do not have borders or shadows; they meet the paper edge or another panel edge directly.\n\n### Hairline Rules\nInternal structural depth is delivered by **1px solid ink hairline rules** separating header bands from content, ledger rows from each other, and footer columns from each other. Rules are never thicker than 1px. Between secondary list rows (e.g., strand separators), the rule drops to `rgba(27, 37, 102, 0.18-0.2)` — same color, lower opacity.\n\n## Shapes and Treatment\n\n### Border Radius\n**Zero, on everything.** Every shape is a strict rectangle. The radial blooms are technically circles but they have no visible edge — they fade into paper.\n\n### Border Weights\n- **1px solid `{colors.ink}`** — the universal rule. Used for header-band underlines, ledger row separators, footer-column tops, and the bordered chart bar accent on the lit row.\n- **1px solid `rgba(27, 37, 102, 0.18-0.2)`** — soft variant of the same rule. Used for secondary row separators inside dense lists where full-weight ink would feel heavy.\n\nThe system has **no thicker borders**. There are no 2px, 3px, or 4px outlines anywhere. The visual structure depends on the lightness of the hairline.\n\n### Decorative Element Types\n\n**Sun-bloom** — Large soft radial gradient of solar yellow placed off-center or behind a focal element. The system's primary depth mechanism. Always one per surface, sometimes paired with a counter-bloom.\n\n**Ember-bloom** — Small warm peach radial gradient at 15-22% opacity, placed in a corner opposite the sun-bloom. Subordinate atmospheric balance.\n\n**Block-tile underprint** — Translucent solar yellow rectangles placed on an 8×4 grid system. Decorative geometry suggesting a layered poster, used on cover and colophon-type surfaces.\n\n**Yellow panel** — A full-bleed column, half, or third of the canvas flooded with `{colors.sun}`. The system's strongest color statement. Carries ink text on top.\n\n**Hairline rule** — 1px solid ink. Used for header-band underlines, ledger separators, footer column tops. The system's only border.\n\n**Footer band** — A four-column metadata strip at the bottom of cover/colophon surfaces. Each cell has a `{components.hairline-rule}` top border, an Archivo micro-label, and a short body statement.\n\n**Strand row** — Numbered editorial list row with serif numeral cell + serif title + sans body, separated from the next row by a hairline-soft rule.\n\n**Ledger row** — Four-column tabular calendar/itinerary row: mono date + serif title + sans venue + mono duration (right-aligned), separated by hairline-soft rules.\n\n**Vertical rail label** — Rotated Archivo uppercase text running up the left edge of a chapter-divider surface, with 0.32em tracking.\n\n**Date rail** — Large serif date or date-range stacked at top-right of cover surfaces, often using an en-dash to indicate a span across years or months.\n\n**Jumbo numeral** — A single huge Instrument Serif numeral (220-720px) dominating a divider surface. Always serif, always at weight 400, always with tight line-height.\n\n**Chart bar** — A solid ink rectangle whose width carries the data value. The featured/current bar swaps to yellow fill with a 1px ink stroke (`{components.bar-lit}`). Chart layouts use grid-row patterns: mono year label + bar + mono value, separated by gap.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.paper}` as the universal background. Every surface starts on parchment.\n- Set every line of text in `{colors.ink}` — display, body, micro-label, mono, everything. The single text color is non-negotiable.\n- Use Instrument Serif at weight 400 with tight line-height (0.84-1.06) and negative letter-spacing (-0.018 to -0.04em) for every display moment. The serif's elegance lives in this configuration.\n- Add at least one `{components.sun-bloom}` to every surface. Atmospheric depth is the system's depth mechanism; a flat parchment surface reads as broken.\n- Pair a sun-bloom with an `{components.ember-bloom}` in the opposite corner when you want warm-cool tension without raising the overall saturation.\n- Use `{components.hairline-rule}` (1px solid ink) for every structural separator: header-band underline, ledger row, footer column, strand separator.\n- Set every uppercase label in Archivo weight 600 with 0.16-0.32em tracking. Without the wide tracking, labels read as code, not editorial.\n- Use `{components.yellow-panel}` (full-bleed sun column or panel) when a surface needs strongest color commitment — keep ink text on top at full opacity.\n- Place the persistent `{components.pagenum}` (JetBrains Mono, 75% opacity ink) at bottom-right of every surface.\n- Reserve JetBrains Mono exclusively for numerical and metadata callouts: dates, ledger figures, chart values, page numbers, nav-hint. Never use mono for display or body.\n\n### Don't\n\n- Don't add drop shadows. The system has zero box-shadows and zero text-shadows. Adding any blurred or offset shadow breaks the printed-paper feel immediately.\n- Don't round any corner. Every shape is strict rectangle. Border-radius is forbidden.\n- Don't use borders thicker than 1px. The hairline rule is the only border vocabulary; 2px, 3px, or 4px outlines do not exist.\n- Don't set Instrument Serif at weight 700 or any bold weight. The serif's character lives at weight 400; bold serif display flattens the system.\n- Don't introduce a second text color. Yellow text on paper, ember text anywhere, or muted-ink secondary text — none exist. Text is always full-opacity ink.\n- Don't crowd the canvas with cards or panels. The system reads as elegant when sparse. Bordered cards, button stacks, or multi-region grids of containers break the editorial restraint.\n- Don't invert: ink panels with yellow or paper text are not part of the system. Ink ground is reserved for chart bars and small rule elements only.\n- Don't substitute Inter, Helvetica, or system-ui for Archivo, or Times for Instrument Serif. The font selection is the visual identity; substitution collapses the aesthetic.\n- Don't use mono for body or headlines. JetBrains Mono is exclusively for numerical/metadata chrome.\n- Don't omit the bloom layer on a surface. A flat parchment slide reads as a CMS template; the bloom is the atmosphere that signals \"biennale\".\n\n## Responsive Behavior\n\nThis system is built as a **viewport-fluid 100vw × 100vh deck** with no responsive breakpoints. Every font size, padding value, and gap uses CSS `clamp()` with both vw and vh terms — `clamp(40px, min(4.4vw, 7vh), 88px)` is a typical pattern. Display type scales by whichever viewport axis is shorter, so portrait orientations don't blow out the headlines.\n\n### Scaling Behavior\n- Cover-scale display scales 120px → 240px.\n- Chapter-divider jumbo numeral scales 220px → 720px.\n- Headline scales 40px → 88px.\n- Body scales 14px → 16px.\n- Edge padding scales 40px → 76px.\n- Hairline rule (1px) and pagenum sizing (11-13px) are essentially fixed.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `PageDown`, or `Space`.\n- Slides reverse via `ArrowLeft` or `PageUp`.\n- `Home` jumps to first slide, `End` to last.\n- Horizontal touch swipe with a 40px threshold advances/reverses.\n- Slide crossfades at 280ms ease via `opacity` toggle on the `.active` class. Only the active slide is `pointer-events: auto`.\n\n### Print Behavior\nThe system has no `@media print` rule. The crossfade transition is screen-only. For static export, capturing each slide individually via screenshot preserves all atmospheric layers (the radial blooms are pure CSS gradients, not assets).\n\n### Mobile Behavior\nThe `min(vw, vh)` pattern in display clamps means narrow portrait viewports automatically shrink display type to fit. The strand and ledger rows use fixed-px first columns (56px, 92px) that may feel tight on narrow widths — the system is designed for landscape presentation contexts and is functional but not optimized for sub-768px portrait usage.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / numerals / headlines / date rail | Instrument Serif 400 | 得意黑 Smiley Sans (oblique) — display moments; 思源宋体 Noto Serif SC 400 as fallback for long-form serif headlines |\n| Body / lede / micro-label | Archivo 400–600 | 思源宋体 Noto Serif SC 400 for body; 思源黑体 Noto Sans SC 600 for micro-labels |\n| Mono data / dates / page numbers | JetBrains Mono 400 | 思源黑体 Noto Sans SC 500 with tabular-feeling alignment — see Known CJK Gap below |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role, with Latin glyphs handled by the same CJK family. Both 思源宋体 and 思源黑体 ship Latin glyphs that read cleanly alongside Chinese characters, so a mixed sentence renders in a consistent face. 得意黑 is used surgically — only on the biggest display moments where its slight oblique slant matches the Italian-poster register Instrument Serif provides in the Latin original. For everything else (body, micro-label, mono), Noto Serif SC / Noto Sans SC carries both scripts.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=Noto+Serif+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-smiley-sans-oblique/font.min.css\">\n```\n\nAfter loading, reference 得意黑 as `font-family: 'Smiley Sans Oblique', 'Noto Serif SC', serif` on the display tokens that should carry the strongest poster register.\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.5–1.55), display 1.05–1.15 (up from the very tight 0.84–0.96 used on Instrument Serif). The Latin display tokens here use line-height as low as 0.84 — at that compression, CJK characters collide vertically. Open display to a minimum of 1.0 for Chinese, and 1.15+ on multi-line headlines.\n- **Letter-spacing**: set to 0 on every CJK run. The Latin display tokens use negative tracking from −0.005em down to −0.04em; on square CJK glyphs this overlaps strokes and reads as broken. Micro-labels at 0.16–0.32em wide tracking also drop to 0.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every micro-label and rail-label in this system uses `text-transform: uppercase`; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））. Replace the en-dash separator in date ranges with a Chinese 至 or full-width 「—」 hyphen.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 春季双年展` not `2024春季双年展`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style — let it handle mixed editorial sentences. Don't let the browser font-switch to Archivo mid-paragraph.\n\n### Aesthetic Notes for This System\n\nThe system's editorial identity rests on Instrument Serif's high-contrast, tall-ascender personality — a face that signals \"art biennale catalogue\" and \"slow literary quarterly\". The closest Chinese equivalent for register is **思源宋体 Noto Serif SC** for body and editorial display, with **得意黑 Smiley Sans Oblique** reserved for the poster-scale display moments where Instrument Serif at 120–240px does the heaviest identity work in the Latin original. 得意黑's slight italic tilt and slab character matches the Italian-exhibition-poster register; pure Noto Serif SC at jumbo numerals reads as restrained academic Chinese rather than biennale-loud.\n\nThe \"single text color, single accent\" discipline of this system transfers cleanly to CJK — ink-on-paper, sun-bloom atmosphere, hairline rules, no shadows. The micro-label treatment (Archivo weight 600, uppercase, 0.16–0.32em tracking) is the system's most fragile element when translated: CJK micro-labels lose both the uppercase signal and the wide tracking. Compensate by setting Chinese micro-labels in 思源黑体 weight 600 at 0 tracking with the **slightly heavier weight contrast** (drop body to weight 400 of 思源宋体, keep labels at 600 of 思源黑体) and by **always pairing the label with a hairline-soft rule beneath** — the rule does the chrome-recognition work the wide-tracked uppercase did in Latin.\n\n### Known CJK Gap\n\n- **No CDN-loadable Chinese monospace face for tabular data.** JetBrains Mono's role here (calendar ledger dates, chart year/value labels, page numbers) depends on monospaced figure rhythm that CJK doesn't provide. 思源黑体 at weight 500 with `font-feature-settings: \"tnum\"` gives tabular Latin digits but Chinese characters remain proportional. For ledger rows where alignment is structural, keep the date and value columns in Latin digits (Arabic numerals + Latin date abbreviations) and use 思源黑体 only for the title/venue cells.\n- **Instrument Serif italic has no direct Chinese counterpart.** The italic display token (manifesto-scale quote body) loses its slow-reading personality entirely in CJK. Use 思源宋体 400 with looser line-height (1.4) and slightly larger size to compensate; consider 「」 quotation framing to signal \"this is a quoted passage\".\n- **得意黑 may not load on restricted networks.** The cn-fontsource CDN is reliable in mainland China but less proven internationally. Always include `'Noto Serif SC', serif` in the stack as fallback so display headlines remain editorial even when 得意黑 fails.\n\n## Iteration Guide\n\n1. Any new surface starts on `{colors.paper}`, places at least one `{components.sun-bloom}` for atmosphere, and pins the persistent `{components.pagenum}` to bottom-right.\n2. Any new headline uses Instrument Serif weight 400 with tight line-height and negative tracking. Reach for `{typography.headline}` for primary moments and `{typography.display}` only for cover-scale.\n3. Any new body paragraph uses Archivo weight 400 with line-height 1.5. Lede paragraphs following a headline use the slightly larger `{typography.body-lede}` for breathing room.\n4. Any new eyebrow or section tag uses the micro-label treatment: Archivo weight 600, uppercase, 0.16-0.32em tracking, ink color, no fill. Don't substitute a pill or chip.\n5. Any new structural separator is a 1px `{components.hairline-rule}` in ink, or its soft variant for secondary list rows. Never reach for a thicker border.\n6. Any new numerical or metadata content (date, page number, chart value, ledger figure) uses JetBrains Mono. Serif numerals are reserved for display moments only.\n7. Any new \"poster-scale\" color statement uses `{components.yellow-panel}` — a flooded column or fraction of the canvas in `{colors.sun}` with ink text on top.\n8. Any new ordered list of program items uses the `{components.strand-row}` pattern: serif numeral cell + serif title + sans body, separated by hairline-soft rule.\n9. Any new tabular itinerary uses the `{components.ledger-row}` pattern: mono date + serif title + sans venue + mono duration right-aligned, separated by hairline-soft rule.\n10. If a surface feels flat, add an `{components.ember-bloom}` in the opposite corner from the sun-bloom — never add a card border or shadow.\n\n## Known Gaps\n\n- **Instrument Serif, Archivo, and JetBrains Mono are loaded from Google Fonts** via a preconnect + `<link>`. Fallbacks (`Georgia`, `Helvetica Neue`, `ui-monospace`) are defined but render very differently — in environments where Google Fonts fail, the system collapses to generic editorial defaults and loses its identity.\n- **The Instrument Serif italic axis is loaded** but used only for the manifesto-scale quote treatment. Other italic moments (an `<em>` inside a body paragraph, for instance) will not stylistically signal the same as the dedicated italic display.\n- **The system has no chart engine** — the data slide uses inline `style=\"width: XX%\"` on bar divs. Building dynamic charts requires computing widths in JS or templating the markup server-side.\n- **The block-tile underprint uses hardcoded grid positions** (`grid-column: 1 / 3; grid-row: 6 / 9;`) per tile. Tiles are decorative and the placements are tuned per surface; there is no parametric tile placement system.\n- **The vertical rail-label uses a rotated transform** that can produce subtle subpixel rendering artifacts on some browsers. The label is decorative; if rendering looks off, it can safely be dropped.\n- **The slide navigation has no slide indicator beyond the pagenum.** There are no dot-rails, no progress bar, no thumbnail bar. The pagenum text is the only positional cue.\n- **The crossfade transition is screen-only** and doesn't degrade to a sensible print/static state. Capturing slides for PDF export requires manual screenshot per surface.\n- **The cover and colophon footer-band columns use fractional widths** (`1.1fr 1fr 1.4fr 2fr` and `1.2fr 1.1fr 1fr 1.4fr`). These ratios are tuned to the demo content and may need adjusting if footer cells carry significantly different text length.\n- **The system loads Google Fonts with `ital` axis for Instrument Serif** but only `wght` axes for Archivo and JetBrains Mono. Adding italic body or italic mono moments requires updating the font-loading request.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/preview.md":"# Biennale Yellow Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/biennale-yellow/design.md`\n- Preview card: `bold-template-pack/templates/biennale-yellow/preview.md`\n\n## Selection Metadata\n\n- Slug: `biennale-yellow`\n- Tagline: Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients.\n- Mood: editorial, atmospheric, warm, cultural-institution, poster-like\n- Tone: literary, considered, contemplative, warm-modern, Dutch-editorial\n- Formality: high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, studio retrospectives. Equally good for any deck wanting Dutch-editorial atmosphere with an unmistakable single-color signature.\n- Avoid for: Decks that need visual punch or saturated multi-color energy — the warm-paper canvas and one-yellow palette are intentionally quiet and atmospheric.\n\n## Visual Snapshot\n\nA literary-editorial presentation system in the visual register of an art biennale catalogue or quiet exhibition poster. The aesthetic is built on warm parchment grounds (#E9E5DB) flooded with soft solar yellow (#F1EE2E) radial blooms, set against a single deep indigo navy ink color. Display type is Instrument Serif — a contemporary high-contrast serif with tall ascenders and elegant italics — paired with Archivo for sans-serif chrome and JetBrains Mono for numerical and metadata callouts. No drop shadows, no rounded corners, no bordered cards: the only structural lines are hairline 1px rules in ink. The mood sits between a folded museum brochure, a slow-reading literary quarterly, and a Mediterranean exhibition poster — confident, atmospheric, and deeply restrained.\n\nBiennale Yellow is a literary-editorial presentation system modeled on the visual language of European art biennale catalogues, slow exhibition posters, and quarterly literary publications. There are no cards, no buttons, no shadows, no rounded corners. The structural vocabulary is just three things: paper, ink, and yellow.\n\n## Preview Ingredients\n\n- Palette: paper #E9E5DB; paper-deep #DCD6C4; sun #F1EE2E; sun-soft #F8F39B; haze #F0DA7C; ink #1B2566; ember #E26B4A\n- Typography: See full design doc after selection.\n- Signature move: Warm parchment ground ({colors.paper}) on every surface; never white, never gray.\n- Signature move: Single ink color ({colors.ink}) for all text and all rules — no secondary text colors.\n- Signature move: Solar yellow ({colors.sun}) deployed three ways: as a flooded panel, as a soft radial bloom, as a translucent geometric tile underprint.\n- Signature move: Instrument Serif handles every display moment at scales from 40px to 720px+.\n- Signature move: Archivo Bold uppercase + 0.16–0.32em tracking is the universal label voice.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/design.md":"---\nversion: alpha\nname: BlockFrame\ndescription: \"A maximalist neobrutalist presentation system built on 4px solid black borders, 8px hard offset shadows, and a high-key candy palette of five saturated pastels plus cream and off-white. Display type runs Inter at weight 800-900 in tight uppercase; secondary chrome uses Space Grotesk as a quasi-monospace label face. Tilted decorative shapes (rotated stars, rectangles, badges) puncture the borders and break the grid intentionally. Pastels are paired loudly: pink + blue + green + yellow + cream cycle through every region with deliberate juxtaposition. The aesthetic borrows from zine layout, 1990s-revival sticker books, and contemporary toy packaging — bold, joyful, slightly chaotic, never timid.\"\n\ncolors:\n  black: \"#000000\"\n  white: \"#FFFFFF\"\n  offwhite: \"#FFFDF5\"\n  pink: \"#FE90E8\"\n  blue: \"#C0F7FE\"\n  green: \"#99E885\"\n  yellow: \"#F7CB46\"\n  cream: \"#FFDC8B\"\n\nborders:\n  primary: \"4px solid {colors.black}\"\n  thin: \"3px solid {colors.black}\"\n\nshadows:\n  default: \"8px 8px 0px {colors.black}\"\n  small: \"4px 4px 0px {colors.black}\"\n  hover: \"6px 6px 0px {colors.black}\"\n  close-yellow: \"12px 12px 0px {colors.yellow}\"\n  close-white: \"6px 6px 0px {colors.white}\"\n\ntypography:\n  heading-xl:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(48px, 6vw, 96px)\"\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n    textTransform: uppercase\n  heading-lg:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 800\n    fontSize: \"clamp(32px, 4vw, 64px)\"\n    lineHeight: 1\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  heading-md:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(24px, 2.5vw, 40px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  close-title:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(40px, 5vw, 80px)\"\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n    textTransform: uppercase\n  quote-text:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(28px, 3.5vw, 52px)\"\n    lineHeight: 1.15\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  stat-number:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(36px, 4vw, 64px)\"\n    lineHeight: 1\n  card-title:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: 22px\n    lineHeight: 1.2\n    textTransform: uppercase\n  step-num:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: 48px\n    lineHeight: 1\n  body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(16px, 1.2vw, 20px)\"\n    lineHeight: 1.6\n  body-card:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: 15px\n    lineHeight: 1.6\n  list-body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: 16px\n    lineHeight: 1.5\n  label:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 13px\n    lineHeight: 1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  mono-tag:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 14px\n    lineHeight: 1\n    letterSpacing: 0.05em\n    textTransform: uppercase\n  mono-meta:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 500\n    fontSize: 15px\n    letterSpacing: 0.02em\n  subtitle-mono:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 500\n    fontSize: 18px\n    lineHeight: 1.5\n  counter:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 700\n    fontSize: 14px\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  legend-item:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 13px\n\nspacing:\n  slide-pad: 60px\n  card-pad-lg: 60px\n  card-pad-md: 36px\n  card-pad-sm: 28px\n  card-pad-xs: 22px\n  gap-lg: 48px\n  gap-md: 32px\n  gap-sm: 24px\n  gap-xs: 16px\n  pad-bottom-clearance: 110px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  default-background: \"{colors.offwhite}\"\n\ncomponents:\n  card-elevated:\n    border: \"4px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.default}\"\n    description: \"Primary elevated card. 4px ink border + 8px ink offset shadow. Background is white by default; on darker surfaces background may shift to offwhite or to a colored fill.\"\n  card-flat:\n    border: \"4px solid {colors.black}\"\n    background: \"{colors.white}\"\n    description: \"Bordered card without elevation shadow. Used for secondary content cells inside multi-card grids where the shadow would compound.\"\n  card-small:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Compact card with thinner border + smaller offset shadow. Used for intro-cards, stat-cards, team-cards, and timeline-steps.\"\n  label-pill:\n    border: \"3px solid {colors.black}\"\n    padding: \"6px 16px\"\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontSize: 13px\n    fontWeight: 600\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Universal section eyebrow. White base by default; pink, blue, green, yellow, cream variants swap background. Always sits on a 3px black border with a 4px hard offset shadow.\"\n  button-primary:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    color: \"{colors.black}\"\n    padding: \"14px 32px\"\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: 16px\n    boxShadow: \"{shadows.small}\"\n    description: \"Primary CTA. Yellow fill with black text, 3px black border, 4px offset shadow. Hover lifts the button -2/-2 and grows shadow to 6px.\"\n  corner-bracket:\n    width: 24px\n    height: 24px\n    border: \"3px solid {colors.black}\"\n    description: \"Two L-shaped brackets at opposite corners of a card or frame (tl + br + tr + bl pattern available). Sits inside the card edge as a decorative frame-within-frame.\"\n  icon-square:\n    width: 64px\n    height: 64px\n    border: \"3px solid {colors.black}\"\n    description: \"Solid pastel square (pink/blue/green) holding a single uppercase letter glyph at weight 700 / 28px. Used as feature-card icons.\"\n  feature-deco:\n    width: 48px\n    height: 48px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    position: \"absolute top -12px right 24px\"\n    description: \"Yellow square notch that protrudes from the top edge of a feature card, breaking the card's top border line.\"\n  stat-deco-dot:\n    width: 12px\n    height: 12px\n    borderRadius: 50%\n    border: \"2px solid {colors.black}\"\n    description: \"Small black-bordered colored circle pinned to the top-right of a stat card. The only round shape used on cards. Fill cycles through the pastel palette.\"\n  avatar-square:\n    width: 72px\n    height: 72px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.pink}\"\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: 28px\n    textTransform: uppercase\n    description: \"Square avatar with two-letter initials, used in team grids. Fill cycles through the pastel palette.\"\n  list-number:\n    width: 36px\n    height: 36px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 700\n    fontSize: 14px\n    description: \"Square numerical bullet pinned to the left of each list item. Black border, yellow fill, mono numeral.\"\n  star-burst:\n    clipPath: \"polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)\"\n    border: \"3px solid\"\n    background: \"{colors.pink}\"\n    description: \"10-point star clipped via CSS clip-path with a 3px border. Decorative attention-grabber pinned to corners of close-frames and feature cards.\"\n  stripe-block:\n    background: \"repeating-linear-gradient(45deg, {colors.black}, {colors.black} 4px, {colors.green} 4px, {colors.green} 12px)\"\n    border: \"3px solid {colors.black}\"\n    description: \"Black-and-color diagonal stripe panel used as decorative attention block on poster-class surfaces.\"\n  bg-dot-grid:\n    backgroundImage: \"radial-gradient(circle, {colors.black} 1.2px, transparent 1.2px)\"\n    backgroundSize: \"24px 24px\"\n    description: \"Faint dot-grid background pattern used as an overlay on light surfaces or as decoration in corners of cards.\"\n  tilt-card:\n    transform: \"rotate(±2deg) or rotate(±8deg)\"\n    description: \"Card with intentional tilt. Stat cards alternate -2deg / +2deg; decorative rectangles tilt up to ±12deg. The tilt is the system's playful structural signature.\"\n  nav-btn:\n    width: 48px\n    height: 48px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Square nav arrow button. Hover translates -2/-2 and grows shadow; active translates 2/2 and shrinks shadow.\"\n  slide-counter:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    padding: \"10px 18px\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Persistent slide counter pill at bottom-left. Space Grotesk uppercase NN / NN format.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBlockFrame is a **maximalist neobrutalist presentation system** built on five structural laws: every region has a 4px black border, every elevated element has an 8px hard offset shadow, every corner is square, every accent color is a saturated pastel, and every layout is allowed to be a little bit crooked. The system's joy comes from the deliberate collision of these laws — bordered cards meet bordered cards, shadows stack against shadows, tilted decorations puncture the grid intentionally.\n\nThe type system pivots on **Inter** (weights 400-900) for display, body, and stats — set at weight 800-900 in tight uppercase with negative letter-spacing for headlines, weight 500 sentence case for body, and weight 700 uppercase for card titles. **Space Grotesk** (weights 400-700) is the secondary face, used as a quasi-monospace label voice for eyebrows, slide counters, stat labels, mono tags, and any chrome that should read as \"system\" rather than \"editorial\". The face combination is deliberately ordinary — both are widely-available open sans-serifs — but the treatment (heavy uppercase Inter + wide-tracked Space Grotesk) gives them a distinct neobrutalist register.\n\nThe palette is built around **five saturated pastels** (pink `#FE90E8`, blue `#C0F7FE`, green `#99E885`, yellow `#F7CB46`, cream `#FFDC8B`) plus **pure black** (`#000000`) for borders and text, **white** (`#FFFFFF`) for clean card fills, and **off-white** (`#FFFDF5`) for warm canvas. The pastels are not subtle accents — they are full-bleed surface fills. A typical deck cycles every slide through a different colored ground (offwhite cover → blue intro → offwhite content → green chart → pink quote → yellow split → offwhite timeline → blue stats → cream team → black close). This color cycling is the system's primary rhythm.\n\nDepth is **hard offset shadow at 4px and 8px**, always solid black, always zero blur, always positioned bottom-right. Larger elements get 8px, smaller chrome gets 4px. The close-frame uses a single 12px offset in **yellow** (the only colored shadow in the system) as the system's loudest depth statement, and inverted close-frames pair 6px **white** shadows on black surfaces. Borders are 4px solid black on primary cards, 3px solid black on secondary chrome. Border weight and shadow size are tightly coupled — a 4px border carries an 8px shadow; a 3px border carries a 4px shadow.\n\n**Density philosophy: comfortably dense.** This system reads as authoritative when packed and timid when sparse. A typical surface holds: a label-pill eyebrow + a large headline + a multi-card grid (3-6 cards) + at least one decorative element (tilted rectangle, star burst, stripe block, corner bracket, deco dots). Empty space within a region reads as \"broken\" — every card should be filled, every grid should be complete. The system's joy depends on the visual chatter of many bordered objects existing in the same frame.\n\n**Key Characteristics:**\n- 4px solid black borders on primary cards, 3px on secondary chrome — never thinner.\n- 8px hard offset shadows on primary cards, 4px on secondary chrome — solid black, zero blur.\n- Five-pastel palette (pink, blue, green, yellow, cream) plus black, white, off-white — cycled across surfaces.\n- Inter weight 800-900 uppercase with negative tracking is the display voice; Space Grotesk weight 600 uppercase with 0.08em tracking is the label voice.\n- Square corners everywhere except a single circular accent dot on stat cards.\n- Tilted decorative elements (rotated rectangles, stars, badges) puncture the grid intentionally.\n- Label pills (`{components.label-pill}`) carry a 3px border, 4px offset shadow, and a pastel fill variant — the universal section eyebrow.\n- Colored fills are bold and saturated; pastels are used as panel grounds, not as light accents.\n- Yellow is the default CTA color; black is the default close-surface color.\n- Star bursts, stripe blocks, and dot grids are reusable decorative attention units.\n\n## Colors\n\n### Palette\n\n- **Black** (`{colors.black}` — `#000000`): The structural color. Every border, every primary text moment, every shadow. Pure black, no warm bias. The system's contrast anchor.\n- **White** (`{colors.white}` — `#FFFFFF`): The default card fill. Used on every primary card and as the background of label-pills and nav-buttons. Pure white, no warmth.\n- **Off-white** (`{colors.offwhite}` — `#FFFDF5`): The warm canvas tone. The default body/slide background when no pastel ground is in play. Subtly warmer than pure white so that white cards sitting on top still feel layered.\n- **Pink** (`{colors.pink}` — `#FE90E8`): A high-key candy magenta. Used as a full-surface ground, as label-pill fill, as icon-square fill, as star-burst fill, and as one of the pastel chart series. The most saturated of the five pastels.\n- **Blue** (`{colors.blue}` — `#C0F7FE`): A pale cyan-ice blue. Used as a full-surface ground (the \"intro\" and \"stats\" feel), as label-pill fill, as icon-square fill, and as a chart series.\n- **Green** (`{colors.green}` — `#99E885`): A bright spring green. Used as a full-surface ground, as label-pill fill, as icon-square fill, in the stripe-block diagonal pattern, and as a chart series.\n- **Yellow** (`{colors.yellow}` — `#F7CB46`): The CTA color. Used as the default button fill, as the close-frame shadow color, as list-number squares, as the feature-deco notch, and as label-pill fill. The brightest, most attention-pulling pastel.\n- **Cream** (`{colors.cream}` — `#FFDC8B`): A warm yellow-cream. Softer than yellow, more saturated than offwhite. Used as a full-surface ground (the \"team\" or \"cover\" feel), as label-pill fill, and as a tertiary chart accent.\n\n### Defaults\n\n- **Default surface background**: `{colors.offwhite}` for content-heavy surfaces; cycle through `{colors.cream}`, `{colors.blue}`, `{colors.pink}`, `{colors.green}`, `{colors.yellow}` for surfaces that need a stronger ground. The cycle is the rhythm; staying on one ground for many slides flattens the system.\n- **Default headline color**: `{colors.black}` on all light/pastel surfaces; `{colors.white}` on the black close-surface.\n- **Default body text color**: `{colors.black}` on all light/pastel surfaces; `{colors.white}` or `{colors.cream}` on dark surfaces.\n- **Default border color**: `{colors.black}` — always. There are no colored borders anywhere except the 4px white border on the inverted close-frame.\n- **Default card fill**: `{colors.white}`. Use a pastel fill only when the card is part of a multi-card row where each card needs distinct color identity (e.g., the timeline-step row where each step is a different pastel).\n- **Default button fill**: `{colors.yellow}`. Other pastels work, but yellow is the system's primary \"click here\" signal.\n- **Default label-pill base**: `{colors.white}`; pastel variants (`{colors.pink}`, `{colors.blue}`, `{colors.green}`, `{colors.yellow}`, `{colors.cream}`) signal section type or decorate the eyebrow.\n- **Default decorative accent on stat cards**: a 12px circle (`{components.stat-deco-dot}`) in a pastel fill — cycling pink, blue, green, yellow across cards.\n- **Default chart palette order**: pink → blue → green (three-series), with yellow and cream available for additional series.\n\nThe pastels are interchangeable in role — none of them carry fixed semantic meaning (green isn't \"success\", red doesn't exist in the palette at all). Pair them by visual juxtaposition: pink + blue + green is the most common trio; cream + yellow is the warm pair; blue + pink is the cool-warm contrast.\n\n## Typography\n\n### Font Family Stack\nThe system runs two faces.\n\n**Inter** (weights 400-900) is the display, body, headline, and stat face. Used at weight 900 for hero/close titles and quote text, weight 800 for primary headlines, weight 700 for medium headlines and card titles, weight 500 for body. Display weights are always uppercase with negative letter-spacing (-0.02 to -0.03em); body weights are always sentence case with default tracking. The contrast between heavy uppercase display and weight-500 sentence body is the system's typographic rhythm.\n\n**Space Grotesk** (weights 400-700) is the label and chrome face. Used at weight 600 for label-pills (13px, 0.08em tracking, uppercase) and at weight 500 for monospace meta callouts. The face is technically not monospace, but its slightly geometric character + the wide tracking treatment makes it read as the system's \"code\" voice.\n\nDon't introduce a third face. The Inter + Space Grotesk pairing is the entire typographic palette.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.heading-xl}` | 48–96px clamp | Inter | 900 | Hero or cover-scale headline |\n| `{typography.heading-lg}` | 32–64px clamp | Inter | 800 | Primary section headline |\n| `{typography.heading-md}` | 24–40px clamp | Inter | 700 | Region headline, chart title |\n| `{typography.close-title}` | 40–80px clamp | Inter | 900 | Closing-statement title (inverted surface) |\n| `{typography.quote-text}` | 28–52px clamp | Inter | 900 | Quote body — always uppercase |\n| `{typography.stat-number}` | 36–64px clamp | Inter | 900 | Stat numeral |\n| `{typography.card-title}` | 22px | Inter | 700 | Feature card title — uppercase |\n| `{typography.step-num}` | 48px | Inter | 900 | Numeral inside a timeline-step (opacity 0.6) |\n| `{typography.body}` | 16–20px clamp | Inter | 500 | Standard body paragraph |\n| `{typography.body-card}` | 15px | Inter | 500 | Body inside compact cards |\n| `{typography.list-body}` | 16px | Inter | 500 | Numbered list body |\n| `{typography.label}` | 13px | Space Grotesk | 600 | Text inside label-pill |\n| `{typography.mono-tag}` | 14px | Space Grotesk | 600 | Mono tag/badge, slide-counter |\n| `{typography.mono-meta}` | 15px | Space Grotesk | 500 | Inline mono metadata |\n| `{typography.subtitle-mono}` | 18px | Space Grotesk | 500 | Hero subtitle / close subtitle |\n| `{typography.counter}` | 14px | Space Grotesk | 700 | Persistent slide counter (NN / NN) |\n| `{typography.legend-item}` | 13px | Space Grotesk | 600 | Chart legend label |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.heading-xl}` (48–96px). Always uppercase, always weight 900, always with -0.03em tracking.\n- **Default size for a primary section headline**: `{typography.heading-lg}` (32–64px). Uppercase, weight 800, -0.02em.\n- **Default size for a region or chart title**: `{typography.heading-md}` (24–40px). The only Inter heading not in uppercase by default — though uppercase is permitted.\n- **Default size for a stat numeral**: `{typography.stat-number}` (36–64px). Weight 900, line-height 1.\n- **Default size for body paragraph**: `{typography.body}` (16–20px clamp). Weight 500, sentence case, line-height 1.6.\n- **Default size for an eyebrow label**: `{typography.label}` (13px) inside the `{components.label-pill}`.\n- **Default weight for any Inter display**: 800 or 900. Inter display at weight 700 reads as \"almost there\"; only use 700 for `{typography.heading-md}` or card titles.\n- **Default weight for any Inter body**: 500. Body at 400 reads as too light, body at 700 reads as oversized.\n- **Default tracking for any Space Grotesk label/chrome**: 0.05-0.10em. Wide tracking is the face's \"chrome\" signal.\n- **Default tracking for any Inter display**: -0.01em (heading-md) to -0.03em (heading-xl). Display without negative tracking reads as untreated.\n\nWhen unsure which heading token to reach for, default to `{typography.heading-lg}` (32–64px) for the slide's primary text moment. `{typography.heading-md}` is for region or chart titles within a slide.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Inter display element (heading-xl, heading-lg, quote-text, close-title) is uppercase.** Sentence-case Inter display at weights 800+ does not exist in this system. The uppercase + heavy-weight + negative-tracking combination is the visual identity.\n- **Every Inter display element uses negative letter-spacing** (-0.01 to -0.03em). Display without negative tracking reads as default Inter, which is a fundamentally different aesthetic.\n- **Every label-pill carries the 3px border + 4px shadow + uppercase Space Grotesk text** combination. A label without all three properties is not a label-pill — it's a stray text element.\n- **Every card-title is uppercase Inter weight 700.** Card titles in sentence case break the brutalist rhythm.\n- **Every Space Grotesk label/chrome/counter is uppercase with 0.05-0.1em tracking.** Sentence-case Space Grotesk does not exist in this system except for body-adjacent metadata (mono-meta, mono inline).\n- **Every stat numeral is Inter weight 900 with line-height 1.** Stat numerals are display moments, not data chrome.\n- **Every Inter body block is sentence case with line-height 1.6 (or 1.5 for compact card body).** Body in uppercase or with tight line-height reads as broken.\n- **Step numbers inside timeline-step cards are 48px weight 900 at opacity 0.6.** The reduced opacity is mandatory — full-opacity step numbers overwhelm the step title.\n\n### Typography Principles\n\nThe voice contrast is **bold uppercase display ↔ sentence body ↔ wide-tracked label**. Italic is never used. Underline is never used. The only emphasis mechanism is weight contrast within the Inter ladder and the uppercase/sentence-case switch.\n\nDisplay elements should be allowed to **dominate the canvas**. The system is built for poster-scale typography; reading a heading-xl at small size collapses its character. Lean into the upper bound of every clamp.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and toggled via `display: none` / `display: flex` on the `.active` class. Default slide padding is 60px on all sides. Slides that contain bottom-anchored grids (timeline, team grid, chart with stat column) carry an additional `padding-bottom: 110px` to clear the fixed slide-counter and nav-controls chrome.\n\nThe default slide flex direction is column with `justify-content: center`. For two-column splits (intro slide, split image+text), flex direction switches to row.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.slide-pad}` | 60px | Default slide padding from edge to content |\n| `{spacing.card-pad-lg}` | 60px | Hero-frame and quote-frame internal padding |\n| `{spacing.card-pad-md}` | 36px | Feature-card internal padding |\n| `{spacing.card-pad-sm}` | 28px | Intro-card internal padding |\n| `{spacing.card-pad-xs}` | 22px | Team-card and small-cell padding |\n| `{spacing.gap-lg}` | 48px | Gap between major sections (header-to-grid) |\n| `{spacing.gap-md}` | 32px | Gap between feature cards |\n| `{spacing.gap-sm}` | 24px | Gap between intro cards, stat cards |\n| `{spacing.gap-xs}` | 16px | Gap inside list items, intra-card content |\n| `{spacing.pad-bottom-clearance}` | 110px | Bottom padding reserve to clear fixed nav chrome |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Slide counter** at bottom-left — 3px black border, white fill, 4px shadow, Space Grotesk 14px weight 700 uppercase, NN / NN format.\n- **Nav controls** at bottom-right — two 48px square nav buttons with 3px borders, white fills, 4px shadows.\n- The slide-counter and nav-controls are not part of the slide composition — they live outside `.slides-container` and overlap the bottom edge.\n\n### Card-on-Card Structure\nThe system's primary layout pattern is **cards on grounds on grounds**. A typical slide places a colored-ground surface, on which sits a white card with 4px black border + 8px shadow, which may contain smaller cards or icon-squares. Each level of nesting carries its own border weight: 4px for the outer card, 3px for inner chrome. This nested-bordered structure is what gives the system its dense, packed feel.\n\n### Decorative Disruption\nTilted decorative elements (rotated rectangles, stars, badges, dot grids) are placed absolutely on slide and card surfaces to puncture the grid intentionally. These are not \"background decoration\" — they are part of the composition. A surface without any decorative element reads as too clean.\n\n## Depth and Elevation\n\n### Hard Offset Shadow Stack\nThe system uses three primary shadow values:\n- **`{shadows.default}`** = `8px 8px 0px {colors.black}` — primary card shadow. Used on hero-frame, feature-card, quote-frame, chart-frame, and any elevated card.\n- **`{shadows.small}`** = `4px 4px 0px {colors.black}` — secondary chrome shadow. Used on intro-card, stat-card, team-card, timeline-step, label-pill, button-primary, nav-btn, slide-counter.\n- **`{shadows.hover}`** = `6px 6px 0px {colors.black}` — hover state for buttons and nav. Triggered with a -2/-2 transform.\n\nAll shadows are solid black, zero blur, fixed offset bottom-right. The shadow + transform pairing on hover creates a \"lifting off the page\" interaction signature — the element translates -2/-2 while the shadow grows to 6/6, simulating a peel-up.\n\n### Inverted Shadows\nOn the dark close-surface, shadows invert their color but keep the offset logic:\n- **`{shadows.close-yellow}`** = `12px 12px 0px {colors.yellow}` — the loudest depth statement in the system. Used on close-frame to make the inverted surface read as still \"elevated\" despite its dark ground.\n- **`{shadows.close-white}`** = `6px 6px 0px {colors.white}` — used on the close-btn to maintain elevation on the black ground.\n\nThese colored shadows are the only exceptions to the \"shadows are always black\" rule, and they appear only on the dark surface.\n\n### Border-Based Depth\nMost of the system's apparent layering comes from the 4px or 3px ink borders, not from shadow. A card with a border but no shadow still reads as \"an object on a surface\" — the shadow is what makes it read as \"lifted\". Use shadow for elevated cards; use border-only for secondary cards inside a multi-card grid where stacked shadows would compound into noise.\n\n### Tilted Elements as Depth\nThe system's playful depth signature is **tilt**. Stat cards alternate -2deg / +2deg rotation. Decorative pink rectangles tilt up to ±12deg. The yellow button tab on the hero frame tilts -3deg. These tilts break the grid alignment intentionally and create perceived dimensionality without using actual perspective or shadow.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px** on everything structural — cards, label-pills, buttons, icon-squares, list-numbers, avatars, badges. Square corners are non-negotiable.\n- **50% (circle)** used only for the stat-deco dot (12×12 circular accent pinned to stat cards). This is the only round shape in the system.\n\nThe square-corner discipline is the system's structural identity. Adding rounded corners to any card or chip immediately reads as a different aesthetic.\n\n### Border Weights\n- **4px solid `{colors.black}`** — used on primary cards (hero-frame, feature-card, quote-frame, chart-frame, team-card border, timeline-step border, stat-card border) and the close-frame inverse (4px solid white on black ground).\n- **3px solid `{colors.black}`** — used on secondary chrome (label-pill, button, intro-card, icon-square, list-number, avatar, corner-bracket, nav-btn, slide-counter, stripe-block, star-burst). The 3px weight signals \"secondary structural\" vs. the 4px \"primary structural\".\n- **2px solid `{colors.black}`** — used only on legend swatches (16×16 chart swatches) and stat-deco dots. The thinnest border weight, reserved for atomic chrome.\n- **4px solid `{colors.white}`** — used only on the inverted close-frame, the visual-box, and its ::after offset frame on the dark split-visual surface.\n\nThe border weight ladder (2 / 3 / 4) is fixed. No 1px borders, no 5px+ borders.\n\n### Decorative Element Types\n\n**Label-pill** — Square bordered pill (3px black border, 4px shadow), pastel or white fill, Space Grotesk 13px weight 600 uppercase text with 0.08em tracking. The universal section eyebrow.\n\n**Corner-bracket** — Two L-shaped brackets (or four for full enclosure) at the corners of a card, 3px black border. Creates a frame-within-frame decorative motif.\n\n**Star-burst** — 10-point star clipped via CSS clip-path with a 3px border, pastel fill. Decorative attention-grabber pinned to corners of close-frames and feature cards.\n\n**Stripe-block** — Diagonal 4px-on, 8px-off stripe pattern in black + a pastel color, framed with a 3px black border. Decorative attention block used on poster-class surfaces.\n\n**Dot-grid** — 1.2px radial-gradient dot pattern at 24×24 spacing. Used as a faint decorative overlay in corners of slides, at 30-40% opacity.\n\n**Feature-deco notch** — 48×48 yellow square with 3px black border, positioned absolutely to protrude from the top edge of a feature card. The notch breaks the card's top border, suggesting it's been \"stapled on\".\n\n**Icon-square** — 64×64 pastel square with 3px black border holding a single uppercase letter glyph at Inter weight 700 / 28px. Used as feature-card icons.\n\n**Stat-deco dot** — 12×12 circle with 2px black border, pastel fill, pinned to the top-right of a stat card. The system's only round shape.\n\n**List-number** — 36×36 yellow square with 3px black border holding a Space Grotesk 14px weight 700 numeral. Used as bullets on numbered lists.\n\n**Avatar-square** — 72×72 pastel square with 3px black border holding two uppercase initials at Inter weight 900 / 28px. Used in team grids; fills cycle through pastels.\n\n**Step-connector** — A 28×4 horizontal black bar pinned to the right edge of a timeline-step card, mid-height. Visually links adjacent steps in a horizontal flow.\n\n**Tilted decoration** — Any rectangle, badge, or star with a rotate(±2deg to ±12deg) transform. The tilt is intentional disruption of the grid; without it, the system reads as too uniform.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply 4px solid black borders to primary cards (`{components.card-elevated}`, hero-frame, quote-frame) and 3px to secondary chrome. The border weight ladder is the system's structural backbone.\n- Pair every 4px border with an 8px offset shadow, and every 3px border with a 4px offset shadow. The border/shadow coupling is non-negotiable.\n- Cycle slide backgrounds through the pastel palette — offwhite, cream, blue, pink, green, yellow — to keep the deck visually rhythmic. Staying on one color for many slides flattens the system.\n- Set every Inter display element in uppercase with negative letter-spacing (-0.01 to -0.03em) and weight 800+. The combination is the typographic identity.\n- Use the `{components.label-pill}` (3px border, 4px shadow, pastel fill, Space Grotesk uppercase 0.08em) as the universal section eyebrow on every region.\n- Apply tilt to decorative rectangles, stat cards, stars, and badges (±2deg to ±12deg). The intentional misalignment is the system's playful signature.\n- Use `{colors.yellow}` as the default button color. Yellow with a 3px black border and 4px black shadow is the system's \"click here\" voice.\n- Render shadows as solid black with zero blur, always offset bottom-right. The hard-edge shadow is the depth language.\n- Add a decorative element (star-burst, stripe-block, dot-grid, corner-bracket, tilted rectangle) to every surface. The visual chatter is part of the system's energy.\n- Use pure black `{colors.black}` for the closing surface, with white text and a 12px yellow offset shadow on the close-frame. The inverted dark surface is the system's loudest contrast moment.\n\n### Don't\n\n- Don't round any corner on cards, buttons, label-pills, icon-squares, or avatars. Border-radius is forbidden except on the stat-deco dot (12px circle).\n- Don't blur any shadow. Every shadow is hard-edged at zero blur. `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` does not exist in this system.\n- Don't use colored borders. Borders are always pure black, except for the inverted 4px white border on the close-frame.\n- Don't use Inter display weights in sentence case. Uppercase is mandatory on heading-xl, heading-lg, quote-text, close-title, and card-title.\n- Don't set Inter display without negative letter-spacing. Default-tracked Inter at heavy weights reads as a different system.\n- Don't introduce a sixth pastel color. The palette is locked at pink, blue, green, yellow, cream. Adding purple, orange, or red breaks the curated candy palette.\n- Don't omit the label-pill on a region. Going straight from background to headline without an eyebrow tag breaks the system's editorial rhythm.\n- Don't render label-pills as plain text. The 3px border + 4px shadow + pastel fill combination is what defines the pill.\n- Don't use blurred or colored body text. Body is solid black on light surfaces, solid white or cream on dark surfaces.\n- Don't keep every card perfectly aligned. The tilt on stat cards, decorations, and badges is what gives the system its hand-made energy.\n\n## Responsive Behavior\n\nBlockFrame is designed as a **1920×1080 presentation system** (effective 100vw × 100vh). Sizing uses CSS `clamp()` for type and fixed px for borders, shadows, and structural padding. The system has three component-level breakpoints for narrow viewports.\n\n### Scaling Behavior\n- Heading-xl scales 48px → 96px on viewport width.\n- Heading-lg scales 32px → 64px.\n- Body scales 16px → 20px.\n- Borders (3px, 4px), shadows (4px, 8px), and structural padding (60px slide-pad) are fixed and do not scale.\n\n### Component Breakpoints\n- `max-width: 1024px` — slide padding shrinks 60px → 40px, two-column splits stack vertically, feature card row stacks vertically, timeline track stacks vertically with step-connectors hidden, stats grid collapses to 2 columns, team grid collapses to 2 columns. Split visual loses left border and gains a top border.\n- `max-width: 640px` — stats grid collapses to 1 column, team grid collapses to 1 column, hero-frame padding shrinks to 32px, quote-frame padding shrinks to 32px.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are instant (`display: none` ↔ `display: flex` on the `.active` class), with no crossfade.\n\n### Print Behavior\nThe system has no `@media print` rule. Slides are absolute-positioned and only one is visible at a time — printing produces only the active slide. For static export, screenshots of each slide preserve all borders, shadows, and decorations (all are CSS, not image assets).\n\n### Interactive States\n- Buttons and nav-buttons translate -2/-2 on hover and shadow grows to 6px (`{shadows.hover}`); on active, translate 2/2 and shadow shrinks to 2px. The hover-press behavior is unusual for a presentation system; it reflects BlockFrame's hybrid identity as both deck and interactive product mockup.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / quote / close title / stat numerals | Inter 800–900 (uppercase, negative tracking) | 思源黑体 Noto Sans SC 900 (sentence case, 0 tracking) |\n| Card title | Inter 700 (uppercase) | 思源黑体 Noto Sans SC 700 (no transform) |\n| Body / list body | Inter 500 | 思源黑体 Noto Sans SC 400 |\n| Label / mono tag / counter / legend | Space Grotesk 600–700 (uppercase, 0.05–0.1em tracking) | 思源黑体 Noto Sans SC 600 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family with built-in Latin glyph coverage. Set every text element to `font-family: 'Noto Sans SC', sans-serif`. 思源黑体 ships Latin glyphs that pair cleanly with its Chinese characters, so mixed sentences render in one consistent face. The Inter / Space Grotesk distinction in the Latin original is preserved through weight contrast: weight 900 carries the brutalist display role, weight 600 carries the label role, weight 400–500 carries body. Visual hierarchy survives even though the face contrast is gone.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.15–1.25 (up from 0.95–1). The Latin display compresses to 0.95 line-height; CJK at that compression collides vertically.\n- **Letter-spacing**: set to 0 on every CJK run. The template's negative display tracking (−0.02 to −0.03em on Inter) overlaps CJK strokes and reads as broken; the positive 0.05–0.1em tracking on Space Grotesk labels reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Inter display heading (heading-xl, heading-lg, quote-text, close-title, card-title) uses `text-transform: uppercase` in the Latin original; remove it for CJK runs. Every label-pill, counter, and chrome element also uses uppercase; remove that too.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `BlockFrame 设计系统` not `BlockFrame设计系统`.\n- **One font per sentence**: 思源黑体 covers both CJK and Latin glyphs in a unified style — let it handle mixed sentences. Don't let the browser font-switch to Inter or Space Grotesk mid-word.\n\n### Aesthetic Notes for This System\n\nThe Latin original's typographic identity rests entirely on the **heavy uppercase + negative tracking** combination on Inter display. CJK has no case, so this signal disappears. The system survives because its identity is **80% structural, 20% typographic**: the 4px black borders, 8px hard offset shadows, five-pastel palette, tilted decorations, label-pills, star bursts, stripe blocks, and dot grids do the brutalist work. Set 思源黑体 900 in sentence case at the same large sizes; the chunky black-on-pastel + hard-shadow framing reads as brutalist regardless of whether the type is in caps.\n\nThe label-pill (Space Grotesk 600 uppercase, 0.08em tracking, 3px border + 4px shadow, pastel fill) loses the uppercase + tracked-mono character. Render Chinese label-pills with 思源黑体 weight 600 at 0 tracking and a slightly tighter fontSize (11–12px instead of 13px) — the bordered pill shape and shadow do the chrome-recognition work. Keep the pastel fill rotation (pink / blue / green / yellow / cream) intact; it's the system's most recognizable signal after the borders themselves.\n\n### Known CJK Gap\n\n- **No CDN Chinese monospace face for the \"system readout\" voice.** Space Grotesk's quasi-mono role (label-pills, counters, mono-tags, slide counter NN / NN) depends on its slightly geometric character plus the wide-tracked uppercase treatment. Neither survives the CJK translation. The slide counter and chart legend can keep Latin digits + Latin labels intact; for purely Chinese chrome, lean on the pill border + shadow + pastel fill to signal \"label\" rather than the typographic treatment.\n- **The \"uppercase brutalist\" identity weakens.** The system's most distinctive typographic decision is \"heavy uppercase Inter with negative tracking\" — and that signal is irreplaceable in CJK. Compensate by leaning harder on the structural elements: more decorative disruption (extra tilted rectangles, star bursts, stripe blocks), more saturated pastel-ground rotation across slides, and slightly tighter shadow offsets to compensate for the calmer typographic baseline.\n\n## Iteration Guide\n\n1. Any new card uses a 4px or 3px solid black border + the matched-weight offset shadow (8px or 4px). Never use a card without both.\n2. Any new region begins with a `{components.label-pill}` eyebrow in pastel fill, then the headline in uppercase Inter weight 800+, then content. The label-headline-content sequence is the system's editorial rhythm.\n3. Any new headline uses uppercase Inter with negative letter-spacing and weight 800-900. Reach for `{typography.heading-lg}` (32-64px) for primary moments and `{typography.heading-xl}` (48-96px) for cover/hero scale.\n4. Any new accent or surface fill picks from the 5-pastel palette (pink, blue, green, yellow, cream) — never introduce a sixth pastel.\n5. Any new CTA uses the `{components.button-primary}` pattern: 3px black border, yellow fill, 4px black shadow, Inter weight 700 / 16px. Hover lifts -2/-2 with shadow growing to 6px.\n6. Any new chart cycles through pink → blue → green for series order, with yellow/cream available for additional series. Legend swatches use 2px black border.\n7. Any new stat or metric uses Inter weight 900 + line-height 1 for the numeral, paired with Space Grotesk uppercase label below. Decorate the card with a `{components.stat-deco-dot}` in a pastel color.\n8. Any new slide adds at least one decorative disruption (tilted rectangle, star-burst, stripe-block, dot-grid corner, corner-bracket frame) — empty surfaces feel timid.\n9. Any new closing-style surface uses pure `{colors.black}` ground with white text, a 4px white-bordered close-frame, and a 12px yellow offset shadow. This is the only colored shadow allowed.\n10. If a surface feels too noisy, drop a decoration — don't drop a border or shadow. The borders and shadows are structural; the decorations are tunable.\n\n## Known Gaps\n\n- **Inter and Space Grotesk are loaded from Google Fonts** via inline `@import`. There are no system fallbacks beyond `sans-serif` and `monospace` — in environments where Google Fonts fail, the system collapses to system defaults and loses its identity.\n- **The system uses `@import` inside the `<style>` block** rather than a `<link>` preconnect. This is slower than the standard `<link>` approach and may delay first paint of typography.\n- **The chart is rendered as inline SVG with hardcoded coordinates** (`viewBox=\"0 0 800 360\"`, hardcoded `x/y/width/height` per `<rect>`). Adding new chart slides requires manual coordinate math; there is no data-binding layer.\n- **The hover/active state on buttons assumes a pointing device.** On touch devices the lift-and-press feedback only triggers on tap and may feel inconsistent.\n- **The tilt on stat cards is hardcoded with `:nth-child(odd)` -2deg and `:nth-child(even)` +2deg.** Re-ordering cards changes which tilts which direction — there's no per-card tilt control beyond ordering.\n- **The decorative star uses a CSS clip-path polygon with 10 points.** Browsers without clip-path support (very old IE/Edge) will render the star as a colored rectangle.\n- **The slide-counter and nav-controls overlap the slide content area at the bottom edge.** The 110px bottom padding on certain slides (slide-4, slide-9) reserves space, but other slides may have content that crowds the bottom-left counter pill.\n- **The black close-surface uses pure `#000000` ground with white text** — accessibility-wise this is high-contrast and fine, but the colored decorations on this surface (yellow shadow, white border) don't pass the WCAG color contrast checks at small sizes.\n- **The dot-grid background is a CSS radial-gradient.** At very large viewport sizes the dots may look too small to read as a grid; at very small sizes they may visually merge into solid noise.\n- **There is no transition between slides** other than the binary display toggle. Adding a fade or slide animation requires modifying the JS and adding transition CSS.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/preview.md":"# BlockFrame Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/block-frame/design.md`\n- Preview card: `bold-template-pack/templates/block-frame/preview.md`\n\n## Selection Metadata\n\n- Slug: `block-frame`\n- Tagline: Neobrutalist deck with pastel-neon color blocks and chunky black borders.\n- Mood: bold, playful, graphic, fresh\n- Tone: confident, graphic, pop, design-led\n- Formality: medium-low\n- Density: high\n- Scheme: light\n- Best for: Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns. Also a strong unexpected pick for tech, finance, or research when the speaker wants to land as confident and contemporary rather than buttoned-up.\n- Avoid for: Contexts that require quiet institutional restraint or traditional weight (regulated disclosures, formal legal briefs).\n\n## Visual Snapshot\n\nA maximalist neobrutalist presentation system built on 4px solid black borders, 8px hard offset shadows, and a high-key candy palette of five saturated pastels plus cream and off-white. Display type runs Inter at weight 800-900 in tight uppercase; secondary chrome uses Space Grotesk as a quasi-monospace label face. Tilted decorative shapes (rotated stars, rectangles, badges) puncture the borders and break the grid intentionally. Pastels are paired loudly: pink + blue + green + yellow + cream cycle through every region with deliberate juxtaposition. The aesthetic borrows from zine layout, 1990s-revival sticker books, and contemporary toy packaging — bold, joyful, slightly chaotic, never timid.\n\nBlockFrame is a maximalist neobrutalist presentation system built on five structural laws: every region has a 4px black border, every elevated element has an 8px hard offset shadow, every corner is square, every accent color is a saturated pastel, and every layout is allowed to be a little bit crooked. The system's joy comes from the deliberate collision of these laws — bordered cards meet bordered cards, shadows stack against shadows, tilted decorations puncture the grid intentionally.\n\n## Preview Ingredients\n\n- Palette: black #000000; white #FFFFFF; offwhite #FFFDF5; pink #FE90E8; blue #C0F7FE; green #99E885; yellow #F7CB46; cream #FFDC8B\n- Typography: See full design doc after selection.\n- Signature move: 4px solid black borders on primary cards, 3px on secondary chrome — never thinner.\n- Signature move: 8px hard offset shadows on primary cards, 4px on secondary chrome — solid black, zero blur.\n- Signature move: Five-pastel palette (pink, blue, green, yellow, cream) plus black, white, off-white — cycled across surfaces.\n- Signature move: Inter weight 800-900 uppercase with negative tracking is the display voice; Space Grotesk weight 600 uppercase with 0.08em tracking is the label voice.\n- Signature move: Square corners everywhere except a single circular accent dot on stat cards.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/design.md":"---\nversion: alpha\nname: Blue Professional\ndescription: A restrained, consulting-grade presentation system on a warm cream canvas (#fdfae7) with a single saturated cobalt blue (#1e2bfa) as the only accent color. Display type runs Space Grotesk for headlines and numerical callouts; Inter handles body and chrome. Cards are soft-tinted cobalt at 4% opacity with 1.5px translucent borders and 10-14px rounded corners — quiet, never bordered in solid color. The aesthetic borrows from investment-research reports, McKinsey-grade quarterly briefings, and contemporary financial dashboards — measured, data-dense without feeling crowded, and unmistakably professional. The system is built for executive readability at distance, with strong typographic hierarchy and a single accent color carrying every emphasis moment.\n\ncolors:\n  bg: \"#fdfae7\"\n  primary: \"#1e2bfa\"\n  text: \"#111111\"\n  text-muted: \"#6b6b6b\"\n  text-light: \"#9a9a9a\"\n  accent-light: \"rgba(30, 43, 250, 0.08)\"\n  accent-medium: \"rgba(30, 43, 250, 0.15)\"\n  border: \"rgba(30, 43, 250, 0.2)\"\n  card-bg: \"rgba(30, 43, 250, 0.04)\"\n  positive: \"#059669\"\n  negative: \"#dc2626\"\n\ntypography:\n  h1:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(44.8px, 5vw, 67.2px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h2:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(28.8px, 3vw, 41.6px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h3:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(17.6px, 1.8vw, 24px)\"\n    lineHeight: 1.3\n    letterSpacing: -0.02em\n  h4-eyebrow:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(13.6px, 1.2vw, 16px)\"\n    lineHeight: 1.1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    color: \"{colors.primary}\"\n  body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13.6px, 1.1vw, 16.8px)\"\n    lineHeight: 1.6\n    color: \"{colors.text-muted}\"\n  metric-value:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(35.2px, 3.4vw, 48px)\"\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  metric-label:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(15.2px, 1.3vw, 17.6px)\"\n    lineHeight: 1.3\n    color: \"{colors.text}\"\n  metric-desc:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12.5px, 0.95vw, 14.4px)\"\n    lineHeight: 1.5\n    color: \"{colors.text-muted}\"\n  metric-support:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 0.9vw, 13.6px)\"\n    lineHeight: 1.45\n    color: \"{colors.text-muted}\"\n  stat-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(25.6px, 2.4vw, 33.6px)\"\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  stat-name:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(13.6px, 1vw, 15.2px)\"\n    lineHeight: 1.35\n    color: \"{colors.text}\"\n  stat-context:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: 12px\n    lineHeight: 1.4\n    color: \"{colors.text-light}\"\n  agenda-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: 28.8px\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  insight-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    lineHeight: 1.7\n    letterSpacing: 0.05em\n    color: \"{colors.primary}\"\n  split-highlight:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(18.4px, 1.55vw, 24px)\"\n    lineHeight: 1.4\n    color: \"{colors.text}\"\n  blockquote:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(25.6px, 2.8vw, 38.4px)\"\n    lineHeight: 1.35\n    color: \"{colors.text}\"\n  quote-mark:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"128px\"\n    lineHeight: 0.5\n    color: \"{colors.primary}\"\n    opacity: 0.15\n  step-circle-text:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: 20.8px\n    lineHeight: 1\n  step-title:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(15.2px, 1.4vw, 18.4px)\"\n    lineHeight: 1.2\n  bar-label:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(12.8px, 1.1vw, 16px)\"\n    lineHeight: 1.3\n    color: \"{colors.text}\"\n  bar-pct:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 15.2px\n    color: \"{colors.primary}\"\n  tag:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12px\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  counter:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12.8px\n    lineHeight: 1\n    letterSpacing: 0.05em\n    color: \"{colors.text-muted}\"\n  meta:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: 12.8px\n    lineHeight: 1.4\n    letterSpacing: 0.05em\n    color: \"{colors.text-light}\"\n  cite:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12.5px\n    lineHeight: 1.4\n    letterSpacing: 0.04em\n    textTransform: uppercase\n    color: \"{colors.text-muted}\"\n\nspacing:\n  pad-slide-x: \"4vw\"\n  pad-slide-y-top: \"3.5vw\"\n  pad-slide-y-bottom: \"8.5vh\"\n  pad-card-lg: \"1.5rem 1.6rem\"\n  pad-card-md: \"1.4rem 1.5rem\"\n  pad-card-sm: \"1rem 1.2rem\"\n  pad-mini: \"0.9rem 1rem\"\n  gap-grid-lg: \"3.5rem\"\n  gap-grid-md: \"2rem 3rem\"\n  gap-grid-sm: \"1.5rem\"\n  gap-cards: \"1.2rem\"\n  gap-mini: \"1rem\"\n  header-margin: \"2.5vh\"\n  accent-line-width: \"60px\"\n  accent-line-height: \"4px\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.bg}\"\n\nradii:\n  pill: \"100px\"\n  card-lg: \"14px\"\n  card-md: \"12px\"\n  card-sm: \"10px\"\n  bar: \"6px\"\n  circle: \"50%\"\n\ncomponents:\n  card-tinted:\n    background: \"{colors.card-bg}\"\n    border: \"1.5px solid {colors.border}\"\n    borderRadius: 14px\n    padding: \"1.5rem 1.6rem\"\n    description: \"Primary content card. Cobalt tinted at 4% with a 20% cobalt 1.5px border. Soft 14px radius. Never solid-colored, never outlined in full primary.\"\n  card-tinted-sm:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 12px\n    padding: \"1.4rem 1.5rem\"\n    description: \"Compact tinted card with 1px border. Used for stat cells and small data blocks.\"\n  card-tinted-xs:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 10px\n    padding: \"0.9rem 1rem\"\n    description: \"Mini tinted card used for inline mini-stats.\"\n  detail-block:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 10px\n    padding: \"1rem 1.2rem\"\n    description: \"Detail block holding a small h3 + a bulleted ul. Used in detail-analysis grids.\"\n  tag-pill:\n    background: \"{colors.accent-light}\"\n    color: \"{colors.primary}\"\n    padding: \"0.35rem 0.9rem\"\n    borderRadius: 100px\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12px\n    description: \"Pill-shaped tag sitting in the top-right of the slide-header. Fully rounded, soft cobalt tint background, cobalt text.\"\n  cta-button:\n    background: \"{colors.primary}\"\n    color: \"{colors.bg}\"\n    padding: \"0.9rem 2.2rem\"\n    borderRadius: 100px\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 15.2px\n    description: \"Primary CTA. Fully rounded solid cobalt pill with cream text. Hover lifts -2 with a soft cobalt drop shadow.\"\n  nav-btn:\n    width: 44px\n    height: 44px\n    borderRadius: 50%\n    border: \"1.5px solid {colors.border}\"\n    background: \"{colors.bg}\"\n    color: \"{colors.primary}\"\n    description: \"Circular nav-arrow button. Hover inverts: cobalt fill, cream icon. Disabled state at 30% opacity.\"\n  accent-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.primary}\"\n    borderRadius: 2px\n    description: \"Short horizontal cobalt rule, 60×4px, slightly rounded. Used above cover titles and as eyebrow separators.\"\n  accent-dot:\n    width: 8px\n    height: 8px\n    background: \"{colors.primary}\"\n    borderRadius: 50%\n    description: \"Small inline cobalt dot. Decorative inline marker.\"\n  bar-track:\n    height: 28px\n    background: \"{colors.accent-light}\"\n    borderRadius: 6px\n    description: \"Horizontal bar chart track. Soft cobalt tint with 6px rounded corners.\"\n  bar-fill:\n    height: \"100%\"\n    background: \"{colors.primary}\"\n    borderRadius: 6px\n    description: \"Solid cobalt fill inside bar-track. Width carries the data value. Animates from 0 to value on slide entry.\"\n  step-circle:\n    width: 56px\n    height: 56px\n    borderRadius: 50%\n    background: \"{colors.primary}\"\n    color: \"{colors.bg}\"\n    description: \"Circular numbered step marker in cobalt with cream numeral. Sequential steps reduce opacity (1.0 → 0.85 → 0.7 → 0.55) to suggest fade-into-future.\"\n  metric-change-positive:\n    color: \"{colors.positive}\"\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    description: \"Inline positive-change chip with up-arrow glyph and percentage. Green text inline; no border or fill.\"\n  metric-change-negative:\n    color: \"{colors.negative}\"\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    description: \"Inline negative-change chip with up/down-arrow glyph and percentage. Red text inline; no border or fill.\"\n  insight-list-item:\n    paddingLeft: \"2.6rem\"\n    description: \"Numbered insight list with a Space Grotesk 600 counter (decimal-leading-zero) at position absolute left. Numbers in cobalt, body in default text color.\"\n  split-highlight-block:\n    background: \"{colors.accent-light}\"\n    borderLeft: \"4px solid {colors.primary}\"\n    borderRadius: 12px\n    padding: \"1.3rem 1.5rem\"\n    description: \"Highlighted callout block with cobalt left rule and tinted cobalt fill. Used for inline pull-quotes inside split-column layouts.\"\n  progress-bar:\n    position: \"fixed bottom 0 left 0\"\n    height: 3px\n    background: \"{colors.primary}\"\n    description: \"Thin cobalt progress bar at the bottom edge of the viewport, width grows linearly with slide index.\"\n  cover-decoration:\n    background: \"{colors.accent-light}\"\n    clipPath: \"polygon(30% 0, 100% 0, 100% 100%, 0% 100%)\"\n    description: \"Diagonal accent panel filling the right ~35% of cover surfaces. Soft cobalt tint, clip-path angled cut on the left edge.\"\n  cover-dots:\n    layout: \"3x3 grid of 6px cobalt dots at 12px gap, 25% opacity\"\n    description: \"Small dotted decoration used on cover and other open-space surfaces.\"\n  closing-circles:\n    border: \"1px solid {colors.border}\"\n    borderRadius: \"50%\"\n    description: \"Two concentric centered circles (500px outer, 360px inner) as atmospheric decoration on closing-class surfaces. Opacity 0.3-0.4.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBlue Professional is a **consulting-grade presentation system** designed for executive briefings, research deliverables, and quarterly reviews. Its foundational visual premise is **restraint with one strong commitment**: a warm cream canvas (`{colors.bg}` — `#fdfae7`) and a single saturated cobalt (`{colors.primary}` — `#1e2bfa`) that carries every accent, every metric, every CTA, every eyebrow, every chart fill. There is no secondary brand color, no palette of pastels, no warm/cool pairing — just cream, cobalt, and a tight ladder of muted grays for body text.\n\nThe type system uses two open Google Fonts in tightly defined roles. **Space Grotesk** (weights 300-700) is the display, headline, numerical, and chrome face — used for h1-h3 headings, all metric/stat numerals, eyebrow labels (in uppercase with 0.08em tracking), tag pills, CTAs, slide counters, agenda numbers, and step circles. Its slightly geometric character + soft humanist warmth makes it read as both modern (suitable for AI/tech audiences) and trustworthy (suitable for finance audiences). **Inter** (weights 300-600) is the body face — used for paragraph text, list bodies, metric descriptions, and table-style content. The Space Grotesk / Inter pairing is deliberately ordinary; what makes the system feel distinctive is the discipline of their usage, not the novelty of the faces.\n\nThe color philosophy is **one accent, three text grays**. Cobalt does all the emphasis work: headlines stay in `{colors.text}` (a near-black `#111111`), but every metric value, every eyebrow, every CTA, every chart bar, every callout border, every step circle, every progress indicator is cobalt. Body text uses a three-step gray ladder — `{colors.text}` for primary body, `{colors.text-muted}` (`#6b6b6b`) for paragraph body and metric descriptions, `{colors.text-light}` (`#9a9a9a`) for tertiary metadata. Only two non-cobalt accent colors exist: `{colors.positive}` (a subdued green `#059669`) and `{colors.negative}` (a subdued red `#dc2626`), used only on directional change indicators (arrows and percentages on metric cards) — and these are inline text colors, not fills.\n\nDepth is **soft and tinted**, never offset or shadowed. Cards are 4% cobalt tints (`{colors.card-bg}`) with 1.5px translucent cobalt borders (`{colors.border}` — cobalt at 20% opacity) and 10-14px rounded corners. There are no drop shadows except a single subtle cobalt-tinted shadow on the CTA hover state (`0 8px 24px rgba(30, 43, 250, 0.25)`). The lack of harsh shadows is what gives the system its quiet, premium feel — every elevation is implied by border + tint, not by shadow.\n\n**Density philosophy: balanced and data-dense without crowding.** This system is built to carry information — six-stat dashboards, six-detail-block grids, seven-bar rankings, multi-column splits with callouts and mini-stats. The system reads as authoritative when populated with substantive content and timid when sparse. A typical surface holds: a slide-header (h4 eyebrow + tag pill) + a section h2 headline + a grid or list of 3-6 information cells. Cards have moderate internal padding (1.5rem) and moderate inter-card gap (1.2-1.5rem) — neither tight nor airy. The system can support both quote/cover-class surfaces (one bold statement in space) and dashboard-class surfaces (six cards of dense data) without feeling like two different systems.\n\n**Key Characteristics:**\n- Warm cream ground (`{colors.bg}`) on every surface — never pure white, never gray.\n- Single saturated cobalt (`{colors.primary}`) as the only accent — used for every eyebrow, metric, CTA, chart fill, and progress indicator.\n- Space Grotesk (display + chrome) + Inter (body) — never substitute either.\n- Cards are 4% cobalt tints with 1.5px cobalt-at-20% borders and 10-14px rounded corners.\n- Soft pill-shaped chrome (`{components.tag-pill}`, `{components.cta-button}`) with full `100px` border-radius.\n- Headlines use Space Grotesk weight 600-700 with -0.02em tracking on a near-black text color.\n- Body uses Inter weight 400 at 13.6-16.8px with 1.6 line-height in the muted gray.\n- Every slide carries a slide-header (eyebrow + tag pill), a single h2, and a flexible content region — the structure is rhythmic across the deck.\n- Persistent chrome: cobalt progress bar at bottom edge, slide-counter at bottom-left, circular nav-arrows at bottom-right.\n- Decorative atmospheric elements (concentric circles, dot grids, diagonal accent panels) appear only on cover and closing-class surfaces.\n\n## Colors\n\n### Palette\n\n- **Bg** (`{colors.bg}` — `#fdfae7`): The warm cream canvas. The default and universal surface. Slightly green-cream-leaning warmth that distinguishes the system from corporate-template white. Every slide rests on this ground.\n- **Primary** (`{colors.primary}` — `#1e2bfa`): The signature cobalt. A highly saturated electric blue that carries every emphasis moment. Used for h4 eyebrows, metric values, stat numerals, chart bar fills, CTA fills, step circles, progress bars, accent lines, agenda numbers, and the cite border on highlight blocks. No other accent color exists.\n- **Text** (`{colors.text}` — `#111111`): The primary text color. Near-black, slightly warmer than `#000000`. Used for h1-h3 headlines, primary content text, metric labels, and any text that should carry full weight.\n- **Text-muted** (`{colors.text-muted}` — `#6b6b6b`): Secondary text — body paragraphs, metric descriptions, captions. Reads as comfortably softer than the primary text without disappearing.\n- **Text-light** (`{colors.text-light}` — `#9a9a9a`): Tertiary text — slide meta info, hairline dividers in text, stat context lines. The lightest readable gray; below this, text becomes ambient noise.\n- **Accent-light** (`{colors.accent-light}` — `rgba(30, 43, 250, 0.08)`): The default cobalt tint for tag pills, bar tracks, highlight callouts, and cover-decoration panels.\n- **Accent-medium** (`{colors.accent-medium}` — `rgba(30, 43, 250, 0.15)`): A slightly darker cobalt tint, available but used sparingly.\n- **Border** (`{colors.border}` — `rgba(30, 43, 250, 0.2)`): Cobalt at 20% opacity. The universal soft border color for cards, nav buttons, decorative circles, and structural rules.\n- **Card-bg** (`{colors.card-bg}` — `rgba(30, 43, 250, 0.04)`): Cobalt at 4% opacity. The universal card fill — softer than accent-light, reading as a barely-tinted surface that lifts slightly off the cream ground.\n- **Positive** (`{colors.positive}` — `#059669`): Subdued green. Used only inline as the text color for positive-change indicators (up-arrow + percentage). Never used as a fill or border.\n- **Negative** (`{colors.negative}` — `#dc2626`): Subdued red. Used only inline as the text color for negative-change indicators. Never used as a fill or border.\n\n### Defaults\n\n- **Default surface background**: `{colors.bg}` — every surface starts on cream.\n- **Default headline color**: `{colors.text}` (`#111111`) — headlines are near-black, never cobalt. Cobalt is reserved for accent moments (eyebrows, metrics, CTAs).\n- **Default body text color**: `{colors.text-muted}` (`#6b6b6b`) — body paragraphs default to muted, not full black.\n- **Default eyebrow / h4 color**: `{colors.primary}` — eyebrows are always cobalt, always uppercase, always with 0.08em tracking.\n- **Default card fill**: `{colors.card-bg}` (cobalt at 4%) — the universal soft tint.\n- **Default card border**: `{colors.border}` (cobalt at 20%) at 1px or 1.5px. Never solid full-cobalt borders.\n- **Default card border-radius**: 10-14px depending on card size (`{radii.card-sm}` for stat cells, `{radii.card-md}` for stat cards and detail blocks, `{radii.card-lg}` for metric cards).\n- **Default accent for any numerical value (metric, stat, agenda number, bar percentage)**: `{colors.primary}`.\n- **Default chart bar color**: `{colors.primary}` solid fill on a `{colors.accent-light}` track.\n- **Default CTA**: `{components.cta-button}` — solid cobalt pill with cream text and 100px border-radius.\n- **Default tag pill**: `{components.tag-pill}` — soft cobalt tint with cobalt text and 100px border-radius, paired with an h4 eyebrow in the slide-header.\n\nThe system has **no secondary accent color**. Don't reach for orange, teal, or purple to differentiate categories — the single-cobalt discipline is the system's identity. Categorical differentiation should be done through positioning, sizing, or labeling, not through additional hues.\n\n## Typography\n\n### Font Family Stack\nThe system runs two faces, each with a single role.\n\n**Space Grotesk** (Google Fonts, weights 300-700) is the display + numerical + chrome face. Used for every h1, h2, h3, h4 heading; every numerical callout (metric values, stat numbers, agenda numbers, bar percentages, step circles); every chrome element (tag pills, CTAs, slide counters, hint text); and every uppercase eyebrow with 0.08em tracking. Its slightly geometric character + softly rounded humanist forms read as both contemporary and trustworthy — suitable for both AI/tech and finance audiences.\n\n**Inter** (Google Fonts, weights 300-600) is the body face. Used for paragraph text, list bodies, metric descriptions, agenda descriptions, detail-block body, and any longer-form content. Set at weight 400 with line-height 1.6 in the muted gray, Inter reads as comfortable, generous, and editorial.\n\nThe face roles are non-overlapping: Space Grotesk handles every numeral and every heading; Inter handles every paragraph and list body. Don't cross the boundary — Inter h1 reads as a different brand; Space Grotesk body reads as a tech startup landing page.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.h1}` | 44.8–67.2px clamp | Space Grotesk | 700 | Cover or closing title |\n| `{typography.h2}` | 28.8–41.6px clamp | Space Grotesk | 600 | Primary section headline on each slide |\n| `{typography.h3}` | 17.6–24px clamp | Space Grotesk | 500 | Agenda item / region title |\n| `{typography.h4-eyebrow}` | 13.6–16px clamp | Space Grotesk | 600 | Uppercase eyebrow in the slide-header (always cobalt) |\n| `{typography.body}` | 13.6–16.8px clamp | Inter | 400 | Standard body paragraph |\n| `{typography.metric-value}` | 35.2–48px clamp | Space Grotesk | 700 | Large metric numeral in a callout card |\n| `{typography.metric-label}` | 15.2–17.6px clamp | Inter | 600 | Metric label line under the numeral |\n| `{typography.metric-desc}` | 12.5–14.4px clamp | Inter | 400 | Metric supporting description paragraph |\n| `{typography.metric-support}` | 12–13.6px clamp | Inter | 400 | Metric supporting bullet list |\n| `{typography.stat-num}` | 25.6–33.6px clamp | Space Grotesk | 700 | Stat-cell numeral (smaller than metric-value) |\n| `{typography.stat-name}` | 13.6–15.2px clamp | Inter | 500 | Stat-cell descriptive name line |\n| `{typography.stat-context}` | 12px | Inter | 400 | Stat-cell tertiary context line below a hairline divider |\n| `{typography.agenda-num}` | 28.8px | Space Grotesk | 700 | Agenda item numeral |\n| `{typography.insight-num}` | 12.5px | Space Grotesk | 600 | Counter-style number prefix on insight list items |\n| `{typography.split-highlight}` | 18.4–24px clamp | Space Grotesk | 500 | Inline pull-quote text inside a split-highlight block |\n| `{typography.blockquote}` | 25.6–38.4px clamp | Space Grotesk | 500 | Quote-class headline body |\n| `{typography.quote-mark}` | 128px | Space Grotesk | 700 | Decorative oversized quote glyph at 15% opacity above a blockquote |\n| `{typography.step-circle-text}` | 20.8px | Space Grotesk | 700 | Numeral inside a circular step marker |\n| `{typography.step-title}` | 15.2–18.4px clamp | Space Grotesk | 600 | Step title beneath a step circle |\n| `{typography.bar-label}` | 12.8–16px clamp | Inter | 500 | Bar chart row label |\n| `{typography.bar-pct}` | 15.2px | Space Grotesk | 600 | Bar chart row percentage value |\n| `{typography.tag}` | 12px | Space Grotesk | 500 | Tag pill text in slide-header |\n| `{typography.counter}` | 12.8px | Space Grotesk | 500 | Persistent slide counter |\n| `{typography.meta}` | 12.8px | Space Grotesk | 400 | Cover meta line (e.g., date / confidential marker) |\n| `{typography.cite}` | 12.5px | Space Grotesk | 500 | Cite/attribution under a pull-quote, uppercase with 0.04em tracking |\n\n### Defaults\n\n- **Default size for a cover title**: `{typography.h1}` (44.8–67.2px). Always Space Grotesk weight 700 with -0.02em tracking.\n- **Default size for the primary section headline on each slide**: `{typography.h2}` (28.8–41.6px). Space Grotesk weight 600. The \"section h2\" is the system's structural workhorse — every content slide has one.\n- **Default size for a region or agenda-item title**: `{typography.h3}` (17.6–24px).\n- **Default size for the eyebrow above the h2**: `{typography.h4-eyebrow}` (13.6–16px) in cobalt, uppercase, 0.08em tracking.\n- **Default size for paragraph body**: `{typography.body}` (13.6–16.8px clamp). Inter weight 400 with line-height 1.6.\n- **Default size for a large metric numeral**: `{typography.metric-value}` (35.2–48px). For dashboard stat cells, step down to `{typography.stat-num}` (25.6–33.6px).\n- **Default size for a quote body**: `{typography.blockquote}` (25.6–38.4px). Always Space Grotesk weight 500.\n- **Default weight for Space Grotesk headings**: 500 (h3) → 600 (h2 and eyebrow) → 700 (h1 and numerical callouts). Don't reach for weight 400 or 800; the weight ladder is fixed.\n- **Default weight for Inter body**: 400. Inter body at 500-600 reads as too assertive; at 300 reads as too thin.\n- **Default tracking for h1-h3 headings**: -0.02em. Without negative tracking, Space Grotesk display reads as untreated.\n- **Default tracking for the h4 eyebrow**: 0.08em uppercase. Without the wide tracking + uppercase combination, the eyebrow doesn't read as an eyebrow.\n\nWhen unsure which heading token to reach for, default to `{typography.h2}` (28.8–41.6px) for the slide's primary text moment. `{typography.h3}` is for region or agenda-item titles; `{typography.h1}` is reserved for cover and closing.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every h4 eyebrow is Space Grotesk weight 600 in `{colors.primary}` cobalt, uppercase, with 0.08em letter-spacing.** No exceptions. An eyebrow without uppercase + tracking + cobalt color is not the system's eyebrow — it's a stray sans element.\n- **Every headline (h1, h2, h3) uses negative letter-spacing of -0.02em.** Default-tracked Space Grotesk display reads as untreated and breaks the editorial discipline.\n- **Every headline uses `{colors.text}` (`#111111`), not cobalt.** Cobalt headlines are forbidden — cobalt is reserved for accent moments (eyebrows, metrics, CTAs, chart bars). Reversing this collapses the visual hierarchy.\n- **Every numerical callout (metric value, stat number, agenda number, bar percentage, step circle) is Space Grotesk weight 600-700 in `{colors.primary}` cobalt.** Numerical values are the system's primary accent moment.\n- **Every body paragraph is Inter weight 400 in `{colors.text-muted}` (`#6b6b6b`) with line-height 1.6.** Body in pure black reads as too heavy; body in text-light reads as too faint.\n- **Every CTA is the `{components.cta-button}` pattern: solid cobalt pill with cream text, 100px border-radius, 0.9rem × 2.2rem padding.** CTAs in any other shape or color don't exist.\n- **Every tag pill is the `{components.tag-pill}` pattern: soft cobalt tint with cobalt text, 100px border-radius, 0.35rem × 0.9rem padding.** Tag pills with solid backgrounds or borders break the system.\n- **Every slide-header places the h4 eyebrow on the left and the tag pill on the right.** This is the structural rhythm of every content slide.\n\n### Typography Principles\n\nThe voice contrast is **near-black display headlines ↔ cobalt eyebrows + numerals ↔ muted gray body**. Italic and underline are not used. The only emphasis mechanisms are: switching weight within the Space Grotesk ladder, switching color from text-muted to text or to cobalt, and uppercase + tracking on labels.\n\nNumerical content is **always Space Grotesk**, even small numerical labels (bar percentages, slide counters, mini-stat values). The mono-flavored character of Space Grotesk at numerical sizes mimics tabular figures without requiring an actual monospace face.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and animated in via opacity + translateX (40px → 0px) on 500ms ease. Only the `.active` slide is `opacity: 1`; the previous slide gets a `.prev` class and translates -40px out of view.\n\nDefault slide padding is asymmetric: `3.5vw` left, top, and right; `8.5vh` bottom. The extra bottom space reserves room for the fixed slide-counter (left) and nav-controls (right) which sit at `bottom: 2.5vh` overlapping the viewport bottom.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide-x}` | 4vw | Slide horizontal padding |\n| `{spacing.pad-slide-y-top}` | 3.5vw | Slide top padding |\n| `{spacing.pad-slide-y-bottom}` | 8.5vh | Slide bottom padding (extra to clear nav chrome) |\n| `{spacing.pad-card-lg}` | 1.5rem 1.6rem | Large card internal padding (metric cards) |\n| `{spacing.pad-card-md}` | 1.4rem 1.5rem | Medium card internal padding (stat cells) |\n| `{spacing.pad-card-sm}` | 1rem 1.2rem | Small card internal padding (detail blocks) |\n| `{spacing.pad-mini}` | 0.9rem 1rem | Mini card internal padding (mini-stat cells) |\n| `{spacing.gap-grid-lg}` | 3.5rem | Large gap between split columns |\n| `{spacing.gap-grid-md}` | 2rem 3rem | Medium gap in two-column grids (row × col) |\n| `{spacing.gap-grid-sm}` | 1.5rem | Standard gap in 3-column metric grids |\n| `{spacing.gap-cards}` | 1.2rem | Gap between dashboard stat cells |\n| `{spacing.gap-mini}` | 1rem | Gap between mini-stats |\n| `{spacing.header-margin}` | 2.5vh | Margin below the slide-header |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Slide counter** at bottom-left — Space Grotesk 12.8px weight 500 in text-muted gray, fixed at `bottom: 2.5vh; left: 3vw`.\n- **Nav controls** at bottom-right — two circular 44px nav-buttons with 1.5px cobalt-at-20% borders, fixed at `bottom: 2.5vh; right: 3vw`. Disabled state at 30% opacity (first slide / last slide).\n- **Progress bar** at bottom edge — 3px solid cobalt strip with width = `(currentSlide + 1) / total * 100%`. Animates on slide change.\n\nA **keyboard hint** (\"Use arrow keys to navigate\") appears at bottom center in text-light gray.\n\n### Slide-Header Structure\nEvery content slide carries a `.slide-header` band at the top: an h4 eyebrow on the left, a tag pill on the right. Below the slide-header sits the section h2, then the content region (a grid, list, chart, or split). Cover, quote, and closing slides skip the slide-header in favor of centered content.\n\n### Content Grids\nThe system uses repeated grid patterns for content layout: 2×3 agenda grid, 3-column metric row, 3-column stats grid (becomes 2 rows on dashboards), 1.05fr/1fr split-body, 4-step timeline row, 2-column detail grid. These are content-density containers; the grid choice depends on content volume, not on a fixed layout vocabulary.\n\n## Depth and Elevation\n\n### Tinted Cards (Primary Depth Mechanism)\nThe system uses **soft cobalt-tinted backgrounds + soft cobalt-borders + rounded corners** to create the impression of elevation without using shadows. A card with `background: {colors.card-bg}` (cobalt at 4%) and `border: 1.5px solid {colors.border}` (cobalt at 20%) sits visually above the cream ground without any actual offset. This treatment is the system's depth language.\n\n### No Drop Shadows on Cards\nThere are no `box-shadow` declarations on cards, stat cells, detail blocks, or any content container. The only shadow in the system is a single soft cobalt-tinted hover state on the CTA button: `0 8px 24px rgba(30, 43, 250, 0.25)`, which appears for 200ms on hover and disappears on mouse-out. This is the only colored, blurred shadow in the system.\n\n### Border-Left Accent (Highlight Block)\nThe `{components.split-highlight-block}` uses a 4px solid cobalt left border to signal \"this is a quoted callout, distinct from surrounding body\". This is the system's structural accent mechanism — it's not a shadow, but it carries the same elevation cue (the colored rule pulls the block forward visually).\n\n### Rounded Corners as Softness\nThe 10-14px border-radius on cards is part of the depth language. Without rounded corners, the cobalt-tinted cards would read as flat panels; the soft radius softens them into \"lifted\" surfaces.\n\n### Atmospheric Decorations\nDecorative elements (cover-decoration diagonal panel, concentric closing-circles, cover-dots grid, quote decoration circles) appear only on cover, quote, and closing-class surfaces. They are atmospheric, not structural — used to soften open-space surfaces without filling them with content.\n\n## Shapes and Treatment\n\n### Border Radius\n- **`{radii.pill}` = 100px** — fully rounded. Used on `{components.tag-pill}`, `{components.cta-button}`, and any pill-shaped chrome.\n- **`{radii.card-lg}` = 14px** — used on large metric cards.\n- **`{radii.card-md}` = 12px** — used on standard stat cells, split-highlight blocks.\n- **`{radii.card-sm}` = 10px** — used on detail blocks and mini-stats.\n- **`{radii.bar}` = 6px** — used on bar tracks and bar fills.\n- **`{radii.circle}` = 50%** — used on step circles, nav-button circles, accent dots, closing decoration circles, cover dots, quote decoration circles.\n\nThe radius ladder is graduated: tighter radii on smaller chrome, larger radii on bigger cards, fully rounded on pills, perfect circles on chrome. The system has **no square (0px) corners** anywhere except the progress bar.\n\n### Border Weights\n- **1px solid `{colors.border}`** — universal soft border. Used on stat cells, mini-stats, detail blocks, agenda items (bottom border only), stat-context dividers (top border only).\n- **1.5px solid `{colors.border}`** — slightly heavier soft border. Used on metric cards, nav-buttons.\n- **2px solid `{colors.border}`** — used on the split column divider (border-left on the right column of split layouts).\n- **4px solid `{colors.primary}`** — used only as the left rule on `{components.split-highlight-block}` to signal a quoted callout.\n\nThe borders are **never opaque cobalt** — they are always at 20% opacity (`{colors.border}`). This is what gives the system its quiet, lifted quality.\n\n### Decorative Element Types\n\n**Tinted card** (`{components.card-tinted}`) — Cobalt-at-4% background with 1.5px cobalt-at-20% border, 14px radius. The primary content card.\n\n**Tag pill** (`{components.tag-pill}`) — Fully rounded cobalt-at-8% pill with cobalt text. Sits in the top-right of the slide-header.\n\n**Eyebrow** (`{typography.h4-eyebrow}`) — Uppercase cobalt label with 0.08em tracking. Sits in the top-left of the slide-header.\n\n**CTA button** (`{components.cta-button}`) — Solid cobalt pill with cream text. The system's only solid-color element. Used once per closing surface.\n\n**Accent line** (`{components.accent-line}`) — A short 60×4 horizontal cobalt rule with 2px radius. Used above cover titles and as eyebrow separators on open-space surfaces.\n\n**Step circle** (`{components.step-circle}`) — A 56×56 solid cobalt circle with cream Space Grotesk numeral inside. Sequential timeline steps reduce opacity (1.0 → 0.85 → 0.7 → 0.55) to suggest fade-into-future.\n\n**Bar track + fill** (`{components.bar-track}` + `{components.bar-fill}`) — 28px-tall track in cobalt-at-8% with a solid cobalt fill whose width carries the data. 6px rounded corners on both.\n\n**Insight list item** (`{components.insight-list-item}`) — A counter-numbered list using CSS counter() to render decimal-leading-zero prefixes (\"01\", \"02\") in cobalt Space Grotesk 600 / 12.5px positioned absolute left.\n\n**Split highlight block** (`{components.split-highlight-block}`) — A cobalt-at-8% tinted block with a 4px cobalt left rule and a cite line below. Used for inline pull-quotes inside split-column layouts.\n\n**Cover decoration** (`{components.cover-decoration}`) — A clipped diagonal cobalt-tinted panel filling the right ~35% of cover surfaces. Reads as a printed accent without enclosing the layout.\n\n**Cover dots** (`{components.cover-dots}`) — A 3×3 grid of 6px cobalt dots at 12px gap, 25% opacity. Decorative atmosphere on open-space surfaces.\n\n**Closing circles** (`{components.closing-circles}`) — Two concentric centered circles (500px outer, 360px inner) with 1px cobalt-at-20% borders, opacity 0.3-0.4. Atmospheric decoration on closing-class surfaces.\n\n**Metric change chip** (`{components.metric-change-positive}` / `{components.metric-change-negative}`) — Inline directional indicator: a small arrow glyph + percentage value in `{colors.positive}` or `{colors.negative}`. No fill, no border — pure inline text color.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.bg}` (cream) as the universal canvas. Every surface starts on warm cream, never pure white.\n- Use `{colors.primary}` cobalt as the only accent color across the entire deck — for eyebrows, metrics, CTAs, chart fills, step circles, and progress indicators.\n- Set headlines (h1, h2, h3) in `{colors.text}` (`#111111`) near-black with -0.02em tracking. Cobalt headlines are forbidden; cobalt is for accent moments only.\n- Set every h4 eyebrow in cobalt Space Grotesk weight 600 with uppercase + 0.08em tracking. The eyebrow is the universal section opener.\n- Use `{components.card-tinted}` (cobalt-at-4% fill + cobalt-at-20% 1.5px border + 14px radius) as the universal content card pattern.\n- Pair every slide-header with an h4 eyebrow on the left and a `{components.tag-pill}` on the right. The rhythm is the system's structural identity.\n- Set body in Inter weight 400 at 13.6-16.8px in `{colors.text-muted}` (`#6b6b6b`) with line-height 1.6. The muted gray body is what makes the system feel premium.\n- Render every numerical callout (metric, stat, bar percentage, agenda number) in Space Grotesk weight 600-700 in cobalt. The cobalt numerical accent is the system's data voice.\n- Use full 100px border-radius on all chrome (tag pills, CTAs, nav-buttons). The pill shape is the system's chrome signature.\n- Use directional change chips (`{components.metric-change-positive}` / `{components.metric-change-negative}`) inline with no fill — green for positive, red for negative, both subdued.\n\n### Don't\n\n- Don't introduce a second accent color. Cobalt is the only accent — orange, teal, purple, or any additional brand color breaks the single-accent discipline.\n- Don't set headlines in cobalt. Headlines are near-black; cobalt is reserved for eyebrows, metrics, CTAs, and chart fills.\n- Don't use drop shadows on cards or content. The system has zero box-shadows except a single soft cobalt CTA hover.\n- Don't use square corners (0px radius) anywhere. The system is built around soft rounded corners — square corners immediately read as a different aesthetic.\n- Don't use opaque cobalt borders on cards. Borders are always cobalt-at-20% (`{colors.border}`). Full-opacity borders break the quiet, lifted feel.\n- Don't substitute fonts. Space Grotesk + Inter is the pairing. Substituting Arial, Helvetica, Roboto, or Open Sans collapses the typographic identity.\n- Don't crowd the canvas with bordered hard-edged elements. The system depends on soft tints and gentle borders; adding heavy outlines makes it feel like a different system.\n- Don't omit the slide-header (h4 eyebrow + tag pill) on a content slide. The header is the editorial rhythm.\n- Don't use uppercase body text. Uppercase is reserved for h4 eyebrows and the cite line under highlight blocks.\n- Don't use directional chips for non-directional emphasis. The green/red change chips are reserved for actual positive/negative comparisons (e.g., \"+11 pts vs. prior quarter\"). They are not general accent colors.\n\n## Responsive Behavior\n\nBlue Professional is designed as a **1920×1080 presentation system** (effective 100vw × 100vh). Sizing uses CSS `clamp()` for type and `vw / vh / rem` for spacing. The system has minimal responsive behavior — it's built for landscape presentation contexts.\n\n### Scaling Behavior\n- h1 scales 44.8px → 67.2px on viewport width.\n- h2 scales 28.8px → 41.6px.\n- Body scales 13.6px → 16.8px.\n- Metric values scale 35.2px → 48px.\n- Card padding (rem-based) scales with the user's font-size setting; default cards stay around 24-26px internal padding.\n- Borders (1px, 1.5px, 2px), border-radii (10-14px), and pill radius (100px) are fixed and do not scale.\n\n### Component Adjustments at Low Viewport Heights\nA single `@media (max-height: 700px)` block tightens spacing on dense slides:\n- Slide padding reduces from 3.5vw / 8.5vh to 2.5vh / 3vw.\n- Agenda grid gap reduces.\n- Metric and detail card padding reduces to 1rem.\n- Bar item padding reduces.\n\nThis ensures the system fits on shorter laptop screens without breaking the structural layout.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `Space`, or `PageDown`.\n- Slides reverse via `ArrowLeft` or `PageUp`.\n- `Home` jumps to first, `End` to last.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are 500ms ease with opacity fade + 40px translateX slide-in/out.\n- Nav-buttons disable at first/last slide (opacity 0.3).\n- Progress bar at the bottom edge animates to the current slide percentage with a 400ms ease.\n\n### Print Behavior\nThe system has no `@media print` rule. The slide transition is screen-only; printing produces only the active slide. For static export, screenshots of each slide preserve all atmospheric elements (cover decoration, dots, concentric circles are all CSS).\n\n### Interactive States\n- Nav-buttons invert on hover (cobalt fill, cream icon).\n- Agenda items get a subtle `{colors.card-bg}` background on hover (200ms transition).\n- CTA button lifts -2px on hover with a soft cobalt drop shadow (the only shadow in the system).\n- Bar fills animate from 0 to data value with a 0.8s ease transition — most visible on slide entry.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| h1 / h2 / h3 / h4-eyebrow / metric numerals / chart percentages | Space Grotesk 500–700 (negative tracking, uppercase on h4) | 思源黑体 Noto Sans SC 700 (0 tracking, no transform) |\n| Body / metric description / list body | Inter 400 | 思源宋体 Noto Serif SC 400 |\n| Mono / counter / tag pill / cite | Space Grotesk 500–600 (often uppercase) | 思源黑体 Noto Sans SC 500 (no transform) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use 思源黑体 Noto Sans SC for every Space Grotesk role (display, eyebrow, numerical, chrome) and 思源宋体 Noto Serif SC for the Inter body role. Both faces ship Latin glyphs that read cleanly alongside Chinese characters. The serif body pairing reinforces the consulting-grade editorial register that this template is built for — investor reports and McKinsey-style briefings often pair sans display with serif body in Chinese.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.2–1.3 (up from 1.1). CJK characters are visually full and crowd vertically more than Latin.\n- **Letter-spacing**: set to 0 on every CJK run. The template's −0.02em negative tracking on h1–h3 overlaps CJK strokes; the +0.08em positive tracking on h4 eyebrows reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. The h4-eyebrow and cite tokens use `text-transform: uppercase` in the Latin original; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 Q3 业绩复盘` not `2024Q3业绩复盘`.\n- **One font per sentence**: 思源黑体 / 思源宋体 cover both CJK and Latin glyphs — let one face handle each sentence. Don't let the browser fall back to Space Grotesk or Inter for ASCII characters mid-sentence.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on **restraint with one strong commitment** — cream ground, cobalt accent, soft tinted cards, no shadows. None of that depends on Latin typography; it transfers cleanly to Chinese. The h4-eyebrow loses its \"uppercase + 0.08em tracked + cobalt\" character in CJK because both uppercase and wide tracking drop. Compensate by **always pairing the eyebrow with the cobalt accent-line component above the headline** — the 60×4 cobalt rule does the chrome-recognition work that the tracked-uppercase did in Latin. Keep the eyebrow's cobalt color and weight-600 contrast against the muted-gray body.\n\nThe cobalt color discipline (`#1e2bfa` as the only accent, full-opacity on numerals and CTAs, 20% opacity on borders, 4% opacity on card fills) is the system's actual identity and transfers entirely to a CJK build. Numerical callouts remain Latin Arabic digits in Chinese consulting decks by convention (业绩 $24.3M, 同比 +18%), so the cobalt Space Grotesk → 思源黑体 swap mostly affects labels and headlines, not the headline-grabbing numerical figures. Keep numerals in 思源黑体 weight 700 for the digit rendering.\n\n### Known CJK Gap\n\n- **No CDN Chinese face matches Space Grotesk's \"trustworthy consulting\" register exactly.** 思源黑体 reads as more institutional and slightly less contemporary than Space Grotesk. The template will feel slightly more \"official report\" and slightly less \"AI startup\" than its Latin original. This is generally desirable for executive-briefing contexts in Chinese.\n- **The h4-eyebrow signal weakens.** The \"uppercase Space Grotesk 600 in cobalt with 0.08em tracking\" combination is the system's most recognizable small chrome and loses both the uppercase and tracking signals in CJK. Adding the `{components.accent-line}` above or below the eyebrow is the recommended compensation; without it, eyebrows can blend into body weight contrast.\n- **Body in 思源宋体 changes the register.** Inter body reads as neutral-modern; 思源宋体 reads as editorial-serious. The system's \"premium consulting\" feel becomes slightly more \"policy paper\" — appropriate for state-owned enterprise or government audiences, slightly heavy for startup-pitch audiences. For startup contexts, swap body to 思源黑体 Noto Sans SC 400 instead.\n\n## Iteration Guide\n\n1. Any new slide starts on `{colors.bg}` cream ground. Don't switch the background per slide; the constant ground is the system's identity.\n2. Any new content slide carries a slide-header at the top: h4 eyebrow (cobalt, uppercase, 0.08em) on the left + tag-pill on the right.\n3. Any new headline uses Space Grotesk weight 600-700 in `{colors.text}` near-black with -0.02em tracking. Reach for h2 (28.8-41.6px) for primary moments.\n4. Any new card uses the tinted pattern: `{colors.card-bg}` (cobalt at 4%) + 1-1.5px `{colors.border}` (cobalt at 20%) + 10-14px radius. Never use solid color fills or opaque borders.\n5. Any new numerical callout (metric value, stat number, agenda number, bar percentage, step circle) is Space Grotesk weight 600-700 in `{colors.primary}` cobalt. Numbers are the accent moment.\n6. Any new accent line, divider, or directional rule uses cobalt — solid for the primary rule, soft-cobalt (20% opacity) for borders.\n7. Any new CTA uses the `{components.cta-button}` pattern: solid cobalt pill with cream text, 100px radius, no other CTA shape exists.\n8. Any new chart bar uses `{components.bar-fill}` (solid cobalt) on `{components.bar-track}` (cobalt at 8%) with 6px radius.\n9. Any new step or sequential indicator uses the `{components.step-circle}` with diminishing opacity for future steps (1.0 → 0.85 → 0.7 → 0.55).\n10. If a surface feels too sparse, add information (more stats, more detail blocks) — don't add a second accent color or a heavier border to fill space. The system reads as elegant when populated with substance, not noise.\n\n## Known Gaps\n\n- **Space Grotesk and Inter are loaded from Google Fonts** via a preconnect + `<link>`. There are no system fallbacks beyond `sans-serif` — in environments where Google Fonts fail, the system collapses to system defaults and loses its character.\n- **The directional change colors (`{colors.positive}` and `{colors.negative}`) are inline-only.** There is no token-level support for status fills, success/error badges, or alerts beyond these two inline text colors.\n- **The single-accent discipline limits categorical color encoding.** Multi-series charts must distinguish through positioning or labeling — there is no design-system answer for \"show 4 categorical series in different colors\". This is intentional but limits chart expressiveness.\n- **The agenda-item hover state changes background to `{colors.card-bg}`** — interactive on hover. This may not work as expected in static screen-share contexts.\n- **Bar fills animate from 0 to value on entry** but only the active slide's bars are visible. Re-entering a slide replays the animation; the system does not preserve animation state.\n- **The progress bar reads as decorative on slide 1** (it's at ~10% on a 10-slide deck) and\n\n<!-- [TRUNCATED AT 50KB] -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/preview.md":"# Blue Professional Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/blue-professional/design.md`\n- Preview card: `bold-template-pack/templates/blue-professional/preview.md`\n\n## Selection Metadata\n\n- Slug: `blue-professional`\n- Tagline: Cream paper background with electric cobalt blue accents; clean modern professional.\n- Mood: professional, modern, calm, trustworthy\n- Tone: clean, considered, polished, neutral\n- Formality: medium-high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports. Also a clean, tasteful choice whenever you want to read as professional without going stiff — research synthesis, internal reviews, brand work for service businesses.\n- Avoid for: Contexts where the deck should feel hot, playful, or intentionally informal — the cool electric-blue restraint will read as overly polished.\n\n## Visual Snapshot\n\nA restrained, consulting-grade presentation system on a warm cream canvas (#fdfae7) with a single saturated cobalt blue (#1e2bfa) as the only accent color. Display type runs Space Grotesk for headlines and numerical callouts; Inter handles body and chrome. Cards are soft-tinted cobalt at 4% opacity with 1.5px translucent borders and 10-14px rounded corners — quiet, never bordered in solid color. The aesthetic borrows from investment-research reports, McKinsey-grade quarterly briefings, and contemporary financial dashboards — measured, data-dense without feeling crowded, and unmistakably professional. The system is built for executive readability at distance, with strong typographic hierarchy and a single accent color carrying every emphasis moment.\n\nBlue Professional is a consulting-grade presentation system designed for executive briefings, research deliverables, and quarterly reviews. Its foundational visual premise is restraint with one strong commitment: a warm cream canvas ({colors.bg} — #fdfae7) and a single saturated cobalt ({colors.primary} — #1e2bfa) that carries every accent, every metric, every CTA, every eyebrow, every chart fill. There is no secondary brand color, no palette of pastels, no warm/cool pairing — just cream, cobalt, and a tight ladder of muted grays for body text.\n\n## Preview Ingredients\n\n- Palette: bg #FDFAE7; primary #1E2BFA; text #111111; text-muted #6B6B6B; text-light #9A9A9A; positive #059669; negative #DC2626\n- Typography: See full design doc after selection.\n- Signature move: Warm cream ground ({colors.bg}) on every surface — never pure white, never gray.\n- Signature move: Single saturated cobalt ({colors.primary}) as the only accent — used for every eyebrow, metric, CTA, chart fill, and progress indicator.\n- Signature move: Space Grotesk (display + chrome) + Inter (body) — never substitute either.\n- Signature move: Cards are 4% cobalt tints with 1.5px cobalt-at-20% borders and 10-14px rounded corners.\n- Signature move: Soft pill-shaped chrome ({components.tag-pill}, {components.cta-button}) with full 100px border-radius.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/design.md":"---\nversion: alpha\nname: Bold Poster\ndescription: \"A populist editorial poster system that mashes vintage Italian sports-magazine display lettering with classical serif body and tight monospace metadata. The display face is Shrikhand — a heavy slab/script hybrid with playful italic personality — rendered at poster scale (often 200-320px) and routinely tilted off-axis. Body runs Libre Baskerville for a literary editorial register; Space Grotesk handles tiny uppercase labels and chrome. The palette is uncompromising: white canvas, deep brown-black ink (#1C1410), single saturated tomato red (#D8000F), and a warm off-white (#F5F2EF) for alternating panels. Borders are bold 1.5-3px ink rules; the only shadow is a single stacked offset behind red display text. The aesthetic is loud, confident, and unmistakably print-poster — closer to a 1970s European brand annual report or a wine merchant's catalogue than a contemporary slide deck.\"\n\ncolors:\n  bg: \"#FFFFFF\"\n  dark: \"#1C1410\"\n  red: \"#D8000F\"\n  light: \"#F5F2EF\"\n\ntypography:\n  hero-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(72px, 16vw, 220px)\"\n    lineHeight: 0.88\n    letterSpacing: 1px\n    color: \"{colors.dark}\"\n  hero-title-red:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(84px, 18vw, 260px)\"\n    lineHeight: 0.85\n    color: \"{colors.red}\"\n    transform: \"rotate(-4deg)\"\n  hero-title-bottom:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(64px, 14vw, 200px)\"\n    lineHeight: 0.9\n    color: \"{colors.dark}\"\n    transform: \"rotate(2deg)\"\n  close-big:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(80px, 18vw, 260px)\"\n    lineHeight: 0.88\n    color: \"{colors.red}\"\n    transform: \"rotate(-5deg)\"\n  stat-big:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, 26vw, 320px)\"\n    lineHeight: 0.82\n    color: \"{colors.red}\"\n    transform: \"rotate(-6deg)\"\n  red-quote:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, 7vw, 90px)\"\n    lineHeight: 1.15\n    color: \"{colors.bg}\"\n    textShadow: \"2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)\"\n  section-header:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, 5vw, 64px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  section-header-lg:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(36px, 6vw, 72px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  cell-number-lg:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 3.5vw, 52px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  cell-number-md:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 3.5vw, 48px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  card-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(22px, 3vw, 36px)\"\n    lineHeight: 1.1\n    color: \"{colors.dark}\"\n  card-title-sm:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(20px, 2.5vw, 32px)\"\n    lineHeight: 1.1\n    color: \"{colors.dark}\"\n  pillar-num:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(36px, 5vw, 64px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  pillar-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2.2vw, 28px)\"\n    lineHeight: 1.15\n    color: \"{colors.dark}\"\n  stat-item-num:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 4vw, 56px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  roadmap-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2.5vw, 32px)\"\n    lineHeight: 1.1\n  inline-stat:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2vw, 28px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  body:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.2vw, 16px)\"\n    lineHeight: 1.75\n    color: \"{colors.dark}\"\n  body-card:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 1.1vw, 14px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  body-cell:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 13px)\"\n    lineHeight: 1.55\n    color: \"{colors.dark}\"\n  body-small:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 13px)\"\n    lineHeight: 1.5\n    color: \"{colors.dark}\"\n  hero-meta:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 14px)\"\n    lineHeight: 1.5\n    color: \"{colors.dark}\"\n  tag-body:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.2vw, 16px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  red-cite:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.3vw, 16px)\"\n    lineHeight: 1.5\n    color: \"{colors.bg}\"\n  close-sub:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(14px, 1.5vw, 18px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 10px\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  label-red:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 10px\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  rm-label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 9px\n    letterSpacing: 3px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  tag-label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    letterSpacing: 3px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  bullet-body:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    lineHeight: 1.45\n    color: \"{colors.dark}\"\n  counter:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 11px\n    lineHeight: 1\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  link:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  fc-micro:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: 10px\n    lineHeight: 1.4\n    color: \"{colors.dark}\"\n\nspacing:\n  pad-slide: \"48px 56px\"\n  pad-cell: \"22px 20px\"\n  pad-cell-sm: \"20px 24px\"\n  pad-pillar: \"32px 24px\"\n  pad-card: \"24px\"\n  pad-roadmap: \"40px 48px\"\n  gap-grid-md: \"24px 32px\"\n  gap-grid-roadmap: \"28px 36px\"\n  gap-grid-stats: \"48px\"\n  gap-stat-row: \"20px\"\n  pad-bottom-clearance: \"40px\"\n  max-width-content: 1100px\n  max-width-services: 1000px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.bg}\"\n\ncomponents:\n  progress-bar:\n    position: \"fixed, bottom 0 left 0\"\n    height: 5px\n    background: \"{colors.red}\"\n    description: \"Persistent thick red progress strip at the bottom of the viewport. Width grows linearly with slide index. The system's most prominent piece of chrome.\"\n  counter:\n    position: \"fixed, bottom 18px right 24px\"\n    color: \"{colors.dark}\"\n    opacity: 0.5\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontSize: 11px\n    letterSpacing: 2px\n    description: \"Persistent slide counter NN / NN at 50% opacity in Space Grotesk uppercase.\"\n  hint-pill:\n    position: \"fixed, bottom 18px center\"\n    background: \"{colors.light}\"\n    padding: \"6px 14px\"\n    borderRadius: 4px\n    fontSize: 10px\n    opacity: 0\n    description: \"Bottom-center hint pill that fades to 50% opacity on body hover. Subtle wayfinding only.\"\n  section-bordered-grid:\n    border: \"3px solid {colors.dark}\"\n    description: \"Heavy 3px ink border enclosing a grid of cells. Each child cell carries a 1.5px ink inner border, producing a hairline-on-heavy double-border tabular grid. Used for financial-figure and summary-highlight grids.\"\n  cell-bordered:\n    border: \"1.5px solid {colors.dark}\"\n    padding: \"22px 20px\"\n    description: \"Tabular cell with 1.5px ink border. Lives inside a 3px-bordered parent grid; the two border weights touch to produce the system's signature grid-with-double-edge.\"\n  red-leftbar-card:\n    borderLeft: \"4px solid {colors.red}\"\n    paddingLeft: 18px\n    description: \"Service or content card marked by a 4px solid red left rule and 18px left padding. The system's editorial card pattern — no outline, just the red rule signaling the start of a block.\"\n  red-leftbar-card-thin:\n    borderLeft: \"3px solid {colors.red}\"\n    paddingLeft: 16px\n    description: \"Thinner variant of the red-leftbar card used on dark surfaces (roadmap phases). Same pattern, scaled-down rule weight.\"\n  bullet-em-dash:\n    glyph: \"—\"\n    color: \"{colors.red}\"\n    fontWeight: 700\n    paddingLeft: 14px\n    description: \"List bullet using a red em-dash (—) glyph in place of a disc. The dash sits at position absolute left and the body text indents to clear it.\"\n  bullet-bullet:\n    glyph: \"•\"\n    color: \"{colors.red}\"\n    paddingLeft: 12px\n    description: \"List bullet using a red round bullet (•) glyph. Same indent pattern as the em-dash variant.\"\n  pillar-panel:\n    flex: 1\n    padding: \"32px 24px\"\n    borderRight: \"3px solid {colors.dark}\"\n    description: \"Vertical column panel inside a multi-pillar layout. Each pillar separated by a 3px ink vertical rule. Alternating panels swap background from {colors.bg} to {colors.light} for striping.\"\n  pillar-bullet-row:\n    padding: \"5px 0\"\n    borderBottom: \"1px solid rgba(28, 20, 16, 0.08)\"\n    description: \"Bullet row inside a pillar with a hairline-soft bottom border (ink at 8%) separating items. The last item drops the border.\"\n  global-card:\n    border: \"2px solid {colors.dark}\"\n    padding: 24px\n    description: \"Bordered information card with 2px ink outline. Used on the global presence layout. Heavier than the leftbar pattern, more contained.\"\n  stacked-text-shadow:\n    textShadow: \"2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)\"\n    description: \"Three-step decreasing-opacity stacked offset shadow in ink. Applied only to large red display text on red panels. The system's only shadow treatment.\"\n  red-panel:\n    background: \"{colors.red}\"\n    color: \"{colors.bg}\"\n    description: \"Full-bleed saturated red panel surface. Carries white text with the stacked-text-shadow treatment on display.\"\n  dark-panel:\n    background: \"{colors.dark}\"\n    color: \"{colors.bg}\"\n    description: \"Full-bleed deep brown-black panel surface. Carries white text and red accents (left bars, mono labels).\"\n  link-underline:\n    color: \"{colors.dark}\"\n    borderBottom: \"2px solid {colors.red}\"\n    paddingBottom: 4px\n    description: \"Footer link style — Space Grotesk uppercase with a 2px red underline. Hover swaps text color to red.\"\n  hero-title-stack:\n    description: \"A three-line stacked title where each line is a Shrikhand display element at a slightly different size. Two of the three lines carry rotation transforms (-4deg, +2deg) and one is set in red. The composition is the system's signature opener.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBold Poster is a **populist editorial poster system** that lifts its visual vocabulary from vintage Italian sports magazines, mid-century European brand annual reports, and wine-merchant catalogues. The premise is that every slide should feel printed — set in heavy display type, locked to one strong red accent, on a white or off-white sheet, with grids ruled in ink and decoration kept to a strict minimum.\n\nThe type system is three faces working in tight roles. **Shrikhand** (Google Fonts) is the display face — a heavy slab/script hybrid with chunky italic terminals, narrow apertures, and a distinctly Italian-sports-script personality. Used at poster scale (often 100-320px) and almost always with playful rotation (-6° to +2°), Shrikhand carries every hero title, every section header, every stat figure, every card title. **Libre Baskerville** (Google Fonts) is the body face — a classical literary serif with strong stroke contrast that anchors the system in editorial register. Used at 11-16px with 1.5-1.75 line-height in deep ink, Libre Baskerville is what makes the system feel printed rather than digital. **Space Grotesk** (Google Fonts) is the chrome face — used exclusively for tiny uppercase labels (9-12px, 2-3px tracking), bullet body inside cards, slide counters, and footer links. The Space Grotesk treatment is the system's \"metadata\" voice.\n\nThe color philosophy is **uncompromising restraint**: white canvas, deep brown-black ink (`{colors.dark}` — `#1C1410`), single saturated tomato red (`{colors.red}` — `#D8000F`), and a warm off-white (`{colors.light}` — `#F5F2EF`) for alternating panels. There are no secondary brand colors, no gradients (except the inside of the stacked text-shadow), no tints, no semantic state colors. Every numerical callout, every active rule, every CTA, every emphasis moment is red — and red is reserved for these moments only (it is never used as body text, never as fill on a card without text on top, never as a tint).\n\nDepth is **structural, not atmospheric**. The system has no drop shadows except a single stacked text-shadow applied to red display text on red panels (three steps at 2/2, 4/4, 6/6 in decreasing-opacity ink). All other depth comes from heavy borders: 3px ink outlines on tabular grids, 1.5-2px ink borders on cells, 4px red left rules on editorial cards, 1px hairline rules between bullet items. The double-border treatment (3px outer + 1.5px inner) is the system's signature tabular pattern — it produces a printed-newsprint quality that defines the look.\n\n**Density philosophy: high — populist and packed.** This system reads as authoritative when slides are dense and timid when sparse. Roadmap, pillar, and financial slides routinely carry 3-6 distinct cells with body paragraphs, bullet lists, and tabular data — and they read as energetic, not crowded. Conversely, hero, closing, and statement slides intentionally drop to one or two huge display elements with massive negative space — the very-low and very-high density polarities are both deliberate. A typical content slide carries a section header + a grid of 3-6 cells, each holding a red numerical/title + a Libre Baskerville body paragraph + 3-6 Space Grotesk mono bullets. A typical statement slide carries one rotated red Shrikhand element occupying half the canvas with a single tagline below.\n\n**Key Characteristics:**\n- White (`{colors.bg}`) canvas alternating with off-white (`{colors.light}`) panels for striping, plus dark (`{colors.dark}`) and red (`{colors.red}`) full-bleed panel surfaces for statement moments.\n- Single tomato red (`{colors.red}`) as the only accent — used for every numerical figure, every section rule, every label, every left-bar marker.\n- Three-face stack: Shrikhand (display + numerical), Libre Baskerville (body), Space Grotesk (mono labels + bullets + chrome).\n- Display Shrikhand is routinely tilted (-6° to +2°) — the rotation is the system's signature movement.\n- Heavy ink borders: 3px on tabular grid containers, 1.5-2px on cells, 4px red on editorial leftbar cards, 1px hairlines between bullet rows.\n- Stacked text-shadow (three steps at 2/2, 4/4, 6/6 in decreasing ink opacity) on red display elements — the only shadow in the system.\n- Persistent red progress bar (5px thick) at the bottom edge of every slide.\n- Em-dash and bullet glyphs in red as list markers — never default disc bullets.\n- Hero compositions stack three Shrikhand lines at varying sizes with at least one in red and at least one tilted.\n- Footer links use Space Grotesk uppercase with a 2px red underline.\n\n## Colors\n\n### Palette\n\n- **Bg** (`{colors.bg}` — `#FFFFFF`): Pure white canvas. The default ground for most surfaces. Reads as fresh newsprint paper.\n- **Dark** (`{colors.dark}` — `#1C1410`): A deep brown-black with warm bias — not pure black. Used for every line of body text, every border, every Space Grotesk label, every Libre Baskerville paragraph, and as a full-bleed panel ground on roadmap-class surfaces. The warmth distinguishes it from generic editorial black.\n- **Red** (`{colors.red}` — `#D8000F`): Saturated tomato red. The system's single accent. Used for every numerical figure (Shrikhand red numerals are the most common element), every section eyebrow label, every leftbar rule on editorial cards, every list bullet glyph, every footer link underline, the persistent progress bar, and as a full-bleed panel ground on statement-class surfaces. Never used as body text color, never as a tint, never as a card fill without overlaid text.\n- **Light** (`{colors.light}` — `#F5F2EF`): Warm off-white. Used for alternating panel backgrounds inside pillar layouts (every other pillar swaps to off-white for vertical striping) and as the background of the hint-pill chrome. Subtly warmer than the white canvas — creates surface differentiation without disrupting the printed-paper register.\n\n### Defaults\n\n- **Default surface background**: `{colors.bg}` (white). For statement moments, switch to `{colors.red}` (full-bleed red panel). For roadmap-class moments, switch to `{colors.dark}`. For striping inside a pillar layout, alternate `{colors.bg}` and `{colors.light}`.\n- **Default headline / display color on white surfaces**: `{colors.dark}` for primary headlines, `{colors.red}` for numerical figures and stat-class display elements.\n- **Default headline color on red panels**: `{colors.bg}` (white) with the stacked text-shadow treatment.\n- **Default headline color on dark panels**: `{colors.bg}` (white). Numerical accents stay `{colors.red}`.\n- **Default body text color**: `{colors.dark}` on white/light surfaces, `{colors.bg}` (white) on dark/red surfaces with opacity 0.5-0.8 for tertiary content.\n- **Default eyebrow / label color**: `{colors.red}` on white surfaces (red Space Grotesk uppercase at 2-3px tracking), `{colors.dark}` for the smaller cell labels inside grids.\n- **Default leftbar rule color**: `{colors.red}`. The 4px (or 3px on dark surfaces) red left rule is the editorial card signature.\n- **Default border color for cells and grids**: `{colors.dark}`. There are no colored cell borders.\n- **Default bullet glyph color**: `{colors.red}`. Default disc bullets do not exist in this system; every list uses red em-dash or red round-bullet glyphs.\n\nThe system commits **hard** to the four-color palette. Don't introduce a fifth color (green for positive, blue for info, yellow for highlight). All emphasis is achieved by red, all body is dark on light, all inversion is white on red or white on dark. Categorical differentiation comes from positioning, label, and tilt — never from color.\n\n## Typography\n\n### Font Family Stack\nThe system runs three faces, each tightly bound to its role.\n\n**Shrikhand** (Google Fonts) is the display + numerical face. It's a single-weight (400) heavy slab-script with playful italic-leaning forms and narrow apertures — a face that reads as both old-world (postcard-script) and contemporary (variable-weight digital display). Used at every scale from 18px (inline stats) to 320px (the hero stat). Always weight 400 (the face has no other weights). Rotation is part of the face's voice — multiple Shrikhand elements per slide carry transforms ranging from -6° to +2°.\n\n**Libre Baskerville** (Google Fonts, 400 / 700 + italic) is the body face. A classical literary serif with high stroke contrast — used for every paragraph, every body cell, every metadata line, every cite, every close-sub. Set at 11-16px with 1.5-1.75 line-height, the face reads as comfortably editorial. The face's italic and bold weights are loaded but used sparingly — italic exists for inline emphasis, bold weight 700 is rarely needed since Shrikhand already handles all the heavy display work.\n\n**Space Grotesk** (Google Fonts, weights 400-700) is the metadata + chrome face. Used at 9-12px in uppercase with 2-3px letter-spacing for labels, eyebrows, slide counters, link text, card bullet bodies (when not using Libre Baskerville), and progress chrome. The wide-tracked uppercase treatment is the system's \"stamped metadata\" voice.\n\nThe roles are non-overlapping: Shrikhand handles every display moment and every numerical figure; Libre Baskerville handles every body paragraph and editorial text; Space Grotesk handles every uppercase label, bullet, and chrome element. Don't cross — Shrikhand body would be illegible; Libre Baskerville labels would look like book footnotes; Space Grotesk headlines would feel like a tech startup.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.stat-big}` | 120–320px clamp | Shrikhand | 400 | Hero-class stat figure (always rotated -6°, always red) |\n| `{typography.hero-title-red}` | 84–260px clamp | Shrikhand | 400 | Red word in a multi-line hero stack (always rotated -4°) |\n| `{typography.close-big}` | 80–260px clamp | Shrikhand | 400 | Closing-statement title (always rotated -5°, always red) |\n| `{typography.hero-title}` | 72–220px clamp | Shrikhand | 400 | Top line of a hero stack (default no rotation) |\n| `{typography.hero-title-bottom}` | 64–200px clamp | Shrikhand | 400 | Bottom line of a hero stack (always rotated +2°) |\n| `{typography.section-header-lg}` | 36–72px clamp | Shrikhand | 400 | Large section header for financial / dense-data slides |\n| `{typography.section-header}` | 32–64px clamp | Shrikhand | 400 | Standard section header (summary, services, global, close) |\n| `{typography.pillar-num}` | 36–64px clamp | Shrikhand | 400 | Numeral atop a pillar panel (red) |\n| `{typography.cell-number-lg}` / `{typography.cell-number-md}` | 28–52px clamp | Shrikhand | 400 | Tabular cell numerical figure (always red) |\n| `{typography.stat-item-num}` | 28–56px clamp | Shrikhand | 400 | Inline supplementary stat numeral (dark color) |\n| `{typography.card-title}` | 22–36px clamp | Shrikhand | 400 | Service card title or global card title |\n| `{typography.card-title-sm}` | 20–32px clamp | Shrikhand | 400 | Smaller card title (global cards) |\n| `{typography.pillar-title}` | 18–28px clamp | Shrikhand | 400 | Pillar panel title |\n| `{typography.roadmap-title}` | 18–32px clamp | Shrikhand | 400 | Roadmap phase title (white on dark surface) |\n| `{typography.red-quote}` | 32–90px clamp | Shrikhand | 400 | Quote body on a red panel (white text + stacked shadow) |\n| `{typography.inline-stat}` | 18–28px clamp | Shrikhand | 400 | Inline mini-stat number (red) inside a body block |\n| `{typography.body}` | 13–16px clamp | Libre Baskerville | 400 | Standard body paragraph |\n| `{typography.body-card}` | 12–14px clamp | Libre Baskerville | 400 | Card body inside service/global cards |\n| `{typography.body-cell}` | 11–13px clamp | Libre Baskerville | 400 | Tabular cell body inside grids |\n| `{typography.body-small}` | 11–13px clamp | Libre Baskerville | 400 | Small body for summary highlights |\n| `{typography.hero-meta}` | 11–14px clamp | Libre Baskerville | 400 | Hero meta line above the title stack |\n| `{typography.red-cite}` | 13–16px clamp | Libre Baskerville | 400 | Citation under a red-panel quote (white text) |\n| `{typography.close-sub}` | 14–18px clamp | Libre Baskerville | 400 | Subtitle / contact line under a closing title |\n| `{typography.label-red}` / `{typography.tag-label}` | 10–12px | Space Grotesk | 600 | Section label (uppercase, 2-3px tracking, red) |\n| `{typography.label}` | 10px | Space Grotesk | 600 | Cell label inside grids (uppercase, 2px tracking, dark) |\n| `{typography.rm-label}` | 9px | Space Grotesk | 600 | Roadmap phase label (uppercase, 3px tracking, red) |\n| `{typography.bullet-body}` | 10–12px clamp | Space Grotesk | 400 | List bullet body inside cards and pillars |\n| `{typography.counter}` | 11px | Space Grotesk | 600 | Persistent slide counter |\n| `{typography.link}` | 10–12px clamp | Space Grotesk | 600 | Footer / closing link text (uppercase, 2px tracking) |\n| `{typography.fc-micro}` | 10px | Space Grotesk | 400 | Tiny micro-context line at the bottom of a tabular cell |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.hero-title}` (72–220px) at the top of a stack, paired with `{typography.hero-title-red}` (84–260px, red, rotated -4°) on a second line and `{typography.hero-title-bottom}` (64–200px, rotated +2°) on a third line. The three-line stacked composition is the system's standard hero pattern.\n- **Default size for a primary section headline**: `{typography.section-header}` (32–64px). Always Shrikhand.\n- **Default size for a hero-class statistic**: `{typography.stat-big}` (120–320px) rotated -6°, always red.\n- **Default size for a tabular cell numeral**: `{typography.cell-number-md}` (28–52px) in red.\n- **Default size for body**: `{typography.body}` (13–16px) Libre Baskerville at line-height 1.75.\n- **Default size for a card body**: `{typography.body-card}` (12–14px) at line-height 1.6.\n- **Default size for a section eyebrow label**: `{typography.tag-label}` (10–12px) Space Grotesk weight 600 in red, uppercase, with 2-3px letter-spacing.\n- **Default size for a list bullet body**: `{typography.bullet-body}` (10–12px) Space Grotesk weight 400.\n- **Default weight for Shrikhand**: 400 — the face has no other weights.\n- **Default weight for Libre Baskerville body**: 400. Bold (700) is used only for inline emphasis inside body paragraphs.\n- **Default weight for Space Grotesk labels**: 600. Wide tracking is the system's label voice; weight 400 is for bullet bodies only.\n\nWhen unsure which display token to reach for, default to `{typography.section-header}` (32–64px) for a primary slide section opener. Reserve `{typography.stat-big}` for hero-stat moments and `{typography.hero-title}` triples for cover-class surfaces.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every hero-class Shrikhand element is part of a multi-line stacked composition with at least one rotated line and at least one red line.** A single-line Shrikhand hero title without rotation or color contrast collapses into a generic display moment.\n- **Every tabular numerical cell figure is Shrikhand at the cell-number scale (28–52px) in `{colors.red}`.** Numerical cells in dark text break the system's hierarchy — red is the data signal.\n- **Every section eyebrow is Space Grotesk weight 600 in `{colors.red}`, uppercase, with 2-3px letter-spacing.** No exceptions. Eyebrows at any other tracking, weight, color, or case are not the system's eyebrow.\n- **Every statement-class Shrikhand element (stat-big, close-big) is rotated -5° to -6° in `{colors.red}`.** Untilted red Shrikhand at hero scale looks like a misplaced word — the tilt is the system's \"movement\" signal.\n- **Every red-panel display element carries the stacked text-shadow** (`2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)`). Without the shadow, white Shrikhand on red reads as floating; with it, the text feels printed-and-pressed into the panel.\n- **Every list bullet uses a `{colors.red}` em-dash (—) or round-bullet (•) glyph** at position absolute left with a 12-14px padding-left on the body. Default disc bullets do not exist; the red marker is the system's list signal.\n- **Every Libre Baskerville body is at line-height ≥ 1.5 (preferably 1.6-1.75).** Tighter line-height collapses the editorial register.\n- **Every body strong (`<strong>`) inside a Libre Baskerville paragraph switches face to Space Grotesk weight 600.** The inline face-switch is the system's primary inline emphasis mechanism — a serif strong tag does not produce the same effect.\n\n### Typography Principles\n\nThe voice contrast is **chunky tilted display Shrikhand ↔ literary serif body ↔ wide-tracked mono labels**. Italic is rare (Libre Baskerville italic exists but is used only for inline emphasis inside body); underline is reserved for the red-underline footer link treatment. Bold within Libre Baskerville body is replaced by an inline face-switch to Space Grotesk weight 600 — the change-of-face is the emphasis signal.\n\nNumerical content (stat figures, financial values, percentage callouts, mini-stats) is always Shrikhand in red. Even small inline stats inside body cells become red Shrikhand. The numerical-as-display pattern is what gives the system its sports-magazine register.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and animate in via opacity + translateY (30px) + scale (0.98 → 1) on 550ms ease. Only one slide is `.active` at a time. Default slide padding is `48px 56px` with major variations:\n- Hero slides: `5vh 7vw` top-padding, alignment shifted to top-left.\n- Roadmap slides: `40px 48px` to accommodate the dense two-column grid.\n- Pillars slides: `0` (the pillar columns provide their own internal padding).\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide}` | 48px 56px | Default slide padding |\n| `{spacing.pad-cell}` | 22px 20px | Tabular cell internal padding (financial grid) |\n| `{spacing.pad-cell-sm}` | 20px 24px | Summary highlight cell padding |\n| `{spacing.pad-pillar}` | 32px 24px | Pillar column padding |\n| `{spacing.pad-card}` | 24px | Global card padding |\n| `{spacing.pad-roadmap}` | 40px 48px | Roadmap surface padding |\n| `{spacing.gap-grid-md}` | 24px 32px | Standard service/global grid gap (row × col) |\n| `{spacing.gap-grid-roadmap}` | 28px 36px | Roadmap two-column grid gap |\n| `{spacing.gap-grid-stats}` | 48px | Big stat row gap |\n| `{spacing.gap-stat-row}` | 20px | Vertical gap within a stat-item stack |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Progress bar** at the bottom edge — a 5px thick `{colors.red}` strip that grows in width with slide index. The thickest, most visible piece of chrome; it functions as both progress indicator and bottom-edge poster trim.\n- **Slide counter** at bottom-right (`bottom: 18px right: 24px`) — Space Grotesk weight 600 uppercase NN / NN at 50% opacity.\n- **Hint pill** at bottom-center — Space Grotesk uppercase text in an off-white pill, opacity 0 by default, fading to 50% on `body:hover`.\n\n### Surface Variations\nThe deck cycles through five surface treatments:\n- **White content surfaces** — default, most slides.\n- **Off-white striped panels** — inside pillar layouts, alternating columns get `{colors.light}` background for vertical striping.\n- **Full-bleed red panel** — statement / quote slides flood the canvas in `{colors.red}` with white display text and the stacked text-shadow.\n- **Full-bleed dark panel** — roadmap-class surfaces use `{colors.dark}` ground with white text and red accents.\n- **Bordered tabular grids** — financial-figure and summary-highlight grids carry a 3px ink outer border + 1.5px ink inner cell borders, producing the system's signature double-border tabular composition.\n\n### Hero Stack Composition\nThe standard cover/hero pattern is a **three-line Shrikhand stack** where each line carries a different size and at least one carries rotation and at least one is in red. The stack reads top-left → bottom-right, with the smallest line at the bottom and the boldest red rotation in the middle. The composition is the system's most distinctive opener.\n\n## Depth and Elevation\n\n### No Cards, No Shadows (Mostly)\nThe system uses **almost no box-shadows**. Cards do not float off the surface via shadow. Depth comes from:\n- **Heavy borders** (3px outer + 1.5px inner double-border on tabular grids; 2px solid borders on global cards; 4px red left rules on editorial leftbar cards).\n- **Surface inversion** (full-bleed red or dark panels switch the entire surface).\n- **Tilted display elements** that break the grid alignment.\n\n### The Single Shadow Pattern (Stacked Text Shadow)\nThe only shadow in the entire system is the **stacked text-shadow on red display text on red panels**: three steps at 2/2, 4/4, 6/6 with decreasing-opacity ink fill (0.25, 0.20, 0.15). The shadow is applied via `text-shadow:` not `box-shadow:`. The effect is a printed-press feel — the text reads as having been stamped slightly off-register, three times. This treatment appears only on the red-quote and certain rotated Shrikhand display moments on red panels.\n\n### Border-as-Depth (Tabular Grid Signature)\nThe financial-grid and summary-highlight-grid patterns use a **3px solid ink outer border** with **1.5px solid ink inner cell borders** — the two border weights touch at every cell intersection, producing a printed-newsprint quality. This is the system's primary structural depth mechanism on data-heavy surfaces.\n\n### Leftbar Rules\nEditorial cards (service cards, roadmap phases, global cards) are marked by a **4px (or 3px on dark surfaces) red solid left border** with 16-18px padding-left. The leftbar rule signals \"this is a card\" without enclosing it — the card reads as cantilevered off the red rule. This is the system's most common card pattern.\n\n### Tilt as Depth\nRotated Shrikhand display elements break the horizontal baseline and create perceived dimensionality without using perspective. The standard rotations are -6° (stat-big), -5° (close-big), -4° (hero-title-red), +2° (hero-title-bottom). These tilts are part of the system's spatial language.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px** on everything except the hint-pill (4px) and the bar-track elements (none in this template, but if used should be 0px). Every card, every cell, every panel, every callout is a strict rectangle.\n- **4px** on the hint-pill only — a minor concession for the floating chrome.\n\nThe square-corner discipline is essential. Rounded cards immediately collapse the printed-poster feel into generic web aesthetic.\n\n### Border Weights\n- **5px solid `{colors.red}`** — used only on the persistent progress bar.\n- **4px solid `{colors.red}`** — used on the editorial leftbar card (service cards on white surfaces).\n- **3px solid `{colors.dark}`** — used on the outer border of tabular grids (financial-grid, summary-highlights) and as the vertical pillar separator.\n- **3px solid `{colors.red}`** — used on the leftbar of roadmap phase cards (on dark surfaces).\n- **2px solid `{colors.red}`** — used as the underline rule on footer links.\n- **2px solid `{colors.dark}`** — used as the outline border on global cards.\n- **1.5px solid `{colors.dark}`** — used on inner cells of tabular grids.\n- **1px solid `rgba(28, 20, 16, 0.08)`** — hairline-soft separator between bullet rows inside pillar panels.\n\nThe border ladder (1px-soft / 1.5px / 2px / 3px / 4px / 5px) is fixed. Every border is solid; dashed and dotted borders do not exist.\n\n### Decorative Element Types\n\n**Hero title stack** — A three-line Shrikhand composition at varying sizes with rotation and color contrast. The system's signature opener.\n\n**Red panel** — Full-bleed `{colors.red}` ground with white display text carrying the stacked text-shadow. Used for statement / quote moments.\n\n**Dark panel** — Full-bleed `{colors.dark}` ground with white text and red accents. Used for roadmap-class dense-data surfaces.\n\n**Tabular bordered grid** — 3px ink outer border + 1.5px ink inner cell borders producing a double-border tabular composition. Each cell holds a Shrikhand red numeral + Space Grotesk uppercase label + Libre Baskerville body paragraph + optional Space Grotesk micro line at bottom.\n\n**Red leftbar card** — A 4px solid red left rule with 18px left padding holding a Shrikhand card title + Libre Baskerville body + Space Grotesk red-bullet list. The system's primary editorial card pattern.\n\n**Pillar panel** — A vertical column inside a multi-pillar layout, separated by 3px ink vertical rules and alternating between white and off-white backgrounds. Each pillar holds a Shrikhand red numeral, Shrikhand title, Libre Baskerville lead, and Space Grotesk bullets separated by 1px hairline-soft rules.\n\n**Global card** — A 2px solid ink-bordered card with 24px padding holding a Space Grotesk red label + Shrikhand title + Libre Baskerville body + inline gc-stats row. Used on the global-presence surface.\n\n**Em-dash bullet** — A red em-dash glyph at position absolute left with 14px padding-left on the body. The system's primary list marker.\n\n**Round bullet** — A red round-bullet glyph at position absolute left with 12px padding-left on the body. Secondary list marker, used in card and pillar bullets.\n\n**Footer link** — Space Grotesk uppercase text with a 2px red underline and 4px padding-bottom. Hover swaps text color to red.\n\n**Stacked text shadow** — Three-step decreasing-opacity ink shadow applied to red display text on red panels. The system's only shadow treatment.\n\n**Tilted display** — Shrikhand elements rotated -6° to +2°. Used on hero-title-red, stat-big, close-big, and hero-title-bottom.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.bg}` (white) as the default canvas on most surfaces. Switch to `{colors.red}` for statement slides, `{colors.dark}` for dense-data slides, and alternate `{colors.bg}` / `{colors.light}` for vertical pillar striping.\n- Set every hero-class title as a multi-line Shrikhand stack with at least one rotated line and at least one red line. The composed-stack is the system's opener signature.\n- Use Shrikhand at every numerical-callout moment in `{colors.red}` — tabular cells, summary highlights, pillar numbers, inline mini-stats. Red Shrikhand numerals are the system's data voice.\n- Set every section eyebrow in Space Grotesk weight 600 uppercase with 2-3px letter-spacing in `{colors.red}`. The wide-tracked red label is the universal section opener.\n- Apply the stacked text-shadow to red display text on red panels. The three-step decreasing-opacity ink shadow is the system's only shadow and creates the printed-press feel.\n- Use the 4px red leftbar pattern (`{components.red-leftbar-card}`) for editorial cards. The cantilevered-off-the-rule treatment is the system's primary card pattern.\n- Build tabular grids with the double-border treatment: 3px ink outer border + 1.5px ink inner cell borders touching at intersections.\n- Render every list bullet with a red em-dash (`{components.bullet-em-dash}`) or red round-bullet (`{components.bullet-bullet}`) at position absolute left. Default disc bullets are forbidden.\n- Tilt Shrikhand statement elements (-5° to -6°) to create the system's signature movement. Untilted red statement display reads as misplaced.\n- Use Libre Baskerville at line-height 1.5-1.75 in `{colors.dark}` for every body paragraph. The literary editorial body is what makes the system feel printed.\n\n### Don't\n\n- Don't introduce a second accent color. Red is the only accent — green for positive, blue for info, yellow for highlight all break the single-accent discipline.\n- Don't round any corner on cards, panels, cells, or callouts. Square corners are non-negotiable; the only exception is the 4px hint-pill chrome.\n- Don't add drop shadows or blurred shadows. The system has zero box-shadows; the only shadow is the stacked text-shadow on red display text.\n- Don't substitute fonts. Shrikhand + Libre Baskerville + Space Grotesk is the trio. Replacing Shrikhand with any other display face collapses the entire identity.\n- Don't use Shrikhand for body or Libre Baskerville for labels. The three-face role discipline is non-negotiable.\n- Don't use default bullet points or disc list markers. Lists always use red em-dash or red round-bullet glyphs at position absolute left.\n- Don't omit the tilt on hero-class red Shrikhand elements. The rotation is the system's signature movement; untilted red display reads as flat.\n- Don't render headlines in red on white surfaces (except for stat-big, close-big, hero-title-red — the rotated statement elements). Most section headers are `{colors.dark}` Shrikhand, not red.\n- Don't tighten Libre Baskerville body line-height below 1.5. Tight body line-height collapses the literary register into something cramped.\n- Don't crowd a statement slide with cards or structural content. Statement surfaces (red panel, stat slide, close slide) deliberately reserve massive negative space around a single rotated red display element.\n\n## Responsive Behavior\n\nBold Poster is designed as a **1920×1080 presentation system**. Sizing uses CSS `clamp()` with `vw`-based mid values for display type, fixed `px` for borders and chrome, and `rem`-adjacent fixed values for cell padding. The system has a single responsive breakpoint at 768px for narrow viewports.\n\n### Scaling Behavior\n- Hero stat scales 120px → 320px on viewport width.\n- Hero titles scale 64px → 260px.\n- Section headers scale 32px → 72px.\n- Body scales 11px → 16px.\n- Borders (1px-soft / 1.5px / 2px / 3px / 4px / 5px) and rotation transforms are fixed and do not scale.\n\n### Mobile Breakpoint (max-width: 768px)\nA single `@media (max-width: 768px)` block restructures dense layouts for narrow viewports:\n- Slide padding shrinks from 48px × 56px to 32px × 24px.\n- Summary columns collapse from 2 → 1.\n- Summary highlights grid collapses from 3 → 1.\n- Financial grid collapses from 3 → 2.\n- Service grid collapses from 2 → 1.\n- Roadmap grid collapses from 2 → 1.\n- Pillars switch from horizontal flex-row to vertical flex-column; vertical separators become horizontal bottom borders.\n- Global grid collapses from 2 → 1.\n- Stat row stacks vertically.\n- Hero tagline shifts from absolute-positioned bottom-right to relative-positioned below the hero title stack.\n\nThe system is functional but not optimized for sub-768px portrait usage — it's designed for landscape presentation contexts.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, `Space`, `Enter`, or `PageDown`.\n- Slides reverse via `ArrowLeft`, `ArrowUp`, or `PageUp`.\n- Click on the right half of the viewport advances; click on the left half reverses.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are 550ms cubic-bezier `(0.22, 1, 0.36, 1)` with combined opacity, translateY (30px), and scale (0.98 → 1).\n- Progress bar at bottom edge animates to current slide percentage with a 500ms cubic-bezier ease.\n\n### Print Behavior\nThe system has no `@media print` rule. The transition is screen-only. For static export, screenshots of each slide preserve all rotation transforms and the stacked text-shadow (both are pure CSS).\n\n### Interactive States\n- Footer links swap text color from `{colors.dark}` to `{colors.red}` on hover.\n- The hint-pill fades from opacity 0 to 0.5 on `body:hover` via a 400ms ease.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / stat / section header / numerical figures / card titles | Shrikhand 400 (heavy slab-script, rotated) | 思源宋体 Noto Serif SC 900 |\n| Body / body-card / body-cell / hero-meta / cite / close-sub | Libre Baskerville 400 (literary serif) | 思源宋体 Noto Serif SC 400 |\n| Label / bullet body / counter / link / micro chrome | Space Grotesk 400–600 (uppercase, 2–3px tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use **思源宋体 Noto Serif SC** for both display and body (weight 900 for display, weight 400 for body — visual hierarchy comes from weight, size, color, and rotation, not face contrast). Use **思源黑体 Noto Sans SC** weight 500 for the small uppercase chrome (labels, bullet bodies, counter, links). 思源宋体 ships Latin glyphs that pair cleanly with Chinese characters; for mixed display moments, 思源宋体 weight 900 will render both 中文 and Latin in the same heavy serif voice.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (already close to Libre Baskerville 1.75; keep at 1.8 for CJK), display 1.1–1.25 (up from the very tight 0.82–0.9 used on Shrikhand). Display at 0.82 collides vertically in CJK; open to 1.0 minimum.\n- **Letter-spacing**: set to 0 on every CJK run. The template's 1px positive tracking on hero-title and the 2–3px tracking on Space Grotesk labels both read as gappy on square CJK glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Space Grotesk label, tag-label, rm-label, counter, and link uses `text-transform: uppercase` in the Latin original; remove for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `1970 米兰式海报` not `1970米兰式海报`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style — let it handle mixed sentences in display and body. Don't let the browser fall back to Shrikhand or Libre Baskerville mid-word for ASCII characters.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on **Shrikhand's chunky slab-script personality + rotation + saturated red**. Shrikhand is the most distinctive single decision in this template — and it has no Chinese equivalent. 思源宋体 weight 900 carries weight and editorial register but loses the playful italic-leaning slab character entirely. Compensate by **leaning harder on the non-typographic signatures**: keep all rotations intact (-6° on stat-big, -5° on close-big, -4° on hero-title-red, +2° on hero-title-bottom), keep the stacked text-shadow on red-panel display, keep the saturated tomato red as the only accent, keep the 3px + 1.5px double-border tabular grids, keep the red leftbar cards, keep the red em-dash bullet markers. The rotation, red, and printed-newsprint structural language survive the face swap.\n\nThe system's three-face role discipline (Shrikhand display / Libre Baskerville body / Space Grotesk chrome) collapses to a two-face system in CJK: 思源宋体 for everything Latin-serif, 思源黑体 for everything Latin-mono. The body-vs-display contrast becomes pure weight (400 vs 900) plus color (dark vs red). For inline `<strong>` emphasis inside body, switch from 思源宋体 400 to 思源黑体 600 — the change-of-face is what signals emphasis in the Latin original, and the serif-to-sans swap preserves the same logic in CJK.\n\n### Known CJK Gap\n\n- **No exact online CJK match for Shrikhand's slab-script personality.** The face is Italian-sports-magazine display script with chunky terminals and playful italic forms — there is no Chinese equivalent on Google Fonts, Adobe Fonts, or cn-fontsource. 思源宋体 weight 900 gives heft and editorial register but reads as serious rather than playful. The rotation transforms and saturated red carry the playful-sports-magazine voice on their own; don't drop the tilts when translating to CJK.\n- **No CDN Chinese monospace face for the chrome voice.** Space Grotesk's role (uppercase tracked labels, slide counter, footer links with red underline) depends on the uppercase + 2–3px tracking treatment. 思源黑体 weight 500–600 at 0 tracking is the closest match but loses the \"stamped metadata\" signal. The red color and 1–2px border treatments on tags/links do most of the chrome-recognition work in a CJK build.\n- **Libre Baskerville's classical literary register has no exact Chinese counterpart.** 思源宋体 reads as institutional-modern rather than 19th-century-literary. For projects that need the literary-quarterly voice specifically (long body paragraphs in essays or manifestos), consider 霞鹜文楷 LXGW WenKai instead of 思源宋体 — it carries a hand-written/calligraphic warmth closer to Baskerville's editorial personality.\n\n## Iteration Guide\n\n1. Any new content slide starts with a Shrikhand section header at `{typography.section-header}` (32–64px) in `{colors.dark}`, optionally preceded by a Space Grotesk red eyebrow label.\n2. Any new nume\n\n<!-- [TRUNCATED AT 50KB] -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/preview.md":"# Bold Poster Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/bold-poster/design.md`\n- Preview card: `bold-template-pack/templates/bold-poster/preview.md`\n\n## Selection Metadata\n\n- Slug: `bold-poster`\n- Tagline: Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent.\n- Mood: bold, editorial, loud, confident\n- Tone: dramatic, graphic, sharp, intentional\n- Formality: medium\n- Density: low\n- Scheme: light\n- Best for: Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews. Excellent any time you want a few words to feel like a poster — including unexpected fits like a tech keynote or a finance manifesto that wants to be quotable.\n- Avoid for: Decks that need to communicate dense information per slide — the layout is built around a few large statements, not paragraphs of detail.\n\n## Visual Snapshot\n\nA populist editorial poster system that mashes vintage Italian sports-magazine display lettering with classical serif body and tight monospace metadata. The display face is Shrikhand — a heavy slab/script hybrid with playful italic personality — rendered at poster scale (often 200-320px) and routinely tilted off-axis. Body runs Libre Baskerville for a literary editorial register; Space Grotesk handles tiny uppercase labels and chrome. The palette is uncompromising: white canvas, deep brown-black ink (#1C1410), single saturated tomato red (#D8000F), and a warm off-white (#F5F2EF) for alternating panels. Borders are bold 1.5-3px ink rules; the only shadow is a single stacked offset behind red display text. The aesthetic is loud, confident, and unmistakably print-poster — closer to a 1970s European brand annual report or a wine merchant's catalogue than a contemporary slide deck.\n\nBold Poster is a populist editorial poster system that lifts its visual vocabulary from vintage Italian sports magazines, mid-century European brand annual reports, and wine-merchant catalogues. The premise is that every slide should feel printed — set in heavy display type, locked to one strong red accent, on a white or off-white sheet, with grids ruled in ink and decoration kept to a strict minimum.\n\n## Preview Ingredients\n\n- Palette: bg #FFFFFF; dark #1C1410; red #D8000F; light #F5F2EF\n- Typography: See full design doc after selection.\n- Signature move: White ({colors.bg}) canvas alternating with off-white ({colors.light}) panels for striping, plus dark ({colors.dark}) and red ({colors.red}) full-bleed panel surfaces for statement moments.\n- Signature move: Single tomato red ({colors.red}) as the only accent — used for every numerical figure, every section rule, every label, every left-bar marker.\n- Signature move: Three-face stack: Shrikhand (display + numerical), Libre Baskerville (body), Space Grotesk (mono labels + bullets + chrome).\n- Signature move: Display Shrikhand is routinely tilted (-6° to +2°) — the rotation is the system's signature movement.\n- Signature move: Heavy ink borders: 3px on tabular grid containers, 1.5-2px on cells, 4px red on editorial leftbar cards, 1px hairlines between bullet rows.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/design.md":"---\nversion: alpha\nname: Broadside\ndescription: A protest-poster editorial system built on massive Barlow type and a single fire-orange environment color. The aesthetic is \"ink on fire\" — dark slides for documentation, orange slides for declaration. Display type is enormous (13vw, roughly 187px at 1440 width) in weight 900 lowercase, treating words as graphic elements rather than reading copy. The cultural reference is broadside printing, SPACE10 reports, and Wim Crouwel grids reinterpreted with one loud color and zero decoration.\n\ncolors:\n  ink-black: \"#111111\"\n  ink-black-alt: \"#1A1A18\"\n  fire-orange: \"#E85D26\"\n  cream: \"#F0ECE5\"\n  cream-muted: \"#888880\"\n  cream-hint: \"#505048\"\n  border-dark: \"#282826\"\n  ink-on-orange-muted: \"rgba(17, 17, 17, 0.75)\"\n  ink-on-orange-hint: \"rgba(17, 17, 17, 0.55)\"\n  ink-on-orange-faint: \"rgba(17, 17, 17, 0.40)\"\n  ink-on-orange-border: \"rgba(17, 17, 17, 0.20)\"\n\ncolor-aliases:\n  c-bg: ink-black\n  c-bg-alt: ink-black-alt\n  c-bg-light: ink-black            # Broadside collapses \"light\" → dark; there are no cream slides\n  c-bg-orange: fire-orange\n  c-fg: cream\n  c-fg-2: cream-muted\n  c-fg-3: cream-hint\n  c-accent: fire-orange\n  c-border: border-dark\n\ntypography:\n  display:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"13vw\"\n    fontWeight: 900\n    lineHeight: 0.88\n    letterSpacing: -0.04em\n  h1:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"7.5vw\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  h2:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"4.5vw\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h3:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"2.8vw\"\n    fontWeight: 600\n    lineHeight: 1.2\n  lead:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"1.6vw\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"1.2vw\"\n    fontWeight: 400\n    lineHeight: 1.6\n  caption:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"0.9vw\"\n    fontWeight: 400\n    lineHeight: 1.5\n  label:\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontSize: \"0.72vw\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  stat-value:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"5.5vw\"\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.04em\n  quote-mark:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"10vw\"\n    fontWeight: 900\n    lineHeight: 0.6\n  quote-text:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"3.8vw\"\n    fontWeight: 700\n    lineHeight: 1.15\n    letterSpacing: -0.02em\n  fadelist-item:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"7.5vw\"\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.03em\n  fadelist-title:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"10.5vw\"\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.04em\n\nspacing:\n  pad-x: \"5.5vw\"\n  pad-y: \"5.5vh\"\n  gap-lg: \"3.5vh\"\n  gap-md: \"2vh\"\n  gap-sm: \"1vh\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\nmotion:\n  ease-slide: \"cubic-bezier(0.77, 0, 0.175, 1)\"\n  dur-slide: \"0.8s\"\n  ease-enter: \"cubic-bezier(0.16, 1, 0.3, 1)\"\n  dur-enter: \"0.5s\"\n\ncomponents:\n  slide-chrome:\n    layout: \"flex row, justify space-between\"\n    paddingBottom: \"{spacing.gap-sm}\"\n    borderBottom: \"1px solid {colors.border-dark}\"\n    marginBottom: \"{spacing.gap-md}\"\n    description: \"Top chrome bar carrying section label on left, slide number/meta on right. Suppressed on cover, chapter, quote, and end slides.\"\n  slide-foot:\n    layout: \"flex row, justify space-between\"\n    paddingTop: \"{spacing.gap-sm}\"\n    borderTop: \"1px solid {colors.border-dark}\"\n    marginTop: \"{spacing.gap-md}\"\n    description: \"Bottom chrome bar, mirrors top chrome. Same suppression rules.\"\n  rule:\n    width: 36px\n    height: 2px\n    background: \"{colors.fire-orange}\"\n    description: \"Stub accent rule. On orange slides this flips to {colors.ink-black}.\"\n  rule-full:\n    width: \"100%\"\n    height: 2px\n    background: \"{colors.border-dark}\"\n  kicker:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.fire-orange}\"\n    description: \"Eyebrow above headlines. Orange on dark; dark-ink-at-55%-opacity on orange.\"\n  tag:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.fire-orange}\"\n    border: \"1px solid {colors.fire-orange}\"\n    padding: \"0.3em 0.8em\"\n    description: \"Bordered mono tag. On orange slides flips to dark ink with 40%-opacity dark border.\"\n  broadside-num:\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontSize: \"1.1vw\"\n    fontWeight: 500\n    letterSpacing: 0.1em\n    color: \"rgba(17, 17, 17, 0.45)\"\n    description: \"Catalogue-style slide number, typically anchored top-left on orange slides. On dark slides, color shifts to {colors.cream-hint}.\"\n  stat-card:\n    borderTop: \"1px solid {colors.border-dark}\"\n    padding: \"{spacing.gap-md} {spacing.gap-md} {spacing.gap-md} 0\"\n    description: \"Top-border-only data card. Big orange numeral above body label above mono note.\"\n  bullet-marker:\n    content: \"/\"\n    color: \"{colors.fire-orange}\"\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontWeight: 700\n    description: \"Slash glyph rendered via ::before on every bullet item. Orange on dark, dark-at-45%-opacity on orange.\"\n  compare-panel-left:\n    paddingRight: \"calc({spacing.pad-x} * 0.55)\"\n    borderRight: \"1px solid {colors.border-dark}\"\n  compare-panel-right:\n    paddingLeft: \"calc({spacing.pad-x} * 0.55)\"\n  compare-panel-orange:\n    background: \"{colors.fire-orange}\"\n    description: \"Right-half panel filled with fire orange — the 'after' or payoff side in compare layouts.\"\n  bar-track:\n    height: \"30vh\"\n    borderLeft: \"1px solid {colors.border-dark}\"\n    description: \"Vertical bar chart container. Bars are cream-hint by default; one bar per chart gets the .accent class for fire orange.\"\n  bar-fill:\n    background: \"{colors.cream-hint}\"\n  bar-fill-accent:\n    background: \"{colors.fire-orange}\"\n  img-placeholder:\n    height: \"55vh\"\n    background: \"rgba(255, 255, 255, 0.04)\"\n    border: \"1px dashed {colors.border-dark}\"\n    textTransform: uppercase\n    letterSpacing: 0.12em\n    description: \"Dashed-border placeholder shown when no image is wired. Same 55vh footprint as a real img.\"\n  fadelist-stack:\n    description: \"Vertical stack of three display-weight words, opacities 1.0 / 0.5 / 0.22 top-to-bottom. The SPACE10 'before/during/after' treatment.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBroadside is a **protest-poster editorial system**. The defining premise: type is so large it stops behaving as text and starts behaving as graphic primitive. Display sizes at `13vw` (`{typography.display}`) put a single word at roughly 187px on a 1440-wide screen — wide enough that the eye scans letterforms before reading. This is the system's primary expressive instrument.\n\nThe typeface stack is monolithic. **Barlow** carries every text role from `{typography.display}` down to `{typography.body}` — there is no serif companion, no script accent, no secondary display face. The expressive range is achieved entirely through weight (400 to 900) and size, not face contrast. **IBM Plex Mono** is the only secondary face and it appears only in chrome: slide numbers, kickers, labels, tags, captions, and the bullet-list slash markers. **Noto Sans SC** sits in every font-family stack as the CJK fallback at matching weights. The voice is uniform, heavy, and lowercase — *Broadside does not use uppercase headlines.* That is a meaningful inversion of the brutalist norm.\n\nThe palette functions in two distinct registers. The **dark register** uses near-black canvas `{colors.ink-black}` with cream text `{colors.cream}` and `{colors.fire-orange}` as the singular accent — the orange is used only for emphasis (kickers, accent stats, bullet markers, the leading bar). The **orange register** flips the relationship entirely: `{colors.fire-orange}` becomes the full slide background, and the same dark `#111111` ink is used for headlines and body. There is no light/cream slide variant — the `.light` class is intentionally aliased to dark in the source. Cover and chapter slides default to the orange register; content slides default to dark.\n\nDepth is **flat**. There are no drop shadows, no elevation tokens, no soft surfaces. Hierarchy is constructed entirely from type weight, type size, and 1px hairline dividers. The `slide-chrome` and `slide-foot` borders, the `stat-card` top borders, and the `compare-panel` divider are the system's only depth signals. Everything sits on a single plane.\n\n**Density philosophy: low to medium.** Broadside is built for negative space. A correctly composed slide pairs one massive display moment with a 1–2 line caption and nothing else. Bullet lists are explicitly capped at three items — the system prizes density of impact over density of information. A slide that feels broken in this system is one where four columns of body copy compete for attention; the correct density is one statement, one rule, breathing room. Cover, chapter, and quote slides take this furthest, suppressing chrome entirely and leaving the type alone in the field.\n\n**Key Characteristics:**\n- Massive Barlow display type at weight 900 in **lowercase** — never uppercase on display elements.\n- Two-register color system: dark slides with cream text, or orange slides with dark ink. No cream/white slides exist.\n- `{colors.fire-orange}` is both accent (on dark) and environment (on orange) — never a secondary color, always *the* color.\n- Single-typeface system on Barlow + IBM Plex Mono for chrome only. No serif, no script, no third face.\n- 1px hairline dividers (`{colors.border-dark}` on dark; `rgba(17,17,17,0.2)` on orange) provide all hierarchy structure.\n- Mono kickers, mono tags, mono catalogue numbers — the chrome voice is always IBM Plex Mono uppercase.\n- Bullet lists use `/` glyph in mono as the marker, capped at three items per list.\n- Flat plane — no shadows, no rounded surfaces, no gradient backgrounds.\n- `{spacing.pad-x}` of 5.5vw + `{spacing.pad-y}` of 5.5vh creates a generous frame; type fills the remaining space.\n\n## Colors\n\n### The Two Registers\nBroadside operates on a binary surface system. Every slide is either **dark** (near-black background, cream text, orange as singular accent) or **orange** (fire-orange background, dark-ink text, dark-ink as the muted-emphasis tone). There is no cream/paper register — the `.light` class is aliased to dark in the source. Choose one register per slide and commit to it.\n\n### Palette\n- **Ink Black** (`{colors.ink-black}` — #111111): The dark register's primary canvas, and the primary text color on orange slides. Slightly softer than pure black but reads as black. This is the universal \"ink\" of the system.\n- **Ink Black Alt** (`{colors.ink-black-alt}` — #1A1A18): A secondary surface for the dark register, used when a region needs to feel slightly raised from the base canvas without breaking the flat plane.\n- **Fire Orange** (`{colors.fire-orange}` — #E85D26): The signature. On dark slides it is the accent — kickers, accent stat values, bullet markers, the leading bar in a chart, the orange opening quote mark. On orange slides it is the entire environment. Saturation is high but the hue is warm rather than electric; it reads as protest poster, not safety vest.\n- **Cream** (`{colors.cream}` — #F0ECE5): Primary text color on dark slides. Warm off-white, never pure white — the warmth softens the dark canvas and signals an editorial register.\n- **Cream Muted** (`{colors.cream-muted}` — #888880): Secondary text on dark slides — supporting body, sub-headings, the muted half of a comparison.\n- **Cream Hint** (`{colors.cream-hint}` — #505048): Tertiary text on dark — chart axis labels, source notes, slide numbers when not in mono context.\n- **Border Dark** (`{colors.border-dark}` — #282826): The 1px divider color on dark slides. Barely visible against the canvas; provides structure without drawing attention.\n- **Ink-on-orange overlays**: Dark ink at four opacities (75% / 55% / 40% / 20%) for body, hint, label, and border treatments on orange slides. These are the orange register's \"muted\" equivalents.\n\n### Defaults\n- **Default surface for content slides**: `{colors.ink-black}` (dark register).\n- **Default surface for cover, chapter, statement-payoff, and section-divider slides**: `{colors.fire-orange}` (orange register).\n- **Default headline color on dark surfaces**: `{colors.cream}`.\n- **Default headline color on orange surfaces**: `{colors.ink-black}`.\n- **Default body text color on dark surfaces**: `{colors.cream}`.\n- **Default body text color on orange surfaces**: `rgba(17, 17, 17, 0.75)`.\n- **Default accent color on dark surfaces**: `{colors.fire-orange}` — used for kickers, accent stat values, bullet markers, the lead bar in a chart, and the opening quote mark.\n- **Default accent color on orange surfaces**: `{colors.ink-black}` — the dark ink itself becomes the contrast pop.\n- **Default chrome border color**: `{colors.border-dark}` on dark; `rgba(17, 17, 17, 0.2)` on orange.\n\nThe orange register has no third color. When emphasis is needed on an orange slide, use weight or opacity contrast on the existing ink, not a new hue. Introducing a second accent color breaks the system.\n\n## Typography\n\n### Font Family\nThe system is monolingual on **Barlow** (with Noto Sans SC as the CJK fallback for identical role coverage). Every display, heading, lead, body, and caption token uses Barlow. The only secondary face is **IBM Plex Mono**, which is reserved entirely for chrome: slide numbers, kickers, tags, labels, captions in chart axes, bullet-list markers, image captions, and source notes. The contrast between Barlow's tight grotesque density and IBM Plex Mono's even monospace is the system's secondary typographic rhythm; the primary rhythm is Barlow's own weight and size axis.\n\nItalic is not used. Underline is not used. The only emphasis mechanisms are weight, size, and color (orange accent on dark, or weight-only on orange).\n\n### Display, Heading, and Body Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 13vw | Barlow | 900 | Cover-scale display — the single dominant element on a slide where type *is* the composition |\n| `{typography.fadelist-title}` | 10.5vw | Barlow | 900 | Oversized side-of-stage display in a fadelist composition |\n| `{typography.quote-mark}` | 10vw | Barlow | 900 | The opening quotation glyph on a pull-quote slide |\n| `{typography.h1}` | 7.5vw | Barlow | 800 | Chapter or section-opener title |\n| `{typography.fadelist-item}` | 7.5vw | Barlow | 900 | Each stacked word in a three-stage fadelist treatment |\n| `{typography.stat-value}` | 5.5vw | Barlow | 900 | Large data figure inside a stat card |\n| `{typography.h2}` | 4.5vw | Barlow | 700 | Primary slide headline |\n| `{typography.quote-text}` | 3.8vw | Barlow | 700 | Pull-quote body |\n| `{typography.h3}` | 2.8vw | Barlow | 600 | Sub-headline or panel title inside a comparison |\n| `{typography.lead}` | 1.6vw | Barlow | 400 | Lead paragraph, list items, prominent supporting copy |\n| `{typography.body}` | 1.2vw | Barlow | 400 | Standard body paragraph |\n| `{typography.caption}` | 0.9vw | Barlow | 400 | Image caption, footnote, source line |\n| `{typography.label}` | 0.72vw | IBM Plex Mono | 500 | Chrome labels, kickers, tags, mono notes |\n\n### Defaults\n- **Default size for a primary content slide headline**: `{typography.h2}` (4.5vw).\n- **Default size for a cover or chapter title**: `{typography.h1}` (7.5vw).\n- **Default size for the single declarative display moment on a statement slide**: `{typography.display}` (13vw).\n- **Default size for paragraph body**: `{typography.body}` (1.2vw); for the lead paragraph immediately following a headline, `{typography.lead}` (1.6vw).\n- **Default size for any inline chrome element (label, kicker, tag, slide number, axis label)**: `{typography.label}` (0.72vw).\n- **Default size for a hero numerical figure inside a stat card**: `{typography.stat-value}` (5.5vw).\n- **Default weight for any Barlow display moment (h2 and above)**: 700+; for the largest display, 900.\n- **Default weight for body**: 400.\n\nWhen unsure, reach for `{typography.h2}` for the slide's primary text moment. `{typography.h1}` is reserved for chapter/section openers; `{typography.display}` for the rare moment where type is the entire composition.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **All Barlow display, heading, lead, and body text is set in sentence case (or true title case for proper nouns).** Uppercase Barlow at display weights does not exist in this system — it reads as a different design language entirely. The lowercase-display choice is the most distinctive single decision in Broadside.\n- **All IBM Plex Mono chrome text is uppercase with at least 0.1em letter-spacing.** Mono labels, kickers, tags, slide numbers, axis labels, source notes, and bullet markers are always uppercase. The uppercase/lowercase split between Barlow body and mono chrome is the system's primary case rhythm.\n- **All display tokens carry negative letter-spacing.** `{typography.display}` and `{typography.stat-value}` at -0.04em; `{typography.h1}` and `{typography.fadelist-title}` at -0.03em or -0.04em; `{typography.h2}` and `{typography.quote-text}` at -0.02em. Barlow at display weight without negative tracking reads as untreated.\n- **All Barlow display elements run at weight 700, 800, or 900 — never lighter.** Lighter Barlow at display sizes loses the broadside density.\n- **On orange slides, every Barlow display/h1/h2/h3 element is forced to `{colors.ink-black}`.** This is the \"ink on fire\" rule — cream-colored headlines on orange do not exist.\n- **Every bulleted list item carries the orange `/` mono marker via `::before`.** Bullet discs, dashes, or numerals do not exist in this system.\n- **Every kicker is uppercase IBM Plex Mono at `{typography.label}` size in `{colors.fire-orange}`** (or dark-ink-at-55%-opacity on orange).\n\n### Typography Principles\nThe weight-900 + lowercase + negative-tracking + Barlow combination is the system's voice. Substituting uppercase, switching to weight 600, or removing the negative tracking each reads as a different system. The chrome's IBM Plex Mono uppercase + 0.14em-tracking is similarly inseparable.\n\nLine-height collapses at scale: `{typography.display}` runs at 0.88, `{typography.h1}` at 0.9, `{typography.h2}` at 1.1, and only by `{typography.lead}` does it open to 1.5+. The compression at the top of the scale is what makes the display feel monolithic.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Slides sit side-by-side in a horizontal `#deck` flexbox; navigation translates the deck container horizontally rather than swapping `display`. All sizes are viewport-relative (`vw` / `vh`) — there is no fixed 1920×1080 grid.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 5.5vw | Outer horizontal padding on every slide |\n| `{spacing.pad-y}` | 5.5vh | Outer vertical padding on every slide |\n| `{spacing.gap-lg}` | 3.5vh | Large vertical spacing between major blocks |\n| `{spacing.gap-md}` | 2vh | Standard spacing between sibling elements |\n| `{spacing.gap-sm}` | 1vh | Tight spacing — kicker to headline, chrome bar inner gap |\n\nThe padding is deliberately tighter than a generic editorial system. Broadside's massive type needs the slide's edge to feel close, not distant — the type is supposed to crowd the frame.\n\n### Chrome Frame\nThe system has an optional chrome frame consisting of two horizontal hairline bars: a top `slide-chrome` bar (label left, slide number right) and a bottom `slide-foot` bar (mirror). Both are 1px solid borders in `{colors.border-dark}` on dark slides, or `rgba(17, 17, 17, 0.2)` on orange. Internal padding/margin uses `{spacing.gap-sm}` and `{spacing.gap-md}`.\n\nThe chrome is **suppressed entirely** on the system's \"declarative\" slide types — cover, chapter, statement, quote, and end. Those slides remove all chrome and let the type occupy the whole field. Content slides (split, stats, list, compare, chart, diagram) keep the chrome.\n\nA separate `broadside-num` element (mono, ~1.1vw, low-opacity) may also be placed independently of the chrome bar as a catalogue-style slide number anchored at the top-left of orange cover/chapter slides.\n\n## Depth and Elevation\n\n### Flat Plane (Only Technique)\nBroadside is entirely flat. There are no drop shadows, no inner shadows, no blurred elevations, no rounded surface gradients. Every element sits on a single plane.\n\nHierarchy is constructed from:\n- **Type weight + size contrast** — the dominant signal.\n- **1px hairline dividers** — `slide-chrome`/`slide-foot` borders, `stat-card` top borders, `compare-panel` dividers, `bar-track` left border, `chart-baseline` baseline.\n- **Color shift** — orange against ink, ink against cream, cream-muted against cream.\n- **Negative space** — generous padding and intentional empty regions.\n\nIntroducing a `box-shadow`, a card with elevation, or a soft gradient breaks the system. The flatness is the editorial signal.\n\n## Shapes and Treatment\n\n### Border Radius\nBorder radius is **0px everywhere** except `nav-dot` (50% — the tiny navigation circles at the bottom). Cards, panels, tags, image placeholders, stat cards, chart bars — all rectangles with sharp corners.\n\n### Border Weights\n- **1px solid** — the only structural weight. Used on `slide-chrome`, `slide-foot`, `stat-card` top, `compare-panel` divider, `bar-track` left edge, `chart-baseline`, image captions, the `rule.full` divider.\n- **1px dashed** — used only on `img-placeholder` to signal \"no image wired\".\n- **2px solid** — used only on the small `rule` accent stub (36px wide) and the `chapter-rule` mark.\n\nAll borders are either `{colors.border-dark}` (dark slides), `rgba(17, 17, 17, 0.2)` (orange slides), or `{colors.fire-orange}` (the tag border on dark slides).\n\n### Decorative Element Types\n\n**Stub accent rule** — A 36×2px solid bar in `{colors.fire-orange}` (on dark) or `{colors.ink-black}` (on orange). Used as a visual \"section break\" mark above a chapter title, above a stat, or beside a kicker. Functions as Broadside's only ornament.\n\n**Mono catalogue number** — A small IBM Plex Mono numeral anchored top-left on cover/chapter slides at low opacity (`rgba(17, 17, 17, 0.45)` on orange, `{colors.cream-hint}` on dark). Reads as a publication catalogue mark.\n\n**Stat card** — A top-border-only data block: 1px solid border on top, no other borders, padded body containing `{typography.stat-value}` (large orange numeral on dark; dark ink on orange) above `{typography.body}` (label) above `{typography.caption}` (mono note in `{colors.cream-hint}` or dark-faint).\n\n**Compare panel pair** — Two equal-width panels divided by a 1px vertical border. The right panel may optionally be filled with `{colors.fire-orange}` (`compare-panel-orange`) as the \"after\" / payoff side; the left panel remains transparent over the dark canvas.\n\n**Vertical bar chart** — A `bar-track` container with `border-left` only (no other axes), bars dropping from the top with `cream-hint` fill, one bar per chart carrying the `.accent` class for fire orange. Axis labels in mono uppercase below the baseline.\n\n**Fadelist** — A SPACE10-style composition: three stacked Barlow-900 words at descending opacity (1.0 / 0.5 / 0.22) paired with one oversized display title on the opposite side of the slide. Used for \"before / during / after\" or \"past / present / future\" narratives.\n\n**Pull quote** — An oversized fire-orange `{typography.quote-mark}` glyph (with line-height 0.6 so it sits on the baseline rather than below), followed by `{typography.quote-text}` capped at ~78% of the column width, followed by a two-line `quote-attr` with name above mono role/affiliation.\n\n**Bordered mono tag** — A small inline pill in IBM Plex Mono uppercase with a 1px solid border, padded 0.3em vertical × 0.8em horizontal. The border and text are both `{colors.fire-orange}` on dark; dark ink at 40% opacity on orange.\n\n## Do's and Don'ts\n\n### Do\n- Set every Barlow display, heading, lead, and body element in sentence case. Lowercase display is Broadside's most distinctive single choice.\n- Use IBM Plex Mono uppercase at 0.1em+ tracking for every chrome element: slide numbers, kickers, labels, tags, axis labels, source notes, bullet markers.\n- Make `{colors.fire-orange}` the singular accent on dark slides — kickers, accent stat values, bullet `/` markers, the leading chart bar, the opening quote mark, the `rule` stub.\n- Make orange the *full background* on cover, chapter, and declarative-payoff slides. Use it as environment, not just accent, on those slide types.\n- Cap bullet lists at three items. Broadside prizes density of impact over density of information.\n- Apply negative letter-spacing on every Barlow display moment — -0.04em on the largest, -0.02em on h2.\n- Use 1px hairline borders (`{colors.border-dark}` on dark, `rgba(17,17,17,0.2)` on orange) for all structural division. They are the system's only hierarchy chrome.\n- Suppress slide-chrome and slide-foot on cover, chapter, statement, quote, and end slides — let the type breathe edge-to-edge.\n- Place the `broadside-num` catalogue number top-left on orange cover/chapter slides as a publication-style mark.\n- Use the `/` mono glyph in fire orange as the bullet marker on every list item.\n\n### Don't\n- Don't uppercase Barlow at display or heading weights. Uppercase Barlow at 13vw reads as a different design system entirely.\n- Don't introduce a second accent color. Orange is *the* color — adding a blue, yellow, or green accent breaks the protest-poster identity.\n- Don't add drop shadows, blurred elevations, or rounded surfaces. Broadside is strictly flat — depth comes from type and 1px lines.\n- Don't use cream-colored text on orange slides. The \"ink on fire\" rule is absolute: orange slides use `{colors.ink-black}` for headlines and body.\n- Don't pair Barlow with a serif companion. The single-typeface monolith is part of the identity.\n- Don't use border-radius on cards, tags, panels, or stat blocks. The only round shapes in the system are the small nav dots.\n- Don't pack more than one display moment into a slide. Broadside is for one statement, one rule, breathing room — not magazine-style layered composition.\n- Don't render chrome elements in Barlow. Chrome is exclusively IBM Plex Mono uppercase.\n- Don't introduce a third surface register. There are two: dark and orange. A cream/paper slide does not exist.\n- Don't use italic or underline. Emphasis is achieved through weight, size, or orange color only.\n\n## Responsive Behavior\n\nThis is a viewport-fluid 1920×1080 presentation system that uses `vw`/`vh` units throughout. There are no fixed pixel breakpoints. Every typography token, padding value, and component dimension scales linearly with the viewport.\n\n### Scaling Behavior\n- Display headline (`{typography.display}`) scales from ~138px at 1066-wide viewports to ~250px at 1920-wide.\n- Body text (`{typography.body}`) scales from ~13px to ~23px across the same range.\n- Outer padding (`{spacing.pad-x}` 5.5vw) scales from ~59px to ~106px.\n- All borders are fixed at 1px or 2px and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, `Space`, or `PageDown`.\n- Slides reverse via `ArrowLeft`, `ArrowUp`, or `PageUp`.\n- Navigation translates the deck container horizontally with a `cubic-bezier(0.77, 0, 0.175, 1)` ease at 0.8s.\n- Per-element entry animations (`data-anim=\"fade-up\"`, `fade-in`, `reveal-right`, `reveal-left`, `scale-in`) replay every time a slide becomes `.is-active`, staggered by `data-delay` (0 through 6).\n- Nav dots at bottom-center, mono slide counter at bottom-right.\n\n### Print / Export\nNot explicitly handled by the source. Each slide is a `100vw × 100vh` block; export workflows should target 1920×1080 PNG/PDF per slide.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / h1 / h2 / h3 / stat-value / quote / fadelist | Barlow 700–900 (lowercase, negative tracking) | 思源宋体 Noto Serif SC 900 |\n| Lead / body / caption | Barlow 400 | 霞鹜文楷 LXGW WenKai 400 |\n| Label / kicker / tag / slide number / bullet marker | IBM Plex Mono 500 (uppercase, 0.14em tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use **思源宋体 Noto Serif SC** weight 900 for every display and heading role; use **霞鹜文楷 LXGW WenKai** weight 400 for body and lead text; use **思源黑体 Noto Sans SC** weight 500 for chrome (kickers, labels, slide numbers, bullet markers). All three faces ship Latin glyphs that pair cleanly with Chinese characters. The serif/handwritten/sans contrast loosely echoes Broadside's display/body/mono distinction even though the source uses Barlow throughout.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500&family=LXGW+WenKai+TC&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.15–1.25 (up from the very tight 0.88–0.9 used on Barlow display). The Latin template compresses display to 0.6 on the quote-mark token; at that compression CJK characters overlap entirely. Open display to 1.0 minimum.\n- **Letter-spacing**: set to 0 on every CJK run. The template's −0.02 to −0.04em negative tracking on Barlow display overlaps CJK strokes; the +0.14em positive tracking on IBM Plex Mono chrome reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every IBM Plex Mono label, kicker, tag, slide number, and bullet marker uses `text-transform: uppercase` in the Latin original; remove for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines. Especially important for Broadside's massive display moments — a trailing 。 at 13vw is visually disruptive.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 大字海报` not `2024大字海报`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style for display; 霞鹜文楷 covers both for body. Don't let the browser fall back to Barlow mid-word for ASCII characters in a Chinese sentence.\n\n### Aesthetic Notes for This System\n\nBroadside's most distinctive single decision is **lowercase Barlow at weight 900 at 13vw display sizes**. The lowercase-display choice is what separates this system from generic brutalist decks. In CJK that signal disappears entirely — Chinese has no case. The system compensates because its identity is **80% structural + color**: the two-register surface system (dark / orange), the singular fire-orange accent, the flat plane, the 1px hairline dividers, the `/` mono bullet markers, the suppressed chrome on declarative slides, and the negative-space-as-composition philosophy all transfer cleanly.\n\nThe closest Chinese face to Barlow's \"monolithic heavy grotesque\" register is **思源宋体 weight 900** — but a serif heavy display rather than a sans heavy display. This is a deliberate register shift: heavy Chinese serif at protest-poster scale reads as \"broadside printed-poster\" (the system's actual cultural reference) more credibly than heavy Chinese sans, which reads more \"corporate signage.\" For the body face, **霞鹜文楷 LXGW WenKai** brings a handwritten/calligraphic warmth that pairs with the editorial-protest register; if a more institutional body is needed, swap to 思源宋体 400.\n\nKeep the chrome's \"stamped metadata\" voice by maintaining the small font size (0.72vw equivalent) and the orange color on kickers/labels. The IBM Plex Mono uppercase + tracked treatment loses both signals in CJK, but the orange color carries enough chrome-recognition on its own. The `/` bullet marker can stay as a Latin slash character even in Chinese contexts — it's a graphic mark, not a language element.\n\n### Known CJK Gap\n\n- **No CDN Chinese face matches Barlow's monolithic grotesque + lowercase identity.** Barlow's distinctive choice in this system is lowercase-display at heavy weights — and CJK has no equivalent expressive lever. The system's \"protest-poster lowercase-shouting\" character softens to \"heavy-serif declarative.\" The two-register color system (dark / orange) and the singular fire-orange accent carry the protest-poster identity on their own.\n- **No CDN Chinese monospace face for the chrome voice.** IBM Plex Mono's role (kickers, labels, slide numbers, `/` bullet markers) depends on monospaced rhythm + uppercase + 0.14em tracking. 思源黑体 weight 500 at 0 tracking is the closest match but loses the \"catalogue mark\" signal. Keep the orange color and the small font size; the color and scale do the chrome-recognition work.\n- **霞鹜文楷 may not load on restricted networks.** The Google Fonts CDN serves the Traditional Chinese variant (LXGW WenKai TC) reliably; the Simplified variant is also available via cn-fontsource. Always include `'Noto Serif SC', serif` in the body stack as fallback.\n- **The quote-mark glyph at 10vw with line-height 0.6 is a Latin-quote convention.** Chinese typography uses 「」 or 『』 framing rather than oversized opening-quote glyphs. For Chinese pull-quotes, consider replacing the oversized fire-orange quote-mark with a full-width 「 character at 8vw, or dropping the decorative quote glyph entirely and relying on the orange color + larger size to signal \"this is a quoted passage.\"\n\n## Iteration Guide\n\n1. Every new content slide opens with a `kicker` in mono uppercase fire orange, followed by `{typography.h2}` headline in Barlow lowercase. Don't skip the kicker — it is the system's content-slide chrome signal.\n2. Every cover, chapter, statement-payoff, or end slide uses the orange register. Don't use orange for content/data slides — orange is for declaration moments.\n3. New stat cards use the `stat-card` top-border-only pattern with `{typography.stat-value}` in orange (on dark) or ink (on orange). Don't bottom-border or fully-border stat cards.\n4. New bullet lists use the `/` mono marker in fire orange. Cap at three items.\n5. New charts use the `bar-track` vertical-bar pattern with one accent bar per chart in fire orange; remaining bars in `{colors.cream-hint}`.\n6. New quotes use the oversized fire-orange `{typography.quote-mark}` opening glyph, followed by `{typography.quote-text}` at max 78% width.\n7. Headlines on orange slides are always `{colors.ink-black}`. There are no cream headlines on orange.\n8. New tags use `tag` styling: 1px fire-orange border + fire-orange mono uppercase text on dark; dark-ink at 40% opacity on orange.\n9. The system has nine canonical layout patterns — cover, chapter, statement, split, stats, quote, list, compare, end — plus fadelist, chart, and diagram extensions. New layouts should respect the chrome/no-chrome rule based on whether the slide is declarative or content-bearing.\n\n## Known Gaps\n\n- Broadside's `.light` slide class is intentionally overridden to dark — the source comments confirm \"there are no cream/white slides.\" Any attempt to use `.light` will fall back to the dark register.\n- Noto Sans SC is in every font stack as the CJK fallback but the system was not designed with mixed Latin/CJK headlines in mind; line-height behavior on CJK display sizes may need per-slide adjustment.\n- The bullet marker glyph (`/`) is set in IBM Plex Mono via `::before` — replacing it with a different glyph requires editing CSS, not markup.\n- The bar chart `bar-fill` heights are inline-styled via `style=\"height: NN%\"` in the source; there is no data-binding layer.\n- The fadelist and bar-chart layouts are not in the canonical \"9 layout patterns\" comment block; they are extensions added beyond the documented system.\n- Image placeholders use a dashed `{colors.border-dark}` border and a mono uppercase label — replace with a real `<img src>` at the same 55vh height to maintain layout.\n- The `c-fg-light` token exists in the palette (`#111111`) for \"light theme primary text\" but since the light theme is suppressed, this token is effectively unused in the rendered output.\n- The system loads three Google Fonts families (Barlow, IBM Plex Mono, Noto Sans SC) with multiple weights — initial render requires successful font load to avoid Times New Roman fallback.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/preview.md":"# Broadside Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/broadside/design.md`\n- Preview card: `bold-template-pack/templates/broadside/preview.md`\n\n## Selection Metadata\n\n- Slug: `broadside`\n- Tagline: Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack.\n- Mood: editorial, dramatic, loud, newspaper\n- Tone: graphic, punchy, literary, considered\n- Formality: medium-high\n- Density: medium\n- Scheme: dark\n- Best for: Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements. Also a striking pick for tech, research, or business decks that want a dramatic single-accent editorial feel.\n- Avoid for: Decks that need to feel quiet, warm, or institutionally traditional — the dark canvas with fire-orange accent commits to drama.\n\n## Visual Snapshot\n\nA protest-poster editorial system built on massive Barlow type and a single fire-orange environment color. The aesthetic is \"ink on fire\" — dark slides for documentation, orange slides for declaration. Display type is enormous (13vw, roughly 187px at 1440 width) in weight 900 lowercase, treating words as graphic elements rather than reading copy. The cultural reference is broadside printing, SPACE10 reports, and Wim Crouwel grids reinterpreted with one loud color and zero decoration.\n\nBroadside is a protest-poster editorial system. The defining premise: type is so large it stops behaving as text and starts behaving as graphic primitive. Display sizes at 13vw ({typography.display}) put a single word at roughly 187px on a 1440-wide screen — wide enough that the eye scans letterforms before reading. This is the system's primary expressive instrument.\n\n## Preview Ingredients\n\n- Palette: ink-black #111111; ink-black-alt #1A1A18; fire-orange #E85D26; cream #F0ECE5; cream-muted #888880; cream-hint #505048; border-dark #282826\n- Typography: Barlow; IBM Plex Mono; {typography.label.fontFamily}\n- Signature move: Massive Barlow display type at weight 900 in lowercase — never uppercase on display elements.\n- Signature move: Two-register color system: dark slides with cream text, or orange slides with dark ink. No cream/white slides exist.\n- Signature move: {colors.fire-orange} is both accent (on dark) and environment (on orange) — never a secondary color, always *the* color.\n- Signature move: Single-typeface system on Barlow + IBM Plex Mono for chrome only. No serif, no script, no third face.\n- Signature move: 1px hairline dividers ({colors.border-dark} on dark; rgba(17,17,17,0.2) on orange) provide all hierarchy structure.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/design.md":"---\nversion: alpha\nname: Capsule\ndescription: A playful editorial system built on pill-shaped containers, a sun-bleached cream canvas, and a nine-color candy palette. Bodoni Moda serif headlines pair with Space Grotesk body to suggest a literary magazine that took a holiday at a 1970s ice-cream parlor. Every container that holds text is a pill (border-radius 9999px) outlined with a 2px ink stroke, casting a soft 6–12px offset shadow. The aesthetic is \"Memphis-meets-editorial\" — confident typography, generous bordered shapes, and decorative floating pills as atmospheric wallpaper.\n\ncolors:\n  cream: \"#F5F5F0\"\n  ink: \"#1A1A1A\"\n  outline: \"#1E1E1E\"\n  white: \"#FFFFFF\"\n  coral: \"#E85D4E\"\n  lime: \"#C4D94E\"\n  lavender: \"#C5B5E0\"\n  sky: \"#8BB4F7\"\n  violet: \"#A06CE8\"\n  yellow: \"#F2D160\"\n  peach: \"#F5B895\"\n  mint: \"#A8E6CF\"\n  shadow: \"rgba(26, 26, 26, 0.08)\"\n\ncolor-aliases:\n  bg: cream\n  fg: ink\n  outline: outline                  # same hue family as ink; reserved for stroke role\n\ntypography:\n  display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(3rem, 8vw, 7rem)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.02em\n  closing-display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2.5rem, 6vw, 5rem)\"\n    fontWeight: 800\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n  headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2rem, 4vw, 3.5rem)\"\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.02em\n  section-headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.01em\n  quote-display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(1.6rem, 3.5vw, 3rem)\"\n    fontWeight: 600\n    lineHeight: 1.35\n    letterSpacing: -0.01em\n  card-headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 700\n    lineHeight: 1.1\n  stat-number:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2rem, 3.5vw, 3rem)\"\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.03em\n  orbit-numeral:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"2.5rem\"\n    fontWeight: 700\n    lineHeight: 1\n  body:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.2vw, 1.15rem)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-sm:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.9rem\"\n    fontWeight: 400\n    lineHeight: 1.55\n  subtitle:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"clamp(0.8rem, 1.5vw, 1.1rem)\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  pill-text-md:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  pill-text-sm:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.7rem\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  label:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  mini-label:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.65rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n\nspacing:\n  pad-lg: \"3rem 4rem\"\n  pad-md: \"2rem\"\n  gap-xl: \"4rem\"\n  gap-lg: \"3rem\"\n  gap-md: \"2rem\"\n  gap-sm: \"1.5rem\"\n  gap-xs: \"0.75rem\"\n  card-pad: \"2.5rem 2rem\"\n  pill-pad-lg: \"1.5rem 3.5rem\"\n  pill-pad-md: \"1rem 2.5rem\"\n  pill-pad-sm: \"0.4rem 1.2rem\"\n  pill-pad-xs: \"0.35rem 1rem\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  pill:\n    borderRadius: 9999px\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontWeight: 500\n    letterSpacing: 0.02em\n    whiteSpace: nowrap\n    description: \"The universal container shape. Any text container — chip, button, label, statement-highlight, stat tile, card, bar — is a pill with 2px outline. Background can be any palette accent or white.\"\n  pill-card:\n    background: \"{colors.white}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: \"2rem\"\n    padding: \"{spacing.card-pad}\"\n    boxShadow: \"8px 8px 0 {colors.shadow}\"\n    description: \"Larger pill-shaped card (slightly squared corners at 2rem rather than full pill) for content blocks. Always white background, always shadowed.\"\n  stat-pill:\n    background: \"{colors.white}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: \"2rem\"\n    padding: \"2rem 1.5rem\"\n    boxShadow: \"6px 6px 0 {colors.shadow}\"\n    description: \"Stat tile — pill-shaped white card containing a colored stat number, label, and a tiny accent bar.\"\n  bar-track:\n    height: 36px\n    background: \"{colors.cream}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: 9999px\n    overflow: hidden\n    description: \"Horizontal bar chart track shaped as a pill. Fills use the candy palette.\"\n  bar-fill:\n    height: \"100%\"\n    borderRadius: 9999px\n    borderRight: \"2px solid {colors.outline}\"\n    description: \"Inner bar pill with the value label printed at right edge inside the fill.\"\n  accent-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.coral}\"\n    borderRadius: 9999px\n    description: \"Pill-shaped 60×4 accent rule. Default color coral; closing-context variant uses 80×4.\"\n  card-icon:\n    width: 60px\n    height: 60px\n    borderRadius: \"50%\"\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 700\n    description: \"Circular pill icon (60px) used as a card mark. Background is an accent color; contains a 1–3 character Roman numeral or letter.\"\n  step-node:\n    width: 56px\n    height: 56px\n    borderRadius: \"50%\"\n    border: \"2px solid {colors.outline}\"\n    background: \"{colors.white}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.3rem\"\n    fontWeight: 700\n    boxShadow: \"4px 4px 0 {colors.shadow}\"\n    description: \"Circular pill node (56px) used as a timeline step or sequence marker. Step accent color appears as filled-pill class on the node.\"\n  orbit-center:\n    width: 160px\n    height: 160px\n    borderRadius: \"50%\"\n    background: \"{colors.lime}\"\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"2.5rem\"\n    fontWeight: 700\n    description: \"Large circular pill (160px) used as the gravitational anchor of an orbit composition. Default fill lime; small satellite pills orbit around it.\"\n  diagram-node:\n    borderRadius: 9999px\n    border: \"2px solid {colors.outline}\"\n    padding: \"1rem 2rem\"\n    boxShadow: \"6px 6px 0 {colors.shadow}\"\n    background: \"{colors.white}\"\n    description: \"Flow-diagram node — pill-shaped container with shadow. Connected by 50×4 ink connectors with triangular arrowheads.\"\n  diagram-connector:\n    width: 50px\n    height: 4px\n    background: \"{colors.outline}\"\n    description: \"Solid 50×4 ink bar with a triangular arrowhead at the right end, connecting two diagram nodes inline.\"\n  visual-frame:\n    borderRadius: \"2rem\"\n    border: \"2px solid {colors.outline}\"\n    boxShadow: \"12px 12px 0 {colors.shadow}\"\n    description: \"Large image/illustration frame — slightly squared pill (2rem radius) with thicker 12px offset shadow. Often filled with a tri-stop linear gradient and a dot-pattern overlay.\"\n  grain-overlay:\n    position: fixed\n    inset: 0\n    pointerEvents: none\n    zIndex: 9999\n    opacity: 0.04\n    mixBlendMode: multiply\n    backgroundImage: \"fractalNoise SVG\"\n    description: \"Subtle film-grain noise overlay applied to the entire viewport at 4% opacity in multiply blend mode. Always present, never absent.\"\n  radial-glow:\n    description: \"Soft radial gradient wash anchored to a corner or center of a slide background. Uses one of the candy palette colors at 6–15% opacity, blended into the cream canvas. Provides atmospheric warmth without changing the surface color.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCapsule is a **playful editorial system** whose defining structural premise is the **pill**: every text container is a pill, every icon is a pill, every bar is a pill, every node in a diagram is a pill. The `border-radius: 9999px` rule applies to virtually all UI elements, with larger panels softening to a 2rem radius. Combined with the 2px ink outline that wraps every shape, the result is a system where containers feel inflated, friendly, and graphically distinct — a nod to Memphis design and late-70s ice-cream-parlor signage without abandoning editorial discipline.\n\nThe typeface stack is a deliberate two-face conversation. **Bodoni Moda** — a high-contrast didone serif — carries every display moment, every section headline, every stat numeral, every card title, every quote. Bodoni's tall capitals and thin-thick stroke contrast give the headlines their editorial weight and a touch of fashion-magazine glamour. **Space Grotesk** — a contemporary geometric sans — carries every body paragraph, every label, every pill text, every subtitle. The serif/grotesk pairing creates the system's primary typographic rhythm: glamorous serif statements + clean grotesk supporting structure.\n\nThe palette runs nine colors plus three neutrals. The canvas is `{colors.cream}` — a warm sun-bleached off-white that signals \"magazine paper\" rather than \"screen white.\" The ink is `{colors.ink}`, used for body text, headlines, and the universal outline. The seven candy accents — `{colors.coral}`, `{colors.lime}`, `{colors.lavender}`, `{colors.sky}`, `{colors.violet}`, `{colors.yellow}`, `{colors.peach}`, plus `{colors.mint}` — are interchangeable. They fill pills, color stat numbers, fill bar charts, and float as decorative atmosphere. There is no semantic mapping: no color means \"warning,\" none means \"success.\" Each accent is chosen for compositional balance, not meaning.\n\nDepth comes from **soft hard-offset shadows** at 4px, 6px, 8px, and 12px in a low-opacity ink color (`{colors.shadow}` = `rgba(26, 26, 26, 0.08)`). Unlike a true brutalist shadow, these are slightly transparent — they read as \"lifted\" rather than \"stamped.\" Combined with the 2px outline, every pill feels like it's floating just above the cream canvas. There is no use of blurred drop shadows; the offset is always solid, always to the bottom-right.\n\n**Density philosophy: medium-high atmospheric.** Capsule slides feel populated. The system is built around the idea that decorative floating pills should orbit the actual content as wallpaper — small colored pills tilted at 5–25° rotations across the slide background, each containing a single uppercase word. These atmospheric pills are non-functional; they are typographic confetti. A correctly composed slide pairs one or two substantive content blocks (a pill-card, a stat grid, a diagram) with 5–8 floating decorative pills around the edges. A slide that feels broken in Capsule is one with empty corners or unrelieved cream space — the candy palette wants to participate even where the content doesn't strictly require it.\n\n**Key Characteristics:**\n- Universal pill geometry — `border-radius: 9999px` for small containers, 2rem for larger cards/frames.\n- 2px solid `{colors.outline}` stroke wraps every pill, icon, and card.\n- Bodoni Moda serif for every display/headline/stat; Space Grotesk sans for every body/label/pill text.\n- Sun-bleached cream canvas `{colors.cream}` with soft radial glows in candy accent colors at 6–15% opacity for background atmosphere.\n- Hard-offset shadows in low-opacity ink (`{colors.shadow}`) at 4/6/8/12px offsets, always solid, always bottom-right.\n- Nine-color candy accent palette used interchangeably — no semantic mapping.\n- Decorative floating pills tilted at 5–25° rotations populate slide backgrounds as atmospheric wallpaper.\n- A persistent fractal-noise grain overlay (4% opacity, multiply blend) sits over the entire viewport at all times.\n- Full-screen vertical nav-dot column at right, mono slide counter at bottom-right.\n\n## Colors\n\n### Canvas & Ink\n- **Cream** (`{colors.cream}` — #F5F5F0): The canvas. Warm sun-bleached off-white. Used as default slide background, default bar-track interior, and any neutral region that wants paper warmth without being pure white.\n- **Ink** (`{colors.ink}` — #1A1A1A): The primary text color. Used for headlines, body, and (under the alias `outline`) the universal stroke.\n- **Outline** (`{colors.outline}` — #1E1E1E): Functionally identical to ink; reserved as the stroke color on every pill, card, icon, and frame for semantic clarity.\n- **White** (`{colors.white}` — #FFFFFF): True white. Used as the default fill for pill-cards, stat-pills, diagram nodes, and any pill that needs the highest contrast against the cream canvas. White pills always carry the 2px ink outline.\n\n### Candy Accents\n- **Coral** (`{colors.coral}` — #E85D4E): Warm orange-red. The most \"voice-y\" of the accents; used as a default accent-line color, default pill-card icon fill on the first card in a sequence, and the most frequent stat-number color.\n- **Lime** (`{colors.lime}` — #C4D94E): Vivid chartreuse-green. Pairs well with coral; default fill for orbit-center anchors and frequent stat-number color.\n- **Lavender** (`{colors.lavender}` — #C5B5E0): Soft lilac-purple. Used as a calming pill fill in headers and as a frequent quote-highlight color.\n- **Sky** (`{colors.sky}` — #8BB4F7): Mid-saturation cornflower blue. The default \"third accent\" — sits comfortably next to coral and lime in a 3-card grid.\n- **Violet** (`{colors.violet}` — #A06CE8): Deeper purple. Used when a slide already has lavender as one accent and needs a second purple-family pop.\n- **Yellow** (`{colors.yellow}` — #F2D160): Warm marigold. The default fill for title pills, closing pills, and any pill that should read as \"important / featured.\"\n- **Peach** (`{colors.peach}` — #F5B895): Pale apricot. The softest accent; used in floating decorative pills and circular decorative spots.\n- **Mint** (`{colors.mint}` — #A8E6CF): Pale aqua-green. Used most often inside the linear-gradient visual frame and in lower-emphasis decorative pills.\n- **Shadow** (`{colors.shadow}` — `rgba(26, 26, 26, 0.08)`): The universal soft hard-offset shadow color. Never use a different shadow color.\n\n### Defaults\n- **Default slide surface**: `{colors.cream}`.\n- **Default headline color**: `{colors.ink}` — Bodoni serif headlines are always ink, never colored. Color appears only on stat numerals and inside accent pills.\n- **Default body text color**: `{colors.ink}` rendered at opacity 0.6–0.7 to soften it against the cream canvas.\n- **Default outline color**: `{colors.outline}` (≈ ink) — 2px on every pill/card/icon, no exceptions.\n- **Default card fill**: `{colors.white}`.\n- **Default accent-line color**: `{colors.coral}`.\n- **Default title-pill fill**: `{colors.yellow}`.\n- **Default closing-pill fill**: `{colors.yellow}`.\n- **Default orbit-center fill**: `{colors.lime}`.\n- **Default first accent in a 3- or 4-accent sequence**: coral → lime → sky → violet (rotated when more colors are needed). The sequence is the system's \"Roy G. Biv\"; it gives the agent a deterministic order to reach for so the candy palette doesn't feel random.\n- **Default decorative pill background opacity**: full saturation (no fading). The floating pills are loud on purpose.\n\nAccent colors have no semantic role. Choose accents based on warm/cool balance and adjacency, not meaning. When three accents appear together, pair a warm (coral/yellow/peach) with a cool (sky/lavender/violet/mint) with a neutral-bright (lime). Avoid placing two same-family accents adjacent (two purples, two greens, two warms).\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face conversation**: `Bodoni Moda` (serif, weights 400–900, opsz axis) carries every display and headline; `Space Grotesk` (sans, weights 300–700) carries every body, label, and pill text. There is no third face. Both families are loaded from Google Fonts at variable-axis weights.\n\nBodoni Moda's high contrast and didone modulation give the system its editorial-glamour register; the thin-thick stroke contrast is most pronounced at large sizes, so display weights should always be 700+ to maintain stroke presence. Space Grotesk's geometric grotesque carries clean, modern body — it never tries to compete with the Bodoni headlines.\n\nAn inline `<em>` inside a Bodoni headline keeps Bodoni and shifts to italic. A `quote-highlight` inside a Bodoni quote body switches the wrapped word to a pill (Space Grotesk uppercase pill text on a candy fill) for visual emphasis.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3rem, 8vw, 7rem) | Bodoni Moda | 800 | Largest cover/title display |\n| `{typography.closing-display}` | clamp(2.5rem, 6vw, 5rem) | Bodoni Moda | 800 | Conclusive declarative headline |\n| `{typography.headline}` | clamp(2rem, 4vw, 3.5rem) | Bodoni Moda | 700 | Primary slide headline on split or two-column layouts |\n| `{typography.section-headline}` | clamp(1.8rem, 3.5vw, 3rem) | Bodoni Moda | 700 | Section-opening or centered headline above cards/charts |\n| `{typography.quote-display}` | clamp(1.6rem, 3.5vw, 3rem) | Bodoni Moda | 600 | Pull-quote body |\n| `{typography.card-headline}` | 1.5rem | Bodoni Moda | 700 | Card or pillar-block title |\n| `{typography.stat-number}` | clamp(2rem, 3.5vw, 3rem) | Bodoni Moda | 800 | Large numerical stat figure |\n| `{typography.orbit-numeral}` | 2.5rem | Bodoni Moda | 700 | Centered ordinal inside the orbit-center circle |\n| `{typography.body}` | clamp(0.95rem, 1.2vw, 1.15rem) | Space Grotesk | 400 | Paragraph body |\n| `{typography.body-sm}` | 0.9rem | Space Grotesk | 400 | Compact body inside a card |\n| `{typography.subtitle}` | clamp(0.8rem, 1.5vw, 1.1rem) | Space Grotesk | 400 | Uppercase tracked subtitle below a display headline |\n| `{typography.pill-text-md}` | 0.85rem | Space Grotesk | 600 | Text inside title/closing pills |\n| `{typography.pill-text-sm}` | 0.7rem | Space Grotesk | 600 | Text inside small floating decorative pills |\n| `{typography.label}` | 0.75rem | Space Grotesk | 500 | Header tag pills, attribution lines |\n| `{typography.mini-label}` | 0.65rem | Space Grotesk | 500 | Mini-pill chips in a tag cluster |\n\n### Defaults\n- **Default size for the primary section headline**: `{typography.section-headline}` (clamp 1.8–3rem). For two-column or split layouts, `{typography.headline}` (clamp 2–3.5rem).\n- **Default size for a cover or opening display moment**: `{typography.display}` (clamp 3–7rem).\n- **Default size for paragraph body**: `{typography.body}` (clamp 0.95–1.15rem).\n- **Default size for any inline label or chip**: `{typography.label}` (0.75rem).\n- **Default weight for any Bodoni display element**: 700 minimum; 800 for the largest display.\n- **Default weight for any Space Grotesk body element**: 400.\n- **Default size for a hero stat figure**: `{typography.stat-number}` (clamp 2–3rem).\n\nWhen unsure, reach for `{typography.section-headline}` for the slide's primary text moment, not `{typography.card-headline}` (which is for block-level titles within a card).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every display, headline, stat-number, card-headline, and quote-display element is set in Bodoni Moda.** Space Grotesk does not appear in any display role.\n- **Every body, subtitle, pill-text, label, and chip element is set in Space Grotesk.** Bodoni does not appear in body or chip roles.\n- **Every Bodoni display element uses negative letter-spacing** (-0.01em to -0.03em). Bodoni at large sizes with default tracking reads loose.\n- **Every Space Grotesk subtitle, label, pill-text, and chip element is uppercase with 0.08em+ tracking.** The uppercase + tracking is the small-text identity signal.\n- **Bodoni headlines are always rendered in `{colors.ink}`, never in a candy color.** Color appears on stat numerals (e.g., `color: {colors.coral}`) but not on serif headlines. The exception is the orbit-center numeral, which sits inside a colored circular pill but the numeral itself remains ink.\n- **Every pill element carries the 2px solid outline.** A pill without its 2px ink stroke breaks the system.\n- **Every container with `border-radius: 9999px` or `2rem` carries either the 2px outline or sits inside an already-outlined parent.** Unoutlined rounded containers do not exist.\n- **Every card or elevated pill carries a hard-offset shadow** at 4/6/8/12px in `{colors.shadow}`. Smaller pills get 4–6px; cards get 8px; visual frames get 12px.\n\n### Typography Principles\nThe Bodoni-headline + Space-Grotesk-body pairing is the primary rhythm; switching either face breaks the system. Italic appears only inside pull-quote bodies via the `<em>` tag (Bodoni italic). Underline is not used. Pill-encapsulation is the system's primary emphasis mechanism: wrapping a phrase in a candy-filled pill is the equivalent of bold-italicizing it in a traditional editorial system.\n\nLine-height tightens at scale: `{typography.display}` at 0.9, `{typography.headline}` at 1.05, body at 1.6. The tight display + open body contrast is what gives the system its editorial breathing rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport, with one slide carrying `.active` (opacity 1) at a time. Transitions are 0.6s opacity fades via `cubic-bezier(0.4, 0, 0.2, 1)`. All sizes use rem units inside CSS `clamp()` so the layout scales fluidly.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-lg}` | 3rem 4rem | Default slide outer padding |\n| `{spacing.gap-xl}` | 4rem | Major two-column gutter |\n| `{spacing.gap-lg}` | 3rem | Section-block spacing |\n| `{spacing.gap-md}` | 2rem | Standard inter-element spacing |\n| `{spacing.gap-sm}` | 1.5rem | Tight card-internal spacing |\n| `{spacing.gap-xs}` | 0.75rem | Inline gap between mini-pills |\n| `{spacing.card-pad}` | 2.5rem 2rem | Default pillar-card padding |\n| `{spacing.pill-pad-lg}` | 1.5rem 3.5rem | Title-pill / closing-pill padding |\n| `{spacing.pill-pad-md}` | 1rem 2.5rem | Featured pill padding |\n| `{spacing.pill-pad-sm}` | 0.4rem 1.2rem | Header-tag pill padding |\n| `{spacing.pill-pad-xs}` | 0.35rem 1rem | Mini-pill chip padding |\n\n### Atmospheric Background Layer\nEvery slide layers two atmospheric treatments on top of the cream canvas:\n1. **Radial glows** — one to three soft `radial-gradient(ellipse at X% Y%, rgba(accent, 0.06–0.15), transparent)` washes anchored to corners or center. These tint the canvas warmly without changing its surface color.\n2. **Grain overlay** — a fractal-noise SVG fixed at `inset: 0`, opacity 0.04, mix-blend-mode multiply, z-index 9999. Always present, always identical, never removed.\n\nThese are not decorative options; they are baseline canvas treatments that should appear on every slide.\n\n### Decorative Pill Wallpaper\nA signature: small decorative pills (60–160px wide, 35–90px tall) tilted at -20° to +25° rotations are placed absolutely on slide backgrounds as atmospheric typographic confetti. Each contains a single uppercase Space-Grotesk word and a candy fill. Some are circular (border-radius 50%) instead of capsule-shaped. They have no informational role — they are visual atmosphere. Typical count: 5–8 per slide on cover/closing/quote layouts; 0 on dense data layouts.\n\n## Depth and Elevation\n\n### Soft Hard-Offset Shadow\nThe system's only depth technique is a **solid hard-offset shadow** in low-opacity ink:\n- **4px 4px 0** — small elevated nodes (step nodes, small pills).\n- **6px 6px 0** — orbit pills, stat-pills, diagram nodes.\n- **8px 8px 0** — pillar-cards, chart container.\n- **12px 12px 0** — large visual frame (the most lifted element in the system).\n\nAll shadows use `{colors.shadow}` (`rgba(26, 26, 26, 0.08)`). The opacity is the key distinction from a brutalist hard shadow: at 8% the shadow reads as a soft lift rather than a stamped offset. The offset direction is always bottom-right.\n\n### Outline-Based Depth\nMost apparent depth comes from the 2px ink outline that wraps every pill against the cream canvas. The outline does much of the elevation work; the shadow adds the lift on cards and elevated pills.\n\n### Flat Decorative Layer\nDecorative floating pills and radial glows are flat — they cast no shadow. The shadow is reserved for content-bearing containers (cards, stat tiles, diagram nodes, visual frames). This visual rule separates \"content\" from \"atmosphere\" at a glance.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 9999px (full pill) | All small pills: title pill, closing pill, decorative pills, header tags, mini chips, bar tracks, bar fills, accent lines, orbit pills, floating pills, quote highlights, diagram nodes |\n| 2rem (32px) | Larger cards: pillar-cards, stat-pills, chart container, visual frame |\n| 1.5rem (24px) | Inner dashed frame inside the visual frame |\n| 50% (circle) | Circular pills: card-icon (60px), step-node (56px), orbit-center (160px), nav dots (10px) |\n| 0 | The grain overlay; the slide itself; the candy-color gradient regions inside a visual frame |\n\nThe system has **no sharp-cornered text containers**. Every container that holds text or icon content is rounded.\n\n### Border Weights\n- **2px solid `{colors.outline}`** — the universal stroke. Used on every pill, card, icon, frame, bar track, nav dot.\n- **2px dashed `{colors.outline}`** — used only on the inner frame inside the visual-frame component (a decorative interior border indicating \"image placeholder\").\n- **4px solid ink** — used only on the timeline-line that connects sequential step nodes horizontally.\n\nAll borders are `{colors.outline}`. Colored borders do not exist in the system.\n\n### Decorative Element Types\n\n**Decorative floating pill** — A small (60–160px wide × 35–90px tall) pill or circle in a candy fill, tilted at -20° to +25° rotation, positioned absolutely on the slide background. Contains a single uppercase Space-Grotesk word at 0.55–0.85rem. Functions as typographic confetti / atmospheric wallpaper. Five to eight per declarative slide.\n\n**Header tag pill** — A small (≈0.7rem text) pill in a candy fill (typically lavender) with `pill-pad-sm` padding, centered above a section headline. The system's section-tag chip.\n\n**Title pill / closing pill** — A medium pill (`pill-pad-lg`) in `{colors.yellow}` carrying uppercase Space-Grotesk text. Placed above the largest display headline on cover and closing slides.\n\n**Pillar-card** — A 2rem-radius white card with 2px outline and 8px offset shadow, containing a circular `card-icon` at the top, a Bodoni `card-headline`, and a Space-Grotesk body paragraph. Used in 3-card and 4-card grids.\n\n**Stat-pill** — A 2rem-radius white card containing a colored Bodoni stat number, a small uppercase label, and a tiny 40×4 accent bar at the bottom. Sits in 3- or 4-column stat grids.\n\n**Bar-track** — A 36px-tall horizontal pill (9999px radius) with 2px outline and cream interior. The fill is a child pill in a candy color with the value label printed at the right edge inside the fill.\n\n**Orbit composition** — A central 160px circular pill in `{colors.lime}` carrying a Bodoni ordinal, surrounded by 4–6 small `orbit-pill` satellites in candy fills, each tilted, positioned at 8–45% / 8–45% offsets, with 6px shadows.\n\n**Diagram-node + connector** — Pill-shaped flow node (`diagram-node`) with 6px shadow, connected to the next node by a 50×4 ink bar with a triangular arrowhead. Nodes may carry candy fills; arrows are always ink.\n\n**Visual-frame** — A 2rem-radius large frame with 12px offset shadow, filled with a tri-stop linear gradient (typically lavender → sky → mint), overlaid with a dot-grid pattern at 0.15 opacity, with an inner dashed border indicating \"image placeholder.\" Used for hero visual moments.\n\n**Quote-highlight** — An inline pill in lime or sky with 2px outline, wrapped around a single phrase inside a Bodoni quote body. The system's primary inline emphasis mechanism.\n\n**Accent line** — A 60×4 (or 80×4 on closing slides) horizontal pill in `{colors.coral}` used as a sub-headline accent rule.\n\n## Do's and Don'ts\n\n### Do\n- Make every text container a pill — 9999px radius for small pills, 2rem radius for larger cards. The pill geometry is the system's most distinctive single trait.\n- Apply the 2px `{colors.outline}` stroke to every pill, card, icon, and frame. The outline is what makes the candy palette read as graphic rather than candy.\n- Set every Bodoni display element in `{colors.ink}`, never in a candy color. Color belongs on stat numerals and pill fills, not on serif headlines.\n- Use Bodoni Moda for every headline/stat/card title; use Space Grotesk for every body/label/pill. The two-face split is non-negotiable.\n- Render shadows as solid hard offsets at 4/6/8/12px in `{colors.shadow}` (`rgba(26,26,26,0.08)`). Never blur; never re-color.\n- Populate slide backgrounds with 5–8 floating decorative pills tilted at -20° to +25° rotations on cover, closing, quote, and other declarative layouts. The wallpaper-pill treatment is a system signature.\n- Layer radial-gradient accent glows (6–15% opacity) into the cream canvas on every slide for atmospheric warmth.\n- Keep the grain overlay (4% opacity, multiply blend) active on every slide — it is a baseline layer, not optional decoration.\n- Wrap inline emphasis phrases in `quote-highlight` pills (lime, sky, or another candy) inside Bodoni quote bodies, rather than bolding or italicizing.\n- Pair warm + cool accents adjacently: coral with sky, yellow with lavender, peach with mint. Avoid two same-family accents next to each other.\n\n### Don't\n- Don't render any text container with sharp corners. Square text containers do not exist in Capsule.\n- Don't render a pill, card, or icon without the 2px ink outline. The stroke is the system's identity.\n- Don't render Bodoni headlines in a candy color. Headlines are always `{colors.ink}`; color lives on stat numerals and pill fills.\n- Don't use blurred drop shadows. The shadow is always solid offset at 4/6/8/12px in `{colors.shadow}`.\n- Don't pair Bodoni with a different sans companion. The Bodoni Moda + Space Grotesk pairing is fixed.\n- Don't use uppercase on Bodoni headlines. Bodoni in this system is sentence case (or true title case for proper nouns).\n- Don't use sentence case on Space Grotesk subtitles, labels, or pill text. Small Space Grotesk text is always uppercase + 0.08em tracking.\n- Don't introduce a tenth accent color. The nine candy accents are the closed palette.\n- Don't apply shadows to decorative floating pills. Shadows are reserved for content-bearing containers.\n- Don't leave a slide's corners empty on declarative layouts. The cream canvas wants atmospheric pills or radial glows; bare corners read as broken.\n\n## Responsive Behavior\n\nCapsule is a viewport-fluid 1920×1080 presentation system using `clamp()` and viewport-relative units throughout. There is a single `@media (max-width: 900px)` breakpoint that collapses grid columns to single-column stacks and hides the nav-dot column; below 600px the stats grid further collapses from 2-col to 1-col. The system is otherwise responsive without breakpoints.\n\n### Scaling Behavior\n- Display headline scales from 3rem at minimum viewport to 7rem at maximum.\n- Body text scales from 0.95rem to 1.15rem.\n- Padding scales via `clamp` inside individual layout selectors.\n- Borders, pill outlines, shadow offsets, and grain overlay are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, or `Space`.\n- Slides reverse via `ArrowLeft` or `ArrowUp`.\n- `Home` jumps to the first slide; `End` to the last.\n- Touch swipe (horizontal): swipe distance >50px advances or reverses.\n- The active slide carries `.active` (opacity 1); non-active slides are opacity 0 + pointer-events none.\n- Nav dots are a vertical column at the right edge; the slide counter is at bottom-right; a keyboard hint is at bottom-left.\n\n### Print / Export\nNot explicitly handled; opacity-toggling means a naïve print captures only the active slide. Export workflows should snapshot each slide individually at 1920×1080.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Bodoni Moda 700–800) | Bodoni Moda | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body / Pill text (Space Grotesk 400–600) | Space Grotesk | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare the CJK font *after* the Latin font in the same `font-family` stack so Latin glyphs render in Bodoni Moda / Space Grotesk and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bodoni+Moda:ital,opsz,wght@0,6..96,400..900;1,6..96,400..900&family=Space+Grotesk:wght@300..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Bodoni Moda\", \"ZCOOL XiaoWei\", serif;\n  --font-body: \"Space Grotesk\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.7 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (negative tracking that flatters Bodoni capitals jams Hanzi strokes together). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any pill/label/subtitle when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei is a high-contrast literary serif-leaning Hanzi face whose thin-thick stroke modulation echoes Bodoni Moda's didone register — it gives display headlines the same editorial-glamour weight as the Latin original. Yozai is a friendly rounded Hanzi sans whose open counters and modest stroke contrast mirror Space Grotesk's geometric grotesque, so pill text, labels, and body paragraphs retain the \"clean modern sans\" feel rather than reverting to a stiff system Hanzi. Both pair cleanly with the candy palette: ZCOOL XiaoWei in `{colors.ink}` keeps the rule \"Bodoni headlines are never colored\" intact, and Yozai sits inside coral / lime / yellow pills without losing legibility against the 2px ink outline. The decorative floating pill wallpaper still works in Chinese — substitute single-character or two-character atmospheric words (愿景, 未来, 下一步) for the English uppercase confetti.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a display face with limited weight axis (single weight) and a smaller glyph set than Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage and a similar friendly humanist register. The ZCOOL XiaoWei italic / heavy moments that Bodoni achieves via the opsz axis have no equivalent in the Chinese face — use scale and color to compensate when Latin would have leaned on italic Bodoni.\n\n## Iteration Guide\n\n1. Any new container that holds text uses the pill geometry — 9999px radius for small, 2rem radius for cards. Don't introduce a sharp-cornered text container.\n2. Any new pill carries the 2px solid `{colors.outline}` stroke. Don't render an unstroked pill.\n3. Any new headline uses Bodoni Moda in `{colors.ink}`. Don't color a serif headline; don't switch to Space Grotesk for display.\n4. Any new card carries a `8px 8px 0 {colors.shadow}` offset shadow (4px for small nodes, 12px for the visual frame). Don't blur; don't re-color.\n5. Any new accent uses the nine-color candy palette in the coral → lime → sky → violet → yellow → lavender → peach → mint default sequence. Don't introduce a tenth color.\n6. Any new declarative slide (cover, closing, quote, statement) gets 5–8 floating decorative pills as atmospheric wallpaper.\n7. Any new data slide gets one or two radial accent glows in the canvas background. Don't leave the cream surface flat.\n8. Any inline emphasis inside a Bodoni quote body uses a `quote-highlight` pill. Don't bold; don't italicize except via the Bodoni italic axis inside `<em>`.\n9. New components inherit the pill geometry + 2px outline + 4–12px shadow pattern. If a new component breaks any of these three rules, redesign it before adding it.\n\n## Known Gaps\n\n- Two Bodoni font axes (italic and opsz 6..96) are loaded but the template only exercises the upright axis at fixed sizes; the optical-size variation across display sizes is not explicitly opted into.\n- Bar-chart values are inline-styled via `style=\"width: NN%\"` — there is no data-binding layer.\n- The decorative floating pill positions and rotations are all hand-tuned via inline style on each instance; there is no generative placement system.\n- The visual-frame's tri-stop gradient (lavender → sky → mint) is a hardcoded \"default\" — alternate gradient combinations are valid but need to be authored per instance.\n- The grain overlay uses an inline SVG data URL; replacing or removing it requires editing the markup, not a CSS variable.\n- The chart-bar-fill border-right at 2px solid outline is what gives bars their pill-end-cap definition; removing it loses the pill aesthetic on bars.\n- The system inherits all 9 candy accent CSS variables but only ~6 are actively used across the source — peach and mint are present in the palette but used sparingly. They are available for new compositions.\n- Decorative floating pills include their text content as part of the visual identity (single uppercase Space-Grotesk words). The words are not informational; new compositions should pick neutral single-word atmospheres (\"VISION\", \"FUTURE\", \"NEXT\", etc.) rather than content-specific text.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/preview.md":"# Capsule Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/capsule/design.md`\n- Preview card: `bold-template-pack/templates/capsule/preview.md`\n\n## Selection Metadata\n\n- Slug: `capsule`\n- Tagline: Modular pill-shaped cards on warm bone with a full pastel-pop palette.\n- Mood: playful, modern, warm, fresh, fun\n- Tone: upbeat, graphic, approachable, cool\n- Formality: medium-low\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials. Also fun for a playful tech demo or a research deck that wants pop-art clarity instead of gravitas.\n- Avoid for: Contexts that require traditional institutional weight — the capsule shapes and pastel pops actively soften authority.\n\n## Visual Snapshot\n\nA playful editorial system built on pill-shaped containers, a sun-bleached cream canvas, and a nine-color candy palette. Bodoni Moda serif headlines pair with Space Grotesk body to suggest a literary magazine that took a holiday at a 1970s ice-cream parlor. Every container that holds text is a pill (border-radius 9999px) outlined with a 2px ink stroke, casting a soft 6–12px offset shadow. The aesthetic is \"Memphis-meets-editorial\" — confident typography, generous bordered shapes, and decorative floating pills as atmospheric wallpaper.\n\nCapsule is a playful editorial system whose defining structural premise is the pill: every text container is a pill, every icon is a pill, every bar is a pill, every node in a diagram is a pill. The border-radius: 9999px rule applies to virtually all UI elements, with larger panels softening to a 2rem radius. Combined with the 2px ink outline that wraps every shape, the result is a system where containers feel inflated, friendly, and graphically distinct — a nod to Memphis design and late-70s ice-cream-parlor signage without abandoning editorial discipline.\n\n## Preview Ingredients\n\n- Palette: cream #F5F5F0; ink #1A1A1A; outline #1E1E1E; white #FFFFFF; coral #E85D4E; lime #C4D94E; lavender #C5B5E0; sky #8BB4F7\n- Typography: Bodoni Moda; Space Grotesk\n- Signature move: Universal pill geometry — border-radius: 9999px for small containers, 2rem for larger cards/frames.\n- Signature move: 2px solid {colors.outline} stroke wraps every pill, icon, and card.\n- Signature move: Bodoni Moda serif for every display/headline/stat; Space Grotesk sans for every body/label/pill text.\n- Signature move: Sun-bleached cream canvas {colors.cream} with soft radial glows in candy accent colors at 6–15% opacity for background atmosphere.\n- Signature move: Hard-offset shadows in low-opacity ink ({colors.shadow}) at 4/6/8/12px offsets, always solid, always bottom-right.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/design.md":"---\nversion: alpha\nname: Cartesian\ndescription: A quiet, museum-catalog editorial system built on Playfair Display serif headlines, Inter sans body, and a five-tone warm-stone palette. The aesthetic is \"consulting deck meets architectural monograph\" — minimal geometric line decorations (thin circles, dashed arcs, vertical and horizontal hairlines) drift behind content, suggesting drafting paper and compass work. Every divider is a single 1px line in a muted taupe; nothing is bold, nothing is loud. The cultural reference is Massimo Vignelli's editorial work, the Cooper Hewitt catalog, and pencil-and-tracing-paper urban planning documents.\n\ncolors:\n  bg-primary: \"#EDE8E0\"\n  bg-secondary: \"#E2DBD1\"\n  text-primary: \"#1A1A1A\"\n  text-secondary: \"#5A5A5A\"\n  accent: \"#8A8178\"\n  line: \"#B8B0A4\"\n  white-overlay: \"rgba(255, 255, 255, 0.3)\"\n\ntypography:\n  display:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(3rem, 6vw, 5.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h1:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(2.5rem, 5vw, 4.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h2:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h3:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(1.2rem, 2vw, 1.6rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  stat-figure:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"2rem\"\n    fontWeight: 400\n    lineHeight: 1\n  agenda-numeral:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 400\n    lineHeight: 1\n  team-initial:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"2rem\"\n    fontWeight: 400\n    lineHeight: 1\n  quote-mark:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"5rem\"\n    fontWeight: 400\n    lineHeight: 1\n  card-headline:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.3rem\"\n    fontWeight: 400\n    lineHeight: 1.1\n  timeline-headline:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.2rem\"\n    fontWeight: 400\n    lineHeight: 1.1\n  body:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(0.9rem, 1.2vw, 1.1rem)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-sm:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.9rem\"\n    fontWeight: 400\n    lineHeight: 1.6\n  subtitle:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(1rem, 1.5vw, 1.3rem)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  attribution:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 2px\n    textTransform: uppercase\n  label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  micro:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.7rem\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n    textTransform: uppercase\n\nspacing:\n  pad-y: \"4vh\"\n  pad-x: \"4vw\"\n  gap-xl: \"6vw\"\n  gap-lg: \"5vw\"\n  gap-md: \"3vw\"\n  gap-sm: \"2vh\"\n  card-pad: \"4vh 2vw\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  card:\n    border: \"1px solid {colors.line}\"\n    padding: \"{spacing.card-pad}\"\n    background: \"{colors.white-overlay}\"\n    description: \"Tracing-paper card — 1px taupe outline with semi-transparent white fill that lets the canvas tone bleed through. No radius, no shadow.\"\n  card-icon:\n    width: 40px\n    height: 40px\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    color: \"{colors.accent}\"\n    fontSize: \"1rem\"\n    description: \"Small ringed circle (40px) containing a 1–3 character Roman numeral or letter in accent taupe.\"\n  agenda-row:\n    padding: \"2vh 0\"\n    borderBottom: \"1px solid {colors.line}\"\n    description: \"List row separated only by a 1px taupe hairline. Numeral at left, label at right.\"\n  timeline-rule:\n    height: \"1px\"\n    background: \"{colors.line}\"\n    description: \"Single horizontal 1px taupe line connecting timeline items. No nodes, no markers — just the line.\"\n  vertical-line:\n    width: \"1px\"\n    height: \"100%\"\n    background: \"{colors.line}\"\n    opacity: 0.3\n    description: \"Optional decorative vertical hairline anchored at left edge (default 8vw from edge) at low opacity. Provides drafting-paper grid feel.\"\n  horizontal-accent:\n    width: \"20vw\"\n    height: \"1px\"\n    background: \"{colors.text-primary}\"\n    description: \"Single short ink-black 1px horizontal line used as a strong accent rule. Black, not taupe.\"\n  geo-circle:\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.5\n    description: \"Thin solid taupe ring at low opacity, used as decorative geometry behind content.\"\n  geo-arc:\n    border: \"1px dashed {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.3\n    description: \"Thin dashed taupe ring at very low opacity, paired with geo-circle to suggest compass construction.\"\n  geo-decoration:\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    description: \"Large decorative ring (30–50vw diameter) anchored to a corner or center. Always pairs with a ::before pseudo-element rendering a smaller dashed ring inside it, suggesting concentric drafting.\"\n  geo-ring:\n    width: \"50vw\"\n    height: \"50vw\"\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.3\n    description: \"The largest geometric decoration variant — a 50vw centered ring with an inner ::before dashed ring at 70% diameter.\"\n  image-placeholder:\n    background: \"{colors.bg-secondary}\"\n    border: \"1px solid {colors.line}\"\n    description: \"Solid taupe-tinted block with two crossed 1px diagonal hairlines via ::before/::after at +30° and -30°, suggesting an X over a blank frame. Holds a small uppercase label centered.\"\n  team-photo:\n    width: \"12vw\"\n    height: \"12vw\"\n    borderRadius: \"50%\"\n    border: \"1px solid {colors.line}\"\n    background: \"{colors.bg-secondary}\"\n    description: \"Circular portrait frame (12vw) in slightly darker stone, ringed in taupe, holding a single Playfair initial in accent taupe at center.\"\n  nav-arrow:\n    width: 40px\n    height: 40px\n    border: \"1px solid {colors.line}\"\n    background: \"transparent\"\n    description: \"Square 40px button with 1px taupe border holding an arrow glyph. Hover state inverts to ink fill with cream text.\"\n  nav-dot:\n    width: 8px\n    height: 8px\n    borderRadius: \"50%\"\n    background: \"{colors.line}\"\n    description: \"Small taupe dot at right edge as navigation indicator. Active state shifts to ink and scales 1.3.\"\n  chart-stroke-primary: \"{colors.text-primary}\"\n  chart-stroke-comparison: \"{colors.line}\"\n  chart-comparison-dash: \"5, 5\"\n  chart-grid-color: \"{colors.bg-secondary}\"\n  chart-axis-tick-color: \"{colors.accent}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCartesian is a **quiet museum-catalog editorial system**. Its defining premise is **restraint through 1px lines**. Every structural element — list separators, agenda rules, timeline connectors, card borders, table dividers — is a single 1px line in a muted taupe `{colors.line}`. There are no thick borders, no fills, no shadows, no rounded surfaces. Hierarchy is built through type contrast and negative space; depth does not exist in the conventional sense.\n\nThe typeface stack is a literary-monograph pairing. **Playfair Display** — a high-contrast didone-influenced serif — carries every headline, every stat numeral, every card title, every team initial, every quote mark. Playfair runs at weight 400 (regular) almost exclusively — there is no use of bold or 700-weight Playfair in the system. The thin-stroke didone aesthetic depends on letting the letterforms breathe at modest weights. **Inter** — a clean modern grotesque — carries every body paragraph, every subtitle, every label, every attribution. Inter runs at 400 for body and 500 for labels. The pairing creates the system's editorial voice: serif statements + clean sans supporting structure.\n\nThe palette is **five warm stones plus ink**. The canvas is `{colors.bg-primary}` — a warm sandstone off-cream. A slightly deeper stone `{colors.bg-secondary}` provides subtle region differentiation (image placeholders, team photo frames). Ink `{colors.text-primary}` is the headline color; medium gray `{colors.text-secondary}` is body. A warmer taupe `{colors.accent}` carries labels, attribution, and small numerals. The lightest taupe `{colors.line}` is the universal 1px line color. There are no accent colors in the populist sense — no red, no orange, no blue. The palette is stone, stone, stone, ink, ink. The only \"color\" in the system is type contrast.\n\nDepth is **entirely absent in the conventional sense**. There are no shadows, no elevated cards, no rounded surfaces, no gradients. Atmosphere is created by **geometric line decorations**: thin solid and dashed circles in `{colors.line}` at 20–50% opacity drift behind content as if drawn on tracing paper with a compass. These do not create hierarchy — they create mood. The decorative geometry signals \"drafted, considered, precise.\"\n\n**Density philosophy: sparse and breathing.** Cartesian reads as elegant when sparse and broken when crowded. A correctly composed slide pairs one Playfair headline with one body paragraph, or one chart with one short caption, framed by generous negative space. Most slide composition uses centered or asymmetric two-column layouts with `5–6vw` gutters and significant vertical breathing room. The decorative compass arcs reinforce the sparseness — they are most effective when there is room around them. A slide that feels broken in this system is one packed edge-to-edge with content; the correct density is \"one clear idea, well-framed, on stone paper.\"\n\n**Key Characteristics:**\n- Warm sandstone canvas `{colors.bg-primary}` with single 1px taupe `{colors.line}` dividers as the universal structural element.\n- Playfair Display serif at weight 400 for every headline/numeral/quote-mark; Inter sans for every body/label/attribution.\n- Five-tone monochrome palette: two stones, two grays, one ink. No vivid accent colors anywhere.\n- Decorative geometric rings (thin solid + dashed circles, 20–50% opacity) drift behind content as compass-drafted atmosphere.\n- Every label, attribution, and micro-text is uppercase Inter with 2–3px letter-spacing.\n- All borders are 1px hairlines; no element has a thicker border, a shadow, or a rounded fill.\n- Right-edge vertical nav-dot column, bottom-left square nav-arrow buttons, bottom-right mono slide counter.\n- Image placeholders carry a signature pair of crossed 1px diagonals (an X) over a stone-tinted block.\n\n## Colors\n\n### Stone & Ink Palette\n- **Background Primary** (`{colors.bg-primary}` — #EDE8E0): The canvas. Warm sandstone off-cream — closer to \"manila folder\" than \"white paper.\" This is the default slide background.\n- **Background Secondary** (`{colors.bg-secondary}` — #E2DBD1): A slightly deeper stone, used for image placeholders, team-photo frames, and any region that needs subtle separation from the canvas without a colored fill or a border.\n- **Text Primary** (`{colors.text-primary}` — #1A1A1A): Near-black ink. Used for headlines, stat numerals, and the special `{components.horizontal-accent}` rule. The strongest contrast color in the system.\n- **Text Secondary** (`{colors.text-secondary}` — #5A5A5A): Medium warm gray. Used for all body paragraph text. Softer than ink — readable but recedes.\n- **Accent** (`{colors.accent}` — #8A8178): Warm taupe. Used for labels, attributions, agenda numerals, slide counter, card-icon text, team-member role text. The system's \"small text\" color.\n- **Line** (`{colors.line}` — #B8B0A4): Pale taupe. The universal 1px line color: card borders, agenda rules, timeline connectors, team-photo rings, nav-arrow borders, geo-decoration rings.\n\n### Defaults\n- **Default surface background**: `{colors.bg-primary}`.\n- **Default headline color**: `{colors.text-primary}` — always ink, never colored, never accent-taupe. Playfair headlines are uniformly ink.\n- **Default body text color**: `{colors.text-secondary}` (medium warm gray).\n- **Default label / attribution / micro-text color**: `{colors.accent}` (warm taupe).\n- **Default border color**: `{colors.line}` — every 1px structural border. Never use ink-black for borders except the rare `horizontal-accent` rule.\n- **Default secondary surface fill**: `{colors.bg-secondary}`.\n- **Default chart primary series color**: `{colors.text-primary}` (ink).\n- **Default chart comparison/secondary series color**: `{colors.line}` with 5px dashed stroke.\n- **Default chart grid color**: `{colors.bg-secondary}`.\n- **Default chart axis tick color**: `{colors.accent}`.\n\nCartesian has **no accent color in the populist sense.** A red callout, a blue bar, a green stat — none of these exist. When emphasis is needed, increase type size, switch from sans to serif, or add a single 1px `horizontal-accent` rule in ink. Color is not the emphasis mechanism in this system; restraint is.\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face conversation**: `Playfair Display` (serif, weights 400/600/700, italic available) carries every headline, stat numeral, quote mark, card title, and team initial; `Inter` (sans, weights 300/400/500/600) carries every body, subtitle, label, attribution, and micro-text. There is no third face.\n\nPlayfair Display is used almost exclusively at **weight 400 (regular)**. The system deliberately avoids bold Playfair — the didone aesthetic relies on thin-stroke modulation that disappears at heavier weights. Italic Playfair is available (loaded) but not exercised in the default template; reserve it for inline emphasis inside body copy.\n\nInter runs at weight 400 for body, weight 500 for labels and micro-text, weight 600 for the rare emphasized inline element. The contrast between Playfair's high-modulation serif and Inter's even sans is the system's primary typographic rhythm.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3rem, 6vw, 5.5rem) | Playfair Display | 400 | Cover or large opening title |\n| `{typography.h1}` | clamp(2.5rem, 5vw, 4.5rem) | Playfair Display | 400 | Section-opening or large closing headline |\n| `{typography.h2}` | clamp(1.8rem, 3.5vw, 3rem) | Playfair Display | 400 | Primary slide headline |\n| `{typography.h3}` | clamp(1.2rem, 2vw, 1.6rem) | Playfair Display | 400 | Sub-headline within a region |\n| `{typography.card-headline}` | 1.3rem | Playfair Display | 400 | Card or pillar-block title |\n| `{typography.timeline-headline}` | 1.2rem | Playfair Display | 400 | Timeline-step or phase headline |\n| `{typography.stat-figure}` | 2rem | Playfair Display | 400 | Numerical stat figure (typically inline in a stats cluster) |\n| `{typography.team-initial}` | 2rem | Playfair Display | 400 | Initial letter centered inside a team-photo circle |\n| `{typography.agenda-numeral}` | 1.5rem | Playfair Display | 400 | Ordinal numeral preceding an agenda row |\n| `{typography.quote-mark}` | 5rem | Playfair Display | 400 | Opening quotation glyph for a pull-quote |\n| `{typography.subtitle}` | clamp(1rem, 1.5vw, 1.3rem) | Inter | 400 | Subtitle paragraph below a display headline |\n| `{typography.body}` | clamp(0.9rem, 1.2vw, 1.1rem) | Inter | 400 | Standard paragraph body |\n| `{typography.body-sm}` | 0.9rem | Inter | 400 | Compact body inside cards or timeline items |\n| `{typography.attribution}` | 0.85rem | Inter | 400 | Attribution line below a quote, with 2px tracking + uppercase |\n| `{typography.label}` | 0.75rem | Inter | 500 | Section label / eyebrow above a headline, with 3px tracking + uppercase |\n| `{typography.micro}` | 0.7rem | Inter | 400 | Image label, slide counter, smallest chrome text |\n\n### Defaults\n- **Default size for the primary slide headline**: `{typography.h2}` (clamp 1.8–3rem).\n- **Default size for a cover or large opening headline**: `{typography.h1}` (clamp 2.5–4.5rem); for the most expansive cover, `{typography.display}` (clamp 3–5.5rem).\n- **Default size for paragraph body**: `{typography.body}` (clamp 0.9–1.1rem).\n- **Default size for any inline label or eyebrow**: `{typography.label}` (0.75rem) — always 3px tracking + uppercase.\n- **Default weight for any Playfair headline**: 400. Don't reach for 600 or 700.\n- **Default weight for body**: 400.\n- **Default weight for labels/micro**: 500.\n- **Default size for a stat numeral inside a stats cluster**: `{typography.stat-figure}` (2rem). Cartesian does not have a hero-stat-numeral pattern (no 5–7rem display stat); stats are presented as inline ranks at modest scale.\n\nWhen unsure, reach for `{typography.h2}` for the slide's primary text moment, not `{typography.h3}` (which is a sub-headline within a region).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Playfair headline, stat, quote, card title, and initial is set at weight 400.** Bold Playfair does not exist in this system. The thin-stroke didone aesthetic is the identity.\n- **Every Playfair element is set in sentence case (or true title case for proper nouns).** Uppercase Playfair is not used.\n- **Every Inter label, attribution, and micro-text element is uppercase with 2–3px letter-spacing.** Labels at 3px tracking; attributions and micro at 2px. Without the tracking, Inter caps read as untreated.\n- **Every Playfair element is rendered in `{colors.text-primary}` (ink).** Headlines are never accent-taupe and never gray. The exception is decorative initial letters inside a circular `card-icon` or `team-photo`, where the letterform is rendered in `{colors.accent}`.\n- **Every 1px structural border uses `{colors.line}`.** Other border colors do not exist except for the rare `horizontal-accent` rule in ink.\n- **Every card, image-placeholder, team-photo, and nav-arrow border is 1px solid.** Thicker borders do not exist in this system.\n- **Charts use ink-black for the primary series and dashed taupe (5px, 5px) for the comparison series.** This pair is the only chart-color rule.\n\n### Typography Principles\nThe Playfair-400 + Inter-400 combination is the system's voice. Switching either family or jumping Playfair to weight 700 reads as a different design system. Italic emphasis is permitted via inline `<em>` inside body copy (Inter italic) — italic Playfair is loaded but reserved for rare uses. Underline is not used.\n\nLine-height stays open: headlines at 1.1, body at 1.6. The wide body line-height is part of the breathing-room aesthetic.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, visibility visible) at a time. Transitions are 0.6s opacity + visibility fades.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-y}` | 4vh | Default vertical slide padding |\n| `{spacing.pad-x}` | 4vw | Default horizontal slide padding |\n| `{spacing.gap-xl}` | 6vw | Major two-column gutter (most spacious) |\n| `{spacing.gap-lg}` | 5vw | Standard two-column or grid gutter |\n| `{spacing.gap-md}` | 3vw | Card-grid gutter |\n| `{spacing.gap-sm}` | 2vh | Agenda row vertical padding, attribution spacing |\n| `{spacing.card-pad}` | 4vh 2vw | Internal padding for content cards |\n\nHeadlines typically carry a 2–3vh margin-bottom from labels above and a 2vh margin-bottom from body below. Section headers above 3-card or 4-team grids carry a 6vh margin-bottom from the grid (significant breathing room).\n\n### Decorative Geometry Layer\nCartesian's signature is its **drafting-paper geometric decoration**. Every slide may layer one or more of:\n- A large ringed `geo-decoration` anchored to a corner (typically 30–50vw diameter) with an inner dashed ring at ~80% diameter (the `::before` pseudo).\n- A `vertical-line` at ~8vw from the left edge running floor-to-ceiling at 30% opacity.\n- A `horizontal-accent` (a single short black 1px line) anchored at 15vh from the bottom-left.\n- A centered `geo-ring` (50vw circle) on closing or contemplative slides.\n\nThese elements have **no informational role** — they create atmosphere. Slides without any geometric decoration are valid; over-decoration (more than two geo elements per slide) breaks the restraint.\n\n### Chrome\nThe system's chrome is minimal:\n- Right-edge vertical column of small `nav-dot` indicators (8px circles in taupe).\n- Bottom-left pair of square `nav-arrow` buttons (40×40, 1px taupe border, transparent fill).\n- Bottom-right `slide-counter` text in Inter at 0.75rem with 2px tracking in `{colors.accent}`.\n\nThere is no top chrome bar, no persistent header, no footer rule.\n\n## Depth and Elevation\n\n### Flat Plane (Only Technique)\nCartesian has no shadows, no elevated cards, no rounded surfaces, no gradients. Every element sits on a single plane.\n\nHierarchy is constructed from:\n- **Type contrast** — Playfair serif vs Inter sans; size scale from 5rem down to 0.7rem.\n- **1px hairline dividers** — agenda rows, timeline rule, card outlines, image-placeholder outlines, stats top-border, team-photo rings, nav-arrow borders.\n- **Color tone** — ink vs gray vs taupe.\n- **Negative space** — generous padding around every element.\n- **Geometric atmosphere** — compass-drafted rings behind content suggest depth without creating it.\n\nIntroducing a `box-shadow`, an elevated card, or a soft gradient breaks the restraint that defines the system.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 50% (circle) | Every circular element: `card-icon` (40px), `team-photo` (12vw), `nav-dot` (8px), `geo-circle`, `geo-arc`, `geo-decoration`, `geo-ring` |\n| 0 | Everything else: cards, image-placeholders, nav-arrows, agenda rows, timeline, stat-blocks, chart container |\n\nThe system uses **only two radius values**: 50% (true circle) or 0 (sharp rectangle). Soft-rounded corners do not exist.\n\n### Border Weights\n- **1px solid `{colors.line}`** — the universal structural border. Used on every card, image-placeholder, team-photo ring, nav-arrow, agenda row bottom, timeline rule, stats top, geo-circle, geo-decoration.\n- **1px dashed `{colors.line}`** — used on `geo-arc` and the inner `::before` ring inside `geo-decoration` / `geo-ring`. Dashed signals \"construction line / arc.\"\n- **1px solid `{colors.text-primary}`** — used only on the rare `horizontal-accent` decorative rule. The system's only ink-black line.\n- **Chart bar/line stroke widths** — Chart.js series at 1px (bar borders), 2px (line series). Comparison series at 2px dashed (5px dash, 5px gap).\n\nAll structural borders are `{colors.line}`. Thicker borders, colored borders, and dashed structural borders (other than geo-arcs) do not exist.\n\n### Decorative Element Types\n\n**Geometric ring (geo-circle / geo-decoration / geo-ring)** — Thin 1px taupe circles in various sizes (10vw, 30vw, 50vw) at 20–50% opacity. Typically paired with an inner dashed `::before` ring at 70–80% of the outer diameter, suggesting compass construction with both a primary and an offset arc. Anchored to corners or centers; sits behind content with `z-index: 0` and `pointer-events: none`.\n\n**Vertical line** — A single 1px taupe column anchored at ~8vw from the left slide edge, running floor-to-ceiling at 30% opacity. Suggests a drafting-paper alignment guide. Optional per slide.\n\n**Horizontal accent** — A single 20vw × 1px black line anchored 15vh from the bottom-left of a slide. The system's only ink-black line — used as a strong terminal accent rule on cover or closing layouts. Use sparingly.\n\n**Image placeholder** — A solid `{colors.bg-secondary}` block with two 150% diagonal 1px taupe lines crossed at +30° and -30° via `::before` / `::after`, forming an X. Centers a small uppercase Inter label (\"Visual Reference\" or similar). The X pattern is the signature image-not-yet-wired treatment.\n\n**Team-photo frame** — A 12vw circular block in `{colors.bg-secondary}` with a 1px taupe ring, holding a single Playfair-400 initial at 2rem in `{colors.accent}` centered. Used as portrait placeholder.\n\n**Card** — A 1px taupe-bordered block with a semi-transparent white interior fill (`{colors.white-overlay}`) that lets the canvas tone bleed through subtly. The faint white fill is what differentiates a card from a bare region; remove the fill and the card disappears.\n\n**Agenda row** — A flex row containing a Playfair `{typography.agenda-numeral}` in `{colors.accent}` at left, then a label at right, with 2vh padding and a 1px taupe bottom border. Stacked rows form an agenda list.\n\n**Timeline** — A 1px taupe top-border across a flex row of evenly-distributed timeline items; each item carries a small Inter `year` label in taupe, a Playfair `{typography.timeline-headline}`, and an Inter body paragraph. The hairline is the only timeline structure — there are no nodes, no markers, no dots.\n\n**Stats cluster** — A flex row of stat items separated by `gap-md`, framed by a 1px taupe top border, holding inline `{typography.stat-figure}` Playfair numerals with small uppercase Inter labels in taupe below.\n\n**Quote mark** — A 5rem Playfair quote glyph at 50% opacity in taupe, positioned above a Playfair `{typography.h2}` headline + a small uppercase taupe attribution below.\n\n**Chart** — Chart.js bar or line chart with ink-black primary series and dashed taupe comparison series. Grid lines in `{colors.bg-secondary}`. Axis ticks in `{colors.accent}`. Always rendered without fill on the primary series (or with a 5% ink-tinted fill on line charts).\n\n## Do's and Don'ts\n\n### Do\n- Use a single 1px line in `{colors.line}` for every structural separator — agenda rule, timeline connector, card border, stats top, team-photo ring. The 1px hairline is Cartesian's identity.\n- Set every Playfair headline, stat, quote mark, and card title at weight 400. Don't reach for bold; the thin-stroke didone aesthetic depends on it.\n- Render every headline in `{colors.text-primary}` (ink). Playfair never appears in taupe or color.\n- Render every label, attribution, agenda numeral, and micro-text in `{colors.accent}` (taupe) with uppercase + 2–3px letter-spacing.\n- Layer decorative geometric rings (solid + dashed) at 20–50% opacity behind content for atmosphere. One or two geo elements per slide; never more.\n- Pair Playfair Display (serif headlines) with Inter (sans body). The two-face pairing is fixed.\n- Use the crossed-diagonal X pattern inside image placeholders. It is the system's signature placeholder treatment.\n- Let slides breathe — sparse layouts with generous negative space are the correct density.\n- Use `{colors.bg-secondary}` as the fill for image placeholders and team-photo frames — a subtle stone, not white, not gray.\n- Use a single `horizontal-accent` (20vw × 1px ink line) sparingly as a strong terminal rule on cover or closing compositions.\n\n### Don't\n- Don't introduce a populist accent color. No red, no orange, no blue, no green. The palette is stone-on-stone with ink for headlines.\n- Don't render Playfair headlines in `{colors.accent}` (taupe). Headlines are ink; taupe is reserved for small text.\n- Don't bold any Playfair element. Weight 400 is the standing rule; bold breaks the didone aesthetic.\n- Don't add shadows, elevated cards, or gradient fills. Cartesian is flat; depth comes from geometry and type, not z-axis.\n- Don't use rounded corners on cards or rectangles. The only round shapes are true circles (radius 50%).\n- Don't use thick borders (2px+). Every structural border is 1px.\n- Don't crowd the slide. Sparse breathing layouts read as elegant; packed layouts read as broken.\n- Don't pair Playfair with a different sans companion. The Inter pairing is fixed.\n- Don't render labels or micro-text in sentence case. Small Inter text is always uppercase + 2–3px tracking.\n- Don't add more than two geo decorations per slide — restraint is the rule; over-decoration reads as cluttered.\n\n## Responsive Behavior\n\nCartesian is a viewport-fluid 1920×1080 presentation system using `vw` / `vh` units and `clamp()` throughout. There is a single `@media (max-aspect-ratio: 4/3)` breakpoint that collapses two-column grids to single-column, hides the timeline rule (which would lose meaning when stacked), and stacks team and card grids vertically. The system is otherwise responsive without breakpoints.\n\n### Scaling Behavior\n- Display headlines scale from 2.5rem at minimum viewport to 5.5rem at maximum via `clamp()`.\n- Body text scales from 0.9rem to 1.1rem.\n- Padding uses `vh` / `vw` units that scale linearly with viewport.\n- The 1px borders, 8px nav dots, and 40px nav arrows are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Nav dots at right edge can be clicked to jump to specific slides.\n- Nav arrows at bottom-left are clickable; hover state inverts background to ink and text to cream.\n- Slide counter at bottom-right shows current / total with 2-digit zero-padding.\n\n### Charts\nCharts are rendered with Chart.js (loaded via CDN). The two chart types in the source are bar and line; both follow the ink-primary / dashed-taupe-comparison convention. Custom font settings inject Inter into Chart.js label rendering.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Playfair Display 400) | Playfair Display | 思源宋体 Noto Serif SC 700 | Google Fonts |\n| Body / Label (Inter 400–500) | Inter | 思源宋体 Noto Serif SC 400 | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin font in the same `font-family` stack so Latin glyphs render in Playfair / Inter and CJK glyphs fall through to Noto Serif SC automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400..700;1,400..700&family=Inter:wght@300..600&family=Noto+Serif+SC:wght@400;700&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Playfair Display\", \"Noto Serif SC\", serif;\n  --font-body: \"Inter\", \"Noto Serif SC\", sans-serif;\n}\n/* Headlines use Noto Serif SC 700; body uses Noto Serif SC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.75 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase, and Cartesian already favors generous leading.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs. Keep the 2–3px tracking only on uppercase Latin labels.\n- **Text-transform**: drop `text-transform: uppercase` on any label/attribution/micro when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nNoto Serif SC (思源宋体) is the only mainstream Hanzi serif with the same restrained editorial register Cartesian needs — its modulated horizontal-thin / vertical-thick strokes echo Playfair's didone aesthetic, and its uniformly even cadence matches Cartesian's \"museum-catalog\" voice. Using NSC at weight 700 for headlines preserves the visual mass of the Latin display while NSC 400 carries body with the same quiet warmth Inter provides. The five-stone palette absorbs Hanzi cleanly because every glyph stays in ink or taupe — no candy fills to negotiate. The decorative compass-arc geometry layer is content-agnostic and works identically in any language. Avoid bolding Hanzi (the Chinese-typography equivalent of Cartesian's \"no bold Playfair\" rule); rely on size and the 1px line dividers for hierarchy.\n\n### Known CJK Gap\n\nNoto Serif SC is the only Hanzi serif loaded — there is no italic axis (Chinese type historically has no italic), so the rare italic Playfair `<em>` moment loses its emphasis when the body falls through to NSC. Substitute a single-character span colored in `{colors.accent}` (taupe), or wrap the emphasized phrase in faint brackets 「」, to recover emphasis. NSC's 700 weight is the heaviest available — the system's restraint-through-400-weight rule naturally extends to Chinese, so this is rarely a gap in practice.\n\n## Iteration Guide\n\n1. Every new structural separator uses a 1px solid `{colors.line}` border. No exceptions.\n2. Every new headline uses Playfair Display at weight 400 in `{colors.text-primary}`. Don't bold; don't color.\n3. Every new small text element (label, attribution, micro) uses Inter uppercase with 2–3px letter-spacing in `{colors.accent}`.\n4. Every new body paragraph uses Inter weight 400 in `{colors.text-secondary}`, with line-height 1.6.\n5. Every new card uses 1px taupe border + semi-transparent white overlay fill. No shadow, no radius.\n6. New circular elements (icons, photos, decorative rings) use border-radius 50% with 1px taupe ring.\n7. New geometric decorations stay subtle: 1 or 2 per slide, at 20–50% opacity, behind content (z-index 0, pointer-events none).\n8. New chart series follow the ink-primary / dashed-taupe-comparison convention. Don't introduce colored chart series.\n9. New layouts respect the breathing-room density rule — sparse beats dense in Cartesian.\n10. The `horizontal-accent` 20vw ink line is the system's only \"ink rule\" — use it sparingly as a terminal accent, never as a routine divider.\n\n## Known Gaps\n\n- The Chart.js library is loaded via CDN; new chart types beyond bar and line require manual configuration matching the ink-primary / dashed-taupe-comparison aesthetic.\n- The decorative `geo-decoration` and `geo-ring` `::before` inner-ring pattern is hardcoded in CSS; size variants beyond what the source exercises require new style rules.\n- The team-photo placeholder shows a single Playfair initial in taupe; real portrait insertion requires replacing the initial with an `<img>` and adjusting the circular crop.\n- The chart axis label colors and grid colors are hardcoded inline in the Chart.js options blocks (rather than reading from CSS variables) — restyling requires editing JS, not CSS.\n- The image-placeholder X pattern (crossed +30°/-30° diagonals) is rendered via `::before` / `::after` with fixed 150% widths; resizing the placeholder beyond the source dimensions may require recomputing the rotation angle to maintain edge-touch.\n- Italic Playfair is loaded but not exercised in any default rule; it is available for inline `<em>` emphasis in body copy but the system itself does not author any italic text.\n- The `vertical-line` and `horizontal-accent` decorative elements have hardcoded position values (8vw from left, 15vh from bottom); using them off-default-position requires per-instance style overrides.\n- The slide-counter `currentSlide` / `totalSlides` IDs are referenced in the JS but the system has no internal slide-name registry; new slides simply increment by their DOM order.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/preview.md":"# Cartesian Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/cartesian/design.md`\n- Preview card: `bold-template-pack/templates/cartesian/preview.md`\n\n## Selection Metadata\n\n- Slug: `cartesian`\n- Tagline: Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried.\n- Mood: quiet, considered, elegant, warm-minimal\n- Tone: classical, literary, restrained, confident-quiet\n- Formality: high\n- Density: low\n- Scheme: light\n- Best for: Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks. Also a strong choice for editorial features, founder reflections, or any deck where restraint is the message — including across tech and finance.\n- Avoid for: Decks that need visual heat, multiple accents, or a sense of urgency — the warm-neutral palette is intentionally low-energy.\n\n## Visual Snapshot\n\nA quiet, museum-catalog editorial system built on Playfair Display serif headlines, Inter sans body, and a five-tone warm-stone palette. The aesthetic is \"consulting deck meets architectural monograph\" — minimal geometric line decorations (thin circles, dashed arcs, vertical and horizontal hairlines) drift behind content, suggesting drafting paper and compass work. Every divider is a single 1px line in a muted taupe; nothing is bold, nothing is loud. The cultural reference is Massimo Vignelli's editorial work, the Cooper Hewitt catalog, and pencil-and-tracing-paper urban planning documents.\n\nCartesian is a quiet museum-catalog editorial system. Its defining premise is restraint through 1px lines. Every structural element — list separators, agenda rules, timeline connectors, card borders, table dividers — is a single 1px line in a muted taupe {colors.line}. There are no thick borders, no fills, no shadows, no rounded surfaces. Hierarchy is built through type contrast and negative space; depth does not exist in the conventional sense.\n\n## Preview Ingredients\n\n- Palette: bg-primary #EDE8E0; bg-secondary #E2DBD1; text-primary #1A1A1A; text-secondary #5A5A5A; accent #8A8178; line #B8B0A4\n- Typography: Playfair Display; Inter\n- Signature move: Warm sandstone canvas {colors.bg-primary} with single 1px taupe {colors.line} dividers as the universal structural element.\n- Signature move: Playfair Display serif at weight 400 for every headline/numeral/quote-mark; Inter sans for every body/label/attribution.\n- Signature move: Five-tone monochrome palette: two stones, two grays, one ink. No vivid accent colors anywhere.\n- Signature move: Decorative geometric rings (thin solid + dashed circles, 20–50% opacity) drift behind content as compass-drafted atmosphere.\n- Signature move: Every label, attribution, and micro-text is uppercase Inter with 2–3px letter-spacing.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/design.md":"---\nversion: alpha\nname: Cobalt Grid\ndescription: \"A Japanese-magazine trend-report system built on warm cream paper, electric cobalt ink, and a graph-paper grid that lives permanently behind every slide. Newsreader serif headlines tower at 18vh while DM Mono carries chrome and ticker text. The signature decoration is a pixel-glitch column — vertical scanlines stair-stepped down the right edge of declarative slides — paired with QR-style 8×8 grid patches. The cultural reference is WIRED Japan, Shift magazine, and architectural trend reports printed in two-color risograph: cream + one cobalt.\"\n\ncolors:\n  paper: \"#F0EBDE\"\n  paper-2: \"#E6E0CE\"\n  ink: \"#1F2BE0\"\n  ink-soft: \"#5560E5\"\n  grid: \"rgba(31, 43, 224, 0.10)\"\n  ink-faint: \"rgba(31, 43, 224, 0.18)\"\n\ncolor-aliases:\n  rule: ink\n  bg: paper\n\ntypography:\n  display-hero:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(100px, min(11vw, 18vh), 200px)\"\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.008em\n  display-closing:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(72px, min(8.4vw, 14vh), 180px)\"\n    fontWeight: 400\n    lineHeight: 0.96\n    letterSpacing: -0.005em\n  display-chapter:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(56px, min(6vw, 10vh), 130px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.005em\n  display-quote:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(50px, min(5.6vw, 9vh), 110px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n  display-manifesto:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(56px, min(6.4vw, 11vh), 120px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n  headline:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(46px, min(4.8vw, 8.2vh), 92px)\"\n    fontWeight: 400\n    lineHeight: 0.95\n  headline-index:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(48px, min(5vw, 8.5vh), 100px)\"\n    fontWeight: 400\n    lineHeight: 0.95\n  vbig-numeral:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(110px, min(11vw, 18vh), 240px)\"\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.015em\n  ed-callout:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(28px, min(2.8vw, 4.6vh), 50px)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  row-headline:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(26px, 2vw, 40px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n  table-name:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(20px, 1.6vw, 28px)\"\n    fontWeight: 400\n    lineHeight: 1.15\n  micro:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(12px, 0.9vw, 14px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.16em\n    textTransform: uppercase\n  micro-strong:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(13px, 1vw, 16px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  micro-sm:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(11px, 0.75vw, 12px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  body:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(14px, 0.95vw, 15px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body-lede:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(15px, 1vw, 18px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body-stat:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(15px, 1vw, 17px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  mono-tag:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(13px, 0.9vw, 15px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.04em\n  mono-chrome:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.82vw, 13px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.06em\n  mono-tick:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(12px, 0.85vw, 14px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.04em\n\nspacing:\n  edge: \"clamp(36px, 3.6vw, 80px)\"\n  edge-inner: \"clamp(60px, 8vw, 160px)\"\n  pad-top: \"clamp(76px, 8vh, 130px)\"\n  pad-bottom: \"clamp(100px, 10vh, 150px)\"\n  gap-lg: \"clamp(28px, 3vw, 56px)\"\n  gap-md: \"clamp(20px, 2.2vh, 36px)\"\n  gap-sm: \"clamp(14px, 1.6vh, 24px)\"\n  gap-xs: \"clamp(10px, 1.2vh, 18px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  graph-paper-grid:\n    backgroundImage: \"linear-gradient(to right, {colors.grid} 1px, transparent 1px), linear-gradient(to bottom, {colors.grid} 1px, transparent 1px)\"\n    backgroundSize: \"clamp(28px, 2.2vw, 44px) clamp(28px, 2.2vw, 44px)\"\n    description: \"Permanent ::before pseudo on every stage. 28–44px squared graph paper grid in 10%-opacity cobalt that sits behind every slide at z-index 1. Cannot be turned off — it is the canvas tone.\"\n  hairlines:\n    height: \"1.5px\"\n    background: \"{colors.ink}\"\n    description: \"Two persistent slim cobalt rules — one at the top of every slide (≈2.6vh from top) and one near the bottom (≈2vh from bottom) — both inset from edges by {spacing.edge}. They frame the slide composition.\"\n  pagenum:\n    position: absolute\n    right: \"{spacing.edge}\"\n    bottom: \"clamp(48px, 4.8vh, 76px)\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.82vw, 13px)\"\n    color: \"{colors.ink}\"\n    letterSpacing: 0.06em\n    description: \"Mono cobalt page number anchored bottom-right above the bottom hairline. One per slide.\"\n  nav-hint:\n    position: fixed\n    left: \"{spacing.edge}\"\n    bottom: \"clamp(48px, 4.8vh, 76px)\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(10px, 0.75vw, 12px)\"\n    color: \"{colors.ink}\"\n    letterSpacing: 0.08em\n    opacity: 0.4\n    description: \"Mono cobalt navigation hint anchored bottom-left, mirrors pagenum.\"\n  pixel-glitch:\n    description: \"Stair-stepped column of vertical scanlines, rendered as inline SVG. Each stepped rectangle contains evenly-spaced cobalt vertical lines on cream. Sits absolutely positioned (typically right edge) at z-index 3, decorative only. Size ranges from 16vw × full-height (compact decoration) to 32vw × full-height (signature cover decoration).\"\n  qr-block:\n    display: grid\n    gridTemplateColumns: \"repeat(8, 1fr)\"\n    gridTemplateRows: \"repeat(8, 1fr)\"\n    gap: 1.5px\n    background: \"{colors.paper}\"\n    padding: 4px\n    boxShadow: \"0 0 0 1.5px {colors.paper}\"\n    description: \"8×8 QR-style mosaic of cobalt cells on cream background. Paper-fill ensures it reads as a discrete patch when overlapping the pixel-glitch column. Typical size 58–100px square.\"\n  topbar-rule:\n    borderBottom: \"1.5px solid {colors.ink}\"\n    paddingBottom: \"clamp(12px, 1.4vh, 22px)\"\n    description: \"1.5px cobalt rule under the topbar of an index, data, or table layout. Below the rule sits a Newsreader headline (left) and a mono lab-tag (right).\"\n  row-divider:\n    borderBottom: \"1px solid {colors.ink-faint}\"\n    description: \"Faint 18%-opacity cobalt rule between rows of an index list, table, or ledger.\"\n  attribution-rule:\n    borderTop: \"1px solid {colors.ink}\"\n    paddingTop: \"clamp(10px, 1.2vh, 18px)\"\n    description: \"Solid cobalt rule above a quote attribution or manifesto byline.\"\n  pixel-stack-bars:\n    description: \"Vertical bar chart rendered as a column of stacked 'cells' — flex column-reverse with 3px gaps, each cell a small horizontal block. Cells default to 10%-opacity cobalt (the grid color); .on cells fill solid cobalt to represent the value. Reads as a pixelated bar made of grid units.\"\n  ledger-row:\n    display: grid\n    gridTemplateColumns: \"76px 0.6fr 1.4fr 0.7fr 0.5fr\"\n    gap: \"clamp(14px, 1.4vw, 28px)\"\n    borderBottom: \"1px solid {colors.ink-faint}\"\n    description: \"Dense table row carrying a num-tag, name (Newsreader), description (Hanken Grotesk), mood-tag, and delta-tag (mono with up/down arrow prefix). Header row uses 1.5px solid cobalt bottom border.\"\n  vstack-label:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    writingMode: \"vertical-rl\"\n    textOrientation: \"mixed\"\n    letterSpacing: 0.04em\n    description: \"Vertical-orientation mono label column anchored to the right edge of a slide. Replaces the Korean vertical column of the reference with mono catalogue text rotated 90°.\"\n  delta-up:\n    content: \"↑ \"\n    description: \"Up arrow prefix via ::before on a mono delta tag in the ledger table.\"\n  delta-down:\n    content: \"↓ \"\n    opacity: 0.6\n    description: \"Down arrow prefix via ::before, dimmed 40% to read as decline.\"\n  delta-flat:\n    content: \"— \"\n    opacity: 0.6\n    description: \"Em-dash prefix via ::before, dimmed 40% to read as neutral.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCobalt Grid is a **two-color trend-report editorial system** built on three immovable foundations: a warm cream paper canvas (`{colors.paper}`), an electric cobalt ink (`{colors.ink}`), and a **permanent graph-paper grid** that sits behind every slide. The grid is not optional decoration — it is rendered via a `::before` pseudo on every `.stage` and cannot be turned off. The aesthetic is \"two-color risograph monograph\": cream + cobalt only, with the grid lending the entire deck the feel of architectural tracing paper or a Japanese trend report.\n\nThe typeface stack is a deliberate three-face conversation. **Newsreader** — a contemporary literary serif with low-modulation roman letterforms — carries every display moment, every section headline, every stat numeral. Newsreader is used at weight 400 only; the type relies on size to assert hierarchy, not weight. **Hanken Grotesk** — a humanist sans — carries every body paragraph, every uppercase label, every micro-text. Hanken runs at 400 for body and 600 for labels. **DM Mono** — a monospace — carries every chrome element: page numbers, mono tags, axis ticks, vertical-stack labels, delta arrows in tables. The three-face system creates the system's identity: serif statements + sans bodies + mono chrome.\n\nThe palette is **strictly two-color**: cream and cobalt, with a softer cobalt `{colors.ink-soft}` and two opacity tones (`{colors.grid}` at 10%, `{colors.ink-faint}` at 18%) for atmospheric and structural use. There are no accent colors. Cobalt is the *only* ink color — for headlines, body, borders, page numbers, the graph paper, the pixel-glitch decoration, and the QR patches. The cream paper is the *only* surface. Even the pixel-stack bar chart uses cobalt at two opacities (10% off, 100% on) to render data.\n\nDepth is **flat with structural rules**. There are no drop shadows, no elevated cards, no rounded surfaces. Hierarchy comes from:\n- The 1.5px cobalt **hairline frame** (top and bottom of every slide).\n- 1.5px cobalt **topbar rule** under section headers.\n- 1px faint-cobalt **row dividers** between table or index entries.\n- The 10%-opacity **graph paper grid** behind everything.\n- The pixel-glitch and QR-block **decorative SVG patches** as compositional accents.\n\n**Density philosophy: medium to dense, structured by the grid.** Cobalt Grid is built for editorial density — magazine spreads, trend indices, data ledgers. A correctly composed slide pairs one large Newsreader headline with multiple structured information rows (an index of six trends, a ledger of eight entries, a chart with eight pixel-stack bars). The graph paper underneath actively wants to be filled; sparse slides leave too much grid showing and read as wireframe. The exception is the manifesto, quote, and colophon layouts, which deliberately leave space open and let the graph paper breathe. Choose density by slide type: chapter / manifesto / quote / colophon are sparse; index / data / table are dense.\n\n**Key Characteristics:**\n- Cream paper canvas `{colors.paper}` with electric cobalt `{colors.ink}` as the only ink — strictly two-color.\n- Permanent 28–44px graph-paper grid in 10%-opacity cobalt behind every slide.\n- Top and bottom 1.5px cobalt hairlines frame every slide with `{spacing.edge}` insets.\n- Newsreader serif at weight 400 for every display/headline; Hanken Grotesk sans for body/labels; DM Mono for all chrome.\n- Pixel-glitch vertical scanline columns and QR-style 8×8 mosaics as the system's signature decorative patches.\n- Display type can be enormous — `{typography.display-hero}` up to 18vh (≈194px on a 1080-tall display) and `{typography.vbig-numeral}` to 240px.\n- Hanken labels are uppercase at 0.16–0.18em letter-spacing; mono tags carry 0.04–0.06em tracking.\n- Pixel-stack bar charts render data as stacks of grid-unit cells (cobalt on / cobalt-10% off).\n- Page number bottom-right, mono navigation hint bottom-left, both anchored above the bottom hairline.\n\n## Colors\n\n### Two-Color System\n- **Paper** (`{colors.paper}` — #F0EBDE): The canvas. Warm cream off-white with a clear yellow-warm bias — closer to \"newsprint paper\" than \"blank white.\" Used as the universal slide background and as the fill behind QR-blocks so they read as discrete patches against the pixel-glitch column.\n- **Paper-2** (`{colors.paper-2}` — #E6E0CE): A slightly deeper cream. Defined in the palette but used sparingly — available for subtle region differentiation when needed.\n- **Ink** (`{colors.ink}` — #1F2BE0): Electric cobalt / royal blue. The *only* ink color in the system. Used for all headlines, all body text, all borders, all chrome, the graph paper grid, the pixel-glitch decoration, and the QR patches. The high saturation is intentional — at full strength it reads as risograph-printed cobalt, not navy blue.\n- **Ink Soft** (`{colors.ink-soft}` — #5560E5): A lighter cobalt for secondary marks. Defined in the palette but used sparingly — most softened cobalt in the system comes from opacity-on-ink rather than this dedicated tone.\n- **Grid** (`{colors.grid}` — rgba(31, 43, 224, 0.10)): 10%-opacity cobalt. Used exclusively for the permanent graph-paper grid behind every slide, and for the \"off\" cells in pixel-stack bar charts.\n- **Ink Faint** (`{colors.ink-faint}` — rgba(31, 43, 224, 0.18)): 18%-opacity cobalt. Used exclusively for the faint row dividers in index lists, tables, and ledgers — between rows that share the same dense information layer.\n\n### Defaults\n- **Default slide surface**: `{colors.paper}`.\n- **Default headline color**: `{colors.ink}` — every Newsreader serif headline is cobalt. There is no other headline color.\n- **Default body text color**: `{colors.ink}` — body is also cobalt, just smaller. Cobalt-on-cream is the system's only text relationship.\n- **Default label / mono / micro color**: `{colors.ink}`.\n- **Default border color (structural rules)**: `{colors.ink}` at 1.5px solid.\n- **Default border color (row dividers within dense lists)**: `{colors.ink-faint}` at 1px solid.\n- **Default grid color**: `{colors.grid}` — never visible at full strength; never disabled.\n- **Default chart data color (on)**: `{colors.ink}`.\n- **Default chart data color (off)**: `{colors.grid}`.\n\nThe system has **no accent color** in the populist sense. A second color does not exist — adding a red callout, a green stat, or a yellow highlight breaks the risograph two-color identity. When emphasis is needed, increase type size, switch from Hanken to Newsreader, add a mono delta arrow, or use opacity to dim rather than coloring to highlight.\n\n## Typography\n\n### Font Family\nThe system runs on a **three-face conversation**: `Newsreader` (serif, weight 400 / 500 italic) carries every display and headline; `Hanken Grotesk` (sans, weights 400–700) carries every body, label, and micro-text; `DM Mono` (monospace, 400–500) carries every chrome element. There is no fourth face.\n\nNewsreader's roman letterforms run at weight 400 almost exclusively — the type relies on size to assert hierarchy, not weight. Italic Newsreader is loaded (300/400/500 italic axis) and is used inside the manifesto's `.roman` modifier (which is *non-italic* — the modifier flips the italic body back to roman for an inline pull moment) and is available for inline `<em>` emphasis. Hanken Grotesk carries body at 400 and labels at 600. DM Mono provides chrome at 400.\n\nThe serif/grotesk/mono three-way pairing is the system's primary typographic rhythm. Each face has a strict role: serif = statement, grotesk = supporting copy, mono = catalogue chrome.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.vbig-numeral}` | clamp(110px, min(11vw, 18vh), 240px) | Newsreader | 400 | Largest numerical display — hero stat figure |\n| `{typography.display-hero}` | clamp(100px, min(11vw, 18vh), 200px) | Newsreader | 400 | Largest title — cover or hero display |\n| `{typography.display-closing}` | clamp(72px, min(8.4vw, 14vh), 180px) | Newsreader | 400 | Conclusive headline on a colophon/closing layout |\n| `{typography.display-chapter}` | clamp(56px, min(6vw, 10vh), 130px) | Newsreader | 400 | Section-opening or chapter title |\n| `{typography.display-manifesto}` | clamp(56px, min(6.4vw, 11vh), 120px) | Newsreader | 400 | Manifesto statement display |\n| `{typography.display-quote}` | clamp(50px, min(5.6vw, 9vh), 110px) | Newsreader | 400 | Pull-quote body |\n| `{typography.headline-index}` | clamp(48px, min(5vw, 8.5vh), 100px) | Newsreader | 400 | Index or trend-list section header |\n| `{typography.headline}` | clamp(46px, min(4.8vw, 8.2vh), 92px) | Newsreader | 400 | Data, table, or chart section header |\n| `{typography.ed-callout}` | clamp(28px, min(2.8vw, 4.6vh), 50px) | Newsreader | 400 | Editorial subtitle below a hero title |\n| `{typography.row-headline}` | clamp(26px, 2vw, 40px) | Newsreader | 400 | Per-row headline inside an index list |\n| `{typography.table-name}` | clamp(20px, 1.6vw, 28px) | Newsreader | 400 | Per-row name cell inside a ledger table |\n| `{typography.body-lede}` | clamp(15px, 1vw, 18px) | Hanken Grotesk | 400 | Lead paragraph below a chapter title |\n| `{typography.body-stat}` | clamp(15px, 1vw, 17px) | Hanken Grotesk | 400 | Descriptive paragraph next to a stat figure |\n| `{typography.body}` | clamp(14px, 0.95vw, 15px) | Hanken Grotesk | 400 | Standard paragraph body |\n| `{typography.micro-strong}` | clamp(13px, 1vw, 16px) | Hanken Grotesk | 600 | Largest uppercase label / kicker |\n| `{typography.micro}` | clamp(12px, 0.9vw, 14px) | Hanken Grotesk | 600 | Standard uppercase label / lab-tag |\n| `{typography.micro-sm}` | clamp(11px, 0.75vw, 12px) | Hanken Grotesk | 600 | Smallest uppercase label / table header |\n| `{typography.mono-tag}` | clamp(13px, 0.9vw, 15px) | DM Mono | 400 | Mono catalogue tag, num-tag in an index row |\n| `{typography.mono-tick}` | clamp(12px, 0.85vw, 14px) | DM Mono | 400 | Mono chart tick label, vertical-stack-label entry |\n| `{typography.mono-chrome}` | clamp(11px, 0.82vw, 13px) | DM Mono | 400 | Mono page number, navigation hint, secondary meta |\n\n### Defaults\n- **Default size for the primary section headline (index, data, table)**: `{typography.headline}` (clamp 46–92px) or `{typography.headline-index}` for index layouts.\n- **Default size for a cover or hero display**: `{typography.display-hero}` (clamp 100–200px).\n- **Default size for a chapter or section-opener title**: `{typography.display-chapter}` (clamp 56–130px).\n- **Default size for paragraph body**: `{typography.body}` (clamp 14–15px).\n- **Default size for any inline uppercase label**: `{typography.micro}` (clamp 12–14px) at weight 600 with 0.16em tracking.\n- **Default size for any mono chrome (page number, tag, tick)**: `{typography.mono-tag}` (clamp 13–15px).\n- **Default weight for Newsreader**: 400. Newsreader bold is not used.\n- **Default weight for Hanken body**: 400.\n- **Default weight for Hanken label**: 600.\n\nWhen unsure, reach for `{typography.headline}` (clamp 46–92px) for the slide's primary section header, not `{typography.display-chapter}` (which is for chapter-opening moments only).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Newsreader element is set at weight 400.** Newsreader at 600/700 is not used in this system. The literary-serif aesthetic depends on the open roman letterforms at modest weight.\n- **Every Newsreader element is rendered in `{colors.ink}` (cobalt).** A cream serif headline does not exist.\n- **Every Hanken label, kicker, lab-tag, and micro-text is uppercase with at least 0.16em letter-spacing** at weight 600. Hanken caps without tracking read as untreated.\n- **Every DM Mono element is rendered in `{colors.ink}` with 0.04–0.08em letter-spacing.** Mono with tighter tracking reads as code, not editorial.\n- **Every display element carries negative letter-spacing.** Display-hero at -0.008em, vbig-numeral at -0.015em, chapter / closing / manifesto / quote at -0.005em.\n- **The graph-paper grid is permanent on every slide.** The `.stage::before` rule is not overridable per-slide — every composition sits on top of it.\n- **The top and bottom hairlines frame every slide.** The `.hairlines::before` and `.hairlines::after` rules apply by default; they should not be suppressed.\n- **Page number sits above the bottom hairline with clear vertical space.** The bottom hairline anchors at `bottom: clamp(20px, 2vh, 32px)`; the page number anchors at `bottom: clamp(48px, 4.8vh, 76px)` — they must not collide.\n\n### Typography Principles\nThe Newsreader-400 + Hanken-600-uppercase-tracked + DM-Mono-tracked combination is the system's voice. Switching any of those three face/weight/case rules reads as a different design system. Italic is permitted via Newsreader italic (loaded) for inline `<em>` and for the manifesto's editorial italic-with-`.roman`-flip treatment. Underline is not used.\n\nLine-height collapses at the top: display-hero / vbig-numeral at 0.92, display-chapter at 1.0, body at 1.5. The tight display + open body contrast is what gives the system its trend-report rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, pointer-events auto) at a time. Transitions are 280ms opacity fades.\n\nA `.stage` wrapper sits inside `.deck` (`position: fixed; inset: 0`) and provides the cream background plus the permanent `::before` graph-paper grid.\n\n### Edge and Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.edge}` | clamp(36px, 3.6vw, 80px) | Standard slide edge inset for content, page number, hairlines |\n| `{spacing.edge-inner}` | clamp(60px, 8vw, 160px) | Tighter inset used for manifesto-style centered statements |\n| `{spacing.pad-top}` | clamp(76px, 8vh, 130px) | Top padding inside index/data/table frame, below the top hairline |\n| `{spacing.pad-bottom}` | clamp(100px, 10vh, 150px) | Bottom padding inside index/data/table frame, above the bottom hairline |\n| `{spacing.gap-lg}` | clamp(28px, 3vw, 56px) | Large gap between major regions inside a slide |\n| `{spacing.gap-md}` | clamp(20px, 2.2vh, 36px) | Standard inter-element spacing |\n| `{spacing.gap-sm}` | clamp(14px, 1.6vh, 24px) | Tight spacing — chrome bar inner gap, attribution-to-quote gap |\n| `{spacing.gap-xs}` | clamp(10px, 1.2vh, 18px) | Vertical-stack row gap, smallest inter-element gap |\n\n### Universal Chrome Frame\nEvery slide carries a four-piece chrome frame:\n1. **Top hairline** — 1.5px solid cobalt at ≈2.6vh from top, inset by `{spacing.edge}` left/right.\n2. **Bottom hairline** — 1.5px solid cobalt at ≈2vh from bottom, inset by `{spacing.edge}` left/right.\n3. **Page number** — DM Mono cobalt anchored bottom-right, ≈4.8vh from bottom (above the bottom hairline).\n4. **Nav hint** — DM Mono cobalt at 40% opacity anchored bottom-left, same vertical level as page number.\n\nThis frame is rendered automatically by the `.hairlines` and `.pagenum` / `.nav-hint` rules — every new slide inherits it.\n\nA nested **`.frame` content rectangle** sits inside the chrome on index, data, table, and chapter layouts. It is absolutely positioned with `inset: {spacing.pad-top} {spacing.edge} {spacing.pad-bottom}` and serves as the actual content container.\n\n### Composition Patterns\nWithin the chrome frame, content typically follows one of these compositional moves (not enumerated as available layouts — these are descriptive, not prescriptive):\n- A `topbar` block (Newsreader headline left, mono lab-tag right, 1.5px cobalt rule beneath) above a main content region.\n- A pixel-glitch column anchored to the right edge of the content region (or occasionally the left, as on the colophon).\n- A QR-block patch as a small punctuation mark (typically top-right corner).\n- A vertical-stack mono label column anchored to one edge.\n- A dense ledger or index of equal-flex rows separated by faint cobalt dividers.\n\n## Depth and Elevation\n\n### Flat With Structural Rules\nCobalt Grid has no drop shadows, no elevated cards, no rounded surfaces, no gradients. Every element sits on a single plane.\n\nDepth signals are entirely structural:\n- **1.5px cobalt rules** — top/bottom slide hairlines, topbar rule, attribution rule.\n- **1px faint cobalt dividers** — row separators inside index lists, tables, and ledgers.\n- **Graph-paper grid** — the 10%-opacity cobalt background creates a sense of measured plane.\n- **Pixel-glitch decoration** — vertical scanline columns add visual texture without z-axis elevation.\n- **QR-block patches** — read as discrete graphic objects against the grid+glitch background due to their paper-fill and 1.5px paper-color outset shadow (which is functionally an \"anti-shadow\" — it pushes the grid away so the QR mosaic stays readable).\n\nThe QR-block's 1.5px paper-color outset is the *only* shadow-like effect in the system, and it exists to preserve readability against the pixel-glitch column, not to create elevation. There is no z-axis depth.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 0 | Every structural element — frames, cards, ledger rows, QR cells, pixel-glitch rectangles, charts, tables |\n| 50% (circle) | None — Cobalt Grid has no circular elements |\n\nThe system uses **zero rounded corners**. Every shape is a strict rectangle. This is unusual for editorial systems and is part of the trend-report identity.\n\n### Border Weights\n- **1.5px solid `{colors.ink}`** — primary structural rules: top/bottom slide hairlines, topbar bottom rule, table head row bottom border, chart baseline rule.\n- **1px solid `{colors.ink}`** — attribution rules above quote bylines, manifesto attribution top border.\n- **1px solid `{colors.ink-faint}`** (18% opacity) — faint row dividers between dense list / table / ledger entries.\n- **1px solid `{colors.grid}`** (10% opacity) — the permanent graph-paper grid behind every slide.\n- **1.5px box-shadow in `{colors.paper}`** — QR-block readability outset (functional, not decorative).\n\nAll structural borders are cobalt. Colored borders do not exist (there is no \"colored\" — only cobalt at different opacities).\n\n### Decorative Element Types\n\n**Pixel-glitch column** — A stair-stepped vertical column rendered as inline SVG. Each step is a rectangle filled with evenly-spaced cobalt vertical scanlines on cream. Steps decrease in width as the column descends (or vice versa), creating a \"glitch\" pixelation effect. Anchored to one edge of a slide (typically right), absolutely positioned, z-index 3, pointer-events disabled. Decorative only — sizes range from compact 16vw × full-height secondary use to 32vw × full-height signature cover decoration. Opacity 0.6–1.0 depending on context (lower opacity when used as background, full opacity when used as primary decoration).\n\n**QR-block patch** — An 8×8 grid of cells (some `.on` = solid cobalt, some default = paper) forming a QR-code-like mosaic. Sits over a paper-fill background with 4px internal padding and 1.5px paper-color outset (which preserves readability when overlapping the pixel-glitch column). Typical size 58–100px square. Used as compositional punctuation — typically top-right corner.\n\n**Vertical-stack label column** — A column of DM Mono labels written with `writing-mode: vertical-rl` and `text-orientation: mixed`, rotating Latin text 90° clockwise. Anchored to right edge, vertically centered, evenly spaced. Reads as catalogue-style metadata stacked along the slide edge.\n\n**Topbar (with rule)** — A flex row containing a Newsreader headline left and a small mono lab-tag right, separated from the content below by a 1.5px solid cobalt bottom border. The universal section-header pattern.\n\n**Frame** — An absolutely-positioned content container with `inset: {spacing.pad-top} {spacing.edge} {spacing.pad-bottom}`. Holds the slide's actual content while keeping it clear of the hairline frame, page number, and nav hint.\n\n**Index list** — A 2×3 grid of equal-flex rows, each row a 56px num-tag column + a content column with a Newsreader row-headline and a Hanken body paragraph, separated by 1px faint-cobalt bottom borders.\n\n**Pixel-stack bar chart** — A row of 8 vertical \"stacks,\" each a flex column-reverse of small horizontal cells (default 10%-cobalt off, .on solid cobalt). Cell counts represent values. A 1.5px cobalt top border with mono tick labels sits beneath the bars as the axis. Renders data as pixelated bars made of grid units — directly echoes the pixel-glitch decoration.\n\n**Ledger table** — A flex column of dense rows, each row a 5-column grid (76px num-tag / 0.6fr name / 1.4fr description / 0.7fr mood-tag / 0.5fr delta-tag), separated by 1px faint-cobalt bottom borders. Header row uses 1.5px solid cobalt. Delta tags use `↑` / `↓` / `—` prefixes via `::before`.\n\n**Manifesto** — A centered statement in `{typography.display-manifesto}` Newsreader with an italic `<em>` body containing inline `.roman` (non-italic) emphasis moments. Below: a 1px cobalt top border with a Hanken who-tag and a mono meta-tag side-by-side.\n\n**Quote** — A Hanken kicker above a `{typography.display-quote}` Newsreader pull, with a 1px cobalt top-border attribution row beneath. Paired with a compact pixel-glitch column at the right edge.\n\n**Colophon** — Right-aligned closing layout. A large `{typography.display-closing}` Newsreader title aligned right with a kicker above. Pixel-glitch column anchored to left edge (mirroring the cover). Page footer with 3–4 column grid of paragraph credits.\n\n## Do's and Don'ts\n\n### Do\n- Set every Newsreader element at weight 400 in `{colors.ink}`. The thin roman serif at modest weight is the literary register's identity.\n- Render every label, kicker, and micro-text in Hanken Grotesk weight 600 uppercase with 0.16em+ letter-spacing in `{colors.ink}`.\n- Render every chrome element (page number, mono tag, tick label, vertical-stack) in DM Mono with 0.04–0.08em tracking in `{colors.ink}`.\n- Keep the permanent graph-paper grid behind every slide. The grid is the system — disabling it breaks the identity.\n- Maintain the top and bottom 1.5px cobalt hairlines on every slide, with the page number and nav hint sitting above the bottom hairline.\n- Use the pixel-glitch column as the system's primary decorative move on declarative slides (cover, chapter, quote, colophon).\n- Pair pixel-glitch with a QR-block patch when the composition needs a discrete graphic anchor — the QR's paper-fill keeps it readable against the glitch lines.\n- Use the `topbar + 1.5px cobalt rule` pattern as the standard section-header treatment on index, data, and table layouts.\n- Use 1px faint-cobalt dividers between rows of dense lists, tables, and ledgers.\n- Render charts as pixel-stack columns of grid cells (cobalt on / cobalt-10% off). The pixel-stack bar treatment echoes the decorative glitch and unifies the visual language.\n\n### Don't\n- Don't introduce a second ink color. The system is strictly two-color: cream paper + cobalt ink. A second hue breaks the risograph identity.\n- Don't render a Newsreader headline at weight 600 or 700. The 400-only rule is a signature.\n- Don't disable or hide the graph-paper grid. It is the canvas tone, not optional decoration.\n- Don't suppress the top/bottom hairlines on a slide. They are the frame — every slide carries them.\n- Don't round any corner. Every shape is a strict rectangle; the system has zero circular elements.\n- Don't add drop shadows, elevated cards, or gradient fills. Depth is structural (rules + grid + glitch), not z-axis.\n- Don't use Hanken caps without 0.16em+ tracking. Untracked Hanken caps read as untreated.\n- Don't put the page number directly on the bottom hairline. It sits at `bottom: clamp(48px, 4.8vh, 76px)` with clear space above the hairline.\n- Don't render the QR-block without its paper-fill and 1.5px paper outset. The fill is what preserves QR readability against the pixel-glitch column.\n- Don't crowd the manifesto, quote, or colophon layouts. Those layouts deliberately leave grid showing — over-stuffing them breaks the contemplative register.\n\n## Responsive Behavior\n\nCobalt Grid is a viewport-fluid 1920×1080 presentation system using `clamp()` and viewport-relative units throughout. There are no explicit responsive breakpoints in the source — every dimension scales between a min and max.\n\n### Scaling Behavior\n- Display-hero scales from ~100px at minimum viewport to ~200px at maximum.\n- Body text scales from 14px to 15px (deliberately narrow range — body stays compact).\n- Graph-paper grid scales from 28px cells (smaller viewports) to 44px cells (larger viewports), maintaining roughly 50–80 cells across the slide width.\n- Edge insets scale from 36px to 80px.\n- The 1.5px hairlines and 1px row dividers are fixed and do not scale.\n\n### Presenter Behavior\n- Slides cross-fade via 280ms opacity transitions.\n- Navigation is JS-driven (the source includes a `.deck` / `.slide.active` pattern); typical keyboard arrow / spacebar conventions apply.\n- The nav hint at bottom-left displays interaction guidance in mono cobalt at 40% opacity.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080. The grid and hairline overlays should render correctly in PDF capture (no blend modes or filters).\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Newsreader 400) | Newsreader | 思源宋体 Noto Serif SC 700 | Google Fonts |\n| Body / Label (Hanken Grotesk 400–600) | Hanken Grotesk | 思源宋体 Noto Serif SC 400 | Google Fonts |\n| Chrome / Mono (DM Mono) | DM Mono | DM Mono (Latin/digit only — keep mono chrome in Latin) | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin font in the same `font-family` stack so Latin glyphs render in Newsreader / Hanken Grotesk and CJK glyphs fall through to NSC automatically. Mono chrome stays Latin/digit-only — page numbers, ticks, and vertical-stack tags do not need a CJK fallback (and DM Mono has no CJK glyphs by design).\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,400..500;1,6..72,400..500&family=Hanken+Grotesk:wght@400..700&family=DM+Mono:wght@400..500&family=Noto+Serif+SC:wght@400;700&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Newsreader\", \"Noto Serif SC\", Georgia, serif;\n  --font-body: \"Hanken Grotesk\", \"Noto Serif SC\", sans-serif;\n  --font-mono: \"DM Mono\", ui-monospace, monospace;\n}\n/* Headlines use Noto Serif SC 700; body uses Noto Serif SC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.7 (from 1.5) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 0.16em+ Hanken caps tracking shatters Hanzi cadence). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any micro/label/kicker when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nNoto Serif SC (思源宋体) is the natural Hanzi partner for Newsreader — both are quiet literary serifs with thin-thick modulation that holds at very large display sizes (up to 18vh / 240px on the vbig-numeral). The cobalt-on-cream two-color rule absorbs Chinese without negotiation because there's only one ink color to assign. NSC 700 carries display moments where Newsreader 400 would have at 100–200px; NSC 400 carries body and labels. The DM Mono chrome layer (page numbers, vertical-stack tags, ticks) intentionally stays Latin/digit-only — `编号 001` is rendered as Latin \"001\" in DM Mono with the Hanzi prefix in Hanken/NSC, preserving the mono catalogue chrome's \"technical spec\" voice. The graph-paper grid, pixel-glitch column, and QR-block decoration are content-agnostic and read identically in any language. Vertical-stack labels written with `writing-mode: vertical-rl` work for Hanzi too — Chinese is the original vertical script — but mixing Latin and Hanzi in the same vertical run will rotate the Hanzi to upright while keeping Latin rotated 90°; isolate runs by language.\n\n### Known CJK Gap\n\nNoto Serif SC has no italic axis (Chinese type historically has no italic), so the manifesto layout's italic-Newsreader-with-`.roman`-flip emphasis pattern collapses when content is Hanzi. Substitute a weight contrast (NSC 700 vs NSC 400) or a faint-cobalt tone (`{colors.ink-faint}`) to recover the emphasis register. Newsreader's optical-size axis (6..72) has no NSC equivalent — the literary \"this is a small caption\" optical refinement is unavailable for Hanzi, but at NSC's quality this is rarely noticeable.\n\n## Iteration Guide\n\n1. Every new slide inherits the permanent graph-paper grid, the top and bottom 1.5px cobalt hairlines, the page number bottom-right, and the nav hint bottom-left. Don't author these per-slide — they live on `.stage` and `.hairlines`.\n2. Every new headline uses Newsreader at weight 400 in `{colors.ink}`. Don't bold; don't color.\n3. Every new label uses Hanken Grotesk weight 600 uppercase with 0.16em+ letter-spacing in `{colors.ink}`.\n4. Every new chrome element uses DM Mono in `{colors.ink}` with 0.04–0.08em tracking.\n5. New content slides on index / data / table layouts use a topbar (Newsreader headline left + Hanken lab-tag right) with a 1.5px cobalt bottom rule.\n6. New chart slides use the pixel-stack treatment — cobalt on / cobalt-10% off cells in column-reverse stacks. Don't introduce filled bar charts in a single solid block.\n7. New declarative slides (cover, chapter, quote, colophon) use a pixel-glitch column as the primary decoration. Pair with a QR-block when the composition needs a discrete graphic anchor.\n8. New row dividers in dense lists use 1px solid `{colors.ink-faint}` (18% opacity), not full-strength cobalt. Full-strength cobalt is reserved for major structural rules.\n9. New components inherit the zero-radius, no-shadow, no-gradient flatness. If a component breaks any of these, redesign it before adding.\n10. The system has one ink color (`{colors.ink}`) and one surface (`{colors.paper}`). New compositions should never introduce a third color or a third surface tone (paper-2 is available but rarely needed).\n\n## Known Gaps\n\n- The pixel-glitch column is rendered as inline SVG hand-authored per usage; there is no generative component — adjusting the stair-step pattern requires editing the SVG markup directly.\n- The QR-block 8×8 cell pattern is hand-authored per usage; each instance places `.on` cells manually. There is no QR-code generation logic.\n- The pixel-stack bar chart cell counts are hardcoded in markup; there is no data-binding layer translating numeric values to cell-on counts.\n- The vertical-stack label column uses `writing-mode: vertical-rl`; this works in modern browsers but rendering of mixed Latin/CJK in this orientation may vary across rendering engines.\n- The manifesto layout's italic-with-`.roman`-flip pattern (italic Newsreader body containing inline non-italic `.roman` spans for emphasis) is the inverse of typical italic emphasis — the rule lives in the manifesto-specific CSS and is not generalized.\n- The 1.5px paper-color outset on the QR-block is a `box-shadow` used as an anti-shadow (it extends the paper fill outward to clear the grid behind the QR cells). This is the only `box-shadow` in the system and it should not be repurposed for elevation.\n- The colophon's pixel-glitch column anchors to the left edge (mirroring the cover); other slides anchor to the right edge — the directionality is per-slide and should be considered when authoring new declarative layouts.\n- The graph-paper grid cell size scales between 28–44px via `clamp` — at extreme aspect ratios, the grid count across the slide width may feel uneven.\n- The system loads three Google Fonts families (Newsreader, Hanken Grotesk, DM Mono) with multiple weights — initial render requires successful font load to avoid Georgia/Helvetica fallback shifting the visual rhythm.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/preview.md":"# Cobalt Grid Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/cobalt-grid/design.md`\n- Preview card: `bold-template-pack/templates/cobalt-grid/preview.md`\n\n## Selection Metadata\n\n- Slug: `cobalt-grid`\n- Tagline: Electric cobalt serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules.\n- Mood: editorial, design-research, studious, modernist, tech-print, monochrome\n- Tone: considered, literary, studious, quietly-modern, editorial\n- Formality: high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report. Strong for studio annuals, agency capabilities decks, design-research publications, architecture / art / academic decks, and any deck wanting one strict accent colour and a printed-ledger calmness rather than corporate polish.\n- Avoid for: Decks that need warmth, multi-colour energy, or a casual / playful voice — the strict cobalt + cream + grid palette is intentionally austere.\n\n## Visual Snapshot\n\nA Japanese-magazine trend-report system built on warm cream paper, electric cobalt ink, and a graph-paper grid that lives permanently behind every slide. Newsreader serif headlines tower at 18vh while DM Mono carries chrome and ticker text. The signature decoration is a pixel-glitch column — vertical scanlines stair-stepped down the right edge of declarative slides — paired with QR-style 8×8 grid patches. The cultural reference is WIRED Japan, Shift magazine, and architectural trend reports printed in two-color risograph: cream + one cobalt.\n\nCobalt Grid is a two-color trend-report editorial system built on three immovable foundations: a warm cream paper canvas ({colors.paper}), an electric cobalt ink ({colors.ink}), and a permanent graph-paper grid that sits behind every slide. The grid is not optional decoration — it is rendered via a ::before pseudo on every .stage and cannot be turned off. The aesthetic is \"two-color risograph monograph\": cream + cobalt only, with the grid lending the entire deck the feel of architectural tracing paper or a Japanese trend report.\n\n## Preview Ingredients\n\n- Palette: paper #F0EBDE; paper-2 #E6E0CE; ink #1F2BE0; ink-soft #5560E5\n- Typography: Newsreader; Hanken Grotesk; DM Mono\n- Signature move: The 1.5px cobalt hairline frame (top and bottom of every slide).\n- Signature move: 1.5px cobalt topbar rule under section headers.\n- Signature move: 1px faint-cobalt row dividers between table or index entries.\n- Signature move: The 10%-opacity graph paper grid behind everything.\n- Signature move: The pixel-glitch and QR-block decorative SVG patches as compositional accents.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/design.md":"---\nversion: alpha\nname: Coral\ndescription: \"A bold magazine-poster system that runs on three surface registers — coral fire, ink black, and warm cream — animated by Bebas Neue display caps and a constant 45° diagonal hatch pattern. Inter handles body copy; Bebas Neue handles every headline, stat, title, and meta-figure at heavy letter-spacing. The cultural reference is mid-century travel posters, Saul Bass film titles, and modern editorial sport magazines: solid color planes meeting at hard edges, oversized condensed caps as architectural elements, and a single coral hue used both as accent and as full-slide environment.\"\n\ncolors:\n  coral: \"#E85D5D\"\n  coral-dark: \"#D44A4A\"\n  cream: \"#F5F0E8\"\n  cream-dark: \"#E8E0D4\"\n  black: \"#1A1A1A\"\n  gray: \"#6B6B6B\"\n  light-gray: \"#B0B0B0\"\n  white: \"#FFFFFF\"\n\ncolor-aliases:\n  bg: cream\n  ink: black\n\ntypography:\n  hero-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(120px, 9vw, 13vh)\"\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 4px\n  jumbo-feature:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(80px, 15vw, 200px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 12px\n  display-statement:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(42px, 7vw, 100px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  section-headline:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(40px, 6vw, 80px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  column-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(36px, 5vw, 72px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  stat-numeral:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(48px, 7vw, 96px)\"\n    fontWeight: 400\n    lineHeight: 1\n  card-stat:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(36px, 4vw, 56px)\"\n    fontWeight: 400\n    lineHeight: 1\n  sidebar-value:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(28px, 3vw, 48px)\"\n    fontWeight: 400\n    lineHeight: 1\n  card-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(24px, 2.5vw, 36px)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 1px\n  bar-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(28px, 4vw, 56px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  meta-figure:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(44px, 3.5vw, 5.5vh)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  meta-date:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(38px, 3vw, 4.8vh)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  background-numeral:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(100px, 15vw, 200px)\"\n    fontWeight: 400\n    lineHeight: 1\n    description: \"Decorative oversized numeral placed inside a coral region at rgba(0,0,0,0.12) — wallpaper opacity. Sits behind the actual column title at full opacity.\"\n  giant-mark:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(140px, 20vw, 280px)\"\n    fontWeight: 400\n    lineHeight: 1\n    description: \"Oversized quote mark or single character placed inside a coral region at opacity 0.35 — half-decorative, half-content.\"\n  body:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(15px, 1.4vw, 20px)\"\n    fontWeight: 400\n    lineHeight: 1.7\n  body-sm:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(13px, 1.1vw, 16px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-light:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(20px, 2.5vw, 36px)\"\n    fontWeight: 300\n    lineHeight: 1.5\n    description: \"Lighter-weight Inter for pull quotes — weight 300 to contrast against the Bebas Neue dominant voice.\"\n  item-text:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(14px, 1.2vw, 18px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  card-text:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(13px, 1.1vw, 16px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  bar-meta:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 2px\n    textTransform: uppercase\n  section-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 4px\n    textTransform: uppercase\n  item-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"11px\"\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  meta-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"11px\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  sidebar-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 1px\n  quote-attribution:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"14px\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  quote-role:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 1px\n\nspacing:\n  pad-y: \"clamp(40px, 6vh, 80px)\"\n  pad-x: \"clamp(40px, 8vw, 100px)\"\n  pad-y-tight: \"clamp(28px, 4.5vh, 60px)\"\n  pad-col: \"clamp(32px, 4vw, 60px)\"\n  gap-grid: \"32px\"\n  gap-md: \"40px\"\n  card-pad: \"clamp(24px, 3vh, 40px)\"\n  bar-pad: \"clamp(24px, 4vh, 40px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  diagonal-hatch:\n    background: \"repeating-linear-gradient(45deg, transparent, transparent 20px, rgba(0,0,0,0.06) 20px, rgba(0,0,0,0.06) 40px)\"\n    description: \"Signature 45° diagonal hatch pattern in 6%-opacity black. Applied as a pseudo-element overlay on coral regions to provide texture without changing the surface color. Variant: -45° hatch on coral quote-left, with 30/60px stride. Variant: 90° vertical hatch in 10%-opacity black on coral gradient regions, with 60/62px stride. The hatch is a per-region atmospheric treatment, not a slide-level overlay.\"\n  accent-line:\n    width: \"80px\"\n    height: \"4px\"\n    background: \"{colors.coral}\"\n    description: \"Solid 80×4 coral rectangle used as a sub-headline accent rule. Closing or section-divider variant uses 60×4.\"\n  quote-accent:\n    width: \"60px\"\n    height: \"4px\"\n    background: \"{colors.coral}\"\n    description: \"60×4 coral rectangle placed above a quote attribution as a terminal accent.\"\n  title-rule:\n    width: \"100%\"\n    height: \"3px\"\n    background: \"{colors.black}\"\n    opacity: 0.15\n    description: \"Full-width 3px ink rule at 15% opacity used as a subtle horizontal divider beneath the hero title on the cover composition.\"\n  card:\n    background: \"{colors.white}\"\n    padding: \"{spacing.card-pad}\"\n    borderTop: \"5px solid {colors.coral}\"\n    description: \"Column card — white surface with a 5px solid coral top border as the only border on the element. No shadow, no radius.\"\n  sidebar-item:\n    background: \"{colors.white}\"\n    padding: \"20px 24px\"\n    borderLeft: \"4px solid {colors.coral}\"\n    description: \"Compact data tile — white surface with a 4px solid coral left border. Holds a Bebas value and an Inter label.\"\n  card-icon:\n    width: \"48px\"\n    height: \"48px\"\n    background: \"{colors.coral}\"\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"24px\"\n    color: \"{colors.white}\"\n    description: \"48px solid coral square (no radius) containing a 1-character Bebas Neue glyph in white. Used as a card mark.\"\n  timeline-line:\n    height: \"4px\"\n    background: \"{colors.black}\"\n    description: \"Horizontal 4px solid ink line spanning the timeline width. A ::after pseudo overlays a repeating linear-gradient (20px ink + 10px transparent) to create a dashed effect. The dashed pattern is rendered through the gradient, not the border-style.\"\n  t-point-dot:\n    width: \"20px\"\n    height: \"20px\"\n    borderRadius: \"50%\"\n    background: \"{colors.coral}\"\n    border: \"4px solid {colors.cream}\"\n    description: \"Timeline node — 20px coral circle with a 4px cream halo, sitting on the timeline-line.\"\n  nav-dot:\n    width: \"10px\"\n    height: \"10px\"\n    borderRadius: \"50%\"\n    background: \"rgba(255, 255, 255, 0.3)\"\n    border: \"2px solid rgba(255, 255, 255, 0.5)\"\n    description: \"Small 10px nav indicator. White-translucent default on dark/coral surfaces; ink-translucent .dark variant on cream surfaces. Active state fills with coral.\"\n  nav-arrow:\n    width: \"44px\"\n    height: \"44px\"\n    borderRadius: \"50%\"\n    background: \"rgba(255, 255, 255, 0.1)\"\n    border: \"2px solid rgba(255, 255, 255, 0.3)\"\n    description: \"44px circular nav button with translucent fill and 2px translucent border. .dark variant for cream surfaces. Hover state fills with coral.\"\n  zigzag-layer:\n    description: \"SVG zigzag pattern overlay used decoratively on the cover's coral top-section. Renders as a thin black zigzag line at low opacity behind the title.\"\n  pattern-overlay:\n    description: \"Decorative repeating-pattern overlay applied to feature regions — typically 90° vertical hatch in ink at 10% opacity on coral gradient backgrounds. Separate from the 45° diagonal-hatch which is the system's primary texture.\"\n  bar-fill:\n    description: \"Chart.js horizontal bar fills use solid coral (#E85D5D) as the primary series color, with a darker coral (#D44A4A) for comparison or secondary series.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCoral is a **bold magazine-poster system** built on three surface registers — coral fire, ink black, and warm cream — that meet at hard edges. The defining structural premise is **solid color planes**: a single slide will split into a coral half + a cream half + an ink top-section, with each region a flat solid color holding its own self-contained composition. There are no gradient transitions between regions; the meeting point of two colors is the layout. This is the populist counterpart to a more refined editorial system — closer to a sports magazine cover than a literary catalogue.\n\nThe typeface stack is a **two-face hierarchy**. **Bebas Neue** — a tall narrow condensed sans display face — carries every headline, every stat, every column title, every meta figure, every section name. Bebas runs at its single available weight (400) and is treated as architectural — heavy letter-spacing (2–12px), oversized scale (up to 200px on jumbo features), and always set in its native uppercase. **Inter** — a contemporary humanist sans — carries every body paragraph, every label, every micro-text, every attribution. Inter spans weights 300 to 700: 300 for pull-quote bodies, 400 for paragraph body, 600 for meta labels, 700 for section eyebrows. The Bebas/Inter pair creates the system's voice: Bebas declares, Inter explains.\n\nThe palette is **three surfaces + ink + neutrals**. The coral `{colors.coral}` is both *the* accent (a 4px left border on a sidebar tile, a 5px top border on a card, a 48px solid icon square) and an entire slide environment (a full coral panel, the cover's top-section, a coral gradient feature region). The cream `{colors.cream}` is the warm canvas — the magazine paper. Ink `{colors.black}` is the strongest surface, used as full-slide background on quote and statement layouts. White appears only as card fills against coral or cream regions. Two grays (`{colors.gray}`, `{colors.light-gray}`) carry body and meta text.\n\nDepth is **flat with hard color edges**. There are no drop shadows, no rounded surfaces, no soft elevations. Hierarchy comes from:\n- **Solid color region splits** — coral / ink / cream regions meeting at hard edges.\n- **Accent borders** — 4px coral left, 5px coral top, 3px ink top, 4px ink horizontal.\n- **45° diagonal hatch** — a signature 6%-opacity black diagonal repeating pattern overlaid on coral regions, providing texture.\n- **Oversized decorative typography** — background numerals at 12% opacity, giant quote marks at 35% opacity, sitting behind or beside primary content.\n\n**Density philosophy: medium-high, structured by region.** Coral slides are structured rather than dense — each color region holds a self-contained composition (a single column title with one body block, a single stat tile with one label, a single timeline line with five dots). The aesthetic relies on regions feeling fully populated within their boundary, not on the slide overall being crowded. A correctly composed slide pairs 2–3 substantive regions, each fully expressed. A slide that feels broken is one where a coral region holds only a sparse fragment, or where a cream region attempts to carry too many competing elements. Decorative oversized numerals at 12% opacity behind a region's primary title are the standard \"fill the region\" move when content alone doesn't fully occupy the plane.\n\n**Key Characteristics:**\n- Three-surface system: `{colors.coral}` (fire), `{colors.black}` (ink), `{colors.cream}` (paper) — used as solid regions meeting at hard edges.\n- Bebas Neue uppercase condensed display for every headline/stat/title; Inter sans for every body/label/attribution.\n- 45° diagonal hatch in 6%-opacity black on coral regions as the signature atmospheric texture.\n- Coral as both accent (4–5px borders, 48px icon squares, 4-point timeline dots) and environment (full-region surfaces).\n- Decorative oversized numerals at 12% opacity behind column titles inside coral regions.\n- Oversized quote marks at 35% opacity inside coral regions as half-decorative content.\n- No rounded corners on rectangles; circular shapes only for nav dots, nav arrows, and timeline nodes.\n- Heavy letter-spacing on every Bebas element: 1–4px on most, 12px on the largest feature treatment.\n- Hard-edge color splits (vertical, horizontal, or 40/60 ratios) define slide composition.\n\n## Colors\n\n### Three-Surface System\n- **Coral** (`{colors.coral}` — #E85D5D): The signature color — a warm orange-red, vivid but not neon. Used both as accent (4px sidebar-item left border, 5px card top border, 48px card-icon fill, 80×4 accent line, 60×4 quote accent, timeline-point dot, chart primary series, hover-state fills, section eyebrows, stat-numerals on cream surfaces) and as a full-region surface (cover top-section, two-column left panel, full-width feature region, quote left panel). Defines the system.\n- **Coral Dark** (`{colors.coral-dark}` — #D44A4A): A darker coral variant. Used as the start stop in linear-gradient feature regions (135° from coral-dark to coral), and as the chart secondary/comparison series color.\n- **Cream** (`{colors.cream}` — #F5F0E8): The warm canvas. Used as default slide background, as the cover's bottom-section, as info-bar surfaces, as body text color on ink-black surfaces, and as the timeline-point dot halo.\n- **Cream Dark** (`{colors.cream-dark}` — #E8E0D4): A slightly deeper cream. Available in the palette for subtle region differentiation but sparingly used.\n- **Black** (`{colors.black}` — #1A1A1A): Near-black ink. Used as headline color on cream surfaces, as the full-background ink register for quote and certain feature slides, as timeline-line color, as title-rule color, as decorative background-numeral color (at 12% opacity inside coral regions), and as giant-mark color (at 35% opacity inside coral regions).\n- **Gray** (`{colors.gray}` — #6B6B6B): Mid neutral. Used for body paragraph text on cream surfaces, for meta labels, for sidebar labels, for card body copy, for quote roles.\n- **Light Gray** (`{colors.light-gray}` — #B0B0B0): Pale neutral. Defined in the palette but used sparingly — available for tertiary text where gray is too strong.\n- **White** (`{colors.white}` — #FFFFFF): True white. Used as card fills (sidebar-item, card, column-card), as item-text color on ink surfaces, as nav-dot/nav-arrow translucent fills.\n\n### Defaults\n- **Default slide surface**: `{colors.cream}`. (Cover and feature slides use mixed-surface compositions; statement, quote, and three-column slides default to cream or ink.)\n- **Default headline color on cream surfaces**: `{colors.black}` — Bebas Neue headlines are ink, not coral.\n- **Default headline color on coral surfaces**: `{colors.black}` — ink-on-fire. Bebas on coral is always ink, never white.\n- **Default headline color on ink surfaces**: `{colors.cream}`.\n- **Default body text color on cream surfaces**: `{colors.gray}`.\n- **Default body text color on ink surfaces**: `{colors.cream}`.\n- **Default body text color on coral surfaces**: `{colors.black}` — ink, not white.\n- **Default eyebrow / section-label color**: `{colors.coral}` on cream and ink surfaces; `{colors.black}` on coral surfaces.\n- **Default accent border color**: `{colors.coral}` — 4px left (sidebar tiles), 5px top (cards), 48px solid (icon squares).\n- **Default decorative numeral color inside a coral region**: `rgba(0, 0, 0, 0.12)` (ink at 12% opacity).\n- **Default giant-mark color inside a coral region**: `rgba(0, 0, 0, 0.35)` (ink at 35% opacity).\n- **Default chart primary series color**: `{colors.coral}`.\n- **Default chart comparison series color**: `{colors.coral-dark}`.\n\nThe three surfaces are intermixed by composition: a slide may be split coral/cream, coral/ink, ink/cream, or held to a single surface. There is no semantic mapping between surfaces; each is chosen for compositional balance and contrast.\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face hierarchy**: `Bebas Neue` (display, single weight 400) carries every headline, stat numeral, column title, meta figure, bar title, card stat, sidebar value, and decorative numeral; `Inter` (sans, weights 300 / 400 / 600 / 700) carries every body paragraph, label, eyebrow, meta-label, attribution, role, and chart legend. There is no third face.\n\nBebas Neue is a tall narrow condensed sans display face — its narrow letterforms allow large sizes without overwhelming the slide width, and its single available weight (400) is treated as the system's only weight. Bebas is always set in its native uppercase. The display character of the system comes from heavy letter-spacing (1–4px on standard headlines, 12px on the largest jumbo feature treatment) and oversized scale (up to 200–280px on jumbo / giant-mark moments).\n\nInter carries the supporting voice with weight contrast: 300 for pull-quote bodies (a lighter register against Bebas's dominance), 400 for body paragraphs, 600 for meta labels, 700 for section eyebrows. Italic and underline are not used.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.giant-mark}` | clamp(140px, 20vw, 280px) | Bebas Neue | 400 | Oversized decorative quote mark or feature character inside a coral region |\n| `{typography.jumbo-feature}` | clamp(80px, 15vw, 200px) | Bebas Neue | 400 | Single dominant word filling a feature region |\n| `{typography.background-numeral}` | clamp(100px, 15vw, 200px) | Bebas Neue | 400 | Decorative wallpaper numeral inside a coral region at 12% opacity |\n| `{typography.hero-title}` | min(120px, 9vw, 13vh) | Bebas Neue | 400 | Largest cover title — 3-line title cap-and-line-broken |\n| `{typography.display-statement}` | clamp(42px, 7vw, 100px) | Bebas Neue | 400 | Big declarative statement on a cream surface |\n| `{typography.stat-numeral}` | clamp(48px, 7vw, 96px) | Bebas Neue | 400 | Hero stat figure |\n| `{typography.section-headline}` | clamp(40px, 6vw, 80px) | Bebas Neue | 400 | Primary section headline |\n| `{typography.column-title}` | clamp(36px, 5vw, 72px) | Bebas Neue | 400 | Column or panel title inside a region |\n| `{typography.card-stat}` | clamp(36px, 4vw, 56px) | Bebas Neue | 400 | Per-card stat figure |\n| `{typography.bar-title}` | clamp(28px, 4vw, 56px) | Bebas Neue | 400 | Info-bar title |\n| `{typography.sidebar-value}` | clamp(28px, 3vw, 48px) | Bebas Neue | 400 | Sidebar tile value |\n| `{typography.card-title}` | clamp(24px, 2.5vw, 36px) | Bebas Neue | 400 | Card or column-card title |\n| `{typography.meta-figure}` | min(44px, 3.5vw, 5.5vh) | Bebas Neue | 400 | Cover meta value (location, date, brand) |\n| `{typography.meta-date}` | min(38px, 3vw, 4.8vh) | Bebas Neue | 400 | Cover date variant |\n| `{typography.body-light}` | clamp(20px, 2.5vw, 36px) | Inter | 300 | Pull-quote body (lighter weight against Bebas dominance) |\n| `{typography.body}` | clamp(15px, 1.4vw, 20px) | Inter | 400 | Standard paragraph body |\n| `{typography.item-text}` | clamp(14px, 1.2vw, 18px) | Inter | 400 | Item body on ink surfaces |\n| `{typography.card-text}` | clamp(13px, 1.1vw, 16px) | Inter | 400 | Card body copy |\n| `{typography.body-sm}` | clamp(13px, 1.1vw, 16px) | Inter | 400 | Compact body |\n| `{typography.section-label}` | 12px | Inter | 700 | Section eyebrow above a headline, 4px letter-spacing |\n| `{typography.item-label}` | 11px | Inter | 700 | Item eyebrow in a list, 3px letter-spacing |\n| `{typography.meta-label}` | 11px | Inter | 600 | Cover meta label, 3px letter-spacing |\n| `{typography.quote-attribution}` | 14px | Inter | 600 | Author name below a pull quote, 3px letter-spacing |\n| `{typography.bar-meta}` | 12px | Inter | 400 | Info-bar meta-text, 2px letter-spacing |\n| `{typography.sidebar-label}` | 12px | Inter | 400 | Sidebar tile label, 1px letter-spacing |\n| `{typography.quote-role}` | 12px | Inter | 400 | Author role below quote attribution, 1px letter-spacing |\n\n### Defaults\n- **Default size for the primary section headline**: `{typography.section-headline}` (clamp 40–80px).\n- **Default size for a cover/hero title**: `{typography.hero-title}` (min(120px, 9vw, 13vh)).\n- **Default size for a feature dominant word**: `{typography.jumbo-feature}` (clamp 80–200px) with 12px letter-spacing.\n- **Default size for paragraph body**: `{typography.body}` (clamp 15–20px).\n- **Default size for any uppercase eyebrow / label**: `{typography.section-label}` (12px) at weight 700 with 4px letter-spacing; or `{typography.item-label}` (11px) at weight 700 with 3px letter-spacing for in-list contexts.\n- **Default weight for any Bebas Neue element**: 400 (the only available weight).\n- **Default weight for body**: 400; for pull quotes, 300.\n- **Default weight for labels**: 600 or 700.\n- **Default size for a hero stat figure**: `{typography.stat-numeral}` (clamp 48–96px).\n- **Default size for an in-card stat figure**: `{typography.card-stat}` (clamp 36–56px).\n\nWhen unsure, reach for `{typography.section-headline}` for the slide's primary text moment.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Bebas Neue element is set in its native uppercase.** Bebas Neue in sentence case does not exist — the typeface itself doesn't support it. This is the system's most foundational typographic rule.\n- **Every Bebas Neue element carries letter-spacing of at least 1px.** Standard headlines at 2px, hero-title at 4px, jumbo-feature at 12px. Untracked Bebas reads as untreated.\n- **Every Inter label, eyebrow, and meta-text is uppercase with 1–4px letter-spacing.** Section labels at 4px, item labels at 3px, bar-meta at 2px, sidebar-labels at 1px. Inter caps without tracking break the editorial register.\n- **Every Bebas headline is rendered in `{colors.black}`, `{colors.cream}`, or `{colors.coral}`** based on surface contrast — never gray. Color choice: ink on cream/coral, cream on ink, coral on cream when emphasis is needed.\n- **Every section eyebrow is rendered in `{colors.coral}`** when sitting on cream or ink, or in `{colors.black}` when sitting on coral. Coral-on-coral does not exist.\n- **Every decorative oversized numeral inside a coral region is rendered at `rgba(0, 0, 0, 0.12)`** — the wallpaper-numeral signature. Sits behind primary content at full opacity.\n- **Every giant decorative mark (quote, single character) inside a coral region is rendered at `rgba(0, 0, 0, 0.35)`** — half-decorative, half-content.\n- **Pull-quote bodies use Inter weight 300, not Bebas.** This is the system's primary \"voice break\" — when content needs to feel personal rather than declarative, Inter Light takes over.\n\n### Typography Principles\nThe Bebas-uppercase-tracked + Inter-mixed-weight combination is the system's voice. Switching either face — using a different display sans for headlines, or using Bebas for body — breaks the system entirely. Italic does not appear. Underline does not appear. The only emphasis mechanism is weight (Bebas dominance), case (uppercase always on Bebas + labels), color (coral on cream surfaces), and surface inversion (placing the element in a different region).\n\nLine-height is uniformly tight at the top of the scale: Bebas elements at 0.9–1.0; Inter body at 1.6–1.7. The display compression + open body is what gives the system its magazine-poster rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, visibility visible) at a time. Transitions are 0.6s opacity + visibility fades.\n\nThe system has **no universal chrome bar**. Each slide is its own self-contained composition with its own padding, region structure, and color treatment. Navigation is per-page (nav arrows + nav dots + slide counter) and floats over the active surface with `.dark` variants for cream surfaces.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-y}` | clamp(40px, 6vh, 80px) | Standard vertical slide padding |\n| `{spacing.pad-x}` | clamp(40px, 8vw, 100px) | Standard horizontal slide padding |\n| `{spacing.pad-y-tight}` | clamp(28px, 4.5vh, 60px) | Compact vertical padding (cover bottom-section) |\n| `{spacing.pad-col}` | clamp(32px, 4vw, 60px) | Column padding inside a region |\n| `{spacing.gap-grid}` | 32px | Column-grid gap |\n| `{spacing.gap-md}` | 40px | Chart container internal gap |\n| `{spacing.card-pad}` | clamp(24px, 3vh, 40px) | Card internal padding |\n| `{spacing.bar-pad}` | clamp(24px, 4vh, 40px) | Info-bar internal padding |\n\n### Region Composition\nCoral's primary layout move is **multi-surface composition**. Slides split into regions of solid color, with the boundary between regions defining the layout. Standard splits include:\n- `grid-template-rows: 32% 68%` — top accent strip + main body (cover composition).\n- `grid-template-rows: 1fr auto` — large feature region + bottom info-bar.\n- `grid-template-columns: 1fr 1fr` — equal vertical split (often coral left + ink right).\n- `grid-template-columns: 40% 60%` — narrow accent column + wider content column (quote layout).\n- Single-surface slides — cream or ink as the whole canvas (statement, three-column, timeline layouts).\n\nThe boundary between regions is always a **hard color edge** — no soft transitions, no gradients across the boundary, no rounded corners at the junction. The meeting of two solid colors is the layout structure.\n\n## Depth and Elevation\n\n### Flat With Hard Color Edges\nCoral has no drop shadows, no soft elevations, no rounded surfaces. Every element sits on a single plane.\n\nDepth signals are entirely structural:\n- **Hard color region boundaries** — the primary structural signal.\n- **Accent borders** — 5px coral top on cards, 4px coral left on sidebar tiles, 4px ink horizontal timeline-line, 3px ink at 15% opacity title-rule.\n- **45° diagonal hatch** — 6%-opacity black diagonal repeating-linear-gradient overlay on coral regions creates texture without depth.\n- **Decorative wallpaper typography** — oversized numerals at 12% opacity and giant marks at 35% opacity sit behind primary content as wallpaper, creating a layered effect without z-index trickery.\n\nIntroducing a box-shadow, an elevated card, or a soft gradient breaks the populist-poster aesthetic that defines the system.\n\n### Atmospheric Hatch Variants\nThe 45° diagonal hatch is the system's primary atmospheric treatment, but several stride/angle variants appear:\n- **45° at 20/40px stride** in 6%-opacity black — the standard coral region overlay.\n- **-45° at 30/60px stride** in 6%-opacity black — coral quote-left panel variant.\n- **90° vertical at 60/62px stride** in 10%-opacity black — coral gradient feature-region overlay.\n\nAll hatches are subtle (6–10% opacity black). They provide texture without competing with content.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 50% (circle) | Circular elements only: `nav-dot` (10px), `nav-arrow` (44px), `t-point-dot` (20px timeline node) |\n| 0 | Everything else: every region, every card, every sidebar tile, every icon square, every chart, every accent line, every accent border |\n\nThe system uses **only two radius values**: 50% (true circle) or 0 (sharp rectangle). Soft-rounded corners do not exist. Cards, icon squares, info-bars, and feature regions are all strict rectangles.\n\n### Border Weights\n- **5px solid `{colors.coral}` (top)** — used on card top borders (column-card pattern).\n- **4px solid `{colors.coral}` (left)** — used on sidebar-item left borders.\n- **4px solid `{colors.black}` (horizontal)** — used on timeline-line.\n- **4px solid `{colors.cream}` (ring)** — used as the halo around 20px coral timeline-point dots.\n- **3px solid `{colors.black}` at 15% opacity** — used on title-rule beneath the cover hero title.\n- **2px solid translucent** — used on nav-dot and nav-arrow borders (rgba(255,255,255,0.3–0.5) on dark surfaces; rgba(26,26,26,0.2–0.4) on cream surfaces).\n\nAll borders are either coral, black, cream, or translucent. There is no border-radius on bordered rectangles.\n\n### Decorative Element Types\n\n**45° diagonal hatch** — A `repeating-linear-gradient(45deg, transparent, transparent 20px, rgba(0,0,0,0.06) 20px, rgba(0,0,0,0.06) 40px)` applied as a `::before` pseudo-element overlay on coral regions. The signature atmospheric texture. Variants: -45°, 90° vertical, different stride widths.\n\n**Background numeral** — An oversized Bebas Neue numeral (clamp 100–200px) at `rgba(0, 0, 0, 0.12)` placed inside a coral region. Sits behind the region's primary column-title at full opacity, creating a layered \"ordinal wallpaper\" effect.\n\n**Giant mark** — An oversized Bebas Neue character (clamp 140–280px) at `rgba(0, 0, 0, 0.35)` placed inside a coral region. Used as a half-decorative half-content element, typically a quotation mark on the coral left panel of a quote layout.\n\n**Card (column-card)** — A white-fill rectangle with a 5px coral top border as its only border. Contains a 48px solid coral icon square at top, a Bebas card-title, an Inter card-text body, and a coral card-stat figure at the bottom. The 5px top border is the only chrome — no other border, no shadow, no radius.\n\n**Sidebar item** — A white-fill rectangle with a 4px coral left border as its only border. Contains a Bebas sidebar-value and an Inter sidebar-label. The 4px left border is the only chrome.\n\n**Icon square** — A 48px solid coral rectangle (no radius) containing a 1-character Bebas glyph in white. Used as a card mark.\n\n**Info bar** — A flex row spanning a region's full width, holding a Bebas bar-title left and an uppercase Inter bar-meta right. Cream background; used as a footer band beneath a feature region.\n\n**Timeline** — A 4px solid ink horizontal line spanning the timeline width, with a `::after` repeating-linear-gradient overlay (20px ink + 10px transparent) creating a dashed effect. Timeline points are 20px coral circles with 4px cream halos, distributed evenly along the line.\n\n**Accent line** — An 80×4 solid coral rectangle used as a sub-headline accent rule, or 60×4 for closing/quote contexts. Always coral, always solid, no radius.\n\n**Title rule** — A full-width 3px solid ink line at 15% opacity, used as a subtle horizontal divider beneath the cover hero title.\n\n**Zigzag layer** — An SVG zigzag pattern rendered as a thin ink line at low opacity, overlaid decoratively on the cover's coral top-section.\n\n**Pattern overlay** — A separate repeating-pattern overlay (typically 90° vertical hatch in 10%-opacity ink) applied to coral gradient feature regions. Distinct from the standard 45° diagonal hatch.\n\n## Do's and Don'ts\n\n### Do\n- Compose slides as multi-surface region splits — coral, ink, and cream meeting at hard color edges. The region boundary is the layout structure.\n- Set every Bebas Neue element in its native uppercase with at least 1px letter-spacing — 2px for standard headlines, 4px for hero titles, 12px for jumbo feature treatments.\n- Render every section eyebrow in `{colors.coral}` uppercase Inter weight 700 with 3–4px letter-spacing on cream and ink surfaces.\n- Apply the 45° diagonal hatch (6% opacity black, 20/40px stride) as a `::before` overlay on coral regions for atmospheric texture.\n- Use the 5px coral top border on cards and the 4px coral left border on sidebar tiles as the only chrome on those elements — no other border, no shadow, no radius.\n- Place oversized decorative Bebas numerals at 12% opacity behind column titles inside coral regions when a region needs more visual weight than the title alone provides.\n- Use Inter weight 300 (light) for pull-quote bodies on ink-surface quote layouts — the lighter weight contrasts against Bebas dominance.\n- Render Bebas headlines on coral surfaces in `{colors.black}` (ink-on-fire). White headlines on coral do not exist in this system.\n- Use the coral chart series + coral-dark comparison series convention for any chart data.\n- Use the 48px solid coral icon square (no radius, single white Bebas glyph) as the standard card mark.\n\n### Don't\n- Don't render Bebas Neue in sentence case. The typeface is uppercase only — that is the entire identity.\n- Don't render Bebas without letter-spacing. Untracked Bebas reads as untreated, even at large sizes.\n- Don't introduce a fourth surface color. The three surfaces (coral / ink / cream) are the system — adding a yellow or blue region breaks the magazine-poster identity.\n- Don't render headlines in `{colors.gray}`. Headlines are ink, cream, or coral; gray is reserved for body and meta text only.\n- Don't add drop shadows, elevated cards, or rounded surfaces. The system is flat — depth comes from color region splits and accent borders.\n- Don't round any rectangular element. Cards, sidebar tiles, info bars, icon squares, accent lines — all sharp rectangles.\n- Don't pair Bebas with a different sans body face. The Bebas + Inter pairing is fixed.\n- Don't render Inter labels in sentence case. Small Inter text is always uppercase with 1–4px tracking.\n- Don't soften region boundaries with gradients (except in the rare 135° coral-dark → coral feature gradient). Region edges are hard color meetings.\n- Don't fill a coral region with sparse content. Coral wants weight — either fully populate the region's composition or use a decorative oversized numeral / giant mark as wallpaper.\n\n## Responsive Behavior\n\nCoral is a viewport-fluid 1920×1080 presentation system using `clamp()`, `min()`, and viewport-relative units throughout. There are no explicit responsive breakpoints in the source — every dimension scales between minimum and maximum bounds.\n\n### Scaling Behavior\n- Hero title scales via `min(120px, 9vw, 13vh)` — capped by both width and height so the 3-line title cannot overflow a short laptop screen.\n- Jumbo feature scales from 80px at minimum viewport to 200px at maximum.\n- Body text scales from 15px to 20px.\n- Padding scales via `clamp` per-region.\n- Borders, icon squares (48px), nav dots (10px), nav arrows (44px), and timeline dots (20px) are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Nav-dots float at right edge; nav-arrows at bottom-left; slide counter at bottom-right. All three carry `.dark` variants for cream surfaces (ink-translucent fills) and standard variants for coral/ink surfaces (white-translucent fills).\n- Active nav-dot fills with `{colors.coral}` regardless of surface.\n\n### Charts\nCharts are rendered with Chart.js (loaded via CDN). Primary series uses `{colors.coral}`; comparison series uses `{colors.coral-dark}`. Chart styling is configured inline in the JS; restyling requires editing JS, not CSS.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080. The 45° hatch overlays should render correctly in PDF capture.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Bebas Neue uppercase 400) | Bebas Neue | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body / Label (Inter 300–700) | Inter | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare ZCOOL XiaoWei *after* Bebas Neue and Yozai *after* Inter in the same `font-family` stack so Latin glyphs render in Bebas / Inter and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@300..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Bebas Neue\", \"ZCOOL XiaoWei\", sans-serif;\n  --font-body: \"Inter\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.8 (from 1.7) — Hanzi need more vertical breathing than Latin lowercase, and Coral's body already favors generous leading.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 1–12px Bebas tracking and 1–4px Inter tracking shatter Hanzi cadence). Keep heavy tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any label/eyebrow/meta when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei carries the magazine-poster voice that Bebas Neue provides for Latin — its tall narrow Hanzi forms have a similar architectural-display register, and at the 80–200px sizes Coral uses for jumbo features, ZCOOL XiaoWei holds shape without crumbling the way a system Hanzi face would. Critically, Bebas Neue's \"uppercase only with heavy tracking\" rule is meaningless for Hanzi (no case, no tracking), so the system's most foundational typographic rule simply doesn't apply to CJK — drop the tracking, drop the uppercase, and let ZCOOL XiaoWei stand on size alone. Yozai pairs with Inter for body and labels: its rounded humanist forms match Inter's warmth and stay legible inside coral / cream / ink surfaces. The three-surface region splits, 45° diagonal hatch, decorative oversized numerals (which can stay Latin — 01, 02, 03 work perfectly as wallpaper behind a Chinese column title), and 5px coral top borders are all content-agnostic and work identically in any language.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a single-weight display face with limited glyph coverage compared to Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage. Bebas Neue's narrow condensed proportion has no exact Chinese equivalent — ZCOOL XiaoWei is medium-condensed at best, so Chinese hero titles will occupy ~20% more horizontal space than Latin equivalents. Adjust line-breaks (typically a 2-line Chinese title fills the same area as a 3-line English hero-title) and consider increasing the hero-title `min()` cap when a Chinese title runs long.\n\n## Iteration Guide\n\n1. Every new slide is a composition of one to three surface regions (coral, ink, cream) meeting at hard edges. Choose the surface split based on content emphasis.\n2. Every new headline uses Bebas Neue uppercase with at least 1–2px letter-spacing. Don't sentence-case; don't untracked.\n3. Every new section eyebrow uses Inter weight 700 uppercase 4px-tracked in `{colors.coral}` on cream/ink, or `{colors.black}` on coral.\n4. Every new card uses the 5px coral top border + white fill + no shadow + no radius pattern.\n5. Every new sidebar tile uses the 4px coral left border + white fill + no radius pattern.\n6. Every new coral region carries a 45° diagonal hatch overlay at 6% opacity for texture.\n7. New coral regions that feel underweight get a decorative oversized Bebas numeral at 12% opacity as wallpaper behind the primary title.\n8. New chart series use coral + coral-dark; don't introduce additional series colors.\n9. New quote layouts pair a coral left panel (with a giant mark at 35% opacity) with an ink or cream right panel (carrying the quote body in Inter weight 300).\n10. The system has three surfaces and one accent (coral). Don't introduce a fourth surface color or a second accent.\n\n## Known Gaps\n\n- The Chart.js library is loaded via CDN; chart styling is configured inline in JS rather than reading from CSS variables — restyling requires editing JS.\n- The 45° diagonal hatch stride values (20px/40px standard; 30px/60px variant; 60px/62px vertical) are hardcoded per usage; there is no parameterized hatch component.\n- Decorative oversized numerals are placed as inline content with hardcoded values; there is no generative ordinal system.\n- The cover composition's SVG zigzag-layer is an inline SVG embedded in the source — adjusting the zigzag pattern requires editing SVG markup.\n- The timeline-line's dashed effect is rendered via a `::after` repeating-linear-gradient overlay rather than `border-style: dashed` — this gives precise control over dash dimensions but is unusual.\n- The cover composition uses `min(120px, 9vw, 13vh)` triple-cap sizing to prevent the 3-line title from overflowing on short laptops; new cover variants should follow the same multi-axis cap pattern.\n- The pull-quote layout uses Inter weight 300; Inter weight 300 is loaded explicitly but not used elsewhere — this is the system's only Inter Light deployment.\n- The `cream-dark` and `light-gray` palette tokens are defined but used sparingly across the source; they are available for new compositions that need additional neutral shades.\n- The nav-dot and nav-arrow `.dark` variant must be manually applied on cream-surface slides to maintain visibility — there is no automatic surface detection.\n- Linear-gradient feature regions (135° coral-dark → coral) are the system's only intentional gradient; all other surfaces are flat colors. Using gradients elsewhere breaks the flat-surface aesthetic.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/preview.md":"# Coral Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/coral/design.md`\n- Preview card: `bold-template-pack/templates/coral/preview.md`\n\n## Selection Metadata\n\n- Slug: `coral`\n- Tagline: Cream and coral on near-black, set in oversized Bebas Neue.\n- Mood: bold, warm, modern, confident\n- Tone: graphic, punchy, magazine\n- Formality: medium\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials. Just as strong for a creator portfolio, a manifesto, or a tech / research deck that wants warmth and a single bold accent instead of corporate cool.\n- Avoid for: Contexts that should feel quiet or institutional — the coral accent and oversized Bebas Neue commit hard to a confident magazine voice.\n\n## Visual Snapshot\n\nA bold magazine-poster system that runs on three surface registers — coral fire, ink black, and warm cream — animated by Bebas Neue display caps and a constant 45° diagonal hatch pattern. Inter handles body copy; Bebas Neue handles every headline, stat, title, and meta-figure at heavy letter-spacing. The cultural reference is mid-century travel posters, Saul Bass film titles, and modern editorial sport magazines: solid color planes meeting at hard edges, oversized condensed caps as architectural elements, and a single coral hue used both as accent and as full-slide environment.\n\nCoral is a bold magazine-poster system built on three surface registers — coral fire, ink black, and warm cream — that meet at hard edges. The defining structural premise is solid color planes: a single slide will split into a coral half + a cream half + an ink top-section, with each region a flat solid color holding its own self-contained composition. There are no gradient transitions between regions; the meeting point of two colors is the layout. This is the populist counterpart to a more refined editorial system — closer to a sports magazine cover than a literary catalogue.\n\n## Preview Ingredients\n\n- Palette: coral #E85D5D; coral-dark #D44A4A; cream #F5F0E8; cream-dark #E8E0D4; black #1A1A1A; gray #6B6B6B; light-gray #B0B0B0; white #FFFFFF\n- Typography: Bebas Neue; Inter\n- Signature move: Solid color region splits — coral / ink / cream regions meeting at hard edges.\n- Signature move: Accent borders — 4px coral left, 5px coral top, 3px ink top, 4px ink horizontal.\n- Signature move: 45° diagonal hatch — a signature 6%-opacity black diagonal repeating pattern overlaid on coral regions, providing texture.\n- Signature move: Oversized decorative typography — background numerals at 12% opacity, giant quote marks at 35% opacity, sitting behind or beside primary content.\n- Signature move: Three-surface system: {colors.coral} (fire), {colors.black} (ink), {colors.cream} (paper) — used as solid regions meeting at hard edges.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/design.md":"---\nversion: alpha\nname: Creative Mode\ndescription: A neo-brutalist editorial presentation system built for 1920x1080 slides. The deck anchors on a warm cream canvas with heavy 4px ink borders, hard offset drop-shadows, and a bold four-color accent palette (forest green, hot pink, burnt orange, sunshine yellow). Display headlines run Archivo Black in pure uppercase — aggressive, loud, zero letter-spacing softness. Monospace labels in JetBrains Mono echo a typesetting rule-sheet. Body copy sits in Space Grotesk. Every slide uses flat color-blocking with no gradients, no rounded cards, and no subtlety. The aesthetic is part Bauhaus grid, part punk zine, part Swiss editorial.\n\ncolors:\n  cream: \"#EFE9D9\"\n  cream-2: \"#E4DCC4\"\n  ink: \"#0F0F0F\"\n  ink-2: \"#2A2A2A\"\n  green: \"#1F8A4C\"\n  green-dark: \"#136636\"\n  pink: \"#F06CA8\"\n  pink-dark: \"#D14E8B\"\n  orange: \"#E85A1F\"\n  yellow: \"#F5C518\"\n\ntypography:\n  display-jumbo:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 220px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-hero:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 160px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-xl:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-lg:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 100px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-md:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 96px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-sm:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 84px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-xs:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 72px\n    fontWeight: 400\n    lineHeight: 0.95\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  stat-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 96px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  step-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 0.85\n    letterSpacing: 0\n  step-title:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 34px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  stamp-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 64px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  marker-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 46px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  badge-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  table-head:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  table-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  body-lg:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-md:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.3\n    letterSpacing: 0\n  mono-label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.06em\n    textTransform: uppercase\n  mono-kicker:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  mono-tag:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  mono-chart:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.08em\n    textTransform: uppercase\n\nspacing:\n  slide-gutter: 96px\n  chrome-gutter: 64px\n  grid-gap: 28px\n  cell-pad: 32px\n  step-pad: 28px\n  topbar-top: 48px\n  meta-bottom: 40px\n  table-cell-pad: 18px 26px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  slide-chrome:\n    topbar:\n      fontFamily: \"JetBrains Mono, monospace\"\n      fontSize: 24px\n      letterSpacing: 0.08em\n      textTransform: uppercase\n      position: absolute\n      left: 64px\n      right: 64px\n      top: 48px\n    topbar-pill:\n      border: \"2px solid {colors.ink}\"\n      padding: 6px 14px\n      borderRadius: 999px\n    slide-meta:\n      fontFamily: \"JetBrains Mono, monospace\"\n      fontSize: 24px\n      letterSpacing: 0.06em\n      textTransform: uppercase\n      position: absolute\n      left: 64px\n      right: 64px\n      bottom: 40px\n    slide-meta-dot:\n      width: 10px\n      height: 10px\n      background: \"{colors.ink}\"\n      borderRadius: 50%\n  stat-cell:\n    border: \"4px solid {colors.ink}\"\n    padding: 28px 32px\n  stat-cell-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  stat-cell-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  stat-cell-cream:\n    background: \"{colors.cream}\"\n    color: \"{colors.ink}\"\n  stat-cell-orange:\n    background: \"{colors.orange}\"\n    color: \"{colors.cream}\"\n  step-card:\n    border: \"4px solid {colors.ink}\"\n    padding: 28px\n    height: 420px\n  step-card-cream:\n    background: \"{colors.cream}\"\n    color: \"{colors.ink}\"\n  step-card-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  step-card-yellow:\n    background: \"{colors.yellow}\"\n    color: \"{colors.ink}\"\n  step-card-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  step-arrow:\n    borderTop: \"18px solid transparent\"\n    borderBottom: \"18px solid transparent\"\n    borderLeft: \"24px solid {colors.ink}\"\n  table:\n    border: \"4px solid {colors.ink}\"\n    background: \"{colors.cream-2}\"\n    rowBorder: \"3px solid {colors.ink}\"\n    colBorder: \"3px solid {colors.ink}\"\n  table-head-row:\n    background: \"{colors.ink}\"\n    color: \"{colors.cream}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    borderColor: \"{colors.cream}\"\n  table-col-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  table-col-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  table-col-orange:\n    background: \"{colors.orange}\"\n    color: \"{colors.cream}\"\n  marker-block:\n    background: \"{colors.pink}\"\n    border: \"4px solid {colors.ink}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 46px\n    hardShadow: \"24px 24px 0 {colors.orange}, 24px 24px 0 4px {colors.ink}\"\n  iso-panel:\n    background: \"{colors.green}\"\n    border: \"4px solid {colors.ink}\"\n  stacked-block:\n    border: \"4px solid {colors.ink}\"\n    hardShadow: \"18px 18px 0 {colors.ink}\"\n  badge-rotated:\n    background: \"{colors.yellow}\"\n    border: \"4px solid {colors.ink}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    textTransform: uppercase\n    transform: rotate(-4deg)\n  stamp:\n    background: \"{colors.pink}\"\n    border: \"4px solid {colors.cream}\"\n    width: 340px\n    height: 340px\n    transform: rotate(-6deg)\n  stamp-inner:\n    border: \"4px solid {colors.cream}\"\n    borderRadius: 50%\n  kicker-block:\n    background: \"{colors.ink}\"\n    color: \"{colors.cream}\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    padding: 8px 16px\n  bar-chart-bar:\n    border: \"3px solid {colors.ink}\"\n  bar-chart-axis:\n    borderRight: \"3px solid {colors.ink}\"\n    borderBottom: \"3px solid {colors.ink}\"\n  decorative-circle:\n    background: \"{colors.yellow}\"\n    border: \"4px solid {colors.ink}\"\n    borderRadius: 50%\n  closing-slide:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCreative Mode is a **neo-brutalist editorial slide system** for 1920x1080 presentations. The foundational aesthetic choice is restraint of technique paired with aggression of expression: no rounded cards, no gradients, no shadows that suggest light sources — only flat color-blocking and hard offset drop-shadows (the \"Risograph\" or \"screen-print\" kind where the shadow is a sold same-color offset).\n\nThe canvas is warm cream (`{colors.cream}` — #EFE9D9) with near-black ink (`{colors.ink}` — #0F0F0F) for borders, text, and rules. Four accent colors fire at full saturation: forest green, hot pink, burnt orange, and sunshine yellow. These never blend — they collide on the slide and the collision is the design.\n\nHeadlines run **Archivo Black** (weight 400 due to the display face being intrinsically heavy) in strict uppercase with tight line-height (0.92). Font sizes are extreme: 220px for closing slides, 160px for titles. **JetBrains Mono** carries all metadata, labels, topbar text, and axis labels — reinforcing a \"designed artifact\" or \"technical manual\" register. **Space Grotesk** handles all body paragraphs.\n\nEvery slide follows an identical chrome frame: a JetBrains Mono topbar at 48px from top (left text + right pill), and a JetBrains Mono meta footer at 40px from bottom (label left, slide number right with ink dot divider). Content lives inside this frame with 96px side gutters.\n\n**Key Characteristics:**\n- Cream canvas (`{colors.cream}` — #EFE9D9) as the universal background; green (`{colors.green}` — #1F8A4C) used for the closing slide only.\n- 4px solid ink borders on every structural element — cards, panels, table cells, chart axes.\n- Hard offset box-shadows in place of blurred drops: `24px 24px 0 color, 24px 24px 0 4px ink` on featured blocks.\n- Archivo Black display type in uppercase with 0.92 line-height for extreme tightness.\n- Four accent colors used as flat fills; each slide uses two or three of the four, never all simultaneously.\n- Topbar pill badge (JetBrains Mono, 2px ink border, 999px radius) as the only rounded element per slide.\n\n## Colors\n\n### Canvas and Ink\n- **Cream** (`{colors.cream}` — #EFE9D9): The universal slide background. Warm, not white. Distinguishes the deck from sterile white-background slides.\n- **Cream 2** (`{colors.cream-2}` — #E4DCC4): One step darker cream. Used exclusively as the comparison table's background fill, creating a subtle recessed surface inside the ink border.\n- **Ink** (`{colors.ink}` — #0F0F0F): Near-black used for all borders, body text, rules, topbar chrome, and the closing stamp border. Not pure #000000 — slightly softened.\n- **Ink 2** (`{colors.ink-2}` — #2A2A2A): Softer near-black for secondary body text, descriptions inside stat cells, chart footnotes.\n\n### Accent Colors\n- **Green** (`{colors.green}` — #1F8A4C): Forest green. The dominant accent. Works on stat cells, diagram panels, process steps, and as a full-slide background for maximum visual impact.\n- **Green Dark** (`{colors.green-dark}` — #136636): Darker green variant — available for lever/depth decorative effects. Not used as a primary surface fill.\n- **Pink** (`{colors.pink}` — #F06CA8): Hot pink. High energy. Works on toggle switch illustrations, section markers, stat cells, process steps, and stamp elements.\n- **Pink Dark** (`{colors.pink-dark}` — #D14E8B): Darker pink for depth on decorative lever elements. Available for shadow-side accents.\n- **Orange** (`{colors.orange}` — #E85A1F): Burnt orange. The hard drop-shadow color on featured blocks; also works as a stat cell fill, bar chart color, and table column background.\n- **Yellow** (`{colors.yellow}` — #F5C518): Sunshine yellow. Works on decorative circles, process steps, rotated badges, and bar chart bars. A warm punctuation color.\n\n\n## Typography\n\n### Font Families\nThe system uses three typefaces, each in a strict register:\n- **Archivo Black** — display headlines, step numbers, stat numbers, table labels, all uppercase presentation text. Intrinsically heavy, no additional font-weight needed.\n- **JetBrains Mono** — all metadata: topbar labels, meta footer, kicker labels, chart axes, legend rows, layer tags, figure notes. Carries the \"technical spec\" voice.\n- **Space Grotesk** — body copy only: body column text (slide 2), stat cell descriptors, diagram subtext, step descriptions, closing strap.\n\n### Display Scale\nThe slide canvas is 1920x1080px, so font sizes are far larger than web norms.\n\n| Token | Size | Use |\n|---|---|---|\n| `{typography.display-jumbo}` | 220px | Jumbo title or closing headline |\n| `{typography.display-hero}` | 160px | Primary deck title or hero name |\n| `{typography.display-xl}` | 140px | Section-opening display headline |\n| `{typography.display-lg}` | 100px | Section headline alongside a panel |\n| `{typography.display-md}` | 96px | Mid-weight section headline |\n| `{typography.display-sm}` | 84px | Section headline for data-heavy layouts |\n| `{typography.display-xs}` | 72px | Section headline for grid layouts |\n| `{typography.step-num}` | 140px | Large ordinal numerals in stepped layouts |\n| `{typography.stat-num}` | 96px | Large numerals in stat or data cells |\n| `{typography.stamp-num}` | 64px | Stamp or seal numeral |\n| `{typography.marker-label}` | 46px | Featured marker or callout block label |\n| `{typography.step-title}` | 34px | Card or step title |\n| `{typography.table-head}` | 28px | Table header or label row text |\n| `{typography.badge-label}` | 28px | Rotated badge or annotation label |\n\n### Monospace Scale\nAll JetBrains Mono text sits at 24px. Letter-spacing varies by use:\n- Topbar labels: 0.08em\n- Meta footer: 0.06em\n- Kicker labels (inverted): 0.14em\n- Chart axes: 0.08em (via `{typography.mono-chart}`)\n- Legend rows: 0.06em\n- Layer tags: 0.1em\n\n### Body Scale\n- `{typography.body-lg}` (28px): Body copy for wide column layouts or lede paragraphs.\n- `{typography.body-md}` (24px): Body text in stat cells, diagram annotations, step descriptions, footnotes, and strap lines.\n\n### Principles\nArchivo Black has a line-height of 0.92 — headlines overlap their own cap-height, which is intentional. Uppercase lock is non-negotiable for the display face; lowercase Archivo Black breaks the editorial register. The monospace face uses generous letter-spacing (0.06–0.16em) to feel like a typewritten label. Never use letter-spacing on Archivo Black or Space Grotesk.\n\n## Layout\n\n### Canvas System\nEvery slide is exactly 1920×1080px in a fixed, non-scrolling viewport. The `deck-stage` custom element handles centering and scaling.\n\n### Gutter System\n- **Chrome gutter** (64px left/right): Used by topbar and slide-meta only.\n- **Content gutter** (96px left/right): Used by all content — headlines, body, grids.\n- Headlines occasionally push right to within 96px of the right edge, or are constrained by `right: 1000px` / `right: 900px` to coexist with a right-panel diagram.\n\n\n### Chrome Frame (All Slides)\n```\n┌─ topbar @ top:48px, left:64px, right:64px ──────────────────────────────────┐\n│  SECTION LABEL                                       [pill badge]            │\n├─────────────────────────────────────────────────────────────────────────────┤\n│                                                                              │\n│   CONTENT (96px left gutter, 96px right gutter)                            │\n│                                                                              │\n├─ slide-meta @ bottom:40px, left:64px, right:64px ───────────────────────────┤\n│  DESCRIPTOR LABEL                                    01 • 08                 │\n└─────────────────────────────────────────────────────────────────────────────┘\n```\n\n## Depth and Elevation\n\nThe system uses **zero blurred shadows**. Depth is expressed through two techniques:\n\n### Hard Offset Shadow\nThe signature treatment: a second solid shape offset by a fixed amount in both X and Y. Two values are used:\n- **Large offset** (24px 24px): Featured blocks like the marker and poster switch — `box-shadow: 24px 24px 0 {colors.orange}, 24px 24px 0 4px {colors.ink}`. The first shadow is the colored offset; the second is the ink border around it.\n- **Medium offset** (18px 18px): Stacked blocks in the diagram — `box-shadow: 18px 18px 0 {colors.ink}`. Pure ink shadow only.\n\n### Color-Block Contrast\nDepth perception comes from juxtaposing surfaces: cream on cream-2 (table), ink on cream (kicker block), green on cream (diagram panel). No shadow needed when contrast does the work.\n\n### Flat Elements\nTopbar, meta footer, chart axis lines, legend swatches: flat, no shadow, no border-radius.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px (square)**: All structural elements — stat cells, step cards, table cells, chart bars, diagram panels, stacked blocks. No rounding.\n- **50% (circle)**: Decorative circles within diagram (yellow circ), the topbar pill dot (slide meta separator dot).\n- **999px (pill)**: Topbar badge pill only. The one exception to the system's overall squareness, and it reads as a label chip rather than a card.\n- **Rotated elements**: The comparison badge rotates -4deg; the closing stamp rotates -6deg. These are the system's only non-orthogonal placements.\n\n### Borders\n- **4px solid `{colors.ink}`**: All structural borders — stat cells, step cards, diagram panels, table (outer), poster block, marker block, switch block, stamp.\n- **3px solid `{colors.ink}`**: All internal structural lines — table rows, table columns, chart axis, bar chart bars.\n- **2px solid `{colors.ink}`**: Topbar pill badge.\n- **3px dashed `{colors.ink}`**: Dashed horizontal rule separating the process slide's topbar from its flow cards.\n\n### Decorative Elements\n- **Toggle switch**: Pink square with a lever shape (skewed div) and thick/dark underside, offset shadow in orange with ink border.\n- **Stacked blocks**: Four overlapping absolute-positioned rectangles in pink, yellow, orange, cream-2 with 18px ink hard shadows.\n- **Circle overlay**: Yellow circle centered in a green square — shape contrast acting as decorative figure.\n- **Stamp**: Pink rotated square with a cream circular inner border — acts as a seal or approval mark.\n\n## Do's and Don'ts\n\n### Do\n- Use 4px ink borders on every structural element. Thinner looks soft; thicker looks like a web component.\n- Use hard offset shadows in exactly two sizes: 24px for featured hero blocks, 18px for diagram stacked blocks. Don't mix sizes.\n- Stay uppercase on all Archivo Black usage. The font in sentence case reads as a different brand.\n- Use the four accents in groups of two or three per slide. Every accent on one slide is noise.\n- Reserve the green background for a single dominant slide. Its rarity is what gives it impact.\n- Use JetBrains Mono for all labels, metadata, indices, figure notes, and axis text. Never use it for body or headlines.\n- Keep line-height at 0.92 for all display text. Looser leading breaks the tight editorial register.\n- Maintain 96px content gutter and 64px chrome gutter consistently across all slides.\n\n### Don't\n- Don't round card corners (except the topbar pill). Rounding signals \"friendly SaaS\"; sharp corners signal \"editorial precision.\"\n- Don't use gradients, drop shadows with blur, or glow effects. All depth must come from hard offset or color contrast.\n- Don't use Archivo Black in sentence case. Never lowercase the display face.\n- Don't apply letter-spacing to Archivo Black (except at -0.01em which is already encoded). Extra tracking breaks its density.\n- Don't introduce a fifth accent color. The four-color palette is the brand constraint.\n- Don't use pure white (#ffffff) as a background. Cream is the canvas; white reads as blank.\n- Don't use Space Grotesk for labels or metadata. That role belongs to JetBrains Mono.\n- Don't add multiple typefaces. The three-family stack is complete.\n- Don't center-align body text. All body copy is left-aligned; centered text breaks the grid discipline.\n- Don't soften the stamp or badge rotation. The -4deg and -6deg angles are deliberate imperfection signals.\n\n## Responsive Behavior\n\nThis template is designed **exclusively for 1920x1080 presentation display**. It is not a web page and has no mobile breakpoints. The `deck-stage` web component handles viewport scaling via CSS transforms, so the 1920x1080 canvas scales proportionally on any screen size without layout changes.\n\n### Touch / Presenter Behavior\n- Slides advance via keyboard arrow keys or presentation clicker (handled by `deck-stage.js`).\n- No hover states are defined or needed.\n- No interactive form elements exist.\n\n### Print / Export Behavior\n- At 96dpi, the 1920x1080 canvas maps to a standard 20x11.25 inch frame.\n- For PDF export, a 1920x1080 viewport capture or browser print-to-PDF at 100% scale is recommended.\n- At 1pt = 1.333px, the effective print sizes of headlines range from 54pt (72px) to 165pt (220px) — correct for poster/title cards.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Archivo Black uppercase 400) | Archivo Black | 思源宋体 Noto Serif SC 900 | Google Fonts |\n| Body (Space Grotesk 400) | Space Grotesk | 思源宋体 Noto Serif SC 400 | Google Fonts |\n| Mono / Label (JetBrains Mono uppercase) | JetBrains Mono | JetBrains Mono (Latin/digit only — keep mono chrome in Latin) | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin face in the same `font-family` stack so Latin glyphs render in Archivo Black / Space Grotesk and CJK glyphs fall through to NSC automatically. JetBrains Mono chrome stays Latin/digit-only — topbar labels, slide-meta, axis ticks, and figure notes do not need a CJK fallback (and JetBrains Mono has no CJK glyphs by design).\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Archivo+Black&family=Space+Grotesk:wght@300..700&family=JetBrains+Mono:wght@400..500&family=Noto+Serif+SC:wght@400;900&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Archivo Black\", \"Noto Serif SC\", sans-serif;\n  --font-body: \"Space Grotesk\", \"Noto Serif SC\", sans-serif;\n  --font-mono: \"JetBrains Mono\", ui-monospace, monospace;\n}\n/* Display headlines use Noto Serif SC 900; body uses NSC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.55 (from 1.4) — Hanzi need more vertical breathing than Latin lowercase. For display NSC 900 at 100–220px, keep line-height tight at ~1.0 (NSC heavy weight at display size needs less leading than Archivo Black).\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (negative tracking that flatters Archivo Black caps jams Hanzi strokes together). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any display/label/mono when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nCreative Mode's neo-brutalist register depends on Archivo Black's extreme density at 100–220px — there is no Hanzi face that matches this exact mass, so Noto Serif SC at weight 900 is the closest available substitute. NSC 900's modulated serif strokes will read as more literary than the punk-zine Archivo Black voice, but the four-color block palette, 4px ink borders, and hard 24px offset shadows do most of the brutalist work — the typography becomes one component of a louder system rather than the system itself. The \"uppercase always\" rule for Archivo Black is meaningless for Hanzi (no case), so drop both `text-transform: uppercase` and the -0.01em tracking when content switches to Chinese — NSC 900 stands on size and color alone. JetBrains Mono chrome (topbar pill, slide-meta, axis ticks, kicker block) intentionally stays Latin/digit-only: render `04 / 08` slide counters in mono, but render any Chinese descriptor label in NSC 400 inside the meta footer. The four accents (green / pink / orange / yellow), stat-cell color blocks, table treatment, and decorative geometry (stamp, badge, stacked blocks) are all content-agnostic.\n\n### Known CJK Gap\n\n**Heavy Latin display has no exact CJK equivalent.** Archivo Black's brutalist density at 220px is the system's signature — Noto Serif SC 900 is the heaviest commonly available Hanzi weight, but it reads as a literary serif rather than a poster-grotesk. Chinese decks built with Creative Mode will feel ~30% less \"punk-zine\" than the Latin original; compensate by leaning harder on the accent color blocks, the hard offset shadows, and the rotated badge / stamp elements. Avoid the alternative of `Smiley Sans Oblique` for display — its oblique cut conflicts with the system's strict orthogonal rectangle geometry. NSC has no italic axis, but the system doesn't use italic anywhere — no loss. The mono chrome's \"technical spec\" voice is best preserved by keeping all JetBrains Mono content in Latin/digit and reserving NSC for headline and body roles only.\n\n## Iteration Guide\n\n1. New slide layouts must respect the chrome frame: topbar at top:48px left:64px, slide-meta at bottom:40px left:64px.\n2. Content begins at 96px from each side edge.\n3. When adding a data section (chart, table, grid), pair a display headline above with JetBrains Mono labels inside.\n4. Pick two or three accent fills per slide. Never mix all four on a single slide.\n5. Hard shadows go on featured single elements only (marker, featured block). Grid cells do not get individual shadows.\n6. New step/stat cards follow the existing color-sequence pattern: alternate cream with accents, end the sequence on green.\n7. All borders are 4px solid ink. Internal sub-borders within a table or axis are 3px solid ink.\n8. Rotated elements (badge, stamp) use single fixed angles (-4deg, -6deg). Do not introduce other angles.\n9. Icons and illustrations are CSS-only geometric shapes (divs, borders, pseudo-elements). No external images or SVGs needed.\n\n## Known Gaps\n\n- The `deck-stage.js` script (slide advancement, keyboard nav) is an external dependency not documented here.\n- Animation and transition between slides is not in scope for this template; all slides are static.\n- The title slide poster contains a decorative toggle switch illustration built from nested divs; it has no functional state.\n- Chart data (bar heights, values, labels) is hardcoded as inline styles and placeholder content — there is no data-binding layer.\n- Table data is all placeholder; no dynamic population is supported.\n- The `--rule` CSS variable (#0F0F0F, identical to `--ink`) is defined but not used explicitly — it is reserved for horizontal rule elements and can be considered an alias for ink.\n- Font fallback for Archivo Black is `sans-serif` — the font must be loaded from Google Fonts for the design to render correctly.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/preview.md":"# Creative Mode Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/creative-mode/design.md`\n- Preview card: `bold-template-pack/templates/creative-mode/preview.md`\n\n## Selection Metadata\n\n- Slug: `creative-mode`\n- Tagline: Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display.\n- Mood: creative, confident, playful, design-led\n- Tone: graphic, expressive, modern\n- Formality: medium\n- Density: medium-high\n- Scheme: light\n- Best for: Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews. Also a great unexpected pick for a tech talk, research findings, or finance review when the speaker wants to lead with taste rather than convention.\n- Avoid for: Contexts that demand institutional restraint and a quiet authority — the saturated multi-accent palette will read as expressive, not formal.\n\n## Visual Snapshot\n\nA neo-brutalist editorial presentation system built for 1920x1080 slides. The deck anchors on a warm cream canvas with heavy 4px ink borders, hard offset drop-shadows, and a bold four-color accent palette (forest green, hot pink, burnt orange, sunshine yellow). Display headlines run Archivo Black in pure uppercase — aggressive, loud, zero letter-spacing softness. Monospace labels in JetBrains Mono echo a typesetting rule-sheet. Body copy sits in Space Grotesk. Every slide uses flat color-blocking with no gradients, no rounded cards, and no subtlety. The aesthetic is part Bauhaus grid, part punk zine, part Swiss editorial.\n\nCreative Mode is a neo-brutalist editorial slide system for 1920x1080 presentations. The foundational aesthetic choice is restraint of technique paired with aggression of expression: no rounded cards, no gradients, no shadows that suggest light sources — only flat color-blocking and hard offset drop-shadows (the \"Risograph\" or \"screen-print\" kind where the shadow is a sold same-color offset).\n\n## Preview Ingredients\n\n- Palette: cream #EFE9D9; cream-2 #E4DCC4; ink #0F0F0F; ink-2 #2A2A2A; green #1F8A4C; green-dark #136636; pink #F06CA8; pink-dark #D14E8B\n- Typography: Archivo Black; Space Grotesk; JetBrains Mono\n- Signature move: Cream canvas ({colors.cream} — #EFE9D9) as the universal background; green ({colors.green} — #1F8A4C) used for the closing slide only.\n- Signature move: 4px solid ink borders on every structural element — cards, panels, table cells, chart axes.\n- Signature move: Hard offset box-shadows in place of blurred drops: 24px 24px 0 color, 24px 24px 0 4px ink on featured blocks.\n- Signature move: Archivo Black display type in uppercase with 0.92 line-height for extreme tightness.\n- Signature move: Four accent colors used as flat fills; each slide uses two or three of the four, never all simultaneously.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/design.md":"---\nversion: alpha\nname: Daisy Days\ndescription: A cheerful, childlike presentation system built around the chunky display face Fredoka One and the rounded humanist sans Quicksand. The palette is a sunny garden — cream canvas, turquoise, soft pink, butter yellow, mint, lavender, peach, sky blue, and a single coral accent — with charcoal-brown 2D outlines wrapping every shape. Hard offset shadows in dark charcoal, generous border-radius, and hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) anchor the aesthetic somewhere between a children's storybook spread and a sticker-sheet kawaii zine.\n\ncolors:\n  cream: \"#F5F0E6\"\n  turquoise: \"#7ECDC0\"\n  soft-pink: \"#F7C8D4\"\n  butter: \"#FDE68A\"\n  mint: \"#A8E6CF\"\n  lavender: \"#D4A5E8\"\n  peach: \"#FFCBA4\"\n  sky: \"#A8D8F0\"\n  coral: \"#F8635F\"\n  text-dark: \"#2D2D2D\"\n  text-muted: \"#6B6B6B\"\n  white: \"#FFFFFF\"\n\nborders:\n  primary: \"3px solid {colors.text-dark}\"\n  thin: \"2px solid {colors.text-dark}\"\n\nshadows:\n  default: \"6px 6px 0 {colors.text-dark}\"\n  small: \"4px 4px 0 {colors.text-dark}\"\n  text-headline: \"3px 3px 0 {colors.text-dark}\"\n  text-headline-soft: \"3px 3px 0 rgba(0,0,0,0.2)\"\n\ntypography:\n  display:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(3.2rem, 7vw, 6.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0.02em\n  headline:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(2.5rem, 5vw, 4.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0.02em\n  title:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 400\n    lineHeight: 1.15\n    letterSpacing: 0.02em\n  subtitle:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.3rem, 2vw, 1.8rem)\"\n    fontWeight: 400\n    lineHeight: 1.2\n    letterSpacing: 0.02em\n  label-display:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1rem, 1.5vw, 1.3rem)\"\n    fontWeight: 400\n    lineHeight: 1.3\n    letterSpacing: 0.02em\n  quote:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.3rem, 2.5vw, 2rem)\"\n    fontWeight: 400\n    lineHeight: 1.35\n  body:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.3vw, 1.15rem)\"\n    fontWeight: 500\n    lineHeight: 1.6\n  body-strong:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.4vw, 1.15rem)\"\n    fontWeight: 600\n    lineHeight: 1.5\n  meta:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.8rem, 1.1vw, 0.95rem)\"\n    fontWeight: 600\n    lineHeight: 1.45\n  badge:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"0.85rem\"\n    fontWeight: 400\n    letterSpacing: 0.02em\n\nspacing:\n  pad-slide: \"40px 60px\"\n  pad-card-lg: \"48px 56px\"\n  pad-card-md: \"32px 40px\"\n  pad-card-sm: \"16px 24px\"\n  gap-grid-lg: \"28px\"\n  gap-grid-md: \"24px\"\n  gap-grid-sm: \"14px\"\n  radius: \"20px\"\n  radius-lg: \"28px\"\n  radius-pill: \"50px\"\n  radius-round: \"50%\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  card:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius}\"\n    boxShadow: \"{shadows.default}\"\n  card-lg:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-lg}\"\n    boxShadow: \"{shadows.default}\"\n  badge-pill:\n    display: \"inline-block\"\n    padding: \"8px 20px\"\n    borderRadius: \"{spacing.radius-pill}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"0.85rem\"\n    background: \"{colors.butter}\"\n  framed-header:\n    description: \"A two-part stacked card: a colored header strip (any accent surface) with rounded top corners and no bottom border, sitting flush above a white body with rounded bottom corners. The pair reads as a single unit with a tonal cap.\"\n    headerBackground: \"any accent surface\"\n    headerBorderRadius: \"{spacing.radius-lg} {spacing.radius-lg} 0 0\"\n    bodyBackground: \"{colors.white}\"\n    bodyBorderRadius: \"0 0 {spacing.radius-lg} {spacing.radius-lg}\"\n    border: \"3px solid {colors.text-dark}\"\n    boxShadow: \"{shadows.default}\"\n  circle-dot:\n    width: \"48px\"\n    height: \"48px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    color: \"{colors.white}\"\n    description: \"Outlined colored disc holding a numeral or single letter. Used as timeline node, step marker, or list bullet anchor.\"\n  circle-icon:\n    width: \"44px\"\n    height: \"44px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    background: \"any accent surface\"\n    description: \"Smaller cousin of circle-dot used as a card icon at the top of an info card.\"\n  step-circle-lg:\n    width: \"90px\"\n    height: \"90px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    color: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Oversized outlined disc used as a process step marker. Carries a hard offset shadow.\"\n  avatar-circle:\n    width: \"100px\"\n    height: \"100px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    overflow: \"hidden\"\n  bullet-dot:\n    width: \"20px\"\n    height: \"20px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"2px solid {colors.text-dark}\"\n    background: \"{colors.butter}\"\n    description: \"Small outlined disc used as a ::before bullet for body list items, anchored 4px from the top of the line.\"\n  list-dash:\n    description: \"A simple muted-text dash character used as a ::before bullet for compact in-card lists (day-card body).\"\n  legend-swatch:\n    width: \"18px\"\n    height: \"18px\"\n    border: \"2px solid {colors.text-dark}\"\n    borderRadius: \"4px\"\n  decoration:\n    position: \"absolute\"\n    pointerEvents: \"none\"\n    zIndex: 1\n    description: \"Hand-drawn SVG sticker (daisy, star, sun, cloud, rainbow) placed at slide corners and edges as atmospheric ornament. Often crops past the slide edge.\"\n  nav-dots:\n    position: \"fixed\"\n    placement: \"right edge, vertically centered\"\n    dotSize: \"12px\"\n    dotBorder: \"2px solid {colors.text-dark}\"\n    activeBackground: \"{colors.butter}\"\n    activeTransform: \"scale(1.2)\"\n  slide-counter:\n    position: \"fixed\"\n    placement: \"bottom center\"\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-pill}\"\n    padding: \"6px 20px\"\n    fontFamily: \"'Fredoka One', cursive\"\n    boxShadow: \"{shadows.small}\"\n  chart-container:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-lg}\"\n    boxShadow: \"{shadows.default}\"\n    padding: \"{spacing.pad-card-md}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nDaisy Days is a **cheerful childlike presentation system** rooted in a single typographic pairing: the chubby rounded display face **Fredoka One** for every headline, and the friendly humanist sans **Quicksand** for every line of body and meta text. The visual language descends from picture-book illustration and sticker-sheet kawaii: every shape carries a charcoal 2D outline, every elevated element casts a solid offset shadow, and every surface is a pastel from a sunny garden palette.\n\nThe color philosophy is **multi-pastel with a single warm pop**. The background canvas alternates between a soft cream (`{colors.cream}`) and the saturated pastels (`{colors.turquoise}`, `{colors.soft-pink}`, `{colors.butter}`, `{colors.mint}`, `{colors.lavender}`, `{colors.peach}`, `{colors.sky}`). The lone high-saturation accent is `{colors.coral}` — used sparingly on small marker dots and headline strokes, never as a full surface. Headlines on top of a colored surface get a 3px charcoal text-shadow, which gives display text the same outlined appearance as the shapes around it; headlines on cream stay flat. Body text never leaves `{colors.text-dark}` or `{colors.text-muted}`.\n\nDepth is **2D and graphic**, not photographic. Every elevated element gets a `{shadows.default}` or `{shadows.small}` — a solid charcoal block offset to the bottom-right, with zero blur. The combination of thick charcoal outline plus hard offset shadow gives the system its sticker-on-paper feel. There are no gradients, no glow, no glass effects.\n\nThe signature treatment is the **hand-drawn SVG decoration layer**. Every region carries 3–7 absolutely-positioned ornaments — yellow-centered daisies, multi-color stars, smiling suns, fluffy clouds, arched rainbows — that cluster at the corners and edges, often cropping past the slide boundary at `top:-30px / right:-20px`. These decorations sit on a `z-index:1` layer behind the content (`z-index:2`) and carry the same 2px-ish charcoal stroke as the rest of the system, unifying ornament with structure.\n\n**Density philosophy: full but not crowded.** This system reads as authoritative when every slide carries one focused content region (a card, a frame, a grid) at the center plus a generous wreath of corner ornaments at the edges. An empty corner with no decoration reads as broken — the ornaments are part of the structural composition, not optional garnish. Conversely, dense overlapping content panels read as anxious; the system wants one main subject, framed and surrounded, not three competing ones. Aim for one bordered/shadowed container per slide, with the corner decorations doing the work of filling the rest of the canvas.\n\n**Key Characteristics:**\n- Cream (`{colors.cream}`) default canvas with rotating pastel surfaces — every slide may pick a different surface color.\n- Fredoka One for all headline / display / quote text; Quicksand 500/600 for all body and meta text.\n- Every shape and card carries a 3px solid charcoal outline (`{colors.text-dark}`) plus a hard offset shadow (`{shadows.default}` or `{shadows.small}`).\n- Generous border-radius: 20px on standard cards, 28px on featured cards, pill (`{spacing.radius-pill}`) on badges, full circle on dots and avatars.\n- Hand-drawn SVG ornaments (daisies, stars, suns, clouds, rainbows) cluster at corners and crop past slide edges as atmospheric layer.\n- Headlines on colored surfaces always carry a 3px solid charcoal text-shadow; headlines on cream sit flat.\n- Bullets are colored outlined dots (`{components.bullet-dot}`), not glyphs. Lists feel hand-set.\n- One main content container per slide, surrounded by 3–7 ornaments. Empty corners are wrong.\n\n## Colors\n\n### Palette\n- **Cream** (`{colors.cream}` — #F5F0E6): The default canvas. A warm off-white that reads as paper-stock rather than digital white. Used as the deck's neutral surface — title openings, info-card slides, anything that wants to feel like a storybook page.\n- **Turquoise** (`{colors.turquoise}` — #7ECDC0): A medium-saturation teal-green. The boldest of the surface pastels; loud enough that headlines on top need the charcoal text-shadow to stay legible.\n- **Soft Pink** (`{colors.soft-pink}` — #F7C8D4): A bubblegum blush. Used as a full surface, a header-strip color, a day-marker fill, and the quote-mark accent inside a quote card.\n- **Butter** (`{colors.butter}` — #FDE68A): A buttery pastel yellow. The active-state color for nav dots, the default badge fill, and the default bullet-dot fill. It is the system's \"highlight\" color when something needs to feel marked.\n- **Mint** (`{colors.mint}` — #A8E6CF): A cool celadon green. A surface color, a header-strip color, a circle-icon fill, and a timeline-dot color.\n- **Lavender** (`{colors.lavender}` — #D4A5E8): A muted purple. Surface, header-strip, marker-dot, day-marker — same role flexibility as mint and soft-pink.\n- **Peach** (`{colors.peach}` — #FFCBA4): A warm pastel orange. Used as a surface (typically on process or sequence slides) and an accent.\n- **Sky** (`{colors.sky}` — #A8D8F0): A pastel blue. Surface and accent color, often paired with cloud decorations.\n- **Coral** (`{colors.coral}` — #F8635F): The single saturated accent. Used only as a marker fill (a numbered dot, a timeline node, a step circle) and a day-header — never as a full slide surface. Coral is the system's \"look here\" color and loses its punch if overused.\n- **Text Dark** (`{colors.text-dark}` — #2D2D2D): The structural color. Every border, every body text run on light surfaces, every shadow, every SVG stroke. Slightly warmer than pure black — reads charcoal, not jet.\n- **Text Muted** (`{colors.text-muted}` — #6B6B6B): The de-emphasized text color. Subtitles, descriptions under headlines, list-dash bullets, role labels.\n- **White** (`{colors.white}` — #FFFFFF): The default card fill — every card, every avatar, every chart-container interior. Cards on a cream canvas still get white interiors so the card edge reads cleanly.\n\n### Defaults\n- **Default slide background**: `{colors.cream}`. Use a saturated pastel surface (turquoise, soft-pink, mint, butter, lavender, peach, sky) when the slide wants a tonal personality; default to cream when it doesn't.\n- **Default card background**: `{colors.white}` — on any surface, including pastel surfaces. White-on-pastel is the standard card treatment.\n- **Default headline color**: `{colors.text-dark}` — always.\n- **Default body color**: `{colors.text-dark}` for primary body, `{colors.text-muted}` for descriptions, role labels, captions, and sublines.\n- **Default border color**: `{colors.text-dark}` — always. There are no colored borders anywhere.\n- **Default shadow color**: `{colors.text-dark}` — always. Shadows are never pastel.\n- **Default badge fill**: `{colors.butter}`.\n- **Default marker / accent fill** when an element needs a single \"attention\" color: `{colors.coral}`. When a sequence of markers is needed, rotate through the full pastel set (coral → mint → sky → lavender → butter) for sequence steps and dots.\n- **Default header-strip color** on a framed-header component: any pastel surface — pick whichever harmonizes with the slide's surface color.\n\nThe pastels are interchangeable at the surface level — they do not carry fixed semantic meaning (mint is not \"success\", coral is not \"warning\"). Pick the surface that best serves the slide's emotional register. The one rule: coral is reserved for small high-contrast accents, not surfaces.\n\n## Typography\n\n### Font Family\nThe system loads exactly two web fonts from Google Fonts: **Fredoka One** (a single-weight rounded display face) and **Quicksand** (a humanist sans available at 400/500/600/700). The pairing is the entire typographic identity.\n\nFredoka One is a chunky single-weight display face — it has no italic, no lighter variants, no condensed cuts. The display weight reads as 400 by spec but visually behaves as a heavy weight because the letterforms are so rounded and full. Every headline, every title, every step number, every quote in the system runs in Fredoka One. There is no exception — using Quicksand for a heading or Fredoka One for a body paragraph breaks the system instantly.\n\nQuicksand carries everything else: paragraphs, list items, role labels, captions, day-card body lists, legend text. Quicksand 500 is the body default; 600 is the \"slightly stronger\" variant used for emphasized body (welcome-list items, info-card descriptions, legend labels); 700 is used sparingly for quote-author attribution.\n\n### Display, Body, and Marker Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3.2rem, 7vw, 6.5rem) | Fredoka One | 400 | Cover / opening hero headline |\n| `{typography.headline}` | clamp(2.5rem, 5vw, 4.5rem) | Fredoka One | 400 | Primary slide headline |\n| `{typography.title}` | clamp(1.8rem, 3.5vw, 3rem) | Fredoka One | 400 | Section title or framed-header title |\n| `{typography.quote}` | clamp(1.3rem, 2.5vw, 2rem) | Fredoka One | 400 | Pull-quote body text |\n| `{typography.subtitle}` | clamp(1.3rem, 2vw, 1.8rem) | Fredoka One | 400 | Sub-headline, in-card title |\n| `{typography.label-display}` | clamp(1rem, 1.5vw, 1.3rem) | Fredoka One | 400 | Small Fredoka labels — day-card header, step title |\n| `{typography.body-strong}` | clamp(0.95rem, 1.4vw, 1.15rem) | Quicksand | 600 | Emphasized body — welcome lists, info-card descriptions |\n| `{typography.body}` | clamp(0.95rem, 1.3vw, 1.15rem) | Quicksand | 500 | Standard paragraph body |\n| `{typography.meta}` | clamp(0.8rem, 1.1vw, 0.95rem) | Quicksand | 600 | Compact secondary text — day-card lists, step descriptions, legend rows |\n| `{typography.badge}` | 0.85rem | Fredoka One | 400 | Text inside a pill badge |\n\n### Defaults\n- **Default size for a primary slide headline**: `{typography.headline}` (clamp 2.5–4.5rem).\n- **Default size for a cover-level title moment**: `{typography.display}` (clamp 3.2–6.5rem).\n- **Default size for a paragraph**: `{typography.body}` (clamp 0.95–1.15rem) in Quicksand 500.\n- **Default size for emphasized list items**: `{typography.body-strong}` (Quicksand 600).\n- **Default size for a description under a card title or a meta caption**: `{typography.meta}` in `{colors.text-muted}`.\n- **Default size for a section / framed-header title**: `{typography.title}`.\n- **Default family for any text larger than ~1.3rem**: Fredoka One. Default family for any text smaller than that: Quicksand. The size threshold roughly tracks the Fredoka / Quicksand role boundary.\n\nWhen unsure, reach for `{typography.headline}` for the slide's main text moment, not `{typography.subtitle}` or `{typography.title}` (which are intra-content titles, not the primary slide voice).\n\n### Signature Treatments\nThese are **non-optional whenever the corresponding element type is used**:\n\n- **Every Fredoka One headline placed on a saturated pastel surface carries a 3px charcoal text-shadow** (`{shadows.text-headline}` on bold surfaces like turquoise / mint, `{shadows.text-headline-soft}` on softer surfaces like pink / lavender). Headlines on cream sit flat without the shadow. The text-shadow is what makes the headline read as \"outlined\" in the same vocabulary as the rest of the system. Skipping it on a colored surface reads as broken.\n- **Headlines placed on saturated surfaces switch text color to `{colors.white}`**; headlines on cream and on light pastel cards stay `{colors.text-dark}`. The pairing is white-on-saturated, dark-on-cream-or-card.\n- **Every body list item uses an outlined colored disc as its bullet, not a glyph.** Default fill is `{colors.butter}`. The bullet is rendered as a `::before` 20px circle with 2px charcoal border, positioned 4px from the top of the first line.\n- **Every quote uses the Fredoka quote-mark treatment**: an oversized `\"` glyph in `{colors.soft-pink}` sits above the quoted text. Quotes never appear without a quote-mark anchor.\n- **Quicksand body text never goes uppercase.** No display-style ALL-CAPS treatments on body. Fredoka has its own personality and doesn't need shouting.\n\n### Typography Principles\nThe size ladder is the rhythm. Fredoka One does not get italicized, underlined, or rendered in alternate weights — Fredoka has one weight, full stop. Quicksand stays inside the 500 / 600 / 700 ladder; do not introduce 400 or 800 even if available. Letter-spacing on Fredoka stays at the spec default of `0.02em`. Letter-spacing on Quicksand stays at 0.\n\nMixing Quicksand into a headline (e.g. for an italicized phrase) is not supported in this system — the headline runs in one face. If a headline needs a different emotional register, the size and color do the work, not the font swap.\n\n## Layout\n\n### Canvas System\nThe system targets full viewport — every `.slide` is `100vw × 100vh` with `padding: 40px 60px` (default slide padding). Slides are stacked vertically inside a `.slides-container` that uses CSS scroll-snap (`scroll-snap-type: y mandatory`) to lock each slide to the viewport. Navigation is handled via fixed right-edge nav dots, a fixed bottom-center counter pill, keyboard arrows / spacebar, and intersection-observer-driven dot state.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide}` | 40px 60px | Outer slide padding |\n| `{spacing.pad-card-lg}` | 48px 56px | Large featured cards (quote box, welcome body) |\n| `{spacing.pad-card-md}` | 32px 40px | Standard cards (chart container, framed-header body) |\n| `{spacing.pad-card-sm}` | 16px 24px | Compact cards (timeline card, day-card body) |\n| `{spacing.gap-grid-lg}` | 28px | Major grid gaps (team grid, info-card grid) |\n| `{spacing.gap-grid-md}` | 24px | Standard grid gaps |\n| `{spacing.gap-grid-sm}` | 14px | Tight grid gaps (weekly day-card grid) |\n\n### Border-Radius Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.radius}` | 20px | Standard cards, day-cards, timeline cards |\n| `{spacing.radius-lg}` | 28px | Featured cards (chart container, welcome frame, quote box) |\n| `{spacing.radius-pill}` | 50px | Badges, slide counter |\n| `{spacing.radius-round}` | 50% | All circles (avatars, bullet dots, marker dots, step circles, icons) |\n\nEvery visible region carries some radius. There are zero square corners in this system besides the SVG decorations themselves.\n\n### Content Centering\nSlide content is flex-centered both vertically and horizontally inside the slide padding. The main content container has a max-width that varies by composition (typically 700–1100px) and never spans the full slide width — there is always margin between content and slide edge for the decorations to occupy.\n\n## Depth and Elevation\n\n### Hard Offset Shadow (Only Technique)\nEvery elevated element uses one of two shadow values:\n- **`{shadows.default}`** = `6px 6px 0 {colors.text-dark}` — standard offset for cards, frames, chart containers, badges, the slide counter.\n- **`{shadows.small}`** = `4px 4px 0 {colors.text-dark}` — lighter offset for smaller elevated elements (day-cards, timeline-cards, info-cards, step circles, avatars).\n\nThe shadow is **solid charcoal, zero blur, fixed bottom-right offset**. There is no rgba shadow, no blur, no soft elevation. An element either casts a hard offset shadow in `{colors.text-dark}` or it casts no shadow.\n\n### Text Shadow for Display Type\nA separate text-shadow treatment lives only on display headlines placed over saturated pastel surfaces:\n- **`{shadows.text-headline}`** = `3px 3px 0 {colors.text-dark}` for bold pastel surfaces (turquoise, butter, peach).\n- **`{shadows.text-headline-soft}`** = `3px 3px 0 rgba(0,0,0,0.2)` for softer pastel surfaces (soft-pink, mint) where the full charcoal would feel too heavy.\n\nHeadlines on cream get no text-shadow.\n\n### Decorative Z-Index Layer\nThe atmospheric SVG decorations live on `z-index: 1` with `pointer-events: none`. Content sits on `z-index: 2`. This means decorations may visually overlap content rectangles, but never block interaction. Decorations frequently crop past the slide edge with negative offsets like `top:-30px / left:-30px`, which gives the layout a \"stickers reaching off the page\" feel.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **3px solid `{colors.text-dark}`** — the universal structural border. Cards, framed headers, badges, marker circles, step circles, avatars, chart containers, the slide counter.\n- **2px solid `{colors.text-dark}`** — the lighter border used only on small elements at the bullet / nav-dot / legend-swatch / day-header divider scale.\n- **~2.1px solid `#232323` or `#000`** — the SVG stroke weight used inside the daisy / star / cloud / sun decorations. This matches the perceived weight of the 3px structural border at the SVG's natural scale.\n\nBorders are never colored. Borders are never dashed. The only line style in the system is solid charcoal.\n\n### Decorative Element Types\n\n**Daisy** — A six-petal white-petal / yellow-center daisy in two paired stem positions. The system's signature ornament. Place at corners (typically `top-left`, `top-right`, `bottom-left`, `bottom-right`), often cropped past the edge at `top:-30px` or `right:-20px`. Two daisies plus 2–3 stars is the most common decoration cluster.\n\n**Star** — A puffy five-pointed sticker star in a solid pastel fill (pink, yellow, mint, lavender, white) with charcoal outline. Used as scattered accents between the larger daisy / sun / cloud ornaments. Vary fill color across instances on the same slide; do not use all-white or all-yellow stars.\n\n**Sun** — A smiling round sun in butter yellow with rays. Used as a single feature ornament, typically at top-left or bottom-right.\n\n**Cloud** — A puffy white-and-blue cloud with optional smaller cloud variant. Used in sequences (two clouds at opposing corners) or as a single ornament on slides that want a sky atmosphere.\n\n**Rainbow** — An arched four-band rainbow (coral / yellow / mint / sky) with the standard charcoal outline. Used as a single feature ornament, typically at top-right or bottom-right.\n\n**Framed Header** (`{components.framed-header}`) — A two-part stacked card: a colored header strip (any pastel) sits flush above a white body. The pair shares one rounded outer corner radius and one continuous 3px border, and the whole unit casts a single offset shadow. Used as a featured info container.\n\n**Badge Pill** (`{components.badge-pill}`) — A short rounded-pill chip with 3px border and butter (default) fill. Used as a section tag or small label. Pill text is Fredoka One at 0.85rem.\n\n**Marker Circle Set** — Three sizes (`{components.bullet-dot}` 20px, `{components.circle-dot}` 48px, `{components.circle-icon}` 44px, `{components.step-circle-lg}` 90px). All are outlined circles in a pastel fill, all carry charcoal border. Numerals or single letters inside larger marker circles are always Fredoka One in white text (except on butter-yellow, where text returns to dark).\n\n**Avatar Circle** — A 100px outlined white circle holding a small character SVG portrait or initial. Carries `{shadows.small}`.\n\n**Quote Mark** — An oversized `\"` glyph in Fredoka One at ~4rem in `{colors.soft-pink}`, placed above the quote body inside a quote card.\n\n**Process Arrow** — A simple `→` glyph in Fredoka One at ~2rem in `{colors.text-dark}`, sat between process steps.\n\n**Legend Swatch** — A 18px square with 4px rounded corners and a 2px border. Holds a fill color matched to a corresponding data series.\n\n## Do's and Don'ts\n\n### Do\n- Pair Fredoka One with Quicksand strictly by role — Fredoka for every headline and display moment, Quicksand for every paragraph and meta line. The two-face contrast is the system's voice.\n- Set the default canvas to `{colors.cream}`. Reach for a saturated pastel surface (turquoise, soft-pink, mint, etc.) when the slide wants a tonal mood, but cream is the safe default for content-heavy moments.\n- Apply a 3px solid charcoal outline plus a `{shadows.default}` or `{shadows.small}` hard offset shadow to every elevated container. The outline + offset shadow combo is the system's signature elevation.\n- Apply the `{shadows.text-headline}` text-shadow to every Fredoka One headline placed over a saturated pastel surface. Skip it only on cream.\n- Cluster 3–7 hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) around every slide's edges, often cropping past the boundary. Empty corners look broken in this system.\n- Use outlined colored discs as list bullets — never bare hyphens or asterisks. The `{components.bullet-dot}` with `{colors.butter}` fill is the default.\n- Reserve `{colors.coral}` for small high-attention markers (step numbers, timeline dots, day-headers). Coral as a full slide surface breaks the warmth-balance and reads aggressive.\n- Center the main content container with a max-width well inside the slide padding. The decorations need room at the edges; full-bleed content blocks the ornament layer.\n- Rotate marker / dot colors through the pastel set (coral → mint → sky → lavender → butter) when a sequence needs distinct steps. Do not use a single color for all steps.\n\n### Don't\n- Don't use any font other than Fredoka One and Quicksand. The system loads only those two faces from Google Fonts. Adding a third face breaks the storybook voice.\n- Don't put Quicksand into a headline or Fredoka One into a paragraph. The role / face mapping is strict.\n- Don't use square corners. Every card, every badge, every marker has some radius — the smallest radius in the system is 4px (legend swatch), and most are 20px or larger.\n- Don't use blurred or rgba shadows. The system uses solid charcoal offsets only. `0 4px 12px rgba(0,0,0,0.1)` does not exist here.\n- Don't use colored borders. All borders are charcoal `{colors.text-dark}`.\n- Don't use coral as a full slide surface. Coral is the system's high-attention spot color; it loses power if it covers a region.\n- Don't render Fredoka One in italic, underline, or stretched weights. Fredoka has one weight — that's the design.\n- Don't omit the text-shadow on Fredoka headlines that sit on a saturated pastel surface. The shadow is what unifies headline weight with the outlined-shape vocabulary.\n- Don't leave a slide's corners empty of decorations. The ornament layer is part of the composition, not optional dressing.\n- Don't pile two cards on top of each other without separation. The system reads as one main content region per slide, surrounded by ornament — not as a stack of competing panels.\n\n## Responsive Behavior\n\nThe system targets a viewport-fluid layout (everything sized in `clamp()` or `vw`), but is tuned for desktop / projector at roughly 1280–1920 width. Two responsive breakpoints adapt the grids:\n\n- **`@media (max-width: 768px)`**: Slide padding tightens to `24px 20px`. Multi-column grids collapse: the 5-column weekly grid drops to 3, the 4-column team grid drops to 2, the 2-column info-card grid drops to 1, the horizontal process flow stacks vertically with rotated arrows, and the horizontal donut layout stacks. The right-edge nav dots hide. Decoration opacity drops to 0.6 so they don't overwhelm the cramped layout.\n- **`@media (max-width: 480px)`**: The 3-column weekly grid drops further to 2. Decoration opacity drops to 0.4.\n\n### Presenter Behavior\n- Scroll-snap-y mandatory locks each slide to the viewport on vertical scroll.\n- Keyboard: ArrowDown / ArrowRight / Space / PageDown advance; ArrowUp / ArrowLeft / PageUp reverse; Home jumps to first; End jumps to last.\n- Right-edge nav dots show current slide and accept click-to-jump.\n- A bottom-center counter pill displays `N / total` and updates via IntersectionObserver.\n\n### Print / Export\nThere is no `@media print` rule defined. Print export will inherit the scroll-container layout, which may not paginate cleanly. Treat this as a screen-first system; a separate print stylesheet would be needed for PDF export.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Fredoka One 400) | Fredoka One | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body (Quicksand 500–600) | Quicksand | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare ZCOOL XiaoWei *after* Fredoka One and Yozai *after* Quicksand in the same `font-family` stack so Latin glyphs render in the Latin face and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Fredoka+One&family=Quicksand:wght@400..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Fredoka One\", \"ZCOOL XiaoWei\", cursive;\n  --font-body: \"Quicksand\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.75 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 0.02em Fredoka tracking jams Hanzi strokes together). Keep Latin tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any badge/label when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei's rounded soft display register is the closest Hanzi analogue to Fredoka One's chubby storybook voice — it carries the same \"friendly children's-book\" mood at headline scale without becoming saccharine. Yozai's open counters and modest stroke contrast match Quicksand's humanist warmth, so body paragraphs and meta lines feel continuous with the pastel-garden aesthetic. The 3px charcoal text-shadow on headlines that sit on saturated pastel surfaces works identically on ZCOOL XiaoWei — apply `{shadows.text-headline}` to Chinese headlines on turquoise / butter / peach surfaces, and `{shadows.text-headline-soft}` on soft-pink / mint, exactly as the Latin rule prescribes. The colored bullet-dots, hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows), framed-header cap-and-body pattern, and pastel marker rotation are all content-agnostic. The single-weight constraint of Fredoka One maps cleanly to ZCOOL XiaoWei's single-weight constraint — neither face supports italic, underline, or weight axis variation, which preserves the system's \"one weight, one face per role\" discipline.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a single-weight display face with limited glyph coverage compared to Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage and a similar friendly humanist register. ZCOOL XiaoWei reads slightly more literary-formal than Fredoka One's chubby chunky personality — Chinese decks built with Daisy Days will feel ~20% more \"calm pastel\" and ~20% less \"sticker-sheet kawaii\" than the Latin original. The hand-drawn SVG ornaments (daisy, star, sun, cloud, rainbow) carry the storybook mood that the typography slightly loses, so on Chinese decks consider clustering 5–7 ornaments per slide (the upper end of the 3–7 range) to recover the playful weight.\n\n## Iteration Guide\n\n1. Any new container is rounded (20px / 28px / pill / circle), bordered in 3px charcoal, and shadowed with `{shadows.default}` or `{shadows.small}`. Never ship a flat rectangle with square corners.\n2. Any new headline is Fredoka One. If it sits on a saturated pastel surface, it gets a 3px charcoal text-shadow and switches color to `{colors.white}`. If it sits on cream or on a white card, it stays `{colors.text-dark}` and skips the shadow.\n3. Any new paragraph is Quicksand 500 by default; Quicksand 600 when the paragraph needs emphasis.\n4. Any new bullet is an outlined colored disc (`{components.bullet-dot}`), not a glyph. The default fill is butter, but circle bullets can rotate through the pastel set.\n5. Any new sequence of markers (steps, timeline nodes, day labels) rotates through the pastel set (`coral → mint → sky → lavender → butter`) rather than reusing one color.\n6. Any new slide needs 3–7 SVG decorations clustered at corners and edges. Draw from the established ornament types (daisy, star, sun, cloud, rainbow) — do not introduce a new ornament style (e.g. line-art arrows, photo cutouts).\n7. Any new accent surface picks one of the eight pastels. Do not introduce a ninth color.\n8. Coral stays a small-marker color only. Do not make a coral surface, a coral card, or a coral headline.\n9. Any list bullet sits 4px from the top of the first text line, vertically aligned with x-height, not the line baseline.\n10. When a new component needs a \"two-part frame\" feel, reach for the `{components.framed-header}` pattern (colored cap + white body) rather than nesting two separate cards.\n\n## Known Gaps\n\n- The two Google Fonts (Fredoka One, Quicksand) are loaded via `<link>` from Google Fonts CDN. Offline rendering will fall back to `cursive` and `sans-serif` system defaults, which collapses the entire typographic identity. Self-hosting the fonts is required for offline / print reliability.\n- The hand-drawn SVG decorations (daisy, star, sun, cloud, rainbow) are inline SVG with their stroke colors hardcoded to `#232323` or `#2D2D2D`. There is no programmatic way to recolor them to match a new palette — extending the decoration library requires authoring new SVG sources.\n- The system uses scroll-snap navigation (not absolute-positioned slides). It does not have a dedicated print stylesheet; PDF export of the deck will not paginate one-slide-per-page out of the box.\n- The nav-dots / slide-counter / keyboard / observer JavaScript is embedded inline and hardcodes the slide count via the `<div class=\"nav-dot\">` array. Adding a new slide requires manually adding a corresponding nav-dot div.\n- The pastel surfaces (turquoise, mint, peach) have varying perceived brightness; the text-shadow treatment for headlines must be tuned per-surface (the system already does this — full charcoal for bold surfaces, 20%-opacity charcoal for soft surfaces). New surface colors will require a similar tuning decision.\n- The `--text-muted` color (#6B6B6B) is used for subtitles and captions but has limited contrast against pastel surfaces. Reserve muted text for use on cream or on white cards, not on pastel surfaces directly.\n- The decoration SVGs include a placeholder comment string `SVG created with Arrow, by QuiverAI (https://quiver.ai)` — this is the original authoring tool credit and can be stripped without affecting rendering.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/preview.md":"# Daisy Days Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/daisy-days/design.md`\n- Preview card: `bold-template-pack/templates/daisy-days/preview.md`\n\n## Selection Metadata\n\n- Slug: `daisy-days`\n- Tagline: Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm.\n- Mood: cheerful, playful, warm, sunny, wholesome\n- Tone: friendly, soft, encouraging, approachable, lighthearted\n- Formality: low\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration. Also lovely for an unexpected playful internal kickoff, a wedding planning deck, or any moment where warmth is the message — including across tech or business contexts.\n- Avoid for: Contexts where the audience explicitly expects authority and precision — the hand-drawn pastel SVG decorations are the opposite of buttoned-up.\n\n## Visual Snapshot\n\nA cheerful, childlike presentation system built around the chunky display face Fredoka One and the rounded humanist sans Quicksand. The palette is a sunny garden — cream canvas, turquoise, soft pink, butter yellow, mint, lavender, peach, sky blue, and a single coral accent — with charcoal-brown 2D outlines wrapping every shape. Hard offset shadows in dark charcoal, generous border-radius, and hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) anchor the aesthetic somewhere between a children's storybook spread and a sticker-sheet kawaii zine.\n\nDaisy Days is a cheerful childlike presentation system rooted in a single typographic pairing: the chubby rounded display face Fredoka One for every headline, and the friendly humanist sans Quicksand for every line of body and meta text. The visual language descends from picture-book illustration and sticker-sheet kawaii: every shape carries a charcoal 2D outline, every elevated element casts a solid offset shadow, and every surface is a pastel from a sunny garden palette.\n\n## Preview Ingredients\n\n- Palette: cream #F5F0E6; turquoise #7ECDC0; soft-pink #F7C8D4; butter #FDE68A; mint #A8E6CF; lavender #D4A5E8; peach #FFCBA4; sky #A8D8F0\n- Typography: See full design doc after selection.\n- Signature move: Cream ({colors.cream}) default canvas with rotating pastel surfaces — every slide may pick a different surface color.\n- Signature move: Fredoka One for all headline / display / quote text; Quicksand 500/600 for all body and meta text.\n- Signature move: Every shape and card carries a 3px solid charcoal outline ({colors.text-dark}) plus a hard offset shadow ({shadows.default} or {shadows.small}).\n- Signature move: Generous border-radius: 20px on standard cards, 28px on featured cards, pill ({spacing.radius-pill}) on badges, full circle on dots and avatars.\n- Signature move: Hand-drawn SVG ornaments (daisies, stars, suns, clouds, rainbows) cluster at corners and crop past slide edges as atmospheric layer.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/design.md":"---\nversion: alpha\nname: Editorial Forest\ndescription: A serif-led editorial presentation system in the register of a literary quarterly or art-book monograph. Display type runs in Source Serif 4 at weight 500 with optical-size axis engaged, scaling up to 220px for cover and stat moments. The palette pairs a deep forest green (#2e4a2a) with a dusty rose pink (#e89cb1) over an oat-cream paper ground (#efe7d4), with JetBrains Mono as the editorial chrome (labels, captions, axis ticks). The aesthetic is closer to a Penguin classic, Apartamento spread, or quiet annual report than a tech keynote — confident, paper-feeling, and committed to a small color vocabulary.\n\ncolors:\n  green: \"#2e4a2a\"\n  green-deep: \"#243a21\"\n  green-lite: \"#3a5a36\"\n  pink: \"#e89cb1\"\n  pink-deep: \"#d27e96\"\n  cream: \"#efe7d4\"\n  cream-2: \"#e6dcc4\"\n  ink: \"#1a1a17\"\n\ntypography:\n  display-hero:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 220\n    fontWeight: 500\n    lineHeight: 0.92\n    letterSpacing: -0.02em\n  display:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 140\n    fontWeight: 500\n    lineHeight: 1.02\n    letterSpacing: -0.02em\n  headline-xl:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 96\n    fontWeight: 500\n    lineHeight: 0.96\n    letterSpacing: -0.02em\n  headline:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 84\n    fontWeight: 500\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  headline-sm:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 80\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.02em\n  title-card-lg:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 84\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.01em\n  title-card:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 68\n    fontWeight: 500\n    lineHeight: 0.96\n    letterSpacing: -0.01em\n  title-card-sm:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 56\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.01em\n  figure-caption-serif:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 56\n    fontWeight: 500\n    lineHeight: 1.05\n  name:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 44\n    fontWeight: 600\n    lineHeight: 1.0\n  meta-value:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 32\n    fontWeight: 500\n  body-lg:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 32\n    fontWeight: 400\n    lineHeight: 1.32\n  body:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 30\n    fontWeight: 400\n    lineHeight: 1.38\n  body-card:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 26\n    fontWeight: 400\n    lineHeight: 1.34\n  label:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-tight:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  caption-mono:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 24\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  axis-mono:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.08em\n  stat-figure:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 220\n    fontWeight: 500\n    lineHeight: 0.92\n    letterSpacing: -0.03em\n  stat-figure-unit:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 110\n    fontWeight: 500\n    lineHeight: 0.92\n\nspacing:\n  slide-pad-default: \"96px 120px\"\n  slide-pad-narrow: \"100px 120px\"\n  slide-pad-wide: \"100px 140px\"\n  slide-pad-statement: \"130px 160px\"\n  grid-gap-cards: 28\n  grid-gap-topics: 24\n  grid-gap-kpi: 60\n  rule-weight: \"2px\"\n  rule-weight-card: \"2.5px\"\n  radius-card: \"6px\"\n  radius-card-step: \"8px\"\n  radius-bar-top: \"3px 3px 0 0\"\n  radius-mark-circle: \"50%\"\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  topic-tile:\n    description: \"Bordered or filled rectangular region holding a mono ordinal, a serif title, optional body, and a mono foot. Background may be green / green-lite / pink / cream-2-with-green-border. Corner radius 6px.\"\n    borderRadius: \"{spacing.radius-card}\"\n    padding: \"40px 40px 36px\"\n  step-tile:\n    description: \"Vertical card carrying a mono ordinal, a serif title, body paragraph, and a mono marker row separated by a top rule. Background fills: cream-with-green-border, solid green, or solid pink.\"\n    borderRadius: \"{spacing.radius-card-step}\"\n    padding: \"40px 32px 32px\"\n    minHeight: \"470px\"\n    border: \"2.5px solid currentColor-region\"\n  monogram-circle:\n    width: \"130px\"\n    height: \"130px\"\n    borderRadius: \"{spacing.radius-mark-circle}\"\n    border: \"2px solid {colors.pink}\"\n    fontFamily: \"JetBrains Mono\"\n    fontSize: 28\n    letterSpacing: 0.1em\n    fontWeight: 500\n    description: \"Outlined round mark holding a short mono monogram. The system's signature identity stamp.\"\n  topbar:\n    placement: \"top edge of slide\"\n    layout: \"flex space-between, baseline-aligned\"\n    content: \"{components.label} on the left, monogram-circle or counter on the right\"\n  footline:\n    position: \"absolute\"\n    placement: \"bottom edge of slide, full-width between slide padding\"\n    layout: \"flex space-between\"\n    typography: \"{typography.caption-mono}\"\n  meta-dl:\n    description: \"Three-column definition list separated by a top rule (2px {colors.green}). Each entry has a mono dt label and a serif dd value.\"\n    columns: 3\n    gap: \"36px\"\n    topBorder: \"2px solid {colors.green}\"\n  bar:\n    width: \"56px\"\n    borderRadius: \"{spacing.radius-bar-top}\"\n    description: \"Vertical chart bar in pink, cream, or green. Value label printed above bar in mono.\"\n  chart-axis:\n    border: \"2px solid currentColor\"\n    description: \"Y-axis and x-axis use a single 2px rule on the inner edges of the plot region; no full axis box.\"\n  rule-thin:\n    description: \"Hairline 2px rule, used as section separator above kpi rows, summary grids, meta dls. Color follows region (green on cream, pink on green).\"\n  legend-swatch:\n    display: \"inline-block\"\n    width: \"26px\"\n    height: \"26px\"\n    borderRadius: \"2px\"\n    description: \"Small filled square preceding a mono legend label. 2px corner radius is the smallest radius in the system.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nEditorial Forest is a **serif-led editorial presentation system** in the tonal register of a Penguin classic, a quiet annual report, or an art-book spread. The system's foundational premise is a single, confident typographic voice — Source Serif 4 — used at extreme scale (up to 220px) for headlines and stat figures, with JetBrains Mono playing the supporting role of editorial chrome (labels, captions, axis ticks, page footlines).\n\nThe serif is run at **weight 500** for nearly every display moment — never the more familiar 400 or 700. The 500 weight is the system's most distinctive typographic choice: heavy enough to feel authored, light enough to keep the page calm. Optical-size axis is engaged (`opsz` 8..60), which means the same Source Serif 4 face renders with subtly different letterforms at 26px caption sizes versus 220px display sizes — the small sizes pick up extra contrast and finer details automatically. JetBrains Mono runs at 500 in uppercase with 0.14em–0.18em letter-spacing, used for every label, tag, caption, axis tick, and footer line. The system never mixes a third typeface.\n\nThe palette is a tight five-color editorial set built around three primary surfaces: a **deep forest green** (`{colors.green}` — #2e4a2a), a **dusty rose pink** (`{colors.pink}` — #e89cb1), and an **oat cream paper** (`{colors.cream}` — #efe7d4). Two near-duplicates round out the set: `{colors.green-deep}` for green-on-pink text contrast, `{colors.green-lite}` for tile fills that need a second green shade, `{colors.pink-deep}` for pink-on-pink borders, and `{colors.cream-2}` for tiles that sit on the main cream surface. Body text everywhere is `{colors.ink}` (#1a1a17) — a warm near-black — except when sat on a green or pink surface, where it switches to the surface's complementary color (cream or pink on green; green-deep or cream on pink).\n\nDepth is **flat and paper-based**. There are no drop shadows, no glows, no gradients, no overlays. Elevation is communicated entirely through color-block contrast, 2px hairline rules, and the difference between a filled region and a bordered region. The 6px and 8px card radii are the only roundness in the system besides the monogram circle. The page feels printed, not glassy.\n\n**Density philosophy: spacious and committed.** Each slide carries one strong subject — a headline, a quote, a chart, a stat row, a card grid — surrounded by deep negative space. The slide padding of 96–140px is generous; the top of the slide carries a mono topbar (label + monogram or counter), the bottom carries a mono footline, and the middle holds the main subject at scale. A slide that crams two competing content blocks reads as broken; a slide with one display headline + supporting cards + breathing room reads as authoritative. Reach for fewer elements at larger sizes rather than more elements at smaller sizes.\n\n**Key Characteristics:**\n- Three-color editorial palette: deep forest green, dusty rose pink, oat cream paper. Two surface tones per slide is typical; three is loud.\n- Source Serif 4 at weight 500 for every headline, body, and display moment. Optical-size axis engaged for size-aware letterforms.\n- JetBrains Mono at weight 500 uppercase with wide tracking (0.14em–0.18em) for every label, caption, axis tick, and footline.\n- Display type scales to 220px for cover and stat-figure moments; 96px for primary headlines; 56–84px for card titles.\n- 2px hairline rules separate stacked sections — never thicker, never colored beyond region context.\n- Card radius is 6px for topic tiles and 8px for step tiles. The monogram circle is the only fully round shape.\n- Every slide carries a topbar (label + monogram or counter) and most carry a footline (mono caption row). The chrome anchors the editorial feel.\n- No shadows, no gradients, no glows. Elevation is color-block + rule.\n\n## Colors\n\n### Palette\n- **Green** (`{colors.green}` — #2e4a2a): The deep forest primary. Used as a slide surface, a tile fill, a card border, a meta-dl rule color, and a primary text color on cream surfaces. The most distinctive surface in the system.\n- **Green Deep** (`{colors.green-deep}` — #243a21): A darker green used almost exclusively as text color on pink surfaces, where pure green would lack contrast. Also used as text color on pink tiles.\n- **Green Lite** (`{colors.green-lite}` — #3a5a36): A lighter green used as a tile fill when two greens need to sit beside each other (e.g., a primary green tile next to a secondary green-lite tile in the same grid). Carries pink text.\n- **Pink** (`{colors.pink}` — #e89cb1): A dusty rose. Used as a slide surface, a tile fill, the on-green text color, a bar-chart series color, and the monogram circle border color. The system's primary accent.\n- **Pink Deep** (`{colors.pink-deep}` — #d27e96): A slightly darker rose used only as a border color on pink-filled tiles where the same-color border needs to differentiate from the fill.\n- **Cream** (`{colors.cream}` — #efe7d4): The oat paper surface. The default slide background on non-cover slides, the on-green body text color, and the cream bar-chart series color.\n- **Cream 2** (`{colors.cream-2}` — #e6dcc4): A subtly darker cream used as a tile fill on the cream slide surface. Pairs with a 2px green border so the tile reads as distinct from the slide ground.\n- **Ink** (`{colors.ink}` — #1a1a17): The body text color on cream surfaces. A warm near-black; never pure #000.\n\n### Defaults\n- **Default slide background**: `{colors.cream}` for content-heavy slides; `{colors.green}` for cover, statement-data, summary, and any moment that needs gravity.\n- **Default headline color on `{colors.cream}` surface**: `{colors.green}`.\n- **Default headline color on `{colors.green}` surface**: `{colors.cream}` for primary headlines, `{colors.pink}` for hero / cover-scale headlines.\n- **Default headline color on `{colors.pink}` surface**: `{colors.green-deep}`.\n- **Default body color on `{colors.cream}` surface**: `{colors.ink}`.\n- **Default body color on `{colors.green}` surface**: `{colors.cream}`.\n- **Default body color on `{colors.pink}` surface**: `{colors.green-deep}`.\n- **Default label / caption color**: matches the region's accent (label is pink on green, green on cream, green-deep on pink).\n- **Default tile fill on a cream slide**: choose from the rotation — solid green (with pink text), solid pink (with green-deep text), green-lite (with pink text), or cream-2 with a 2px green border (with green text). A single grid typically mixes 3 of these 4.\n- **Default rule color**: green on cream, pink on green, green-deep on pink. The 2px hairline always picks up the region's accent.\n\nThe palette is intentionally tight. Introducing a fourth chromatic family (a yellow, a blue, an additional rose) breaks the editorial discipline. Stick to the green / pink / cream triad and let the contrast between filled and bordered tiles do the variation work.\n\n## Typography\n\n### Font Family\nThe system loads exactly two web fonts: **Source Serif 4** (with the full optical-size axis 8..60 and weights 300–800) and **JetBrains Mono** (weights 400, 500, 700). Source Serif 4 carries every editorial moment — headlines, body, captions in serif, names, figures. JetBrains Mono carries every piece of chrome — labels, taglines, axis ticks, footlines, ordinals on tiles.\n\nThe mono / serif pairing is the system's typographic identity. Mono never tries to be the headline; serif never tries to be the caption. The roles are inverted from a typical \"sans for chrome, serif for body\" stack — here it's \"mono for chrome, serif for body and display.\"\n\nSource Serif 4 is run at **weight 500** for nearly every moment. Weight 400 appears only for body paragraphs (where the lighter weight reads better at small scale). Weight 600 appears once, for the attribution name on the statement slide — its slightly heavier set distinguishes a proper name from surrounding mono labels. Weight 700 is not used.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-hero}` | 220px | Source Serif 4 | 500 | Cover-scale or closing-scale headline |\n| `{typography.display}` | 140px | Source Serif 4 | 500 | Pull-quote / big-idea statement |\n| `{typography.headline-xl}` | 96px | Source Serif 4 | 500 | Primary section headline on cream |\n| `{typography.headline}` | 84px | Source Serif 4 | 500 | Primary section headline on green |\n| `{typography.headline-sm}` | 80px | Source Serif 4 | 500 | Stat-row introductory headline |\n| `{typography.title-card-lg}` | 84px | Source Serif 4 | 500 | Title inside a hero topic tile (largest tile in a grid) |\n| `{typography.title-card}` | 68px | Source Serif 4 | 500 | Title inside a step tile |\n| `{typography.title-card-sm}` | 56px | Source Serif 4 | 500 | Title inside a standard topic tile |\n| `{typography.figure-caption-serif}` | 56px | Source Serif 4 | 500 | Centered figure / image-placeholder caption |\n| `{typography.stat-figure}` | 220px | Source Serif 4 | 500 | KPI numeral |\n| `{typography.stat-figure-unit}` | 110px | Source Serif 4 | 500 | Unit suffix on a KPI numeral (e.g. \"%\") |\n| `{typography.name}` | 44px | Source Serif 4 | 600 | Personal name in an attribution row |\n| `{typography.meta-value}` | 32px | Source Serif 4 | 500 | Definition-list value in a meta row |\n| `{typography.body-lg}` | 32px | Source Serif 4 | 400 | Primary body paragraph in a summary or stat description |\n| `{typography.body}` | 30px | Source Serif 4 | 400 | Standard body paragraph |\n| `{typography.body-card}` | 26px | Source Serif 4 | 400 | Body inside a card or tile |\n| `{typography.label}` | 26px | JetBrains Mono | 500 / 0.18em | Eyebrow or section label in topbar |\n| `{typography.label-tight}` | 26px | JetBrains Mono | 500 / 0.14em | Caption row, foot line, attribution row, tile ordinal |\n| `{typography.caption-mono}` | 24px | JetBrains Mono | 500 / 0.12–0.16em | Tile foot, tile marker, kpi tag, meta-dl term |\n| `{typography.axis-mono}` | 26px | JetBrains Mono | 500 / 0.08em | Chart axis ticks and labels |\n\n### Defaults\n- **Default size for a primary section headline**: `{typography.headline-xl}` (96px) on cream surfaces, `{typography.headline}` (84px) on green surfaces.\n- **Default size for a cover-scale or closing-scale moment**: `{typography.display-hero}` (220px).\n- **Default size for a quote / big-idea statement**: `{typography.display}` (140px).\n- **Default size for a body paragraph**: `{typography.body}` (30px) in serif weight 400.\n- **Default size for a body paragraph inside a card / tile**: `{typography.body-card}` (26px).\n- **Default size for a meta dt label or tile ordinal**: `{typography.caption-mono}` (24px) in JetBrains Mono uppercase.\n- **Default size for a topbar label / eyebrow**: `{typography.label}` (26px) in JetBrains Mono uppercase with 0.18em tracking.\n- **Default weight for any serif moment**: 500. (400 is reserved for body paragraphs; 600 only for a proper name in attribution.)\n- **Default weight for any mono moment**: 500.\n\nWhen unsure, reach for `{typography.headline-xl}` (96px) for the slide's primary headline on cream, not the larger display sizes. The 140–220px tier is reserved for statement, stat-figure, and hero/closing moments — using it for routine headlines flattens the system's hierarchy.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every JetBrains Mono element is UPPERCASE with letter-spacing of at least 0.08em.** Mono in sentence case or without tracking reads as code, not editorial chrome. The wide tracking is what makes mono feel like a caption row in a magazine, not a terminal.\n- **Every Source Serif 4 display element uses negative letter-spacing (-0.01em to -0.03em).** Tighter tracking pulls the large serif glyphs into a single mass and is essential for the 96–220px sizes. Display serif at default tracking reads loose and untreated.\n- **Display headlines use line-height between 0.92 and 1.02.** Tight line-height is part of the system's display voice. Larger headlines run tighter (0.92 at 220px); smaller headlines (84–96px) run at 0.96–1.0.\n- **Body paragraphs use serif weight 400, not 500.** The weight drop from headline to body is the system's reading rhythm. Body at 500 reads heavy.\n- **Every slide carries a topbar (mono label + monogram or counter on the opposite edge).** The topbar is the system's universal chrome anchor.\n- **Hairline rules between sections are always 2px solid.** Never 1px (reads as web app), never 3px+ (reads as poster).\n\n### Typography Principles\nThe weight 500 + optical-size + tight tracking combination is the system's display voice — switching any of those three properties (e.g., serif weight 700, or default tracking, or no opsz) reads as a different design system. The serif/mono role split is strict: mono never appears at headline scale, serif never appears at axis-tick scale.\n\nItalics are not used anywhere in the system. Underline is not used. Emphasis is communicated through size and color contrast, not type variants.\n\n## Layout\n\n### Canvas System\nThe system targets a fixed **1920×1080** canvas. Slides are `<section>` elements at exact width/height; rendering relies on `deck-stage.js` to scale the canvas to fit the viewport. The canvas is paper, not a viewport — designed for projector, printer, or PDF export.\n\n### Slide Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.slide-pad-default}` | 96px 120px | Standard slide padding |\n| `{spacing.slide-pad-narrow}` | 100px 120px | Data, framework, stats slides — slightly taller top padding |\n| `{spacing.slide-pad-wide}` | 100px 140px | Cover, summary slides — extra side padding for hero headlines |\n| `{spacing.slide-pad-statement}` | 130px 160px | Statement slide — most generous padding for the display-quote moment |\n\nPick the padding that matches the content gravity. Statement-class moments get the widest padding; everyday content slides use the default 96×120.\n\n### Chrome Anatomy\nEvery slide carries (at minimum) a **topbar** at the top edge — a flex-row with a JetBrains Mono `{typography.label}` on one side and either a `{components.monogram-circle}` or a mono counter / location string on the other. Heavier slides (cover, data, summary) also carry a **footline** absolutely positioned at `bottom: 60–80px` with a mono caption row spanning the slide width between the padding.\n\nThe topbar is the system's spine. Without it, a slide reads as untreated.\n\n### Card Radii\n| Value | Use |\n|---|---|\n| 2px | Legend swatch only (smallest radius in the system) |\n| 3px 3px 0 0 | Top corners of bar-chart bars |\n| 6px | Topic tile (agenda-style grid) |\n| 8px | Step tile (framework-style grid) |\n| 50% | Monogram circle |\n\nCards are subtly rounded — never sharp-cornered, never heavily-rounded. The 6–8px radius gives the system its paper-not-plastic feel.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThere are **no shadows in this system**. Not on cards, not on tiles, not on text, not on the monogram circle. Elevation is communicated entirely through:\n\n1. **Color-block contrast** — a green tile on a cream slide reads as elevated because the dark green block separates from the paper ground.\n2. **2px hairline rules** — section separators (above kpi rows, summary grids, meta dls) sit on a 2px line in the region's accent color.\n3. **Border vs fill** — a cream-2 tile with a 2px green border reads as a different elevation than a solid-fill tile beside it.\n\nThe absence of shadow is itself the elevation language. Adding `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` would shatter the editorial feel.\n\n### Paper-Surface Rule\nEvery surface in the system reads as paper, not as a digital pane. The cream tones (`{colors.cream}`, `{colors.cream-2}`) carry that quality literally. The green and pink surfaces inherit it by association — used at full saturation, surrounded by cream chrome, never with shadow or glow, they read as printed ink on stock.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **2px solid** — the universal hairline. Section separator rules above kpi rows / summary grids / meta dls / chart axes; the border on cream-2 tiles; the border on the monogram circle.\n- **2.5px solid** — step-tile borders. Slightly heavier so the tile reads as a separate object from a hairline rule.\n\nBorders take the region's accent color (`{colors.green}` on cream, `{colors.pink}` on green, `{colors.green-deep}` or `{colors.pink-deep}` on pink).\n\n### Decorative Element Types\n\n**Monogram Circle** (`{components.monogram-circle}`) — A 130px outlined circle with a 2px pink border, holding a 2–3-character JetBrains Mono monogram at 28px. Lives in the top-right of cover and summary slides. The system's identity stamp.\n\n**Topbar** (`{components.topbar}`) — A flex row spanning the top of every slide. A JetBrains Mono label on one side, a monogram or counter or location string on the other. The topbar establishes which surface family the slide belongs to (label color tells you).\n\n**Footline** (`{components.footline}`) — An absolutely positioned flex row at `bottom: 60–80px` spanning the slide between padding. Two mono caption strings (e.g., a section name on the left, a page number on the right). Used on cover, data, summary, and any slide that wants to feel like a printed page.\n\n**Topic Tile** (`{components.topic-tile}`) — A 6px-radius rectangular region holding a mono ordinal, a serif title, optional body, and a mono foot string. Background fills rotate through green, green-lite, pink, or cream-2-with-green-border. A grid of these tiles is the agenda / table-of-contents pattern.\n\n**Step Tile** (`{components.step-tile}`) — An 8px-radius vertical card with 2.5px border, holding a mono ordinal, a serif title (68px), a body paragraph, and a mono marker row separated by a top rule. Background fills: cream-with-green-border, solid green, or solid pink. A row of 3–4 step tiles is the framework / process pattern.\n\n**KPI Block** — A vertical stack: mono tag (24px) on top, oversized serif figure (220px) with optional 110px unit, then a serif description paragraph (30px). Sits inside a row separated above by a 2px pink rule on green surfaces.\n\n**Bar (chart)** — A 56px-wide rectangle with top corners rounded at 3px, filled in pink, cream, or green. The value label is mono 24px, absolutely positioned 38px above the bar.\n\n**Meta Definition List** (`{components.meta-dl}`) — A three-column dt/dd grid with a 2px top border. The dt is mono 24px uppercase tracked, the dd is serif 32px weight 500. Used as a credits / specs / details row at the bottom of a two-column slide.\n\n**Legend Row** — A horizontal flex of mono uppercase items, each preceded by a 26×26px filled swatch with 2px corner radius. Used in chart and data contexts.\n\n## Do's and Don'ts\n\n### Do\n- Run every display headline in Source Serif 4 at weight 500 with negative letter-spacing (-0.01em to -0.03em) and tight line-height (0.92–1.0). The combination is the system's voice.\n- Run every label, caption, tag, axis tick, and footline in JetBrains Mono at weight 500 uppercase with 0.08em–0.18em letter-spacing.\n- Place a topbar (mono label + monogram or counter) on every slide. The topbar is the system's spine.\n- Pick a single dominant surface per slide (green, pink, or cream) and let it carry the whole canvas. Two surface colors per slide is the maximum.\n- Pair tile fills in a grid: rotate through green + pink + green-lite + cream-2-with-green-border rather than reusing one fill across all tiles.\n- Use 2px solid hairline rules to separate stacked sections (kpi rows, summary grids, meta dls). The hairline is the system's separator language.\n- Scale display type aggressively when content allows — 140–220px for statement, hero, and closing moments. The system rewards bigness when there's room.\n- Use generous slide padding (96–160px). Negative space is part of the editorial register; cramped padding reads as broken.\n- Reserve the monogram circle for cover and summary moments. Using it on every slide dilutes its function as an identity stamp.\n\n### Don't\n- Don't add box-shadow to any element. The system is shadow-free; adding shadow shatters the paper feel.\n- Don't introduce a third typeface. Only Source Serif 4 and JetBrains Mono. No Inter, no system stack.\n- Don't run serif text in italic or underline. Emphasis is size and color, not type variant.\n- Don't render JetBrains Mono in sentence case or without letter-spacing. Mono without uppercase + tracking reads as code, not chrome.\n- Don't introduce a fourth chromatic family (yellow, blue, lavender). The green / pink / cream triad is the entire palette.\n- Don't use heavy borders (4px+) or thin hairlines (1px). The system has 2px and 2.5px — pick one.\n- Don't pile two competing content blocks on one slide. One subject per slide; expand or split.\n- Don't use rgba transparency for surface colors. Each surface is solid ink-on-paper.\n- Don't run serif body text at weight 500 — it reads heavy. Body is weight 400; display is weight 500.\n- Don't omit the topbar. A slide without the mono label at the top loses its editorial spine.\n\n## Responsive Behavior\n\nThis is a **fixed 1920×1080 presentation system** rendered through `deck-stage.js`. The canvas is not responsive in the web sense — there are no media queries, no breakpoints, no fluid sizing. Every measurement is in fixed pixels at 1920×1080.\n\n### Scaling Behavior\nThe `deck-stage.js` script wraps each `<section>` and scales the 1920×1080 canvas uniformly to fit the browser viewport, letterboxing as needed. Type, padding, gaps, and rule weights are all in pixels and scale proportionally with the canvas. Borders that read as 2px at 1920px will read as 1px at 960px viewport width — this is acceptable inside the system's tolerance.\n\n### Presenter Behavior\nNavigation is delegated to whatever wrapper `deck-stage.js` provides — there is no inline keyboard handler. Treat each `<section>` as a slide; the runtime handles transitions.\n\n### Print / Export\nBecause every measurement is fixed-pixel inside a 1920×1080 canvas, the system exports cleanly to PDF at the same aspect ratio (16:9). Source Serif 4 with the optical-size axis renders well at print resolution because the small-sized variants pick up the print-appropriate letterform detail automatically.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display headline (220 / 140 / 96 / 84px) | 霞鹜文楷 LXGW WenKai (Noto Serif SC fallback) | 400 | Literary, handwritten-ish brushwork; matches the Penguin-classic register of Source Serif 4 |\n| Body paragraph (26 / 30 / 32px) | 思源宋体 Noto Serif SC | 400 | Reads as the printed body voice of a literary quarterly |\n| Stat figure (220px) | 思源宋体 Noto Serif SC | 700 | Mincho weight 700 gives the numeric mass that Source Serif 4 weight 500 provides in Latin |\n| Mono label / caption / footline (24–26px) | 思源等宽 Noto Sans Mono CJK SC | 500 | JetBrains Mono has no CJK glyphs; Noto Sans Mono CJK SC preserves the typewriter-chrome quality |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Source Serif 4 as the Latin face and fall back to LXGW WenKai (for headlines / display) or Noto Serif SC (for body / stats) for CJK glyphs. This is the right call for Editorial Forest because the Source Serif 4 optical-size axis is a signature of the system; replacing it wholesale with a Mincho would flatten the Penguin-classic register that defines the deck. The font-family stack puts the Latin face first, then the CJK fallback, then the generic serif:\n\n```css\nfont-family: 'Source Serif 4', 'Source Serif Pro', 'LXGW WenKai TC', 'Noto Serif SC', Georgia, serif;\n```\n\nBrowsers per-glyph fall back: Latin characters render in Source Serif 4 at weight 500 with opsz engaged, Chinese characters render in LXGW WenKai (display) or Noto Serif SC (body). The baseline mismatch at display sizes (96–220px) is the main thing to watch — LXGW WenKai sits slightly higher than Source Serif 4 in optical baseline, so a mixed-script line like \"Designed in 北京\" may show a 1–2px vertical wobble. Acceptable for slide content; for printed export, prefer all-CJK or all-Latin lines.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>` (or as a second link tag):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=LXGW+WenKai+TC&family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\nLXGW WenKai TC is the version served on Google Fonts (the Simplified-Chinese build `LXGW+WenKai+SC` is not yet on the Google CDN — TC ships both traditional and simplified glyphs and works for both).\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.92–1.0 on display, 1.32–1.38 on body) read as cramped in Chinese. Bump display to 1.0–1.1 and body to 1.5–1.6.\n- **Remove negative letter-spacing on CJK headlines.** Source Serif 4 display uses -0.01em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Latin portion was meant to be capitalized.\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between LXGW WenKai and Noto Serif SC inside the same sentence — pick the face that matches the size tier (display = LXGW WenKai, body = Noto Serif SC) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nEditorial Forest's whole voice is \"Penguin classic / quiet annual report\" — a serif at weight 500 with the optical-size axis doing the size-aware letterform work. The Chinese equivalent of that register is **LXGW WenKai for display moments** (it has the same hand-set, slightly informal warmth as Source Serif 4 at 500) and **Noto Serif SC at 400 for body** (the calm Mincho voice that reads like a literary journal). Avoid Noto Sans SC for body — the sans face flips the system into \"tech report\" rather than \"monograph spread.\"\n\nThe system's mono / serif role split (JetBrains Mono for chrome, Source Serif 4 for everything else) maps cleanly onto Chinese. Use Noto Sans Mono CJK SC for the topbar label, footline strings, tile ordinals, and axis ticks — keep them uppercase-equivalent (i.e., 0.14em–0.18em letter-spacing on Latin labels, and for Chinese, the Mono CJK face at 500 weight provides the same chrome quality). Do not run Chinese labels in LXGW WenKai or Noto Serif SC; the editorial chrome would lose its typewriter feel.\n\n### Known CJK Gap\n\nLXGW WenKai's brushwork warmth is its strength at large display sizes, but at body scale (26–32px) the same brushwork reads slightly noisy. The system bumps body to Noto Serif SC (a cleaner Mincho) to avoid this, but the visual handoff between a 96px LXGW WenKai headline and a 30px Noto Serif SC paragraph below it is the system's biggest CJK seam — the two faces have different stroke contrast profiles. If the seam reads loud, use Noto Serif SC for both display and body (sacrifices warmth for consistency), or use LXGW WenKai for both (sacrifices body legibility for consistency). The default split is the right trade-off for most decks, but worth a manual check on cover and statement slides.\n\n## Iteration Guide\n\n1. Any new headline is Source Serif 4 weight 500 with negative letter-spacing. Pick the size from the display ladder (220 / 140 / 96 / 84 / 80 / 68 / 56) — do not invent a new size.\n2. Any new label, caption, or tag is JetBrains Mono weight 500 uppercase with 0.08em–0.18em letter-spacing. Pick the size from the mono ladder (26 / 24).\n3. Any new slide carries a topbar at the top. The mono label color follows the surface (pink-on-green, green-on-cream, green-deep-on-pink).\n4. Any new card uses 6px (topic tile) or 8px (step tile) radius. The monogram circle is the only fully round shape; do not introduce a fourth radius.\n5. Any new section separator is a 2px hairline rule in the region's accent color. No 1px rules, no 3px rules.\n6. Any new fill color must come from the existing palette (`{colors.green}`, `{colors.green-lite}`, `{colors.pink}`, `{colors.cream}`, `{colors.cream-2}`). Do not introduce a yellow, blue, or third pink.\n7. Any new body paragraph is serif weight 400 at 26–32px. Do not run body at weight 500.\n8. Any new KPI figure is `{typography.stat-figure}` (220px). Smaller KPI sizes are not in the system — if the layout can't accommodate 220px, restructure the slide.\n9. Any new chart uses the bar treatment (pink / cream / green fills, mono axes, 2px axis rules) on a green surface. The data composition is part of the system identity.\n10. When in doubt, reach for fewer elements at larger sizes. The system's editorial register collapses when crowded.\n\n## Known Gaps\n\n- The system depends on `deck-stage.js` for canvas scaling and slide navigation. The script is not described in this design.md — treat it as a runtime dependency.\n- Source Serif 4 and JetBrains Mono are loaded from Google Fonts via `<link>`. Offline rendering will fall back to Georgia serif and Menlo mono respectively, which will preserve the rough character but lose the optical-size axis and the JetBrains Mono identity. Self-hosting recommended for offline / print reliability.\n- The Source Serif 4 optical-size axis (`opsz` 8..60) is critical to the system's quality — using a non-opsz fallback face flattens the size-aware letterform contrast.\n- The bar chart uses hand-set bar heights (`%` of a fixed 520px plot region). There is no data-binding — extending the chart requires manually computing heights.\n- The monogram circle, footline strings, and tile counters carry hardcoded text in the source. Replacing them with a deck's actual identity is required per-deck.\n- The system has no `@media print` rule and no responsive breakpoints — it is fixed 1920×1080 and relies on `deck-stage.js` for any viewport adaptation.\n- The green-on-pink and pink-on-green text contrast ratios are sufficient at the display sizes used (84px+) but would fail WCAG AA at body-text sizes. Do not put 26px body text in pink-on-green or green-on-pink — keep small text in cream-on-green or ink-on-cream.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/preview.md":"# Editorial Forest Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/editorial-forest/design.md`\n- Preview card: `bold-template-pack/templates/editorial-forest/preview.md`\n\n## Selection Metadata\n\n- Slug: `editorial-forest`\n- Tagline: Forest green, dusty pink, and warm cream meet Source Serif 4 in a quiet, intentional quarterly-review deck.\n- Mood: editorial, quiet, considered, warm, intentional\n- Tone: literary, thoughtful, warm, low-pressure\n- Formality: medium\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel like a considered editorial — quarterly reviews, internal readouts, studio updates, creative-agency presentations. Equally good for any deck that wants to feel warm and unhurried rather than corporate, including research recaps, book or program announcements, and team retrospectives.\n- Avoid for: Contexts that need to feel urgent, punchy, or sales-driven — the palette and rhythm are intentionally quiet.\n\n## Visual Snapshot\n\nA serif-led editorial presentation system in the register of a literary quarterly or art-book monograph. Display type runs in Source Serif 4 at weight 500 with optical-size axis engaged, scaling up to 220px for cover and stat moments. The palette pairs a deep forest green (#2e4a2a) with a dusty rose pink (#e89cb1) over an oat-cream paper ground (#efe7d4), with JetBrains Mono as the editorial chrome (labels, captions, axis ticks). The aesthetic is closer to a Penguin classic, Apartamento spread, or quiet annual report than a tech keynote — confident, paper-feeling, and committed to a small color vocabulary.\n\nEditorial Forest is a serif-led editorial presentation system in the tonal register of a Penguin classic, a quiet annual report, or an art-book spread. The system's foundational premise is a single, confident typographic voice — Source Serif 4 — used at extreme scale (up to 220px) for headlines and stat figures, with JetBrains Mono playing the supporting role of editorial chrome (labels, captions, axis ticks, page footlines).\n\n## Preview Ingredients\n\n- Palette: green #2E4A2A; green-deep #243A21; green-lite #3A5A36; pink #E89CB1; pink-deep #D27E96; cream #EFE7D4; cream-2 #E6DCC4; ink #1A1A17\n- Typography: JetBrains Mono\n- Signature move: Three-color editorial palette: deep forest green, dusty rose pink, oat cream paper. Two surface tones per slide is typical; three is loud.\n- Signature move: Source Serif 4 at weight 500 for every headline, body, and display moment. Optical-size axis engaged for size-aware letterforms.\n- Signature move: JetBrains Mono at weight 500 uppercase with wide tracking (0.14em–0.18em) for every label, caption, axis tick, and footline.\n- Signature move: Display type scales to 220px for cover and stat-figure moments; 96px for primary headlines; 56–84px for card titles.\n- Signature move: 2px hairline rules separate stacked sections — never thicker, never colored beyond region context.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/design.md":"---\nversion: alpha\nname: Editorial Tri-Tone\ndescription: A literary magazine-meets-annual-report presentation system built on a strict three-color palette — blush pink, golden butter, and deep burgundy wine. Despite having eleven CSS variable names, only three hex values exist in the entire system; every alias is a semantic rename of one of those three. Headlines run Bricolage Grotesque (a variable grotesque with an optical-size axis) at extreme weights and negative letter-spacing. Instrument Serif (italic-cut only) appears as the expressive accent face for chapter numerals, pull-quotes, years, and signatures. JetBrains Mono carries all metadata, labels, and section markers at tight uppercase tracking. The aesthetic is \"independent arts publication\" — the kind with a colophon, hand-numbered editions, and an editorial desk.\n\ncolors:\n  pink: \"#F2B6C6\"\n  butter: \"#F2D86A\"\n  burgundy: \"#7A1F35\"\n\ncolor-aliases:\n  pink-deep: pink\n  sky: pink\n  cream: butter\n  lime: butter\n  terracotta: butter\n  navy: burgundy\n  forest: burgundy\n  ink: burgundy\n\ntypography:\n  display-wordmark:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 300px\n    fontWeight: 800\n    lineHeight: 0.82\n    letterSpacing: -0.04em\n  display-closer:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 320px\n    fontWeight: 700\n    lineHeight: 0.82\n    letterSpacing: -0.05em\n  display-stat:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 540px\n    fontWeight: 700\n    lineHeight: 0.78\n    letterSpacing: -0.06em\n  display-stat-unit:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 220px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  chapter-num:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 240px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  quote-mark:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 200px\n    fontWeight: 400\n    lineHeight: 0.6\n    letterSpacing: 0\n  display-xl:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 84px\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.02em\n  display-lg:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 76px\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.02em\n  signature:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 64px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  endorsement-num:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 56px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    color: pink\n  timeline-year:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 56px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  subhead-serif:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 48px\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0\n  lede:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 56px\n    fontWeight: 500\n    lineHeight: 1.05\n    letterSpacing: -0.02em\n  cover-pill:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 44px\n    fontWeight: 500\n    lineHeight: 1.0\n    letterSpacing: 0\n  chart-title:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 40px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  card-title:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 40px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  quote-heading:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 56px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  body-lg:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.45\n    letterSpacing: 0\n  body-md:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 26px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-sm:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.45\n    letterSpacing: 0\n  label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  label-wide:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-mid:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  label-tight:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.10em\n    textTransform: uppercase\n  footer:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    opacity: 0.75\n\nspacing:\n  slide-pad: 96px\n  chrome-gutter: 64px\n  section-gap: 48px\n  card-pad: 28px 28px 30px\n  chart-pad: 48px 48px 56px\n  footer-bottom: 36px\n  grid-gap: 24px\n  endorsement-pad: 20px 0\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  pill:\n    borderRadius: 999px\n    padding: 0.35em 0.9em\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontWeight: 500\n    lineHeight: 1.0\n  cover-pill:\n    borderRadius: 999px\n    padding: 16px 38px\n    fontSize: 44px\n    fontWeight: 500\n  closer-pill:\n    borderRadius: 999px\n    padding: 12px 28px\n    fontSize: 22px\n  value-card:\n    borderRadius: 28px\n    padding: 28px 28px 30px\n    height: 340px\n  value-card-dark:\n    background: \"{colors.burgundy}\"\n    color: \"{colors.butter}\"\n  value-card-light:\n    background: \"{colors.butter}\"\n    color: \"{colors.burgundy}\"\n  chart-card:\n    background: \"{colors.butter}\"\n    color: \"{colors.burgundy}\"\n    borderRadius: 32px\n    padding: 48px 48px 56px\n  timeline-ribbon:\n    background: \"{colors.burgundy}\"\n    color: \"{colors.butter}\"\n    borderRadius: 999px\n    padding: 24px 44px\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  timeline-ribbon-accent:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 30px\n    fontWeight: 400\n    letterSpacing: 0\n    textTransform: none\n    color: \"{colors.pink}\"\n  footer-chrome:\n    position: absolute\n    left: 64px\n    right: 64px\n    bottom: 36px\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    opacity: 0.75\n  footer-dot:\n    width: 8px\n    height: 8px\n    borderRadius: 999px\n    background: currentColor\n    opacity-inactive: 0.3\n    opacity-active: 1.0\n  swatch-circle:\n    width: 36px\n    height: 36px\n    borderRadius: 999px\n  stat-breakdown-bar:\n    height: 10px\n    borderRadius: 999px\n    background: \"rgba(246,237,220,0.15)\"\n  stat-breakdown-divider:\n    borderTop: \"1px solid rgba(246,237,220,0.25)\"\n  endorsement-divider:\n    borderTop: \"1px solid rgba(246,237,220,0.30)\"\n  avatar:\n    width: 72px\n    height: 72px\n    borderRadius: 999px\n    background: \"{colors.burgundy}\"\n    border: \"3px solid {colors.burgundy}\"\n  timeline-axis:\n    height: 4px\n    background: \"{colors.burgundy}\"\n    opacity: 0.15\n  timeline-dot:\n    width: 28px\n    height: 28px\n    borderRadius: 999px\n    border: \"4px solid {colors.butter}\"\n    background: \"{colors.burgundy}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nEditorial Tri-Tone is a **literary magazine presentation system** built on the strictest possible palette: three hex values, eleven CSS variable names. The naming system reveals editorial intent — `--pink` and `--sky` point at the same blush; `--cream`, `--butter`, `--lime`, and `--terracotta` all resolve to the same golden yellow; `--burgundy`, `--navy`, `--forest`, and `--ink` all collapse to the same deep wine. The aliases exist to communicate the role of the color in context, not to introduce variation.\n\nThe typeface stack is a deliberate three-way conversation:\n1. **Bricolage Grotesque** — a variable grotesque with an optical-size axis. Used at weights 500, 600, 700, and 800 for all display and body sans text.\n2. **Instrument Serif** — used exclusively in weight 400, often in its italic guise. Reserved for chapter numerals, pull-quote marks, timeline years, signatures, endorsement ordinals, and stat percentage symbols.\n3. **JetBrains Mono** — all metadata, labels, section markers, footnotes, footer chrome.\n\nThe editorial voice is that of an independent magazine with a colophon — the deck's last slide is literally called \"Colophon.\" Section markers use the section sign (§) followed by a number and a title. The tone is measured, literary, and warm rather than corporate or high-energy.\n\n**Key Characteristics:**\n- Three-color palette with semantic aliases: blush pink (#F2B6C6), golden butter (#F2D86A), deep burgundy (#7A1F35).\n- Mixed typography: Bricolage Grotesque grotesque for display and body; Instrument Serif for expressive accent numerals, quotes, and years; JetBrains Mono for all labels.\n- The `em` tag within Bricolage Grotesque headlines always triggers a switch to Instrument Serif italic — the system's primary typographic mix.\n- Pills (border-radius 999px) are the universal tag component; used at three different sizes across cover, chart legend, and closer.\n- Value cards have a generous 28px border-radius — soft, rounded, not brutalist.\n- Dividers on dark surfaces use low-opacity rgba (0.25–0.30) rather than solid colors — whispered separators.\n- Footer dot row: a progress indicator using 8px circles at 30% opacity (inactive) and 100% opacity (active).\n- The sole SVG chart combines four series types on a single canvas: filled area, vertical bars, connected circles, dotted line.\n\n## Colors\n\n### The Three Actual Colors\nDespite many CSS variable names, the palette is:\n\n| Name | Hex | Role |\n|---|---|---|\n| Blush Pink | #F2B6C6 | Accent / highlight on dark surfaces; stat figure color; quote mark glow |\n| Golden Butter | #F2D86A | Warm mid-tone; background for light slides; accent text on dark surfaces |\n| Deep Burgundy | #7A1F35 | Primary dark surface; ink color; structural tone |\n\n### Alias Map\nAll aliases resolve to one of the three values above. The alias name signals context:\n\n| Alias | Points to | Context of use |\n|---|---|---|\n| `--pink` | #F2B6C6 | Default accent label |\n| `--pink-deep` | #F2B6C6 | (unused distinct value — same as pink) |\n| `--sky` | #F2B6C6 | Segment D bar in breakdown |\n| `--cream` | #F2D86A | Light surface background |\n| `--butter` | #F2D86A | Accent text on dark; card backgrounds |\n| `--lime` | #F2D86A | Ribbon accent text; kicker label on dark surfaces |\n| `--terracotta` | #F2D86A | Italic em highlights in lede or body |\n| `--navy` | #7A1F35 | Alternate label for dark surface contexts |\n| `--forest` | #7A1F35 | Dark panel or column background |\n| `--burgundy` | #7A1F35 | Structural background color |\n| `--ink` | #7A1F35 | All text color |\n\n\n## Typography\n\n### Font Families\n- **Bricolage Grotesque**: The primary typeface. Variable with optical-size axis (opsz 12..96) and weights from 400 to 800. The weight range is the expressive tool — 400 for body, 500 for lede, 600 for card titles and quote headers, 700 for section headlines, 800 for the wordmark.\n- **Instrument Serif**: Weight 400 only, italic variant loaded. Functions as the expressive counterpoint to Bricolage Grotesque. Never used for body copy; always for large numerals, quotation marks, signatures, years, endorsement ordinals, and the stat percentage symbol. The key insight is that the system never uses Instrument Serif for \"normal\" running text — only for moments of human expressiveness.\n- **JetBrains Mono**: Weights 400 and 500. All labels are uppercase with 0.10–0.18em letter-spacing. Always secondary information: section markers, metadata, footnotes, legend categories, kickers, footer chrome.\n\n### The `em` Rule\nWithin any Bricolage Grotesque headline, an `<em>` tag triggers a switch to Instrument Serif at weight 400. This is the system's primary in-line typographic mix — a grotesque headline interrupted by a serif aside. Example: \"A short trajectory, told in *five stops*.\" The em portion reads as a quieter, more reflective counterpoint.\n\n### The `b` Rule (Quote Slide Only)\nWithin Instrument Serif blockquotes, a `<b>` tag triggers a switch back to Bricolage Grotesque weight 600 in burgundy. The reverse of the em rule — a serif quote punctuated by a grotesk emphasis.\n\n### Display Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-stat}` | 540px | Bricolage Grotesque | 700 | Full-bleed oversized stat or number figure |\n| `{typography.display-closer}` | 320px | Bricolage Grotesque | 700 | Jumbo title or closing wordmark |\n| `{typography.display-wordmark}` | 300px | Bricolage Grotesque | 800 | Primary wordmark or deck title |\n| `{typography.display-stat-unit}` | 220px | Instrument Serif | 400 | Accent symbol alongside a stat figure |\n| `{typography.chapter-num}` | 240px | Instrument Serif | 400 | Large chapter or section numeral |\n| `{typography.quote-mark}` | 200px | Instrument Serif | 400 | Decorative large quotation mark |\n| `{typography.display-xl}` | 84px | Bricolage Grotesque | 700 | Section headline for data or chart layouts |\n| `{typography.display-lg}` | 76px | Bricolage Grotesque | 700 | Section headlines |\n| `{typography.signature}` | 64px | Instrument Serif | 400 | Signature or sign-off element |\n| `{typography.lede}` | 56px | Bricolage Grotesque | 500 | Lede or opening statement |\n| `{typography.quote-heading}` | 56px | Bricolage Grotesque | 600 | Panel heading or editorial subhead |\n| `{typography.endorsement-num}` | 56px | Instrument Serif | 400 | Endorsement or list ordinals |\n| `{typography.timeline-year}` | 56px | Instrument Serif | 400 | Year stamps or large ordinal accents |\n| `{typography.subhead-serif}` | 48px | Instrument Serif | 400 | Secondary subheads on dark surfaces |\n| `{typography.cover-pill}` | 44px | Bricolage Grotesque | 500 | Large tag cloud or keyword pills |\n| `{typography.chart-title}` | 40px | Instrument Serif | 400 | Card or panel title |\n| `{typography.card-title}` | 40px | Bricolage Grotesque | 600 | Card or value title |\n\n### Body and Label Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.body-lg}` | 28px | Bricolage Grotesque | 400 | Manifesto right-column body |\n| `{typography.body-md}` | 26px | Bricolage Grotesque | 600/400 | Attribution name, endorsement body |\n| `{typography.body-sm}` | 24px | Bricolage Grotesque | 400 | Card descriptions, stat annotation, closer index |\n| `{typography.label}` | 24px | JetBrains Mono | 400 | Standard section labels (0.15em tracking) |\n| `{typography.label-wide}` | 24px | JetBrains Mono | 400 | Kickers on dark slides (0.18em tracking) |\n| `{typography.label-mid}` | 24px | JetBrains Mono | 400 | Manifesto bottom meta (0.12em) |\n| `{typography.label-tight}` | 24px | JetBrains Mono | 400 | Legend categories, breakdown labels (0.10em) |\n| `{typography.footer}` | 16px | JetBrains Mono | 400 | Page footer chrome (0.12em, opacity 0.75) |\n\n### Principles\nBricolage Grotesque's optical-size axis makes the face significantly more expressive at large sizes and more legible at small sizes without changing weight. At 540px and 300px (stat and wordmark), the display renders with wide, open letterforms; at 24px (body), it compresses. Both are weight 700 or 800 at display; both are weight 400 at body. The face is never used in intermediate sizes (48–72px) — that zone belongs to Instrument Serif.\n\nLetter-spacing on Bricolage Grotesque is always negative at display: -0.04em at 300px, -0.05em at 320px, -0.06em at 540px. At body sizes (24–28px), no letter-spacing is applied.\n\nJetBrains Mono label tracking is always positive and varies by use: 0.10em for dense data contexts, 0.12em for secondary meta, 0.15em for standard section labels, 0.18em for headline kickers on dark slides.\n\n## Layout\n\n### Canvas System\nEvery slide is exactly 1920×1080px. The `deck-stage` custom element handles centering and scaling.\n\n### Gutter System\n- **Chrome gutter** (64px left/right): Used by footer chrome and most content edges.\n- **Generous slide padding** (96px): Most slides use `padding: 96px 64px` — the top/bottom pad is larger than the sides, giving a portrait-publication feel even on landscape slides.\n- **Wide slide padding** (88px top on chart slide): Slight reduction to accommodate the two-column layout.\n\n\n### Slide Internal Spacing Pattern\nEach slide follows a top-to-bottom reading order:\n1. Section marker (`§ XX — Title`, JetBrains Mono, 24px, label tracking)\n2. Headline or major content\n3. Body / grid content\n4. Footer meta (absolute, bottom 36px)\n\n## Elevation and Depth\n\nThe system uses **no box shadows at all**. Depth comes entirely from:\n\n### Color Surface Contrast\nThe burgundy/butter/pink trio creates its own depth hierarchy:\n- Butter surfaces feel \"forward\" (warm, light)\n- Pink feels \"accented\" (warm, mid)\n- Burgundy feels \"recessed\" (dark, anchoring)\n\nAlternating surface colors within split slides (cream left / burgundy right on manifesto; lime left / burgundy right on quote) creates depth through edge contrast rather than shadow.\n\n### Opacity Dividers\nOn dark (burgundy) surfaces, all dividers and structural lines use rgba rather than solid colors:\n- Row separators in stat breakdown: `rgba(246,237,220,0.25)`\n- Endorsement rows in quote slide: `rgba(246,237,220,0.30)`\n- Timeline axis: `opacity: 0.15` on solid burgundy\n\nThe cream values (246,237,220) in those rgba strings approximate the butter color at full opacity — dividers feel like recessed etchings rather than drawn lines.\n\n### Chart Card Lift\nThe chart card (slide 6) achieves its \"lifted\" feeling through border-radius 32px on a butter card placed over a burgundy background. No shadow — the rounded corner on a contrasting surface signals elevation.\n\n## Shapes and Treatment\n\n### Border Radius Scale\n| Value | Use |\n|---|---|\n| 999px | All pills, timeline ribbon, swatch circles, avatar, breakdown bars, timeline dots, footer dots, chart data circles |\n| 32px | Chart card (slide 6) |\n| 28px | Value cards (slide 3) |\n| 4px | SVG chart bars (rx=\"4\") |\n| 0px | Section headlines, grid cells (no rounding) |\n\nThe system has a strong binary: either fully rounded (pills, circles) or square (content blocks). The exception is the chart card (32px) and value cards (28px) — large enough radius to feel \"soft\" but geometric rather than circular.\n\n### Pill System\nPills are the universal label/tag component. Three size variants:\n- **Cover pills**: 44px font, 16px 38px padding — large enough to read as headline elements in the tag cloud\n- **Standard pills** (section labels, legend items): 22–24px font, 10–12px 24–28px padding\n- **Color assignments** alternate: burgundy-bg/pink-text and butter-bg/burgundy-text on cover; burgundy/cream or lime/ink on closer\n\n### SVG Chart (Slide 6)\nThe inline SVG chart at 720×380 viewBox combines four series types deliberately to demonstrate the range of a single chart surface:\n- **Area series** (Series A): Filled path with pink fill at 0.85 opacity, burgundy stroke at weight 3\n- **Bar series** (Series C): Burgundy rectangles with rx=\"4\"\n- **Connected circle series** (Series B): Butter circles (r=8) with burgundy stroke/fill on a burgundy line at weight 3\n- **Dotted line** (Series D): Burgundy dashed stroke (stroke-dasharray=\"2 10\", stroke-linecap=\"round\") at 60% opacity\n\nY-axis labels are JetBrains Mono 24px at 60% opacity, left-aligned to x=0.\n\n## Do's and Don'ts\n\n### Do\n- Treat the three hex values as a closed system. Every element uses pink, butter, or burgundy — no neutrals, no grays, no white.\n- Use Instrument Serif only for moments of human expressiveness: numerals, years, signatures, quotation marks, endorsement ordinals. Never for running body text.\n- Use the `em` tag in Bricolage Grotesque headlines to trigger the serif switch. This is the system's primary inline mix and its clearest editorial voice.\n- Give all label text (JetBrains Mono) positive letter-spacing between 0.10em and 0.18em. Monospace without tracking reads as code, not editorial.\n- Alternate surface colors across the two-column split slides. One side is always butter, the other always burgundy.\n- Keep body text in Bricolage Grotesque at weights 400 (text) and 500–600 (emphasized labels). The weight axis is the tonal dial.\n- Use pills at multiple sizes — the pill is the universal tag and its size signals context: 44px for headline-level categorization, 22–24px for utility labels.\n- Section markers follow the pattern `§ NN — Title` in JetBrains Mono — every slide opens with this convention.\n\n### Don't\n- Don't introduce a fourth color. The tri-tone constraint is the design premise.\n- Don't use Instrument Serif at small sizes or in body paragraphs. It is purely an accent face.\n- Don't break the em rule — using Bricolage Grotesque italic instead of Instrument Serif for inline emphasis loses the typographic mix.\n- Don't use letter-spacing on Bricolage Grotesque at display sizes — only negative tracking via `letter-spacing: -0.02em` to `-0.06em` depending on size.\n- Don't add solid-color dividers on dark (burgundy) surfaces. All structural lines on dark backgrounds must use low-opacity rgba.\n- Don't apply box shadows. The system has none. Depth comes from surface contrast and border-radius on contrasting backgrounds.\n- Don't round large content containers (section panels, grid backgrounds). Rounding applies only to pill-scale and card-scale elements (value cards, chart card).\n- Don't use Bricolage Grotesque weight 800 except in the wordmark. The weight 800 is reserved for the single largest typographic moment.\n\n## Responsive Behavior\n\nThis template is designed **exclusively for 1920x1080 presentation display**. The `deck-stage` web component handles viewport scaling via CSS transforms; the 1920x1080 canvas scales proportionally to any screen without layout changes.\n\n### Presenter Behavior\n- Slide advancement via keyboard or presentation clicker (handled by `deck-stage.js`).\n- No hover states are defined.\n- No interactive elements.\n\n### Print / Export\n- At 96dpi, 1920x1080 maps to a 20x11.25 inch frame.\n- The stat figure at 540px renders at ~405pt — suitable for large-format print.\n- The three-color palette is print-safe; burgundy is a deep PMS-range wine tone, butter is a warm yellow, pink is a muted blush — all reproduce well in CMYK offset.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display wordmark / closer / stat (300–540px) | 站酷小薇体 ZCOOL XiaoWei | 400 | A literary decorative serif with the same expressive personality as Bricolage Grotesque + Instrument Serif italic at extreme scale |\n| Section headlines (76–84px) | 思源黑体 Noto Sans SC | 700 | The grotesque equivalent in CJK — carries the Bricolage Grotesque structural weight |\n| Chapter numerals / quote marks / years (200–240px) | 霞鹜文楷 LXGW WenKai | 400 | Hand-set warmth that matches Instrument Serif's expressive accent role |\n| Body paragraph (24–28px) | 思源宋体 Noto Serif SC | 400 | Mincho body voice; literary register |\n| Lede / quote-heading (56px) | 思源黑体 Noto Sans SC | 500–600 | Matches Bricolage Grotesque weight 500/600 |\n| Mono label / section marker / footer | 思源等宽 Noto Sans Mono CJK SC | 400–500 | Preserves the JetBrains Mono chrome quality for `§ NN — Title` markers |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Bricolage Grotesque (display, body) and Instrument Serif (italic accents) as the Latin faces and fall back to the Chinese stack only for CJK glyphs. The literary-magazine identity of Editorial Tri-Tone depends on Bricolage Grotesque's optical-size axis and Instrument Serif's italic cut as part of the brand voice; replacing them wholesale with a CJK family would flatten the system into \"generic Chinese editorial.\" Stack:\n\n```css\n/* Bricolage Grotesque roles (display, body) */\nfont-family: 'Bricolage Grotesque', 'Noto Sans SC', sans-serif;\n/* Instrument Serif roles (chapter-num, quote-mark, year, signature) */\nfont-family: 'Instrument Serif', 'LXGW WenKai TC', serif;\n/* JetBrains Mono roles (labels, section markers) */\nfont-family: 'JetBrains Mono', 'Noto Sans Mono CJK SC', monospace;\n```\n\nThe system's signature `<em>` rule (Bricolage Grotesque → Instrument Serif italic inline) is what carries the editorial tone in Latin. The CJK equivalent: an `<em>` inside a 思源黑体 (Noto Sans SC) headline should switch to **站酷小薇体 (ZCOOL XiaoWei)** — a decorative literary serif with the same softness contrast as Instrument Serif italic. Add a CSS rule:\n\n```css\nh1 em, h2 em, .lede em, .quote-heading em {\n  font-family: 'Instrument Serif', 'ZCOOL XiaoWei', 'LXGW WenKai TC', serif;\n  font-style: italic; /* Latin only — CJK ignores font-style */\n}\n```\n\nWatch for baseline mismatch at display sizes (300–540px): Bricolage Grotesque at -0.04em to -0.06em tracking sits visually tighter than Noto Sans SC, so a mixed-script wordmark like `INTO 中国` may feel uneven. For hero / wordmark moments, prefer single-script lines and let the second script live on its own line below.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>` (or as a second link tag):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700&family=Noto+Serif+SC:wght@400;500;700&family=LXGW+WenKai+TC&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n```\n\nZCOOL XiaoWei is the decorative-terminal serif used for the em-switch role; it's hosted on Google Fonts at weight 400 only.\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.78–0.92 on display, 1.4–1.45 on body) read as cramped in Chinese. Bump display to 0.95–1.05 and body to 1.5–1.6.\n- **Remove negative letter-spacing on CJK headlines.** Bricolage Grotesque display uses -0.04em to -0.06em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Latin portion was meant to be capitalized.\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between Noto Sans SC, Noto Serif SC, and ZCOOL XiaoWei inside the same sentence — pick the face that matches the role (headline = Noto Sans SC, body = Noto Serif SC, em-accent = ZCOOL XiaoWei) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nEditorial Tri-Tone's literary-magazine voice depends on the typographic contrast between Bricolage Grotesque (structural) and Instrument Serif italic (expressive). In Chinese, that same contrast lives in the **思源黑体 ↔ 站酷小薇体** pairing — a clean grotesque set against a literary decorative serif. The em-rule inside headlines should switch from 思源黑体 to **站酷小薇体** specifically (not 霞鹜文楷, which is warmer but less \"literary-decorative\"); this preserves the typographic mix that defines the system.\n\nFor the system's signature display moments — the 300px wordmark, the 540px stat figure, the 240px chapter numeral — Chinese is at its loudest. Reach for **站酷小薇体** when the moment is decorative (a chapter ordinal \"第一章\" rendered in literary serif) and **思源黑体 weight 700** when the moment is structural (a section headline like \"我们的方法\"). The 200px quote-mark glyph is harder in Chinese — Chinese quotation marks (「」) don't carry the same decorative weight as Latin 'curly quotes', so consider rendering the entire quote moment in the Latin glyph (using the `Instrument Serif` face on the punctuation character itself) and let the body text below switch to 思源宋体.\n\nThe section marker convention `§ NN — Title` works in Chinese: `§ 02 — 我们的承诺`. Keep the section sign and the numeral in JetBrains Mono / Noto Sans Mono CJK SC; the title text can switch to 思源黑体 weight 400 with 0.05em tracking to preserve the chrome quality.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is the right aesthetic match for the em-switch role, but it ships as **weight 400 only with no italic cut**. Chinese has no italic concept (slanted Han glyphs read as broken, not emphasized), so the lack of italic is fine — but the visual softness contrast that Instrument Serif italic provides in Latin (a slanted, more flowing letterform) cannot be exactly replicated in Chinese. The decorative-terminal serif quality of ZCOOL XiaoWei provides the closest equivalent, but the contrast against 思源黑体 is **face-based, not slant-based**. Decks with heavy reliance on the em-rule should test the visual rhythm in Chinese before committing — if the contrast feels muted, increase the em-portion font-size by 4–8px to compensate.\n\n## Iteration Guide\n\n1. Section labels always use the `§ NN — Title` convention in JetBrains Mono with `{typography.label}` tracking.\n2. Every headline with an em/italic moment uses `<em>` to trigger Instrument Serif. Never use `font-style: italic` on Bricolage Grotesque directly.\n3. Value card alternation: odd-numbered cards (c1, c3, c5, c7) are dark (burgundy/butter); even-numbered (c2, c4, c6, c8) are light (butter/burgundy).\n4. New dark-surface sections use `rgba(246,237,220,0.25)` for dividers — not `{colors.butter}` at full opacity.\n5. New pills follow the existing alternation: burgundy-bg/pink-text and butter-bg/burgundy-text for variety in clusters.\n6. Adding a chart series: use the four established visual encodings (area, bars, circles, dotted line) before inventing a new one.\n7. All section backgrounds must be one of the three palette colors — never mix (no half-pink half-butter).\n8. Footer chrome is shared across all slides: `position:absolute; left:64px; right:64px; bottom:36px; font-family:JetBrains Mono; font-size:16px; opacity:0.75`.\n\n## Known Gaps\n\n- The `deck-stage.js` script is an external dependency not documented here.\n- The footer dot-row progress indicator (`.footer .dotrow`) is rendered in the HTML but the dots are all styled with class \"on\" or left as inactive — a presenter would need to update slide state dynamically.\n- The SVG chart uses hardcoded paths, coordinates, and placeholder values — no data-binding layer exists.\n- The breakdown bars in slide 4 use inline `width: XX%` as a style — percentages must be set manually.\n- The timeline stop dots (`.stop .dot`) have `display: none` — they are styled but not visible. A presenter populating this slide would enable them via CSS.\n- Instrument Serif italic is loaded as a font variant but is not explicitly called with `font-style: italic` in every context — in some cases the browser selects it from the variable font's italic axis automatically based on surrounding context.\n- Color swatch circles on slide 4 reference `--terracotta` and `--sky`, which resolve identically to `--butter` and `--pink` — the visual distinction exists only semantically in the source, not visually.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/preview.md":"# Editorial Tri-Tone Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/editorial-tri-tone/design.md`\n- Preview card: `bold-template-pack/templates/editorial-tri-tone/preview.md`\n\n## Selection Metadata\n\n- Slug: `editorial-tri-tone`\n- Tagline: Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif.\n- Mood: editorial, warm, intentional, moody\n- Tone: literary, warm, considered, stylish\n- Formality: medium-high\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews. Equally good for any deck — including tech, research, or business — that wants tri-tone discipline and serif/sans contrast instead of the usual neutrals.\n- Avoid for: Decks that need to read as soft or comforting — the burgundy/pink/cream tri-tone is intentionally high-contrast and styled.\n\n## Visual Snapshot\n\nA literary magazine-meets-annual-report presentation system built on a strict three-color palette — blush pink, golden butter, and deep burgundy wine. Despite having eleven CSS variable names, only three hex values exist in the entire system; every alias is a semantic rename of one of those three. Headlines run Bricolage Grotesque (a variable grotesque with an optical-size axis) at extreme weights and negative letter-spacing. Instrument Serif (italic-cut only) appears as the expressive accent face for chapter numerals, pull-quotes, years, and signatures. JetBrains Mono carries all metadata, labels, and section markers at tight uppercase tracking. The aesthetic is \"independent arts publication\" — the kind with a colophon, hand-numbered editions, and an editorial desk.\n\nEditorial Tri-Tone is a literary magazine presentation system built on the strictest possible palette: three hex values, eleven CSS variable names. The naming system reveals editorial intent — --pink and --sky point at the same blush; --cream, --butter, --lime, and --terracotta all resolve to the same golden yellow; --burgundy, --navy, --forest, and --ink all collapse to the same deep wine. The aliases exist to communicate the role of the color in context, not to introduce variation.\n\n## Preview Ingredients\n\n- Palette: pink #F2B6C6; butter #F2D86A; burgundy #7A1F35\n- Typography: Bricolage Grotesque; Instrument Serif; JetBrains Mono\n- Signature move: Three-color palette with semantic aliases: blush pink (#F2B6C6), golden butter (#F2D86A), deep burgundy (#7A1F35).\n- Signature move: Mixed typography: Bricolage Grotesque grotesque for display and body; Instrument Serif for expressive accent numerals, quotes, and years; JetBrains Mono for all labels.\n- Signature move: The em tag within Bricolage Grotesque headlines always triggers a switch to Instrument Serif italic — the system's primary typographic mix.\n- Signature move: Pills (border-radius 999px) are the universal tag component; used at three different sizes across cover, chart legend, and closer.\n- Signature move: Value cards have a generous 28px border-radius — soft, rounded, not brutalist.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/emerald-editorial/design.md":"---\nversion: alpha\nname: Emerald Editorial\ndescription: \"A bold display-serif editorial system in the register of a fashion masthead or vintage magazine cover. Bodoni Moda runs at weight 900 across a wide scale (44–460px), set against a saturated emerald-green canvas with deep navy ink and oat-paper accents. The signature treatment is a stacked double-rule ornament that brackets centered display words like a 19th-century theatrical playbill. The aesthetic borrows from Harper's Bazaar / Vogue / Wallpaper covers: confident, theatrical, paper-and-ink committed, with a tight three-color palette and zero gradients or shadows.\"\n\ncolors:\n  bg: \"#3CD896\"\n  bg-2: \"#2DC684\"\n  bg-3: \"#25B377\"\n  ink: \"#0F1A5C\"\n  ink-2: \"#1B2774\"\n  ink-3: \"#3A4593\"\n  paper: \"#F1E9D6\"\n  rule: \"rgba(15, 26, 92, 0.22)\"\n  rule-strong: \"rgba(15, 26, 92, 0.85)\"\n\ntypography:\n  numeral-jumbo:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 460\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.04em\n  display-section:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 200\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.015em\n  display-cover:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 184\n    fontWeight: 900\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n  display:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 130\n    fontWeight: 900\n    lineHeight: 0.96\n    letterSpacing: -0.015em\n  display-md:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 128\n    fontWeight: 900\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n  display-sm:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 120\n    fontWeight: 900\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n  headline-xl:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 104\n    fontWeight: 900\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n  headline:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 92\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.02em\n  ornament-word-lg:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 84\n    fontWeight: 800\n    lineHeight: 1\n  ornament-word:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 76\n    fontWeight: 800\n    lineHeight: 1\n  ornament-word-sm:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 68\n    fontWeight: 800\n    lineHeight: 1\n  title-card-lg:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 64\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.005em\n  title-card:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 48\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.005em\n  title-card-sm:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 44\n    fontWeight: 800\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n  step-numeral:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 80\n    fontWeight: 900\n    lineHeight: 1\n  step-title:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 40\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.005em\n  kpi-figure:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 144\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  kpi-figure-unit:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 60\n    fontWeight: 800\n  stat-figure:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 92\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.02em\n  stat-figure-unit:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 48\n    fontWeight: 900\n  eyebrow:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 28\n    fontWeight: 800\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 26\n    fontWeight: 700\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  label-tight:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 26\n    fontWeight: 700\n    letterSpacing: 0.05em\n    textTransform: uppercase\n  tag:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 24\n    fontWeight: 800\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  caption:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 24\n    fontWeight: 700\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  body-lg:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 28\n    fontWeight: 500\n    lineHeight: 1.5\n  body:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 26\n    fontWeight: 500\n    lineHeight: 1.5\n  body-sm:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 24\n    fontWeight: 500\n    lineHeight: 1.45\n  credit:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 28\n    fontWeight: 700\n    letterSpacing: 0.18em\n    textTransform: uppercase\n\nspacing:\n  pad-default: \"110px 110px 70px\"\n  pad-cover: \"56px 110px\"\n  pad-closing: \"80px 110px\"\n  pad-statement: \"110px 110px 70px\"\n  masthead-inset: \"56px 80px\"\n  rule-thick: \"4px\"\n  rule-thicker: \"5px\"\n  rule-thin: \"2px\"\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  ornament-double-rule:\n    description: \"The system's signature treatment. A centered serif word framed by two stacked 4px horizontal rules on each side. The rules sit 3px apart on top and 3px apart on bottom, giving a 19th-century playbill / theatrical-poster bracket effect. Configurable via :root[data-ornament] to switch between double (default), single, or none.\"\n    ruleHeight: \"4px\"\n    ruleGap: \"3px\"\n    wordWeight: 800\n    wordFamily: \"'Bodoni Moda', serif\"\n  ornament-vertical:\n    description: \"An inline horizontal pair of stacked rules (each 4px tall, 8px apart) on either side of a small serif word. Used as a side bracket around connector words like prepositions.\"\n    ruleHeight: \"4px\"\n    ruleGap: \"8px\"\n    barWidth: \"64px\"\n  masthead:\n    position: \"absolute\"\n    placement: \"top: 56px, full-width between 80px side padding\"\n    layout: \"flex space-between\"\n    typography: \"{typography.label-tight}\"\n    color: \"{colors.ink}\"\n  footline:\n    position: \"absolute\"\n    placement: \"bottom: 56px, full-width between 80px side padding\"\n    layout: \"flex space-between\"\n    typography: \"{typography.label-tight}\"\n    color: \"{colors.ink}\"\n  rule-h-thick:\n    height: \"4px\"\n    background: \"{colors.ink}\"\n    description: \"Universal 4px horizontal rule used as section separator and tile/row border. The system's standard rule weight.\"\n  agenda-row:\n    description: \"A three-column grid row (130px / 1fr / 320px) with 4px ink top borders. Holds a serif ordinal, serif name, and sans-serif kind label. The last row in a list also carries a 4px bottom border, sealing the list.\"\n    rowPad: \"26px 0\"\n    topBorder: \"4px solid {colors.ink}\"\n  inverse-tile:\n    description: \"A solid {colors.ink} rectangle holding {colors.bg} text. Used for chart-card containers, kpi tiles, process steps, section-opener panels. Carries no corner radius and no shadow.\"\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"32px to 36px\"\n  paper-tile:\n    description: \"A solid {colors.paper} rectangle holding {colors.ink} text. The alt variant of inverse-tile — used in rotation across a row of process steps or kpi tiles to break the monotony of ink fills.\"\n    background: \"{colors.paper}\"\n    color: \"{colors.ink}\"\n  mark-pill:\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"10px 22px\"\n    fontWeight: 700\n    letterSpacing: 0.1em\n    fontSize: 24\n    textTransform: uppercase\n    description: \"A small ink-on-bg pill used as a category mark or section tag. No border-radius — strict rectangle.\"\n  tag-pill:\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"8px 20px\"\n    fontWeight: 700\n    letterSpacing: 0.12em\n    fontSize: 24\n    textTransform: uppercase\n  delta-pill:\n    background: \"{colors.bg}\"\n    color: \"{colors.ink}\"\n    padding: \"6px 16px\"\n    fontWeight: 800\n    letterSpacing: 0.08em\n    fontSize: 24\n    textTransform: uppercase\n    description: \"A small bg-on-ink delta indicator placed inside an inverse kpi tile to show change direction. Inverted to ink-on-bg when inside a paper-tile.\"\n  bar:\n    description: \"A vertical rectangular chart bar in bg (primary), paper (alt). Value label printed above bar in Bodoni 30px. No corner radius.\"\n    background: \"{colors.bg} or {colors.paper}\"\n  chart-card:\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"36px 50px 30px\"\n    gridLineColor: \"rgba(60, 216, 150, 0.22)\"\n    description: \"An ink container framing a bar chart on bg. Y-axis labels are Bodoni 26px on the left; x-axis labels are Manrope 24px. Grid lines are 2px at 22% bg-on-ink.\"\n  ornament-numeral-panel:\n    description: \"A full-bleed inverse panel (ink background) holding a single oversized Bodoni numeral (~460px weight 900) centered. Used as a section-opener device. Topbar / footline strings sit absolutely positioned in the panel corners.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nEmerald Editorial is a **bold display-serif editorial system** rooted in the visual language of fashion magazines and 19th-century theatrical playbills. The foundational premise is a single typographic face — **Bodoni Moda at weight 900** — used at unapologetic scale: 92px for routine headlines, 130–200px for statements and section openers, and 460px for hero numerals. The serif is loud, theatrical, and confident. Every slide leads with type, not with image.\n\nThe palette is a tight three-color editorial set: a **saturated emerald green** (`{colors.bg}` — #3CD896) as the dominant surface, a **deep navy ink** (`{colors.ink}` — #0F1A5C) as both the primary text color and the inverse-panel surface, and an **oat paper** (`{colors.paper}` — #F1E9D6) as the secondary surface for alternate tiles. The navy / emerald contrast is the system's chromatic identity; every body of text is navy-on-emerald or emerald-on-navy. Two near-duplicates of the emerald (`{colors.bg-2}`, `{colors.bg-3}`) and two of the navy (`{colors.ink-2}`, `{colors.ink-3}`) exist in the token system but are reserved — the published slides commit almost entirely to the three primaries.\n\nThe supporting typeface is **Manrope**, a humanist geometric sans, run at weight 500 for body paragraphs and weight 700–800 in uppercase with wide letter-spacing for every label, tag, eyebrow, caption, and footline. Manrope never crosses into display territory — it stops at 28px and stays in the chrome layer.\n\nThe signature treatment is the **double-rule ornament** — a centered serif word framed by two stacked 4px horizontal rules on each side, with 3px between the rules. This treatment appears as the cover's centerpiece and as a recurring statement bracket. It reads as a 19th-century playbill or vintage program — a \"The [word] of [word]\" framing device. The double-rule ornament is configurable to a single-rule or no-rule variant via a `:root[data-ornament]` attribute, but the double variant is the system's identity.\n\nDepth is **flat and ink-based**. There are no drop shadows, no gradients, no blur, no glow. Every surface is solid emerald, solid navy, or solid paper. Elevation happens through color-block inversion (a navy tile on the emerald canvas is the \"elevated\" element) and 4px ink rules separating sections. The whole system reads as printed ink on paper, not as a digital interface.\n\n**Density philosophy: medium-full and centered.** Most slides carry one display headline at scale (92–200px) plus 3–4 supporting elements (a stat row, a kpi grid, a process flow, a chart card). The slide padding of 110px gives breathing room, and the masthead/footline chrome at top and bottom anchors the page. A slide that crams six small elements reads as broken; a slide with one giant headline plus three supporting tiles reads as authoritative. Reach for fewer, larger elements. The exception: the agenda-list pattern (a vertical list of large-numbered rows separated by 4px ink rules) is naturally dense and fills the canvas vertically — and it should, when used.\n\n**Key Characteristics:**\n- Bodoni Moda at weight 900 for every display moment; Manrope at weight 500/700/800 for every body and label moment.\n- Saturated emerald canvas (`{colors.bg}`) with deep navy ink (`{colors.ink}`) text and inverse panels.\n- Double-rule ornament with centered serif word is the signature decorative device.\n- 4px ink horizontal rules separate every stacked section, every list row, every chart border. The 4px weight is the system's default rule.\n- No corner radius anywhere. Every shape is a strict rectangle, except for the round logo/typographic glyphs themselves.\n- No shadows, no gradients, no blur. Depth is color-block inversion + 4px rules.\n- Display type scales aggressively — 184–460px for hero / section-opener / closing moments.\n- Manrope chrome (labels, tags, captions) is always uppercase with 0.05em–0.18em letter-spacing.\n\n## Colors\n\n### Palette\n- **BG / Emerald** (`{colors.bg}` — #3CD896): The dominant slide canvas. A saturated, slightly cool emerald — saturated enough to feel like printed ink, not like a CSS preset. The default slide background.\n- **BG-2** (`{colors.bg-2}` — #2DC684): A slightly darker emerald reserved for tonal variation; available in the token system but used sparingly. Reach for it only when two emerald surfaces sit adjacent and need separation.\n- **BG-3** (`{colors.bg-3}` — #25B377): The darkest emerald variant; similarly reserved.\n- **Ink / Navy** (`{colors.ink}` — #0F1A5C): The deep navy primary. The text color on emerald and paper surfaces; the inverse-panel background color; the rule color; the border color. The system's structural color.\n- **Ink-2** (`{colors.ink-2}` — #1B2774): A slightly lighter navy variant — available for tonal contrast inside ink-on-ink situations, but rarely used.\n- **Ink-3** (`{colors.ink-3}` — #3A4593): The lightest navy variant; reserved.\n- **Paper** (`{colors.paper}` — #F1E9D6): The oat-cream secondary surface. Used as the alt-tile fill in process / kpi rows, as the alt bar-chart series, and anywhere a third \"warm\" surface is needed to break a row of all-navy inverse tiles. Carries `{colors.ink}` text.\n- **Rule** (`{colors.rule}` — `rgba(15, 26, 92, 0.22)`): A semi-transparent navy used only for subtle internal grid lines (e.g., chart grid lines on a dark ground). Not a structural rule color.\n- **Rule Strong** (`{colors.rule-strong}` — `rgba(15, 26, 92, 0.85)`): An 85%-opacity navy, available as a near-solid rule alternative.\n\n### Defaults\n- **Default slide background**: `{colors.bg}` (emerald). Reach for `{colors.ink}` (navy) as a full slide surface when the moment wants gravity (section opener, closing).\n- **Default headline color on emerald**: `{colors.ink}`.\n- **Default headline color on navy**: `{colors.bg}` — emerald-on-navy is the only color flip the system uses for display type.\n- **Default body color on emerald**: `{colors.ink}`.\n- **Default body color on navy**: `{colors.bg}`.\n- **Default body color on paper**: `{colors.ink}`.\n- **Default label / eyebrow / tag color**: `{colors.ink}` on emerald and paper surfaces, `{colors.bg}` on navy surfaces.\n- **Default rule color**: `{colors.ink}` at 4px solid. Always.\n- **Default inverse tile fill**: `{colors.ink}` with `{colors.bg}` text. The alt tile in a row uses `{colors.paper}` with `{colors.ink}` text.\n- **Default delta / pill fill** inside an ink tile: `{colors.bg}` background with `{colors.ink}` text. Inside a paper tile, invert to `{colors.ink}` background with `{colors.bg}` text.\n\nThe palette is intentionally tight. Introducing a fourth chromatic family (red, yellow, orange, lavender) shatters the editorial commitment. Stay inside emerald / navy / paper. The bg-2/3 and ink-2/3 variants exist for tonal nuance but should rarely be needed.\n\n## Typography\n\n### Font Family\nThe system loads several display serif families from Google Fonts (Bodoni Moda, Playfair Display, DM Serif Display, Rozha One, Yeseva One) plus Manrope as the supporting sans. **In practice, only Bodoni Moda is used for display** — the other serif families are loaded but dormant, reserved as future variants. Bodoni Moda is the canonical display face; the others are not part of the system's voice.\n\nBodoni Moda is run almost exclusively at **weight 900** — the heaviest cut. Weight 800 appears for small ornament words and tile titles (slightly less heavy so they don't compete with the primary headline). Weight 700 appears once or twice for the smallest ornament prepositions. There is no weight-500 Bodoni in the published system. The 900-weight commitment is what gives the system its theatrical-playbill voice.\n\nManrope handles everything else: body paragraphs at weight 500, labels / eyebrows / tags / captions at weight 700 or 800 in uppercase with 0.05em–0.18em letter-spacing. Manrope never appears at display scale; Bodoni never appears at chrome scale.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.numeral-jumbo}` | 460px | Bodoni Moda | 900 | Hero numeral on an inverse section-opener panel |\n| `{typography.display-section}` | 200px | Bodoni Moda | 900 | Agenda / section-title hero |\n| `{typography.display-cover}` | 184px | Bodoni Moda | 900 | Cover masthead title |\n| `{typography.display}` | 130px | Bodoni Moda | 900 | Statement / pull-quote scale |\n| `{typography.display-md}` | 128px | Bodoni Moda | 900 | KPI-row introductory headline |\n| `{typography.display-sm}` | 120px | Bodoni Moda | 900 | Process-flow introductory headline |\n| `{typography.headline-xl}` | 104px | Bodoni Moda | 900 | Chart / data introductory headline |\n| `{typography.headline}` | 92px | Bodoni Moda | 900 | Routine slide headline |\n| `{typography.ornament-word-lg}` | 84px | Bodoni Moda | 800 | Large ornament-bracketed word (statement variant) |\n| `{typography.ornament-word}` | 76px | Bodoni Moda | 800 | Standard ornament-bracketed word (cover variant) |\n| `{typography.ornament-word-sm}` | 68px | Bodoni Moda | 800 | Cover preposition between the double-rule brackets |\n| `{typography.kpi-figure}` | 144px | Bodoni Moda | 900 | KPI-tile numeral |\n| `{typography.kpi-figure-unit}` | 60px | Bodoni Moda | 800 | Unit suffix on a KPI numeral |\n| `{typography.stat-figure}` | 92px | Bodoni Moda | 900 | Secondary stat numeral (in a side panel) |\n| `{typography.stat-figure-unit}` | 48px | Bodoni Moda | 900 | Unit suffix on a secondary stat |\n| `{typography.title-card-lg}` | 64px | Bodoni Moda | 800 | Title inside a large card / agenda-row name |\n| `{typography.title-card}` | 48px | Bodoni Moda | 800 | Chart-card take-away title |\n| `{typography.title-card-sm}` | 44px | Bodoni Moda | 800 | Statement-supporting cell title |\n| `{typography.step-numeral}` | 80px | Bodoni Moda | 900 | Process-step ordinal |\n| `{typography.step-title}` | 40px | Bodoni Moda | 800 | Process-step title (sits below a top rule) |\n| `{typography.body-lg}` | 28px | Manrope | 500 | Lede / subtitle paragraph |\n| `{typography.body}` | 26px | Manrope | 500 | Standard body paragraph |\n| `{typography.body-sm}` | 24px | Manrope | 500 | Compact body in a tile / chart side panel |\n| `{typography.eyebrow}` | 28px | Manrope | 800 / 0.18em | Section eyebrow above a headline |\n| `{typography.label}` | 26px | Manrope | 700 / 0.08em | Masthead / footline label |\n| `{typography.label-tight}` | 26px | Manrope | 700 / 0.05em | Cover top/bottom strings |\n| `{typography.tag}` | 24px | Manrope | 800 / 0.12em | Inverse pill / tag (mark, delta, side-tag) |\n| `{typography.caption}` | 24px | Manrope | 700 / 0.1em | Agenda-row kind label, chart x-axis, kpi label |\n| `{typography.credit}` | 28px | Manrope | 700 / 0.18em | Author / org credit row |\n\n### Defaults\n- **Default size for a routine slide headline**: `{typography.headline}` (92px).\n- **Default size for a hero / cover-scale moment**: `{typography.display-cover}` (184px) or `{typography.display-section}` (200px).\n- **Default size for a body paragraph**: `{typography.body}` (26px) in Manrope weight 500.\n- **Default size for a body paragraph inside a tile**: `{typography.body-sm}` (24px).\n- **Default size for an eyebrow above a headline**: `{typography.eyebrow}` (28px) in Manrope 800 uppercase 0.18em.\n- **Default size for a tag / pill / chip**: `{typography.tag}` (24px) in Manrope 800 uppercase 0.12em.\n- **Default size for a KPI figure**: `{typography.kpi-figure}` (144px) with an optional 60px unit.\n- **Default weight for any Bodoni display moment**: 900. The 800 variant is reserved for ornament words and tile titles, never for primary headlines.\n- **Default weight for any Manrope body line**: 500.\n\nWhen unsure, reach for `{typography.headline}` (92px) for the slide's primary headline. The 120–200px tier is reserved for section openers, statements, and KPI-row headlines — using it for routine headlines flattens the hierarchy.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every primary Bodoni headline runs at weight 900 with negative letter-spacing (-0.01em to -0.03em) and tight line-height (0.9–0.95).** A weight-700 or weight-800 Bodoni headline reads as a sub-headline, not a primary moment.\n- **Every Manrope label, eyebrow, tag, caption, footline, and credit element is UPPERCASE with letter-spacing of at least 0.05em.** Manrope in sentence case or with default tracking reads as web app body, not editorial chrome.\n- **The double-rule ornament, when used, is bilateral — rules on both sides of the centered word.** A one-sided ornament breaks the bracket symmetry. The ornament can be downgraded to a single-rule or no-rule variant via `:root[data-ornament]`, but the default and recommended form is double.\n- **Every section separator and tile divider is a 4px solid `{colors.ink}` rule.** Never 1px, never 2px, never colored beyond ink. The 4px weight is the system's structural rhythm.\n- **Inverse tiles always carry `{colors.ink}` background with `{colors.bg}` text.** The alt paper tile carries `{colors.paper}` background with `{colors.ink}` text. Color combinations outside these pairings break the system's printed-ink discipline.\n- **Bodoni numerals at jumbo scale (200px+) live on inverse navy panels.** Putting a 460px numeral on the emerald canvas is technically possible but visually breaks the panel-anchored playbill voice; the jumbo numerals belong inside ink panels.\n\n### Typography Principles\nThe weight 900 + negative tracking + tight leading combination is the system's display voice. Switching any of those three properties (e.g., weight 700, or default tracking, or 1.2 leading) reads as a different design system. The serif/sans role split is strict: Bodoni never appears at body / label scale, Manrope never appears at display scale.\n\nItalics are loaded in the Bodoni font request but not used in the published system — keep them out unless intentionally introducing a new pattern. Underline is not used. Emphasis is communicated through size, color inversion, and ornamentation.\n\n## Layout\n\n### Canvas System\nThe system targets a fixed **1920×1080** canvas. Slides are `<section class=\"slide\">` elements at exact width/height. Rendering relies on `deck-stage.js` to scale the canvas to fit the viewport. The canvas is paper-stock, not a viewport — designed for projector, printer, or PDF export at 16:9.\n\n### Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-default}` | 110px 110px 70px | Standard content slide (asymmetric — slightly less bottom for footline) |\n| `{spacing.pad-cover}` | 56px 110px | Cover slide (less top padding to give masthead room) |\n| `{spacing.pad-closing}` | 80px 110px | Closing slide |\n| `{spacing.masthead-inset}` | 56px top, 80px sides | Absolute masthead / footline inset on cover and closing |\n\n### Chrome Anatomy\nThe cover and closing carry a **masthead** at top (a Manrope flex row with two label strings on opposite sides) and a **footline** at bottom (a matching row). Content slides typically skip the masthead and footline, leaning on the 110px-top padding to give the headline space. When the masthead is used, it lives at `top: 56px, left/right: 80px`.\n\n### Card and Tile Treatment\nThe system has **no border-radius anywhere**. Cards, tiles, kpi panels, ornament rules, mark pills, tag pills — all strict rectangles. The only round shapes are the natural curves of the Bodoni glyphs themselves. The visual rhythm comes entirely from rectangle composition and 4px ink rules.\n\n### Rule Weights\n| Weight | Use |\n|---|---|\n| 2px | Chart grid lines (subtle, semi-transparent) |\n| 4px | Universal structural rule — section separators, list-row borders, tile top rules |\n| 5px | Cover ornament rules (slightly heavier so they hold weight next to the 184px display headline) |\n| 18px height (with 4px rule top + 4px rule bottom) | Double-rule ornament span |\n\nThe 4px weight is the system's default; reach for it unless the moment specifically needs the cover's heavier 5px rules.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThe system uses **zero shadows**. No box-shadow, no text-shadow, no filter blur, no gradient. Elevation is communicated entirely through:\n\n1. **Color-block inversion** — a navy tile on the emerald canvas is the system's \"elevated\" element. Inversion is the depth language.\n2. **4px ink rules** — sections are separated by 4px solid navy lines that read as paper-fold creases between regions.\n3. **Solid panels with no border-radius** — the strict-rectangle treatment combined with full inverse fill gives tiles the weight of printed ink blocks.\n\nThere is no soft-glow, no glass, no neumorphism. Adding box-shadow shatters the printed-ink discipline.\n\n### Section-Opener Panel\nA signature elevation device: a slide can be split into a full-bleed two-column grid where the left side is a solid `{colors.ink}` panel holding a jumbo Bodoni numeral (`{typography.numeral-jumbo}` at 460px) and the right side is the standard emerald canvas with headline + lede + category marks. The panel reads as a magazine title-page opening — heavy, anchored, ceremonial. Treat this as an opener pattern, not a routine slide layout.\n\n## Shapes and Treatment\n\n### Border Radius\n**Zero.** Every shape is a strict rectangle. Pills, tags, tiles, panels, bars, mastheads, footlines, ornament words — all square corners.\n\n### Border / Rule Style\n- **4px solid `{colors.ink}`** — universal structural rule. Section separators, list-row borders, tile internal rules.\n- **5px solid `{colors.ink}`** — the cover ornament's slightly heavier rule.\n- **4px solid `currentColor`** — used inside tiles where the rule should match the tile's text color (e.g., a paper tile's internal rule is `{colors.ink}`; an ink tile's internal rule is `{colors.bg}`).\n\nRules are never dashed, never dotted, never colored beyond the ink / currentColor pattern.\n\n### Decorative Element Types\n\n**Double-Rule Ornament** (`{components.ornament-double-rule}`) — The system's signature. A centered serif word framed by two stacked 4px horizontal rules on each side (3px between them). Used on the cover (\"The [word] of [word]\" framing), on statement slides (around a small connector word), and anywhere a typographic moment needs theatrical bracketing. Configurable to single-rule or no-rule via `:root[data-ornament]`.\n\n**Vertical Side-Bracket** (`{components.ornament-vertical}`) — A smaller inline variant: a pair of stacked 4px rules on the left and a matching pair on the right of a small serif preposition. Used inline within a sentence rather than as a centered span.\n\n**Masthead / Footline** (`{components.masthead}`, `{components.footline}`) — Absolutely positioned flex rows at top/bottom of cover and closing slides. Two Manrope uppercase strings on opposite sides (e.g., publication name + date; section + page number). Establishes the magazine-page identity.\n\n**Inverse Tile** (`{components.inverse-tile}`) — A solid `{colors.ink}` rectangle holding `{colors.bg}` text. Used as a chart-card container, a kpi tile, a process step, a side panel. No border-radius, no shadow.\n\n**Paper Tile** (`{components.paper-tile}`) — The alt variant: solid `{colors.paper}` with `{colors.ink}` text. Used in rotation across a row of inverse tiles to break monotony (e.g., a four-step process flow alternates ink → paper → ink → paper).\n\n**Mark Pill** (`{components.mark-pill}`) — A small ink-on-bg pill used as a category mark or section tag in the bottom margin of a section opener. Strict rectangle.\n\n**Tag Pill** (`{components.tag-pill}`) — Slightly smaller pill variant used inside chart sides and kpi tiles to mark a takeaway or stat type.\n\n**Delta Pill** (`{components.delta-pill}`) — A bg-on-ink (or inverted ink-on-bg when inside a paper tile) chip showing a directional change indicator (e.g., \"↑ 12% YoY\"). Lives at the corner of a kpi tile.\n\n**Agenda Row** (`{components.agenda-row}`) — A three-column grid row separated above and below by 4px ink rules. Holds a serif ordinal in the left column, a serif name in the middle, and a Manrope kind label in the right. Stacked agenda rows form the system's table-of-contents pattern.\n\n**Chart Card** (`{components.chart-card}`) — A navy inverse panel holding a bar chart on emerald + paper bars. Y-axis labels in Bodoni; x-axis labels in Manrope. Grid lines are 2px at 22% opacity emerald-on-navy. The panel reads as a magazine data-spread.\n\n**Ornament Numeral Panel** (`{components.ornament-numeral-panel}`) — A full-bleed inverse half-slide holding a single Bodoni numeral at 460px. Topbar / footline strings sit in the corners. Used as a section-opener device only.\n\n## Do's and Don'ts\n\n### Do\n- Run every Bodoni display headline at weight 900 with negative letter-spacing (-0.01em to -0.03em) and tight line-height (0.9–0.95). The combination is the system's voice.\n- Run every Manrope label / eyebrow / tag / caption / footline in uppercase with at least 0.05em letter-spacing. Manrope in sentence case loses the editorial register.\n- Default slide background to `{colors.bg}` (emerald). Reach for `{colors.ink}` as a full slide surface only for section openers and closing moments.\n- Use 4px solid `{colors.ink}` rules for every section separator, list border, tile divider. The 4px weight is the system's structural rhythm.\n- Reach for the double-rule ornament when a typographic moment needs theatrical framing — especially around small connector words (\"of\", \"in\", \"for\") between two display headlines.\n- Use inverse tiles (`{colors.ink}` bg with `{colors.bg}` text) as the default elevated element. Rotate in paper tiles to break a row of all-inverse fills.\n- Scale display type aggressively — 130–460px for hero, section-opener, and statement moments. The system rewards scale.\n- Pair ink-on-bg with bg-on-ink for color flips. Do not introduce a third color flip (paper-on-ink, ink-on-paper) without a clear semantic reason.\n- Keep every shape a strict rectangle. The no-radius commitment is the system's signature alongside the double-rule ornament.\n\n### Don't\n- Don't add box-shadow, text-shadow, gradient, or blur to any element. The system is flat printed-ink only.\n- Don't introduce a third typeface beyond Bodoni Moda and Manrope. The other serif families in the Google Fonts request (Playfair, DM Serif, Rozha, Yeseva) are loaded but not part of the published voice — adding them shatters the Bodoni commitment.\n- Don't run Bodoni at weight 500 or lighter. The system commits to 900 (default), 800 (ornament words, tile titles), and 700 (small prepositions only).\n- Don't render Manrope in sentence case or without letter-spacing. Manrope is always uppercase chrome.\n- Don't introduce a fourth chromatic family. The emerald / navy / paper triad is the entire palette.\n- Don't use border-radius on any element. Zero radius is the system's signature.\n- Don't use 1px or 2px structural rules. The 4px weight is the structural default; 2px is reserved for subtle chart grid lines.\n- Don't place a 460px numeral on the emerald canvas without an ink panel anchor. Jumbo numerals live on inverse navy panels.\n- Don't crowd a slide with six small elements. One display headline + 3–4 supporting tiles is the rhythm; more elements need a smaller scale and break the editorial register.\n- Don't omit the masthead / footline on cover and closing slides. The chrome is what makes them read as magazine title pages.\n\n## Responsive Behavior\n\nThis is a **fixed 1920×1080 presentation system** rendered through `deck-stage.js`. The canvas is not responsive in the CSS sense — there are no media queries, no breakpoints, no fluid sizing. Every measurement is in fixed pixels at 1920×1080.\n\n### Scaling Behavior\n`deck-stage.js` wraps each `<section class=\"slide\">` and scales the 1920×1080 canvas uniformly to fit the browser viewport, letterboxing as needed. Type, padding, gaps, and rule weights are all fixed pixels and scale proportionally with the canvas.\n\n### Presenter Behavior\nNavigation is delegated to `deck-stage.js`. Each `<section class=\"slide\">` is one frame; the runtime handles transitions.\n\n### Print / Export\nFixed-pixel measurements inside a 1920×1080 canvas export cleanly to PDF at 16:9. Bodoni Moda renders well at print resolution because the heavy display weight carries the page even at large physical sizes.\n\n### Ornament Variant Switch\nThe `:root[data-ornament]` attribute controls a global ornament style: `\"double\"` (default, two stacked rules), `\"single\"` (one rule centered), or `\"none\"` (no rule, word floats alone). This is a presentation-level decision per deck, not per slide.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display headline (92–460px) | 霞鹜文楷 LXGW WenKai (with Noto Serif SC fallback at 900) | 400 / 900 | LXGW WenKai's hand-lettered warmth is the closest Chinese analog to Bodoni Moda's theatrical-playbill voice; Noto Serif SC at weight 900 carries the structural mass at jumbo sizes |\n| Stat / KPI figure (144px+) | 思源宋体 Noto Serif SC | 900 | Mincho weight 900 provides the printed-ink mass Bodoni Moda achieves at 900 |\n| Body paragraph (24–28px) | 思源宋体 Noto Serif SC | 400 | Mincho body voice for warm magazine-spread reading |\n| Eyebrow / label / tag (24–28px) | 思源黑体 Noto Sans SC | 700–800 | Replaces Manrope for chrome-layer Chinese; geometric humanist quality |\n| Tile mark / pill / caption | 思源黑体 Noto Sans SC | 700 | Maintains the uppercase-tracked chrome feel for inverse pills and tags |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Bodoni Moda as the Latin display face and let CJK glyphs fall through to LXGW WenKai (display) or Noto Serif SC (body). The Bodoni Moda commitment at weight 900 is the entire brand identity of Emerald Editorial; replacing it with a CJK family would break the fashion-magazine / 19th-century playbill register that defines the deck. Stack:\n\n```css\n/* Bodoni Moda roles (every display moment) */\nfont-family: 'Bodoni Moda', 'LXGW WenKai TC', 'Noto Serif SC', Georgia, serif;\n/* Manrope roles (every chrome / body moment) */\nfont-family: 'Manrope', 'Noto Sans SC', system-ui, sans-serif;\n```\n\nThe per-glyph fallback strategy lets Latin words render in Bodoni 900 (with the theatrical compression that gives the system its voice) and Chinese characters render in LXGW WenKai or Noto Serif SC. Baseline mismatch at jumbo sizes (200–460px) is the biggest watchpoint — Bodoni Moda at -0.03em tracking sits visually denser than LXGW WenKai, so a mixed-script numeral panel like `第 3 期` may show wobble. For section-opener panels with jumbo numerals, prefer all-numeric (Bodoni) or all-Chinese (LXGW WenKai) lines.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>` (or as a second link tag):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=LXGW+WenKai+TC&family=Noto+Serif+SC:wght@400;700;900&family=Noto+Sans+SC:wght@500;700;800&display=swap\" rel=\"stylesheet\">\n```\n\nLXGW WenKai TC is the version on Google Fonts (ships both traditional and simplified glyphs).\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.9–0.95 on display, 1.45–1.5 on body) read as cramped in Chinese. Bump display to 1.0–1.1 and body to 1.55–1.65.\n- **Remove negative letter-spacing on CJK headlines.** Bodoni Moda display uses -0.01em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Manrope portion was meant to be capitalized. (This matters here — every Manrope label, eyebrow, tag, caption uses `text-transform: uppercase`.)\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between LXGW WenKai and Noto Serif SC inside the same sentence — pick the face that matches the size tier (display = LXGW WenKai, body = Noto Serif SC) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nEmerald Editorial's whole voice is \"fashion masthead / 19th-century theatrical playbill\" — Bodoni Moda weight 900 at extreme scale with the double-rule ornament bracketing centered words. The Chinese equivalent of that theatrical heaviness is **LXGW WenKai at large display sizes** (its brush-warmth replicates Bodoni's hand-set character) with **Noto Serif SC at weight 900 for jumbo numerals** (where pure mass matters more than warmth). Avoid Noto Sans SC for display — the geometric grotesque flattens the playbill voice into \"modern corporate.\"\n\nThe double-rule ornament works in Chinese — bracket a single Chinese word (e.g., 「春」) between the 4px stacked rules and let LXGW WenKai's warmth carry the theatrical bracket. For the \"The X of Y\" cover convention, Chinese reads naturally as `「X」之「Y」` or `X 与 Y`, with the connector preposition (之 / 与 / 的) replacing the Latin \"of\" inside the small-prep slot. The connector word should use LXGW WenKai at weight 400 (matching the ornament-word-sm role in Latin).\n\nManrope's role as the chrome layer (uppercase + 0.08em–0.18em tracking) translates to **思源黑体 Noto Sans SC weight 700–800 with 0.05em positive tracking** for Chinese. Don't try to fake uppercase — drop the `text-transform: uppercase` rule on CJK runs and let the geometric humanist quality of Noto Sans SC carry the chrome feel through weight and tracking alone.\n\n### Known CJK Gap\n\nThe system's commitment to Bodoni Moda weight 900 at 460px (jumbo numerals on inverse navy panels) is the hardest to translate — there is no Chinese face on the Google Fonts CDN that delivers Bodoni 900's optical heaviness at that scale. Noto Serif SC at weight 900 is the closest, but the contrast profile of Han glyphs at 460px reads visually heavier than Bodoni numerals, which can overwhelm the navy panel. For jumbo-numeral section openers in Chinese, consider: (1) using a Chinese numeral character (一二三四五六七八九十) which sits visually lighter than Western digits, or (2) keeping the numeral in Bodoni (Latin) and letting the panel label below it carry the Chinese context. The pure-Chinese jumbo numeral on this system is the riskiest moment and benefits from per-slide manual review.\n\n## Iteration Guide\n\n1. Any new display headline is Bodoni Moda at weight 900 with negative letter-spacing and tight leading. Pick the size from the display ladder (92 / 104 / 120 / 128 / 130 / 184 / 200) — do not invent a new size.\n2. Any new chrome line (label, eyebrow, tag, caption) is Manrope at weight 700 or 800 uppercase with 0.05em–0.18em letter-spacing. Pick the size from the chrome ladder (24 / 26 / 28).\n3. Any new section separator or list-row border is a 4px solid `{colors.ink}` rule. No 1px / 2px / 3px structural rules.\n4. Any new tile uses the inverse-fill pattern (`{colors.ink}` bg with `{colors.bg}` text) or the paper-fill pattern (`{colors.paper}` bg with `{colors.ink}` text). Mix the two in rotation across a row of tiles.\n5. Any new pill / tag / chip is a strict rectangle (no border-radius) in the inverse-fill or bg-fill color combination from `{components.tag-pill}` / `{components.delta-pill}`.\n6. Any new KPI figure is `{typography.kpi-figure}` (144px) with an optional `{typography.kpi-figure-unit}` (60px) suffix. Smaller KPI sizes are not in the system.\n7. Any new ornament moment uses the double-rule treatment by default. Switch to single or none only via the `:root[data-ornament]` global, not per-element.\n8. Any new section-opener uses the half-bleed inverse panel + jumbo numeral pattern. The numeral lives on the navy panel; the right half holds the eyebrow + headline + lede + marks.\n9. Any new color must come from `{colors.bg}` / `{colors.ink}` / `{colors.paper}` (or the reserved bg-2/3 / ink-2/3 variants if tonal nuance is needed). Do not introduce a yellow, red, or third accent.\n10. When the layout feels crowded, increase the display headline size rather than adding more elements. The system rewards bigger type, not more pieces.\n\n## Known Gaps\n\n- The Google Fonts request loads Bodoni Moda, Playfair Display, DM Serif Display, Rozha One, Yeseva One, and Manrope. **In practice only Bodoni Moda and Manrope are used.** The other four serif families are dormant — loaded but not referenced in the CSS. They are available as alternate display voices but must be wired in explicitly.\n- The system depends on `deck-stage.js` for canvas scaling and slide navigation. The script is not described in this design.md — treat it as a runtime dependency.\n- The `:root[data-ornament]` switch (`double` / `single` / `none`) is a global presentation setting. It cannot be applied per-slide or per-ornament — switching variants applies deck-wide.\n- The ink-2 / ink-3 and bg-2 / bg-3 color tokens are defined but not actively used in the published CSS. They are reserved for tonal variation but currently dormant.\n- The bar chart uses hand-set bar heights (CSS `%`). There is no data-binding layer — extending the chart requires manually computing percentages.\n- Offline rendering will fall back to system serif (likely Georgia) for Bodoni and system sans (likely SF/Segoe) for Manrope. The Bodoni fallback dramatically flattens the display voice; self-hosting recommended for offline / print reliability.\n- The 92px Bodoni headlines maintain WCAG AA contrast at navy-on-emerald and emerald-on-navy, but smaller text (24–28px Manrope) on the same color pairings approaches the contrast floor. Keep small text in navy-on-emerald (the more contrastful direction) when possible.\n- The masthead and footline strings are hardcoded placeholders in the source (publication name, date, page numbers). They must be edited per-deck.\n- The system has no `@media print` rule and no responsive breakpoints. It is fixed 1920×1080 and relies on `deck-stage.js` for any viewport adaptation.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/emerald-editorial/preview.md":"# Emerald Editorial Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/emerald-editorial/design.md`\n- Preview card: `bold-template-pack/templates/emerald-editorial/preview.md`\n\n## Selection Metadata\n\n- Slug: `emerald-editorial`\n- Tagline: A magazine-cover business deck: emerald + navy + paper, double-rule masthead ornaments, and a bold Bodoni-style display serif.\n- Mood: editorial, considered, confident, magazine-cover\n- Tone: literary, authoritative, warm, designed\n- Formality: medium-high\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel like the front of a serious magazine, including but not limited to leadership readouts, planning-office reviews, and strategy briefings. The double-rule masthead ornament gives it editorial gravitas without making it stiff — also a great unexpected pick for product launches or research recaps that want to feel considered rather than corporate.\n- Avoid for: Contexts that need to read as quiet, neutral, or institutionally restrained — the emerald field is too saturated to disappear into the background.\n\n## Visual Snapshot\n\nA bold display-serif editorial system in the register of a fashion masthead or vintage magazine cover. Bodoni Moda runs at weight 900 across a wide scale (44–460px), set against a saturated emerald-green canvas with deep navy ink and oat-paper accents. The signature treatment is a stacked double-rule ornament that brackets centered display words like a 19th-century theatrical playbill. The aesthetic borrows from Harper's Bazaar / Vogue / Wallpaper covers: confident, theatrical, paper-and-ink committed, with a tight three-color palette and zero gradients or shadows.\n\nEmerald Editorial is a bold display-serif editorial system rooted in the visual language of fashion magazines and 19th-century theatrical playbills. The foundational premise is a single typographic face — Bodoni Moda at weight 900 — used at unapologetic scale: 92px for routine headlines, 130–200px for statements and section openers, and 460px for hero numerals. The serif is loud, theatrical, and confident. Every slide leads with type, not with image.\n\n## Preview Ingredients\n\n- Palette: bg #3CD896; bg-2 #2DC684; bg-3 #25B377; ink #0F1A5C; ink-2 #1B2774; ink-3 #3A4593; paper #F1E9D6\n- Typography: See full design doc after selection.\n- Signature move: Bodoni Moda at weight 900 for every display moment; Manrope at weight 500/700/800 for every body and label moment.\n- Signature move: Saturated emerald canvas ({colors.bg}) with deep navy ink ({colors.ink}) text and inverse panels.\n- Signature move: Double-rule ornament with centered serif word is the signature decorative device.\n- Signature move: 4px ink horizontal rules separate every stacked section, every list row, every chart border. The 4px weight is the system's default rule.\n- Signature move: No corner radius anywhere. Every shape is a strict rectangle, except for the round logo/typographic glyphs themselves.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/grove/design.md":"---\nversion: alpha\nname: Grove\ndescription: A quiet, editorial-serif presentation system in the register of a well-bound monograph or boutique brand book. Playfair Display at weight 400 (never bold) carries every headline, italicized in terracotta coral for accent emphasis as the signature move. Jost weight 300 carries every paragraph as the \"good paper\" body face. JetBrains Mono at weight 300 holds labels, kickers, and the thin chrome bars. The palette pairs a deep forest green canvas (#192b1b) with warm cream text (#d4cfbf) and a single terracotta coral accent (#c8524a). Generous negative space, hairline 1px borders, and a near-invisible serif watermark numeral give it the calm authority of a literary journal.\n\ncolors:\n  bg: \"#192b1b\"\n  bg-alt: \"#1e3221\"\n  bg-light: \"#e8e4d6\"\n  bg-light-alt: \"#dedad0\"\n  fg: \"#d4cfbf\"\n  fg-2: \"rgba(212, 207, 191, 0.6)\"\n  fg-3: \"rgba(212, 207, 191, 0.32)\"\n  fg-light: \"#192b1b\"\n  fg-light-2: \"rgba(25, 43, 27, 0.58)\"\n  fg-light-3: \"rgba(25, 43, 27, 0.33)\"\n  accent: \"#c8524a\"\n  border: \"rgba(212, 207, 191, 0.12)\"\n  border-light: \"rgba(25, 43, 27, 0.14)\"\n  watermark-dark: \"rgba(212, 207, 191, 0.06)\"\n  watermark-light: \"rgba(25, 43, 27, 0.06)\"\n\ncolor-aliases:\n  fg-light: bg\n  fg-light-canonical: \"fg-light shares hex #192b1b with bg — the green is reused as both surface and primary text-on-light\"\n\ntypography:\n  display:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"10vw\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.01em\n  h1:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"5.5vw\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h1-statement:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"min(4.5vw, 7.5vh, 88px)\"\n    fontWeight: 400\n    lineHeight: 1.15\n  h2:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"3.2vw\"\n    fontWeight: 400\n    lineHeight: 1.2\n  h3:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"2vw\"\n    fontWeight: 400\n    lineHeight: 1.3\n  quote-text:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"3.2vw\"\n    fontWeight: 400\n    lineHeight: 1.35\n    letterSpacing: -0.01em\n    fontStyle: italic\n  quote-mark:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"8vw\"\n    fontWeight: 400\n    lineHeight: 0.6\n  stat-value:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"4.5vw\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.02em\n  grove-num:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"18vw\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.03em\n  lead:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"1.45vw\"\n    fontWeight: 300\n    lineHeight: 1.65\n  body:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"1.05vw\"\n    fontWeight: 300\n    lineHeight: 1.75\n  body-list-emph:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"max(1.4vw, 17px)\"\n    fontWeight: 300\n    lineHeight: 1.6\n  caption:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"0.82vw\"\n    fontWeight: 300\n    lineHeight: 1.55\n  label:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.12em\n  kicker:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  chapter-num:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.2em\n    textTransform: uppercase\n  stat-label:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.12em\n    textTransform: uppercase\n\nspacing:\n  pad-x: \"8vw\"\n  pad-y: \"6.5vh\"\n  pad-quote-x: \"calc(8vw * 1.1)\"\n  pad-quote-y: \"calc(6.5vh * 1.2)\"\n  gap-lg: \"4.5vh\"\n  gap-md: \"2.8vh\"\n  gap-sm: \"1.4vh\"\n  rule-short: \"36px\"\n\nmotion:\n  ease-slide: \"cubic-bezier(0.77, 0, 0.175, 1)\"\n  dur-slide: \"0.9s\"\n  ease-enter: \"cubic-bezier(0.16, 1, 0.3, 1)\"\n  dur-enter: \"0.7s\"\n  stagger-delays: \"0 / 0.08s / 0.18s / 0.3s / 0.44s / 0.6s / 0.78s\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  slide-chrome:\n    description: \"Thin top bar separating slide content from the page edge. A flex space-between row holding mono label text on each side, separated below by a 1px hairline in {colors.border} (or {colors.border-light} on light slides). Pads with {spacing.gap-sm} above the rule, then {spacing.gap-md} below before content starts.\"\n    border: \"1px solid {colors.border}\"\n    typography: \"{typography.label}\"\n  slide-foot:\n    description: \"Matching bottom bar. Flex space-between row holding section name and 'NN / TT' counter, with 1px hairline border-top. The chrome and foot together frame every content slide; cover, chapter, quote, and end slides hide both.\"\n    border: \"1px solid {colors.border}\"\n    typography: \"{typography.label}\"\n  grove-num:\n    description: \"Massive serif digit placed in the background at very low opacity (6%) as compositional texture. Sits absolutely at right: {spacing.pad-x}, bottom: -0.15em, with pointer-events disabled. The system's signature wallpaper element on chapter and section moments.\"\n    fontSize: \"18vw\"\n    color: \"{colors.watermark-dark} on dark / {colors.watermark-light} on light\"\n  grove-stat:\n    description: \"Stat card: large Playfair value in {colors.accent}, mono uppercase label beneath, 1px border-bottom hairline. No background fill — the card is defined by the rule and the type ratio alone.\"\n    valueColor: \"{colors.accent}\"\n    valueSize: \"4.5vw\"\n    labelTypography: \"{typography.stat-label}\"\n    borderBottom: \"1px solid {colors.border}\"\n  bullet-list:\n    description: \"Two-column grid list (2em / 1fr) where the bullet is a coral em-dash glyph rendered in JetBrains Mono, not a CSS bullet. The em-dash is the system's bullet language.\"\n    bulletGlyph: \"—\"\n    bulletColor: \"{colors.accent}\"\n    bulletFont: \"'JetBrains Mono', monospace\"\n  rule-coral:\n    width: \"{spacing.rule-short}\"\n    height: \"1px\"\n    background: \"{colors.accent}\"\n    description: \"A 36px-wide 1px-tall terracotta coral rule. The compositional beat between a kicker and the headline that follows.\"\n  rule-full:\n    width: \"100%\"\n    height: \"1px\"\n    background: \"{colors.border} on dark / {colors.border-light} on light\"\n    description: \"Full-width hairline divider. Used between stacked sections inside a slide.\"\n  kicker:\n    typography: \"{typography.kicker}\"\n    color: \"{colors.accent}\"\n    description: \"Mono uppercase eyebrow in coral, placed above an h1/h2 headline.\"\n  chapter-num:\n    typography: \"{typography.chapter-num}\"\n    color: \"{colors.accent}\"\n    marginBottom: \"{spacing.gap-md}\"\n  quote-mark:\n    typography: \"{typography.quote-mark}\"\n    color: \"{colors.accent}\"\n    description: \"Massive Playfair opening-quote glyph in coral, placed above the italic quote body.\"\n  img-placeholder:\n    background: \"{colors.bg-alt} on dark / {colors.border-light} on light\"\n    color: \"{colors.fg-3} on dark / {colors.fg-light-3} on light\"\n    typography: \"{typography.label}\"\n    minHeight: \"30vh\"\n    description: \"Image-region marker — solid darker-than-background fill with a mono caption stating the placeholder text. Use this in place of <img> until a real image is available.\"\n  nav-dots:\n    position: \"fixed\"\n    placement: \"bottom: 24px, horizontally centered\"\n    dotSize: \"5px\"\n    dotBackground: \"rgba(255, 255, 255, 0.22)\"\n    activeBackground: \"rgba(255, 255, 255, 0.8)\"\n    activeTransform: \"scale(1.4)\"\n    description: \"Small white dots at the bottom of the viewport indicating slide position. The fixed counter (#slide-counter) is intentionally disabled — the slide-foot already shows NN / TT.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nGrove is a **quiet, editorial-serif presentation system** in the register of a literary monograph or boutique brand book. The foundational premise is restraint: every slide carries one focused content moment surrounded by deep negative space, anchored by thin 1px chrome bars at top and bottom and supported by a small library of compositional beats (coral kicker, 36px coral rule, italic-coral accent, em-dash bullet, near-invisible watermark numeral).\n\nThe typographic stack runs four faces, each in a single specific weight:\n\n- **Playfair Display at weight 400** carries every headline, every quote, every stat figure, and every watermark numeral. **Bold serif is not permitted** — the no-bold rule is the system's most important typographic commitment. Italicized Playfair in `{colors.accent}` coral is the signature accent move: `<em>` inside any headline switches to italic coral.\n- **Jost at weight 300** carries every paragraph and bullet body. The light weight is the \"good paper\" feel — it sits back and lets the serif lead.\n- **JetBrains Mono at weight 300** carries every label, kicker, footline, slide counter, and stat caption. Always uppercase, always with at least 0.12em letter-spacing.\n- **Noto Serif SC / Noto Sans SC at weight 300–500** are loaded as Chinese fallbacks for every role. The deck is built bilingually-aware — Chinese characters render through the Noto cuts when present in the content.\n\nThe palette is a tight two-surface system with one accent. Dark slides use `{colors.bg}` (a deep forest green) with `{colors.fg}` (warm cream — never pure white) for body text. Light slides flip to `{colors.bg-light}` (warm parchment) with `{colors.fg-light}` (the same forest green now used as text). The single accent is **terracotta coral** (`{colors.accent}` — #c8524a), used only in small, deliberate places: the italic emphasis inside headlines, the 36px rule under a kicker, the em-dash bullet, the stat figure, the chapter ordinal, and the opening quote mark. Coral is the system's accent voice; using it as a surface fill or for body paragraphs shatters the editorial discipline.\n\nDepth is **flat and air-based**. There are no drop shadows, no gradients, no blur, no glow. The only \"depth\" devices are 1px hairline borders (the chrome bars, the stat-card divider, the compare-panel separator) and the watermark numeral at 6% opacity. The whole system reads as printed ink on linen paper, not as a digital surface.\n\nThe system carries a built-in **motion vocabulary**: slide-to-slide transitions use a sharp `cubic-bezier(0.77, 0, 0.175, 1)` pan at 0.9s; element entrances stagger via `[data-anim]` and `[data-delay]` attributes (fade-up / fade-in / reveal-right / reveal-left / scale-in) with a spring-y `cubic-bezier(0.16, 1, 0.3, 1)` curve at 0.7s and delays of 0 / 0.08 / 0.18 / 0.3 / 0.44 / 0.6 / 0.78s. Animation is part of the system identity; new slides should use the animation attribute stack rather than authoring custom transitions.\n\n**Density philosophy: sparse and breathing.** Grove reads as elegant when slides are quiet — one headline, one supporting paragraph, three stats in a row, two columns of text-and-image. The 8vw horizontal and 6.5vh vertical padding is generous by design. A slide that crowds 6 elements into the canvas breaks the system; a slide with one headline, one lede, and one accent rule reads as authoritative. Reach for fewer, larger elements. The system rewards silence around the type, not density of content.\n\n**Key Characteristics:**\n- Playfair Display at weight 400 — never bold — for every serif moment. Italic in `{colors.accent}` is the headline accent.\n- Jost weight 300 for every body paragraph. Lighter weight is the system's \"good paper\" voice.\n- JetBrains Mono weight 300 uppercase with 0.12em–0.2em letter-spacing for every label, kicker, footline, counter, and caption.\n- Dark slides on `{colors.bg}` deep forest green with `{colors.fg}` warm cream text. Light slides on `{colors.bg-light}` parchment with `{colors.fg-light}` green text.\n- One accent color: `{colors.accent}` terracotta coral. Used only for italic headline emphasis, the 36px coral rule, em-dash bullets, stat figures, chapter ordinals, and the quote mark.\n- 1px hairline borders only (`{colors.border}` on dark, `{colors.border-light}` on light). No thick borders, no shadows, no gradients.\n- Em-dash glyph rendered in JetBrains Mono coral is the system's universal bullet.\n- A massive serif watermark numeral (`{components.grove-num}` at 18vw, 6% opacity) sits in the bottom-right corner of chapter and section slides as compositional texture.\n- A staggered fade / reveal animation system (`[data-anim]` + `[data-delay]`) is built-in; new content should use it rather than appearing without entrance.\n\n## Colors\n\n### Palette\n- **BG / Deep Forest** (`{colors.bg}` — #192b1b): The dominant dark canvas. A deep, considered forest green — grounded, editorial, the Grove base. The default slide background.\n- **BG Alt** (`{colors.bg-alt}` — #1e3221): A slightly lighter forest green for secondary dark surfaces. Used as the `{components.img-placeholder}` fill on dark slides, where it reads as a tonal step up from the canvas without leaving the green family.\n- **BG Light / Parchment** (`{colors.bg-light}` — #e8e4d6): The warm parchment surface used on light slides. Reads as good-quality paper stock, not as digital white.\n- **BG Light Alt** (`{colors.bg-light-alt}` — #dedad0): A slightly cooler parchment for secondary light surfaces. Available for tonal separation between adjacent light regions.\n- **FG / Warm Cream** (`{colors.fg}` — #d4cfbf): Primary text color on dark surfaces. Warm cream — never pure white. The off-white temperature is essential to the printed-ink feel.\n- **FG-2** (`{colors.fg-2}` — rgba(212,207,191,0.6)): Secondary / muted text on dark. Used for ledes, captions, and supporting copy that needs to recede from primary.\n- **FG-3** (`{colors.fg-3}` — rgba(212,207,191,0.32)): Tertiary / hint text on dark. Near-invisible — used for image-placeholder captions and the faintest metadata.\n- **FG Light** (`{colors.fg-light}` — #192b1b): Primary text on light surfaces. **Shares its hex with `{colors.bg}`** — the deep forest green is used both as the dark canvas and as the dark text-on-light color. This is the system's primary surface-text inversion device.\n- **FG Light 2** (`{colors.fg-light-2}` — rgba(25,43,27,0.58)): Secondary muted text on light.\n- **FG Light 3** (`{colors.fg-light-3}` — rgba(25,43,27,0.33)): Tertiary text on light.\n- **Accent / Terracotta Coral** (`{colors.accent}` — #c8524a): The single warm note. Used sparingly: italic emphasis inside headlines, the 36px coral rule under a kicker, the em-dash bullet, the stat figure, the chapter ordinal, the opening quote mark, and nav-dot active state. Never used as a surface fill, never used for body paragraphs.\n- **Border** (`{colors.border}` — rgba(212,207,191,0.12)): Hairline divider on dark slides. 12% cream — visible as a structural line but never loud.\n- **Border Light** (`{colors.border-light}` — rgba(25,43,27,0.14)): Hairline divider on light slides. 14% forest green.\n\n### Defaults\n- **Default slide background**: `{colors.bg}` (deep forest green) for the deck's dominant tonal register. Reach for `{colors.bg-light}` (parchment) when the content wants a literal \"page\" feel — typically for quote slides, lighter chapters, or contrast.\n- **Default primary text color on dark surface**: `{colors.fg}` (warm cream).\n- **Default primary text color on light surface**: `{colors.fg-light}` (deep forest green — same hex as the dark surface).\n- **Default secondary / muted text**: `{colors.fg-2}` on dark, `{colors.fg-light-2}` on light. Use the `.muted` utility class.\n- **Default headline color**: matches the surface's primary text color. Headlines never appear in coral except for the italic `<em>` accent inside them.\n- **Default body color**: matches the surface's primary text color.\n- **Default border color**: `{colors.border}` on dark, `{colors.border-light}` on light — both at 1px solid hairline weight.\n- **Default kicker / chapter-num color**: `{colors.accent}` (terracotta coral). The mono uppercase kicker is the only chrome element that takes the accent color.\n- **Default rule color** for the short 36px compositional rule under a kicker: `{colors.accent}`. The full-width section divider rule uses `{colors.border}` instead.\n\nThe palette is intentionally minimal. The dark forest / light parchment / terracotta coral triad is the entire color vocabulary. Introducing a fourth color (a navy, a yellow, a second accent) breaks the system's editorial restraint.\n\n## Typography\n\n### Font Family\nThe system loads four families from Google Fonts:\n\n- **Playfair Display** at weights 400 and 500 (italic and roman). **Only weight 400 is used in published slides.** Weight 500 is loaded but reserved; bold serif (weight 700) is explicitly not permitted by the system rules.\n- **Jost** at weights 200, 300, 400, 500. **Only weight 300 is used.** The light weight is the system's body voice.\n- **JetBrains Mono** at weights 300 and 400. **Only weight 300 is used.** The light mono is the chrome voice.\n- **Noto Serif SC / Noto Sans SC** at weights 300–500, loaded as the Chinese fallback chain for every role.\n\nThe four-family stack is strict by role: Playfair for every serif moment (display, headlines, quotes, stat figures, watermark), Jost for every body paragraph and bullet, JetBrains Mono for every label / kicker / footline / counter / caption.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.grove-num}` | 18vw | Playfair | 400 | Watermark ordinal numeral, 6% opacity, absolute bottom-right |\n| `{typography.display}` | 10vw | Playfair | 400 | Cover hero title |\n| `{typography.quote-mark}` | 8vw | Playfair | 400 | Opening quotation glyph |\n| `{typography.h1}` | 5.5vw | Playfair | 400 | Chapter title, statement headline |\n| `{typography.stat-value}` | 4.5vw | Playfair | 400 / coral | Stat-card numeric value |\n| `{typography.h2}` | 3.2vw | Playfair | 400 | Routine slide headline |\n| `{typography.quote-text}` | 3.2vw | Playfair | 400 italic | Quote body |\n| `{typography.h3}` | 2vw | Playfair | 400 | Sub-headline, compare-panel title |\n| `{typography.lead}` | 1.45vw | Jost | 300 | Lead paragraph |\n| `{typography.body-list-emph}` | max(1.4vw, 17px) | Jost | 300 | List-slide body / bullets — emphasized for legibility |\n| `{typography.body}` | 1.05vw | Jost | 300 | Standard body paragraph |\n| `{typography.caption}` | 0.82vw | Jost | 300 | Captions, footnotes, chart sources |\n| `{typography.label}` | 0.7vw | JetBrains Mono | 300 / 0.12em | Chrome label, mono metadata |\n| `{typography.kicker}` | 0.7vw | JetBrains Mono | 300 / 0.14em / UPPER | Eyebrow above a headline |\n| `{typography.chapter-num}` | 0.7vw | JetBrains Mono | 300 / 0.2em / UPPER | Chapter ordinal label |\n| `{typography.stat-label}` | 0.7vw | JetBrains Mono | 300 / 0.12em / UPPER | Mono label beneath a stat figure |\n\n### Defaults\n- **Default size for a routine slide headline**: `{typography.h2}` (3.2vw).\n- **Default size for a chapter or statement headline**: `{typography.h1}` (5.5vw). For statement-class moments specifically, use `{typography.h1-statement}` which caps at `min(4.5vw, 7.5vh, 88px)` to prevent overflow on short viewports.\n- **Default size for a cover hero title**: `{typography.display}` (10vw).\n- **Default size for a body paragraph**: `{typography.body}` (1.05vw) in Jost weight 300.\n- **Default size for a lede / introductory paragraph**: `{typography.lead}` (1.45vw).\n- **Default size for a kicker / eyebrow**: `{typography.kicker}` (0.7vw) in JetBrains Mono uppercase 0.14em with `{colors.accent}` color.\n- **Default size for a stat-card figure**: `{typography.stat-value}` (4.5vw) in Playfair coral.\n- **Default weight for every serif element**: 400.\n- **Default weight for every body / Jost element**: 300.\n- **Default weight for every mono / JetBrains element**: 300.\n\nWhen the body text on a list-style slide reads too small at 1.05vw on typical laptop viewports, the system bumps it to `{typography.body-list-emph}` (max of 1.4vw or 17px). Reach for the emphasized size whenever a slide's primary content moment is a body paragraph or bulleted list — the default 1.05vw is calibrated for projector viewing, not laptop reading.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Playfair element runs at weight 400.** Bold serif (weight 700) is not used anywhere in the system. This is the system's most important typographic rule.\n- **An `<em>` tag inside any Playfair headline (h1, h2, h3, or quote) renders as italic in `{colors.accent}` coral.** This is the signature Grove accent — the way you add emphasis to a headline is to italicize a word in coral. The em-style switch is automatic via CSS.\n- **The opening quote mark on a quote slide is rendered as a massive Playfair glyph at 8vw in `{colors.accent}` coral.** A quote without the oversized coral quote-mark is broken.\n- **The quote body is always italic.** Roman-style quote text is not in the system.\n- **Every kicker / chapter-num / footline / label / caption is JetBrains Mono uppercase with at least 0.12em letter-spacing.** Mono in sentence case or without tracking reads as code, not chrome.\n- **Bullet glyphs are em-dashes (`—`) rendered in JetBrains Mono `{colors.accent}` coral.** Never bullets (`•`), never hyphens (`-`), never asterisks. The em-dash is the system's bullet language.\n- **Every chrome bar (top and bottom) carries a 1px solid `{colors.border}` rule (or `{colors.border-light}` on light slides).** The hairline rule is what makes the chrome read as a \"frame around the page\" rather than a banner.\n\n### Typography Principles\nThe Playfair-400 / Jost-300 / JetBrains-Mono-300 weight commitment is the system's voice. Switching any of those weights breaks the editorial register. There is no weight ladder — each face has exactly one weight.\n\nItalics are reserved for two specific roles: the coral accent inside headlines (via `<em>`) and the quote body. Italic body paragraphs are not used. Underline is not used. Emphasis in body text is communicated by the `.accent` color utility (changes color to coral), not by italic or bold.\n\n## Layout\n\n### Canvas System\nThe system targets a fluid viewport — each `.slide` is `100vw × 100vh` with `padding: {spacing.pad-y} {spacing.pad-x}` (6.5vh / 8vw). Slides sit side-by-side in a horizontal `#deck` flex strip and translate via `transform: translateX(...)` with the `{motion.dur-slide}` / `{motion.ease-slide}` transition. Only one slide is `is-active` at a time; non-active slides hold their content invisible (`[data-anim]` is `opacity: 0`) until the active class triggers the entrance animations.\n\n### Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 8vw | Horizontal slide padding |\n| `{spacing.pad-y}` | 6.5vh | Vertical slide padding |\n| `{spacing.pad-quote-x}` | 8.8vw | Slightly wider horizontal padding on quote slides |\n| `{spacing.pad-quote-y}` | 7.8vh | Slightly taller vertical padding on quote slides |\n| `{spacing.gap-lg}` | 4.5vh | Between major content sections |\n| `{spacing.gap-md}` | 2.8vh | Between related elements |\n| `{spacing.gap-sm}` | 1.4vh | Between tightly coupled elements |\n\n### Chrome Anatomy\nEvery content slide carries a **slide-chrome** at the top — a thin flex space-between row holding two mono labels separated below by a 1px hairline border — and a **slide-foot** at the bottom — a matching row with section name + \"NN / TT\" counter, separated above by a matching hairline.\n\nThe chrome and foot are hidden on cover, chapter, quote, and end slides — those are the deck's chromeless emotional moments. Every other slide carries the frame.\n\n### Border-Radius\n**Zero structural radius.** No rounded cards, no rounded buttons, no rounded image placeholders. The only round shapes in the system are the 5px nav-dots (50% radius — fully circular) at the bottom of the viewport.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThe system uses **zero box-shadow, zero text-shadow, zero blur, zero gradient**. Depth is communicated entirely through:\n\n1. **1px hairline borders** — the chrome bars at top and bottom, the stat-card divider, the compare-panel separator, the section-divider rule.\n2. **Opacity layers in text color** — primary (`{colors.fg}`), muted (`{colors.fg-2}`), hint (`{colors.fg-3}`). The three-step opacity ladder is the system's text-elevation device.\n3. **The watermark numeral** at 6% opacity — a massive Playfair digit sitting in the bottom-right corner of chapter and section slides as compositional texture, not as UI.\n\nThe absence of shadow is itself the elevation language. Adding `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` shatters the printed-ink feel.\n\n### Watermark Numeral\nThe `{components.grove-num}` element is a Playfair digit at 18vw / 6% opacity, positioned absolutely at `right: {spacing.pad-x}, bottom: -0.15em`. It reads as a faint background texture, never as content. Use it on chapter / section / statement slides where the empty bottom-right would otherwise feel un-anchored. It is part of the depth language even though it appears as a decorative element.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **1px solid `{colors.border}`** — the universal hairline on dark slides. Chrome bar borders, stat-card bottoms, compare-panel separators, full-width section dividers.\n- **1px solid `{colors.border-light}`** — the matching hairline on light slides.\n- **1px solid `{colors.accent}`** — the 36px-wide coral rule (`{components.rule-coral}`) used as the compositional beat between a kicker and the headline that follows.\n\nBorders are never thicker than 1px. Never dashed, never dotted. The 1px hairline is the system's structural rhythm.\n\n### Decorative Element Types\n\n**Slide Chrome Bar** (`{components.slide-chrome}`) — Thin top bar with mono labels on each side, separated below by a 1px hairline. The system's universal \"you are reading a page\" frame.\n\n**Slide Foot Bar** (`{components.slide-foot}`) — Matching bottom bar with section name + counter, separated above by 1px hairline.\n\n**Coral Rule** (`{components.rule-coral}`) — A 36px-wide 1px terracotta coral horizontal rule. The compositional beat that sits between a kicker (above) and a headline (below). Use it once per slide where a kicker leads into a primary headline — do not stack multiple coral rules.\n\n**Full Rule** (`{components.rule-full}`) — Full-width 1px hairline divider in `{colors.border}` / `{colors.border-light}`. Used as a section break inside a slide body.\n\n**Kicker** (`{components.kicker}`) — Mono uppercase eyebrow in coral, placed above an h1 or h2 headline. Often paired with a coral rule below it.\n\n**Chapter Number** — A mono uppercase ordinal in coral (`{typography.chapter-num}`) above the chapter title. Sets the chapter's identity at chapter-opener slides.\n\n**Em-Dash Bullet** (`{components.bullet-list}`) — A two-column grid list (2em / 1fr) where the bullet is a coral em-dash glyph rendered in JetBrains Mono. Never use a true bullet (`•`); always the em-dash.\n\n**Grove Stat** (`{components.grove-stat}`) — A vertical stack: large Playfair coral value (4.5vw) on top, mono uppercase label beneath, 1px border-bottom hairline. No background fill — the card is defined by the rule + the type, not by a containing box.\n\n**Quote Mark** (`{components.quote-mark}`) — Massive Playfair opening-quote glyph at 8vw in coral, placed above the italic quote body. Always present on a quote slide.\n\n**Watermark Numeral** (`{components.grove-num}`) — Playfair digit at 18vw / 6% opacity in the bottom-right corner. Compositional texture only, never UI.\n\n**Image Placeholder** (`{components.img-placeholder}`) — A solid `{colors.bg-alt}` (on dark) or `{colors.border-light}` (on light) fill marking where a real `<img>` will go. Holds a mono caption like \"[ image ]\" in `{colors.fg-3}`.\n\n**Nav Dots** (`{components.nav-dots}`) — Fixed 5px circular dots at the bottom of the viewport indicating slide position. Inactive: 22% white. Active: 80% white at 1.4× scale.\n\n## Do's and Don'ts\n\n### Do\n- Run every serif moment in Playfair Display weight 400. Never bold.\n- Use `<em>` inside any Playfair headline to switch a word to italic terracotta coral — this is the system's signature accent move.\n- Run every paragraph in Jost weight 300. The lighter weight is the system's body voice.\n- Run every label, kicker, chapter-num, footline, counter, and stat-caption in JetBrains Mono weight 300, uppercase, with at least 0.12em letter-spacing.\n- Default slide background to `{colors.bg}` (deep forest green). Use `{colors.bg-light}` (parchment) on quote slides and any moment that wants a literal \"page\" feel.\n- Pair the kicker with the 36px coral rule as a single compositional unit above the slide's primary headline.\n- Use the em-dash glyph (`—`) in coral as the universal bullet. Never use round bullets or hyphens.\n- Apply the `{components.grove-num}` watermark numeral to chapter and section-opener slides — the bottom-right corner needs that anchor.\n- Use the built-in `[data-anim]` + `[data-delay]` animation stack (fade-up / fade-in / reveal-right / reveal-left / scale-in, with delays 0–6) for every new content element. Animation is part of the system identity, not optional polish.\n- Keep slides spacious — one headline + one supporting paragraph + one accent rule is the rhythm. Reach for fewer elements at larger sizes.\n\n### Don't\n- Don't use bold serif. Playfair at weight 700 is not in this system. Bold serif breaks the editorial voice.\n- Don't introduce a fourth typeface beyond Playfair, Jost, JetBrains Mono, and Noto SC. The four-family stack is the entire typographic identity.\n- Don't use coral as a surface fill or for body paragraphs. Coral is the accent voice: italic emphasis, kicker, rule, em-dash bullet, stat figure, quote mark, chapter ordinal. That's the entire coral vocabulary.\n- Don't use box-shadow, gradient, blur, or any rgba shadow. The system is flat.\n- Don't use thick borders (2px+). The 1px hairline is the system's structural rhythm.\n- Don't round any corners. The only round shape is the 5px nav-dot.\n- Don't use round bullets, hyphens, or asterisks for list items. The em-dash in coral is the only bullet glyph.\n- Don't put a kicker without a coral rule below it. The kicker → rule → headline triad is one unit.\n- Don't render mono text in sentence case or without letter-spacing. Mono is always uppercase chrome with 0.12em+ tracking.\n- Don't omit the slide-chrome and slide-foot on content slides. The thin frame at top and bottom is what makes the slide read as a page.\n- Don't crowd the canvas. Grove rewards silence around the type. If a slide feels full, remove a supporting element rather than shrinking type.\n\n## Responsive Behavior\n\nThe system uses **vw / vh units throughout** — every size, padding, gap, and rule is proportional to the viewport. The same composition renders correctly on a 1280×720 laptop, a 1920×1080 monitor, and a 2560×1440 display without breakpoints.\n\n### Scaling Behavior\n- Display headline scales linearly with viewport width (10vw → 192px at 1920, 128px at 1280).\n- Body text scales similarly (1.05vw → 20.16px at 1920, 13.44px at 1280) — except on list-slide body, where the `max(1.4vw, 17px)` floor prevents the text from going unreadable on smaller viewports.\n- Padding, gaps, and grove-num all scale proportionally with vw/vh.\n- The 1px hairline borders are fixed-pixel and do not scale, which means at larger viewports they appear proportionally finer. This is by design.\n\n### Presenter Behavior\n- Slides advance via right/down arrow / space / page-down (handled by the deck JavaScript).\n- Slides reverse via left/up arrow / page-up.\n- The horizontal `#deck` strip translates via `transform: translateX(-N * 100vw)` between slides, with the `{motion.dur-slide}` sharp deceleration curve at 0.9s.\n- Each slide carries an `is-active` class that triggers the staggered entrance animations on its `[data-anim]` elements.\n- Bottom nav-dots reflect current slide position; clicking a dot jumps to that slide.\n\n### Animation\nThe `[data-anim]` + `[data-delay]` system is built-in:\n- `fade-up`: opacity 0 → 1, translateY 28px → 0\n- `fade-in`: opacity 0 → 1\n- `reveal-right`: clip-path inset(0 100% 0 0) → inset(0 0 0 0)\n- `reveal-left`: clip-path inset(0 0 0 100%) → inset(0 0 0 0)\n- `scale-in`: opacity 0 → 1, scale 0.94 → 1\n\nAll entrance animations use `{motion.ease-enter}` at `{motion.dur-enter}` (0.7s). Stagger delays: 0 / 0.08s / 0.18s / 0.3s / 0.44s / 0.6s / 0.78s.\n\n### Print / Export\nThe system has no `@media print` rule. Print export will inherit the horizontal-strip layout and is unlikely to paginate cleanly. Treat Grove as a screen-first system; PDF export requires a dedicated print stylesheet.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display / h1 / h2 / h3 (Playfair roles, 2–10vw) | 霞鹜文楷 LXGW WenKai | 400 | Literary, hand-set warmth that mirrors Playfair Display at weight 400 — never bold, exactly the Grove rule |\n| Quote text / mark (8vw mark, 3.2vw text) | 霞鹜文楷 LXGW WenKai | 400 | The same literary warmth carries the italic-quote moment; Chinese has no italic so the face does the expressive work |\n| Stat figure (4.5vw, coral) | 霞鹜文楷 LXGW WenKai | 400 | Keeps stat figures in the Playfair register; the coral color carries the accent |\n| Watermark numeral (18vw) | 霞鹜文楷 LXGW WenKai | 400 | The 6%-opacity watermark works at this scale with LXGW WenKai's open letterforms |\n| Body / lede (Jost roles, 1.05–1.45vw) | 思源宋体 Noto Serif SC | 300–400 | Mincho body voice — calm, literary, sits back like Jost weight 300 |\n| Label / kicker / chapter-num (JetBrains Mono roles) | 思源等宽 Noto Sans Mono CJK SC | 300–400 | Preserves the typewriter-chrome quality for kickers and footlines |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Playfair Display as the Latin serif and let CJK glyphs fall through to LXGW WenKai. Playfair Display weight 400 (never bold) is the system's most important typographic commitment; replacing it with a CJK serif wholesale would break the monograph / boutique-brand-book register that defines Grove. The system already loads Noto Serif SC / Noto Sans SC as fallbacks per its existing font stack — the change is to add LXGW WenKai as the preferred CJK display face ahead of Noto Serif SC:\n\n```css\n/* Playfair roles (display, h1, h2, h3, quote, stat, watermark) */\nfont-family: 'Playfair Display', 'LXGW WenKai TC', 'Noto Serif SC', Georgia, serif;\n/* Jost roles (lead, body, caption) */\nfont-family: 'Jost', 'Noto Serif SC', system-ui, sans-serif;\n/* JetBrains Mono roles (label, kicker, chapter-num, stat-label) */\nfont-family: 'JetBrains Mono', 'Noto Sans Mono CJK SC', monospace;\n```\n\n(Note: the system currently lists `'Noto Sans SC'` in the Jost stack — for Grove's literary register, swap to `'Noto Serif SC'` instead. The Mincho body voice is closer to Jost weight 300's \"good paper\" feel than the Hei sans face.)\n\nBaseline mismatch at display sizes (5.5–10vw) is mild — LXGW WenKai and Playfair Display both sit at similar optical baselines, so mixed-script headlines like `A Quiet 山林` read cleanly. The `<em>` italic-coral accent rule is the more delicate piece (see Known CJK Gap below).\n\n### Loading\n\nReplace the existing Noto-only fallback with an LXGW WenKai + Noto Serif SC + Noto Sans Mono CJK pair:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=LXGW+WenKai+TC&family=Noto+Serif+SC:wght@300;400;500&family=Noto+Sans+Mono+CJK+SC:wght@300;400&display=swap\" rel=\"stylesheet\">\n```\n\nLXGW WenKai TC is the version hosted on Google Fonts (covers both traditional and simplified glyphs).\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (1.0–1.1 on display, 1.65–1.75 on body) read as cramped in Chinese. Bump display to 1.15–1.25 and body to 1.7–1.85.\n- **Remove negative letter-spacing on CJK headlines.** Playfair Display uses -0.01em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the JetBrains Mono portion was meant to be capitalized.\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between LXGW WenKai and Noto Serif SC inside the same sentence — pick the face that matches the role (display = LXGW WenKai, body = Noto Serif SC) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nGrove's whole voice is \"literary monograph / boutique brand book\" with a single accent of terracotta coral. The Chinese equivalent of that quiet authority is **LXGW WenKai for every serif moment** (its hand-set warmth is the closest Chinese analog to Playfair Display at weight 400) and **Noto Serif SC at weight 300–400 for body** (the Mincho calm that matches Jost weight 300's reticence). Avoid running Chinese body in Noto Sans SC — the geometric sans tips the system from \"good paper\" to \"modern app.\"\n\nThe em-dash bullet glyph in DM Mono coral works in Chinese without modification — the em-dash character itself is the same Unicode glyph (—) and reads as a deliberate mark in front of a Chinese list item. Keep the bullet column in Noto Sans Mono CJK SC at weight 300 coral, exactly mirroring the Latin pattern.\n\nThe watermark numeral (18vw, 6% opacity) is particularly effective in Chinese — render a Chinese ordinal character (e.g., 「三」or 「五」) instead of a Western digit. At 6% opacity it reads as faint compositional texture, and the Han glyph's denser visual weight at that scale balances the slide better than a thin Western numeral would.\n\n### Known CJK Gap\n\nThe system's signature `<em>` italic-coral treatment is the hardest piece to translate: **Chinese has no italic concept** — slanted Han glyphs read as broken, not as emphasis. The current Grove CSS depends on the browser's default `<em>` styling (italic) plus a CSS color rule for the coral. In Chinese, the italic does nothing visually, so the emphasis collapses to \"just coral text inside a headline.\" That's not bad — coral inside an LXGW WenKai headline still reads as a deliberate accent — but the system loses one of its two emphasis dimensions (color + slant) and is left with only color.\n\nTo compensate, two options: (1) accept color-only emphasis on Chinese headlines and let the coral carry the weight, or (2) switch the `<em>` portion to a different face inside Chinese headlines — e.g., **站酷小薇体 (ZCOOL XiaoWei)** — to provide a face-based contrast that approximates the slant contrast of Latin italic. Add to the CSS:\n\n```css\n.h1 em, .h2 em, .h3 em, .quote-text em {\n  color: var(--c-accent);\n  font-family: 'Playfair Display', 'ZCOOL XiaoWei', 'LXGW WenKai TC', serif;\n  font-style: italic; /* Latin renders italic; CJK ignores */\n}\n```\n\nThis gives the Latin portion italic-coral and the CJK portion face-shift-coral. Test on a per-deck basis — for many Grove decks, color-only emphasis is sufficient.\n\n## Iteration Guide\n\n1. Any new headline is Playfair Display weight 400. Pick the size from the headline ladder (10vw display / 5.5vw h1 / 3.2vw h2 / 2vw h3) — do not invent a new size.\n2. Any new emphasis inside a headline uses `<em>` and renders as italic coral automatically. Do not author a manual color/italic style.\n3. Any new body paragraph is Jost weight 300 at 1.05vw (or 1.45vw for lede, or `max(1.4vw, 17px)` on list-style slides).\n4. Any new label / kicker / footline / counter / caption is JetBrains Mono weight 300 uppercase with at least 0.12em letter-spacing.\n5. Any new chrome line (top bar, bottom bar, section divider, stat-card border) is a 1px solid hairline in `{colors.border}` (dark) or `{colors.border-light}` (light). No thicker borders.\n6. Any new bullet list uses the `{components.bullet-list}` pattern (two-column grid, em-dash in coral mono). Do not author a different bullet style.\n7. Any new accent moment uses `{colors.accent}` terracotta coral. The accent is for italic headline emphasis, the 36px rule, em-dashes, stat figures, quote marks, chapter ordinals, and the kicker text. Nothing else.\n8. Any new chapter or section-opener slide carries a `{components.grove-num}` watermark numeral in the bottom-right corner.\n9. Any new content element gets a `[data-anim]` attribute (fade-up, fade-in, reveal-right, reveal-left, or scale-in) plus a `[data-delay]` (0–6) for staggered entrance. Do not author custom transitions.\n10. When in doubt, add space rather than content. Grove's editorial register is silence, not density.\n\n## Known Gaps\n\n- The four Google Fonts (Playfair Display, Jost, JetBrains Mono, Noto Serif SC / Noto Sans SC) are loaded via `<link>`. Offline rendering will fall back to Georgia, system-ui, monospace, and system serif/sans for the Noto roles — which preserves the rough character but loses the typographic identity. Self-hosting recommended for offline / print reliability.\n- The system loads Playfair weight 500 and Jost weights 200/400/500 — these are not used in the published CSS but are available. Using them would break the system's single-weight commitment.\n- The `<em>` italic-coral treatment relies on the CSS rule `.h1 em, .h2 em, .h3 em { color: var(--c-accent); }` — note that the actual italic property is NOT set in the rule (the comment block is empty). The italic comes from the browser's default `<em>` styling. If a stylesheet override removes the default italic, the coral accent will lose its italic character.\n- The grove-num watermark uses 18vw font-size — on extremely wide viewports (3000px+) this becomes very large and may push the slide-foot area. The CSS positions it at `bottom: -0.15em` to absorb some overflow, but very tall numerals at very wide viewports may need adjustment.\n- The vertical sidebar component (`.grove-sidebar`) is loaded in the CSS but explicitly disabled (`display: none !important`). It was a chapter-tab decoration that read as clutter; the slide-chrome bar provides the section name already.\n- The fixed slide-counter (`#slide-counter`) is also disabled — the slide-foot bar already shows \"NN / TT\" so the fixed counter was a duplicate.\n- The CSS has a few empty rule blocks (`.h1 em { }`, `.grove-stat-val em { }`, `.quote-text { ... }`) which appear to be leftover stubs from earlier iterations. They are inert and can be removed without effect.\n- The deck is built bilingually-aware (Chinese fallbacks via Noto Serif SC / Noto Sans SC) but no actual Chinese content is in the published source — the bilingual support is structural, not active.\n- The image-placeholder component is a layout reservation, not a real image. Replacing the placeholder div with an `<img>` requires manually matching the parent's flex behavior and background.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/grove/preview.md":"# Grove Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/grove/design.md`\n- Preview card: `bold-template-pack/templates/grove/preview.md`\n\n## Selection Metadata\n\n- Slug: `grove`\n- Tagline: Forest-green canvas with cream type, classical Playfair serifs, and a single rust accent.\n- Mood: organic, considered, warm, literary, natural\n- Tone: classical, warm, considered, patient\n- Formality: medium-high\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel organic, considered, and grown-up: sustainability and wellness brands, outdoor / nature products, wineries and restaurants, literary or arts decks, advisory deliverables, bilingual EN/CN reports. Also a calm, distinctive choice for tech, research, or business decks that want patience over urgency.\n- Avoid for: Decks that need neon energy or rapid-fire pop — the forest-green canvas and Playfair serif commit to a slow, classical voice.\n\n## Visual Snapshot\n\nA quiet, editorial-serif presentation system in the register of a well-bound monograph or boutique brand book. Playfair Display at weight 400 (never bold) carries every headline, italicized in terracotta coral for accent emphasis as the signature move. Jost weight 300 carries every paragraph as the \"good paper\" body face. JetBrains Mono at weight 300 holds labels, kickers, and the thin chrome bars. The palette pairs a deep forest green canvas (#192b1b) with warm cream text (#d4cfbf) and a single terracotta coral accent (#c8524a). Generous negative space, hairline 1px borders, and a near-invisible serif watermark numeral give it the calm authority of a literary journal.\n\nGrove is a quiet, editorial-serif presentation system in the register of a literary monograph or boutique brand book. The foundational premise is restraint: every slide carries one focused content moment surrounded by deep negative space, anchored by thin 1px chrome bars at top and bottom and supported by a small library of compositional beats (coral kicker, 36px coral rule, italic-coral accent, em-dash bullet, near-invisible watermark numeral).\n\n## Preview Ingredients\n\n- Palette: bg #192B1B; bg-alt #1E3221; bg-light #E8E4D6; bg-light-alt #DEDAD0; fg #D4CFBF; fg-light #192B1B; accent #C8524A\n- Typography: See full design doc after selection.\n- Signature move: Playfair Display at weight 400 carries every headline, every quote, every stat figure, and every watermark numeral. Bold serif is not permitted — the no-bold rule is the system's most important typographic commitment. Italicized Playfair in {colors.accent} co...\n- Signature move: Jost at weight 300 carries every paragraph and bullet body. The light weight is the \"good paper\" feel — it sits back and lets the serif lead.\n- Signature move: JetBrains Mono at weight 300 carries every label, kicker, footline, slide counter, and stat caption. Always uppercase, always with at least 0.12em letter-spacing.\n- Signature move: Noto Serif SC / Noto Sans SC at weight 300–500 are loaded as Chinese fallbacks for every role. The deck is built bilingually-aware — Chinese characters render through the Noto cuts when present in the content.\n- Signature move: Playfair Display at weight 400 — never bold — for every serif moment. Italic in {colors.accent} is the headline accent.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/long-table/design.md":"---\nversion: alpha\nname: Long Table\ndescription: A warm, single-ink editorial system in the register of a supper-club poster, a small-batch zine, or a Risograph-printed program. The entire system runs in one ink color — a warm rust terracotta (#B53D2A) — on a buttery cream paper ground (#FAF1E2), with a subtle 4px radial-dot texture overlay giving the surface its \"printed paper\" quality. Display type runs in Bricolage Grotesque at weight 700–800 in uppercase; body and metadata run in Fraunces serif at weight 400–600 with optical-size axis engaged. Pill buttons, outlined edition badges, italic-edition numerals, and dashed/solid 1.5px borders complete the printed-program vocabulary.\n\ncolors:\n  paper: \"#FAF1E2\"\n  paper-d: \"#F2E5CF\"\n  paper-vd: \"#E8D7B6\"\n  ink: \"#B53D2A\"\n  ink-dp: \"#8E2D1F\"\n  rule: \"#B53D2A\"\n  ink-32: \"rgba(181, 61, 42, 0.32)\"\n  ink-78: \"rgba(181, 61, 42, 0.78)\"\n  ink-50: \"rgba(181, 61, 42, 0.5)\"\n\ncolor-aliases:\n  rule: ink\n  ink-32-canonical: \"Same ink #B53D2A at 32% opacity, used for dashed dividers and subtle internal rules\"\n  ink-78-canonical: \"Same ink #B53D2A at 78% opacity, used for de-emphasized metadata\"\n\ntypography:\n  display-jumbo-numeral:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(180px, min(22vw, 38vh), 480px)\"\n    fontWeight: 400\n    lineHeight: 0.86\n    letterSpacing: -0.02em\n    fontStyle: italic\n  display-cover:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(82px, min(8.8vw, 15vh), 180px)\"\n    fontWeight: 800\n    lineHeight: 0.92\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  display:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(72px, min(7.6vw, 13vh), 160px)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  headline-xl:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(60px, min(6.4vw, 10.5vh), 140px)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  headline:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(56px, min(6vw, 10vh), 120px)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  headline-md:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(48px, min(5vw, 8.4vh), 100px)\"\n    fontWeight: 800\n    lineHeight: 0.92\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  quote:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(40px, min(4.4vw, 7.4vh), 96px)\"\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  card-title:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(28px, 2.4vw, 44px)\"\n    fontWeight: 800\n    lineHeight: 0.95\n    letterSpacing: -0.008em\n    textTransform: uppercase\n  course-name:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(20px, 1.5vw, 28px)\"\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  info-value:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(20px, 1.6vw, 28px)\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  edition-label-tracked:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(15px, 1.1vw, 18px)\"\n    fontWeight: 700\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  who-tag:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(15px, 1.05vw, 18px)\"\n    fontWeight: 700\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  body-serif-italic-lg:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(20px, 1.5vw, 28px)\"\n    fontWeight: 400\n    lineHeight: 1.45\n    fontStyle: italic\n  body-serif-italic:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(17px, 1.2vw, 22px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n    fontStyle: italic\n  body-roman:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(15px, 1vw, 17px)\"\n    fontWeight: 400\n    lineHeight: 1.45\n  edition-label:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(20px, 1.6vw, 30px)\"\n    fontWeight: 400\n    lineHeight: 1\n    fontStyle: italic\n  tagline:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(18px, 1.4vw, 26px)\"\n    fontWeight: 400\n    lineHeight: 1.35\n    fontStyle: italic\n  stats:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(17px, 1.2vw, 22px)\"\n    fontWeight: 400\n    lineHeight: 1.4\n    fontStyle: italic\n  pill-text:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(15px, 1.1vw, 20px)\"\n    fontWeight: 400\n    lineHeight: 1\n    fontStyle: italic\n  meta-tag:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    fontWeight: 400\n    lineHeight: 1.4\n    fontStyle: italic\n  info-key:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    fontWeight: 400\n    letterSpacing: 0.16em\n    textTransform: uppercase\n    fontStyle: italic\n  pagenum:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    fontWeight: 400\n    letterSpacing: 0.02em\n    fontStyle: italic\n  nav-hint:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(11px, 0.78vw, 13px)\"\n    fontWeight: 400\n    letterSpacing: 0.02em\n    fontStyle: italic\n\nspacing:\n  slide-pad-h-default: \"clamp(60px, 5vw, 110px)\"\n  slide-pad-h-wide: \"clamp(80px, 7vw, 160px)\"\n  slide-pad-h-narrow: \"clamp(120px, 12vw, 280px)\"\n  slide-pad-top-default: \"clamp(96px, 10vh, 160px)\"\n  slide-pad-top-cover: \"clamp(60px, 6vh, 100px)\"\n  slide-pad-bottom-default: \"clamp(110px, 11vh, 170px)\"\n  slide-pad-bottom-wide: \"clamp(150px, 14vh, 220px)\"\n  gap-section: \"clamp(28px, 3vh, 50px)\"\n  gap-content: \"clamp(18px, 2vh, 32px)\"\n  gap-row: \"clamp(14px, 1.6vh, 24px)\"\n  gap-tight: \"clamp(10px, 1.2vh, 18px)\"\n  border-weight: \"1.5px\"\n  rule-dashed-color: \"{colors.ink-32}\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  pill:\n    description: \"Outlined rounded-rectangle (border-radius 999px → fully pill) holding short italic Fraunces text. The system's CTA / action button. Border is 1.5px solid {colors.ink}; padding is generous (~12px / 28px); text-color is {colors.ink}.\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: \"999px\"\n    padding: \"clamp(8px, 1vh, 14px) clamp(20px, 2vw, 32px)\"\n    typography: \"{typography.pill-text}\"\n  pill-divider:\n    typography: \"{typography.pill-text}\"\n    opacity: 0.7\n    description: \"A small italic Fraunces divider character (typically · or /) used inline between adjacent pills.\"\n  ed-badge:\n    description: \"A small circular outlined badge (~38px) holding a single italic Fraunces digit. The edition / chapter ordinal marker. Border is 1.5px solid {colors.ink}; background is transparent.\"\n    width: \"clamp(34px, 2.6vw, 44px)\"\n    height: \"clamp(34px, 2.6vw, 44px)\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: \"50%\"\n  rect-tag:\n    description: \"Outlined rectangular tag — like the pill but with sharp corners. Holds short italic Fraunces text. Used as a category / status / metadata chip when the pill's roundness isn't appropriate.\"\n    border: \"1.5px solid {colors.ink}\"\n    padding: \"clamp(7px, 0.9vh, 12px) clamp(14px, 1.4vw, 22px)\"\n    typography: \"{typography.pill-text}\"\n  card-outlined:\n    description: \"A 1.5px ink-outlined rectangular content card. Holds a card-top metadata row (separated below by a 1px @ 32%-opacity rule), a Bricolage card-name, a Fraunces body description, and a meta-row at the bottom (separated above by a 1px dashed @ 32%-opacity rule). The system's primary content card pattern.\"\n    border: \"1.5px solid {colors.ink}\"\n    padding: \"clamp(20px, 2vh, 32px) clamp(20px, 1.8vw, 30px)\"\n    internalDivider-solid: \"1px solid {colors.ink-32}\"\n    internalDivider-dashed: \"1px dashed {colors.ink-32}\"\n  paper-texture:\n    description: \"Subtle radial-dot texture overlay on the stage. A 4px-tile background-image of 0.5px radial-gradient dots in {colors.ink-50} at 10% opacity. Sits absolutely on the stage with pointer-events disabled, giving the paper its Risograph / printed-stock quality. This is on every slide.\"\n    backgroundImage: \"radial-gradient(circle at 1px 1px, {colors.ink-50} 0.5px, transparent 1px)\"\n    backgroundSize: \"4px 4px\"\n    opacity: 0.1\n  topbar-divider:\n    description: \"A 1.5px ink solid border-bottom under a slide topbar (where a Bricolage headline sits beside a small Fraunces label). The horizontal rule beneath the topbar is the system's universal page-divider device.\"\n    borderBottom: \"1.5px solid {colors.ink}\"\n  pagenum:\n    position: \"absolute\"\n    placement: \"right: clamp(36px, 3.6vw, 80px); bottom: clamp(40px, 4vh, 64px)\"\n    typography: \"{typography.pagenum}\"\n    color: \"{colors.ink}\"\n    description: \"Italic Fraunces page number at the bottom-right of every slide.\"\n  nav-hint:\n    position: \"fixed\"\n    placement: \"left: clamp(36px, 3.6vw, 80px); bottom: clamp(40px, 4vh, 64px)\"\n    typography: \"{typography.nav-hint}\"\n    color: \"{colors.ink}\"\n    opacity: 0.45\n    description: \"A faint italic Fraunces hint string at the bottom-left of the viewport (e.g. '← → to navigate'). Bonus interactivity affordance.\"\n  ledger-row:\n    description: \"A horizontal ledger-style row in a calendar/schedule context. Multi-column grid (typical: 80px / 130px / 1.6fr / 0.9fr / auto) with a 1px @ 32%-opacity ink border-bottom. Each cell is a tag, label, or pill. Reads as a guestbook / restaurant-reservation log.\"\n    rowPad: \"clamp(11px, 1.3vh, 18px) 0\"\n    borderBottom: \"1px solid {colors.ink-32}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nLong Table is a **single-ink editorial system** in the register of a supper-club poster, a Risograph zine, or a small-press dinner program. The foundational premise is monochromatic: every visible mark in the system — every headline, every paragraph, every border, every rule, every pill, every page number — is rendered in a single warm rust terracotta ink (`{colors.ink}` — #B53D2A) on a buttery cream paper ground (`{colors.paper}` — #FAF1E2). The only chromatic variation is opacity: the same ink at 100% for primary marks, at 78% for de-emphasized metadata, at 32% for dashed internal dividers, at 10% for the paper-texture dots.\n\nThe single-ink constraint is the system's identity. The aesthetic borrows from one-color screen printing, letterpress posters, and Risograph stationery — formats where each additional color is a separate printing pass and therefore a deliberate decision. By committing to one ink, the system achieves the calm authority of a printed object rather than the polish of a digital surface.\n\nA signature **paper-texture overlay** sits on every slide: a 4px-tile radial-dot pattern in 50%-opacity ink at 10% opacity, applied via the `.stage::before` pseudo-element. The dots are invisible at conversational viewing distance but visible up close — they give the cream surface its \"printed paper\" feel and are an essential part of the design system, not optional decoration.\n\nThe typographic stack is a two-face pairing:\n\n- **Bricolage Grotesque** at weights 700 and 800 in **strict uppercase** carries every display moment — covers, headlines, card titles, course names, quote bodies, info values, who-tags. Bricolage is a wide, slightly-condensed grotesque with strong personality; its uppercase set has the impact of a hand-lettered poster. The optical-size axis (`opsz` 12..96) is engaged.\n- **Fraunces** at weight 400–600 carries every body paragraph, every metadata field, every pill, every page number, every edition label. **Italic Fraunces is the default body style** — the slanted serif is the system's body voice, lending warmth and editorial personality. Roman Fraunces appears only for specific tight cases (info keys, the description body inside index cards). The optical-size axis (`opsz` 9..144) is engaged for both styles.\n\nA massive **italic Fraunces edition numeral** at up to 480px is the system's signature display anchor — it replaces the hand-drawn illustration that would traditionally fill the cover/featured slide right-half, giving the slide a typographic centerpiece in the same ink as the rest of the page.\n\nDepth is **flat and printed**. There are no shadows, no gradients, no blur, no glow. Elevation is communicated entirely through 1.5px solid ink borders on cards, badges, pills, and tags; 1px solid or 1px-dashed internal dividers at 32% opacity; and the texture overlay's atmospheric quality. The whole system reads as ink soaked into paper.\n\n**Density philosophy: rich-but-curated.** Long Table reads as authoritative when slides carry substantive content — a cover with a hero title plus a tagline plus action pills plus stats plus a big edition numeral; an index slide with a topbar headline plus three rich cards; a menu slide with five course rows with name + description + pairing. The slides are full but never crowded — each region carries one focused element with breathing room around it. A slide that holds only a headline reads as missing-its-program; a slide that holds 8 competing content blocks reads as broken. Reach for one major typographic moment (Bricolage display) anchored by 2–4 supporting groups (cards, pills, ledger rows, info-value pairs) per slide.\n\n**Key Characteristics:**\n- One ink color (`{colors.ink}` — warm rust terracotta) on cream paper (`{colors.paper}`). Opacity variants are the only color variation.\n- Bricolage Grotesque weight 700–800 uppercase for every display moment; Fraunces 400–600 italic-default for every body and metadata moment.\n- Subtle 4px radial-dot paper texture on every slide via `.stage::before` — invisible at distance, present up close.\n- Pill buttons (border-radius 999px), edition badges (circular), rect-tags (sharp-cornered), and outlined cards (1.5px solid) — all single-weight ink outlines, no fills.\n- A massive italic Fraunces edition numeral (up to 480px) is the system's hero typographic anchor on cover-class slides.\n- 1.5px structural borders, 1px @ 32%-opacity solid or dashed internal dividers. No thicker borders, no shadows.\n- Page number (italic Fraunces) at every slide's bottom-right; nav-hint (italic Fraunces at 45% opacity) at the bottom-left.\n- The system is single-ink by design — adding any second color (a navy, a green, a yellow) shatters the printed-program register.\n\n## Colors\n\n### Palette\n- **Paper / Cream** (`{colors.paper}` — #FAF1E2): The dominant warm buttery cream surface. Reads as good-quality paper stock — not white, not beige, somewhere between. The default slide background, and the only background fill the system uses.\n- **Paper Dark** (`{colors.paper-d}` — #F2E5CF): A slightly darker cream for secondary surfaces or tonal separation. Available in the token system but used sparingly.\n- **Paper Very Dark** (`{colors.paper-vd}` — #E8D7B6): A deeper cream for accent surfaces. Reserved.\n- **Ink / Warm Rust Terracotta** (`{colors.ink}` — #B53D2A): The single ink color. Every text run, every border, every rule, every pill outline, every page number — all in this one color. The system's structural and expressive color.\n- **Ink Deep** (`{colors.ink-dp}` — #8E2D1F): A deeper rust reserved for emphasis. Available in the token system but used sparingly in the published slides.\n- **Rule** (`{colors.rule}` — #B53D2A): An alias for `{colors.ink}` — same hex, used semantically when referring to a rule line.\n- **Ink @ 78%** (`{colors.ink-78}` — rgba(181,61,42,0.78)): The ink at 78% opacity. Used for de-emphasized metadata text where slightly lower contrast is desired (e.g., pairing notes in menu rows, meta-tags under quotes).\n- **Ink @ 50%** (`{colors.ink-50}` — rgba(181,61,42,0.5)): The ink at 50% opacity. Used inside the paper-texture radial-dot gradient.\n- **Ink @ 32%** (`{colors.ink-32}` — rgba(181,61,42,0.32)): The ink at 32% opacity. Used for internal dividers — solid 1px lines and 1px dashed lines inside cards, between ledger rows, between course rows.\n\n### Defaults\n- **Default slide background**: `{colors.paper}`. Every slide. There is no alternate surface in this system.\n- **Default text color**: `{colors.ink}`. Every text run.\n- **Default border color**: `{colors.ink}` at 1.5px solid for structural borders; `{colors.ink-32}` at 1px solid or dashed for internal dividers.\n- **Default headline color**: `{colors.ink}`.\n- **Default body color**: `{colors.ink}`.\n- **Default page-number / nav-hint color**: `{colors.ink}` (full opacity for pagenum; 45% opacity for nav-hint).\n- **Default de-emphasized metadata color**: `{colors.ink-78}` — when a small piece of supporting text needs to recede from a primary line.\n\nThe palette is intentionally single-ink. There is no \"accent color\" to reach for — the design language depends on the one-ink constraint. If a moment needs to stand out, scale up the type (Bricolage 800 at 180px) or reach for the italic Fraunces edition numeral; do not introduce a second color.\n\n## Typography\n\n### Font Family\nThe system loads exactly two web fonts from Google Fonts, both with optical-size axes:\n\n- **Bricolage Grotesque** with `opsz` 12..96 and weights 400, 600, 700, 800. **In the published slides, only 700 and 800 are used.**\n- **Fraunces** with `opsz` 9..144, both roman and italic styles, weights 400, 500, 600. **In the published slides, all three weights of italic and weight 400/600 of roman are used.**\n\nThe two-face role split is strict: **Bricolage uppercase carries every display moment** (covers, headlines, card titles, course names, quote bodies, info values, who-tags, edition labels with tracking). **Fraunces italic carries every body moment** (paragraphs, leads, metadata, taglines, pills, page numbers, info keys, edition labels without tracking). **Fraunces roman** is reserved for specific tight roles (info keys in info-rows where italic tracking would feel out of place, and the description body inside index cards where roman is more readable).\n\nThe optical-size axis is critical: the same Fraunces face renders with subtly different letterforms at 14px metadata sizes versus 480px hero-numeral sizes — small sizes pick up sturdier strokes; large sizes pick up finer detail. Self-hosted fallbacks without `opsz` will lose this quality.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight / Style | Use |\n|---|---|---|---|---|\n| `{typography.display-jumbo-numeral}` | up to 480px | Fraunces | 400 italic | Hero edition numeral (cover-class typographic anchor) |\n| `{typography.display-cover}` | up to 180px | Bricolage | 800 uppercase | Cover-scale Bricolage title |\n| `{typography.display}` | up to 160px | Bricolage | 800 uppercase | Section-opener / manifesto headline |\n| `{typography.headline-xl}` | up to 140px | Bricolage | 800 uppercase | Featured-edition title |\n| `{typography.headline}` | up to 120px | Bricolage | 800 uppercase | Topbar headline on index / calendar slides |\n| `{typography.headline-md}` | up to 100px | Bricolage | 800 uppercase | Menu / programme title |\n| `{typography.quote}` | up to 96px | Bricolage | 700 uppercase | Pull-quote / testimonial body |\n| `{typography.card-title}` | up to 44px | Bricolage | 800 uppercase | Title inside an outlined card |\n| `{typography.course-name}` | up to 28px | Bricolage | 700 uppercase | Course / item name in a ledger row |\n| `{typography.info-value}` | up to 28px | Bricolage | 700 uppercase | Value in a key/value info row |\n| `{typography.edition-label-tracked}` | up to 18px | Bricolage | 700 uppercase / 0.18em | Big-edition label beneath a hero numeral |\n| `{typography.who-tag}` | up to 18px | Bricolage | 700 uppercase | Attribution name in a quote row |\n| `{typography.body-serif-italic-lg}` | up to 28px | Fraunces | 400 italic | Lead paragraph in a manifesto / letter |\n| `{typography.body-serif-italic}` | up to 22px | Fraunces | 400 italic | Standard body paragraph / lede |\n| `{typography.body-roman}` | up to 17px | Fraunces | 400 roman | Card description body (tighter setting for legibility at small size) |\n| `{typography.edition-label}` | up to 30px | Fraunces | 400 italic | \"EDITION N.\" italic label beside an edition badge |\n| `{typography.tagline}` | up to 26px | Fraunces | 400 italic | Tagline / subtitle beneath a cover title |\n| `{typography.stats}` | up to 22px | Fraunces | 400 italic | Stats line (\"N seats · M cities · L hours\") |\n| `{typography.pill-text}` | up to 20px | Fraunces | 400 italic | Text inside a pill button or rect-tag |\n| `{typography.meta-tag}` | up to 16px | Fraunces | 400 italic | Card metadata (city tag, num tag, seats tag, date tag) |\n| `{typography.info-key}` | up to 16px | Fraunces | 400 italic / 0.16em / UPPER | Key in a key/value info row |\n| `{typography.pagenum}` | up to 16px | Fraunces | 400 italic | Page number at the bottom-right of every slide |\n| `{typography.nav-hint}` | up to 13px | Fraunces | 400 italic / 45% opacity | Navigation hint at the bottom-left of the viewport |\n\n### Defaults\n- **Default size for a primary slide headline**: `{typography.headline}` (up to 120px) in Bricolage 800 uppercase.\n- **Default size for a cover-scale title**: `{typography.display-cover}` (up to 180px).\n- **Default size for the hero typographic anchor on cover-class slides**: `{typography.display-jumbo-numeral}` (italic Fraunces up to 480px) — the system's signature hero element.\n- **Default size for a body paragraph**: `{typography.body-serif-italic}` (up to 22px) in italic Fraunces.\n- **Default size for a lede paragraph**: `{typography.body-serif-italic-lg}` (up to 28px).\n- **Default size for body text inside a card**: `{typography.body-roman}` (up to 17px) in **roman** Fraunces — the roman is more readable at small sizes than italic.\n- **Default size for an \"EDITION N.\" label**: `{typography.edition-label}` (up to 30px) in italic Fraunces, paired with an `{components.ed-badge}` circular ordinal.\n- **Default weight for any Bricolage display moment**: 800. (Weight 700 is reserved for the quote body and course/who-tag elements; weight 800 is the primary display weight.)\n- **Default weight for any Fraunces body moment**: 400.\n\nWhen unsure, reach for `{typography.headline}` (up to 120px) for a routine slide headline. The 140–180px tier is for featured-edition titles and covers; the 160px tier is for section openers. Use the jumbo edition numeral when the slide is a cover-class moment and needs a hero anchor.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Bricolage display element is UPPERCASE with negative letter-spacing (-0.005em to -0.012em).** A sentence-case Bricolage headline does not exist in this system. The uppercase + negative-tracking + weight 800 combination is the system's display voice.\n- **Every Fraunces body element is italic by default.** Roman Fraunces appears only for specific tight cases (info-key in info-rows, body inside index cards). When in doubt, italic.\n- **The edition badge (`{components.ed-badge}`) is always paired with an italic edition label** — the circle ordinal and the \"EDITION N.\" text are one unit. Using one without the other reads as broken.\n- **Every card / pill / rect-tag / badge carries a 1.5px solid ink border with no fill.** The single-weight outlined-shape vocabulary is the system's structural language. Filled shapes do not exist.\n- **The paper-texture overlay (`{components.paper-texture}`) is on every slide.** Removing it (or running the system on a pure flat cream without texture) loses the printed-paper quality.\n- **Every slide carries the page-number marker** at bottom-right in italic Fraunces. The page-number is the system's spine — without it, slides feel unanchored.\n- **Internal dividers inside cards alternate between 1px solid @ 32% opacity (above content) and 1px dashed @ 32% opacity (below content).** The solid/dashed pairing is the system's card-rhythm device.\n\n### Typography Principles\nThe weight 800 + uppercase + negative letter-spacing combination is the system's Bricolage voice. Switching any of those three properties (e.g., weight 700 uppercase, or weight 800 sentence case, or default tracking) reads as a different design system. The Fraunces italic-default + opsz-axis combination is the system's body voice — using a non-opsz fallback face flattens the quality at small sizes.\n\nUnderline is not used. Bold within body paragraphs uses Fraunces weight 600 (not 700/800). Color emphasis does not exist because there is only one color. The system's only emphasis mechanisms are: scale (bigger Bricolage), weight shift inside body (Fraunces 400 → 600), italic ↔ roman switch, and opacity (full → 78%).\n\n## Layout\n\n### Canvas System\nThe system targets a fluid viewport — each `.slide` is `100vw × 100vh` with absolute positioning. Slides stack inside a `.stage` container with the paper-texture overlay sitting absolutely on the stage. Only one `.slide.active` is visible at a time; opacity transitions between slides take 280ms.\n\n### Padding Scale (uses `clamp()` ranges)\n| Token | Range | Use |\n|---|---|---|\n| `{spacing.slide-pad-h-default}` | clamp(60px, 5vw, 110px) | Default horizontal slide padding |\n| `{spacing.slide-pad-h-wide}` | clamp(80px, 7vw, 160px) | Wider horizontal padding for featured / calendar slides |\n| `{spacing.slide-pad-h-narrow}` | clamp(120px, 12vw, 280px) | Narrow horizontal padding for menu / quote slides (forces content into a column) |\n| `{spacing.slide-pad-top-default}` | clamp(96px, 10vh, 160px) | Default top padding |\n| `{spacing.slide-pad-top-cover}` | clamp(60px, 6vh, 100px) | Cover top padding (less, to give the title room) |\n| `{spacing.slide-pad-bottom-default}` | clamp(110px, 11vh, 170px) | Default bottom padding (leaves room for page-num chrome) |\n| `{spacing.slide-pad-bottom-wide}` | clamp(150px, 14vh, 220px) | Wider bottom padding for featured / quote slides |\n| `{spacing.gap-section}` | clamp(28px, 3vh, 50px) | Between major content sections |\n| `{spacing.gap-content}` | clamp(18px, 2vh, 32px) | Between related content blocks |\n| `{spacing.gap-row}` | clamp(14px, 1.6vh, 24px) | Between row-level elements (course rows, ledger rows) |\n| `{spacing.gap-tight}` | clamp(10px, 1.2vh, 18px) | Between tightly coupled elements |\n\n### Chrome Anatomy\nEvery slide carries a **page-number marker** at the bottom-right (italic Fraunces, ~16px max). The viewport also carries a **nav-hint** at the bottom-left (italic Fraunces, 45% opacity), suggesting keyboard navigation. These two chrome elements are the system's universal slide anchors.\n\nSlides with a topbar (index, calendar) carry a Bricolage headline on the left + a small italic Fraunces label-tag on the right, separated below by a 1.5px solid ink horizontal rule. The topbar-divider is the system's universal page-divider device.\n\n### Border-Radius\n- **999px** — pill buttons (fully pill-shaped)\n- **50%** — circular edition badges\n- **0** — every other shape (cards, rect-tags, info-cards, ledger rows, internal dividers)\n\nThe system uses sharp corners for content containers and pill/circle for action and ordinal markers. No medium border-radius values (4px, 8px, 12px) exist.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThe system uses **zero shadows**. No box-shadow, no text-shadow, no filter, no gradient. Elevation is communicated entirely through:\n\n1. **1.5px solid ink borders** on cards, pills, badges, rect-tags — the outlined-shape vocabulary is the system's structural depth.\n2. **1px solid or dashed internal dividers at 32% opacity** inside cards and between rows — the subtle horizontal lines give cards their internal rhythm.\n3. **The paper-texture overlay** at 10% opacity on every slide — the dotted texture sits atmospherically beneath all content, giving the page its print-stock quality.\n4. **Opacity layering on text** — primary at 100%, de-emphasized metadata at 78%, near-invisible dividers at 32%.\n\nThe absence of shadow is itself the depth language. Adding `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` shatters the printed-paper feel.\n\n### Paper Texture as Atmospheric Depth\nThe radial-dot texture on `.stage::before` is part of the depth system — it is not optional decoration. The texture gives the cream surface a quality that flat #FAF1E2 lacks: a sense that the surface is paper stock with grain, not a CSS background fill. The 4px tile size with 0.5px radial dots in 50%-opacity ink at 10% overall opacity is calibrated to be invisible at conversational viewing distance and just-visible at close inspection.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **1.5px solid `{colors.ink}`** — the universal structural border. Cards, pills, edition badges, rect-tags, topbar dividers, who-row top borders, info-card outlines.\n- **1px solid `{colors.ink-32}`** — internal solid dividers inside cards (between card-top metadata and the card title), between ledger rows, between course rows.\n- **1px dashed `{colors.ink-32}`** — internal dashed dividers inside cards (between the card body and the meta-row at the bottom), between info-rows in info-cards.\n\nBorders are never thicker than 1.5px. Never colored beyond ink (full or 32%). Never dotted (dotted is reserved for the paper-texture pattern). The solid/dashed pairing inside cards is the system's signature rhythm device.\n\n### Decorative Element Types\n\n**Paper Texture Overlay** (`{components.paper-texture}`) — A 4px-tile radial-dot pattern in 50%-opacity ink at 10% overall opacity on `.stage::before`. The system's atmospheric base; on every slide.\n\n**Pill Button** (`{components.pill}`) — An outlined fully-rounded-rectangle (border-radius 999px) holding short italic Fraunces text. The system's CTA / action button. Pills cluster in action rows (e.g., cover action row).\n\n**Pill Divider** (`{components.pill-divider}`) — A small italic Fraunces character (typically `·` or `/`) at 70% opacity placed between pills in a row.\n\n**Edition Badge** (`{components.ed-badge}`) — A ~38px circular outlined badge holding a single italic Fraunces digit. The system's edition / chapter ordinal marker; always paired with an italic \"EDITION N.\" label.\n\n**Rect Tag** (`{components.rect-tag}`) — An outlined sharp-cornered rectangular tag holding short italic Fraunces text. The sharp-cornered cousin of the pill; used where roundness isn't appropriate.\n\n**Outlined Card** (`{components.card-outlined}`) — A 1.5px ink-outlined rectangular card. Holds a card-top metadata row (separated below by a 1px @ 32% solid divider), a Bricolage card title, a Fraunces body description, and a meta-row at the bottom (separated above by a 1px @ 32% dashed divider). The system's primary content card.\n\n**Topbar with Divider** — A Bricolage headline on the left + a small italic Fraunces label-tag on the right, separated below by a 1.5px solid ink horizontal rule. The system's universal section opener.\n\n**Info-Card** — A wider outlined card with internal info-rows (key / value pairs separated by 1px @ 32% dashed dividers). Used as a featured-edition supporting panel.\n\n**Ledger Row** (`{components.ledger-row}`) — A multi-column grid row with a 1px @ 32% solid border-bottom. Holds tags, labels, and pills aligned in columns. The system's calendar / schedule / index pattern.\n\n**Course Row** — A 64px / 1fr / auto grid row with a 1px @ 32% solid border-bottom. Holds a Fraunces num-tag, an item (Bricolage name + Fraunces description), and a Fraunces pairing tag. The menu / programme pattern.\n\n**Italic Jumbo Edition Numeral** — A massive italic Fraunces digit at up to 480px. The system's signature hero typographic anchor on cover-class slides, paired with a small tracked Bricolage label beneath and an italic Fraunces meta line.\n\n**Page Number** (`{components.pagenum}`) — Italic Fraunces at the bottom-right of every slide.\n\n**Nav Hint** (`{components.nav-hint}`) — Italic Fraunces at 45% opacity at the bottom-left of the viewport, suggesting keyboard navigation.\n\n## Do's and Don'ts\n\n### Do\n- Commit to single-ink rendering. Every text, border, rule, badge, and pill is `{colors.ink}` — the warm rust terracotta. Use opacity (78%, 32%, 10%) for variation, never a different hue.\n- Apply the paper-texture overlay to every slide. The 4px radial-dot pattern at 10% opacity is part of the design system, not optional polish.\n- Run every Bricolage display element at weight 800 (or 700 for quote / course-name / who-tag) in strict uppercase with negative letter-spacing.\n- Run every Fraunces body element in italic by default. Use roman only for info-keys (where italic tracking would feel out of place) and card body descriptions (where italic at small size is less readable).\n- Reach for the italic Fraunces jumbo numeral (up to 480px) as the hero typographic anchor on cover-class slides. It's the system's signature.\n- Pair every edition badge with an italic \"EDITION N.\" Fraunces label — the circle ordinal and the text label are one unit.\n- Use the outlined-card pattern (1.5px ink border + internal 1px @ 32% solid divider above content + 1px @ 32% dashed divider below content) for primary content cards. The solid/dashed pairing is the system's rhythm.\n- Use the pill (border-radius 999px) and the rect-tag (sharp corners) intentionally — pill for actions, rect for metadata / status. Don't conflate them.\n- Place the page-number marker (italic Fraunces, bottom-right) on every slide. The marker is the system's spine.\n- Keep slides rich-but-curated: one major Bricolage display moment + 2–4 supporting groups (cards, pills, ledger rows, info pairs). Single-element slides feel underweight; 8-element slides feel broken.\n\n### Don't\n- Don't introduce a second ink color. The system is single-ink — adding a navy, green, yellow, or any second hue shatters the printed-program register.\n- Don't fill any shape. Cards, pills, badges, rect-tags are outline-only. Filled rectangles in the ink color do not exist.\n- Don't use box-shadow, gradient, blur, or filter on any element. The system is flat printed paper.\n- Don't omit the paper-texture overlay. A flat #FAF1E2 background without the dot pattern reads as digital, not paper.\n- Don't run Bricolage in sentence case. Bricolage is always uppercase with negative tracking and weight 700 or 800.\n- Don't render Fraunces in roman by default. Italic is the body voice; roman is the exception for specific tight cases.\n- Don't use thicker borders (2px+). The 1.5px structural border weight is the system's commitment.\n- Don't use a medium border-radius (4px, 8px, 12px). The system uses 999px (pill), 50% (badge), or 0 (everything else).\n- Don't pair the edition badge with a non-Fraunces label or skip the label entirely. The badge-and-label unit is the system's edition marker.\n- Don't crowd a slide with 8 small elements. Reach for fewer, larger groups with breathing room.\n\n## Responsive Behavior\n\nThe system uses **`clamp()` units throughout** — every size, padding, gap, and rule scales fluidly between minimum and maximum based on viewport width and height. The same composition renders correctly on a 1280×720 laptop, a 1920×1080 monitor, and a 2560×1440 display without media queries.\n\n### Scaling Behavior\n- Bricolage display sizes clamp between a min (e.g. 60px), a vw/vh-based middle value, and a max (e.g. 140px). The `min()` inner function combines width-based and height-based caps so headlines never overflow on short viewports.\n- Fraunces body sizes follow the same pattern but with smaller ranges.\n- Padding and gaps scale linearly with vw/vh.\n- The 1.5px structural border and 1px @ 32% internal dividers are fixed-pixel and do not scale, which means at larger viewports the borders appear proportionally finer. This is by design.\n\n### Presenter Behavior\n- Slides advance via keyboard navigation (handled by deck JavaScript).\n- Only one `.slide.active` is visible at a time; non-active slides are `opacity: 0; pointer-events: none`.\n- Slide-to-slide transition is a 280ms opacity fade.\n- The nav-hint at the bottom-left (\"← → to navigate\") tells the viewer how to advance.\n\n### Print / Export\nThere is no `@media print` rule in the system. Print export will render only the active slide; multi-slide print requires per-slide rendering or a dedicated print stylesheet.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display / cover / headline (Bricolage roles, 96–180px) | 思源宋体 Noto Serif SC | 700 | Mincho heavy weight carries the printed-program mass that Bricolage 800 provides in Latin |\n| Card title / course-name / info-value (28–44px) | 思源宋体 Noto Serif SC | 700 | Same Mincho voice at smaller sizes for consistency |\n| Hero edition numeral (480px italic Fraunces) | 思源宋体 Noto Serif SC | 400 | Use a Chinese ordinal character (一二三 / 春夏秋) for the hero anchor instead of a Western digit |\n| Body / lede / tagline (Fraunces italic roles) | 思源宋体 Noto Serif SC | 400 | Mincho body voice — warmth without italic, since Chinese has no italic |\n| Pill text / meta-tag / pagenum | 思源宋体 Noto Serif SC | 400 | Keep all chrome in Mincho 400; the system's single-ink discipline carries through |\n| Info-key / edition-label-tracked (uppercase tracked roles) | 思源宋体 Noto Serif SC | 400 with 0.16em letter-spacing | Maintains the tracked-chrome feel |\n\n### Mixed-Content Strategy\n\nUse **Strategy A** — switch the entire face stack to Noto Serif SC across all roles, replacing both Bricolage Grotesque (display) and Fraunces (body). Long Table is a minimal single-ink data / program system where the typographic personality is carried more by the **single-ink rust terracotta**, the **outlined-shape vocabulary**, and the **paper-texture overlay** than by the specific Latin faces. Going all-Mincho in Chinese preserves the printed-program register cleanly without the per-glyph baseline wobble that Strategy C would introduce on a system this typographically dense. Stack:\n\n```css\n/* Bricolage roles (display, headline, card-title, course-name, info-value) */\nfont-family: 'Bricolage Grotesque', 'Noto Serif SC', sans-serif;\n/* Fraunces roles (body, lede, tagline, pill, pagenum, edition-label) */\nfont-family: 'Fraunces', 'Noto Serif SC', Georgia, serif;\n```\n\nWhen the deck content is pure Chinese, override both font stacks to lead with Noto Serif SC. Bricolage roles get weight 700 (matches 800 mass in Mincho), Fraunces roles get weight 400.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.86–0.95 on display, 1.45–1.5 on body) read as cramped in Chinese. Bump display to 1.0–1.1 and body to 1.55–1.65.\n- **Remove negative letter-spacing on CJK headlines.** Bricolage display uses -0.005em to -0.012em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Bricolage portion was meant to be capitalized. (This matters here — every Bricolage display element in the source is `text-transform: uppercase`.)\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between Noto Serif SC weight 400 and 700 inside the same sentence — pick the weight that matches the role (headline = 700, body = 400) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nLong Table's whole voice is \"supper-club poster / Risograph zine / small-press dinner program\" — single-ink rust terracotta on cream, outlined shapes, paper-texture overlay. In Chinese, the system's identity does not depend on the specific Latin faces (Bricolage and Fraunces); it depends on the **single-ink commitment**, the **1.5px outlined-shape vocabulary**, the **4px radial-dot paper texture**, and the **rich-but-curated density**. Going all-Noto-Serif-SC preserves every one of those identity markers cleanly.\n\nThe default-italic body rule does not translate to Chinese (Chinese has no italic concept; slanted Han glyphs read as broken, not as a body voice). In Chinese, every Fraunces-italic role simply becomes **Noto Serif SC weight 400 upright** — the warmth comes from the Mincho character itself, not from the slant. This is the right trade-off for this system.\n\nThe hero italic Fraunces jumbo numeral (up to 480px) is the system's signature anchor in Latin — a single italic digit acting as a typographic centerpiece. In Chinese, **use a Chinese ordinal or season character instead of a Western digit**: 「三」、「五」、「春」、「秋」, rendered in Noto Serif SC at weight 400. The Han glyph's denser visual weight at 480px balances the cover slide better than a Western digit would; the cream paper background and warm rust ink carry the printed-program feel through unchanged.\n\nThe system's outlined-shape vocabulary (pills, edition badges, rect-tags, outlined cards) works identically in Chinese — no adjustments needed. The \"EDITION N.\" label paired with the circular badge becomes 「第三期」or 「第 03 期」inside the circle, with the meta-label below in Noto Serif SC 400. The 32%-opacity solid / dashed internal divider rhythm is purely structural and unaffected by language.\n\n### Known CJK Gap\n\nThe Fraunces italic-default body voice is one of Long Table's most distinctive typographic moves in Latin — italic Mincho-style serif body that gives the system its lyrical, hand-written warmth. Chinese has no equivalent: there is no commonly-available \"italic Mincho\" face on the Google Fonts CDN, and slanted Han glyphs read as broken regardless. The Chinese rendering loses the italic-default character — every body line becomes upright Noto Serif SC weight 400. This is a real loss of personality, partially compensated by Noto Serif SC's own warmth at body sizes, but Chinese-content Long Table decks read measurably more \"neutral magazine\" than \"supper-club poster.\" For decks where this matters, lean harder on the **single-ink color** and the **paper-texture overlay** to carry the warmth that the italic body would have carried in Latin.\n\n## Iteration Guide\n\n1. Any new mark on a slide is in `{colors.ink}` — full opacity for primary, 78% for de-emphasized metadata, 32% for internal dividers. No second color.\n2. Any new headline is Bricolage Grotesque weight 800 uppercase with negative letter-spacing. Pick the size from the headline ladder (96 / 100 / 120 / 140 / 160 / 180px max) — do not invent a new size.\n3. Any new body paragraph is Fraunces italic at weight 400. Use roman only for info-keys (tracked uppercase) and card-body descriptions.\n4. Any new edition / ordinal marker uses the `{components.ed-badge}` (circular outline) paired with an italic \"EDITION N.\" Fraunces label.\n5. Any new action button is the `{components.pill}` (border-radius 999px); any new metadata tag is the `{components.rect-tag}` (sharp corners). Don't conflate the two.\n6. Any new card is the `{components.card-outlined}` pattern: 1.5px ink border, internal 1px @ 32% solid divider above content, internal 1px @ 32% dashed divider below content.\n7. Any new ledger / schedule / calendar row uses the multi-column grid + 1px @ 32% solid border-bottom pattern (`{components.ledger-row}`).\n8. Any new section opener uses the topbar pattern: Bricolage headline + small italic Fraunces label on the right + 1.5px solid ink horizontal rule beneath.\n9. Any new cover-class moment reaches for the italic Fraunces jumbo edition numeral as the hero typographic anchor — paired with a small tracked Bricolage label beneath and a italic Fraunces meta line.\n10. Every slide carries the page-number marker. If you skip it, the slide will feel unanchored.\n\n## Known Gaps\n\n- The two Google Fonts (Bricolage Grotesque with `opsz` 12..96, Fraunces with `opsz` 9..144) are loaded via `<link>`. Offline rendering will fall back to system sans (for Bricolage) and Georgia (for Fraunces) — which loses the optical-size axis and the personality of both faces. Self-hosting recommended for offline / print reliability.\n- The `opsz` optical-size axis is critical to quality at large display sizes (480px jumbo numeral) and small metadata sizes (14px page-number). Fallback faces without `opsz` will look noticeably flat at the extremes.\n- The system is single-ink by design. If a deck needs a second emphasis color (a \"callout\" or \"warning\" hue), the system cannot accommodate it without breaking the printed-program register. Use Bricolage scale + opacity + italic/roman switch as the only emphasis mechanisms.\n- The paper-texture overlay uses a `background-image` radial-gradient that may render with subtle compression artifacts on some browsers at high zoom. The texture is essential to the system identity; do not remove it as a \"performance optimization.\"\n- Body paragraphs are italic by default. For deck content where italic at body scale is hard to read (long technical paragraphs, code samples), the system has no clean fallback — italic is the body voice. Keep paragraphs short and lyrical.\n- The CSS has several empty rule blocks (`.body-it { ... }`, `.s-cover .stats .num { font-weight: 600; }` etc.) where the original commented-out italic / weight properties have been stripped. The intended treatment in many places is \"italic Fraunces at weight 400\" — the default style — but the empty blocks make this implicit rather than explicit. Treat italic as the default everywhere the comments hint at it.\n- The system loads Bricolage weights 400 and 600 and Fraunces weights 500 — these are not actively used in the published CSS. Using them would introduce intermediate weights that break the single-weight commitment per face.\n- The fallback `.body-it` and `.body-ro` utility classes are defined but use the explicit class names sparingly in the markup. Most slides set typography per-element rather than via the utility classes — copy the per-element styles when authoring new slides, not the utilities.\n- The hero italic Fraunces jumbo numeral at 480px is a literal numeral character — there is no glyph alternation or kerning fix for specific characters. The \"0\" and \"8\" glyphs may need optical adjustment at extreme sizes; check rendering at the target viewport.\n- The system has no `@media print` rule. Print export will not paginate; treat Long Table as screen-first.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/long-table/preview.md":"# Long Table Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/long-table/design.md`\n- Preview card: `bold-template-pack/templates/long-table/preview.md`\n\n## Selection Metadata\n\n- Slug: `long-table`\n- Tagline: Warm cream and rust-red supper-club aesthetic with bold uppercase grotesk headlines, Fraunces serifs, and pill-shaped outlined buttons.\n- Mood: warm, intimate, modern, friendly, small-batch, social, hospitality\n- Tone: warm, playful, considered, social, magazine-friendly, modern-editorial\n- Formality: medium\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel like a warm, intimate, modern hospitality / community brand: supper clubs, dinner series, small restaurants, creative-studio events, membership pitches, lifestyle and wine brands. Equally good for any deck wanting a single warm accent colour, mixed-weight typography, and a social-media-aware modern-editorial voice.\n- Avoid for: Decks that need corporate polish, technical density, or a cold / minimalist register — the rust-red palette and bold serif mix are intentionally warm and people-facing.\n\n## Visual Snapshot\n\nA warm, single-ink editorial system in the register of a supper-club poster, a small-batch zine, or a Risograph-printed program. The entire system runs in one ink color — a warm rust terracotta (#B53D2A) — on a buttery cream paper ground (#FAF1E2), with a subtle 4px radial-dot texture overlay giving the surface its \"printed paper\" quality. Display type runs in Bricolage Grotesque at weight 700–800 in uppercase; body and metadata run in Fraunces serif at weight 400–600 with optical-size axis engaged. Pill buttons, outlined edition badges, italic-edition numerals, and dashed/solid 1.5px borders complete the printed-program vocabulary.\n\nLong Table is a single-ink editorial system in the register of a supper-club poster, a Risograph zine, or a small-press dinner program. The foundational premise is monochromatic: every visible mark in the system — every headline, every paragraph, every border, every rule, every pill, every page number — is rendered in a single warm rust terracotta ink ({colors.ink} — #B53D2A) on a buttery cream paper ground ({colors.paper} — #FAF1E2). The only chromatic variation is opacity: the same ink at 100% for primary marks, at 78% for de-emphasized metadata, at 32% for dashed internal dividers, at 10% for the paper-texture dots.\n\n## Preview Ingredients\n\n- Palette: paper #FAF1E2; paper-d #F2E5CF; paper-vd #E8D7B6; ink #B53D2A; ink-dp #8E2D1F; rule #B53D2A\n- Typography: See full design doc after selection.\n- Signature move: Bricolage Grotesque at weights 700 and 800 in strict uppercase carries every display moment — covers, headlines, card titles, course names, quote bodies, info values, who-tags. Bricolage is a wide, slightly-condensed grotesque with strong personality; its upp...\n- Signature move: Fraunces at weight 400–600 carries every body paragraph, every metadata field, every pill, every page number, every edition label. Italic Fraunces is the default body style — the slanted serif is the system's body voice, lending warmth and editorial personali...\n- Signature move: One ink color ({colors.ink} — warm rust terracotta) on cream paper ({colors.paper}). Opacity variants are the only color variation.\n- Signature move: Bricolage Grotesque weight 700–800 uppercase for every display moment; Fraunces 400–600 italic-default for every body and metadata moment.\n- Signature move: Subtle 4px radial-dot paper texture on every slide via .stage::before — invisible at distance, present up close.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/mat/design.md":"---\nversion: alpha\nname: Mat\ndescription: A warm, material-tactile presentation system inspired by a high-end product landing page. Dark forest green is the dominant environment, warmed by a low atmospheric wood-brown glow from the bottom-right corner of every dark slide. Cream type floats directly on the field; warm orange acts as the single accent. The typeface stack pairs Bricolage Grotesque (a heavy, rounded grotesque) for display with DM Sans for body and DM Mono for labels — the result reads as industrial-design portfolio meets boutique product launch, never tech demo.\n\ncolors:\n  bg-dark: \"#232E26\"\n  bg-dark-alt: \"#2E3D30\"\n  bg-cream: \"#EDE6D0\"\n  bg-cream-alt: \"#E4DAC4\"\n  ink-cream: \"#F0E8D2\"\n  ink-cream-2: \"rgba(240, 232, 210, 0.58)\"\n  ink-cream-3: \"rgba(240, 232, 210, 0.3)\"\n  ink-dark: \"#1E2820\"\n  ink-dark-2: \"rgba(30, 40, 32, 0.6)\"\n  ink-dark-3: \"rgba(30, 40, 32, 0.3)\"\n  accent-orange: \"#C07030\"\n  border-on-dark: \"rgba(240, 232, 210, 0.12)\"\n  border-on-cream: \"rgba(30, 40, 32, 0.14)\"\n  wood-glow: \"#7A4E24\"\n\ncolor-aliases:\n  c-fg: ink-cream\n  c-fg-light: ink-dark\n  c-bg: bg-dark\n  c-bg-light: bg-cream\n  c-accent: accent-orange\n\ntypography:\n  display:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 12vw\n    fontWeight: 800\n    lineHeight: 0.88\n    letterSpacing: -0.03em\n  h1:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 7vw\n    fontWeight: 800\n    lineHeight: 0.92\n    letterSpacing: -0.025em\n  h2:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 4vw\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  h3:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 2.4vw\n    fontWeight: 600\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  lead:\n    fontFamily: \"DM Sans, Noto Sans SC, sans-serif\"\n    fontSize: 1.5vw\n    fontWeight: 400\n    lineHeight: 1.55\n  body:\n    fontFamily: \"DM Sans, Noto Sans SC, sans-serif\"\n    fontSize: 1.05vw\n    fontWeight: 400\n    lineHeight: 1.65\n  caption:\n    fontFamily: \"DM Sans, Noto Sans SC, sans-serif\"\n    fontSize: 0.82vw\n    fontWeight: 400\n    lineHeight: 1.5\n  label:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 0.7vw\n    fontWeight: 400\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  stat-value:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 5.5vw\n    fontWeight: 800\n    lineHeight: 1.0\n    letterSpacing: -0.025em\n  quote-text:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 3.4vw\n    fontWeight: 600\n    lineHeight: 1.2\n    letterSpacing: -0.02em\n  quote-mark:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 8vw\n    fontWeight: 800\n    lineHeight: 0.6\n\nspacing:\n  pad-x: 5.5vw\n  pad-y: 5.5vh\n  gap-lg: 4.5vh\n  gap-md: 2.8vh\n  gap-sm: 1.4vh\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  kicker:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    color: \"{colors.accent-orange}\"\n  rule:\n    width: 32px\n    height: 1px\n    background: \"{colors.accent-orange}\"\n  bullet-marker:\n    content: \"—\"\n    color: \"{colors.accent-orange}\"\n    fontFamily: \"{typography.label.fontFamily}\"\n    description: \"Em-dash prefix in warm orange; emerges in mono face. The system's standard list mark; never a bullet, never a checkmark.\"\n  info-card:\n    background: \"{colors.bg-cream}\"\n    color: \"{colors.ink-dark}\"\n    padding: \"{spacing.gap-md} calc({spacing.pad-x} * 0.8)\"\n    maxWidth: 28vw\n    description: \"Cream inset box embedded on a dark green field. The signature material-contrast component; carries a heading and a body block, no border, no shadow.\"\n  chrome-band:\n    borderBottom: \"1px solid {colors.border-on-dark}\"\n    paddingBottom: \"{spacing.gap-sm}\"\n    description: \"Label-pair on top of a 1px rule; suppressed on cover/quote/end slide types.\"\n  foot-band:\n    borderTop: \"1px solid {colors.border-on-dark}\"\n    paddingTop: \"{spacing.gap-sm}\"\n    description: \"Label-pair under a 1px rule; mirrors the chrome band.\"\n  stat-cell:\n    borderRight: \"1px solid {colors.border-on-dark}\"\n    padding: \"{spacing.gap-md} {spacing.pad-x} {spacing.gap-md} 0\"\n    description: \"A vertically-divided cell containing a large numerical value (with optional inline orange-emphasis em-span) and a one-line label. Last cell has no right border.\"\n  bar-fill:\n    width: \"100%\"\n    background: \"{colors.ink-cream-3}\"\n    description: \"Vertical bar in muted cream; gets the orange accent (.accent variant) when it's the highlighted data point.\"\n  compare-divider:\n    width: 1px\n    background: \"{colors.border-on-dark}\"\n    description: \"A 1px-wide vertical column (not a border) used to split a before/after comparison; subtle, not loud.\"\n  image-placeholder:\n    background: \"rgba(240, 232, 210, 0.06)\"\n    border: \"1px solid {colors.border-on-dark}\"\n    color: \"{colors.ink-cream-3}\"\n    description: \"Hairline-bordered void with centered mono label until photography is available.\"\n  atmospheric-glow:\n    selector: \".slide.dark::before\"\n    position: \"bottom-right ellipse, 55% wide × 70% tall\"\n    gradient: \"radial-gradient(ellipse at 70% 80%, rgba(122, 78, 36, 0.28) 0%, rgba(80, 50, 20, 0.14) 40%, transparent 70%)\"\n    description: \"The wood-brown atmospheric glow that lives on every dark slide via ::before. Non-optional on dark surfaces; defines the warmth of the system.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nMat is a **material-tactile presentation system** built around a single environmental premise: a deep forest-green surface warmed from the bottom-right corner by a low wood-brown glow. The atmosphere does the heavy lifting — before any content lands, the slide already feels like a workbench in afternoon light. Cream type floats directly on the green field; there are no cards, no panels, no frames. Where the system needs to break the green, it does so with a single cream inset box (the info-card) that reads as a piece of warm paper laid on the dark surface.\n\nThe typeface stack is a deliberate three-voice pairing. **Bricolage Grotesque** at weights 700 and 800 is the display workhorse — heavy, rounded, with a slightly mechanical character that suits product writing without feeling tech-startup. **DM Sans** at weight 400 is the body voice, neutral enough to let the display type breathe. **DM Mono** at weight 400 handles all labels, kickers, metadata, and chrome — anything structural that needs to read as a tag rather than a sentence. Display type is **always mixed case** in this system, never uppercase; the uppercase work is reserved for mono labels.\n\nThe palette is intentionally narrow. **Dark forest green** is the dominant surface (`{colors.bg-dark}`), with a slightly lighter alternate available for layered regions. **Warm cream** is the primary text color on dark and the secondary surface color when a slide flips light. **Warm orange** (`{colors.accent-orange}`) is the single accent — it appears only as small inline marks: kicker text, bullet em-dashes, the `<em>` inside a stat numeral, the opening quote glyph, the single highlighted bar in a chart. Orange is never a background and never a large headline color; it's the structural emphasis dot of the system.\n\nDepth is minimal and atmospheric, not stacked. There are no drop shadows. There are no rounded corners on any structural element. The only depth signal is the wood-brown radial glow that sits behind every dark slide via a `::before` pseudo-element. Region separation comes from **thin 1px hairline rules** in low-opacity cream — for chrome bands, foot bands, stat cell dividers, compare panel splits, and chart baselines. Nothing about this system is loud.\n\n**Density philosophy: medium-sparse.** Mat reads as elegant when the slide breathes — generous left and right padding (`{spacing.pad-x}` at 5.5vw), one main typographic moment, and one secondary block of supporting copy. Cramming three columns of bullets onto a slide breaks the system; the warm green field needs negative space to do its atmospheric work. The exception is the stats and compare slide types, where a clean three-up or two-up arrangement of restrained cells is correct. A slide with a single headline and one paragraph of lead copy is right in this system's lane. A slide that fills 80% of its area with type is fighting the design.\n\n**Key Characteristics:**\n- Dark forest green canvas (`{colors.bg-dark}`) with a warm wood-brown radial glow (`{components.atmospheric-glow}`) anchored to the bottom-right corner of every dark slide.\n- Cream text (`{colors.ink-cream}`) floats directly on the green field with no card, panel, or frame around it.\n- Bricolage Grotesque display type is **always mixed case** — never uppercase. Uppercase is reserved for DM Mono labels.\n- A single accent color, warm orange (`{colors.accent-orange}`), used only as small inline emphasis (kicker, bullet marker, inline `<em>`, quote glyph, one chart bar).\n- The cream **info-card** (`{components.info-card}`) is the signature material-contrast component — a warm paper rectangle inset on the dark field.\n- Bullet lists use an em-dash prefix in warm orange via DM Mono — never a dot, never a check.\n- Thin 1px hairline rules in low-opacity cream are the only divider language. No heavy borders, no shadows.\n- The system has one light slide variant (cream background with dark green text) used as a tonal inversion within a deck, never as the default.\n\n## Colors\n\n### Palette\n\n- **Dark Forest Green** (`{colors.bg-dark}` — #232E26): The dominant environment. Default background for every slide unless a deliberate light-slide variant is chosen. The green is muted enough that cream type sits on it without vibration.\n- **Slightly Lighter Green** (`{colors.bg-dark-alt}` — #2E3D30): A tonal step-up reserved for layered or recessed surfaces within a dark slide. Available but used sparingly.\n- **Warm Cream** (`{colors.bg-cream}` — #EDE6D0): The light-slide background and the fill color of the info-card inset. Reads as warm paper, not white — the warmth is essential to the system's material identity.\n- **Deeper Cream** (`{colors.bg-cream-alt}` — #E4DAC4): A secondary cream tone for image placeholders on light slides.\n- **Cream Ink** (`{colors.ink-cream}` — #F0E8D2): Primary text color on every dark surface. Slightly warmer than the background cream — chosen so headlines feel like they're carved into the green rather than printed on it.\n- **Cream Ink at 58% / 30%** (`{colors.ink-cream-2}`, `{colors.ink-cream-3}`): Secondary and tertiary text on dark. Used for muted lead copy and barely-there metadata respectively.\n- **Dark Ink** (`{colors.ink-dark}` — #1E2820): Primary text color on cream surfaces (info-card body, light slide). A very dark forest green, never pure black.\n- **Dark Ink at 60% / 30%** (`{colors.ink-dark-2}`, `{colors.ink-dark-3}`): Muted and tertiary text on cream.\n- **Warm Orange** (`{colors.accent-orange}` — #C07030): The single accent. A burnt copper-orange that nods to wood, leather, and oxidized metal. Never a background, never a large headline color.\n- **Wood Glow** (`{colors.wood-glow}` — #7A4E24): The radial atmospheric glow color, applied only at 0.28 and 0.14 alpha inside the bottom-right corner gradient. Never used as a flat fill.\n\n### Defaults\n\n- **Default surface background**: `{colors.bg-dark}` (forest green). The system is dark-default; cream slides are an intentional tonal break, not a routine choice.\n- **Default headline color on dark**: `{colors.ink-cream}`. Headlines never appear in orange.\n- **Default headline color on cream**: `{colors.ink-dark}`.\n- **Default body text color on dark**: `{colors.ink-cream-2}` (the 58% cream — the `.muted` helper).\n- **Default body text color on cream**: `{colors.ink-dark-2}`.\n- **Default border / divider color**: `{colors.border-on-dark}` on dark; `{colors.border-on-cream}` on cream. Always 1px, never thicker.\n- **Default kicker color**: `{colors.accent-orange}`. The kicker is the system's eyebrow label and is the most consistent place orange shows up.\n- **Default inline emphasis color**: `{colors.accent-orange}`. An `<em>` inside a stat value, a quote attribution, or a chart label resolves to orange.\n- **Default atmospheric treatment for dark slides**: the wood-brown radial glow (`{components.atmospheric-glow}`) is always on. It is part of the dark surface itself.\n\nOrange functions as a punctuation color: it tells the eye where the structural emphasis lives without ever competing for surface area. If two orange elements end up adjacent on the same slide, one of them is wrong.\n\n## Typography\n\n### Font Family\n\nThe system runs on three Google Fonts plus CJK fallback. **Bricolage Grotesque** carries every display, h1, h2, h3, stat numeral, and quote text — its rounded, heavy character at weights 700–800 is the defining voice. **DM Sans** at weight 400 carries every paragraph, lead, caption, and bullet item — neutral, readable, lets the display type lead. **DM Mono** at weight 400 carries every label, kicker, chrome tag, footer text, bullet em-dash, and chart label — anything that needs to read as a structural marker rather than prose. **Noto Sans SC** is the CJK fallback for all sans roles; **Noto Serif SC** is not used.\n\nA subtle but load-bearing rule: **the bullet em-dash before each list item renders in DM Mono in warm orange**, not in the body face. The mono shape is what makes the dash feel like a deliberate mark and not a stray punctuation glyph.\n\nItalics are not used for typographic decoration in this system. The `<em>` tag is repurposed as an **orange inline emphasis** — `<em>` inside a stat value or a quote attribution switches to `{colors.accent-orange}` and stays upright (font-style: normal). There is no italicized face anywhere.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 12vw | Bricolage Grotesque | 800 | Cover or opening hero display — massive, line-broken into 1–2 words per line |\n| `{typography.h1}` | 7vw | Bricolage Grotesque | 800 | Chapter-opening or closing headline |\n| `{typography.h2}` | 4vw | Bricolage Grotesque | 700 | Primary content-slide headline |\n| `{typography.stat-value}` | 5.5vw | Bricolage Grotesque | 800 | Large numerical figure inside a stat cell |\n| `{typography.quote-mark}` | 8vw | Bricolage Grotesque | 800 | Decorative opening quotation glyph in warm orange |\n| `{typography.quote-text}` | 3.4vw | Bricolage Grotesque | 600 | Pull-quote body text |\n| `{typography.h3}` | 2.4vw | Bricolage Grotesque | 600 | Sub-headline or region heading |\n| `{typography.lead}` | 1.5vw | DM Sans | 400 | Lead paragraph or large bullet item |\n| `{typography.body}` | 1.05vw | DM Sans | 400 | Body paragraph and info-card body |\n| `{typography.caption}` | 0.82vw | DM Sans | 400 | Image caption, tagline, fine print |\n| `{typography.label}` | 0.7vw | DM Mono | 400 | Kicker, chrome tag, footer label, metadata, chart label |\n\n### Defaults\n\n- **Default primary section headline**: `{typography.h2}` (4vw).\n- **Default opening or cover display**: `{typography.display}` (12vw) on a cover; `{typography.h1}` (7vw) on a chapter or closing moment.\n- **Default body paragraph size**: `{typography.body}` (1.05vw). Reach for `{typography.lead}` (1.5vw) when the paragraph is the single supporting block under a large headline.\n- **Default label / kicker size**: `{typography.label}` (0.7vw).\n- **Default weight for any display element**: 700 (h2) or 800 (display, h1, stat-value).\n- **Default weight for body**: 400.\n- **Default headline letter-spacing**: negative — display at -0.03em, h1 at -0.025em, h2 at -0.02em. The negative tracking is essential.\n\nWhen unsure, default to `{typography.h2}` for the primary text moment paired with one `{typography.lead}` paragraph as supporting copy — that pairing is the system's most reliable rhythm.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **All display, h1, h2, h3 text is mixed case** — never uppercase. Uppercase display type does not exist in this system. If text is in Bricolage Grotesque, it is sentence case.\n- **All labels, kickers, chrome text, footers, and metadata are DM Mono uppercase with 0.12em positive tracking.** Mono in sentence case does not exist here.\n- **The kicker is always warm orange.** When a slide carries a kicker (eyebrow label above a headline), its color is `{colors.accent-orange}` regardless of surface.\n- **Bullet lists use an em-dash prefix in DM Mono colored warm orange.** Never a dot, never a check, never a numeral.\n- **The `<em>` tag inside a stat numeral renders in warm orange and stays upright.** It is the mechanism for highlighting a unit suffix or a key digit inside a number.\n- **Headlines on dark surfaces are cream; headlines on cream surfaces are dark ink.** Headlines are never orange.\n- **All Bricolage display type uses negative letter-spacing.** Default tracking on display reads as untreated; the negative is what gives the type its compressed, premium-product character.\n\n### Typography Principles\n\nThe rhythm of the system is **heavy mixed-case display + light mixed-case body + small uppercase mono label**. Switching any of those three modes (e.g., uppercasing the display, or making the body the same weight as the display) breaks the editorial register. Bricolage at 700–800 sits next to DM Sans at 400 — the weight gap is deliberate and wide. Do not use intermediate Bricolage weights (400, 500) for display moments; they read as undecided.\n\nItalics are not used. Underline is not used. The only emphasis mechanism inside body copy is the orange `<em>` inline. The only structural emphasis is the kicker and the bullet em-dash.\n\n## Layout\n\n### Canvas System\n\nMat is **viewport-fluid by design**. All sizes use `vw` and `vh` units so the layout scales linearly with the viewport. The slide container is `100vw × 100vh` and the deck is a horizontal flex strip that translates left/right by full viewport widths. There is no fixed canvas dimension; the same composition renders correctly on any 16:9-ish viewport.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 5.5vw | Slide horizontal padding; the breathing room on left and right edges |\n| `{spacing.pad-y}` | 5.5vh | Slide vertical padding |\n| `{spacing.gap-lg}` | 4.5vh | Between major content sections |\n| `{spacing.gap-md}` | 2.8vh | Between related elements (headline → lead, stat → label) |\n| `{spacing.gap-sm}` | 1.4vh | Between tightly related elements (label pair in chrome band) |\n\nThe horizontal padding is generous — content occupies roughly the middle 89% of the viewport. Pushing content closer to the edges breaks the system's editorial spaciousness.\n\n### Chrome Frame\n\nMost slide types carry a **chrome band** (`{components.chrome-band}`) at the top and a **foot band** (`{components.foot-band}`) at the bottom. Each is a `flex space-between` row of two DM Mono labels (typically a section name on the left and a slide-position or section number on the right) separated from the body by a 1px hairline rule. Cover, quote, and end-style slides suppress both bands entirely — those moments are chromeless by convention.\n\n### Navigation Chrome\n\nA row of nav-dots is fixed center-bottom (5px circles in low-opacity white) and a slide counter sits bottom-right (10px DM Mono in `rgba(255,255,255,0.25)`, format `01 / 09`). These are presentation chrome, not part of the design language proper — they're consistent across all template families in this library.\n\n## Depth and Elevation\n\n### Atmospheric Glow (Primary Depth Mechanism)\n\nThe system's only depth treatment is the **bottom-right wood-brown radial glow** that lives on every dark slide via `::before`. The pseudo-element occupies 55% width × 70% height anchored to the bottom-right corner, with a radial gradient from `rgba(122,78,36,0.28)` to `rgba(80,50,20,0.14)` to transparent. The glow sits at `z-index: 0`; all slide content sits at `z-index: 1`. This is the depth — there are no drop shadows, no elevation cards, no glow effects on text.\n\n### Hairline Rules (Structural Separation)\n\nWhere the system needs to separate regions, it uses **1px hairline rules in low-opacity cream** (`{colors.border-on-dark}` at 12% opacity) on dark surfaces, or low-opacity dark ink (`{colors.border-on-cream}` at 14% opacity) on cream. These rules appear under chrome bands, above foot bands, between stat cells, between compare panels, and as the chart baseline. Hairlines never go thicker than 1px, never colored.\n\n### No Shadows\n\nThere are no `box-shadow` declarations on any structural element. The info-card sits on the dark field with no shadow — its material contrast is the cream-on-green tonal jump, not elevation. Adding a shadow to any component breaks the system's flat material-photography aesthetic.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Every structural element — info-card, image placeholders, stat cells, compare panels, bars |\n| 50% | Nav-dot circles only |\n\nThe system has **no rounded corners** on any composed content. Cards, panels, and image frames are all strict rectangles. The only round shapes are the navigation UI dots.\n\n### Border Weights\n\n- **1px solid hairline** — the universal structural border. Used for chrome bands, foot bands, stat cell dividers, compare panel splits, chart baselines, and image placeholder outlines. Color is `{colors.border-on-dark}` on dark surfaces and `{colors.border-on-cream}` on cream.\n- No other border weights exist. A 2px border breaks the system; a 3px border belongs to a different design family.\n\n### Decorative Element Types\n\n**Kicker** — A small DM Mono uppercase tag in warm orange with 0.12em positive tracking, placed above a headline as an eyebrow label. The most consistent appearance of orange in the system. Typically 0.7vw size.\n\n**Rule** — A 32px-wide × 1px-tall horizontal accent line in warm orange. Used as a small underline-style separator between a kicker and a headline, or beneath a chapter number. Decorative, not structural.\n\n**Bullet em-dash** — The list marker for every bullet list. Renders as `—` in DM Mono colored warm orange, prepended to the list item via the marker column of a CSS grid (`grid-template-columns: 1.4em 1fr`). The bullet voice of the system.\n\n**Info-card** — A cream inset rectangle (`{components.info-card}`) placed on a dark slide. Carries a heading (h3-scale, dark ink) and a body block (body-scale, muted dark ink). The single most distinctive component in the system — used to puncture the green field with a piece of warm paper. Has no border, no shadow, no rounded corners; the tonal jump alone defines the edge.\n\n**Stat cell** — A vertically-divided cell containing a large numerical value (`{typography.stat-value}`) above a one-line label (`{typography.body}` in muted cream). Cells line up in groups of three with a 1px right border separating each (last cell has no right border). The numerical value supports an inline `<em>` in orange for unit suffixes (e.g., the suffix in `4.7k`).\n\n**Quote mark** — An oversized opening quotation glyph at `{typography.quote-mark}` size in warm orange. Sits above the quote text as a typographic ornament. Used only inside the quote slide type.\n\n**Compare divider** — A 1px-wide vertical CSS column (not a border) between two side-by-side panels. Subtle by design — the contrast between the two panels does the visual work, not the divider.\n\n**Image placeholder** — A void rectangle with a 1px hairline border, 6% cream background, and centered DM Mono label reading the placeholder name. Used until real photography is dropped in. The placeholder color is intentionally close to the background — image regions should not announce themselves.\n\n## Do's and Don'ts\n\n### Do\n- Use the dark forest green (`{colors.bg-dark}`) as your default slide background. The system is dark-first; cream slides are a tonal break, not the default.\n- Apply the wood-brown atmospheric glow to every dark slide. It is part of the surface, not an optional flourish.\n- Pair Bricolage Grotesque display in mixed case with DM Mono labels in uppercase. The case contrast between the two faces is the system's typographic rhythm.\n- Set headlines in cream (`{colors.ink-cream}`) on dark and dark ink (`{colors.ink-dark}`) on cream. Headlines never carry the orange accent.\n- Use warm orange (`{colors.accent-orange}`) as the kicker color, the bullet em-dash color, and the inline `<em>` color. Orange is the punctuation, never the surface.\n- Use the cream info-card (`{components.info-card}`) when a slide needs a piece of warm paper inset on the green field — the system's signature material-contrast move.\n- Keep slides medium-sparse. One primary headline, one supporting paragraph, optionally one list of 3–5 short bullets is the right density.\n- Use 1px hairline rules in low-opacity cream or dark ink for every structural divider. Borders never go thicker.\n- Use the em-dash prefix in DM Mono for every bullet list. Never substitute a dot, check, or numeral.\n- Render the `<em>` inside a numerical value in warm orange, font-style normal — that's how unit suffixes and emphasis digits read in this system.\n\n### Don't\n- Don't uppercase any Bricolage display, h1, h2, or h3 text. Display type is always mixed case. Uppercase is exclusively for DM Mono labels.\n- Don't introduce a second accent color. The system has one accent (warm orange) and it cannot share that role.\n- Don't add drop shadows, blur shadows, or elevation effects on any component. Depth is the atmospheric glow only.\n- Don't round any corner on a structural element. Cards, panels, image frames, bars — all strict rectangles. Only the nav-dot circles are round.\n- Don't fill a slide with three columns of bullets or stack five regions vertically. Mat reads as broken when crowded.\n- Don't use orange as a background fill. Orange is inline-only.\n- Don't use a serif face anywhere. There is no serif in this system; the rounded grotesque carries every editorial moment.\n- Don't add a border around the info-card. The tonal jump between cream and forest green defines the edge — a border breaks the flat material reading.\n- Don't use italic letterforms. The `<em>` tag is repurposed as an orange inline color switch and stays upright.\n- Don't increase border weights above 1px. A 2px border breaks the hairline language of the system.\n\n## Responsive Behavior\n\nMat targets a fluid `100vw × 100vh` viewport and uses `vw`/`vh` units for every typographic size, padding, and gap. The same composition renders correctly across 1280×720, 1920×1080, and 2560×1440 displays without breakpoints. Because all sizes are viewport-relative, content scales linearly — at wider viewports, both text and padding grow proportionally, so the visual density stays constant.\n\n### Presenter Behavior\n- Arrow Right / Arrow Down / Space advance to the next slide.\n- Arrow Left / Arrow Up move back.\n- Home jumps to the first slide; End jumps to the last.\n- Touch swipe (horizontal) advances or reverses on mobile.\n- Mouse wheel advances with a 1000ms debounce to prevent accidental multi-skip.\n- Slides translate horizontally as a single flex strip with a 0s transition (the deck is configured for instant navigation, not animated transitions — the `--dur-slide` token is set to `0s`).\n\n### Print Behavior\nThe template does not declare a `@media print` rule. To produce a PDF, use the browser's screenshot or printing tool; multi-slide PDF export requires manually triggering each slide.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display / h1 / h2 / h3 / stat-value (Bricolage roles, 2.4–12vw) | 思源宋体 Noto Serif SC | 700 | Mincho heavy weight provides the structural mass that Bricolage 700–800 provides in Latin, while preserving the warm material register |\n| Quote text / quote mark (3.4vw / 8vw) | 思源宋体 Noto Serif SC | 600–700 | Same Mincho voice for editorial moments |\n| Lead / body / caption (DM Sans roles, 0.82–1.5vw) | 思源宋体 Noto Serif SC | 400 | Mincho body voice — calm and material; pairs with the wood-glow warmth |\n| Info-card body / heading | 思源宋体 Noto Serif SC | 400 / 600 | Maintains the warm-paper-on-green contrast in Chinese |\n| Label / kicker / chrome / footer (DM Mono roles, 0.7vw) | 思源宋体 Noto Serif SC | 500 with 0.05em letter-spacing | Replaces DM Mono — Chinese has no monospace tradition that reads as editorial chrome |\n\n### Mixed-Content Strategy\n\nUse **Strategy A** — switch the entire face stack to Noto Serif SC across all roles, replacing Bricolage Grotesque (display), DM Sans (body), and DM Mono (labels). Mat's identity does not depend on the specific Latin faces; it depends on the **dark forest green canvas with wood-brown atmospheric glow**, the **single warm orange accent**, the **cream info-card inset**, and the **1px hairline divider language**. Going all-Mincho in Chinese preserves every one of those identity markers cleanly without the baseline wobble that Strategy C would introduce on a viewport-fluid system. Stack:\n\n```css\n/* Bricolage roles (display, h1, h2, h3, stat-value, quote) */\nfont-family: 'Bricolage Grotesque', 'Noto Serif SC', sans-serif;\n/* DM Sans roles (lead, body, caption) */\nfont-family: 'DM Sans', 'Noto Serif SC', sans-serif;\n/* DM Mono roles (label, kicker, chrome, footer) */\nfont-family: 'DM Mono', 'Noto Serif SC', monospace;\n```\n\nThe system's source currently lists `'Noto Sans SC'` as the CJK fallback — for Mat's material-tactile register, **swap to `'Noto Serif SC'`**. The Mincho face's warm letterforms match the wood-glow / forest-green atmosphere better than the geometric Noto Sans SC, which reads as too modern-clinical for this system.\n\n### Loading\n\nReplace the existing Noto Sans SC link with Noto Serif SC:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.88–1.1 on display, 1.5–1.65 on body) read as cramped in Chinese. Bump display to 1.0–1.2 and body to 1.7–1.85.\n- **Remove negative letter-spacing on CJK headlines.** Bricolage display uses -0.025em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the DM Mono label portion was meant to be capitalized. (This matters here — every DM Mono label, kicker, chrome-band, and footer is `text-transform: uppercase`.)\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between Noto Serif SC weight 400, 500, and 700 inside the same sentence — pick the weight that matches the role (headline = 700, body = 400, label = 500) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nMat's whole voice is \"industrial-design portfolio meets boutique product launch\" — dark forest green with a wood-brown glow, cream type floating on the field, warm orange as the single accent. In Chinese, the system's identity does not depend on the Bricolage / DM Sans / DM Mono trio; it depends on the **environmental atmosphere** (the radial wood-glow on every dark slide), the **single-accent discipline** (orange only as kicker, em-dash bullet, inline emphasis), and the **cream info-card** as the signature material-contrast move. All of these translate without modification.\n\nThe bullet em-dash in orange works in Chinese identically — the em-dash character (—) is the same glyph in any script, and the orange Noto Serif SC at weight 500 prepended to a Chinese list item reads as a deliberate mark exactly as it does in Latin. Keep the bullet column in Noto Serif SC at weight 500 (replacing DM Mono); the warmth of the Mincho face matches the system's material-tactile register better than a sans-serif chrome face would.\n\nThe Bricolage rule \"always mixed case, never uppercase\" is interesting in Chinese — since Chinese has no case, the rule is automatically satisfied. But the system's uppercase rule for labels (DM Mono at 0.12em tracking) doesn't translate; in Chinese, labels should be **Noto Serif SC weight 500 with 0.05em positive tracking**, no `text-transform`. The positive tracking carries the chrome quality through weight and spacing alone.\n\nThe `<em>` inline-orange rule (for unit suffixes inside stat numerals) works in Chinese — a Chinese unit character like 「万」or 「亿」 inside `<em>` renders in warm orange and stays upright, exactly mirroring the Latin pattern. Use it the same way: `4.7<em>万</em>` for `4.7 万 (47k)`.\n\n### Known CJK Gap\n\nThe Bricolage Grotesque \"heavy, rounded grotesque with mechanical character\" is one of Mat's most distinctive typographic moves in Latin — it's what gives the system its industrial-product-page voice. Chinese has no exact equivalent: Noto Serif SC at weight 700 provides structural mass but reads as more traditional / literary than Bricolage's rounded modernity. The Chinese rendering loses some of the industrial-design quality, partially compensated by the wood-glow atmosphere and the warm orange accent doing more of the personality work. For decks where the industrial register is critical (e.g., a product launch deck specifically about hardware or material design), consider supplementing Noto Serif SC with **思源黑体 Noto Sans SC at weight 800** for the largest display moments only (cover, hero) — the geometric heaviness of Noto Sans SC at 800 reads closer to Bricolage Grotesque 800 than Noto Serif SC does. Use sparingly to preserve the literary-material register elsewhere.\n\n## Iteration Guide\n\n1. Any new component sits on the dark surface as cream text; no card, panel, or frame wraps it unless it's the info-card move (cream-on-green tonal contrast).\n2. Any new headline uses Bricolage Grotesque in mixed case, weight 700 (h2) or 800 (display/h1). Never reach for weight 500 on display.\n3. Any new structural divider is a 1px hairline rule in low-opacity cream or dark ink. Never use a thicker or colored border.\n4. Any new label, eyebrow, tag, or metadata text uses DM Mono uppercase with 0.12em tracking. Mono in mixed case does not exist here.\n5. Any new bullet list uses the em-dash prefix in DM Mono colored warm orange. The marker face and color are non-negotiable.\n6. Any new accent moment (a highlighted number, an emphasis word, a kicker) uses warm orange. Don't introduce a second accent.\n7. Any new dark slide carries the atmospheric glow on `::before`. If you make a custom slide layout, replicate the pseudo-element or the slide will read flat.\n8. If a slide needs a piece of warm paper to anchor it (a CTA, a summary, an attribution block), use the info-card. Don't invent a parallel card pattern.\n9. Tonal break slides (cream backgrounds) are used once per deck for emphasis, not as a routine alternative to dark. The system reads as dark-default.\n\n## Known Gaps\n\n- The `--c-bg-dark-alt` (#2E3D30) variable is defined for a slightly lighter green surface but is not actively used in any selector. It's reserved for future layered-region work.\n- The atmospheric glow is hardcoded to the bottom-right corner via the `::before` pseudo-element. Repositioning it requires editing the CSS rule directly; there's no token for glow position or intensity.\n- The system loads four Google Fonts (Bricolage Grotesque, DM Sans, DM Mono, Noto Sans SC) — render parity depends on those fonts loading. The CJK fallback stack covers Chinese, but Japanese and Korean glyphs fall back to system serif/sans.\n- The slide-transition duration is set to `0s` (instant). The `--ease-slide` and `--dur-slide` tokens exist for animation but are inert; if a deck needs animated transitions, the duration value must be raised.\n- The vertical bar chart uses inline `style=\"height: XX%\"` declarations on each bar fill. There is no data-binding layer; bar heights must be computed manually.\n- The `.split-center` image region is fixed at 52vh height. Tall portrait imagery may need a layout-level override.\n- Nav dots and slide counter use hardcoded `rgba(255,255,255,...)` values that don't adapt to the cream-slide variant — on cream slides, the white dots read as washed-out.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/mat/preview.md":"# Mat Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/mat/design.md`\n- Preview card: `bold-template-pack/templates/mat/preview.md`\n\n## Selection Metadata\n\n- Slug: `mat`\n- Tagline: Dark sage canvas with bone paper and burnt-orange accent; mid-century modern with wood undertones.\n- Mood: warm-modern, considered, tactile, mid-century\n- Tone: warm, design-led, intentional, considered\n- Formality: medium\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel mid-century, tactile, and intentional: design studio credentials, architecture / interior brands, ceramics / craft / furniture, advisory decks. Also a warm, distinctive choice for tech, research, or business decks that want a considered analog feel instead of digital-cool.\n- Avoid for: Contexts that need fast tech energy or institutional restraint — the muted sage and burnt-orange palette is intentionally warm and slow.\n\n## Visual Snapshot\n\nA warm, material-tactile presentation system inspired by a high-end product landing page. Dark forest green is the dominant environment, warmed by a low atmospheric wood-brown glow from the bottom-right corner of every dark slide. Cream type floats directly on the field; warm orange acts as the single accent. The typeface stack pairs Bricolage Grotesque (a heavy, rounded grotesque) for display with DM Sans for body and DM Mono for labels — the result reads as industrial-design portfolio meets boutique product launch, never tech demo.\n\nMat is a material-tactile presentation system built around a single environmental premise: a deep forest-green surface warmed from the bottom-right corner by a low wood-brown glow. The atmosphere does the heavy lifting — before any content lands, the slide already feels like a workbench in afternoon light. Cream type floats directly on the green field; there are no cards, no panels, no frames. Where the system needs to break the green, it does so with a single cream inset box (the info-card) that reads as a piece of warm paper laid on the dark surface.\n\n## Preview Ingredients\n\n- Palette: bg-dark #232E26; bg-dark-alt #2E3D30; bg-cream #EDE6D0; bg-cream-alt #E4DAC4; ink-cream #F0E8D2; ink-dark #1E2820; accent-orange #C07030; wood-glow #7A4E24\n- Typography: Bricolage Grotesque; DM Sans; DM Mono; {typography.label.fontFamily}\n- Signature move: Dark forest green canvas ({colors.bg-dark}) with a warm wood-brown radial glow ({components.atmospheric-glow}) anchored to the bottom-right corner of every dark slide.\n- Signature move: Cream text ({colors.ink-cream}) floats directly on the green field with no card, panel, or frame around it.\n- Signature move: Bricolage Grotesque display type is always mixed case — never uppercase. Uppercase is reserved for DM Mono labels.\n- Signature move: A single accent color, warm orange ({colors.accent-orange}), used only as small inline emphasis (kicker, bullet marker, inline <em>, quote glyph, one chart bar).\n- Signature move: The cream info-card ({components.info-card}) is the signature material-contrast component — a warm paper rectangle inset on the dark field.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/monochrome/design.md":"---\nversion: alpha\nname: Monochrome (Ivory Ledger)\ndescription: A literary editorial system rendered in black ink on cream paper. Ultra-light geometric sans (Jost at weight 200–300) carries every headline; Lora italic serif handles quote text and insight-card titles; JetBrains Mono provides the structural chrome. There are no chromatic accents — every color in the palette is a graphite or cream tone, and \"accent\" simply means \"darker ink.\" The aesthetic borrows from independent research reports, scholarly monographs, and the quietest end of contemporary editorial design — closer to a printed journal than a tech presentation.\n\ncolors:\n  cream-paper: \"#FAFADF\"\n  cream-paper-2: \"#F2F2D2\"\n  cream-paper-3: \"#F0F0D4\"\n  cream-warm: \"#F5F0E4\"\n  ink-black: \"#1A1A16\"\n  ink-graphite: \"#5E5E54\"\n  ink-graphite-light: \"#8A8A80\"\n\ncolor-aliases:\n  c-bg: cream-paper\n  c-bg-light: cream-paper\n  c-bg-cream: cream-warm\n  c-fg: ink-black\n  c-fg-light: ink-black\n  c-fg-2: ink-graphite\n  c-fg-3: ink-graphite-light\n  c-accent: ink-black\n  c-border: ink-black\n  c-border-light: ink-black\n\ntypography:\n  display:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 8.5vw\n    fontWeight: 200\n    lineHeight: 0.96\n    letterSpacing: -0.02em\n  h1:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 5vw\n    fontWeight: 200\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  h2:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 3.2vw\n    fontWeight: 300\n    lineHeight: 1.2\n  h3:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 2vw\n    fontWeight: 400\n    lineHeight: 1.3\n  lead:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 1.5vw\n    fontWeight: 300\n    lineHeight: 1.65\n  body:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 1.1vw\n    fontWeight: 300\n    lineHeight: 1.7\n  caption:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 0.85vw\n    fontWeight: 300\n    lineHeight: 1.55\n  label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 0.72vw\n    fontWeight: 400\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  quote-serif:\n    fontFamily: \"Lora, Noto Serif SC, Georgia, serif\"\n    fontSize: 3.2vw\n    fontWeight: 400\n    lineHeight: 1.35\n  insight-serif:\n    fontFamily: \"Lora, Noto Serif SC, Georgia, serif\"\n    fontSize: 2.8vw\n    fontWeight: 400\n    lineHeight: 1.15\n  stat-value:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 5.5vw\n    fontWeight: 200\n    lineHeight: 1.0\n    letterSpacing: -0.03em\n  flow-num:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 3.5vw\n    fontWeight: 200\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n\nspacing:\n  pad-x: 8vw\n  pad-y: 6vh\n  gap-lg: 5vh\n  gap-md: 3vh\n  gap-sm: 1.5vh\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  rule:\n    width: 36px\n    height: 1px\n    background: \"{colors.ink-black}\"\n    description: \"A 36-pixel hairline accent rule. The system's signature small punctuation mark — appears under chapter labels, beside kickers, above stat values.\"\n  rule-full:\n    width: \"100%\"\n    height: 1px\n    background: \"{colors.ink-black}\"\n    description: \"Full-width 1px hairline rule for chrome bands, foot bands, and section dividers.\"\n  kicker:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.ink-graphite-light}\"\n    description: \"Muted mono uppercase eyebrow label above a headline.\"\n  tag:\n    border: \"1px solid {colors.ink-black}\"\n    padding: \"0.3em 0.8em\"\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    description: \"Bordered inline tag for version numbers, status labels.\"\n  bullet-marker:\n    content: \"—\"\n    color: \"{colors.ink-graphite-light}\"\n    fontFamily: \"{typography.label.fontFamily}\"\n    description: \"Em-dash in muted graphite via JetBrains Mono. The standard list mark; never a dot, never a check.\"\n  insight-card:\n    background: \"{colors.cream-warm}\"\n    borderRadius: 16px\n    padding: \"3vh 2.5vw\"\n    description: \"Tall rounded-rectangle card in cream tone (one of three near-identical creams). Holds a large Lora serif title and a Jost body block at the bottom.\"\n  stat-cell:\n    borderTop: \"1px solid {colors.ink-black}\"\n    padding: \"{spacing.gap-md} {spacing.gap-md} {spacing.gap-md} 0\"\n    description: \"Rule-topped vertical cell with a 5.5vw weight-200 numeral, a Jost label, and a mono source note.\"\n  timeline-dot:\n    width: 8px\n    height: 8px\n    borderRadius: 50%\n    background: \"{colors.ink-black}\"\n    border: \"2px solid {colors.cream-warm}\"\n    description: \"Solid black dot with a cream border ring that punches through a horizontal connector rule.\"\n  vtimeline-spine:\n    width: 1px\n    background: \"{colors.ink-black}\"\n    description: \"1px vertical rule that anchors a vertical timeline. Carries a 9px solid black dot at the top of each entry.\"\n  pie-donut:\n    width: \"min(26vw, 42vh)\"\n    height: \"min(26vw, 42vh)\"\n    borderRadius: 50%\n    description: \"Donut ring rendered by overlaying a same-color circular ::after pseudo on a conic-gradient or similar. Center cutout is the slide background.\"\n  pyramid-bar:\n    borderLeft: \"2px solid {colors.ink-black}\"\n    background: \"color-mix(in srgb, {colors.ink-black} N%, {colors.cream-paper})\"\n    description: \"Horizontal pyramid level. Width grows down each level (36% → 100%); fill darkens up the pyramid via color-mix at increasing percentages.\"\n  bar-fill:\n    width: \"100%\"\n    background: \"{colors.ink-graphite-light}\"\n    opacity: 0.5\n    description: \"Vertical bar in muted graphite at half opacity. Accented variant uses solid ink-black at full opacity.\"\n  img-placeholder:\n    border: \"1px solid {colors.ink-black}\"\n    background: \"{colors.cream-paper-3}\"\n    color: \"{colors.ink-graphite}\"\n    description: \"Hairline-bordered cream void with a centered mono label. Used until photography is dropped in.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nMonochrome (Ivory Ledger) is a **literary editorial system** built on a single material constraint: black ink on cream paper, and nothing else. The palette has eight tokens, but seven of them are tonal variations of cream or graphite. There is no chromatic accent — the \"accent\" color is just darker ink. The result is a system that reads as a carefully typeset research report or a quiet contemporary monograph, not a presentation.\n\nThe typeface stack is a three-voice editorial pairing. **Jost** at weights 200, 300, and 400 carries every display, headline, body, and label — its geometric sans construction stays calm at ultra-light weights and the contrast between weight 200 (display) and weight 300 (body) is the system's primary typographic rhythm. **Lora** italic serif is reserved for two specific moments: the body text of a pull-quote and the title of an insight card. The serif italic provides the only typographic warmth in the system — wherever it appears, it signals \"this is the human voice.\" **JetBrains Mono** at weight 400 carries every structural marker: chrome labels, sidebar tags, version numbers, footer text, bullet dashes, axis labels, dates. Mono is uppercase and tracked at 0.12em or wider.\n\nThe palette functions in three roles. **Cream paper** (`{colors.cream-paper}` and its three near-identical sibling tones) is the canvas — slides are never white, always a warm off-yellow cream. **Black ink** (`{colors.ink-black}` — actually #1A1A16, a very dark olive-black) is every text moment, every border, every divider, every shape fill that isn't decorative cream. **Graphite** in two tones (`{colors.ink-graphite}` for secondary text, `{colors.ink-graphite-light}` for tertiary) handles muted copy. That's the whole color system.\n\nDepth is achieved entirely through **1px hairline rules** and **generous whitespace**. There are no drop shadows, no gradients, no elevation, no atmospheric effects. When two regions need separation, a 1px black line divides them. When a region needs visual weight, it gets more padding, not a fill change. The insight-card surfaces are nearly indistinguishable from the page itself — the cards are defined by their corner radius and padding, not by a contrast jump.\n\n**Density philosophy: sparse.** Ivory Ledger reads as elegant when generous whitespace dominates and a single typographic moment anchors the slide. The horizontal padding is set to 8vw (the most generous in the library), and content typically uses only the middle 60–70% of the canvas. A slide that fills 80% of its area with type reads as cramped and breaks the editorial reading. The system is asking the agent to leave space — to let a single Jost-200 headline carry an otherwise nearly-empty slide. When density is required (a research timeline, a two-column dense-text spread, a 12-row table), the system holds together only because the type is so light and the rules so thin that even dense content reads as airy.\n\n**Key Characteristics:**\n- Cream paper background (`{colors.cream-paper}`) on every slide — never white, never dark by default. The cream is the surface, not a stylistic choice.\n- Ultra-light Jost (weight 200 for display, weight 300 for body) is the dominant typographic voice.\n- Lora italic serif appears in two specific moments: pull-quote bodies and insight-card titles. Nowhere else.\n- JetBrains Mono uppercase with 0.12em+ tracking handles every structural label, chrome tag, axis, and bullet marker.\n- The system has no chromatic accent. The accent color is `{colors.ink-black}` — slightly darker ink.\n- All structural separation is 1px hairline rules in black, plus the signature 36px short rule (`{components.rule}`) used as a small punctuation mark.\n- The bullet list marker is an em-dash in muted graphite via JetBrains Mono.\n- Generous 8vw horizontal padding — the most spacious in the template library.\n\n## Colors\n\n### Palette\n\n- **Cream Paper** (`{colors.cream-paper}` — #FAFADF): The default surface. Warm off-yellow, never pure white. Every slide background is this color or a near-identical variant.\n- **Cream Paper Alt** (`{colors.cream-paper-2}` — #F2F2D2): A slightly deeper cream for inset surfaces. Used sparingly — the difference from the default cream is barely perceptible.\n- **Cream Paper Deep** (`{colors.cream-paper-3}` — #F0F0D4): The image-placeholder fill. Slightly more saturated cream that distinguishes a void rectangle from the slide surface.\n- **Cream Warm** (`{colors.cream-warm}` — #F5F0E4): The insight / timeline slide background, a warmer tone that signals these slides as related sub-aesthetic moments within the deck.\n- **Ink Black** (`{colors.ink-black}` — #1A1A16): Every text moment, every rule, every divider, every border. A very dark olive-black, not pure black — chosen for warmth against the cream paper.\n- **Ink Graphite** (`{colors.ink-graphite}` — #5E5E54): Secondary text color. Used for muted lead copy, body paragraphs in dense slides, and labels that need to step back from headline weight.\n- **Ink Graphite Light** (`{colors.ink-graphite-light}` — #8A8A80): Tertiary text. Used for kickers, axis labels, source notes, bullet markers, footer chrome — anything that should read as barely-present structural metadata.\n\n### Defaults\n\n- **Default surface background**: `{colors.cream-paper}`. The system is single-surface by default.\n- **Default primary headline color**: `{colors.ink-black}`. Headlines never appear in graphite or any other tone.\n- **Default body text color**: `{colors.ink-black}` for primary copy on light slides; `{colors.ink-graphite}` for muted lead paragraphs.\n- **Default kicker / label color**: `{colors.ink-graphite-light}` — the most muted graphite. Labels should sit back, not lead.\n- **Default border / divider color**: `{colors.ink-black}` — every divider is solid black. There is no muted border tone.\n- **Default rule weight**: 1px. The system never uses thicker rules.\n- **Default \"accent\" color**: `{colors.ink-black}` — the same as the primary text color. Accent in this system means darker emphasis ink, not a chromatic switch.\n- **Default warmer-surface treatment for insight or timeline groups**: `{colors.cream-warm}` — used to tonally identify a group of slides without breaking the monochrome palette.\n\nThe system has no warm/cool pairing, no semantic color (no red for warning, no green for success), no chromatic emphasis. Every emphasis comes from typography (size, weight, italic switch) or from a rule, never from color.\n\n## Colors (continued)\n\nThe three \"insight card surfaces\" (`--c-card-a`, `--c-card-b`, `--c-card-c`) are all near-identical cream tones (#FAFADF, #F5F0E4, #FAFADF). They are intentionally collapsed — the card distinction is meant to come from padding and serif title, not surface color. Treat the three card-surface tokens as effectively one surface.\n\n## Typography\n\n### Font Family\n\nThe system loads five faces: **Jost** (weights 200, 300, 400, 500, 600) carries all sans display and body; **Lora** (italic and roman, weights 400, 500, 600) carries only the pull-quote text and the insight-card title; **JetBrains Mono** (weights 300, 400, 500) carries every structural label; **Noto Serif SC** is the CJK fallback for Lora; **Noto Sans SC** is the CJK fallback for Jost.\n\nThe emotional register is deliberate:\n- Jost reads as **quiet, geometric, almost mathematical** at weight 200. It is the system's editorial voice.\n- Lora italic reads as **literary, personal, hand-set**. It signals \"this is the voice of a human or a quote\" — wherever it appears, the tone shifts from analytical to lyrical.\n- JetBrains Mono reads as **archival, indexical, structural**. It is the system's catalog-card voice — version numbers, dates, axis labels, anything that's metadata rather than message.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 8.5vw | Jost | 200 | Cover or opening hero display — generous and airy |\n| `{typography.h1}` | 5vw | Jost | 200 | Chapter-opening or section-break headline |\n| `{typography.h2}` | 3.2vw | Jost | 300 | Primary content-slide headline |\n| `{typography.stat-value}` | 5.5vw | Jost | 200 | Large numerical figure inside a stat cell |\n| `{typography.quote-serif}` | 3.2vw | Lora italic | 400 | Pull-quote body text |\n| `{typography.insight-serif}` | 2.8vw | Lora | 400 | Insight-card title |\n| `{typography.h3}` | 2vw | Jost | 400 | Sub-headline, region heading, flow-step title |\n| `{typography.lead}` | 1.5vw | Jost | 300 | Lead paragraph or large bullet item |\n| `{typography.body}` | 1.1vw | Jost | 300 | Body paragraph |\n| `{typography.caption}` | 0.85vw | Jost | 300 | Image caption, source note, fine print |\n| `{typography.label}` | 0.72vw | JetBrains Mono | 400 | Kicker, chrome label, axis label, version tag |\n| `{typography.flow-num}` | 3.5vw | Jost | 200 | Large step numeral in a process diagram |\n\n### Defaults\n\n- **Default primary section headline**: `{typography.h2}` (3.2vw at weight 300). Don't reach for `{typography.h1}` for a standard content slide — that size is for chapter breaks.\n- **Default opening or cover display**: `{typography.display}` (8.5vw at weight 200).\n- **Default body paragraph size**: `{typography.body}` (1.1vw at weight 300).\n- **Default lead paragraph size**: `{typography.lead}` (1.5vw at weight 300) when a paragraph is the single supporting block under a headline.\n- **Default label / kicker size**: `{typography.label}` (0.72vw).\n- **Default weight for any display element**: 200. Jost at 200 is the system's display voice.\n- **Default weight for body**: 300.\n\nWhen unsure, the canonical pairing is `{typography.h2}` (weight 300) for the headline + one paragraph at `{typography.lead}` (weight 300) for the supporting block. The narrow weight gap (300 vs. 300, distinguished only by size) is correct — Ivory Ledger does not lean on heavy weight contrast.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Jost display, h1, h2, h3 element is mixed case** — never uppercase. Uppercase is reserved exclusively for JetBrains Mono labels.\n- **Every label, kicker, chrome tag, footer, axis label, and source note uses JetBrains Mono uppercase with at least 0.12em positive tracking** (most are 0.14–0.18em). Mono in sentence case does not exist here.\n- **The pull-quote body is always Lora italic.** A pull-quote in Jost reads as a different design system.\n- **The insight-card title is always Lora roman (not italic).** The serif face is the card's defining visual signal.\n- **The bullet-list marker is always an em-dash in JetBrains Mono colored `{colors.ink-graphite-light}`.** Never a dot, never a check, never a numeral.\n- **Stat values, display headlines, and flow numerals all use Jost weight 200 with negative letter-spacing.** The combination of ultra-light weight and tight tracking is the system's display signature.\n- **Headlines and body text are colored `{colors.ink-black}`; muted lead is `{colors.ink-graphite}`; labels are `{colors.ink-graphite-light}`.** Headlines never carry the graphite tones.\n\n### Typography Principles\n\nThe rhythm of Ivory Ledger is **ultra-light Jost + Lora italic in two specific moments + tracked mono labels**. Switching Jost to a heavier weight (500+) for a headline reads as a different system. Setting body text in Lora reads as a different system. Setting a label in Jost rather than JetBrains Mono reads as a different system. The role of each face is narrow and unmoving.\n\nItalic is used exclusively in Lora (pull-quote body) and not in Jost. Underline is not used anywhere. Bold is not used to emphasize body text — emphasis inside a paragraph is achieved either by Lora italic switch (rare) or by isolation through whitespace.\n\n## Layout\n\n### Canvas System\n\nThe system targets a fluid `100vw × 100vh` viewport with all sizes in `vw`/`vh`. The deck is a horizontal flex strip with slide-to-slide transitions at 0.9s with a smooth easing curve. Animation tokens (`fade-up`, `fade-in`, `reveal-right`, `reveal-left`, `scale-in`) are available with stagger delays via `data-delay` attributes — these run on each slide entrance.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 8vw | Slide horizontal padding (the most generous in the library) |\n| `{spacing.pad-y}` | 6vh | Slide vertical padding |\n| `{spacing.gap-lg}` | 5vh | Between major content sections |\n| `{spacing.gap-md}` | 3vh | Between related elements |\n| `{spacing.gap-sm}` | 1.5vh | Between tightly related elements |\n\nThe slide container reserves an additional 3.5vw on the left for a vertical sidebar element (currently disabled in the source — see Known Gaps), so total left padding is ~11.5vw. Content sits inside this generous gutter system.\n\n### Chrome Frame\n\nMost content slides carry a **chrome header** and **chrome foot**: each is a `flex space-between` row of two JetBrains Mono labels, separated from the slide body by a 1px solid black rule. Cover-style, chapter-break, quote, and closing slide types suppress chrome and foot entirely.\n\n### Disabled Sidebar\n\nThe CSS defines a `.slide-sidebar` element — a thin vertical 1px black line in the left gutter with rotated mono labels reading bottom-to-top. The source explicitly disables this with `display: none !important`, with a comment noting it reads as \"visual noise.\" The styling remains in the CSS as a dormant artifact; do not re-enable without intentional design rationale.\n\n## Depth and Elevation\n\n### No Shadows, Hairline Rules Only\n\nThe system uses **zero box-shadow declarations** on any structural element. Depth is created through three mechanisms:\n\n1. **1px hairline rules in solid `{colors.ink-black}`** — under chrome bands, above foot bands, between compare panels, above stat cells, across timeline tracks, across chart baselines. The rule is the divider, the separator, the structural mark.\n2. **The 36px short rule** (`{components.rule}`) — a small punctuation mark used under chapter labels, beside kickers, or as a delicate accent break.\n3. **Generous whitespace** — the primary depth signal is the 8vw horizontal gutter and the space around each typographic moment.\n\n### No Atmospheric Effects\n\nThere are no gradients, no glows, no textures, no grain overlays. Even the donut chart center cutout is just a same-color circle laid over the conic ring — there is no contrast jump.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Every structural element — image placeholders, stat cells, compare panels, tables, chart areas |\n| 16px | Insight cards only |\n| 50% (circle) | Pie/donut chart shape, timeline-dot small circles, vt-spine dot |\n| 999px (pill) | None — pills are not used |\n\nThe system is dominantly square-cornered. The 16px rounded radius on insight cards is the only structural soft edge and is the visual signal that distinguishes a card from a region.\n\n### Border Weights\n\n- **1px solid `{colors.ink-black}`** — the universal structural rule weight. Used for every divider, every chrome rule, every chart axis, every cell border.\n- **2px solid `{colors.ink-black}`** — used only on the pyramid-bar left edge (`{components.pyramid-bar}`) as a slightly stronger left-anchor for that specific chart type.\n\nThere is no thicker border weight, no dashed border (except a `1px dashed` graphite hint inside dense charts), no colored border.\n\n### Decorative Element Types\n\n**36px short rule** — A small 36px-wide × 1px-tall solid black horizontal accent rule. The system's signature punctuation mark. Used under a chapter number, beside a kicker, or as a delicate section break.\n\n**Kicker / mono eyebrow** — A muted JetBrains Mono uppercase label in `{colors.ink-graphite-light}` placed above a headline. The eyebrow is barely-there by design.\n\n**Bordered tag** — A small inline element with a 1px black border and 0.3em × 0.8em padding, containing a mono uppercase string. Used for version tags or status labels.\n\n**Bullet em-dash** — A `—` glyph in JetBrains Mono colored `{colors.ink-graphite-light}`, prepended to each list item via a CSS grid marker column (`grid-template-columns: 1.2em 1fr`).\n\n**Insight card** — A 16px-rounded rectangle (`{components.insight-card}`) on a slightly warmer cream surface. Carries a Lora roman title (2.8vw weight 400) and a Jost body block (weight 300) pushed to the bottom of the card. The card is identified by its rounded corners and its serif title, not by a color contrast.\n\n**Stat cell** — A vertical region with a 1px solid black top rule (`{components.stat-cell}`), containing a 5.5vw Jost-200 numeral, a Jost label, and a small mono source note. Three stat cells side by side is the canonical arrangement.\n\n**Timeline dot** — An 8px solid black circle with a 2px cream-warm border ring (`{components.timeline-dot}`) that punches through the horizontal connector rule. The ring color matches the warm-cream slide surface so the dot reads as floating on the rule, not crossing it.\n\n**Vertical timeline spine** — A 1px-wide vertical solid black line (`{components.vtimeline-spine}`) with 9px solid black dots at the top of each entry. Used in long chronological lists.\n\n**Pie / donut chart** — A circle (`{components.pie-donut}`) at min(26vw, 42vh) size, with a same-color circular cutout via `::after` to create the donut ring. The chart sits beside a legend column.\n\n**Pyramid bar** — A horizontal bar (`{components.pyramid-bar}`) with a 2px solid black left edge and a tonal cream-to-graphite fill computed via `color-mix(in srgb, ink-black N%, cream-paper)` where N ranges from 4% to 55% across the five levels. Widths step from 36% (top, darkest) to 100% (bottom, lightest).\n\n**Vertical bar chart** — A muted graphite (`{colors.ink-graphite-light}`) bar at 50% opacity for default bars; a solid black bar at full opacity for the highlighted bar. The chart has a 1px black left axis and a 1px black baseline.\n\n**Image placeholder** — A 1px-bordered cream-paper-3 rectangle with centered mono label. Used until photography arrives.\n\n**Process flow with no arrows** — Flow diagrams in this system are explicit about not using arrows between steps. Whitespace between steps implies sequence; the system declares this with a comment in the CSS.\n\n## Do's and Don'ts\n\n### Do\n- Use the cream paper background (`{colors.cream-paper}`) on every slide. The single-surface canvas is the system's foundation.\n- Set every headline in `{colors.ink-black}` and let the weight (Jost 200) and size do the work. Headlines never need a chromatic shift.\n- Use Jost at weight 200 for any display moment. The ultra-light weight is the system's defining typographic voice.\n- Reach for Lora italic only when the text is a pull-quote body; reach for Lora roman only when it's an insight-card title. The serif's two roles are non-overlapping.\n- Use JetBrains Mono uppercase with at least 0.12em tracking for every structural label, axis tag, footer, and bullet marker. Mono is the catalog-card voice.\n- Render every structural divider as a 1px solid black rule. There is no thicker, no muted, no dashed border in the system.\n- Apply the em-dash marker in muted graphite via JetBrains Mono for every bullet list.\n- Leave generous whitespace. Content should sit comfortably in the middle 60–70% of the canvas; cramming content to the edges breaks the editorial reading.\n\n### Don't\n- Don't introduce a chromatic color. Red, blue, green, yellow do not exist in this system. The accent is darker ink.\n- Don't use heavy weights (Jost 500, 600, 700) for headlines. The system reads as broken if display type weighs more than 300.\n- Don't put a pull-quote in Jost. The Lora italic body is the quote's identity — switching to sans collapses the typographic distinction.\n- Don't use box-shadow on any element. The system has no elevation.\n- Don't use a card surface with chromatic contrast. Insight cards are identified by corner radius and serif title; a colored fill breaks the monochrome reading.\n- Don't crowd a slide. The horizontal padding is 8vw for a reason — content needs to breathe.\n- Don't use bold to emphasize body text. Inline emphasis is rare; when used, switch to Lora italic, not weight increase.\n- Don't substitute the em-dash bullet marker with a dot, check, arrow, or numeral. The em-dash is the system's only list mark.\n- Don't enable the disabled sidebar (`.slide-sidebar`). It's hidden intentionally — re-enabling it adds visual noise that the system was tuned to remove.\n- Don't round any element other than insight cards (16px) or true circles (dots, donut). Square corners are the structural default.\n\n## Responsive Behavior\n\nThe system is viewport-fluid by design. All sizes use `vw`/`vh` so the same composition renders correctly across any 16:9 viewport without breakpoints. At smaller viewports, both typography and padding scale linearly so the visual density and the negative-space ratio stay constant.\n\n### Presenter Behavior\n- Standard keyboard navigation: arrows, space, Home, End.\n- Touch swipe for mobile.\n- Mouse wheel with debounce to prevent multi-skip.\n- Slide-to-slide transitions animate over 0.9s with a smooth easing curve.\n- Each slide can declare entrance animations on individual elements via `data-anim` (fade-up, fade-in, reveal-right, reveal-left, scale-in) with stagger delays via `data-delay=\"N\"` where N maps to a discrete delay step (0s, 0.08s, 0.18s, 0.3s, 0.44s, 0.6s, 0.78s, 0.96s).\n- Elements with `[data-anim]` start invisible (opacity:0) and animate on `.is-active` — re-visiting a slide replays the entrance.\n\n### Print Behavior\nThe template does not declare a `@media print` rule. Browser-driven PDF export will capture only the active slide; multi-slide export requires manual navigation per slide.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / headline (Jost 200) | Jost | Noto Sans SC (思源黑体) | 700 (heaviest available; CJK at 200 reads as broken — see Aesthetic Notes) |\n| Body / lead (Jost 300) | Jost | Noto Sans SC (思源黑体) | 400 |\n| Pull quote / insight title (Lora italic / roman) | Lora | Noto Serif SC (思源宋体) | 400 |\n| Label / mono chrome (JetBrains Mono) | JetBrains Mono | Noto Sans SC | 400 (do not force monospace on CJK; see Aesthetic Notes) |\n\n### Mixed-Content Strategy\n\nStrategy A — same `font-family` stack, Latin-first fallback. Each typographic token already lists `\"Jost, Noto Sans SC, system-ui, sans-serif\"` (or the Lora equivalent). Latin glyphs render in Jost / Lora; CJK glyphs automatically fall through to Noto Sans SC / Noto Serif SC. No per-language class needed. Mixed sentences like `使用 Claude 思考` render in one logical run with the correct face per script.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Jost:wght@200;300;400;500;600&family=Lora:ital,wght@0,400;0,500;0,600;1,400;1,500&family=JetBrains+Mono:wght@300;400;500&family=Noto+Sans+SC:wght@300;400;500;700;900&family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nIvory Ledger's defining trait is Jost at weight 200 — paper-thin geometric strokes against cream. **Noto Sans SC does not have a usable weight 200.** Its lightest weight (300) still reads heavier than Jost 200 because Chinese glyphs carry far more strokes per character. Set Chinese display in **Noto Sans SC 700** to match the *visual presence* of Jost 200 on the cream paper (counterintuitive, but Chinese readers perceive lighter weights as anemic at large sizes). For body, Noto Sans SC 400 against Jost 300 is the correct match — the cream-paper-and-graphite ink moment carries across scripts.\n\nLora italic is the system's \"human voice\" in pull-quote bodies. **Noto Serif SC has no italic.** Drop italic entirely for Chinese pull quotes; the serif face itself carries the editorial warmth. Don't try to fake italic with `font-style: italic` — Noto Serif SC will render an auto-slanted glyph that looks broken.\n\nJetBrains Mono's uppercase tracked labels (0.12–0.18em) do not transfer to CJK. **Set Chinese labels in Noto Sans SC 400, mixed case, with letter-spacing reset to 0.** The \"catalog-card\" voice in Chinese is achieved through the small size and the cream-paper-light color, not through monospace + tracking. If a label is pure Latin (a version number, a date), keep it in JetBrains Mono uppercase as originally designed.\n\nThe em-dash bullet marker (`—`) works perfectly in Chinese — the Chinese em-dash is also `—` and renders the same width. Keep the marker as-is.\n\n### Known CJK Gap\n\nThe 8vw horizontal padding (the most generous in the library) was tuned for Latin's narrower glyph widths. Chinese characters are roughly square and consume more horizontal space at the same point size. Long Chinese headlines that would fit on one line in English may wrap to two. Reduce display headline sizes by ~15% (Jost 8.5vw → Noto Sans SC 7.2vw) when the headline is pure Chinese, or accept the wrap as part of the editorial rhythm.\n\n## Iteration Guide\n\n1. Any new slide background is `{colors.cream-paper}` (or `{colors.cream-warm}` for the insight/timeline sub-aesthetic). Never introduce a dark or chromatic background.\n2. Any new headline uses Jost in mixed case at weight 200 (display, h1) or 300 (h2). Never reach for heavier weights.\n3. Any new label, eyebrow, tag, or metadata text uses JetBrains Mono uppercase with at least 0.12em tracking colored `{colors.ink-graphite-light}`.\n4. Any new structural divider is a 1px solid black rule. Use `{components.rule}` (36px short) for decorative accents and `{components.rule-full}` for region separation.\n5. Any new pull-quote uses Lora italic at `{typography.quote-serif}` size. Quotes never appear in sans.\n6. Any new card moment uses 16px rounded corners and a Lora roman title. Don't introduce square cards or sans-titled cards.\n7. Any new bullet list uses the em-dash in muted graphite via JetBrains Mono.\n8. Generous whitespace is a feature, not a missing layout. Don't fill space because it's available.\n9. If you need to emphasize a moment, increase size or wrap a span in Lora italic. Do not introduce color.\n10. Color tokens that look chromatic (e.g. `--c-accent`) are aliased to `{colors.ink-black}` — they exist for token compatibility but resolve to black. Don't add a chromatic value to them.\n\n## Known Gaps\n\n- The CSS defines a `.slide-sidebar` element (rotated mono labels in the left gutter) that is intentionally hidden via `display: none !important`. The dormant styles remain in the source; re-enabling without design review will add visual noise the system was tuned to remove.\n- The three insight-card surface tokens (`--c-card-a`, `--c-card-b`, `--c-card-c`) resolve to two near-identical values (#FAFADF, #F5F0E4). The card \"color variation\" is effectively cosmetic — cards are distinguished by serif title and padding, not surface tone.\n- The pie/donut chart uses a `::after` pseudo cutout that requires the chart background to match the slide surface. Slides with a different background (e.g., the cream-warm variant) need the `--c-bg-light` token adjusted for the cutout to disappear correctly.\n- The pyramid chart uses `color-mix(in srgb, ...)` which requires a modern browser. Older browsers will render the bars as solid `{colors.cream-paper}`.\n- The animation system requires the `.is-active` class to be applied to a slide for entrance animations to play. Without proper navigation engine wiring, `[data-anim]` elements will remain at opacity 0.\n- Lora italic at large sizes (3.2vw quote body) has noticeably wider stroke contrast than the surrounding Jost — this is intentional but creates a perceived weight jump. Don't compensate by making the surrounding text heavier.\n- The bar-chart `bar-fill` uses inline `style=\"height: XX%\"` declarations — there's no data-binding layer. Heights are computed manually.\n- The system was originally named \"Ivory Ledger\" in the source comments. The template is exposed in the library as \"Monochrome\"; both names refer to the same design system.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/monochrome/preview.md":"# Monochrome Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/monochrome/design.md`\n- Preview card: `bold-template-pack/templates/monochrome/preview.md`\n\n## Selection Metadata\n\n- Slug: `monochrome`\n- Tagline: Ivory ledger paper with all-black type; Lora serif headlines, Jost body, no color at all.\n- Mood: restrained, literary, archival, ledger\n- Tone: literary, considered, neutral, honest\n- Formality: high\n- Density: high\n- Scheme: light\n- Best for: Anything that should feel like a hand-typeset ledger: user research synthesis, white papers, longform reports, academic and policy briefs, advisory deliverables, bilingual EN/CN reports. Equally good for tech, design, or brand decks that want their words to be the only thing on the page.\n- Avoid for: Decks that need visual personality or color-led storytelling — the all-ink palette is intentionally austere.\n\n## Visual Snapshot\n\nA literary editorial system rendered in black ink on cream paper. Ultra-light geometric sans (Jost at weight 200–300) carries every headline; Lora italic serif handles quote text and insight-card titles; JetBrains Mono provides the structural chrome. There are no chromatic accents — every color in the palette is a graphite or cream tone, and \"accent\" simply means \"darker ink.\" The aesthetic borrows from independent research reports, scholarly monographs, and the quietest end of contemporary editorial design — closer to a printed journal than a tech presentation.\n\nMonochrome (Ivory Ledger) is a literary editorial system built on a single material constraint: black ink on cream paper, and nothing else. The palette has eight tokens, but seven of them are tonal variations of cream or graphite. There is no chromatic accent — the \"accent\" color is just darker ink. The result is a system that reads as a carefully typeset research report or a quiet contemporary monograph, not a presentation.\n\n## Preview Ingredients\n\n- Palette: cream-paper #FAFADF; cream-paper-2 #F2F2D2; cream-paper-3 #F0F0D4; cream-warm #F5F0E4; ink-black #1A1A16; ink-graphite #5E5E54; ink-graphite-light #8A8A80\n- Typography: Jost; JetBrains Mono; Lora; {typography.label.fontFamily}\n- Signature move: Cream paper background ({colors.cream-paper}) on every slide — never white, never dark by default. The cream is the surface, not a stylistic choice.\n- Signature move: Ultra-light Jost (weight 200 for display, weight 300 for body) is the dominant typographic voice.\n- Signature move: Lora italic serif appears in two specific moments: pull-quote bodies and insight-card titles. Nowhere else.\n- Signature move: JetBrains Mono uppercase with 0.12em+ tracking handles every structural label, chrome tag, axis, and bullet marker.\n- Signature move: The system has no chromatic accent. The accent color is {colors.ink-black} — slightly darker ink.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/neo-grid-bold/design.md":"---\nversion: alpha\nname: Neo-Grid Bold\ndescription: A heavy editorial poster system built on a strict 12-column × 8-row block grid with neon-yellow accents on putty-ecru. Space Grotesk at weight 700 in strict uppercase carries every display moment; JetBrains Mono carries every label and metadata tag. Each slide reads as a magazine spread divided into colored panels — paper-ecru, ink-black, and electric lemon-yellow trading roles across cells. The aesthetic borrows from contemporary editorial print, brutalist annual reports, and the populist-poster end of design week showcases.\n\ncolors:\n  paper: \"#F5F4EF\"\n  bg: \"#ECECE8\"\n  ink: \"#0A0A0A\"\n  accent-lemon: \"#E6FF3D\"\n  muted: \"#8A8A85\"\n  stage-bg: \"#1A1A1A\"\n\ncolor-aliases:\n  line: ink\n  primary-bg: bg\n  card-bg: paper\n\ntypography:\n  display:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 132px\n    fontWeight: 700\n    lineHeight: 0.92\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  title:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 88px\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n    textTransform: uppercase\n  subtitle:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 56px\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  section-num:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 320px\n    fontWeight: 700\n    lineHeight: 0.85\n    letterSpacing: -0.05em\n  stat-num:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 156px\n    fontWeight: 700\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  stat-num-lg:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 240px\n    fontWeight: 700\n    lineHeight: 0.85\n    letterSpacing: -0.04em\n  stat-num-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 96px\n    fontWeight: 700\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  card-headline:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 44px\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  card-h3:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 30px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  body:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.35\n  body-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 22px\n    fontWeight: 400\n    lineHeight: 1.45\n  label:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  label-sm:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 16px\n    fontWeight: 400\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  label-xs:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 14px\n    fontWeight: 400\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  pagenum:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    letterSpacing: 0.04em\n\nspacing:\n  frame-inset: 40px\n  grid-gap: 12px\n  grid-gap-lg: 18px\n  card-pad-sm: \"24px 28px\"\n  card-pad-md: \"28px 32px\"\n  card-pad-lg: \"36px 32px\"\n  card-pad-xl: \"40px 44px\"\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  frame:\n    position: \"absolute; inset: 40px\"\n    display: grid\n    gridTemplateColumns: \"repeat(12, 1fr)\"\n    gridTemplateRows: \"repeat(8, 1fr)\"\n    gap: \"{spacing.grid-gap}\"\n    description: \"The universal slide frame — a 12-column × 8-row CSS grid inset 40px from each slide edge with 12px gaps between cells. Every slide composes its layout by spanning cells inside this frame.\"\n  card:\n    background: \"{colors.paper}\"\n    position: relative\n    overflow: hidden\n    description: \"Generic colored panel. Paper is the default fill; .ink switches to black with paper text; .lemon switches to yellow with ink text; .photo switches to deep-black with white text for image regions.\"\n  card-ink:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    description: \"Inverted card — black background, paper text. Used as a contrast block in any composition.\"\n  card-lemon:\n    background: \"{colors.accent-lemon}\"\n    color: \"{colors.ink}\"\n    description: \"Yellow accent card — full neon-yellow fill with ink text. The system's loudest signal.\"\n  pagenum:\n    position: \"absolute; left: 0; bottom: 0\"\n    background: \"{colors.paper}\"\n    color: \"{colors.ink}\"\n    padding: \"14px 22px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.04em\n    description: \"Bottom-left page-number tag in the format '01 / 12'. Three variants: default (paper bg), .invert (ink bg), .lemon (yellow bg).\"\n  corner-mark:\n    position: \"absolute; top: 22px; right: 22px\"\n    width: 36px\n    height: 36px\n    display: \"grid 2x2\"\n    gap: 4px\n    description: \"Top-right 2x2 block mark — three solid currentColor squares plus one transparent. A small structural identity stamp.\"\n  blockmark:\n    width: 56px\n    height: 56px\n    display: \"grid 2x2\"\n    gap: 4px\n    description: \"Larger 2x2 block stamp with diagonal squares filled — used as a brand mark on covers and dividers. May be sized 56px, 96px, or larger.\"\n  qr-tile:\n    width: 90px\n    height: 90px\n    display: \"grid 5x5\"\n    description: \"Decorative QR-pattern tile composed of a 5x5 grid of black squares with some accent-lemon squares interspersed. Decorative, not a real scannable code.\"\n  table-cell:\n    padding: \"18px 22px\"\n    borderBottom: \"1.5px solid {colors.ink}\"\n    borderRight: \"1.5px solid {colors.ink}\"\n    fontSize: 24px\n    lineHeight: 1.35\n    description: \"Comparison-matrix cell. Solid hairline ink dividers on bottom and right; last column has no right border.\"\n  table-head-row:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 14px\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    description: \"Inverted table header — black row with paper mono uppercase text.\"\n  pill-yes:\n    background: \"{colors.accent-lemon}\"\n    color: \"{colors.ink}\"\n    padding: \"6px 14px\"\n    description: \"Affirmative pill in a comparison cell — yellow fill, ink text, mono uppercase.\"\n  pill-part:\n    background: \"{colors.paper}\"\n    color: \"{colors.ink}\"\n    border: \"1.5px solid {colors.ink}\"\n    description: \"Partial-state pill — paper fill, ink border, ink text.\"\n  pill-no:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    description: \"Negative pill — black fill, paper text.\"\n  arrow:\n    width: 64px\n    height: 64px\n    description: \"Inline SVG arrow glyph (right-pointing) at 64px square. Used as a flow indicator between process steps and as an out-of-cell pointer on stat cards.\"\n  highlight-mark:\n    background: \"{colors.accent-lemon}\"\n    color: \"{colors.ink}\"\n    padding: \"0 6px\"\n    description: \"Inline <mark> element — yellow background swatch wrapping one or more words inside a headline for emphasis.\"\n  bar-fill-ink:\n    background: \"{colors.ink}\"\n    description: \"Solid black vertical bar for chart series A.\"\n  bar-fill-lemon:\n    background: \"{colors.accent-lemon}\"\n    border: \"1.5px solid {colors.ink}\"\n    description: \"Yellow vertical bar with ink border for chart series B.\"\n  copyright:\n    position: \"absolute; left: 22px; bottom: 22px\"\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 16px\n    lineHeight: 1.4\n    color: \"{colors.ink}\"\n    opacity: 0.85\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nNeo-Grid Bold is a **heavy editorial poster system** built on a single structural premise: every slide is a 12-column × 8-row CSS grid inset 40px from the slide edges, with 12px gaps between cells. Composition happens by assigning colored panels to grid spans — `grid-column: 4 / span 5` and `grid-row: 1 / span 5` is how layout is described. The grid is rigid; the visual variety comes from how panels of `{colors.paper}`, `{colors.ink}`, and `{colors.accent-lemon}` are arranged across cells.\n\nThe typeface stack is intentionally narrow. **Space Grotesk** at weight 700 carries every display moment in strict uppercase with negative letter-spacing. Body copy runs at weight 400 in mixed case. **JetBrains Mono** at weight 400 carries every label, page number, axis tag, and metadata string — always uppercase with 0.08–0.12em positive tracking. There is no third face. The contrast between heavy Space Grotesk uppercase and JetBrains Mono uppercase is the system's primary typographic rhythm.\n\nThe palette has three working colors plus a putty surface. **Paper** (`{colors.paper}` — a warm ecru off-white) is the default panel fill. **Ink** (`{colors.ink}` — a near-black) is the structural color: text on paper, fills for inverted panels, all dividers, all rules. **Accent Lemon** (`{colors.accent-lemon}` — an electric neon-yellow #E6FF3D) is the loud signal — used as panel fill, as a highlight `<mark>` swatch inside headlines, and as the second series in charts. **Putty BG** (`{colors.bg}`) is the slightly cooler ecru that sits behind the 40px slide inset, framing the composition like a passe-partout. **Muted graphite** is present in the token list but rarely used in practice.\n\nDepth is created entirely through **panel adjacency and color contrast**, not shadows. Cards do not carry box-shadows; cards do not have rounded corners; cards do not have borders (except for table cells and pill outlines, which use 1.5px solid ink). The visual weight of a slide is determined by how many cells are filled with `{colors.ink}` vs. `{colors.accent-lemon}` vs. `{colors.paper}`. A composition with three yellow panels reads as much more aggressive than one with a single yellow panel.\n\n**Density philosophy: dense.** Neo-Grid Bold reads as authoritative when the 12×8 grid is fully populated with panels of varying span and color. A slide with only one or two panels and large empty grid areas reads as broken; the system was designed as an editorial poster, and posters are dense. The expected pattern is 4–8 panels per slide, each occupying a non-trivial cell span, with the grid fully used corner-to-corner. The exception is a section-divider slide where a single 320px section number occupies an entire pane of the grid — but even there, the rest of the canvas is filled with a second panel of contrasting color.\n\n**Key Characteristics:**\n- Universal 12-column × 8-row CSS grid (`{components.frame}`) inset 40px from each slide edge, with 12px gaps between cells.\n- Three-color panel system: paper ecru (`{colors.paper}`) as default, ink black (`{colors.ink}`) for inverted blocks, accent lemon (`{colors.accent-lemon}`) for signal blocks.\n- Space Grotesk weight 700 uppercase with negative letter-spacing for every display element.\n- JetBrains Mono uppercase with 0.08–0.12em tracking for every label, page number, axis tag.\n- A signature corner-mark and blockmark — small 2×2 block stamps that act as decorative identity tags.\n- Inline `<mark>` element that wraps words inside a headline in a neon-yellow swatch — the system's headline emphasis mechanism.\n- A persistent page-number tag (`{components.pagenum}`) anchored bottom-left of every slide.\n- No rounded corners, no drop shadows, no gradients (apart from photo-region stylized noise textures).\n- Stat numerals scale up to 240px and even 320px — type is allowed to dominate entire panels.\n\n## Colors\n\n### Palette\n\n- **Paper** (`{colors.paper}` — #F5F4EF): Warm ecru off-white. The default panel fill, the default text color when inverted, and the canvas of any \"neutral\" card. Slightly creamier than pure white — chosen so the neon-yellow accent doesn't vibrate against it.\n- **BG (Putty)** (`{colors.bg}` — #ECECE8): A cooler ecru that sits behind the 40px slide inset, framing the grid composition like a passe-partout. The 40px border of putty around every slide is the system's universal frame.\n- **Ink** (`{colors.ink}` — #0A0A0A): The structural near-black. Used for all text on paper, all inverted panel fills, all dividers, all table cell borders, all pill outlines. Not pure #000 — slightly softer.\n- **Accent Lemon** (`{colors.accent-lemon}` — #E6FF3D): Electric neon-yellow. The signal color. Used as a panel fill, as the inline `<mark>` highlight swatch inside headlines, as the second chart series, as the affirmative pill fill, and as page-number variant background. Never as a text color (the yellow is too light to read as type against any surface).\n- **Muted** (`{colors.muted}` — #8A8A85): A reserved graphite tone present in the token list but used only at low opacity on photo-region tags. Available for de-emphasized text but rarely deployed.\n- **Stage BG** (`{colors.stage-bg}` — #1A1A1A): The viewport background outside the 1920×1080 slide canvas. This is the deck-stage container color, not part of slide design.\n\n### Defaults\n\n- **Default slide canvas background**: `{colors.bg}` — visible as the 40px putty frame around every grid composition.\n- **Default panel fill**: `{colors.paper}`. When in doubt, a panel is paper.\n- **Default primary headline color**: `{colors.ink}` on paper or lemon panels; `{colors.paper}` on ink panels.\n- **Default body text color**: `{colors.ink}` on paper/lemon; `{colors.paper}` on ink.\n- **Default label / metadata color**: `{colors.ink}` on paper, at opacity 0.7–0.85 to mute; `{colors.paper}` on ink, at opacity 0.7–0.85.\n- **Default chart series color**: `{colors.ink}` for series A; `{colors.accent-lemon}` for series B (with 1.5px ink border).\n- **Default emphasis mechanism inside a headline**: wrap in `<mark>` for a neon-yellow swatch on ink text. This is the system's primary headline-level emphasis.\n- **Default affirmative state**: `{colors.accent-lemon}` fill. Default negative state: `{colors.ink}` fill. Default neutral state: `{colors.paper}` fill with `{colors.ink}` border.\n\nNeon yellow is the system's only chromatic accent — never substitute red, blue, or any third color. Yellow's role is to draw the eye, not to communicate meaning (it is not \"warning\" or \"highlight\" in the semantic sense; it is simply the signal).\n\n## Typography\n\n### Font Family\n\nThe system uses two web fonts: **Space Grotesk** (weights 400, 500, 700) for all display and body, and **JetBrains Mono** (weights 400, 500) for all labels and metadata. There is no third face — no serif, no italic, no display script. The system's character lives in the weight contrast between Space Grotesk 700 uppercase and Space Grotesk 400 mixed case, plus the structural mono labels in JetBrains Mono.\n\nA specific inline mixing rule: **the `<em>` tag inside a Space Grotesk headline switches color to `{colors.accent-lemon}` and stays upright** (font-style is normalized to non-italic). Em is repurposed as a yellow inline color switch, like the `<mark>` swatch but without the background fill.\n\nA second inline mixing rule: **the `<mark>` element wraps words inside a Space Grotesk headline in a neon-yellow swatch with 0 6px padding**, creating the highlighter-pen emphasis that is a recurring signature of the system.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.section-num}` | 320px | Space Grotesk | 700 | Hero section ordinal in a section-divider panel |\n| `{typography.stat-num-lg}` | 240px | Space Grotesk | 700 | Featured large numerical stat |\n| `{typography.stat-num}` | 156px | Space Grotesk | 700 | Standard stat numeral |\n| `{typography.display}` | 132px | Space Grotesk | 700 | Cover, section, or hero display headline |\n| `{typography.stat-num-sm}` | 96px | Space Grotesk | 700 | Compact stat numeral inside a small card |\n| `{typography.title}` | 88px | Space Grotesk | 700 | Primary content-slide headline |\n| `{typography.subtitle}` | 56px | Space Grotesk | 700 | Secondary headline, region heading |\n| `{typography.card-headline}` | 44px | Space Grotesk | 700 | Card title at panel-fill scale |\n| `{typography.card-h3}` | 30px | Space Grotesk | 700 | Sub-headline inside a smaller card |\n| `{typography.body}` | 28px | Space Grotesk | 400 | Body paragraph inside a feature card |\n| `{typography.label}` | 24px | JetBrains Mono | 400 | Standard mono label or kicker |\n| `{typography.body-sm}` | 22px | Space Grotesk | 400 | Compact body inside dense cards |\n| `{typography.pagenum}` | 24px | JetBrains Mono | 400 | Page-number tag (e.g. \"01 / 12\") |\n| `{typography.label-sm}` | 16px | JetBrains Mono | 400 | Secondary metadata label, copyright text |\n| `{typography.label-xs}` | 14px | JetBrains Mono | 400 | Axis labels, table header text, fine print |\n\n### Defaults\n\n- **Default primary section headline**: `{typography.title}` (88px) — the workhorse content-slide headline.\n- **Default cover or section-opening display**: `{typography.display}` (132px) for a cover; `{typography.section-num}` (320px) for a section-divider ordinal.\n- **Default body paragraph size**: `{typography.body}` (28px). For dense multi-card slides, drop to `{typography.body-sm}` (22px).\n- **Default label / metadata size**: `{typography.label}` (24px) for standalone mono tags; `{typography.label-sm}` (16px) for inline metadata.\n- **Default stat numeral**: `{typography.stat-num}` (156px). Reach for `{typography.stat-num-lg}` (240px) only when the stat occupies an entire featured panel.\n- **Default weight for any display element**: 700. Display in any other weight does not exist in this system.\n- **Default weight for body**: 400.\n\nWhen unsure, reach for `{typography.title}` for the slide's primary text moment and pair it with `{typography.body}` for supporting copy.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Space Grotesk display, title, subtitle, card-headline, and stat numeral is uppercase** with negative letter-spacing (-0.005 to -0.05em depending on scale). Mixed-case display does not exist in this system.\n- **Body copy is mixed case at weight 400.** Never uppercase body.\n- **Every JetBrains Mono element is uppercase** with at least 0.08em positive tracking.\n- **The `<mark>` element inside a headline always uses `{colors.accent-lemon}` background with `{colors.ink}` text and 0 6px padding.** The yellow highlighter swatch is the system's headline emphasis signal.\n- **The `<em>` element inside a headline switches to `{colors.accent-lemon}` color and stays upright (font-style: normal).** Italic letterforms are not used.\n- **Negative letter-spacing scales with size**: smaller headlines use -0.005em to -0.015em; larger displays use -0.02 to -0.05em. The tighter the tracking, the more compressed and brutalist the headline reads — at 320px size, -0.05em is correct.\n- **Page numbers are always JetBrains Mono at 24px with 0.04em tracking** in the format `01 / 12` with a single padded zero and slash separator.\n\n### Typography Principles\n\nThe rhythm is **heavy uppercase display + light mixed-case body + small uppercase mono label**. Switching any of those three modes breaks the editorial register. Body in uppercase reads as a shouting paragraph. Display in mixed case reads as a different design system. Mono in mixed case reads as code, not editorial metadata.\n\nItalic letterforms are not used. The `<em>` and `<mark>` tags are repurposed as color/highlight switches, not italic emphasis. Underline is not used. Bold inside body text is not used — emphasis is achieved by isolating the headline in its own cell.\n\n## Layout\n\n### Canvas System\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component that handles scaling to fit the viewport. All sizes are in `px` (not vw/vh) — typography sizes, padding values, grid gaps, and inset values are all pixel-fixed. The composition is designed at 1920×1080 and the stage scales the entire deck proportionally.\n\nThe viewport background outside the deck stage is `{colors.stage-bg}` (#1A1A1A) — a dark gray frame that visually anchors the bright slide against the browser chrome.\n\n### The Universal Frame\n\nEvery slide carries a `.frame` div positioned `absolute; inset: 40px` with `display: grid; grid-template-columns: repeat(12, 1fr); grid-template-rows: repeat(8, 1fr); gap: 12px`. This is the structural constant of the system: a 12-column × 8-row grid with 12px gaps, inset 40px from the slide edges. Some slide variants increase the grid gap to 16–18px for breathing room, but the column/row counts and the 40px inset never change.\n\nComposition happens entirely by spanning cells inside this grid. A panel occupying `grid-column: 1 / span 4; grid-row: 1 / span 3` is a 4-cell-wide × 3-row-tall card in the upper-left. The grid is the only layout language — flexbox is used only for internal alignment inside a single cell.\n\n### Padding Inside Cells\n\nInternal padding inside a cell varies with cell size and purpose:\n- Compact cards (small stat tiles): 24px × 28px\n- Standard cards (feature panels): 28px × 32px\n- Large cards (chapter panels): 36px × 32px\n- Hero cards (section dividers): 40px × 44px\n\nThese are not rigid tokens — they're a practical scale. Choose the padding that gives the card's internal type room to breathe without losing the panel's identity.\n\n### Persistent Chrome\n\nEvery slide carries a `{components.pagenum}` tag bottom-left in the format `01 / 12`. Three variants:\n- Default: paper background, ink text.\n- `.invert`: ink background, paper text.\n- `.lemon`: yellow background, ink text.\n\nSome slides also carry a `{components.corner-mark}` (small 2×2 block) top-right, a `{components.copyright}` bottom-left, or a `{components.blockmark}` (larger 2×2 stamp) as a brand identifier.\n\n## Depth and Elevation\n\n### No Shadows, Color-Block Adjacency Only\n\nThe system uses **zero box-shadow declarations** on any structural panel. Depth is entirely a function of color adjacency: a paper panel next to an ink panel reads as elevated (paper toward viewer); a yellow panel next to an ink panel reads as the loudest signal in the composition. The 12px grid gap between panels reveals the putty `{colors.bg}` between cells, which acts as a unifying frame color.\n\n### No Gradients (Except Photo Regions)\n\nThe only gradients in the system are inside photo-region placeholder textures, where a `radial-gradient` plus a `repeating-linear-gradient` creates a stylized B&W-grain texture as a stand-in for photography. These textures live inside cells classed `.photo` or `.ph`, never on a structural panel.\n\n### Borders on Tables and Pills\n\n- Table cells (`{components.table-cell}`) use 1.5px solid ink dividers on bottom and right edges to create a wireframe grid.\n- Comparison pills (`{components.pill-part}`) use a 1.5px solid ink border as the partial-state outline.\n- Chart axes use 2px solid ink as the bottom-left wireframe.\n- The yellow bar in a bar chart (`{components.bar-fill-lemon}`) carries a 1.5px solid ink border to prevent the bright fill from vibrating against the paper background.\n\nNo other elements carry borders. Cards are borderless and rely on fill contrast.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Every element — cards, pills, tags, page numbers, table cells, chart bars, blockmarks |\n\nThe system has **zero border-radius** on any element. Every shape is a strict rectangle or square. The block-stamp and corner-mark glyphs are composed of right-angle squares.\n\n### Border Weights\n\n- **1.5px solid `{colors.ink}`** — used on table cell dividers, pill outlines, and the yellow bar's border. The most common border weight.\n- **2px solid `{colors.ink}`** — used on chart axes (left and bottom of the plot area) for slightly stronger wireframe.\n\nNo other border weights exist. There are no muted-color borders, no dashed borders (except a very specific `1px dashed rgba(0,0,0,.18)` chart grid line used internally).\n\n### Decorative Element Types\n\n**Block stamp (`{components.blockmark}`)** — A 2×2 grid of small squares with the top-left and bottom-right cells filled (and the other two transparent). A diagonal-fill stamp that acts as a brand identity mark. Sized from 36px (corner-mark) up to 96px (block stamp on quote slides). May render in ink or accent-lemon.\n\n**Corner mark (`{components.corner-mark}`)** — A 36px × 36px version of the block stamp anchored top-right of a panel. Acts as a small structural identity tag.\n\n**QR tile (`{components.qr-tile}`)** — A 5×5 grid of small squares with a checkerboard-like pattern of ink and accent-lemon fills. Decorative QR-pattern visual, not a real scannable code. Used as a cover-slide flourish.\n\n**Arrow (`{components.arrow}`)** — An inline SVG right-pointing arrow at 64px × 64px (or 24px × 24px for small flow indicators). Used as a flow signal between process steps and as an out-pointing indicator on stat panels.\n\n**Highlight mark (`{components.highlight-mark}`)** — A neon-yellow swatch wrapping one or more words inside a headline via the `<mark>` element. The system's headline emphasis mechanism. Padding is `0 6px` (or `0 8px` at larger sizes).\n\n**Page number (`{components.pagenum}`)** — Bottom-left position-tag in the format `01 / 12` with a colored background. The three background variants (paper, ink, lemon) let the page number adapt to whichever color is most visible against the active slide's dominant panels.\n\n**Photo region** — A cell classed `.photo` with a deep-black background (#111) containing a `.ph` child that renders a stylized B&W noise texture (radial + diagonal stripes). A small mono tag inside the cell labels the region (e.g., \"PORTRAIT / B&W\"). Used as a placeholder until real photography arrives.\n\n**Pills (`{components.pill-yes}`, `{components.pill-part}`, `{components.pill-no}`)** — Inline mono uppercase labels in a comparison cell with three color states: yellow fill (affirmative), paper with ink border (partial), ink fill with paper text (negative). All three are 0-radius rectangles, not rounded pills despite the name.\n\n**Section ordinal panel** — A panel containing a 320px Space Grotesk weight-700 numeral as the entire content. Used as the visual identity of a section-divider slide; the rest of the slide carries a complementary headline panel in ink.\n\n**Chart bar pair** — Vertical bars in groups of two (series A in solid ink, series B in yellow with ink border). The bars share equal width inside their column and the column gap is set by the parent grid.\n\n## Do's and Don'ts\n\n### Do\n- Compose every slide on the 12-column × 8-row grid (`{components.frame}`) with 40px inset and 12px (or 18px for breathing room) gaps. The grid is the system's identity.\n- Fill the grid corner to corner. The system reads as authoritative when the grid is densely populated with panels of varying span.\n- Use `{colors.paper}` as your default panel fill, `{colors.ink}` for contrast blocks, and `{colors.accent-lemon}` for one to three signal panels per slide.\n- Set every display, title, subtitle, and stat numeral in Space Grotesk 700 uppercase with negative letter-spacing. The combination is the system's typographic voice.\n- Use `<mark>` inside a headline to wrap one or more words in a yellow highlighter swatch — the system's primary headline emphasis.\n- Use `<em>` inside a headline to switch one word to accent-lemon color (stays upright, no italic).\n- Place a `{components.pagenum}` tag bottom-left of every slide. Choose the background variant (paper / ink / lemon) that contrasts with the lower-left panel.\n- Use JetBrains Mono uppercase with at least 0.08em tracking for every label, page number, axis tag, and metadata string.\n- Render pills (yes / part / no) in their canonical three-color treatment inside comparison tables.\n- Allow stat numerals to scale to 156–320px when they occupy a featured panel. Large numbers are part of the editorial poster identity.\n\n### Don't\n- Don't add box-shadow to any panel. Depth comes from color adjacency only.\n- Don't round any corner on any element. The system is strictly rectangular.\n- Don't put display headlines in mixed case. Space Grotesk display is always uppercase.\n- Don't put body copy in uppercase. Mixed case at weight 400 is the body voice.\n- Don't introduce a second accent color. Neon yellow is the only chromatic accent — adding red, blue, or green breaks the system.\n- Don't use the yellow as a text color. The accent is too light to read as type; it's a fill color only.\n- Don't compose layouts outside the 12×8 grid. Absolutely-positioned elements that break the grid (page number, corner mark, copyright) are explicitly the only exceptions.\n- Don't use italic letterforms. The `<em>` tag is repurposed as a color switch — italic visual style does not exist here.\n- Don't use rounded \"pill\" shapes despite the pill component naming. Pills are 0-radius rectangles.\n- Don't sparsely populate the grid. A slide with one panel and seven empty cells reads as broken — the system needs density to function as an editorial poster.\n\n## Responsive Behavior\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component (loaded via `deck-stage.js`). The stage scales the entire 1920×1080 composition proportionally to fit the browser viewport — type sizes, panel positions, grid gaps, and inset values are all pixel-fixed inside the canvas, and the stage handles the responsive transform.\n\nThis means: every typographic and layout decision in the system is made at 1920×1080 resolution. Sizes do not scale per breakpoint; the entire canvas scales as a single unit. There are no media queries inside slide styles.\n\n### Presenter Behavior\n- The `<deck-stage>` web component manages slide-to-slide navigation, viewport scaling, and presenter chrome.\n- Keyboard navigation, touch swipe, and mouse wheel are handled by the stage component, not by inline scripts.\n- The slide canvas is constant 1920×1080 regardless of browser viewport; the stage proportionally scales it.\n\n### Frontend Slides Integration Note\n\nWhen using this design system inside the `frontend-slides` skill, preserve the\nfixed 1920×1080 canvas model. Do not translate the 12-column × 8-row grid,\nfixed typography, and fixed spacing into independent viewport-responsive\n`clamp()` values. That breaks the relationship between panel size and type\nscale, especially with CJK text, and can create clipping even when the original\ntemplate would have scaled cleanly.\n\nThe safe single-file implementation is:\n\n1. Render each slide as a 1920×1080 `.stage`.\n2. Scale that stage proportionally to fit the current viewport.\n3. Keep the internal `.frame` grid at `inset: 40px`, `12` columns, `8` rows,\n   and `12px` gaps.\n4. Fit content at the 1920×1080 design size first, then scale the whole stage.\n5. Verify both text overflow and panel overlap in the rendered browser. A\n   `scrollHeight` check can pass while one grid panel visually covers another.\n\n### Print Behavior\nThe template uses the deck-stage component for rendering. Print export depends on the component's print handling, which may render slide-per-page or capture the active slide only.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / title / stat (Space Grotesk 700 UPPERCASE) | Space Grotesk | Noto Sans SC (思源黑体) | 900 |\n| Body (Space Grotesk 400) | Space Grotesk | Noto Sans SC | 400 |\n| Label / page number (JetBrains Mono UPPERCASE) | JetBrains Mono | Noto Sans SC | 400 (do not force monospace on CJK) |\n\n### Mixed-Content Strategy\n\nStrategy A — single `font-family` stack with Latin-first fallback. Update each token's `fontFamily` from `\"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"` to `\"Space Grotesk, Noto Sans SC, Helvetica Neue, Helvetica, Arial, sans-serif\"`. Latin glyphs render in Space Grotesk 700; CJK characters fall through to Noto Sans SC 900 automatically. Mixed strings like `THE CLAUDE 模型` render correctly inline.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&family=JetBrains+Mono:wght@400;500&family=Noto+Sans+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nNeo-Grid Bold is heavy uppercase Space Grotesk 700 with negative letter-spacing at sizes up to 320px. **Chinese has no concept of uppercase**, so the system's primary typographic signature (uppercase brutalist headlines) must transfer through *weight and density* instead. Set every Chinese display moment in **Noto Sans SC 900** — the heaviest available weight — to match the visual weight of Space Grotesk 700 ALL CAPS at large sizes. Chinese headlines should also drop the negative letter-spacing entirely; CJK glyphs are designed on a square em-box and tightening them causes glyph collision.\n\nThe `<mark>` neon-yellow swatch highlighting one word inside a headline is a perfect transfer to Chinese — wrap one CJK character or one phrase in `<mark>` and the lemon swatch reads the same. **Keep the highlighter mechanism as the system's primary headline emphasis in CJK.** The `<em>` color switch (yellow inline) also transfers cleanly.\n\nJetBrains Mono uppercase labels (page numbers in `01 / 12` format) are pure Latin / numeric — keep them in JetBrains Mono. Don't try to render Chinese in monospace; CJK glyphs are already monospaced by design and forcing JetBrains Mono produces missing glyphs. For mixed mono labels containing CJK, fall through to Noto Sans SC 400 at the same size.\n\nSection numerals (320px Space Grotesk 700) and stat numerals (156–240px) are pure digits — they transfer unchanged. The neon-yellow accent panel system is script-agnostic; the brutalist poster aesthetic survives the script switch as long as the weight stays at 900.\n\n### Known CJK Gap\n\nThe negative letter-spacing (-0.005 to -0.05em) scales with display size in this system and is part of the \"brutalist compressed\" signature. **Removing it for Chinese characters breaks visual parity with Latin slides in a mixed deck.** Accept this: pure-CJK slides will read as slightly less compressed than pure-Latin slides. Don't try to compensate by tightening Chinese — glyph collision is a worse failure than tonal mismatch.\n\n## Iteration Guide\n\n1. Every new slide composes its layout on the 12×8 grid via `grid-column` and `grid-row` span declarations. Never break the grid with absolute positioning except for the page-number tag, corner-mark, and copyright stamp.\n2. Every new panel uses one of three fill colors: paper (default), ink (inverted), or accent-lemon (signal). Don't introduce a fourth panel color.\n3. Every new display headline is Space Grotesk weight 700 uppercase with negative letter-spacing scaled to the headline size (-0.005em at 30px, up to -0.05em at 320px).\n4. Every new body element is Space Grotesk weight 400 mixed case at one of the three body sizes (28px, 24px, 22px).\n5. Every new label or metadata tag is JetBrains Mono uppercase with at least 0.08em tracking.\n6. Every new chart-series color is either `{colors.ink}` (series A) or `{colors.accent-lemon}` with an ink border (series B). Don't add a third series color.\n7. Every new card uses 0 border-radius. Square corners are non-negotiable.\n8. To emphasize a word inside a headline, wrap it in `<mark>` for a yellow swatch or `<em>` for a yellow color switch. Don't use bold, italic, or underline.\n9. Every new comparison cell uses the three-state pill system: yellow fill (yes), paper with ink border (partial), ink fill (no).\n10. Densely populate the grid. If a composition leaves more than two cells empty in a row, reconsider whether a card is missing.\n\n## Known Gaps\n\n- The system relies on a `<deck-stage>` web component loaded via `deck-stage.js`. Without this script, the 1920×1080 canvas will not scale to the viewport and slides will render at native pixel size.\n- Photo regions use stylized CSS-generated noise textures (radial + diagonal stripe gradients) as placeholders. Real photography must be inserted by replacing the `.photo` cell contents with an `<img>` and ensuring the surrounding panel colors complement the photo's negative space.\n- The QR-pattern tile is decorative — the 5×5 grid of squares does not encode a real scannable code. Real QR codes would need a separate SVG generated externally.\n- Bar chart heights are set via inline `style=\"height: XX%\"` declarations on each bar fill. There is no data-binding layer.\n- The arrow SVG used between process steps is hand-pathed inside each slide template; if a slide adds or removes process nodes, the arrow positions must be recomputed manually.\n- The `<deck-stage>` component is not loaded directly by this template's script tag — it's expected to be globally available via `deck-stage.js`. Missing the script will silently render slides as flat absolute-positioned divs.\n- The system uses fixed pixel sizes throughout (no `vw`/`vh`). At unusual viewport aspect ratios, the deck-stage proportional scaling may letterbox the canvas with putty bars.\n- The `{colors.muted}` (#8A8A85) token is defined but used only in low-opacity overlays on photo region tags — it has no role in the main type or panel system.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/neo-grid-bold/preview.md":"# Neo-Grid Bold Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/neo-grid-bold/design.md`\n- Preview card: `bold-template-pack/templates/neo-grid-bold/preview.md`\n\n## Selection Metadata\n\n- Slug: `neo-grid-bold`\n- Tagline: Editorial neo-brutalism with a single neon yellow accent on off-white paper.\n- Mood: confident, punchy, editorial, modern\n- Tone: bold, minimal, design-led, graphic\n- Formality: medium\n- Density: high\n- Scheme: light\n- Best for: Anything that should feel confident and editorial-graphic: design-led pitches, brand work, founder talks, conference keynotes. Excellent for stat-heavy slides, comparisons, and process flows. Just as strong for tech, research, or finance when the speaker wants to read as design-led rather than corporate.\n- Avoid for: Contexts that need to feel quiet, traditional, or warm — the neon-yellow accent and uppercase display commit to a confident editorial voice.\n\n## Visual Snapshot\n\nA heavy editorial poster system built on a strict 12-column × 8-row block grid with neon-yellow accents on putty-ecru. Space Grotesk at weight 700 in strict uppercase carries every display moment; JetBrains Mono carries every label and metadata tag. Each slide reads as a magazine spread divided into colored panels — paper-ecru, ink-black, and electric lemon-yellow trading roles across cells. The aesthetic borrows from contemporary editorial print, brutalist annual reports, and the populist-poster end of design week showcases.\n\nNeo-Grid Bold is a heavy editorial poster system built on a single structural premise: every slide is a 12-column × 8-row CSS grid inset 40px from the slide edges, with 12px gaps between cells. Composition happens by assigning colored panels to grid spans — grid-column: 4 / span 5 and grid-row: 1 / span 5 is how layout is described. The grid is rigid; the visual variety comes from how panels of {colors.paper}, {colors.ink}, and {colors.accent-lemon} are arranged across cells.\n\n## Preview Ingredients\n\n- Palette: paper #F5F4EF; bg #ECECE8; ink #0A0A0A; accent-lemon #E6FF3D; muted #8A8A85; stage-bg #1A1A1A\n- Typography: Space Grotesk; JetBrains Mono\n- Signature move: Universal 12-column × 8-row CSS grid ({components.frame}) inset 40px from each slide edge, with 12px gaps between cells.\n- Signature move: Three-color panel system: paper ecru ({colors.paper}) as default, ink black ({colors.ink}) for inverted blocks, accent lemon ({colors.accent-lemon}) for signal blocks.\n- Signature move: Space Grotesk weight 700 uppercase with negative letter-spacing for every display element.\n- Signature move: JetBrains Mono uppercase with 0.08–0.12em tracking for every label, page number, axis tag.\n- Signature move: A signature corner-mark and blockmark — small 2×2 block stamps that act as decorative identity tags.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/peoples-platform/design.md":"---\nversion: alpha\nname: People's Platform\ndescription: \"A WPA-poster-meets-political-campaign presentation system built on three typefaces and a five-color palette that reduces to three functional roles. Alfa Slab One — a compressed slab serif — does all the heavy lifting at extreme sizes in pure uppercase. Caveat Brush drops in as a handwritten human interrupt: lowercase, slightly rotated, emotionally warm. DM Mono carries all metadata at tight uppercase tracking. The palette is electric cobalt blue, amber orange, and hot red — with red functioning exclusively as a shadow/depth color, never as a surface fill. Every slide gets a paper grain overlay that makes the whole deck feel screen-printed. The aesthetic is loud, confident, and populist — the kind of visual language that belongs on a protest placard, a union newsletter, or a campaign bus.\"\n\ncolors:\n  blue: \"#2C2CDC\"\n  blue-deep: \"#1B1BB0\"\n  orange: \"#F2A03A\"\n  orange-deep: \"#E89321\"\n  red: \"#E83A2A\"\n  red-deep: \"#B7281C\"\n  cream: \"#F4E9D6\"\n  paper: \"#F5F2EA\"\n  ink: \"#0E0E14\"\n\ntypography:\n  display-jumbo:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 540px\n    fontWeight: 400\n    lineHeight: 0.82\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  display-hero:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 260px\n    fontWeight: 400\n    lineHeight: 0.86\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-title:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 240px\n    fontWeight: 400\n    lineHeight: 0.86\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-xl:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 180px\n    fontWeight: 400\n    lineHeight: 0.88\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-lg:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 0.88\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-md:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 120px\n    fontWeight: 400\n    lineHeight: 0.88\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-sm:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 108px\n    fontWeight: 400\n    lineHeight: 1.04\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  stat-unit:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 130px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  section-num:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 54px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  card-title:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 54px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  kpi-value:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 88px\n    fontWeight: 400\n    lineHeight: 0.9\n    textTransform: uppercase\n  quote-mark:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 300px\n    fontWeight: 400\n    lineHeight: 0.7\n    textTransform: uppercase\n  quote-body:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 78px\n    fontWeight: 400\n    lineHeight: 1.08\n    textTransform: uppercase\n  item-title:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 38px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  item-title-sm:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 30px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  toc-entry:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 36px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  subtitle:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 72px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.01em\n    textTransform: uppercase\n  cta:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 48px\n    fontWeight: 400\n    letterSpacing: 0.02em\n    textTransform: uppercase\n  stamp:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 28px\n    fontWeight: 400\n    letterSpacing: 0.04em\n    textTransform: uppercase\n  url:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 46px\n    fontWeight: 400\n    letterSpacing: 0.02em\n    textTransform: uppercase\n  script-lg:\n    fontFamily: \"Caveat Brush, cursive\"\n    fontSize: 96px\n    fontWeight: 400\n    textTransform: lowercase\n  script-md:\n    fontFamily: \"Caveat Brush, cursive\"\n    fontSize: 64px\n    fontWeight: 400\n    textTransform: lowercase\n  body-lg:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 30px\n    fontWeight: 500\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-md:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 28px\n    fontWeight: 500\n    lineHeight: 1.35\n    letterSpacing: 0\n  body-sm:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 26px\n    fontWeight: 500\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-xs:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0\n  label:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-wide:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.22em\n    textTransform: uppercase\n  label-accent:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 32px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: 0.16em\n    textTransform: uppercase\n  signoff:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 26px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0.20em\n    textTransform: uppercase\n\nspacing:\n  slide-gutter: 90px\n  content-gutter: 120px\n  topbar-height: 90px\n  section-border: 6px\n  inner-border: 3px\n  grid-gap-lg: 90px\n  grid-gap-md: 30px\n  frame-inset: 48px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  inset-frame:\n    border: \"6px solid {colors.cream}\"\n    position: absolute\n    inset: 48px\n  topbar:\n    position: absolute\n    top: 0\n    left: 0\n    right: 0\n    height: 90px\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n    padding: 0 90px\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.18em\n    borderBottom: \"6px solid {colors.cream}\"\n  section-divider:\n    borderBottom: \"6px solid {colors.ink}\"\n    height: 6px\n  toc-row:\n    display: grid\n    gridTemplateColumns: \"90px 1fr 100px\"\n    gap: 24px\n    padding: \"20px 0\"\n    borderBottom: \"3px solid {colors.ink}\"\n  toc-num:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 54px\n    color: \"{colors.orange}\"\n    textShadow: \"3px 3px 0 {colors.red}\"\n  pillar-col:\n    padding: \"60px 50px\"\n    borderRight: \"6px solid {colors.ink}\"\n    background: \"{colors.paper}\"\n  pillar-col-alt:\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n  pillar-tag:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.18em\n    borderTop: \"3px solid {colors.ink}\"\n    paddingTop: 18px\n    marginTop: 14px\n    alignSelf: flex-start\n  kpi-card:\n    border: \"5px solid {colors.ink}\"\n    padding: \"28px 30px\"\n    background: \"{colors.paper}\"\n  kpi-card-alt:\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n  timeline-dot:\n    width: 60px\n    height: 60px\n    borderRadius: 50%\n    background: \"{colors.orange}\"\n    border: \"6px solid {colors.ink}\"\n    boxShadow: \"6px 6px 0 {colors.red}\"\n  timeline-dot-alt:\n    background: \"{colors.blue}\"\n  timeline-track:\n    height: 14px\n    background: \"{colors.ink}\"\n  compare-side-left:\n    background: \"{colors.paper}\"\n    borderRight: \"6px solid {colors.ink}\"\n    padding: \"60px 70px\"\n  compare-side-right:\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n    padding: \"60px 70px\"\n  compare-label:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.22em\n    paddingBottom: 14px\n    borderBottom: \"4px solid {colors.ink}\"\n    alignSelf: flex-start\n  diamond-bullet:\n    width: 24px\n    height: 24px\n    background: \"{colors.red}\"\n    borderRadius: 4px\n    transform: rotate(45deg)\n  diamond-bullet-alt:\n    background: \"{colors.orange}\"\n  avatar:\n    width: 120px\n    height: 120px\n    borderRadius: 50%\n    background: \"{colors.blue}\"\n    border: \"6px solid {colors.blue}\"\n    boxShadow: \"6px 6px 0 {colors.red}\"\n  quote-stamp:\n    background: \"{colors.blue}\"\n    color: \"{colors.orange}\"\n    padding: \"18px 32px\"\n    transform: rotate(-3deg)\n    border: \"5px solid {colors.cream}\"\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 28px\n    letterSpacing: 0.04em\n    boxShadow: \"6px 6px 0 {colors.red}\"\n    textTransform: uppercase\n  circular-stamp:\n    width: 200px\n    height: 200px\n    borderRadius: 50%\n    background: \"{colors.cream}\"\n    color: \"{colors.blue}\"\n    border: \"6px solid {colors.orange}\"\n    transform: rotate(-9deg)\n    boxShadow: \"8px 8px 0 {colors.red}\"\n  meta-pill:\n    border: \"3px solid {colors.cream}\"\n    padding: \"8px 20px\"\n    borderRadius: 999px\n  ribbon:\n    position: absolute\n    bottom: 0\n    left: 0\n    right: 0\n    height: 60px\n    background: \"{colors.orange}\"\n    color: \"{colors.blue}\"\n    borderTop: \"6px solid {colors.ink}\"\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.22em\n    fontWeight: 600\n  lede-block:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontWeight: 500\n    fontSize: 28px\n    lineHeight: 1.35\n    borderLeft: \"4px solid {colors.ink}\"\n    paddingLeft: 50px\n  lede-block-top:\n    borderTop: \"6px solid {colors.ink}\"\n    paddingTop: 24px\n  underline-rule:\n    height: 14px\n    background: \"{colors.ink}\"\n    width: \"30%\"\n    marginTop: 60px\n  kicker:\n    fontFamily: \"DM Mono, monospace\"\n    letterSpacing: 0.22em\n    fontSize: 26px\n    color: \"{colors.red}\"\n    marginBottom: 48px\n  grain-overlay:\n    position: absolute\n    inset: 0\n    pointerEvents: none\n    backgroundImage: \"radial-gradient(rgba(0,0,0,.06) 1px, transparent 1px), radial-gradient(rgba(255,255,255,.05) 1px, transparent 1px)\"\n    backgroundSize: \"3px 3px, 5px 5px\"\n    backgroundPosition: \"0 0, 1px 2px\"\n    mixBlendMode: multiply\n    opacity: 0.5\n  orange-dot:\n    width: 10px\n    height: 10px\n    borderRadius: 50%\n    background: \"{colors.orange}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPeople's Platform is a **WPA-poster-meets-political-campaign slide system** — the visual language of conviction, the graphic register of public address. The canvas is warm paper (`{colors.paper}` — #F5F2EA), a hair warmer than white, and every slide gets a grain texture applied via a CSS pseudo-element that makes the whole deck feel screen-printed rather than rendered.\n\nThe typeface stack is a three-way class system. **Alfa Slab One** owns the stage at extreme sizes — compressed, slab-heavy, all caps, intrinsically authoritative. It is the voice that shouts. **Caveat Brush** is the human interrupt — handwritten, lowercase, slightly rotated, emotionally present. It is the voice that whispers. **DM Mono** is the bureaucratic record-keeper — monospace, wide-tracked uppercase, 24px, always — the voice that accounts for things. Archivo Narrow is the workhorse body face: never used at display sizes, always condensed, weight 500 for readability.\n\nThe palette has five named colors but three functional roles. **Blue** (`{colors.blue}` — #2C2CDC) is the primary structural color: backgrounds for high-emphasis surfaces, borders for content dividers, text color on non-blue backgrounds. **Orange** (`{colors.orange}` — #F2A03A) is the energy color: stat figures, column numerals, accent text within blue surfaces. **Red** (`{colors.red}` — #E83A2A) is the depth color — it never appears as a surface fill, only as the first layer of a stacked text-shadow or box-shadow. Blue-deep and red-deep are the outer shadow layers in the double-stacked shadow system.\n\nThe signature depth technique is the **stacked offset text-shadow**: orange text casts a red shadow at 6–12px, which casts a red-deep shadow at 12–24px. This creates a three-layer quasi-3D letterpress effect that is the system's most recognisable trait. Box-shadows on interactive elements mirror the same treatment: `6px 6px 0 {colors.red}`.\n\n**Key Characteristics:**\n- Paper canvas (`{colors.paper}` — #F5F2EA) with grain overlay via CSS pseudo-element on every slide.\n- Stacked double text-shadow: `Npx Npx 0 {colors.red}, 2Npx 2Npx 0 {colors.red-deep}`. Shadow size scales with font size.\n- Alfa Slab One for all display and structural type — uppercase, line-height 0.82–1.04, letter-spacing 0.005em.\n- Red (`{colors.red}`) functions exclusively as a shadow color — never a surface background.\n- Heavy 6px ink borders for all major structural divisions (topbars, section headers, column separators, inset frames).\n- DM Mono labels at exactly 24px with 0.18–0.22em tracking across all slides.\n- Caveat Brush appears at 64–96px, always lowercase, always rotated 2–5 degrees — a deliberate roughness signal.\n- Orange bottom ribbon: a horizontal marquee strip anchored to the bottom of data-heavy slides.\n- Inset decorative frame (6px solid cream at `inset: 48px`) used on blue-background slides.\n\n## Colors\n\n### Primary Palette\n- **Blue** (`{colors.blue}` — #2C2CDC): Electric cobalt. The dominant surface color for high-emphasis slides and structural elements. Used as full-slide background, column fills, topbar backgrounds, text on cream/paper surfaces, avatar fills, and compare-panel dark side.\n- **Blue Deep** (`{colors.blue-deep}` — #1B1BB0): A darker blue. Used exclusively as the outermost layer of stacked text-shadows. Never a surface fill.\n- **Orange** (`{colors.orange}` — #F2A03A): Warm amber. The energy accent. Used for oversized stat numerals, column ordinals, CTA button fill, ribbon background, accent text within blue surfaces, and text-shadow inner layer on stamp elements.\n- **Orange Deep** (`{colors.orange-deep}` — #E89321): Darker amber. Reserved for the deepest shadow layer on orange elements. Not used as a surface fill.\n- **Red** (`{colors.red}` — #E83A2A): Hot red. The depth color. Used exclusively in text-shadows and box-shadows — the first offset layer on most display text and buttons. Never appears as a background or primary text color.\n- **Red Deep** (`{colors.red-deep}` — #B7281C): Dark red. The outermost layer of the double text-shadow on the largest display elements. Never a surface fill.\n\n### Surface Palette\n- **Cream** (`{colors.cream}` — #F4E9D6): Warm cream. Used as text/border color on blue surfaces (inverted mode), as the inset frame border, and as the full background on cream-tone slides.\n- **Paper** (`{colors.paper}` — #F5F2EA): Off-white with a warm cast. The default slide background — slightly warmer and less stark than #fff. Most content slides use this.\n- **Ink** (`{colors.ink}` — #0E0E14): Near-black with a barely-perceptible blue undertone. Used for all structural borders, body text, column dividers, timeline tracks, and KPI card borders.\n\n### Color Roles Summary\n- **Blue surfaces** = high-emphasis, conclusive, authoritative moments\n- **Paper/cream surfaces** = content-first, readable, subordinate moments\n- **Orange** = the number, the energy, the thing that matters most on a given slide\n- **Red** = never a color you see directly — only a shadow you feel\n\n## Typography\n\n### Font Families\nThree typefaces; each occupies a completely non-overlapping register:\n\n**Alfa Slab One** is the primary voice. A compressed, heavy slab serif with strong verticals and blocky serifs. Used at weight 400 (the only weight available, which is intrinsically bold) in strict uppercase for every display moment from 28px stamps to 540px stat figures. Its compressed letterform means even massive sizes don't feel wide — they feel tall and column-like. The slight positive letter-spacing (0.005em) keeps glyphs from touching at large sizes.\n\n**Caveat Brush** is the human voice. A rough handwritten script face used only at large sizes (64–96px), always lowercase, always with a small rotation (-2 to -5 degrees). It appears at moments of warmth, transition, or informality — a script annotation in an otherwise rigidly structured deck. It is never used for body copy or labels.\n\n**DM Mono** is the accounting voice. Monospace, 24px, wide letter-spacing (0.18–0.22em), uppercase. It appears on topbars, footers, kicker labels, metadata rows, source citations, and ribbon text. It is always a supporting element — the technical spec printed at the bottom of a poster, not the headline.\n\n**Archivo Narrow** is the body voice. A condensed sans used for all running body copy: pillar descriptions, list item paragraphs, compare list items, stat annotations. Weight 500 for most body text; 400 for smaller captions. Never used at display sizes.\n\n### Display Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-jumbo}` | 540px | Alfa Slab One | 400 | Full-bleed oversized stat numeral |\n| `{typography.display-hero}` | 260px | Alfa Slab One | 400 | Dominant closing or opening headline |\n| `{typography.display-title}` | 240px | Alfa Slab One | 400 | Primary deck title |\n| `{typography.display-xl}` | 180px | Alfa Slab One | 400 | Large column ordinal numeral |\n| `{typography.display-lg}` | 140px | Alfa Slab One | 400 | Section headline, primary |\n| `{typography.display-md}` | 120px | Alfa Slab One | 400 | Section headline, secondary |\n| `{typography.display-sm}` | 108px | Alfa Slab One | 400 | Body-adjacent manifesto headline |\n| `{typography.stat-unit}` | 130px | Alfa Slab One | 400 | Superscript unit symbol alongside stat |\n| `{typography.quote-mark}` | 300px | Alfa Slab One | 400 | Decorative oversized quotation mark |\n| `{typography.quote-body}` | 78px | Alfa Slab One | 400 | Pull quote body text |\n| `{typography.kpi-value}` | 88px | Alfa Slab One | 400 | KPI or metric card value |\n| `{typography.subtitle}` | 72px | Alfa Slab One | 400 | Subtitle or secondary title alongside a primary headline |\n| `{typography.card-title}` | 54px | Alfa Slab One | 400 | Card or column heading |\n| `{typography.section-num}` | 54px | Alfa Slab One | 400 | Section or item ordinal numeral |\n| `{typography.cta}` | 48px | Alfa Slab One | 400 | CTA button label |\n| `{typography.url}` | 46px | Alfa Slab One | 400 | URL or contact address |\n| `{typography.item-title}` | 38px | Alfa Slab One | 400 | List item or node heading |\n| `{typography.toc-entry}` | 36px | Alfa Slab One | 400 | Table of contents entry title |\n| `{typography.item-title-sm}` | 30px | Alfa Slab One | 400 | Dense list item heading |\n| `{typography.stamp}` | 28px | Alfa Slab One | 400 | Stamp or badge label |\n\n### Script Scale\n\n| Token | Size | Use |\n|---|---|---|\n| `{typography.script-lg}` | 96px | Prominent handwritten accent — transition word, emotional opener |\n| `{typography.script-md}` | 64px | Smaller handwritten annotation — subtitle callout, sub-label |\n\nBoth script tokens are always lowercase and always applied with a rotation between -2deg and -5deg. Never use Caveat Brush without rotation.\n\n### Body and Label Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.body-lg}` | 30px | Archivo Narrow | 500 | Stat annotation, primary body paragraph |\n| `{typography.body-md}` | 28px | Archivo Narrow | 500 | Column body, lede paragraph, compare list |\n| `{typography.body-sm}` | 26px | Archivo Narrow | 500 | Supporting body paragraphs |\n| `{typography.body-xs}` | 24px | Archivo Narrow | 400 | Dense list items, captions |\n| `{typography.label}` | 24px | DM Mono | 400 | Standard metadata label (0.18em tracking) |\n| `{typography.label-wide}` | 24px | DM Mono | 400 | Footline and ribbon text (0.22em tracking) |\n| `{typography.label-accent}` | 32px | DM Mono | 600 | Highlighted metadata (e.g. section count) |\n| `{typography.signoff}` | 26px | DM Mono | 400 | Footer sign-off block (0.20em tracking) |\n\n### Typography Principles\nAlfa Slab One is always uppercase — never use it in sentence case or lowercase. Line-height at display sizes is tight: 0.82–0.88 for large headlines, 1.04 only for multi-line body-adjacent text where line collision would occur. The 0.005em letter-spacing is nearly invisible but prevents glyph collision at 100px+ sizes.\n\nThe stacked text-shadow is the inline styling rule for display text: orange display type always casts `{colors.red}` as its first shadow. At sizes above 200px, add a second `{colors.red-deep}` layer at double the offset. At sizes below 100px, a single 3px–6px offset in `{colors.red}` is sufficient.\n\nDM Mono labels are always 24px regardless of context. The tracking varies by placement: 0.18em for topbar/footer, 0.22em for ribbon and footline, 0.16em for side labels in split panels. Never reduce tracking on DM Mono — at 24px without tracking, it reads as utilitarian rather than editorial.\n\nArchivo Narrow is always weight 400 or 500. Never use it at display sizes. It is a supporting voice, not a headline voice.\n\n## Layout\n\n### Canvas System\nEvery slide is 1920×1080px. The `deck-stage` custom element handles scaling. All content is absolutely positioned or uses CSS grid — no scrolling.\n\n### Gutter System\n- **Slide gutter** (90px left/right): The standard edge padding for most content sections.\n- **Content gutter** (120px left/right): Used for body content within slides that already have a structural header — provides extra breathing room for reading text.\n- **Topbar height** (90px): The fixed-height blue topbar band that sits at the absolute top of a slide.\n- **Frame inset** (48px): The distance from the slide edge to the decorative inset frame border used on blue-background slides.\n\n### Universal Chrome\nThe system does not enforce a universal topbar on every slide. Two chrome patterns exist:\n\n**Topbar pattern** — A full-width 90px blue bar anchored to the top (`position:absolute; top:0; left:0; right:0`). Contains DM Mono 24px label text at 0.18em tracking. Carries a 6px solid cream bottom border. Used on high-emphasis blue-background slides.\n\n**Section-divider pattern** — A 6px solid ink horizontal rule between a header block and the content area below. The header block uses 90px left/right padding; the content below uses 90px padding. No topbar — the rule is the dividing element.\n\nBoth patterns can coexist on a single slide or be used independently.\n\n## Depth and Elevation\n\n### Stacked Text-Shadow (Primary Technique)\nThe system's signature. Display text casts layered offset shadows in the same direction (bottom-right), creating a quasi-3D letterpress effect. Three tiers by element size:\n\n| Tier | Offset layer 1 | Offset layer 2 | Use |\n|---|---|---|---|\n| Small | `3px 3px 0 {colors.red}` | — | Items below 72px |\n| Medium | `5px–6px 5px–6px 0 {colors.red}` | — | 72px–140px display |\n| Large | `10px 10px 0 {colors.red}, 20px 20px 0 {colors.red-deep}` | | 140px–260px display |\n| Jumbo | `12px 12px 0 {colors.red}, 24px 24px 0 {colors.red-deep}` | | 260px+ stat figures |\n\nThe orange display text is the \"face\" layer; red is the \"body\"; red-deep is the \"foot.\" The illusion is of a letterform with physical thickness.\n\n### Box-Shadow (Secondary Technique)\nInteractive and decorative elements (stamps, avatars, CTA buttons, KPI cards) use the same offset logic in box-shadow form: `6px 6px 0 {colors.red}` or `8px 8px 0 {colors.red}`. This unifies the depth system: all elements in the deck cast shadows in the same direction at the same apparent light angle.\n\n### Grain Texture (Atmospheric Depth)\nEvery slide carries a `.grain::before` pseudo-element: two overlapping radial-gradient dot grids at 3px and 5px pitch, with `mix-blend-mode: multiply` and 50% opacity. This simulates screen-print halftone texture, giving the flat digital surfaces a physical, printed quality. It is not elevation but atmosphere — the entire deck reads as produced rather than rendered.\n\n### Flat Elements\nDM Mono labels, ink section rules, body text, and grid lines are completely flat. No shadows on structural dividers.\n\n## Shapes and Treatment\n\n### Border Radius Scale\n| Value | Use |\n|---|---|\n| 999px (pill) | Meta label pills in topbar/header areas |\n| 50% (circle) | Avatar elements, timeline milestone dots, circular stamp |\n| 4px | Diamond bullet pseudo-elements (rotated 45deg to form a diamond) |\n| 0px | All structural elements: columns, cards, topbars, frames, ribbons, KPI cards, stamps |\n\nThe system is almost entirely square. The only soft shapes are the pill (for metadata chips), the circle (for avatars, dots, the closing stamp), and the diamond bullet. The squareness of structural elements reinforces the printed/constructed aesthetic.\n\n### Border Weights\n- **6px solid `{colors.ink}`** — Primary structural borders: section dividers, column separators, topbar bottom edges, inset frames, KPI card borders, CTA button border.\n- **6px solid `{colors.cream}`** — Inverted structural borders on blue surfaces: inset frame, topbar divider in cream-on-blue mode.\n- **5px solid** — Secondary structural borders: quote stamp, compare list item treatment.\n- **4px solid** — Tertiary dividers: side labels in compare panels, lede left-border.\n- **3px solid `{colors.ink}`** — Fine structural lines: TOC row separators, column tags, stat source dividers, inner timeline lines.\n\n### Decorative Elements\n\n**Inset frame** — A 6px solid cream border at `inset: 48px` creates a second inner rectangle on blue-background slides. It reinforces the poster/placard aesthetic — the design within a design.\n\n**Orange ribbon** — A 60px bottom-anchored strip in `{colors.orange}` with 6px ink top border and repeating DM Mono text at 0.22em tracking. Functions as a marquee footer on data slides.\n\n**Diamond bullet** — List item marker using a `::before` pseudo-element: 24px × 24px, `background: {colors.red}`, `border-radius: 4px`, `transform: rotate(45deg)`. On blue-background lists, uses `{colors.orange}` instead. The shape sits 48px left of the text (positioned absolutely).\n\n**Circular stamp** — A 200px circle (`{components.circular-stamp}`) rotated -9deg with 6px orange border and an 8px red box-shadow. Functions as a seal — the physical-world approval mark on a bureaucratic document.\n\n**Rotated rectangular stamp** — A rectangular block rotated -3deg with 5px cream border and 6px red box-shadow. Contains Alfa Slab One 28px text at 0.04em tracking. Lighter rotation than the circular stamp — feels like an address label placed at a slight angle.\n\n**Script annotation** — Caveat Brush 64–96px, lowercase, rotated 2–5 degrees. Always appears adjacent to an Alfa Slab One headline it qualifies or interrupts — never alone.\n\n**Column ordinal** — 180px Alfa Slab One orange numeral with a 5px red text-shadow, followed by a 3px ink top-border DM Mono tag label below it. This pairing (large orange numeral + small mono tag) is the system's standard way of labelling columns or sections.\n\n**Underline rule** — A 14px tall solid ink rectangle, width 30% of its container, used as a full-stop after a manifesto headline. It is heavier than a hairline rule — closer to a redaction bar.\n\n**Grain overlay** — The `.grain` class adds `::before` pseudo-element texture to every slide. It cannot be removed from a slide in this system — it is structural to the aesthetic.\n\n## Do's and Don'ts\n\n### Do\n- Apply the grain overlay (`.grain::before`) to every slide. It is not decorative — it is the surface that everything else is printed on.\n- Use the stacked text-shadow on all orange and cream display text. Shadowless Alfa Slab One reads flat and loses the letterpress character.\n- Scale shadow offset proportionally to font size: small offset for small type, jumbo offset for jumbo type.\n- Keep red exclusively as a shadow color. The moment red appears as a text color or background fill, the depth system collapses.\n- Use Caveat Brush only at large sizes (64px+), always lowercase, always slightly rotated. Never for body text.\n- Keep DM Mono labels at exactly 24px with at least 0.16em letter-spacing. The monospace face at body size with normal tracking reads as code, not editorial.\n- Use the 6px border weight for major structural divisions. Thinner reads as SaaS; thicker looks like a design mistake.\n- When a slide uses a blue background, use the inset frame — it distinguishes blue-background slides as \"framed\" rather than merely filled.\n- Apply `{colors.orange}` as the numerals, values, and accent text on blue surfaces. Blue-on-orange or cream-on-blue are the only other permitted text combinations on dark surfaces.\n\n### Don't\n- Don't use red as a background or primary text color. It is a shadow material, not a surface material.\n- Don't use Caveat Brush at body sizes or without rotation. Flat, small handwriting reads as untidy, not intentional.\n- Don't apply Alfa Slab One in mixed case. The uppercase lock is essential to the slab's authority.\n- Don't soften the border weights. 1px or 2px borders on structural elements break the printed-matter aesthetic.\n- Don't round card or container corners. The inset frame and KPI cards are strictly square.\n- Don't use Archivo Narrow for headlines. It is a body and lede face only — it lacks the visual weight for display use.\n- Don't use blue-deep or red-deep as surface colors. They are shadow-only values — their role is depth, not fill.\n- Don't omit the diamond bullet rotation on list items. A 45deg-rotated square is a diamond; an upright square is a box — the shape signals hand-crafted, not generic.\n- Don't vary the DM Mono font size. 24px is the single fixed size for all monospace label text — increasing it for emphasis breaks the system; use `{typography.label-accent}` (32px, weight 600) as the sole exception.\n\n## Responsive Behavior\n\nThis template is designed exclusively for 1920×1080 presentation display. The `deck-stage` custom element handles viewport scaling via CSS transforms — the 1920×1080 canvas scales proportionally to any screen size without layout changes.\n\nSlides advance via keyboard or presentation clicker through `deck-stage.js`. No hover states, no interactive form elements, no responsive breakpoints.\n\nFor print and PDF export: at 96dpi, the 1920×1080 canvas maps to a 20×11.25 inch frame. The grain overlay uses `mix-blend-mode: multiply` — in PDF export, blend modes may flatten; test print output and consider disabling the grain for printed formats.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / title / quote (Alfa Slab One UPPERCASE) | Alfa Slab One | Noto Serif SC (思源宋体) | 900 |\n| Script interrupt (Caveat Brush lowercase rotated) | Caveat Brush | — (no good equivalent; see Aesthetic Notes) | — |\n| Body (Archivo Narrow 500) | Archivo Narrow | Noto Sans SC (思源黑体) | 500 |\n| Label / mono (DM Mono UPPERCASE tracked) | DM Mono | Noto Sans SC | 400 (do not force monospace on CJK) |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. Alfa Slab tokens become `\"Alfa Slab One, Noto Serif SC, serif\"`; Archivo Narrow tokens become `\"Archivo Narrow, Noto Sans SC, sans-serif\"`; DM Mono tokens become `\"DM Mono, Noto Sans SC, monospace\"`. Latin glyphs render in their original face; CJK falls through to the SC fallback automatically.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Alfa+Slab+One&family=Caveat+Brush&family=Archivo+Narrow:wght@400;500;600;700&family=DM+Mono:wght@300;400;500&family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPeople's Platform is a WPA-poster system built on three load-bearing typefaces, and **none of the three has a clean Chinese transfer**.\n\n**Alfa Slab One** is a compressed slab serif at extreme sizes (up to 540px) in uppercase. There is no Chinese slab serif of equivalent weight and authority available on CDN. **Noto Serif SC at weight 900** is the closest match — it carries the slab-like heaviness and the structural authority — but it reads as more \"literary monument\" than \"protest placard.\" Accept this register shift: Chinese versions of this system feel closer to a heritage-era public-notice board (think 大字报 or museum signage) than to a 1930s WPA poster. The stacked red text-shadow still applies and still carries the system's letterpress depth signature.\n\n**Caveat Brush** is the \"human interrupt\" voice — lowercase, rotated, emotionally warm. **This does not transfer to Chinese.** Chinese brush calligraphy (Ma Shan Zheng / 马善政) carries cultural and traditional weight — it reads as ceremonial, formal, even bureaucratic, NOT the casual personal voice of Latin Caveat. **Recommended approach: leave the brush moment out entirely on pure-CJK slides.** A second option: use a short Latin word in Caveat Brush as the interrupt even within Chinese content (e.g., a script `yes!` annotation beside a Chinese headline) — this preserves the casual interrupt energy and signals \"voice break\" without invoking Chinese calligraphic tradition.\n\n**DM Mono** uppercase tracked labels do not transfer to CJK. Set Chinese metadata in **Noto Sans SC 400** with letter-spacing reset to 0 and no uppercase. Pure-Latin tags (URLs, dates, edition numbers) keep DM Mono.\n\n**Archivo Narrow** is condensed at weight 500. **Noto Sans SC has no condensed variant.** Use Noto Sans SC 500 at the original Archivo size and accept that Chinese body type sits slightly wider than Latin body type. The single-color paper canvas and the grain overlay absorb the width difference.\n\nThe stacked text-shadow (orange → red → red-deep) is the system's most recognizable trait. **It transfers perfectly to Chinese.** Apply it to every Chinese display headline in orange and the letterpress depth survives the script switch. The blue-and-orange-and-red palette is also fully script-agnostic.\n\nThe diamond bullet marker, the rotated rubber stamp, the inset cream frame, the 6px ink borders — all work unchanged in Chinese.\n\n### Known CJK Gap\n\n**Caveat Brush has no acceptable Chinese equivalent.** The \"human interrupt\" voice is structurally absent in a pure-CJK People's Platform deck. The two workarounds (drop the interrupt entirely; use Latin-in-Chinese for the script moments) are both visible aesthetic compromises — the populist-poster system loses one of its three voices when forced into pure Chinese. Mixed-content decks (English-led with Chinese accents, or vice versa) are the strongest fit for this template.\n\n## Iteration Guide\n\n1. The stacked shadow is a hard invariant — any new display element in orange or cream must carry it. Determine the offset by dividing the font size by approximately 20 to get the first shadow distance, double it for the second.\n2. Any new slide with a blue background gets an inset frame (6px cream, `inset: 48px`) and, if it has a header bar, that bar uses the topbar pattern with a 6px cream bottom border.\n3. New columns or side-by-side panels follow the 6px ink separator convention. Asymmetric layouts (e.g. 60/40 split) are fine as long as the separator border remains 6px.\n4. New KPI or data cards use the `{components.kpi-card}` pattern: 5px ink border, paper background, optional alt variant in blue. The number inside uses Alfa Slab One with the standard text-shadow.\n5. New list items always use the diamond bullet (24px × 24px, 4px radius, rotate 45deg). Use red for ink-background items, orange for blue-background items.\n6. If a new decorative stamp or badge is needed, use Alfa Slab One with `letter-spacing: 0.04em`, a box-shadow of `6px 6px 0 {colors.red}`, and a slight rotation (–3 to –9deg). Circular stamps get 50% border-radius; rectangular ones stay square.\n7. The grain overlay is a CSS pseudo-element on the `section` element — it must be present on every new slide via the `.grain` class.\n8. Script (Caveat Brush) text is an interrupt, not a default. Use it once per slide maximum, and only at 64px+.\n\n## Known Gaps\n\n- `deck-stage.js` is an external script dependency not documented here. Slide navigation and scaling are handled by it entirely.\n- The orange ribbon on data slides is implemented with static repeated text — there is no JavaScript marquee animation. At 1920px width, the text wraps naturally; for longer strings, manually duplicate the text.\n- The grain overlay uses `mix-blend-mode: multiply`. This requires a semi-transparent background or a parent with a visible fill to produce the texture effect — on pure white or pure black surfaces the effect may be invisible.\n- Speaker notes are embedded as a `<script type=\"application/json\">` block in the template — this data is presentational, not part of the design system, and is not captured in these tokens.\n- Archivo Narrow is loaded as a web font. It has broad system fallback (`system-ui, sans-serif`) but the condensed width of the system font stack fallback will differ significantly from Archivo Narrow and may break layouts at tight grid configurations.\n- The `text-wrap: pretty` property on quote text is a modern CSS feature with limited browser support — it may not apply in older export environments.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/peoples-platform/preview.md":"# People's Platform (Block & Bold) Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/peoples-platform/design.md`\n- Preview card: `bold-template-pack/templates/peoples-platform/preview.md`\n\n## Selection Metadata\n\n- Slug: `peoples-platform`\n- Tagline: Activist poster energy: blue, orange, red on cream, with Alfa Slab + Caveat Brush.\n- Mood: activist, loud, graphic, honest\n- Tone: punchy, direct, expressive, warm-bold\n- Formality: medium-low\n- Density: medium-high\n- Scheme: light\n- Best for: Anything that should feel honest, loud, and graphic: cultural commentary, manifestos, civic and community decks, design talks, campaign pitches. Excellent for founder-vision moments, mission statements, or any deck — including across industries — that wants protest-poster energy instead of corporate polish.\n- Avoid for: Contexts where institutional restraint is the actual goal — the saturated political-poster palette commits hard to expressive energy.\n\n## Visual Snapshot\n\nA WPA-poster-meets-political-campaign presentation system built on three typefaces and a five-color palette that reduces to three functional roles. Alfa Slab One — a compressed slab serif — does all the heavy lifting at extreme sizes in pure uppercase. Caveat Brush drops in as a handwritten human interrupt: lowercase, slightly rotated, emotionally warm. DM Mono carries all metadata at tight uppercase tracking. The palette is electric cobalt blue, amber orange, and hot red — with red functioning exclusively as a shadow/depth color, never as a surface fill. Every slide gets a paper grain overlay that makes the whole deck feel screen-printed. The aesthetic is loud, confident, and populist — the kind of visual language that belongs on a protest placard, a union newsletter, or a campaign bus.\n\nPeople's Platform is a WPA-poster-meets-political-campaign slide system — the visual language of conviction, the graphic register of public address. The canvas is warm paper ({colors.paper} — #F5F2EA), a hair warmer than white, and every slide gets a grain texture applied via a CSS pseudo-element that makes the whole deck feel screen-printed rather than rendered.\n\n## Preview Ingredients\n\n- Palette: blue #2C2CDC; blue-deep #1B1BB0; orange #F2A03A; orange-deep #E89321; red #E83A2A; red-deep #B7281C; cream #F4E9D6; paper #F5F2EA\n- Typography: Alfa Slab One; Caveat Brush; Archivo Narrow; DM Mono\n- Signature move: Paper canvas ({colors.paper} — #F5F2EA) with grain overlay via CSS pseudo-element on every slide.\n- Signature move: Stacked double text-shadow: Npx Npx 0 {colors.red}, 2Npx 2Npx 0 {colors.red-deep}. Shadow size scales with font size.\n- Signature move: Alfa Slab One for all display and structural type — uppercase, line-height 0.82–1.04, letter-spacing 0.005em.\n- Signature move: Red ({colors.red}) functions exclusively as a shadow color — never a surface background.\n- Signature move: Heavy 6px ink borders for all major structural divisions (topbars, section headers, column separators, inset frames).\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pin-and-paper/design.md":"---\nversion: alpha\nname: Pin & Paper\ndescription: A field-notebook editorial system rendered as yellow legal-pad paper with deep cobalt-blue ink. Every slide carries a fractalnoise paper-grain overlay, hand-drawn safety-pin SVG illustrations that \"pin\" cards to the page, and a hand-script Caveat face for personal annotations. Space Grotesk at heavy weights carries the printed headlines; DM Mono handles archival labels. The aesthetic borrows from analog field reports, vintage public-notice boards, and the diary pages of scientific notebooks — closer to a lab journal pinned to a corkboard than a polished deck.\n\ncolors:\n  paper: \"#EFE56A\"\n  paper-2: \"#F5ECA0\"\n  paper-3: \"#E8D85A\"\n  paper-extra: \"#FBE6A4\"\n  cream: \"#F8F1D6\"\n  kraft: \"#C9A66B\"\n  ink: \"#1F3A8A\"\n  ink-soft: \"#2D4FB8\"\n  ink-line: \"#3457C4\"\n  ink-deep: \"#0E1430\"\n  red: \"#C2342B\"\n  olive: \"#6B7A2E\"\n  orange: \"#D8702A\"\n\ncolor-aliases:\n  c-bg: paper\n  c-text: ink\n  c-card: cream\n  c-stamp: red\n\ntypography:\n  display-mega:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 196px\n    fontWeight: 700\n    lineHeight: 1.08\n    letterSpacing: -0.04em\n  display-section:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 168px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.04em\n  display-stat:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 168px\n    fontWeight: 700\n    lineHeight: 0.85\n    letterSpacing: -0.04em\n  h1-cta:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 130px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.035em\n  h1-chart:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 110px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.035em\n  h2:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 96px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.03em\n  h2-md:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 84px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.03em\n  h2-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 50px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.02em\n  quote-text:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 50px\n    fontWeight: 500\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  card-row:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 44px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  card-h3:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 38px\n    fontWeight: 700\n    lineHeight: 1.02\n    letterSpacing: -0.02em\n  card-h3-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 28px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.015em\n  body:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 22px\n    fontWeight: 400\n    lineHeight: 1.45\n  body-md:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 21px\n    fontWeight: 400\n    lineHeight: 1.35\n  body-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 19px\n    fontWeight: 400\n    lineHeight: 1.45\n  body-list:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 18px\n    fontWeight: 400\n    lineHeight: 1.4\n  scribble-mega:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 360px\n    fontWeight: 700\n    lineHeight: 0.8\n  scribble-lg:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 70px\n    fontWeight: 700\n    lineHeight: 0.9\n  scribble-md:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 60px\n    fontWeight: 700\n    lineHeight: 0.9\n  scribble-sm:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 38px\n    fontWeight: 600\n    lineHeight: 1.05\n  scribble-xs:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 32px\n    fontWeight: 600\n    lineHeight: 1.05\n  label-top:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 18px\n    fontWeight: 500\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  label-meta:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 16px\n    fontWeight: 500\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-footer:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 15px\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  stamp:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 16px\n    fontWeight: 500\n    letterSpacing: 0.18em\n    textTransform: uppercase\n\nspacing:\n  pad-edge: 64px\n  pad-top: 110px\n  pad-bottom: 90px\n  card-pad-md: \"28px 28px 24px\"\n  card-pad-lg: \"32px 22px 22px\"\n  card-pad-xl: \"36px 28px 28px\"\n  card-pad-quote: \"60px 80px\"\n  grid-gap-sm: 22px\n  grid-gap-md: 28px\n  grid-gap-lg: 32px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  paper-surface:\n    background: \"radial-gradient(120% 90% at 20% 10%, rgba(255,255,255,.18), transparent 60%), radial-gradient(140% 100% at 80% 95%, rgba(0,0,0,.05), transparent 55%), {colors.paper}\"\n    description: \"Default slide surface — yellow paper with a soft upper-left highlight gradient and a soft lower-right shadow gradient layered over the base paper color.\"\n  paper-grain-overlay:\n    selector: \".slide::before\"\n    background: \"fractalNoise SVG via data URI, baseFrequency=1.4, octaves=2\"\n    opacity: 0.35\n    mixBlendMode: multiply\n    description: \"Non-optional fractal-noise paper grain overlay on every slide. Lives on the ::before pseudo-element; opacity 0.35, multiply blend. On ink slides, opacity drops to 0.25 with screen blend.\"\n  pinned-card:\n    background: \"{colors.cream}\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: 4px\n    boxShadow: \"5px 6px 0 0 {colors.ink}\"\n    padding: \"{spacing.card-pad-md}\"\n    description: \"Cream paper card with a 1.5px ink border, 4px micro-radius, and a hard 5px-6px ink-blue offset shadow. The system's universal card pattern — every card looks like a piece of paper pinned to the surface.\"\n  pinned-card-alt:\n    background: \"{colors.paper-2}\"\n    description: \"Card variant using the lighter paper-2 tone. Used to break up adjacent same-tone cards.\"\n  pinned-card-alt2:\n    background: \"{colors.paper-extra}\"\n    transform: \"rotate(0.6deg)\"\n    description: \"Card variant with the deepest paper tone and a slight rotation (0.6 to 1.5 degrees) — gives the impression of being pinned slightly askew.\"\n  pin-illustration:\n    width: \"varies (110–640px)\"\n    color: \"currentColor\"\n    transform: \"rotate(-14deg to +20deg)\"\n    description: \"Hand-drawn safety-pin SVG illustration in ink-blue or paper (when on ink surface). Multiple variants: closed pin (#pin), open pin (#pin-open). Always rotated slightly off-axis. Acts as both decoration and the visual signal that a card is 'pinned' to the page.\"\n  scribble:\n    fontFamily: \"Caveat, cursive\"\n    color: \"{colors.ink}\"\n    lineHeight: 1.05\n    description: \"Caveat hand-script face used for handwritten notes, marginalia, and 'me' voice annotations. May be rotated slightly (-3 to -1.5 degrees) and underlined via 2px solid ink for emphasis.\"\n  stamp:\n    border: \"3px solid {colors.red}\"\n    color: \"{colors.red}\"\n    padding: \"6px 16px\"\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.18em\n    textTransform: uppercase\n    transform: \"rotate(-4deg)\"\n    description: \"Cinnabar-red rubber stamp — 3px solid red border, red mono text, rotated -4 degrees. Used for status marks like CONFIDENTIAL or RECEIVED.\"\n  top-chrome:\n    position: \"absolute; top: 44px; left: 64px; right: 64px\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 18px\n    fontWeight: 500\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    description: \"Top metadata band — brand lockup on left (with inline #mark SVG glyph), meta tags on right. Mono uppercase, line-height 1.\"\n  footer-chrome:\n    position: \"absolute; left: 64px; right: 64px; bottom: 36px\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 15px\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    opacity: 0.65\n    description: \"Bottom metadata band — typically left-source + right-page-position pair at 65% opacity.\"\n  pin-glyph-closed:\n    svgId: \"#pin\"\n    viewBox: \"0 0 360 110\"\n    description: \"Closed safety-pin SVG glyph — coiled spring on the right, shaft sweeping left, oval clasp cap on the left.\"\n  pin-glyph-open:\n    svgId: \"#pin-open\"\n    viewBox: \"0 0 360 130\"\n    description: \"Open safety-pin SVG glyph — clasp lifted, sharp point exposed pointing left.\"\n  mark-glyph:\n    svgId: \"#mark\"\n    viewBox: \"0 0 32 16\"\n    description: \"Small inline mark glyph for the top-chrome brand lockup — circle on the right, arrow shaft pointing left.\"\n  table-cell:\n    padding: \"18px 22px\"\n    borderBottom: \"1.5px solid rgba(31,58,138,.5)\"\n    borderRight: \"1.5px solid rgba(31,58,138,.5)\"\n    fontSize: 21px\n    lineHeight: 1.35\n    description: \"Comparison table cell with semi-transparent ink-blue dividers. Sits inside the same cream + ink-border + offset-shadow card pattern.\"\n  pill-yes:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: 999px\n    padding: \"4px 14px\"\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 28px\n    fontWeight: 600\n    description: \"Affirmative pill — solid ink fill with paper text, rounded 999px, Caveat script face. Unusual treatment: handwritten letterforms inside a UI pill shape.\"\n  pill-no:\n    background: transparent\n    color: \"{colors.red}\"\n    border: \"1.5px solid {colors.red}\"\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    description: \"Negative pill — red mono uppercase text in a red-bordered transparent pill. The only place red appears in regular use (outside the stamp component).\"\n  pill-part:\n    background: \"{colors.paper-2}\"\n    color: \"{colors.ink}\"\n    fontFamily: \"Caveat, cursive\"\n    description: \"Partial-state pill — light paper fill with Caveat script ink text.\"\n  number-script:\n    fontFamily: \"Caveat, cursive\"\n    fontWeight: 700\n    fontSize: \"60–70px\"\n    color: \"{colors.ink}\"\n    description: \"Hand-script numeral used as step numbers in process diagrams and ordered CTA steps. The script face makes ordering feel hand-counted, not algorithmic.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPin & Paper is a **field-notebook editorial system** built on a single material premise: every slide is yellow legal-pad paper. The paper is rendered through a base color (`{colors.paper}` — saturated cadmium yellow), two soft radial-gradient highlights (upper-left light, lower-right shadow), and a non-optional fractal-noise grain overlay on a `::before` pseudo-element with multiply blend. This stack creates a surface that reads as physical paper under raking light. Without the grain, the system collapses into flat cartoon-yellow; the texture is foundational, not decorative.\n\nThe typeface stack is a deliberate three-voice editorial pairing. **Space Grotesk** at weight 600–700 carries every printed headline and display moment — its tight geometric character at heavy weights reads as a poster or notice-board printout. **Caveat** (a hand-script face) carries every handwritten moment: marginalia, \"me\" voice annotations, step numerals, pill labels, oversized script ordinals. Caveat is the system's personal-voice mechanism — wherever script appears, the tone shifts from \"official notice\" to \"handwritten note in the margin.\" **DM Mono** at weight 500 carries every archival metadata tag: top-chrome brand lockup, footer meta, source attribution, axis labels. The three voices — print headline, handwritten note, archival catalog tag — are non-overlapping, and the system's editorial rhythm depends on them staying in their lanes.\n\nThe palette is anchored to a yellow-and-blue complementary pair. **Paper yellow** (`{colors.paper}` and its three close variants) is every surface. **Ink blue** (`{colors.ink}` — a deep cobalt #1F3A8A) is every text moment, every border, every divider, every pin illustration. **Cream** (`{colors.cream}`) is the card background — a calmer off-white-ivory tone that lets cards visually recede from the loud yellow page. **Cinnabar red** (`{colors.red}` — #C2342B) is used in two specific roles only: the rotated rubber-stamp component and the negative-state pill. Red is never used as text, fill, or border outside these two roles. Tertiary colors (olive, orange, kraft) exist in the token list but are not actively deployed in the source.\n\nDepth is created through a single signature mechanism: **the hard offset shadow**. Every card carries a `5px 6px 0 0 {colors.ink}` (or `4px 5px 0 0`, or `8px 9px 0 0` for the largest quote panel) — a solid ink-blue rectangle offset down and to the right with zero blur. This shadow plus the 4px micro-radius corner plus the 1.5px ink border defines the universal card pattern. Cards look pinned and slightly lifted from the page; the hard offset is the system's only depth language.\n\n**Density philosophy: medium-dense, populated.** Pin & Paper reads as authoritative when its cards are pinned across the page in a clear arrangement — typically 3 to 6 cards per slide, each carrying a heading, a body block, and often a handwritten marginal annotation. A slide with one centered headline and otherwise empty space reads as broken — the system was designed as a populated field-notebook page, and a notebook page that's mostly blank reads as incomplete. Cards should be filled; pins should appear; the handwritten layer should add a marginal note in at least half the slides. The exception is the cover and section-divider slides, which are sparser by convention but compensate with oversized display type (196px) and large pin illustrations.\n\n**Key Characteristics:**\n- Yellow paper background (`{components.paper-surface}`) with two layered radial gradients and a non-optional fractal-noise grain overlay (`{components.paper-grain-overlay}`) on every slide.\n- Deep cobalt-blue ink (`{colors.ink}`) as the universal text, border, divider, and pin-illustration color.\n- Cream card surfaces (`{colors.cream}`) with 1.5px ink borders, 4px micro-radius, and **a hard ink-blue offset shadow** (5px–6px, zero blur).\n- Hand-drawn safety-pin SVG illustrations (`{components.pin-illustration}`) — closed and open variants — pinned to cards at slight rotation angles.\n- Three-voice typography: Space Grotesk for print headlines, Caveat hand-script for personal voice, DM Mono for archival labels.\n- A signature cinnabar-red rotated rubber stamp (`{components.stamp}`) for status marks (CONFIDENTIAL, RECEIVED, etc.).\n- 4px micro-radius on every card; pills go full 999px.\n- Slight panel rotation (0.6 to 1.5 degrees) on alternating cards for the \"pinned-askew\" effect.\n\n## Colors\n\n### Palette\n\n- **Paper Yellow** (`{colors.paper}` — #EFE56A): The dominant surface color. Saturated cadmium yellow. Combined with the layered radial gradients and grain overlay, this is what makes the slide read as physical paper.\n- **Paper Light** (`{colors.paper-2}` — #F5ECA0): Lighter, less saturated yellow. Used as an alternate card fill to break adjacent same-tone cards.\n- **Paper Deep** (`{colors.paper-3}` — #E8D85A): Deeper, more saturated yellow. Used on the `.deep` slide variant for higher-contrast moments.\n- **Paper Extra** (`{colors.paper-extra}` — #FBE6A4): Warm yellow with a hint of cream, used as the most differentiated card variant — often paired with a slight rotation.\n- **Cream** (`{colors.cream}` — #F8F1D6): The card background. A soft off-white ivory that lets cards recede from the loud yellow page. Used on every standard card surface.\n- **Kraft** (`{colors.kraft}` — #C9A66B): A warm tan/kraft tone. Defined in the token system but not actively used in the source.\n- **Ink Blue** (`{colors.ink}` — #1F3A8A): Deep cobalt navy. The universal text, border, divider, pin illustration, and shadow color. The system's structural identity.\n- **Ink Soft** (`{colors.ink-soft}` — #2D4FB8): A slightly lighter cobalt variant; available but rarely used.\n- **Ink Line** (`{colors.ink-line}` — #3457C4): A slightly brighter cobalt for line decorations; rarely used.\n- **Ink Deep** (`{colors.ink-deep}` — #0E1430): Near-black with a slight blue cast. Used for the `.ink` slide variant background.\n- **Cinnabar Red** (`{colors.red}` — #C2342B): The stamp color and the negative-pill border/text color. Used only in two roles — never as a general accent.\n- **Olive** (`{colors.olive}`) and **Orange** (`{colors.orange}`): Defined but inactive. Available as reserved tertiary tones.\n\n### Defaults\n\n- **Default slide surface**: `{components.paper-surface}` — yellow paper with layered gradients. Always.\n- **Default surface grain**: `{components.paper-grain-overlay}` at opacity 0.35 with multiply blend. Non-optional.\n- **Default primary headline color**: `{colors.ink}` on yellow surfaces; `{colors.paper}` on ink surfaces.\n- **Default body text color**: `{colors.ink}` on yellow/cream; `{colors.paper}` on ink (with `opacity: 0.85` for muted lead).\n- **Default card surface**: `{colors.cream}`. Reach for `{colors.paper-2}` or `{colors.paper-extra}` to break up adjacent same-tone cards.\n- **Default border color**: `{colors.ink}` at 1.5px. Always.\n- **Default shadow**: `5px 6px 0 0 {colors.ink}` (hard offset, zero blur). Smaller cards may use `4px 5px 0 0`; the largest quote panel uses `8px 9px 0 0`.\n- **Default label / metadata color**: `{colors.ink}` at opacity 0.65–0.75 for chrome and footer.\n- **Default scribble / handwritten color**: `{colors.ink}`. Caveat is always ink-blue on yellow.\n- **Default stamp color**: `{colors.red}` — the only routine use of red.\n\nCream is the card fill; yellow is the page fill. Mixing these breaks the visual hierarchy: a yellow card on a yellow page disappears; a cream card on a cream page collapses the layered-paper reading.\n\n## Typography\n\n### Font Family\n\nThe system loads three web fonts: **Space Grotesk** (weights 400, 500, 600, 700) carries all printed display and body type; **Caveat** (weights 500, 600, 700) carries all handwritten / personal-voice moments; **DM Mono** (weights 400, 500) carries all archival metadata.\n\nThe emotional register of each face is distinct and load-bearing:\n- Space Grotesk reads as **printed, official, typeset** — the voice of the document itself.\n- Caveat reads as **handwritten, personal, a note in the margin** — the voice of the person reading the document.\n- DM Mono reads as **archival, catalog-card, indexical** — the voice of the system filing the document.\n\nA key inline mixing rule: **a `<small>` element nested inside a Caveat number switches to a smaller Caveat at 60px** for unit suffixes (like `M`, `×`, `%`). The handwritten suffix preserves the hand-counted feeling of the parent numeral.\n\nA second inline mixing rule: **a `.underline` span inside Caveat scribble text gets a 2px solid ink-blue underline** — used to mimic an underline drawn by hand for emphasis.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.scribble-mega}` | 360px | Caveat | 700 | Decorative oversized quote-mark glyph |\n| `{typography.display-mega}` | 196px | Space Grotesk | 700 | Cover headline |\n| `{typography.display-section}` | 168px | Space Grotesk | 700 | Section-divider headline (on ink slide) |\n| `{typography.display-stat}` | 168px | Space Grotesk | 700 | Hero stat figure |\n| `{typography.h1-cta}` | 130px | Space Grotesk | 700 | Closing CTA headline |\n| `{typography.h1-chart}` | 110px | Space Grotesk | 700 | Chart-slide headline |\n| `{typography.h2}` | 96px | Space Grotesk | 700 | Standard agenda or stats headline |\n| `{typography.h2-md}` | 84px | Space Grotesk | 700 | Section heading inside dense slides |\n| `{typography.scribble-lg}` | 70px | Caveat | 700 | Process step numerals |\n| `{typography.scribble-md}` | 60px | Caveat | 700 | CTA step numerals, large script accents |\n| `{typography.quote-text}` | 50px | Space Grotesk | 500 | Pull-quote body |\n| `{typography.h2-sm}` | 50px | Space Grotesk | 700 | Notice-slide headline |\n| `{typography.card-row}` | 44px | Space Grotesk | 600 | Agenda row label |\n| `{typography.card-h3}` | 38px | Space Grotesk | 700 | Card title |\n| `{typography.scribble-sm}` | 38px | Caveat | 600 | Handwritten marginal note on cover, notice-card meta |\n| `{typography.scribble-xs}` | 32px | Caveat | 600 | Small in-card handwritten annotation |\n| `{typography.card-h3-sm}` | 28px | Space Grotesk | 700 | Sub-card heading |\n| `{typography.body}` | 22px | Space Grotesk | 400 | Standard body paragraph |\n| `{typography.body-md}` | 21px | Space Grotesk | 400 | Body inside tables |\n| `{typography.body-sm}` | 19px | Space Grotesk | 400 | Compact body inside dense cards |\n| `{typography.body-list}` | 18px | Space Grotesk | 400 | List item inside a card |\n| `{typography.label-top}` | 18px | DM Mono | 500 | Top-chrome brand lockup and meta |\n| `{typography.label-meta}` | 16px | DM Mono | 500 | Date strip, attribution |\n| `{typography.stamp}` | 16px | DM Mono | 500 | Stamp text |\n| `{typography.label-footer}` | 15px | DM Mono | 500 | Footer chrome |\n\n### Defaults\n\n- **Default primary content headline**: `{typography.h2}` (96px Space Grotesk 700).\n- **Default cover / opening headline**: `{typography.display-mega}` (196px).\n- **Default section-break headline**: `{typography.display-section}` (168px), used on the ink-blue slide variant.\n- **Default body paragraph size**: `{typography.body}` (22px). For dense multi-card slides, drop to `{typography.body-sm}` (19px).\n- **Default card heading**: `{typography.card-h3}` (38px) for standard cards; `{typography.card-h3-sm}` (28px) for sub-cards.\n- **Default stat figure**: `{typography.display-stat}` (168px) — with a Caveat `<small>` suffix for unit (M, %, ×).\n- **Default label / chrome size**: `{typography.label-top}` (18px) for the top chrome; `{typography.label-footer}` (15px) for the bottom.\n- **Default handwritten annotation size**: `{typography.scribble-sm}` (38px) for marginal notes; `{typography.scribble-lg}` (70px) for step numerals.\n- **Default weight for any display element**: 700.\n- **Default weight for body**: 400.\n\nWhen unsure, the canonical card composition is: a 38px Space Grotesk card heading + a 22px Space Grotesk body paragraph + a 32px Caveat handwritten note at the bottom. That three-layer typography rhythm (print headline, print body, handwritten margin note) is the system's most recognizable internal pattern.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every slide carries the paper-grain overlay (`{components.paper-grain-overlay}`).** Without it, the paper aesthetic collapses. The grain is part of the surface, not a decorative flourish.\n- **Every card carries a 1.5px solid ink border, 4px border-radius, AND a hard ink-blue offset shadow (5–8px offset, zero blur).** All three together — missing the shadow makes the card feel un-pinned; missing the border makes it feel un-printed.\n- **Caveat is always ink-blue** (`{colors.ink}`) on yellow/cream surfaces, and always paper-yellow on ink surfaces. Caveat in any other color does not exist.\n- **Pin illustrations (`{components.pin-illustration}`) are always rotated off-axis** (typical range: -14° to +20°). A pin rendered at 0° rotation breaks the hand-pinned aesthetic.\n- **The stamp component (`{components.stamp}`) is always rotated -4°** with a 3px solid red border, red mono text, and zero radius. Stamp text is always DM Mono uppercase.\n- **Every Space Grotesk display headline uses negative letter-spacing** in the -0.02 to -0.04em range. Tighter for larger sizes.\n- **Hand-script numerals (Caveat at 60–70px) are the only step-numbering mechanism** in process diagrams and ordered CTA lists. Don't substitute Space Grotesk numerals.\n- **The top-chrome lockup includes the inline `#mark` SVG glyph** alongside the brand text. The glyph is part of the brand identity, not optional.\n\n### Typography Principles\n\nThe rhythm of Pin & Paper is **printed headline + printed body + handwritten margin note + mono archival tag** — four voices, each in its assigned face. Switching any voice (e.g., setting a marginal note in Space Grotesk, or a body paragraph in Caveat) collapses the system's editorial register.\n\nItalic letterforms are not used. Underline is used only on `.underline` spans inside Caveat scribble text (2px solid ink). Bold inside body is rare; emphasis is achieved either by switching to a heavier Space Grotesk weight at a larger size, or by adding a Caveat handwritten annotation below.\n\n## Layout\n\n### Canvas System\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component. All sizes are pixel-fixed; the stage handles proportional scaling to the browser viewport.\n\nMost slides use **absolute positioning** with edge-anchored elements (`left: 64px`, `right: 64px`, `top: 110px`, `bottom: 100px`) for the content stage, plus targeted grid layouts for card rows. Pin illustrations are absolutely-positioned overlays on top of card stacks.\n\n### Padding and Anchoring\n\n| Anchor | Value | Use |\n|---|---|---|\n| `pad-edge` | 64px | Left and right edge insets on every slide |\n| `pad-top` | 110px | Top inset for content (below the 44px top chrome) |\n| `pad-bottom` | 90px | Bottom inset for content (above the 36px footer chrome) |\n| `grid-gap-sm` | 22px | Process card gap |\n| `grid-gap-md` | 28px | Notice / stats card gap |\n| `grid-gap-lg` | 32px | Notecard grid gap |\n\nCards typically use `28px–36px` internal padding on the top and `22px–28px` on the sides, with `22px–28px` on the bottom.\n\n### Chrome Frame\n\nEvery slide carries a **top chrome band** at 44px top / 64px sides — a brand lockup on the left (with inline #mark SVG glyph) and a meta-tag pair on the right. The chrome is DM Mono uppercase at 18px with 0.12em tracking.\n\nEvery slide also carries a **footer chrome** at 36px bottom / 64px sides — typically a source attribution on the left and a page-position marker on the right. The footer is DM Mono uppercase at 15px with 0.14em tracking at 65% opacity.\n\nOn ink-blue slides, both chromes flip color to `{colors.paper}` and the grain overlay shifts to opacity 0.25 with screen blend mode.\n\n## Depth and Elevation\n\n### Hard Offset Shadow (Primary Depth)\n\nThe system's only depth treatment is the **hard ink-blue offset shadow** on every card: `5px 6px 0 0 {colors.ink}` (standard), `4px 5px 0 0` (compact), `6px 7px 0 0 rgba(239,229,106,.25)` (chart-card with yellow-tinted shadow), or `8px 9px 0 0` (the largest quote panel). The shadow is always solid, always offset down-right, always zero blur. There are no blurred drop shadows anywhere in the system.\n\n### Paper Texture Depth\n\nThe fractal-noise grain (`{components.paper-grain-overlay}`) at opacity 0.35 with multiply blend adds a subtle perceived depth — the texture creates micro-variation that reads as paper fiber. This is depth at the surface level, not at the element level.\n\n### Pin Illustrations as Depth Signal\n\nThe hand-drawn safety-pin SVGs positioned at the top edge of cards (typically `position: absolute; top: -14 to -22px; left: 28–90px; transform: rotate(-6 to -12deg)`) create the visual illusion that the card has been pinned to the page. The pin is the depth narrative: a pin appearing at the top of a card explains why the card has a shadow and a rotation.\n\n### Slight Rotation on Alternate Cards\n\nSome card variants (`{components.pinned-card-alt2}`) carry a slight rotation (`transform: rotate(0.6deg)` to `rotate(1.5deg)`) that reads as a sheet of paper pinned slightly askew. This is a deliberate imperfection — used sparingly (one or two cards per slide), not on every card.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Stamp, pin glyphs, page numbers |\n| 4px | Cards, panels, table containers, image wrappers — the system's micro-radius |\n| 999px | Pills only |\n\nThe system uses a **4px micro-radius** on every card — small enough to read as \"printed corner with slight bleed\" rather than rounded UI. Pills are the only round shape; pills with the unusual treatment of Caveat handwritten letterforms inside.\n\n### Border Weights\n\n- **1.5px solid `{colors.ink}`** — the universal card border. Used on every cream card, every table container, every panel.\n- **1.5px dashed rgba(31,58,138,.45)** — used as a dotted separator between agenda rows, between CTA steps, and at the top of source notes inside cards. Adds the \"graph-paper line break\" feel.\n- **3px solid `{colors.red}`** — used only on the stamp component (`{components.stamp}`).\n- **2px solid `{colors.ink}`** — used only on the Caveat `.underline` span treatment.\n\n### Decorative Element Types\n\n**Pin illustration (`{components.pin-illustration}`)** — The defining visual signature. A hand-drawn safety-pin SVG (two variants: closed and open) rendered in `currentColor` and rotated at a slight angle. Pins appear at the top of cards, as decorative overlays on the cover, as oversized accent illustrations on section dividers (up to 640px wide), and pinned to agenda rows. The pin is the system's voice — wherever a pin appears, the page reads as a pinned document.\n\n**Stamp (`{components.stamp}`)** — A cinnabar-red rotated rubber-stamp tag with 3px solid red border, red mono uppercase text, and -4° rotation. Used for status marks (CONFIDENTIAL, RECEIVED). The stamp is one of the two roles where red is used in this system.\n\n**Scribble (`{components.scribble}`)** — A Caveat hand-script text block, often rotated -1.5° to -3° for the \"handwritten\" feel. Used for marginal notes, \"me\" voice annotations, large script accents. May include `.underline` spans for handwritten emphasis.\n\n**Pinned card (`{components.pinned-card}`)** — The universal card pattern: cream fill, 1.5px ink border, 4px micro-radius, 5–6px hard ink offset shadow. Often carries a pin illustration overlapping its top edge. Three alternate fill colors break up adjacent same-tone cards.\n\n**Top chrome lockup** — The brand text accompanied by an inline #mark SVG glyph (a circle on the right with an arrow shaft pointing left). The glyph is part of the brand's identity.\n\n**Dashed border separators** — Used as inter-row dividers in agenda lists, CTA step lists, and inside cards as source-attribution separators. Always `1.5px dashed rgba(31,58,138,.45)`.\n\n**Caveat pills (`{components.pill-yes}`, `{components.pill-part}`)** — Pills with hand-script letterforms inside (Caveat 28px) on solid or paper-tone fills. The mismatch between rounded UI shape and handwritten text is intentional.\n\n**Process / CTA script numerals** — Caveat 60–70px ordinals inside cards or list rows. The hand-script number signals \"step counted by hand, not by an algorithm.\"\n\n**Oversized script quote-mark** — A Caveat at 360px rendered as the opening glyph on the quote slide. The script size pushes into the realm of decoration; the glyph is so large that it functions as composition, not punctuation.\n\n## Do's and Don'ts\n\n### Do\n- Apply the paper-grain overlay (`{components.paper-grain-overlay}`) to every slide. The texture is foundational to the paper reading.\n- Set every card with the universal pattern: 1.5px ink border + 4px radius + hard ink offset shadow. The three together define the card.\n- Use Space Grotesk weight 700 in mixed case (with negative letter-spacing) for every printed headline.\n- Use Caveat for every handwritten or personal-voice moment — marginal notes, step numerals, pill text. The script is the system's \"me\" voice.\n- Use DM Mono uppercase at 0.12–0.18em tracking for every archival tag, chrome label, and footer string.\n- Rotate every pin illustration off-axis (typical range -14° to +20°). A pin at 0° rotation breaks the hand-pinned aesthetic.\n- Populate cards. The system reads as authoritative when 3–6 cards are pinned across the page, each with heading + body + marginal note.\n- Use the rotated stamp component (`{components.stamp}`) for status marks. The -4° rotation is its identity.\n- Pair a Caveat step numeral with a Space Grotesk card heading inside process and CTA lists. The script numeral is the system's ordering voice.\n- Use a slight rotation (0.6° to 1.5°) on one card per slide for the \"pinned-askew\" effect. Don't rotate every card.\n\n### Don't\n- Don't omit the paper-grain overlay. Without it, the surface collapses into flat cartoon-yellow.\n- Don't substitute a different list marker for the Caveat hand-script numeral. Step numbers are always hand-script.\n- Don't use red outside the stamp and the negative pill. Red is a two-role accent only.\n- Don't render pin illustrations at 0° rotation. The off-axis tilt is what makes them read as physical pins.\n- Don't use blurred shadows. Cards use hard ink-blue offset shadows only.\n- Don't fill a card with yellow on the yellow page surface. Cards are cream; the contrast between cream cards and yellow page is the layered-paper signal.\n- Don't put body copy in Caveat. The hand-script is for marginal notes and accents, never paragraphs.\n- Don't put headline copy in DM Mono. Mono is the archival voice, not the editorial voice.\n- Don't use radius larger than 4px on cards. The micro-radius is the printed-corner signal; larger radius collapses into generic UI.\n- Don't compose a near-empty slide. The system was designed as a populated notebook page; sparseness reads as broken.\n\n## Responsive Behavior\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component (loaded via `deck-stage.js`). The stage handles proportional scaling to the browser viewport — all pixel-fixed sizes inside the canvas scale uniformly.\n\n### Presenter Behavior\n- The `<deck-stage>` component manages navigation, scaling, and presenter chrome.\n- Keyboard, touch, and mouse-wheel navigation are handled by the stage component.\n- The slide canvas is constant 1920×1080 regardless of viewport size.\n\n### Print Behavior\nPrint export depends on the deck-stage component's print handling. The fractal-noise grain overlay may not render in all PDF exports — test before assuming texture transfers.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / headline (Space Grotesk 700) | Space Grotesk | 龙藏体 Long Cang | 400 (only weight available) |\n| Body (Space Grotesk 400) | Space Grotesk | 霞鹜文楷 LXGW WenKai | 400 |\n| Handwritten / scribble (Caveat) | Caveat | 龙藏体 Long Cang | 400 |\n| Label / mono (DM Mono UPPERCASE tracked) | DM Mono | 霞鹜文楷 LXGW WenKai | 400 (do not force monospace on CJK) |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. Space Grotesk display tokens become `\"Space Grotesk, Long Cang, Helvetica Neue, Arial, sans-serif\"`; Space Grotesk body tokens become `\"Space Grotesk, LXGW WenKai, Helvetica Neue, Arial, sans-serif\"`; Caveat tokens become `\"Caveat, Long Cang, cursive\"`. Latin glyphs render in the original face; CJK falls through automatically.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Caveat:wght@500;600;700&family=DM+Mono:wght@400;500&family=Long+Cang&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-lxgw-wen-kai-regular/font.css\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPin & Paper is the strongest fit for Chinese in this entire library. The yellow legal-pad surface, the cobalt ink, the safety-pin illustrations, and the field-notebook register all translate naturally into Chinese — the system reads as a 笔记本 / 手账 page in either script.\n\n**龙藏体 Long Cang** is a hard-pen handwritten Chinese face — the brushless, ballpoint-on-paper equivalent of Chinese handwriting. It is the perfect Chinese substitute for the Space Grotesk + Caveat dual-role headline-and-scribble voices in this system. Long Cang at large sizes (96–168px) reads as a confident handwritten field-note headline — exactly what Pin & Paper is trying to evoke. Use it for both display headlines and the Caveat-equivalent scribble layer. Layering two visually-distinct hand-script faces in pure Chinese is unnecessary; Long Cang carries both roles.\n\n**霞鹜文楷 LXGW WenKai** is a kaishu-derived body face designed for screen reading — it carries the warmth and slight irregularity of handwritten 楷书 but stays legible at body sizes (18–22px). It is the strongest counterweight to Long Cang's handwritten display and matches the system's \"field-notebook personal voice\" register exactly. Set every Chinese body paragraph in LXGW WenKai 400.\n\nThe pin illustrations, the rotated red stamp, the cream cards with hard ink offset shadows — all transfer unchanged. The Caveat pill component (handwritten letters inside a rounded pill) translates to Long Cang inside the same pill shape and reads as charmingly hand-counted in Chinese.\n\nThe system's most recognizable rhythm (printed headline + printed body + handwritten margin note) becomes (Long Cang headline + LXGW WenKai body + Long Cang margin note in a slightly different size). The voice distinction in pure Chinese comes from size, rotation, and color rather than from face swap — Long Cang at 38px rotated -3° in the margin reads clearly as \"marginal annotation\" against Long Cang at 96px upright in the headline.\n\nDM Mono uppercase tracked labels do not transfer to CJK. Chinese metadata in the top chrome should use LXGW WenKai 400 mixed case with letter-spacing 0. Pure Latin metadata (date strings, source URLs) stays in DM Mono.\n\n### Known CJK Gap\n\nLong Cang and LXGW WenKai are visually adjacent — both carry handwritten kaishu DNA. The three-voice editorial pairing (print / handwritten / archival) collapses into a two-voice pairing in pure Chinese (handwritten-display / handwritten-body / archival-Latin-only). This is not a bug — pure-Chinese decks in Pin & Paper read as more uniformly hand-touched than their Latin counterparts, which is actually closer to the field-notebook aesthetic the system aims for.\n\n## Iteration Guide\n\n1. Every new slide background is the paper-surface (`{components.paper-surface}`) with the grain overlay on `::before`. Don't skip the texture.\n2. Every new card uses the universal pattern: cream fill, 1.5px ink border, 4px radius, hard ink offset shadow. Don't customize.\n3. Every new headline is Space Grotesk weight 700 mixed case with negative letter-spacing. Don't reach for a different weight.\n4. Every new step numeral or ordered-list marker is Caveat hand-script at 60–70px. Don't substitute a numeric font.\n5. Every new label or metadata tag is DM Mono uppercase with 0.12–0.18em tracking.\n6. Every new pin illustration is rotated off-axis. Choose closed (#pin) for a \"secured\" feel; open (#pin-open) for a \"lifted\" feel.\n7. To add personal voice to a card, append a Caveat marginal note at the bottom — usually with a `.underline` span for handwritten emphasis.\n8. To mark a card with status, place the stamp component (`{components.stamp}`) at a slight rotation in the upper area of the card.\n9. To break up adjacent same-tone cards, alternate between cream, paper-2, and paper-extra fills. Add a slight rotation on one card for variety.\n10. To use the ink-blue surface variant (e.g., a section divider), flip text color to `{colors.paper}` and reduce grain opacity to 0.25 with screen blend mode.\n\n## Known Gaps\n\n- The system depends on a `<deck-stage>` web component loaded via `deck-stage.js`. Without it, the 1920×1080 canvas will not scale and slides will render at native pixel size.\n- The pin illustrations are embedded as inline SVG symbol definitions at the top of the document. New slides that need pin illustrations must reference them via `<use href=\"#pin\">` or `<use href=\"#pin-open\">` — and the symbol definitions must be present in the document.\n- The fractal-noise grain overlay uses a data-URI SVG with `feTurbulence`. Some browsers (especially older Safari versions) may render the noise inconsistently or skip it during PDF export.\n- The Caveat font carries hand-script ligatures and may render inconsistently between operating systems. Default fallback is `cursive` which varies wildly across systems.\n- The `kraft`, `olive`, and `orange` color tokens are defined but inactive in the source. They are reserved for future extension but have no current role.\n- The pill-yes component uses Caveat letterforms inside a rounded pill shape — this is intentionally unusual but may read as a UI bug to viewers unfamiliar with the system.\n- The paper-grain overlay uses `mix-blend-mode: multiply` on standard slides and `mix-blend-mode: screen` on ink slides. The blend mode flip is essential — using multiply on the dark ink slide turns the slide muddy.\n- The bar chart and line chart components use SVG with manually-positioned points. There is no data-binding layer.\n- The hand-drawn pin SVG is a fixed-path illustration. Re-coloring works via `currentColor`, but the pin proportions cannot be adjusted without editing the SVG path data.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pin-and-paper/preview.md":"# Pin & Paper Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/pin-and-paper/design.md`\n- Preview card: `bold-template-pack/templates/pin-and-paper/preview.md`\n\n## Selection Metadata\n\n- Slug: `pin-and-paper`\n- Tagline: Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture.\n- Mood: crafted, handmade, warm, thoughtful, literary\n- Tone: literary, intimate, warm, grounded\n- Formality: medium\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel hand-crafted, warm, and literary: qualitative research findings, founder reflections, longform brand stories, workshop debriefs. The signature safety-pin illustrations and paper-grain texture make it especially good for any deck — including tech or business — that wants personality and warmth over polish.\n- Avoid for: Decks that need to feel digital-native polished or rigorously data-driven — handwritten Caveat is intentionally informal.\n\n## Visual Snapshot\n\nA field-notebook editorial system rendered as yellow legal-pad paper with deep cobalt-blue ink. Every slide carries a fractalnoise paper-grain overlay, hand-drawn safety-pin SVG illustrations that \"pin\" cards to the page, and a hand-script Caveat face for personal annotations. Space Grotesk at heavy weights carries the printed headlines; DM Mono handles archival labels. The aesthetic borrows from analog field reports, vintage public-notice boards, and the diary pages of scientific notebooks — closer to a lab journal pinned to a corkboard than a polished deck.\n\nPin & Paper is a field-notebook editorial system built on a single material premise: every slide is yellow legal-pad paper. The paper is rendered through a base color ({colors.paper} — saturated cadmium yellow), two soft radial-gradient highlights (upper-left light, lower-right shadow), and a non-optional fractal-noise grain overlay on a ::before pseudo-element with multiply blend. This stack creates a surface that reads as physical paper under raking light. Without the grain, the system collapses into flat cartoon-yellow; the texture is foundational, not decorative.\n\n## Preview Ingredients\n\n- Palette: paper #EFE56A; paper-2 #F5ECA0; paper-3 #E8D85A; paper-extra #FBE6A4; cream #F8F1D6; kraft #C9A66B; ink #1F3A8A; ink-soft #2D4FB8\n- Typography: Space Grotesk; Caveat; DM Mono\n- Signature move: Yellow paper background ({components.paper-surface}) with two layered radial gradients and a non-optional fractal-noise grain overlay ({components.paper-grain-overlay}) on every slide.\n- Signature move: Deep cobalt-blue ink ({colors.ink}) as the universal text, border, divider, and pin-illustration color.\n- Signature move: Cream card surfaces ({colors.cream}) with 1.5px ink borders, 4px micro-radius, and a hard ink-blue offset shadow (5px–6px, zero blur).\n- Signature move: Hand-drawn safety-pin SVG illustrations ({components.pin-illustration}) — closed and open variants — pinned to cards at slight rotation angles.\n- Signature move: Three-voice typography: Space Grotesk for print headlines, Caveat hand-script for personal voice, DM Mono for archival labels.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pink-script/design.md":"---\nversion: alpha\nname: Pink Script (After Hours)\ndescription: A nocturnal couture editorial system rendered in hot fuchsia ink on dim warm-black paper, with a soft film-grain overlay and a hairline interior frame. DM Serif Display carries every script and editorial moment at sizes up to 600px; Inter at weight 300 carries the body voice; JetBrains Mono carries the boutique-catalog metadata. The aesthetic borrows from glossy fashion magazine spreads, late-night perfume advertising, and the editorial pages of high-end zines — closer to a Maison's seasonal lookbook than a startup deck.\n\ncolors:\n  ink-deep: \"#060507\"\n  ink-violet: \"#0F0D11\"\n  paper-blush: \"#F5EDF1\"\n  pink: \"#ED3D8C\"\n  pink-light: \"#FF66A8\"\n  pink-deep: \"#B81D67\"\n  line-pink: \"rgba(237, 61, 140, 0.32)\"\n  mute-paper: \"rgba(245, 237, 241, 0.55)\"\n  hair-paper: \"rgba(245, 237, 241, 0.14)\"\n\ncolor-aliases:\n  c-bg: ink-deep\n  c-fg: paper-blush\n  c-accent: pink\n  c-line: line-pink\n\ntypography:\n  script-huge:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 540px\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.01em\n    color: \"{colors.pink}\"\n  script-section:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 600px\n    fontWeight: 400\n    lineHeight: 0.82\n    letterSpacing: -0.02em\n    color: \"{colors.pink}\"\n  script-giant:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 360px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.pink}\"\n  script-cover:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 280px\n    fontWeight: 400\n    lineHeight: 1.02\n    letterSpacing: -0.015em\n    color: \"{colors.pink}\"\n  script-large:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 220px\n    fontWeight: 400\n    lineHeight: 1.04\n    color: \"{colors.pink}\"\n  script-med:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 156px\n    fontWeight: 400\n    lineHeight: 1.04\n    color: \"{colors.pink}\"\n  script-sm:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 132px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.pink}\"\n  serif-cta:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 1.04\n    letterSpacing: -0.015em\n    color: \"{colors.paper-blush}\"\n  serif-h2:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 132px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.paper-blush}\"\n  serif-quote:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 92px\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n    color: \"{colors.paper-blush}\"\n  serif-chart-h:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 90px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.paper-blush}\"\n  serif-section-h:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 88px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.paper-blush}\"\n  serif-stat:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 116px\n    fontWeight: 400\n    lineHeight: 0.9\n    color: \"{colors.pink}\"\n  serif-toc-num:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 64px\n    fontWeight: 400\n    lineHeight: 1.0\n    color: \"{colors.pink}\"\n  serif-toc-title:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 56px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.paper-blush}\"\n  serif-quote-attr:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 48px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.paper-blush}\"\n  serif-process-h:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 38px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.paper-blush}\"\n  serif-matrix-label:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 32px\n    fontWeight: 400\n    lineHeight: 1.2\n    color: \"{colors.paper-blush}\"\n  body:\n    fontFamily: \"Inter, system-ui, sans-serif\"\n    fontSize: 24px\n    fontWeight: 300\n    lineHeight: 1.55\n    color: \"{colors.paper-blush}\"\n  body-muted:\n    fontFamily: \"Inter, system-ui, sans-serif\"\n    fontSize: 22px\n    fontWeight: 300\n    lineHeight: 1.5\n    color: \"{colors.mute-paper}\"\n  body-toc-desc:\n    fontFamily: \"Inter, system-ui, sans-serif\"\n    fontSize: 24px\n    fontWeight: 300\n    lineHeight: 1.4\n    color: \"{colors.mute-paper}\"\n  mono-runner:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  mono-kicker:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 22px\n    fontWeight: 400\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.pink}\"\n  mono-label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 22px\n    fontWeight: 400\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.paper-blush}\"\n  mono-cover-pre:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 28px\n    fontWeight: 400\n    letterSpacing: 0.42em\n    textTransform: uppercase\n    color: \"{colors.paper-blush}\"\n  mono-pill:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    fontWeight: 400\n    letterSpacing: 0.08em\n    textTransform: uppercase\n\nspacing:\n  edge-x: 60px\n  edge-top-chrome: 60px\n  edge-bottom-chrome: 60px\n  content-top: 140px\n  content-bottom: 140px\n  inner-frame-inset: 36px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  slide-surface:\n    background: \"radial-gradient(ellipse 90% 70% at 30% 30%, #1A1218 0%, #0A0709 55%, #050306 100%)\"\n    description: \"Universal dark surface — radial ellipse from a slightly warmer #1A1218 in the upper-left fading to near-black in the lower-right. The off-center light source is part of the system's identity.\"\n  film-grain:\n    selector: \".slide::before\"\n    background: \"fractalNoise SVG via data URI, baseFrequency=0.9, octaves=2\"\n    opacity: 0.08\n    mixBlendMode: screen\n    description: \"Subtle film grain overlay on every slide via ::before. Opacity 0.08 with screen blend — barely visible but reads as photographic grain rather than digital flatness.\"\n  hairline-frame:\n    selector: \".slide::after\"\n    position: \"absolute; inset: 36px\"\n    border: \"1px solid {colors.hair-paper}\"\n    description: \"1px paper-blush-at-14%-opacity interior frame inset 36px from each slide edge. Always present. Functions as the editorial border of the magazine page.\"\n  runner:\n    position: \"absolute; top: 60px; left: 60px; right: 60px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    description: \"Top metadata runner — brand name on left (colored pink), section / chapter tag on right (muted paper-blush).\"\n  footer:\n    position: \"absolute; bottom: 60px; left: 60px; right: 60px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    description: \"Bottom metadata runner — source / confidentiality on left, page-position (e.g. '03 / 09') on right. Page-position has paper-blush base text with a pink ::em for the current number.\"\n  pink-rule:\n    height: 1px\n    background: \"{colors.pink}\"\n    opacity: 0.45\n    description: \"Hairline pink rule for soft section separators.\"\n  hair-rule:\n    height: 1px\n    background: \"{colors.paper-blush}\"\n    opacity: 0.25\n    description: \"Hairline paper rule for muted section separators.\"\n  pink-glow:\n    textShadow: \"0 0 80px rgba(237, 61, 140, 0.18)\"\n    description: \"Soft pink halo behind large script titles. Applied via text-shadow on hero serif text only.\"\n  pink-glow-mega:\n    textShadow: \"0 0 120px rgba(237, 61, 140, 0.22)\"\n    description: \"Stronger pink halo for section-divider mega numerals.\"\n  callout-rail:\n    borderLeft: \"1px solid {colors.pink}\"\n    paddingLeft: 24px\n    description: \"Pink left rule with right-aligned content — used as a callout container beside a chart, beside a chapter explanation.\"\n  matrix-cell:\n    padding: \"16px 24px\"\n    borderBottom: \"1px solid {colors.line-pink}\"\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: 22px\n    fontWeight: 300\n    color: \"{colors.paper-blush}\"\n    description: \"Comparison matrix cell. Rows are separated by hairline pink-at-32% rules; columns are gap-separated, no vertical borders.\"\n  matrix-cell-us:\n    background: \"rgba(237, 61, 140, 0.08)\"\n    description: \"Highlighted matrix row variant — soft pink wash to mark the 'our' column.\"\n  pill-outline:\n    border: \"1px solid {colors.pink}\"\n    color: \"{colors.pink}\"\n    padding: \"6px 14px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    description: \"Hollow pink pill — 1px pink border with pink mono text. The default pill state.\"\n  pill-solid:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink-deep}\"\n    border: \"1px solid {colors.pink}\"\n    fontWeight: 500\n    description: \"Solid pink pill — pink fill, deep-ink text. Affirmative / featured state.\"\n  pill-dim:\n    borderColor: \"{colors.hair-paper}\"\n    color: \"{colors.mute-paper}\"\n    description: \"Dim pill — muted paper border, muted paper text. The de-emphasized state.\"\n  qr-tile:\n    width: 180px\n    height: 180px\n    background: \"{colors.paper-blush}\"\n    padding: 12px\n    description: \"QR-code container — solid paper-blush square with 12px white padding around the SVG QR. The only large light-surface element in the system.\"\n  stat-row:\n    display: \"grid; columns: 240px 1fr\"\n    borderBottom: \"1px solid {colors.hair-paper}\"\n    paddingBottom: 16px\n    description: \"Stat row pattern — large pink serif figure on the left (with a paper-blush superscript unit) paired with a mono label and Inter description on the right. Rows are separated by 1px paper hairline.\"\n  callout-num:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 120px\n    lineHeight: 0.9\n    color: \"{colors.pink}\"\n    description: \"Chart callout number — large pink serif numeral with smaller paper-colored unit suffix.\"\n  arrow-glyph:\n    width: 24px\n    height: 24px\n    color: \"{colors.pink}\"\n    description: \"Small pink right-arrow SVG used between process steps.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPink Script is a **nocturnal couture editorial system** built on a single atmospheric premise: a deep warm-black surface lit from the upper-left by a slightly warmer #1A1218 ellipse that fades to near-black across the lower-right. The off-center light source reads as a studio softbox catching one corner of a magazine spread. Over this, a subtle film-grain overlay at 8% opacity with screen blend adds the photographic graininess of late-night editorial photography. Inside this surface sits a 1px hairline interior frame (paper-blush at 14% opacity, inset 36px from each edge) — the editorial border of every page. Without the lit gradient, the film grain, and the interior frame, the system collapses into flat dark UI.\n\nThe typeface stack is a deliberate three-voice editorial pairing. **DM Serif Display** carries every editorial moment — script titles (treated as the system's \"pink script\"), serif headlines, stat figures, quote text. It runs at weight 400 only; the face has just one weight and that's the system's display voice. The serif scales freely from 32px (table labels) all the way up to 600px (section-divider numerals). **Inter** at weight 300 carries every body paragraph, lead, description, and caption — the ultra-light geometric sans is the system's calm prose voice. **JetBrains Mono** at weight 400 carries every label, kicker, page number, axis tag, runner, and footer string — always uppercase with at least 0.08em positive tracking.\n\nThe palette is anchored to a single signature: **hot pink fuchsia** (`{colors.pink}` — #ED3D8C) against deep warm-black (`{colors.ink-deep}` — #060507). The pink is the entire editorial accent system; it appears as script title color, as kicker color, as chart line color, as pill border, as inline `<em>` switch inside paper-blush headlines, as callout numerals, as rule color, and as the soft halo (text-shadow glow) behind hero script titles. **Paper-blush** (`{colors.paper-blush}` — #F5EDF1) is the secondary text color — used for editorial sans-serif headlines, paragraph copy, and any moment that should read as ink rather than highlight. Muted paper at 55% opacity handles secondary text; hairline paper at 14% handles separators and the interior frame.\n\nDepth is created through three layered mechanisms: the **off-center radial gradient surface** (lit from the upper-left), the **subtle film-grain overlay** (8% opacity, screen blend, adds photographic texture), and the **pink halo text-shadow** on hero script titles (a soft 80–120px glow that simulates the light bleed of large neon-saturated type on photographic paper). There are no drop shadows on any element; the depth is atmospheric and photographic, not structural.\n\n**Density philosophy: sparse-medium with one hero moment.** Pink Script reads as elegant when a single oversized script anchors the slide and the rest is generous negative space punctuated by 2–4 small editorial fragments (a runner, a kicker, a paragraph, a footer). A slide with the hero script taking up 60–70% of the canvas and the supporting copy quietly orbiting the remaining margin is correct. Cramming the canvas with multiple equally-weighted regions breaks the late-night magazine feeling. The exception is the stats slide (5 stat rows side-by-side), the comparison matrix (full-grid table), and the system slide (multiple panels) — these slides are denser by design because the editorial purpose is reference, not poetry. Process and TOC slides are populated but always hierarchical: a giant script header dominates, with smaller card rows orbiting beneath.\n\n**Key Characteristics:**\n- Deep warm-black surface (`{components.slide-surface}`) lit from the upper-left by a radial gradient ellipse.\n- A subtle film-grain overlay (`{components.film-grain}`) on every slide — opacity 0.08, screen blend.\n- A 1px paper-blush interior frame (`{components.hairline-frame}`) inset 36px from each edge, present on every slide.\n- Hot fuchsia pink (`{colors.pink}`) is the single chromatic accent — used as script color, kicker color, line color, pill outline, inline emphasis, and the soft halo behind hero scripts.\n- DM Serif Display carries every editorial moment, scaling from 32px to 600px. There is no second display face.\n- Inter at weight 300 carries every body paragraph — ultra-light sans is the system's prose voice.\n- JetBrains Mono uppercase at 0.08em+ tracking carries every label, page number, and runner string.\n- Top runner and bottom footer chromes appear on every slide; the runner brand text is pink, everything else in chrome is muted paper-blush.\n- The inline `<em>` element switches paper-blush serif headlines to pink — the system's editorial emphasis mechanism.\n\n## Colors\n\n### Palette\n\n- **Ink Deep** (`{colors.ink-deep}` — #060507): The base surface color. A near-black with a faint warm shift. Combined with the radial gradient, this anchors the dark editorial surface.\n- **Ink Violet** (`{colors.ink-violet}` — #0F0D11): A slightly lifted dark with a violet cast. Reserved alternate dark — available but rarely used in current slide types.\n- **Paper Blush** (`{colors.paper-blush}` — #F5EDF1): A warm off-white with a faint pink undertone. The primary editorial text color, the QR-tile background, and the secondary highlight surface. Reads as paper rather than pure white.\n- **Pink** (`{colors.pink}` — #ED3D8C): Hot fuchsia. The system's single chromatic accent. Used as the script title color, kicker color, inline `<em>` color, callout numeral color, rule color, chart line color, pill outline color, and the source color for the halo text-shadow.\n- **Pink Light** (`{colors.pink-light}` — #FF66A8): A brighter pink. Defined but not used in current slide types.\n- **Pink Deep** (`{colors.pink-deep}` — #B81D67): A darker pink. Defined but not used in current slide types.\n- **Line Pink** (`{colors.line-pink}` — rgba(237,61,140,0.32)): Pink at 32% opacity for table row dividers and chart axis lines.\n- **Mute Paper** (`{colors.mute-paper}` — rgba(245,237,241,0.55)): Paper-blush at 55% for muted body text and metadata.\n- **Hair Paper** (`{colors.hair-paper}` — rgba(245,237,241,0.14)): Paper-blush at 14% for the interior hairline frame, dim pill borders, and toc-row dividers.\n\n### Defaults\n\n- **Default slide surface**: `{components.slide-surface}` — the lit warm-black radial gradient. Always.\n- **Default film grain**: `{components.film-grain}` at opacity 0.08 with screen blend. Non-optional.\n- **Default interior frame**: `{components.hairline-frame}` at 1px paper-blush 14%. Non-optional.\n- **Default primary headline color**: For a hero script moment, `{colors.pink}`. For an editorial headline that should read as ink (not highlight), `{colors.paper-blush}`.\n- **Default body text color**: `{colors.paper-blush}` for primary copy; `{colors.mute-paper}` for muted lead and description.\n- **Default kicker color**: `{colors.pink}`. The eyebrow label is always pink.\n- **Default label / metadata color**: `{colors.mute-paper}` for runner, footer, and metadata.\n- **Default line / divider color**: `{colors.pink}` at 45% opacity for soft pink rules; `{colors.hair-paper}` for muted hairlines.\n- **Default emphasis mechanism inside a paper-blush headline**: wrap in `<em>` to switch that word to `{colors.pink}` (font-style stays upright).\n- **Default pill state**: outline (`{components.pill-outline}`) — pink border, pink text.\n- **Default chart series**: pink line for primary; muted paper-blush dashed for secondary.\n\nThe pink is the only chromatic color in regular use; the other pink variants (Pink Light, Pink Deep) are reserved. Don't introduce a second chromatic accent — Pink Script's identity is that it is monochromatically pink.\n\n## Typography\n\n### Font Family\n\nThe system loads three web fonts: **DM Serif Display** (weight 400, italic 0 only) carries every editorial / display moment from 32px up to 600px; **Inter** (weights 300, 400, 500, 600) carries every body paragraph and lead; **JetBrains Mono** (weights 400, 500) carries every label, runner, footer, and metadata string.\n\nThe emotional register of each face is distinct:\n- DM Serif Display reads as **editorial, perfume-magazine, late-night couture** — the face has elegant high-contrast strokes and the system uses it for every moment that should feel literary or magazine-typeset.\n- Inter at weight 300 reads as **calm, contemporary, neutrally elegant** — the ultra-light weight matches the editorial tone without competing with the serif.\n- JetBrains Mono reads as **archival, boutique-catalog, edition-numbered** — the mono uppercase voice handles edition numbers, page positions, runner brand text, and section tags.\n\nA key inline mixing rule: **the `<em>` element inside a DM Serif Display headline switches color to `{colors.pink}`** (font-style normalized to upright). This is the system's primary headline emphasis — pink ink inside paper-blush serif text.\n\nA second inline mixing rule: **a `<sup>` element inside a stat figure renders at ~36px in `{colors.paper-blush}`** with a slight top-padding offset — used for unit suffixes (%, ×, M).\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.script-section}` | 600px | DM Serif Display | 400 | Section-divider mega numeral |\n| `{typography.script-huge}` | 540px | DM Serif Display | 400 | Hero script in a feature display position |\n| `{typography.script-giant}` | 360px | DM Serif Display | 400 | Large editorial script title |\n| `{typography.script-cover}` | 280px | DM Serif Display | 400 | Cover script title |\n| `{typography.script-large}` | 220px | DM Serif Display | 400 | TOC primary script |\n| `{typography.script-med}` | 156px | DM Serif Display | 400 | Process slide primary headline |\n| `{typography.serif-cta}` | 140px | DM Serif Display | 400 | Closing CTA headline (paper-blush color) |\n| `{typography.script-sm}` | 132px | DM Serif Display | 400 | Stat-slide headline, matrix headline |\n| `{typography.serif-stat}` | 116px | DM Serif Display | 400 | Stat row figure |\n| `{typography.callout-num}` | 120px | DM Serif Display | 400 | Chart callout numeral |\n| `{typography.serif-quote}` | 92px | DM Serif Display | 400 | Quote-slide body text |\n| `{typography.serif-chart-h}` | 90px | DM Serif Display | 400 | Chart-slide headline |\n| `{typography.serif-section-h}` | 88px | DM Serif Display | 400 | Section divider supporting headline |\n| `{typography.serif-toc-num}` | 64px | DM Serif Display | 400 | TOC row numeral |\n| `{typography.serif-toc-title}` | 56px | DM Serif Display | 400 | TOC row title |\n| `{typography.serif-quote-attr}` | 48px | DM Serif Display | 400 | Quote attribution name |\n| `{typography.serif-process-h}` | 38px | DM Serif Display | 400 | Process step heading |\n| `{typography.serif-matrix-label}` | 32px | DM Serif Display | 400 | Matrix row label |\n| `{typography.body}` | 24px | Inter | 300 | Standard body paragraph |\n| `{typography.body-muted}` | 22px | Inter | 300 | Muted lead and description |\n| `{typography.body-toc-desc}` | 24px | Inter | 300 | TOC row description |\n| `{typography.mono-runner}` | 24px | JetBrains Mono | 400 | Top runner and bottom footer |\n| `{typography.mono-kicker}` | 22px | JetBrains Mono | 400 | Pink kicker eyebrow |\n| `{typography.mono-label}` | 22px | JetBrains Mono | 400 | Standard paper-blush label |\n| `{typography.mono-cover-pre}` | 28px | JetBrains Mono | 400 | Cover preamble line (with 0.42em wide tracking) |\n| `{typography.mono-pill}` | 16px | JetBrains Mono | 400 | Pill text |\n\n### Defaults\n\n- **Default primary content headline**: `{typography.script-sm}` (132px) — when the slide is a content moment with a strong headline.\n- **Default cover / opening headline**: `{typography.script-cover}` (280px) — the cover script lockup.\n- **Default section-divider mega numeral**: `{typography.script-section}` (600px).\n- **Default body paragraph**: `{typography.body}` (24px Inter 300).\n- **Default muted lead / description**: `{typography.body-muted}` (22px Inter 300, mute-paper color).\n- **Default label / kicker**: `{typography.mono-kicker}` (22px JetBrains Mono, pink).\n- **Default footer / runner**: `{typography.mono-runner}` (24px JetBrains Mono).\n- **Default stat figure**: `{typography.serif-stat}` (116px) with a 36px paper-blush `<sup>` for unit.\n- **Default weight for any display element**: 400 (DM Serif Display has only one weight).\n- **Default weight for body**: 300.\n\nWhen unsure, the canonical pattern is: a 22px pink kicker + a 132–156px DM Serif Display headline (with one `<em>`-wrapped word in pink if extra emphasis is needed) + a 22–24px Inter 300 paragraph in muted paper-blush. That three-element pattern is the system's most reliable rhythm.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every slide carries the radial-gradient surface, the film-grain overlay, AND the 1px paper-blush interior frame.** All three together. Removing any one collapses the editorial-magazine reading.\n- **Every hero script element (sizes 280px and larger) carries the pink halo text-shadow.** `{components.pink-glow}` for hero scripts (80px blur); `{components.pink-glow-mega}` for section-divider mega numerals (120px blur). The halo simulates the light bleed of neon-saturated print.\n- **Every script color is `{colors.pink}`.** DM Serif Display in any other color is not \"script\" — it becomes \"serif headline.\" The pink color is what defines script vs. headline in this system.\n- **Paper-blush serif headlines may switch one word to pink via `<em>`** — this is the system's headline emphasis mechanism. The `<em>` stays upright (font-style: normal).\n- **DM Serif Display headlines always have `padding-bottom: .1em` (or `.12em` for the largest script).** This compensates for the serif descenders so the visual baseline reads correctly aligned.\n- **All JetBrains Mono is uppercase with at least 0.08em positive tracking** (most chrome and labels use 0.12–0.18em; the cover preamble uses 0.42em).\n- **Body text is always Inter at weight 300.** Inter at any other weight is not body — switching to 400 reads as a different tone.\n- **The kicker is always pink** in `{colors.pink}`. The eyebrow color is non-negotiable.\n- **Runner brand text on the left is always pink; the right-side meta is always muted paper-blush.** The pink brand text is the system's persistent identity signal.\n- **The page-position footer uses paper-blush base text with a pink `<em>` for the current number.** Format: `<span>03 / 09</span>` where `03` is wrapped in `<em>` to render pink.\n\n### Typography Principles\n\nThe rhythm of Pink Script is **oversized pink script + paper-blush serif paragraph headline + muted Inter prose + small mono editorial tag**. Switching any voice (e.g., setting a script in Inter, or body in DM Serif) collapses the system's editorial register. The serif scales freely from 32px to 600px; choose the size based on the slide's hero moment, not on a fixed scale.\n\nItalic letterforms are not used (DM Serif Display does have an italic, but it's not loaded by the template). The `<em>` tag is repurposed as a pink color switch. Underline is not used. Bold weight is not available in DM Serif Display, and using bold Inter for body breaks the calm prose voice.\n\n## Layout\n\n### Canvas System\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component. All sizes are pixel-fixed; the stage handles proportional scaling.\n\nMost slides use **absolute positioning** with edge-anchored elements. The standard content area is `inset: 140px 60px 140px 60px` — a 140px top reserve for the runner + headline area, 140px bottom reserve for the footer, and 60px left/right edge margins.\n\n### Padding and Anchoring\n\n| Anchor | Value | Use |\n|---|---|---|\n| `edge-x` | 60px | Left and right edge margins for content |\n| `edge-top-chrome` | 60px | Top inset for the runner chrome |\n| `edge-bottom-chrome` | 60px | Bottom inset for the footer chrome |\n| `content-top` | 140px | Top inset for slide body content (below runner) |\n| `content-bottom` | 140px | Bottom inset for slide body content (above footer) |\n| `inner-frame-inset` | 36px | The hairline interior frame inset |\n\n### Chrome Frame\n\nEvery slide carries a **top runner** at 60px top / 60px sides — a brand name on the left (always pink) and a section / chapter tag on the right (muted paper-blush). The runner is JetBrains Mono uppercase at 24px with 0.14em tracking.\n\nEvery slide also carries a **bottom footer** at 60px bottom / 60px sides — typically a source or confidentiality string on the left and a page-position marker on the right. The page-position uses paper-blush base with a pink `<em>` for the current number (e.g., `01 / 09`).\n\nThe **hairline interior frame** at 1px paper-blush 14% sits at `inset: 36px` on every slide. It is the editorial border of the magazine page and present unconditionally.\n\n## Depth and Elevation\n\n### No Box Shadows, Atmospheric Depth Only\n\nThe system uses **zero box-shadow declarations** on any structural element. Depth comes from three atmospheric layers:\n\n1. **The radial-gradient surface** (`{components.slide-surface}`) — lit from the upper-left by a warm dark ellipse fading to near-black across the lower-right. This creates the impression of a studio softbox catching one corner of the page.\n2. **The film-grain overlay** (`{components.film-grain}`) — 8% opacity, screen blend, adds photographic graininess to the surface.\n3. **The pink halo text-shadow** on hero script titles — a soft 80–120px blur in pink at low alpha that simulates the light bleed of large neon-saturated type on photographic paper.\n\n### No Drop Shadows on Cards or Panels\n\nCards, tables, and panels do not carry shadows. The system's \"card\" pattern is structural rather than elevated: a region defined by a border or a left-rule, sitting flat on the surface.\n\n### Hairline Rules as Structural Depth\n\nWhere the system needs to separate regions, it uses:\n- 1px pink at 45% opacity (`{components.pink-rule}`) for soft pink rules.\n- 1px paper-blush at 14% (`{components.hair-paper}`) for muted hairline separators.\n- 1px pink at 32% (`{colors.line-pink}`) for table row dividers and chart axis lines.\n\nNever a 2px or thicker rule. Never a colored rule outside pink and paper.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Cards, panels, table cells, QR tiles, runner / footer text |\n| 999px | None — pills here are explicitly rectangular |\n\nThe system has **zero border-radius** on any structural element. Pills are 0-radius rectangles (despite the \"pill\" naming convention). The only round element is the small chart-callout circle marker (an SVG `<circle>` element marking an inflection point).\n\n### Border Weights\n\n- **1px solid paper-blush at 14%** — the universal interior hairline frame.\n- **1px solid pink** (`{colors.pink}`) — pill outlines.\n- **1px solid pink at 32%** (`{colors.line-pink}`) — table dividers, chart axes.\n- **1px solid paper-blush at 14%** — TOC row dividers, footer separators.\n- **1px solid pink** at full opacity — left callout-rail border, top-of-step border in process slides.\n- **1px dashed pink at 18%** — chart grid lines.\n\nNo other border weights exist. There is no 2px, 3px, or thicker border anywhere in the system.\n\n### Decorative Element Types\n\n**Hero script title** — A DM Serif Display headline at 220–600px in pink with the halo text-shadow. The defining moment of any slide that uses it. Always pink, always with the glow, always carries `padding-bottom: .1em` to compensate for descenders.\n\n**Paper-blush serif headline** — A DM Serif Display headline at 88–140px in paper-blush. Used when the moment should read as ink rather than highlight. May contain `<em>` to switch one word to pink.\n\n**Pink kicker** — A 22px JetBrains Mono uppercase eyebrow in `{colors.pink}` placed above a headline. The system's most consistent appearance of pink alongside the hero script.\n\n**Mono runner / footer** — Standard JetBrains Mono chrome at 24px / 0.14em tracking. The brand on the runner is always pink; the rest is muted paper-blush.\n\n**Pink rule (`{components.pink-rule}`)** — 1px pink at 45% opacity. Used as a soft separator.\n\n**Hairline rule (`{components.hair-rule}`)** — 1px paper-blush at 14% opacity. Used as a muted separator and as the TOC row divider.\n\n**Callout rail (`{components.callout-rail}`)** — A 1px pink left border with right-aligned content padding-left 24px. Used as a vertical callout container beside charts or beside a chapter explanation.\n\n**Stat row (`{components.stat-row}`)** — A 240px serif figure paired with a mono label + Inter description, separated from the next row by a 1px paper hairline. Stat figures are pink; descriptions are muted paper-blush.\n\n**Pills (`{components.pill-outline}`, `{components.pill-solid}`, `{components.pill-dim}`)** — Three pill states: hollow pink (default), solid pink with deep-ink text (affirmative / featured), and dim hairline (de-emphasized). All are 0-radius rectangles.\n\n**QR tile (`{components.qr-tile}`)** — A 180×180 paper-blush square with 12px white padding and an SVG QR inside. The only large light-surface element in the system; it functions as a \"ticket\" object on the CTA slide.\n\n**Chart callout** — A 120px pink serif numeral with a 0.5em paper-colored unit suffix, plus a small mono label and a 22px muted Inter description, anchored to the right of a chart by a 1px pink callout rail.\n\n**Chart line** — A 3px solid pink line for the primary series; a 2px paper-blush dashed line for the secondary series. The inflection point on the primary line carries a 9px solid pink circle with an 18px hollow ring at 50% opacity and a vertical dashed line dropping to the axis.\n\n**Process step** — A vertical column anchored by a 1px solid pink top border with a 96px pink serif numeral, a 38px paper-blush serif heading, and an Inter description. Steps are separated by a 24px gap and connected by a small pink arrow glyph.\n\n**Matrix table** — A 4-column grid with the first column being a 32px paper-blush serif label, the column header row colored pink, and the \"our column\" row tinted with `rgba(237, 61, 140, 0.08)` to mark it.\n\n## Do's and Don'ts\n\n### Do\n- Apply the radial-gradient surface, the film-grain overlay, and the 1px paper-blush interior frame to every slide. All three are non-optional.\n- Set hero script titles in `{colors.pink}` with the halo text-shadow. The glow is part of the script's identity.\n- Use DM Serif Display for every editorial / display moment. The serif is the system's only editorial face — don't substitute a second face.\n- Set body paragraphs in Inter at weight 300. The ultra-light weight is the system's calm prose voice.\n- Use JetBrains Mono uppercase with at least 0.08em tracking for every label, page number, runner, and footer string.\n- Use `<em>` inside a paper-blush serif headline to switch one word to pink — the system's primary headline emphasis.\n- Place a pink kicker above every primary headline. The pink eyebrow is the system's editorial signal.\n- Use the pink left-rule callout (`{components.callout-rail}`) to anchor a stat, a callout, or a chapter explanation to the right of a chart or content region.\n- Add `padding-bottom: .1em` to every DM Serif Display headline. The serif descenders need compensation.\n- Use the page-position footer pattern with pink `<em>` for the current number: `<em>03</em> / 09`.\n\n### Don't\n- Don't omit the film grain or the interior hairline frame. The system's editorial atmosphere depends on both.\n- Don't use box-shadow on any panel or card. Depth is atmospheric, not structural.\n- Don't introduce a second chromatic accent. Pink is the only accent. Adding red, blue, or green breaks the system.\n- Don't render the pink fuchsia as text on the paper-blush surface — the contrast inverts and looks like a typo.\n- Don't put body copy in DM Serif Display. The serif is for editorial moments, not paragraphs.\n- Don't put display headlines in Inter. The sans is the body voice, not the headline voice.\n- Don't round any element. Cards, pills, tables, QR tiles — all strict rectangles.\n- Don't use blurred shadows on any element. The only \"shadow\" in the system is the pink halo text-shadow on hero scripts, and that's a glow, not a drop shadow.\n- Don't use italic letterforms. The `<em>` tag is repurposed as a pink color switch.\n- Don't crowd a slide with multiple equally-weighted regions. The system reads as elegant when one hero moment dominates.\n\n## Responsive Behavior\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component. The stage handles proportional scaling to the browser viewport — all pixel-fixed sizes inside the canvas scale uniformly.\n\n### Presenter Behavior\n- Navigation, scaling, and presenter chrome are handled by the `<deck-stage>` component.\n- Keyboard, touch, and mouse-wheel navigation are managed by the stage.\n- The canvas is constant 1920×1080 regardless of viewport.\n\n### Print Behavior\nPrint export depends on the deck-stage component's print handling. The pink halo text-shadow and the film-grain overlay may render inconsistently in PDF export — test before assuming visual parity.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face (recommended) | Weight | Notes |\n|---|---|---|---|---|\n| Script / display (DM Serif Display) | DM Serif Display | **思源宋体 Noto Serif SC** | **900** | Heavy serif that holds visual mass on dark backgrounds. The default choice. |\n| Display alternate (delicate moments) | DM Serif Display | 站酷小薇体 ZCOOL XiaoWei | 400 | Couture-thin display face — use only at very large sizes (400px+) where delicacy reads as intentional. Too thin on dark backgrounds at typical headline sizes (40–200px). |\n| Body (Inter 300) | Inter | Noto Serif SC (思源宋体) | 400 | Serif body keeps the editorial register cohesive with the heavy display. |\n| Label / runner (JetBrains Mono UPPERCASE tracked) | JetBrains Mono | Noto Sans SC | 400 (do not force monospace on CJK) | |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. DM Serif Display tokens become `\"DM Serif Display, 'Noto Serif SC', serif\"` with `font-weight: 900` on the Chinese run; Inter body tokens become `\"Inter, 'Noto Serif SC', system-ui, sans-serif\"`; JetBrains Mono tokens become `\"JetBrains Mono, 'Noto Sans SC', monospace\"`. Latin glyphs render in their original face; CJK falls through automatically.\n\n**Critical**: when Chinese text uses the display role, set `font-weight: 900` explicitly. DM Serif Display's \"single weight\" is already visually heavy because it's a high-contrast display serif — the equivalent CJK heaviness lives at weight 900 in Noto Serif SC, not weight 400.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=Inter:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500;700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPink Script (After Hours) is a nocturnal couture system whose entire editorial identity rests on DM Serif Display in hot fuchsia pink at sizes up to 600px against dim warm-black paper. The visual weight of DM Serif Display at any size is substantial — high-contrast strokes, serif terminals, and a typographic mass that holds against the dark background.\n\nThe recommended Chinese equivalent is **思源宋体 Noto Serif SC at weight 900**. This carries the same visual mass as DM Serif Display: bold serif terminals, sufficient stroke density to read clearly against the dark surface, and the editorial register that defines the system. Weight 900 is non-negotiable for display moments — anything lighter (400, 500, even 700) will visually disappear against the pink-glow + dark-paper combination and break the entire couture register.\n\n**站酷小薇体 ZCOOL XiaoWei** is a viable secondary option for moments where extreme delicacy reads as intentional — a single 400-px+ pull-quote, a hairline section divider title, a brand wordmark at the very top of a cover slide. Its single-weight 400 with extreme stroke contrast carries a different feeling: dressier, more whisper-thin, more vintage-Vogue than modern-fashion-editorial. For most display work, choose Noto Serif SC 900; reach for XiaoWei only when the moment is genuinely a delicate accent at extreme size.\n\nThe pink halo text-shadow (`{components.pink-glow}` at 80–120px blur) transfers perfectly to Chinese characters regardless of which display face you choose. **Apply the same glow to every Chinese display moment in pink** — the neon bleed effect is script-agnostic and the late-night magazine atmosphere survives the script switch fully.\n\nThe pink color (`{colors.pink}` — #ED3D8C) as the only chromatic accent works unchanged. The inline `<em>` color switch (paper-blush headline with one word in pink) is a clean transfer to Chinese — wrap one CJK character or one phrase in `<em>` and the pink ink switch reads exactly the same.\n\n**Inter at weight 300 for body** does not transfer directly. Noto Serif SC at weight 400 is the recommended body face — its high-contrast serif stroke matches the couture register of the system's overall feel. Body color stays paper-blush (`{colors.paper-blush}`); the ultra-light register is achieved through size, paper-blush color, and the muted 55%-opacity lead, not through font weight.\n\nJetBrains Mono uppercase tracked labels (runner brand, page numbers, footer chrome) do not transfer to CJK. Pure Latin chrome strings (the brand name itself, edition numbers like `01 / 09`) keep JetBrains Mono. For Chinese chrome text (a section / chapter tag in the upper-right), use Noto Sans SC 400 at the same 24px size with letter-spacing reset to 0 and no uppercase.\n\nThe radial-gradient surface, the film-grain overlay, the 1px paper-blush interior frame — all script-agnostic. The pink halo, the kicker, the callout rail, the stat-row pattern, the matrix-cell — all transfer unchanged.\n\n### Known CJK Gap\n\nDM Serif Display's \"single weight\" is misleading: it's a high-contrast display serif that reads as visually heavy at any size. The Chinese equivalent heaviness lives at Noto Serif SC **weight 900**, not weight 400 — using weight 400 for display will make Chinese headlines look limp and disconnected from the bold pink callouts. The system's reliance on size for hierarchy still works in Chinese, but you must lock display weight at 900 to preserve the visual mass.\n\nZCOOL XiaoWei is the only CDN-loadable Chinese face that captures the \"high-contrast couture serif\" character in its proportions, but its single-weight 400 is too thin for most display sizes on this template's dark surface. Treat XiaoWei as a niche option, not the default.\n\n## Iteration Guide\n\n1. Every new slide background is the lit radial gradient (`{components.slide-surface}`) with film grain and the interior hairline frame. Don't skip any of the three layers.\n2. Every new hero script title is DM Serif Display in `{colors.pink}` with the halo text-shadow at 80–120px blur.\n3. Every new editorial headline that should read as ink (not highlight) is DM Serif Display in `{colors.paper-blush}`. Use `<em>` inside to switch a word to pink.\n4. Every new body paragraph is Inter at weight 300 in paper-blush (full) or mute-paper (muted).\n5. Every new label, runner, footer, or metadata tag is JetBrains Mono uppercase at 0.08em+ tracking.\n6. Every new kicker eyebrow is pink. Don't render a kicker in any other color.\n7. Every new pill is a 0-radius rectangle. Choose outline (default), solid (affirmative), or dim (de-emphasized) state.\n8. Every new table or matrix uses 1px pink-at-32% row dividers and no vertical borders.\n9. Every chart uses a 3px solid pink line for primary and a 2px paper-blush dashed line for secondary. Don't introduce a third color.\n10. The runner brand text is always pink; the right-side meta is always muted paper-blush. Don't swap.\n\n## Known Gaps\n\n- The system depends on a `<deck-stage>` web component loaded via `deck-stage.js`. Without it, the 1920×1080 canvas will not scale and slides will render at native pixel size.\n- The film-grain overlay uses a data-URI SVG with `feTurbulence`. Some browsers (older Safari) render the noise inconsistently or skip it in PDF export.\n- DM Serif Display has only weight 400. There is no bold or italic variant available — the system has no fallback weight scale and depends on size alone for hierarchy.\n- The pink halo text-shadow uses fixed 80px and 120px blur values. At very small viewport scales, the glow may dominate the type; at very large scales, the glow may appear weak.\n- The `{colors.pink-light}`, `{colors.pink-deep}`, and `{colors.ink-violet}` tokens are defined but inactive in current slide types. They are reserved for future variation.\n- The QR-tile SVG inside the CTA slide is a hand-coded pattern of `<rect>` elements that does not encode a real scannable code. Real QR codes need to be generated externally.\n- Chart line points and inflection markers are SVG `<polyline>` coordinates that must be computed manually. There is no data-binding layer.\n- The cover script lockup uses `padding-left: 180px` on the second line for an indented hanging effect. This is a hardcoded layout decision and doesn't generalize to other word lengths — long second lines may break the centering.\n- The runner and footer rely on `white-space: nowrap` to prevent line-wrap. Extremely long brand names or page-position strings may overflow the 60px edge margin.\n- The matrix `cell.us` column highlight is a hardcoded `rgba(237, 61, 140, 0.08)` wash. Tinting other columns requires per-column class additions.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pink-script/preview.md":"# Pink Script — After Hours Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/pink-script/design.md`\n- Preview card: `bold-template-pack/templates/pink-script/preview.md`\n\n## Selection Metadata\n\n- Slug: `pink-script`\n- Tagline: Black canvas, hot pink accent, pearl-cream paper, Instrument Serif headlines: late-night editorial luxury.\n- Mood: nocturnal, moody, intentional, luxe, expressive\n- Tone: literary, sultry, considered, magazine\n- Formality: medium-high\n- Density: low\n- Scheme: dark\n- Best for: Anything that should feel nocturnal, intentional, and a little luxe: fashion brand decks, creator personal brands, after-hours / nightlife / spirits launches, luxury product reveals, editorial features. Also a striking unexpected pick for a tech keynote, research synthesis, or business pitch that wants to land with magnetic confidence.\n- Avoid for: Daytime corporate-professional and traditional B2B contexts where the dark canvas with hot-pink accent reads as too styled or too expressive.\n\n## Visual Snapshot\n\nA nocturnal couture editorial system rendered in hot fuchsia ink on dim warm-black paper, with a soft film-grain overlay and a hairline interior frame. DM Serif Display carries every script and editorial moment at sizes up to 600px; Inter at weight 300 carries the body voice; JetBrains Mono carries the boutique-catalog metadata. The aesthetic borrows from glossy fashion magazine spreads, late-night perfume advertising, and the editorial pages of high-end zines — closer to a Maison's seasonal lookbook than a startup deck.\n\nPink Script is a nocturnal couture editorial system built on a single atmospheric premise: a deep warm-black surface lit from the upper-left by a slightly warmer #1A1218 ellipse that fades to near-black across the lower-right. The off-center light source reads as a studio softbox catching one corner of a magazine spread. Over this, a subtle film-grain overlay at 8% opacity with screen blend adds the photographic graininess of late-night editorial photography. Inside this surface sits a 1px hairline interior frame (paper-blush at 14% opacity, inset 36px from each edge) — the editorial border of every page. Without the lit gradient, the film grain, and the interior frame, the system collapses...\n\n## Preview Ingredients\n\n- Palette: ink-deep #060507; ink-violet #0F0D11; paper-blush #F5EDF1; pink #ED3D8C; pink-light #FF66A8; pink-deep #B81D67\n- Typography: DM Serif Display; Inter; JetBrains Mono\n- Signature move: Deep warm-black surface ({components.slide-surface}) lit from the upper-left by a radial gradient ellipse.\n- Signature move: A subtle film-grain overlay ({components.film-grain}) on every slide — opacity 0.08, screen blend.\n- Signature move: A 1px paper-blush interior frame ({components.hairline-frame}) inset 36px from each edge, present on every slide.\n- Signature move: Hot fuchsia pink ({colors.pink}) is the single chromatic accent — used as script color, kicker color, line color, pill outline, inline emphasis, and the soft halo behind hero scripts.\n- Signature move: DM Serif Display carries every editorial moment, scaling from 32px to 600px. There is no second display face.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/playful/design.md":"---\nversion: alpha\nname: Playful\ndescription: \"A warm, hand-crafted editorial system built on a peach-clay canvas with charcoal ink as the only \\\"color.\\\" Display type runs in Syne (weight 700–800, tight negative tracking); body type runs in Space Grotesk at weight 400–500. The aesthetic borrows from independent studio decks, risograph zines, and sketchbook spreads: organic blob frames, scribbled SVG doodles, slightly rotated cards, and double-stroke offset borders give every slide a hand-touched, unpolished warmth. The effect is creative-studio editorial, not corporate pitch — confident but human, structured but loose.\"\n\ncolors:\n  bg: \"#F0C8A0\"\n  bg-alt: \"#E8B88E\"\n  light: \"#F7DEC6\"\n  text: \"#1A1A1A\"\n\ncolor-aliases:\n  accent: text\n\ntypography:\n  display-hero:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(4rem, 10vw, 9rem)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  display:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(3rem, 8vw, 7rem)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.02em\n  headline:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(2.5rem, 6vw, 5rem)\"\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.01em\n  statement:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(2.5rem, 5vw, 4.5rem)\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  title:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(2rem, 4vw, 3.5rem)\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  title-sm:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"1.3rem\"\n    fontWeight: 700\n    lineHeight: 1.2\n  number-hero:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(4rem, 8vw, 7rem)\"\n    fontWeight: 800\n    lineHeight: 1.0\n  number-md:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"2.5rem\"\n    fontWeight: 800\n    lineHeight: 1.0\n  number-sm:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"2rem\"\n    fontWeight: 800\n    lineHeight: 1.0\n  body:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"clamp(1rem, 1.2vw, 1.1rem)\"\n    fontWeight: 400\n    lineHeight: 1.7\n  body-md:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"1.2rem\"\n    fontWeight: 500\n    lineHeight: 1.6\n  label-eyebrow:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 600\n    lineHeight: 1.2\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  caption:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 500\n    lineHeight: 1.4\n  tag:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 600\n    lineHeight: 1.2\n\nspacing:\n  pad-slide-lg: \"4rem 5rem\"\n  pad-slide-md: \"3rem 4rem\"\n  pad-card-lg: \"2rem 3rem\"\n  pad-card-md: \"1.5rem\"\n  gap-lg: \"3rem\"\n  gap-md: \"2rem\"\n  gap-sm: \"1.5rem\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  rough-box:\n    border: \"3px solid {colors.text}\"\n    background: \"{colors.bg}\"\n    padding: \"1.5rem\"\n    offsetShadowOffset: \"6px 6px\"\n    offsetShadowBorder: \"2–3px solid {colors.text}\"\n    description: \"Generic content card with a double-stroke effect — the inner box has a 3px solid border, and an absolutely-positioned ::before pseudo-element offsets a second 2–3px border down-and-right by 6–8px to simulate a hand-drawn double outline. No fill on the offset; the canvas shows through.\"\n  filled-block:\n    background: \"{colors.text}\"\n    color: \"{colors.bg}\"\n    padding: \"1.5rem\"\n    description: \"Inverted card: dark charcoal background with peach text. Used as the visual counterpoint to outlined cards in a collage of mixed treatments.\"\n  blob-frame-organic:\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"40% 60% 70% 30% / 40% 50% 60% 50%\"\n    description: \"Organic outlined blob, asymmetric border-radius. Decorative wrapper that holds a smaller solid filled-blob inside it.\"\n  blob-frame-pebble:\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"255px 15px 225px 15px / 15px 225px 15px 255px\"\n    description: \"Pebble-shaped frame with extreme alternating border-radius — two opposing corners pulled long, the other two pinched short. Reads as a hand-drawn lozenge.\"\n  blob-fill:\n    background: \"{colors.text}\"\n    borderRadius: \"60% 40% 30% 70% / 60% 30% 70% 40%\"\n    description: \"Solid dark blob with asymmetric organic radius. Used inside an outlined blob-frame or floating on its own as decorative mass.\"\n  scribble-svg:\n    stroke: \"{colors.text}\"\n    strokeWidth: 2\n    fill: none\n    strokeLinecap: round\n    description: \"Inline SVG path drawn as a single hand-drawn line — wavy stub, scribbled circle, star outline, squiggle, arrow. Always 2px stroke, rounded caps. Placed absolutely in corners and edges as decorative breath.\"\n  doodle-circle:\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"50%\"\n    description: \"Plain round outlined circle used as a decorative anchor in slide corners.\"\n  doodle-rect:\n    border: \"3px solid {colors.text}\"\n    rotation: \"5–10deg\"\n    description: \"Plain outlined rectangle, slightly rotated, used as a decorative anchor in slide corners.\"\n  card-rotated:\n    transform: \"rotate(-3deg to 3deg)\"\n    description: \"Any card or block can carry a small ±3deg rotation. Rotations stagger so adjacent cards rotate in opposite directions — never all in the same direction, never more than 3deg.\"\n  step-node-circle:\n    width: 64px\n    height: 64px\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"50%\"\n    background: \"{colors.bg}\"\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: 1.5rem\n    fontWeight: 800\n    description: \"Round outlined node containing a single numeric digit at display weight. Used as a timeline or process marker; alternates between outlined (bg fill) and filled (charcoal fill, bg text).\"\n  avatar-placeholder:\n    width: 60px\n    height: 60px\n    background: \"{colors.text}\"\n    borderRadius: \"50%\"\n    description: \"Solid dark circle used as a portrait stand-in inside a team or people card.\"\n  tag-pill:\n    background: \"{colors.text}\"\n    color: \"{colors.bg}\"\n    padding: \"0.4rem 0.8rem\"\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 600\n    description: \"Small charcoal pill with peach text, anchored to the bottom-left of an image frame as a category label.\"\n  bar-chart:\n    barFillSolid: \"{colors.text}\"\n    barFillOutlined: \"3px solid {colors.text} + transparent\"\n    axisStroke: \"3px solid {colors.text}\"\n    description: \"Custom HTML bar chart. Bars are either solid charcoal (primary series) or outlined transparent (secondary series). Axes are 3px solid charcoal lines, no grid.\"\n  vertical-text:\n    fontFamily: \"Syne, sans-serif\"\n    fontWeight: 700\n    letterSpacing: 0.1em\n    transform: \"rotate(90deg)\"\n    description: \"Display-weight text rotated 90deg, anchored to a slide edge as a magazine-style spine label.\"\n  ghost-blob:\n    background: \"{colors.text}\"\n    borderRadius: \"40% 60% 70% 30% / 40% 50% 60% 50%\"\n    opacity: 0.08\n    description: \"Oversized organic blob at very low opacity placed behind content as atmospheric wallpaper. Functions like a watermark cloud.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPlayful is a **hand-crafted editorial system** anchored by a single warm canvas — a peach-clay `{colors.bg}` (#F0C8A0) — with charcoal `{colors.text}` (#1A1A1A) as the only meaningful \"color.\" Everything reads as ink-on-clay-paper. There are no secondary brand colors, no gradients, no chromatic accents. The system commits fully to a one-color discipline and finds its expressiveness in shape, weight, rotation, and hand-drawn marks rather than in palette variety.\n\nThe typeface stack is **Syne for display, Space Grotesk for body**. Syne is the personality — a high-contrast display sans with quirky humanist proportions that reads as a contemporary independent studio voice, not a corporate sans. It is used at weights 700 and 800 with tight negative letter-spacing (-0.01em to -0.03em) for every headline, statement, statistic, and number. Space Grotesk is the workhorse — a steady, neutral geometric sans at weight 400–500 for body and 500–600 for labels. The pairing reads as \"expressive editorial built on a reliable grid.\"\n\nThe color philosophy is **monochrome warmth**: a single ink color on a single warm surface, plus two tonal siblings of the canvas (`{colors.bg-alt}` slightly darker for image placeholders, `{colors.light}` slightly lighter for gentle layering). The peach is saturated enough to read as a deliberate aesthetic choice, not a neutral. The ink is slightly softened from pure black (#1A1A1A) to sit comfortably on the warm paper. The system's emotional register is \"studio sketchbook\" — confident but warm, structured but unpolished.\n\nDepth is **double-stroke offset borders** and **hand-drawn marks**, not blurred shadows. The signature treatment: a 3px charcoal border on a card, plus a `::before` pseudo-element offset down-and-right by 6–8px carrying a second 2–3px border — the visual effect is a hand-drawn double outline that suggests imperfect tracing. Combined with small rotations (±0.5deg to ±3deg on cards) and scribbled SVG paths placed in slide corners, the system reads as crafted-by-hand rather than rendered-by-software.\n\n**Density philosophy: medium-low.** Each slide is anchored by a single dominant element — a statement, a chart, a roster — surrounded by deliberate breathing room and one or two decorative scribbles. Crowding the canvas with simultaneous cards, doodles, and copy collapses the hand-touched feeling into clutter. The correct density is one substantive moment per slide with one or two SVG scribbles or organic blobs serving as visual punctuation in the negative space.\n\n**Key Characteristics:**\n- Peach-clay canvas (`{colors.bg}`) with charcoal ink (`{colors.text}`) as the only color. No secondary brand palette.\n- Syne at weight 700–800 with negative letter-spacing for every display and numeric moment; Space Grotesk at 400–500 for body.\n- Double-stroke offset borders on cards — a 3px outline plus a 6–8px offset ghost border via `::before`.\n- Small ±0.5deg to ±3deg rotations on cards, blocks, and statistics for a hand-placed feel.\n- Organic blob shapes with asymmetric border-radius act as decorative frames and fills.\n- Inline 2px-stroke SVG scribbles (squiggles, stars, circles, arrows) live in slide corners as hand-drawn punctuation.\n- No web shadows. Depth comes from double borders, rotation, and ink-density contrast.\n- One dominant element per slide with generous negative space — never wall-to-wall content.\n\n## Colors\n\n### Palette\n- **Background** (`{colors.bg}` — #F0C8A0): The peach-clay canvas. The default surface for every slide. Saturated enough to be the system's signature; warm enough that charcoal ink reads softly rather than starkly.\n- **Background Alt** (`{colors.bg-alt}` — #E8B88E): A slightly darker tonal sibling of the canvas. Used as a fill for image placeholder regions and for subtle surface differentiation when one card needs to read as \"behind\" another without committing to a new color.\n- **Light** (`{colors.light}` — #F7DEC6): A slightly lighter tonal sibling of the canvas. Available for gentle layering when a region needs to lift off the background by a single tonal step without introducing white.\n- **Text/Ink** (`{colors.text}` — #1A1A1A): Charcoal ink — the single non-canvas color in the system. Softened from pure black so it sits as warm ink on warm paper. Used for all body text, all display text, all borders, all SVG strokes, all filled blocks, all dark fills.\n\nThe `accent` alias resolves to `{colors.text}` — the system has no separate accent color. The \"accent\" in Playful is contrast against the canvas, not a third hue.\n\n### Defaults\n- **Default surface background**: `{colors.bg}` — every slide opens on peach-clay.\n- **Default headline color**: `{colors.text}` — always. Headlines are never tinted or recolored.\n- **Default body text color**: `{colors.text}` — sometimes at opacity 0.7–0.9 for de-emphasis, but the underlying color remains charcoal.\n- **Default border color**: `{colors.text}` — every outlined card, blob, doodle, and chart axis is charcoal.\n- **Default text color on filled charcoal blocks**: `{colors.bg}` — peach text on dark surfaces is the only color inversion.\n- **Default image-placeholder fill**: `{colors.bg-alt}` — slightly darker than the canvas so the placeholder reads as a distinct region without using white.\n- **Default decorative-blob fill**: `{colors.text}` at full opacity (foreground) or at 0.08 opacity (atmospheric ghost-blob behind content).\n\nThe system has no concept of \"primary vs secondary color.\" Every visual decision is a binary between canvas (peach) and ink (charcoal), modulated by opacity, scale, and shape.\n\n## Typography\n\n### Font Family\nThe system pairs two carefully chosen Google Fonts:\n\n- **Syne** (display): A contemporary humanist display sans with quirky letterforms, narrow apertures, and slightly compressed proportions. Used at weight 700 and 800 for every display moment — headlines, statements, titles, numerals, vertical labels. Its character is what distinguishes Playful from a generic warm-toned deck: Syne reads as an independent studio voice, not a corporate header.\n- **Space Grotesk** (body): A clean, slightly geometric sans-serif with a friendly humanist warmth. Used at weight 400–500 for body paragraphs, 500–600 for labels and captions. Provides a steady, legible counterweight to Syne's expressiveness.\n\nThere is no third face. Italic and underline are not used. Emphasis comes from weight (700 → 800), size, and the Syne-vs-Space-Grotesk contrast itself.\n\n### Type Scale\n\n| Token | Size (clamp) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-hero}` | 4–9rem | Syne | 800 | Oversized cover or opening date/title |\n| `{typography.display}` | 3–7rem | Syne | 800 | Closing or major declarative headline |\n| `{typography.headline}` | 2.5–5rem | Syne | 700 | Primary section headline |\n| `{typography.statement}` | 2.5–4.5rem | Syne | 700 | Long-form quoted statement or manifesto line |\n| `{typography.title}` | 2–3.5rem | Syne | 700 | Region or section title |\n| `{typography.number-hero}` | 4–7rem | Syne | 800 | Hero statistic numeral |\n| `{typography.number-md}` | 2.5rem | Syne | 800 | Mid-scale ordinal or stat numeral |\n| `{typography.number-sm}` | 2rem | Syne | 800 | Inline ordinal or step numeral |\n| `{typography.title-sm}` | 1.3rem | Syne | 700 | Card title within a small block |\n| `{typography.body-md}` | 1.2rem | Space Grotesk | 500 | Subtitle or emphasized body |\n| `{typography.body}` | 1–1.1rem | Space Grotesk | 400 | Paragraph body |\n| `{typography.label-eyebrow}` | 0.85rem | Space Grotesk | 600 | Section eyebrow above a headline, uppercase tracked |\n| `{typography.caption}` | 0.85rem | Space Grotesk | 500 | Subtitle, fine print, footnote |\n| `{typography.tag}` | 0.75rem | Space Grotesk | 600 | Pill tag text inside a charcoal label |\n\n### Defaults\n- **Default size for a primary section headline**: `{typography.headline}` (2.5–5rem clamp).\n- **Default size for a cover or major opening moment**: `{typography.display-hero}` (4–9rem clamp).\n- **Default size for paragraph body**: `{typography.body}` (1–1.1rem clamp).\n- **Default size for a subtitle or emphasized lead body**: `{typography.body-md}` (1.2rem).\n- **Default size for any inline caption, footnote, or fine print**: `{typography.caption}` (0.85rem).\n- **Default size for a hero numerical figure**: `{typography.number-hero}` (4–7rem clamp).\n- **Default size for a stat tile or ordinal numeral**: `{typography.number-md}` (2.5rem).\n- **Default weight for any display element (headline, statement, title, numeral)**: 700 or 800 — never lower.\n- **Default weight for any body element**: 400 or 500.\n\nWhen unsure between `{typography.title}` and `{typography.headline}` for the primary text on a slide, reach for `{typography.headline}` — `{typography.title}` is for sub-regions within a slide.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every display element is set in Syne.** Headlines, statements, titles, numerals, vertical labels, decorative single-character marks — all Syne. Using Space Grotesk at large sizes is the wrong system signal.\n- **Every Syne element uses negative letter-spacing**: -0.01em to -0.03em depending on size. Syne at default tracking reads as untreated; the negative tracking is what gives display type its tight, compressed personality.\n- **Every body and label element is set in Space Grotesk.** Syne for body paragraphs reads as overwrought.\n- **Eyebrow labels are uppercase with 0.15em letter-spacing.** A label without uppercase + tracked spacing reads as a body fragment, not a label.\n- **Statistics and numerals are always weight 800.** Even mid-scale numerals (2rem) follow the display-weight convention. A weight-500 numeral reads as inventory, not a brag.\n- **Numerals and statistics may carry a small rotation (±0.5deg to ±1deg)** when they sit as standalone stat-items rather than inside a chart or table. The rotation reinforces the hand-placed feeling.\n\n### Typography Principles\nThe system's typographic rhythm comes from the **Syne-vs-Space-Grotesk contrast**, not from mixing weights within a face. A slide that uses only Syne at varying weights reads as monotonous; a slide that uses only Space Grotesk reads as understated to the point of corporate. The correct rhythm is Syne headline + Space Grotesk body, repeated with discipline.\n\nLine-height: tight on display (0.85–1.1), generous on body (1.5–1.7). Never use tight line-height on body or generous line-height on display — both inversions break the rhythm.\n\nItalic does not exist in this system. Underline does not exist. Emphasis is achieved by switching face (body → display) or weight (400 → 700), never by italicizing.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` — full viewport. Every `.slide` is absolutely positioned to fill the viewport, and only the `.active` slide is visible (opacity 1, others at opacity 0). Slide navigation is JS-driven via arrow keys, space, click on next/prev buttons, and touch swipe. A 4px-tall charcoal progress bar runs along the bottom of the viewport, growing to indicate slide position. All sizes use `clamp()` so the layout fluidly scales without breakpoints down to a mobile reflow at 768px.\n\n### Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide-lg}` | 4rem 5rem | Cover, statement, and closing slides — generous outer padding |\n| `{spacing.pad-slide-md}` | 3rem 4rem | Standard content slides — outer padding |\n| `{spacing.pad-card-lg}` | 2rem 3rem | Large card or contact block interior padding |\n| `{spacing.pad-card-md}` | 1.5rem | Standard card interior padding |\n| `{spacing.gap-lg}` | 3rem | Large grid/flex gaps between major regions |\n| `{spacing.gap-md}` | 2rem | Standard grid/flex gaps between cells |\n| `{spacing.gap-sm}` | 1.5rem | Tight inline gaps |\n\n### Chrome\nA fixed 48px×48px navigation cluster sits at bottom-right (prev arrow, slide counter, next arrow — all outlined in 2px charcoal). A 4px-tall charcoal progress bar runs flush along the bottom edge of the viewport. Neither is part of the slide composition; they exist as the deck's persistent presenter chrome and should not be styled against.\n\nThe progress bar and nav buttons are the only persistent UI elements. Slides themselves carry no top bar, no footer chrome, no slide numbers within the canvas.\n\n## Depth and Elevation\n\n### Double-Stroke Offset Border (Primary Technique)\nThe signature depth treatment is a **double-stroke offset border**. A card carries a 3px solid charcoal border, and a `::before` pseudo-element absolutely positioned over the card carries a second 2–3px border offset 6–8px down-and-right. The offset border has no fill — the canvas shows through. The visual effect is a hand-drawn double outline that suggests imperfect tracing, like a pen pulled twice along an edge. This is the system's elevation device; it replaces what most systems would do with a `box-shadow`.\n\n### Rotation (Secondary Technique)\nSmall rotations (±0.5deg to ±3deg) on cards, blocks, statistics, and decorative shapes provide a hand-placed feeling. Rotation directions alternate across adjacent elements — never two cards rotated the same direction next to each other — to suggest someone laid each piece down by hand rather than via a snapped grid.\n\n### Atmospheric Ghost-Blob\nA signature treatment: an oversized organic blob (`{components.ghost-blob}`) filled with charcoal at 0.08 opacity, placed absolutely in a slide corner as atmospheric wallpaper. The blob reads as a soft watermark cloud behind the content. Use sparingly — at most one ghost-blob per slide, anchored to a corner the primary content does not occupy.\n\n### No Web Shadows\nThe system uses **no `box-shadow` blur values, no `drop-shadow`, no rgba shadows**. All apparent depth comes from the double-stroke offset border, rotation, and ink-density contrast. A blurred shadow on any element breaks the hand-crafted aesthetic — the marks should look drawn, not rendered.\n\n## Shapes and Treatment\n\n### Border Radius Scale\n| Value | Use |\n|---|---|\n| 0px | Cards, blocks, tags, image frames, table cells |\n| 50% | Round avatar placeholders, step-node circles, doodle circles |\n| Asymmetric organic (e.g. `40% 60% 70% 30% / 40% 50% 60% 50%`) | Blob frames and blob fills only |\n| Pebble-asymmetric (e.g. `255px 15px 225px 15px / 15px 225px 15px 255px`) | Pebble-shaped frames only |\n\nThe system avoids smooth medium radii (4px, 8px, 12px) — corners are either sharp, perfectly round, or organically blob-shaped. The middle ground reads as a generic web app, which is the wrong signal.\n\n### Border Weights\n- **3px solid `{colors.text}`** — the standard outlined-card and blob-frame border weight.\n- **2–3px solid `{colors.text}`** — the offset ghost-border weight on the `::before` pseudo-element (slightly thinner than the primary).\n- **3px solid `{colors.text}`** — the chart axis weight (X and Y axes on bar charts).\n- **2px solid `{colors.text}`** — the nav-button border weight and the timeline-track horizontal line.\n- **2px stroke** — the standard SVG scribble stroke weight with rounded line-caps.\n\n### Decorative Element Types\n\n**Rough-box card** — A rectangular content card with the signature double-stroke offset border. Background can be canvas peach (default), or solid charcoal (inverted card). Padding from the `{spacing.pad-card-*}` scale. Optional small rotation (±0.5–3deg).\n\n**Organic blob frame** — A decorative outlined wrapper with asymmetric border-radius. Used as a portrait frame or decorative anchor; often holds a smaller solid blob-fill inside. Two characteristic shapes: the wavy organic blob (`{components.blob-frame-organic}`) and the pebble shape (`{components.blob-frame-pebble}`).\n\n**Solid blob fill** — A charcoal organic shape with asymmetric border-radius. Used either inside an outlined blob-frame (creating a frame-and-mass pairing) or floating alone as a decorative mass.\n\n**Scribble SVG** — Inline SVG path drawn as a single 2px-stroke charcoal line with round caps. The vocabulary: wavy stub, star outline, scribbled circle, squiggle waveform, arrow, concentric circles. Placed absolutely in slide corners or edges as decorative breath. Every slide gets at least one scribble; the most populated slides carry two or three.\n\n**Doodle circle / doodle rect** — Plain outlined circle or rectangle, slightly rotated, placed absolutely in slide corners as a minimal decorative anchor. The simpler counterpart to the blob shapes — when a slide needs visual punctuation but a blob would feel too organic.\n\n**Step-node circle** — A 64px round outlined node containing a single digit in Syne 800. Alternates between outlined (canvas fill, charcoal digit) and filled (charcoal fill, canvas digit) in sequence — odd steps filled, even steps outlined, or any consistent pattern.\n\n**Tag pill** — A small charcoal rectangle with peach text at 0.75rem weight 600. Anchored to the bottom-left of an image frame as a category label. The only inverted text-on-charcoal element that is not a full card.\n\n**Vertical spine label** — Syne 700 text at 1.5rem rotated 90deg, anchored to a slide's right edge with 0.1em letter-spacing. Reads as a magazine-spine wayfinder.\n\n**Ghost-blob wallpaper** — Oversized organic blob at 0.08 opacity, placed absolutely in a slide corner as atmospheric wallpaper.\n\n**Connector arrow doodle** — A small SVG sketched arrow (single 2px line with chevron head) used to suggest \"next\" or \"see also\" in the negative space of a slide.\n\n## Do's and Don'ts\n\n### Do\n- Use Syne for every display moment (headline, statement, title, number, vertical label) and Space Grotesk for every body and label. The two-face contrast is the system's typographic rhythm.\n- Apply negative letter-spacing (-0.01em to -0.03em) to every Syne element. Default tracking on Syne reads as untreated.\n- Apply the double-stroke offset border to every primary content card — 3px main outline plus a 6–8px offset ghost border via `::before`. This is the system's signature elevation device.\n- Place a scribbled SVG mark (squiggle, star, circle, arrow) in at least one corner of every slide as hand-drawn breath. The marks are punctuation, not content.\n- Give cards, blocks, and statistics a small ±0.5–3deg rotation. Alternate rotation direction across adjacent elements so nothing reads as snapped to a grid.\n- Use `{colors.text}` (charcoal) as the only ink color. Headlines, body, borders, scribbles, fills — all the same color.\n- Reach for `{colors.bg-alt}` when a region needs to read as a distinct surface without introducing white or a new color.\n- Let negative space breathe. One dominant element per slide plus one or two scribbles is the correct density.\n- Pair an outlined blob frame with a smaller solid blob fill inside it when you need a portrait-like decorative anchor.\n- Place an oversized ghost-blob (charcoal at 0.08 opacity) in a slide corner when the negative space feels empty but a scribble would be too small.\n\n### Don't\n- Don't introduce a third color. The system is peach-canvas + charcoal-ink only. No blues, no reds, no chart-segment palettes — chart bars are solid charcoal or outlined charcoal, never colored.\n- Don't use blurred `box-shadow`. All depth comes from double borders and rotation. A blurred shadow breaks the hand-drawn aesthetic immediately.\n- Don't apply medium border-radius values (4px, 8px, 12px). Corners are sharp, fully round, or organically blob-shaped — nothing between.\n- Don't use Space Grotesk for headlines or display moments. Syne is the personality face; substituting Space Grotesk loses the studio voice.\n- Don't use Syne for body paragraphs. It reads as overwrought at small sizes and at low weights.\n- Don't rotate elements more than 3deg. Beyond ±3deg the hand-placed feeling tips into wonky and amateur.\n- Don't rotate every element in the same direction. Alternate ±directions across adjacent elements; uniformity reads as a tilted canvas, not as hand-placement.\n- Don't crowd a slide with simultaneous cards, statistics, and doodles. The system reads as expensive when sparse and broken when dense.\n- Don't use italic or underline for emphasis. Switch face or weight instead.\n- Don't put display-weight text at default tracking. Always tighten Syne with negative letter-spacing.\n\n## Responsive Behavior\n\nThe system targets `100vw × 100vh` and uses `clamp()` throughout, so type and padding scale fluidly between viewport sizes without media queries. A single media query at `max-width: 768px` reflows multi-column grids to single-column, collapses the horizontal timeline track to vertical, and reduces slide padding to 2rem.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `Space`, or `Enter`.\n- Slides reverse via `ArrowLeft`.\n- The active slide carries the `.active` class; inactive slides are visibility-hidden at opacity 0.\n- Slide transitions use a 0.6s opacity fade.\n- A 4px-tall charcoal progress bar runs along the bottom of the viewport, growing as the deck advances.\n- A bottom-right nav cluster shows prev/next buttons (48px outlined squares) and the current/total slide counter.\n- Touch swipe horizontal on mobile advances/reverses.\n\n### Print Behavior\nNo `@media print` rule is defined. The deck is web/viewport-first; printing will not render correctly without custom print styles.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / headline / numeral (Syne 700–800) | Syne | 站酷快乐体 ZCOOL KuaiLe | 400 (only weight available) |\n| Body / label (Space Grotesk 400–600) | Space Grotesk | 悠哉字体 Yozai | 400 |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. Syne tokens become `\"Syne, ZCOOL KuaiLe, sans-serif\"`; Space Grotesk tokens become `\"Space Grotesk, Yozai, sans-serif\"`. Latin glyphs render in the original face; CJK characters fall through automatically.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Syne:wght@700;800&family=Space+Grotesk:wght@400;500;600;700&family=ZCOOL+KuaiLe&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPlayful is a hand-crafted editorial system built on Syne (quirky humanist display) plus Space Grotesk (warm geometric body) on a peach-clay canvas. The Chinese transfer is exceptionally strong because both Chinese faces selected here carry the same \"warm, hand-touched, independent studio\" register as the Latin pairing.\n\n**站酷快乐体 ZCOOL KuaiLe** is a rounded, friendly Chinese display face with quirky humanist proportions — the closest CDN-available equivalent to Syne's expressive studio voice. At display weights (4–9rem), KuaiLe reads as a contemporary independent Chinese studio voice, not a corporate or formal one. It pairs naturally with the peach canvas and charcoal ink. **Drop the negative letter-spacing (-0.01em to -0.03em) for Chinese display** — KuaiLe is designed on a square em-box and tightening causes glyph collision. The face's intrinsic warmth replaces what negative tracking does for Syne.\n\n**悠哉字体 Yozai** is a Chinese sans-serif designed for relaxed body reading — slightly rounded terminals, friendly humanist proportions, designed to match the warmth that Space Grotesk brings to Latin. Set every Chinese body paragraph and label in Yozai 400. The eyebrow label treatment (0.15em letter-spacing + uppercase in Latin) does not transfer to CJK; for Chinese eyebrows, use Yozai at the same 0.85rem size with letter-spacing 0 and no uppercase — small size alone reads as label.\n\nThe double-stroke offset border, the small ±3deg rotations, the organic blob shapes, the SVG scribbles, the ghost-blob wallpaper — all script-agnostic. The single-color discipline (peach + charcoal) and the hand-crafted aesthetic survive the script switch fully.\n\nThe system's typographic rhythm (Syne-vs-Space-Grotesk contrast) becomes (KuaiLe-vs-Yozai contrast) in pure Chinese — both pairs carry the same \"expressive editorial built on a reliable grid\" rhythm. Statistics and numerals are pure digits and transfer unchanged in Syne 800; only when a stat carries a Chinese unit suffix (`亿`, `万`) does the suffix glyph fall through to KuaiLe.\n\n### Known CJK Gap\n\nZCOOL KuaiLe and Yozai are both single-weight faces (400). The system's reliance on weight contrast (Syne 700 vs 800 for sub-display hierarchy; Space Grotesk 400 vs 500 vs 600 for label hierarchy) collapses to size-only hierarchy in pure Chinese. This is not a meaningful loss — Playful's hierarchy is primarily size-driven anyway, and the missing weight steps don't change the visual rhythm enough to matter. The rotation, scribble, and double-border treatments carry the system's character regardless of weight availability.\n\n## Iteration Guide\n\n1. Any new card uses the rough-box pattern: 3px charcoal border, peach background (or charcoal if inverted), padding from `{spacing.pad-card-*}`, and a `::before` ghost-border offset 6–8px down-and-right at 2–3px weight.\n2. Any new card carries a small rotation (±0.5–3deg). Alternate rotation direction with neighboring cards; never align all cards to the same angle.\n3. Any new headline uses Syne at weight 700–800 with negative letter-spacing. If the headline is the primary slide moment, reach for `{typography.headline}` or `{typography.display}` — not `{typography.title}` (which is sub-region scale).\n4. Any new body or label uses Space Grotesk at weight 400–600. Use `{typography.label-eyebrow}` (0.85rem, weight 600, uppercase, 0.15em tracking) for the small label above a headline.\n5. Any new statistic or numeral uses Syne at weight 800 with negative letter-spacing. Even small numerals (2rem) follow the display-weight convention.\n6. Any new slide gets at least one scribbled SVG mark in a corner — squiggle, star, circle, arrow. Stroke 2px with rounded line-caps in `{colors.text}`.\n7. Any decorative shape uses asymmetric organic border-radius (blob) or sharp 0px (rectangle) or 50% (round). Avoid medium radii.\n8. If the slide negative space feels heavy, add a ghost-blob (charcoal at 0.08 opacity, oversized organic shape) anchored to a corner the content does not occupy.\n9. Charts (bar, donut, line) use only `{colors.text}` and `{colors.bg-alt}` as fills. Do not introduce chromatic chart palettes.\n10. Cards may be either outlined (default — canvas fill, charcoal border, charcoal text) or inverted (charcoal fill, peach text). Inverted cards are the system's emphasis device; reserve them for the cell you want to anchor the slide's attention.\n\n## Known Gaps\n\n- The system loads two Google Fonts (Syne, Space Grotesk) over the network. If fonts fail to load, the fallback sans-serif will render but the system's voice will be lost. Self-hosting is recommended for production.\n- The double-stroke offset border (`::before` with 6–8px offset) requires the parent card to have `position: relative` and the pseudo-element to be visually inside the card's bounding box plus the offset. Cards near a slide edge may have their offset border clipped.\n- The mobile responsive breakpoint at 768px reflows grids but does not adjust the absolutely-positioned decorative SVGs and blobs — they remain at desktop coordinates and may overlap or fall off-screen on small viewports. Treat the responsive behavior as basic, not polished.\n- The peach canvas (#F0C8A0) has a strong cultural register (earthy, warm, slightly rustic). It does not pair well with cool-toned brand palettes and is not interchangeable with a neutral cream or white — the warmth is foundational.\n- Image placeholders (`{colors.bg-alt}` fills with a centered \"IMG 01\" label) are stubs only. Production decks need real images that respect the warm palette; cool-toned photos will fight the canvas.\n- There is no defined dark-mode variant. The system is single-mode (warm peach canvas only).\n- The hover states on nav buttons (background fills to charcoal, text inverts to peach) are interactive presenter-chrome behaviors and are not part of the deck's slide composition.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/playful/preview.md":"# Playful Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/playful/design.md`\n- Preview card: `bold-template-pack/templates/playful/preview.md`\n\n## Selection Metadata\n\n- Slug: `playful`\n- Tagline: Sun-warm peach background with Syne display: a friendly indie launch deck.\n- Mood: warm, approachable, indie, friendly\n- Tone: upbeat, informal, welcoming\n- Formality: low\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel warm, indie, and approachable: creator portfolios, indie product launches, lifestyle brands, small-business pitches, newsletter / community decks. Also welcoming for any deck — including tech or research — that wants to feel friendly and human rather than corporate.\n- Avoid for: Contexts where institutional credibility matters more than warmth — the peach palette is intentionally informal.\n\n## Visual Snapshot\n\nA warm, hand-crafted editorial system built on a peach-clay canvas with charcoal ink as the only \"color.\" Display type runs in Syne (weight 700–800, tight negative tracking); body type runs in Space Grotesk at weight 400–500. The aesthetic borrows from independent studio decks, risograph zines, and sketchbook spreads: organic blob frames, scribbled SVG doodles, slightly rotated cards, and double-stroke offset borders give every slide a hand-touched, unpolished warmth. The effect is creative-studio editorial, not corporate pitch — confident but human, structured but loose.\n\nPlayful is a hand-crafted editorial system anchored by a single warm canvas — a peach-clay {colors.bg} (#F0C8A0) — with charcoal {colors.text} (#1A1A1A) as the only meaningful \"color.\" Everything reads as ink-on-clay-paper. There are no secondary brand colors, no gradients, no chromatic accents. The system commits fully to a one-color discipline and finds its expressiveness in shape, weight, rotation, and hand-drawn marks rather than in palette variety.\n\n## Preview Ingredients\n\n- Palette: bg #F0C8A0; bg-alt #E8B88E; light #F7DEC6; text #1A1A1A\n- Typography: Syne; Space Grotesk\n- Signature move: Peach-clay canvas ({colors.bg}) with charcoal ink ({colors.text}) as the only color. No secondary brand palette.\n- Signature move: Syne at weight 700–800 with negative letter-spacing for every display and numeric moment; Space Grotesk at 400–500 for body.\n- Signature move: Double-stroke offset borders on cards — a 3px outline plus a 6–8px offset ghost border via ::before.\n- Signature move: Small ±0.5deg to ±3deg rotations on cards, blocks, and statistics for a hand-placed feel.\n- Signature move: Organic blob shapes with asymmetric border-radius act as decorative frames and fills.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/raw-grid/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fraw-grid%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/raw-grid/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fraw-grid%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-windows/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-windows%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-windows/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-windows%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-zine/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-zine%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-zine/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-zine%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/sakura-chroma/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsakura-chroma%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/sakura-chroma/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsakura-chroma%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/scatterbrain/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fscatterbrain%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/scatterbrain/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fscatterbrain%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/signal/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsignal%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/signal/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsignal%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/soft-editorial/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsoft-editorial%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/soft-editorial/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsoft-editorial%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/stencil-tablet/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstencil-tablet%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/stencil-tablet/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstencil-tablet%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/studio/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstudio%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/studio/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstudio%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/vellum/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fvellum%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/vellum/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fvellum%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/html-template.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fhtml-template.md -->"},"files":{".claude-plugin/marketplace.json":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=.claude-plugin%2Fmarketplace.json -->","SKILL.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=SKILL.md -->","plugins/frontend-slides/.claude-plugin/plugin.json":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2F.claude-plugin%2Fplugin.json -->","plugins/frontend-slides/skills/frontend-slides/SKILL.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2FSKILL.md -->","plugins/frontend-slides/skills/frontend-slides/STYLE_PRESETS.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2FSTYLE_PRESETS.md -->","plugins/frontend-slides/skills/frontend-slides/animation-patterns.md":"# Animation Patterns Reference\n\nUse this reference when generating presentations. Match animations to the intended feeling.\n\n## Effect-to-Feeling Guide\n\n| Feeling | Animations | Visual Cues |\n|---------|-----------|-------------|\n| **Dramatic / Cinematic** | Slow fade-ins (1-1.5s), large scale transitions (0.9 to 1), parallax scrolling | Dark backgrounds, spotlight effects, full-bleed images |\n| **Techy / Futuristic** | Neon glow (box-shadow), glitch/scramble text, grid reveals | Particle systems (canvas), grid patterns, monospace accents, cyan/magenta/electric blue |\n| **Playful / Friendly** | Bouncy easing (spring physics), floating/bobbing | Rounded corners, pastel/bright colors, hand-drawn elements |\n| **Professional / Corporate** | Subtle fast animations (200-300ms), clean slides | Navy/slate/charcoal, precise spacing, data visualization focus |\n| **Calm / Minimal** | Very slow subtle motion, gentle fades | High whitespace, muted palette, serif typography, generous padding |\n| **Editorial / Magazine** | Staggered text reveals, image-text interplay | Strong type hierarchy, pull quotes, grid-breaking layouts, serif headlines + sans body |\n\n## Entrance Animations\n\n```css\n/* Fade + Slide Up (most versatile) */\n.reveal {\n    opacity: 0;\n    transform: translateY(30px);\n    transition: opacity 0.6s var(--ease-out-expo),\n                transform 0.6s var(--ease-out-expo);\n}\n.visible .reveal {\n    opacity: 1;\n    transform: translateY(0);\n}\n\n/* Scale In */\n.reveal-scale {\n    opacity: 0;\n    transform: scale(0.9);\n    transition: opacity 0.6s, transform 0.6s var(--ease-out-expo);\n}\n\n/* Slide from Left */\n.reveal-left {\n    opacity: 0;\n    transform: translateX(-50px);\n    transition: opacity 0.6s, transform 0.6s var(--ease-out-expo);\n}\n\n/* Blur In */\n.reveal-blur {\n    opacity: 0;\n    filter: blur(10px);\n    transition: opacity 0.8s, filter 0.8s var(--ease-out-expo);\n}\n```\n\n## Background Effects\n\n```css\n/* Gradient Mesh — layered radial gradients for depth */\n.gradient-bg {\n    background:\n        radial-gradient(ellipse at 20% 80%, rgba(120, 0, 255, 0.3) 0%, transparent 50%),\n        radial-gradient(ellipse at 80% 20%, rgba(0, 255, 200, 0.2) 0%, transparent 50%),\n        var(--bg-primary);\n}\n\n/* Noise Texture — inline SVG for grain */\n.noise-bg {\n    background-image: url(\"data:image/svg+xml,...\"); /* Inline SVG noise */\n}\n\n/* Grid Pattern — subtle structural lines */\n.grid-bg {\n    background-image:\n        linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px),\n        linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px);\n    background-size: 50px 50px;\n}\n```\n\n## Interactive Effects\n\n```javascript\n/* 3D Tilt on Hover — adds depth to cards/panels */\nclass TiltEffect {\n    constructor(element) {\n        this.element = element;\n        this.element.style.transformStyle = 'preserve-3d';\n        this.element.style.perspective = '1000px';\n\n        this.element.addEventListener('mousemove', (e) => {\n            const rect = this.element.getBoundingClientRect();\n            const x = (e.clientX - rect.left) / rect.width - 0.5;\n            const y = (e.clientY - rect.top) / rect.height - 0.5;\n            this.element.style.transform = `rotateY(${x * 10}deg) rotateX(${-y * 10}deg)`;\n        });\n\n        this.element.addEventListener('mouseleave', () => {\n            this.element.style.transform = 'rotateY(0) rotateX(0)';\n        });\n    }\n}\n```\n\n## Troubleshooting\n\n| Problem | Fix |\n|---------|-----|\n| Fonts not loading | Check Fontshare/Google Fonts URL; ensure font names match in CSS |\n| Animations not triggering | Verify Intersection Observer is running; check `.visible` class is being added |\n| Scroll snap not working | Ensure `scroll-snap-type: y mandatory` on html; each slide needs `scroll-snap-align: start` |\n| Mobile issues | Disable heavy effects at 768px breakpoint; test touch events; reduce particle count |\n| Performance issues | Use `will-change` sparingly; prefer `transform`/`opacity` animations; throttle scroll handlers |\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/README.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2FREADME.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/selection-index.json":"{\n  \"schema_version\": 1,\n  \"pack_name\": \"Beautiful HTML Templates - Bold Design Pack\",\n  \"source_repo\": \"zarazhangrui/beautiful-html-templates\",\n  \"template_count\": 34,\n  \"usage\": {\n    \"selection\": \"Read this compact index first to shortlist bold templates from metadata.\",\n    \"previews\": \"For title-slide previews, read only the preview_md files for the shortlisted bold candidates.\",\n    \"final_generation\": \"After the user chooses a bold template, read exactly that template design_md before generating the full deck.\",\n    \"never\": \"Do not bulk-read templates/*/design.md and do not read template.html unless the selected design.md is missing a critical implementation detail.\"\n  },\n  \"frontend_slides_policy\": {\n    \"layout_model\": \"fixed-stage\",\n    \"canvas_width\": 1920,\n    \"canvas_height\": 1080,\n    \"scaling\": \"scale-stage-to-viewport\",\n    \"mobile_behavior\": \"preserve 16:9 stage; letterbox or pillarbox instead of reflowing slide content\"\n  },\n  \"templates\": [\n    {\n      \"slug\": \"8-bit-orbit\",\n      \"name\": \"8-Bit Orbit\",\n      \"tagline\": \"Pixel-art neon arcade aesthetic on a deep navy void.\",\n      \"mood\": [\n        \"retro-tech\",\n        \"playful\",\n        \"cyberpunk\",\n        \"energetic\"\n      ],\n      \"tone\": [\n        \"geeky\",\n        \"neon\",\n        \"rebellious\",\n        \"sci-fi\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos. Just as good for a tech talk that wants to lean into nostalgic-digital craft, a synthwave brand deck, or a creative review that wants to feel like a console.\",\n      \"avoid_for\": \"Contexts where the dark neon palette would actively work against the message — quiet institutional finance disclosures, healthcare patient-facing materials, traditional luxury.\",\n      \"preview_md\": \"bold-template-pack/templates/8-bit-orbit/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/8-bit-orbit/design.md\"\n    },\n    {\n      \"slug\": \"biennale-yellow\",\n      \"name\": \"Biennale Yellow\",\n      \"tagline\": \"Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients.\",\n      \"mood\": [\n        \"editorial\",\n        \"atmospheric\",\n        \"warm\",\n        \"cultural-institution\",\n        \"poster-like\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"contemplative\",\n        \"warm-modern\",\n        \"Dutch-editorial\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, studio retrospectives. Equally good for any deck wanting Dutch-editorial atmosphere with an unmistakable single-color signature.\",\n      \"avoid_for\": \"Decks that need visual punch or saturated multi-color energy — the warm-paper canvas and one-yellow palette are intentionally quiet and atmospheric.\",\n      \"preview_md\": \"bold-template-pack/templates/biennale-yellow/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/biennale-yellow/design.md\"\n    },\n    {\n      \"slug\": \"block-frame\",\n      \"name\": \"BlockFrame\",\n      \"tagline\": \"Neobrutalist deck with pastel-neon color blocks and chunky black borders.\",\n      \"mood\": [\n        \"bold\",\n        \"playful\",\n        \"graphic\",\n        \"fresh\"\n      ],\n      \"tone\": [\n        \"confident\",\n        \"graphic\",\n        \"pop\",\n        \"design-led\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns. Also a strong unexpected pick for tech, finance, or research when the speaker wants to land as confident and contemporary rather than buttoned-up.\",\n      \"avoid_for\": \"Contexts that require quiet institutional restraint or traditional weight (regulated disclosures, formal legal briefs).\",\n      \"preview_md\": \"bold-template-pack/templates/block-frame/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/block-frame/design.md\"\n    },\n    {\n      \"slug\": \"blue-professional\",\n      \"name\": \"Blue Professional\",\n      \"tagline\": \"Cream paper background with electric cobalt blue accents; clean modern professional.\",\n      \"mood\": [\n        \"professional\",\n        \"modern\",\n        \"calm\",\n        \"trustworthy\"\n      ],\n      \"tone\": [\n        \"clean\",\n        \"considered\",\n        \"polished\",\n        \"neutral\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports. Also a clean, tasteful choice whenever you want to read as professional without going stiff — research synthesis, internal reviews, brand work for service businesses.\",\n      \"avoid_for\": \"Contexts where the deck should feel hot, playful, or intentionally informal — the cool electric-blue restraint will read as overly polished.\",\n      \"preview_md\": \"bold-template-pack/templates/blue-professional/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/blue-professional/design.md\"\n    },\n    {\n      \"slug\": \"bold-poster\",\n      \"name\": \"Bold Poster\",\n      \"tagline\": \"Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent.\",\n      \"mood\": [\n        \"bold\",\n        \"editorial\",\n        \"loud\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"dramatic\",\n        \"graphic\",\n        \"sharp\",\n        \"intentional\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews. Excellent any time you want a few words to feel like a poster — including unexpected fits like a tech keynote or a finance manifesto that wants to be quotable.\",\n      \"avoid_for\": \"Decks that need to communicate dense information per slide — the layout is built around a few large statements, not paragraphs of detail.\",\n      \"preview_md\": \"bold-template-pack/templates/bold-poster/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/bold-poster/design.md\"\n    },\n    {\n      \"slug\": \"broadside\",\n      \"name\": \"Broadside\",\n      \"tagline\": \"Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack.\",\n      \"mood\": [\n        \"editorial\",\n        \"dramatic\",\n        \"loud\",\n        \"newspaper\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"punchy\",\n        \"literary\",\n        \"considered\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements. Also a striking pick for tech, research, or business decks that want a dramatic single-accent editorial feel.\",\n      \"avoid_for\": \"Decks that need to feel quiet, warm, or institutionally traditional — the dark canvas with fire-orange accent commits to drama.\",\n      \"preview_md\": \"bold-template-pack/templates/broadside/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/broadside/design.md\"\n    },\n    {\n      \"slug\": \"capsule\",\n      \"name\": \"Capsule\",\n      \"tagline\": \"Modular pill-shaped cards on warm bone with a full pastel-pop palette.\",\n      \"mood\": [\n        \"playful\",\n        \"modern\",\n        \"warm\",\n        \"fresh\",\n        \"fun\"\n      ],\n      \"tone\": [\n        \"upbeat\",\n        \"graphic\",\n        \"approachable\",\n        \"cool\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials. Also fun for a playful tech demo or a research deck that wants pop-art clarity instead of gravitas.\",\n      \"avoid_for\": \"Contexts that require traditional institutional weight — the capsule shapes and pastel pops actively soften authority.\",\n      \"preview_md\": \"bold-template-pack/templates/capsule/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/capsule/design.md\"\n    },\n    {\n      \"slug\": \"cartesian\",\n      \"name\": \"Cartesian\",\n      \"tagline\": \"Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried.\",\n      \"mood\": [\n        \"quiet\",\n        \"considered\",\n        \"elegant\",\n        \"warm-minimal\"\n      ],\n      \"tone\": [\n        \"classical\",\n        \"literary\",\n        \"restrained\",\n        \"confident-quiet\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks. Also a strong choice for editorial features, founder reflections, or any deck where restraint is the message — including across tech and finance.\",\n      \"avoid_for\": \"Decks that need visual heat, multiple accents, or a sense of urgency — the warm-neutral palette is intentionally low-energy.\",\n      \"preview_md\": \"bold-template-pack/templates/cartesian/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/cartesian/design.md\"\n    },\n    {\n      \"slug\": \"cobalt-grid\",\n      \"name\": \"Cobalt Grid\",\n      \"tagline\": \"Electric cobalt serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules.\",\n      \"mood\": [\n        \"editorial\",\n        \"design-research\",\n        \"studious\",\n        \"modernist\",\n        \"tech-print\",\n        \"monochrome\"\n      ],\n      \"tone\": [\n        \"considered\",\n        \"literary\",\n        \"studious\",\n        \"quietly-modern\",\n        \"editorial\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report. Strong for studio annuals, agency capabilities decks, design-research publications, architecture / art / academic decks, and any deck wanting one strict accent colour and a printed-ledger calmness rather than corporate polish.\",\n      \"avoid_for\": \"Decks that need warmth, multi-colour energy, or a casual / playful voice — the strict cobalt + cream + grid palette is intentionally austere.\",\n      \"preview_md\": \"bold-template-pack/templates/cobalt-grid/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/cobalt-grid/design.md\"\n    },\n    {\n      \"slug\": \"coral\",\n      \"name\": \"Coral\",\n      \"tagline\": \"Cream and coral on near-black, set in oversized Bebas Neue.\",\n      \"mood\": [\n        \"bold\",\n        \"warm\",\n        \"modern\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"punchy\",\n        \"magazine\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials. Just as strong for a creator portfolio, a manifesto, or a tech / research deck that wants warmth and a single bold accent instead of corporate cool.\",\n      \"avoid_for\": \"Contexts that should feel quiet or institutional — the coral accent and oversized Bebas Neue commit hard to a confident magazine voice.\",\n      \"preview_md\": \"bold-template-pack/templates/coral/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/coral/design.md\"\n    },\n    {\n      \"slug\": \"creative-mode\",\n      \"name\": \"Creative Mode\",\n      \"tagline\": \"Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display.\",\n      \"mood\": [\n        \"creative\",\n        \"confident\",\n        \"playful\",\n        \"design-led\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"expressive\",\n        \"modern\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium-high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews. Also a great unexpected pick for a tech talk, research findings, or finance review when the speaker wants to lead with taste rather than convention.\",\n      \"avoid_for\": \"Contexts that demand institutional restraint and a quiet authority — the saturated multi-accent palette will read as expressive, not formal.\",\n      \"preview_md\": \"bold-template-pack/templates/creative-mode/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/creative-mode/design.md\"\n    },\n    {\n      \"slug\": \"daisy-days\",\n      \"name\": \"Daisy Days\",\n      \"tagline\": \"Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm.\",\n      \"mood\": [\n        \"cheerful\",\n        \"playful\",\n        \"warm\",\n        \"sunny\",\n        \"wholesome\"\n      ],\n      \"tone\": [\n        \"friendly\",\n        \"soft\",\n        \"encouraging\",\n        \"approachable\",\n        \"lighthearted\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration. Also lovely for an unexpected playful internal kickoff, a wedding planning deck, or any moment where warmth is the message — including across tech or business contexts.\",\n      \"avoid_for\": \"Contexts where the audience explicitly expects authority and precision — the hand-drawn pastel SVG decorations are the opposite of buttoned-up.\",\n      \"preview_md\": \"bold-template-pack/templates/daisy-days/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/daisy-days/design.md\"\n    },\n    {\n      \"slug\": \"editorial-forest\",\n      \"name\": \"Editorial Forest\",\n      \"tagline\": \"Forest green, dusty pink, and warm cream meet Source Serif 4 in a quiet, intentional quarterly-review deck.\",\n      \"mood\": [\n        \"editorial\",\n        \"quiet\",\n        \"considered\",\n        \"warm\",\n        \"intentional\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"thoughtful\",\n        \"warm\",\n        \"low-pressure\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like a considered editorial — quarterly reviews, internal readouts, studio updates, creative-agency presentations. Equally good for any deck that wants to feel warm and unhurried rather than corporate, including research recaps, book or program announcements, and team retrospectives.\",\n      \"avoid_for\": \"Contexts that need to feel urgent, punchy, or sales-driven — the palette and rhythm are intentionally quiet.\",\n      \"preview_md\": \"bold-template-pack/templates/editorial-forest/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/editorial-forest/design.md\"\n    },\n    {\n      \"slug\": \"editorial-tri-tone\",\n      \"name\": \"Editorial Tri-Tone\",\n      \"tagline\": \"Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif.\",\n      \"mood\": [\n        \"editorial\",\n        \"warm\",\n        \"intentional\",\n        \"moody\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"warm\",\n        \"considered\",\n        \"stylish\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews. Equally good for any deck — including tech, research, or business — that wants tri-tone discipline and serif/sans contrast instead of the usual neutrals.\",\n      \"avoid_for\": \"Decks that need to read as soft or comforting — the burgundy/pink/cream tri-tone is intentionally high-contrast and styled.\",\n      \"preview_md\": \"bold-template-pack/templates/editorial-tri-tone/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/editorial-tri-tone/design.md\"\n    },\n    {\n      \"slug\": \"emerald-editorial\",\n      \"name\": \"Emerald Editorial\",\n      \"tagline\": \"A magazine-cover business deck: emerald + navy + paper, double-rule masthead ornaments, and a bold Bodoni-style display serif.\",\n      \"mood\": [\n        \"editorial\",\n        \"considered\",\n        \"confident\",\n        \"magazine-cover\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"authoritative\",\n        \"warm\",\n        \"designed\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like the front of a serious magazine, including but not limited to leadership readouts, planning-office reviews, and strategy briefings. The double-rule masthead ornament gives it editorial gravitas without making it stiff — also a great unexpected pick for product launches or research recaps that want to feel considered rather than corporate.\",\n      \"avoid_for\": \"Contexts that need to read as quiet, neutral, or institutionally restrained — the emerald field is too saturated to disappear into the background.\",\n      \"preview_md\": \"bold-template-pack/templates/emerald-editorial/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/emerald-editorial/design.md\"\n    },\n    {\n      \"slug\": \"grove\",\n      \"name\": \"Grove\",\n      \"tagline\": \"Forest-green canvas with cream type, classical Playfair serifs, and a single rust accent.\",\n      \"mood\": [\n        \"organic\",\n        \"considered\",\n        \"warm\",\n        \"literary\",\n        \"natural\"\n      ],\n      \"tone\": [\n        \"classical\",\n        \"warm\",\n        \"considered\",\n        \"patient\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel organic, considered, and grown-up: sustainability and wellness brands, outdoor / nature products, wineries and restaurants, literary or arts decks, advisory deliverables, bilingual EN/CN reports. Also a calm, distinctive choice for tech, research, or business decks that want patience over urgency.\",\n      \"avoid_for\": \"Decks that need neon energy or rapid-fire pop — the forest-green canvas and Playfair serif commit to a slow, classical voice.\",\n      \"preview_md\": \"bold-template-pack/templates/grove/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/grove/design.md\"\n    },\n    {\n      \"slug\": \"long-table\",\n      \"name\": \"Long Table\",\n      \"tagline\": \"Warm cream and rust-red supper-club aesthetic with bold uppercase grotesk headlines, Fraunces serifs, and pill-shaped outlined buttons.\",\n      \"mood\": [\n        \"warm\",\n        \"intimate\",\n        \"modern\",\n        \"friendly\",\n        \"small-batch\",\n        \"social\",\n        \"hospitality\"\n      ],\n      \"tone\": [\n        \"warm\",\n        \"playful\",\n        \"considered\",\n        \"social\",\n        \"magazine-friendly\",\n        \"modern-editorial\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a warm, intimate, modern hospitality / community brand: supper clubs, dinner series, small restaurants, creative-studio events, membership pitches, lifestyle and wine brands. Equally good for any deck wanting a single warm accent colour, mixed-weight typography, and a social-media-aware modern-editorial voice.\",\n      \"avoid_for\": \"Decks that need corporate polish, technical density, or a cold / minimalist register — the rust-red palette and bold serif mix are intentionally warm and people-facing.\",\n      \"preview_md\": \"bold-template-pack/templates/long-table/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/long-table/design.md\"\n    },\n    {\n      \"slug\": \"mat\",\n      \"name\": \"Mat\",\n      \"tagline\": \"Dark sage canvas with bone paper and burnt-orange accent; mid-century modern with wood undertones.\",\n      \"mood\": [\n        \"warm-modern\",\n        \"considered\",\n        \"tactile\",\n        \"mid-century\"\n      ],\n      \"tone\": [\n        \"warm\",\n        \"design-led\",\n        \"intentional\",\n        \"considered\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel mid-century, tactile, and intentional: design studio credentials, architecture / interior brands, ceramics / craft / furniture, advisory decks. Also a warm, distinctive choice for tech, research, or business decks that want a considered analog feel instead of digital-cool.\",\n      \"avoid_for\": \"Contexts that need fast tech energy or institutional restraint — the muted sage and burnt-orange palette is intentionally warm and slow.\",\n      \"preview_md\": \"bold-template-pack/templates/mat/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/mat/design.md\"\n    },\n    {\n      \"slug\": \"monochrome\",\n      \"name\": \"Monochrome\",\n      \"tagline\": \"Ivory ledger paper with all-black type; Lora serif headlines, Jost body, no color at all.\",\n      \"mood\": [\n        \"restrained\",\n        \"literary\",\n        \"archival\",\n        \"ledger\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"neutral\",\n        \"honest\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a hand-typeset ledger: user research synthesis, white papers, longform reports, academic and policy briefs, advisory deliverables, bilingual EN/CN reports. Equally good for tech, design, or brand decks that want their words to be the only thing on the page.\",\n      \"avoid_for\": \"Decks that need visual personality or color-led storytelling — the all-ink palette is intentionally austere.\",\n      \"preview_md\": \"bold-template-pack/templates/monochrome/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/monochrome/design.md\"\n    },\n    {\n      \"slug\": \"neo-grid-bold\",\n      \"name\": \"Neo-Grid Bold\",\n      \"tagline\": \"Editorial neo-brutalism with a single neon yellow accent on off-white paper.\",\n      \"mood\": [\n        \"confident\",\n        \"punchy\",\n        \"editorial\",\n        \"modern\"\n      ],\n      \"tone\": [\n        \"bold\",\n        \"minimal\",\n        \"design-led\",\n        \"graphic\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel confident and editorial-graphic: design-led pitches, brand work, founder talks, conference keynotes. Excellent for stat-heavy slides, comparisons, and process flows. Just as strong for tech, research, or finance when the speaker wants to read as design-led rather than corporate.\",\n      \"avoid_for\": \"Contexts that need to feel quiet, traditional, or warm — the neon-yellow accent and uppercase display commit to a confident editorial voice.\",\n      \"preview_md\": \"bold-template-pack/templates/neo-grid-bold/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/neo-grid-bold/design.md\"\n    },\n    {\n      \"slug\": \"peoples-platform\",\n      \"name\": \"People's Platform (Block & Bold)\",\n      \"tagline\": \"Activist poster energy: blue, orange, red on cream, with Alfa Slab + Caveat Brush.\",\n      \"mood\": [\n        \"activist\",\n        \"loud\",\n        \"graphic\",\n        \"honest\"\n      ],\n      \"tone\": [\n        \"punchy\",\n        \"direct\",\n        \"expressive\",\n        \"warm-bold\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium-high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel honest, loud, and graphic: cultural commentary, manifestos, civic and community decks, design talks, campaign pitches. Excellent for founder-vision moments, mission statements, or any deck — including across industries — that wants protest-poster energy instead of corporate polish.\",\n      \"avoid_for\": \"Contexts where institutional restraint is the actual goal — the saturated political-poster palette commits hard to expressive energy.\",\n      \"preview_md\": \"bold-template-pack/templates/peoples-platform/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/peoples-platform/design.md\"\n    },\n    {\n      \"slug\": \"pin-and-paper\",\n      \"name\": \"Pin & Paper\",\n      \"tagline\": \"Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture.\",\n      \"mood\": [\n        \"crafted\",\n        \"handmade\",\n        \"warm\",\n        \"thoughtful\",\n        \"literary\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"intimate\",\n        \"warm\",\n        \"grounded\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel hand-crafted, warm, and literary: qualitative research findings, founder reflections, longform brand stories, workshop debriefs. The signature safety-pin illustrations and paper-grain texture make it especially good for any deck — including tech or business — that wants personality and warmth over polish.\",\n      \"avoid_for\": \"Decks that need to feel digital-native polished or rigorously data-driven — handwritten Caveat is intentionally informal.\",\n      \"preview_md\": \"bold-template-pack/templates/pin-and-paper/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/pin-and-paper/design.md\"\n    },\n    {\n      \"slug\": \"pink-script\",\n      \"name\": \"Pink Script — After Hours\",\n      \"tagline\": \"Black canvas, hot pink accent, pearl-cream paper, Instrument Serif headlines: late-night editorial luxury.\",\n      \"mood\": [\n        \"nocturnal\",\n        \"moody\",\n        \"intentional\",\n        \"luxe\",\n        \"expressive\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"sultry\",\n        \"considered\",\n        \"magazine\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"low\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel nocturnal, intentional, and a little luxe: fashion brand decks, creator personal brands, after-hours / nightlife / spirits launches, luxury product reveals, editorial features. Also a striking unexpected pick for a tech keynote, research synthesis, or business pitch that wants to land with magnetic confidence.\",\n      \"avoid_for\": \"Daytime corporate-professional and traditional B2B contexts where the dark canvas with hot-pink accent reads as too styled or too expressive.\",\n      \"preview_md\": \"bold-template-pack/templates/pink-script/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/pink-script/design.md\"\n    },\n    {\n      \"slug\": \"playful\",\n      \"name\": \"Playful\",\n      \"tagline\": \"Sun-warm peach background with Syne display: a friendly indie launch deck.\",\n      \"mood\": [\n        \"warm\",\n        \"approachable\",\n        \"indie\",\n        \"friendly\"\n      ],\n      \"tone\": [\n        \"upbeat\",\n        \"informal\",\n        \"welcoming\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel warm, indie, and approachable: creator portfolios, indie product launches, lifestyle brands, small-business pitches, newsletter / community decks. Also welcoming for any deck — including tech or research — that wants to feel friendly and human rather than corporate.\",\n      \"avoid_for\": \"Contexts where institutional credibility matters more than warmth — the peach palette is intentionally informal.\",\n      \"preview_md\": \"bold-template-pack/templates/playful/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/playful/design.md\"\n    },\n    {\n      \"slug\": \"raw-grid\",\n      \"name\": \"Raw Grid\",\n      \"tagline\": \"Neo-brutalist deck with thick borders, offset shadows, and a pink/sage/ink palette.\",\n      \"mood\": [\n        \"raw\",\n        \"punchy\",\n        \"energetic\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"direct\",\n        \"modern\",\n        \"no-nonsense\",\n        \"graphic\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel direct and graphic-confident: founder pitches, accelerator demos, brand decks, indie launches, creator portfolios. Strong for stat slides, comparison tables, and process flows. Equally good for tech, research, or finance when the speaker wants the deck to feel scrappy-confident rather than buttoned-up.\",\n      \"avoid_for\": \"Contexts that need to feel soft, warm, or intentionally quiet — the brutalist borders and offset shadows commit to a graphic voice.\",\n      \"preview_md\": \"bold-template-pack/templates/raw-grid/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/raw-grid/design.md\"\n    },\n    {\n      \"slug\": \"retro-windows\",\n      \"name\": \"Retro Windows\",\n      \"tagline\": \"Windows 95 chrome: gray title bars, MS Sans Serif, pixel typography, full nostalgia.\",\n      \"mood\": [\n        \"nostalgic\",\n        \"retro\",\n        \"geeky\",\n        \"playful\"\n      ],\n      \"tone\": [\n        \"winking\",\n        \"nostalgic\",\n        \"geeky\",\n        \"fun\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel knowingly nostalgic: retro gaming, Y2K-aesthetic brands, creator portfolios with a 90s vibe, tech-history talks, deliberately tongue-in-cheek decks. A great choice anywhere a playful retro reference is the entire point.\",\n      \"avoid_for\": \"Decks that need to read as modern, elegant, or institutionally credible — the Win95 chrome will always read as a costume.\",\n      \"preview_md\": \"bold-template-pack/templates/retro-windows/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/retro-windows/design.md\"\n    },\n    {\n      \"slug\": \"retro-zine\",\n      \"name\": \"Retro Zine\",\n      \"tagline\": \"Beige paper with green accent and Bebas Neue + Caveat: a riso-printed zine in HTML form.\",\n      \"mood\": [\n        \"crafted\",\n        \"lo-fi\",\n        \"underground\",\n        \"warm-retro\"\n      ],\n      \"tone\": [\n        \"scrappy\",\n        \"warm\",\n        \"intentional\",\n        \"DIY\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel printed, lo-fi, and crafted: indie zines and publications, music / arts brands, creator portfolios, small-batch craft launches, community decks. Also a great underdog choice for tech, research, or business decks that want a riso-print warmth instead of digital polish.\",\n      \"avoid_for\": \"Contexts that demand digital-native polish or fast modern-tech energy — the layered zine aesthetic intentionally feels handmade.\",\n      \"preview_md\": \"bold-template-pack/templates/retro-zine/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/retro-zine/design.md\"\n    },\n    {\n      \"slug\": \"sakura-chroma\",\n      \"name\": \"Sakura Chroma\",\n      \"tagline\": \"Vintage Japanese cassette-package aesthetic: cream paper, diagonal rainbow ribbons, condensed bold type, JIS-style spec checkboxes.\",\n      \"mood\": [\n        \"retro\",\n        \"playful\",\n        \"kawaii-tech\",\n        \"warm\",\n        \"tactile\",\n        \"product-catalogue\"\n      ],\n      \"tone\": [\n        \"playful\",\n        \"confident\",\n        \"warm\",\n        \"tactile\",\n        \"80s-Japanese-tech\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a vintage Japanese cassette package or a TDK / Sony / Sakura Color product catalogue: indie hardware brand decks, music-label release schedules, analog studio retrospectives, zine and magazine pitches, kawaii-tech product launches, creative-studio annual reports. Equally good for any deck wanting bold colour, condensed display type, and a tactile printed-product personality.\",\n      \"avoid_for\": \"Decks that need restrained, corporate, or quiet typography — the bold condensed lockups, ribbon stripes, and primary-colour palette are intentionally loud and product-page-y.\",\n      \"preview_md\": \"bold-template-pack/templates/sakura-chroma/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/sakura-chroma/design.md\"\n    },\n    {\n      \"slug\": \"scatterbrain\",\n      \"name\": \"Scatterbrain\",\n      \"tagline\": \"Post-it inspired: pastel sticky notes, Caveat handwriting, Shrikhand and Zilla Slab type stack.\",\n      \"mood\": [\n        \"playful\",\n        \"creative\",\n        \"warm\",\n        \"messy-on-purpose\",\n        \"workshop\"\n      ],\n      \"tone\": [\n        \"informal\",\n        \"warm\",\n        \"expressive\",\n        \"human\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a designer's whiteboard: brainstorms, workshops, creative-agency credentials, design-thinking sessions, ideation pitches, art-direction reviews. Equally fun for any deck — including tech, research, or business — that wants to read as in-progress thinking rather than polished conclusions.\",\n      \"avoid_for\": \"Contexts that demand precision and institutional weight — the post-it sticky-note aesthetic intentionally reads as warm and unfinished.\",\n      \"preview_md\": \"bold-template-pack/templates/scatterbrain/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/scatterbrain/design.md\"\n    },\n    {\n      \"slug\": \"signal\",\n      \"name\": \"Signal\",\n      \"tagline\": \"Deep navy canvas with bone paper and a single muted-gold accent; institutional with quiet weight.\",\n      \"mood\": [\n        \"institutional\",\n        \"trustworthy\",\n        \"considered\",\n        \"weighty\"\n      ],\n      \"tone\": [\n        \"sober\",\n        \"polished\",\n        \"established\",\n        \"literary\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"high\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel weighty, considered, and credibly institutional: investor decks, board presentations, consulting deliverables, legal / policy briefs, advisory pitches. Also a strong choice for tech, research, or brand work that wants to read as quietly authoritative rather than loud.\",\n      \"avoid_for\": \"Contexts that should feel hot, fast, or intentionally playful — the navy + gold restraint commits to a sober voice.\",\n      \"preview_md\": \"bold-template-pack/templates/signal/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/signal/design.md\"\n    },\n    {\n      \"slug\": \"soft-editorial\",\n      \"name\": \"Soft Editorial\",\n      \"tagline\": \"Cormorant Garamond serif on warm paper with sage, blush, and lemon accents.\",\n      \"mood\": [\n        \"literary\",\n        \"elegant\",\n        \"quiet\",\n        \"warm-classical\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"warm\",\n        \"magazine\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel literary, elegant, and unhurried: editorial features, longform brand stories, gallery / museum decks, advisory deliverables, wedding / lifestyle media, founder essays. Equally good for tech, research, or business decks that want a Sunday-supplement warmth instead of corporate polish.\",\n      \"avoid_for\": \"Decks that need visual heat or punch — the warm-paper palette and Cormorant serif are intentionally quiet.\",\n      \"preview_md\": \"bold-template-pack/templates/soft-editorial/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/soft-editorial/design.md\"\n    },\n    {\n      \"slug\": \"stencil-tablet\",\n      \"name\": \"Stencil & Tablet\",\n      \"tagline\": \"Bone paper with stencil-cut headlines and a six-color earth palette: archaeology meets brand.\",\n      \"mood\": [\n        \"archival\",\n        \"earthy\",\n        \"tactile\",\n        \"considered\",\n        \"graphic\"\n      ],\n      \"tone\": [\n        \"weighty\",\n        \"considered\",\n        \"tactile\",\n        \"literary\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel archival, tactile, and weighty-graphic: museum and cultural-institution decks, art / architecture brands, longform research, heritage and craft brands, manifestos. A great choice anytime — including across tech and business — when you want the deck to feel like a field manual rather than a slide deck.\",\n      \"avoid_for\": \"Contexts that demand digital-native polish or playful pop — the stencil-cut display and earth-tone palette commit to a deliberate analog feel.\",\n      \"preview_md\": \"bold-template-pack/templates/stencil-tablet/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/stencil-tablet/design.md\"\n    },\n    {\n      \"slug\": \"studio\",\n      \"name\": \"Studio\",\n      \"tagline\": \"Black canvas with electric-yellow type; high-voltage design studio aesthetic.\",\n      \"mood\": [\n        \"electric\",\n        \"bold\",\n        \"graphic\",\n        \"design-led\",\n        \"high-contrast\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"loud\",\n        \"modern\",\n        \"intentional\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel electric and design-led: studio credentials, creative agency pitches, brand showcases, art-direction reviews, fashion / sneaker brand work. Also a striking unexpected choice for tech, research, or business decks where the speaker wants the deck to *be* a brand statement.\",\n      \"avoid_for\": \"Contexts that should feel quiet or institutional — the black-and-electric-yellow palette is the loudest in the library.\",\n      \"preview_md\": \"bold-template-pack/templates/studio/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/studio/design.md\"\n    },\n    {\n      \"slug\": \"vellum\",\n      \"name\": \"Vellum\",\n      \"tagline\": \"Deep navy canvas with warm-yellow Cormorant serifs and a single dusty teal accent. A quiet, scholarly aesthetic.\",\n      \"mood\": [\n        \"scholarly\",\n        \"literary\",\n        \"considered\",\n        \"quiet\",\n        \"intellectual\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"patient\",\n        \"intelligent\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel scholarly, literary, and quietly intelligent: research synthesis, white papers, academic and policy briefs, advisory deliverables, longform editorial pieces, founder reflections. Equally strong for any deck — including tech, business, or creator work — that wants a calm, considered atmosphere instead of energetic visuals.\",\n      \"avoid_for\": \"Contexts that need visual heat or pop — the navy + warm-yellow Cormorant aesthetic is intentionally low-tempo.\",\n      \"preview_md\": \"bold-template-pack/templates/vellum/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/vellum/design.md\"\n    }\n  ]\n}\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/design.md":"---\nversion: alpha\nname: 8-Bit Orbit\ndescription: A retro-futuristic pixel-art presentation system that fuses 16-bit arcade nostalgia with editorial discipline. Display type runs in Tektur (a chunky geometric display face built on pixel-grid logic) paired with Chakra Petch for body and Space Mono for code-flavored labels and tabular data. The palette pivots on a deep cosmic navy (`#0F1B3D` / `#0A0E27`) lit by three saturated neons — cyan, hot pink, and a high-key yellow — with a soft lavender pastel for warm reprieves. Depth is built from stacked hard offset shadows in 4px increments (the pixel unit), CRT scanlines, atmospheric grain, vignettes, and animated starfields. The effect sits between an arcade cabinet and a Tron-era boardroom — unmistakably digital, intentionally lo-fi, and engineered to feel as if it just booted up.\n\ncolors:\n  dark-void: \"#0A0E27\"\n  deep-navy: \"#0F1B3D\"\n  neon-cyan: \"#5EDCF4\"\n  neon-pink: \"#F0A6CA\"\n  neon-yellow: \"#F4D03F\"\n  soft-lavender: \"#E2D5F2\"\n  white: \"#FFFFFF\"\n\nshadows:\n  pixel-stack-cyan-yellow: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}, 8px 4px 0 0 {colors.neon-yellow}, 4px 8px 0 0 {colors.neon-yellow}, 8px 8px 0 0 {colors.neon-yellow}\"\n  pixel-stack-pink-cyan: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}, 8px 4px 0 0 {colors.neon-cyan}, 4px 8px 0 0 {colors.neon-cyan}, 8px 8px 0 0 {colors.neon-cyan}\"\n  pixel-l-shape: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}\"\n  pixel-text-shadow: \"4px 4px 0 {colors.neon-yellow}, 8px 8px 0 {colors.deep-navy}\"\n  pixel-text-shadow-small: \"3px 3px 0 {colors.deep-navy}\"\n  card-offset: \"6px 6px 0 rgba(15, 27, 61, 0.15)\"\n  card-featured: \"8px 8px 0 {colors.neon-yellow}\"\n\ntypography:\n  pixel-hero:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(48px, 10vw, 128px)\"\n    fontWeight: 900\n    lineHeight: 1.05\n    letterSpacing: 0.04em\n  display:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(32px, 5vw, 64px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  headline:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(24px, 3.5vw, 45px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  subhead:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(17.6px, 2vw, 24px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  stat-number:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(32px, 4vw, 56px)\"\n    fontWeight: 900\n    lineHeight: 1\n  body:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(14.4px, 1.2vw, 18.4px)\"\n    fontWeight: 400\n    lineHeight: 1.7\n  hero-tagline:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(14.4px, 1.5vw, 19.2px)\"\n    fontWeight: 400\n    lineHeight: 1.8\n  quote-body:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(17.6px, 2.2vw, 25.6px)\"\n    fontWeight: 500\n    lineHeight: 1.8\n  label-pill:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12px\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 0.2em\n    textTransform: uppercase\n  label-eyebrow:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 13.6px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.3em\n    textTransform: uppercase\n  badge:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  chart-value:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12px\n    fontWeight: 700\n    lineHeight: 1\n  chart-label:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.05em\n  date-chip:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n  counter:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12.8px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.15em\n\nspacing:\n  pixel-unit: 4px\n  pad-slide-y: \"3vh\"\n  pad-slide-x: \"4vw\"\n  pad-card-lg: \"32px 40px\"\n  pad-card-md: \"28px\"\n  pad-card-sm: \"16px 20px\"\n  gap-grid-lg: 32px\n  gap-grid-md: 24px\n  gap-grid-sm: 16px\n  content-max-width: 1200px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  label-pill:\n    background: \"{colors.deep-navy}\"\n    color: \"{colors.neon-yellow}\"\n    padding: \"6px 14px\"\n    fontSize: 12px\n    fontWeight: 700\n    letterSpacing: 0.2em\n    textTransform: uppercase\n    fontFamily: \"'Space Mono', monospace\"\n    description: \"Universal section tag. Default fill is deep-navy with neon-yellow text. Variant fills swap text color so the pill stays legible (e.g., navy bg with cyan text, navy bg with pink text).\"\n  pixel-button:\n    background: \"{colors.neon-cyan}\"\n    color: \"{colors.deep-navy}\"\n    padding: \"16px 36px\"\n    fontFamily: \"'Tektur', cursive\"\n    fontWeight: 700\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    boxShadow: \"{shadows.pixel-stack-cyan-yellow}\"\n    description: \"The signature stacked-shadow CTA. The pink variant swaps cyan body for pink and yellow shadow halo for cyan halo.\"\n  pixel-corner-bracket:\n    width: 24px\n    height: 24px\n    borderWidth: 4px\n    description: \"Two outward-facing L-shapes (top-left + bottom-right) bracketing a region. Default color is neon-cyan; yellow and pink variants exist. Sits 8px outside the bracketed element.\"\n  feature-card:\n    background: \"rgba(255, 255, 255, 0.15)\"\n    backdropFilter: \"blur(8px)\"\n    padding: \"32px 24px\"\n    border: \"2px solid rgba(15, 27, 61, 0.2)\"\n    description: \"Frosted-glass card with inset navy L-brackets (top-left + bottom-right) replacing rounded corners. Used on light-surface slides.\"\n  stat-block:\n    background: \"rgba(94, 220, 244, 0.08)\"\n    border: \"2px solid rgba(94, 220, 244, 0.2)\"\n    padding: \"32px 16px\"\n    description: \"Cyan-tinted glass stat tile with cyan L-bracket accents at opposite corners. Used on dark surfaces. Stat numeral uses the pixel-text-shadow-small treatment.\"\n  bar-track-light:\n    height: 32px\n    background: \"rgba(15, 27, 61, 0.1)\"\n    description: \"Horizontal track for hbar charts on light surfaces. Fill is solid navy/cyan/pink with a yellow offset shadow.\"\n  bar-vertical:\n    background: \"{colors.neon-cyan}\"\n    boxShadow: \"{shadows.pixel-l-shape}\"\n    description: \"Vertical chart bar with three-piece navy L-shadow. Color cycles cyan → pink → yellow.\"\n  timeline-node:\n    width: 24px\n    height: 24px\n    background: \"{colors.neon-cyan}\"\n    border: \"4px solid {colors.deep-navy}\"\n    description: \"Square pixel node on timeline rails. Active state swaps fill to neon-yellow.\"\n  timeline-rail:\n    width: 4px\n    background: \"repeating-linear-gradient(to bottom, {colors.deep-navy} 0px, {colors.deep-navy} 16px, transparent 16px, transparent 24px)\"\n    description: \"Dashed pixel rail running between timeline nodes.\"\n  date-chip:\n    background: \"{colors.deep-navy}\"\n    color: \"{colors.neon-cyan}\"\n    padding: \"2px 10px\"\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    description: \"Small inline date marker on timeline events.\"\n  hero-badge:\n    border: \"2px solid {colors.neon-yellow}\"\n    color: \"{colors.neon-yellow}\"\n    padding: \"8px 16px\"\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    letterSpacing: 0.1em\n    textTransform: uppercase\n    description: \"Outline-only chip used in clusters under hero headlines.\"\n  bg-grid:\n    backgroundColor: \"{colors.dark-void}\"\n    backgroundImage: \"linear-gradient(rgba(94, 220, 244, 0.07) 1px, transparent 1px), linear-gradient(90deg, rgba(94, 220, 244, 0.07) 1px, transparent 1px)\"\n    backgroundSize: \"40px 40px\"\n    description: \"40px cyan-on-navy grid wallpaper for dark surfaces. Pink, cyan, and lavender variants invert the relationship (colored ground with low-opacity navy grid lines).\"\n  scanlines:\n    background: \"repeating-linear-gradient(0deg, transparent 0px, transparent 2px, rgba(10, 14, 39, 0.04) 2px, rgba(10, 14, 39, 0.04) 4px)\"\n    mixBlendMode: multiply\n    description: \"Horizontal CRT scanline overlay applied via ::after at z-index 50. Always present on every slide.\"\n  grain:\n    opacity: 0.035\n    description: \"SVG fractal-noise grain layer applied via ::before at z-index 49. Always present on every slide.\"\n  crt-glow:\n    background: \"radial-gradient(ellipse at center, transparent 50%, rgba(10, 14, 39, 0.25) 100%)\"\n    description: \"Radial vignette that darkens the corners to mimic a CRT bulge. Applied to dark-surface slides via ::after at z-index 51.\"\n  starfield:\n    description: \"Container of small 4-6px colored squares (cyan, yellow, pink) positioned absolutely with a 3s twinkle keyframe. Lives on dark surfaces only.\"\n  pixel-particles:\n    description: \"Floating 8px colored squares with an 8s float keyframe. Decorative ambient layer on hero and CTA-type surfaces.\"\n  nav-dot:\n    width: 12px\n    height: 12px\n    border: \"2px solid {colors.neon-cyan}\"\n    background: transparent\n    description: \"Hollow square pip with a 2px inset cyan fill on active state. Fixed vertical rail at right edge.\"\n  quote-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.neon-yellow}\"\n    boxShadow: \"4px 4px 0 {colors.deep-navy}\"\n    description: \"Short yellow rule with navy offset shadow, used as a separator under quote bodies.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\n8-Bit Orbit is a **retro-futuristic pixel-art presentation system**. Its foundational premise is the **4-pixel unit**: every shadow offset, every border, every corner bracket, every label height resolves to a multiple of 4px. Layouts feel as if they were rasterized on an old CRT and dragged into HTML — and atmospheric overlays (scanlines, grain, vignette glow, animated starfields) reinforce the illusion on every surface.\n\nThe type stack is three faces working in concert. **Tektur** is the display face — a chunky, geometric, semi-pixelated grotesque that carries headlines, hero text, stat numerals, and any text that needs to feel like it was drawn on the pixel grid. **Chakra Petch** is the body face — a humanist sans with subtle geometric cuts that reads cleanly at small sizes and avoids fighting Tektur for attention. **Space Mono** is the system face — used exclusively for labels, captions, badges, chart values, dates, and counters. The mono treatment + wide tracking on these elements makes them feel like HUD readouts, not editorial captions.\n\nThe palette is built around **deep navy as ground** (`{colors.dark-void}` and `{colors.deep-navy}`) lit by **three saturated neons** — cyan, hot pink, yellow — plus a soft lavender pastel. Surfaces alternate: a dark navy surface (cyan grid wallpaper, white text, neon accents glowing in front) followed by a colored surface (pink, cyan, or lavender ground with navy text and navy grid lines etched at low opacity). The neons never appear as body text — they are reserved for headlines, stat numerals, accent rules, and label fills. The result is high contrast without being harsh: the neons feel illuminated rather than printed.\n\nDepth is the system's signature trick: **stacked hard offset shadows in the pixel unit**. The flagship pattern is a six-piece shadow on buttons — three navy offsets stepping down-right at 4px, then three colored halo offsets stepping further at 8px. Hero text gets a two-layer text shadow (yellow at +4/+4, navy at +8/+8). Cards get either a 6px navy box shadow or an 8px yellow box shadow on the featured tier. Every shadow is hard-edged, zero blur, locked to the 4px grid. Atmospheric depth comes from the always-on **scanlines + grain + CRT glow** overlay trio that subtly modulates every surface.\n\n**Density philosophy: moderately dense, atmospherically loaded.** The system reads as broken when surfaces are clean and unaccompanied — without scanlines, grain, vignette, particles, or a colored grid behind, the type loses its arcade context and starts to look like generic web typography. Always layer the atmosphere. Within content regions, however, breathing room matters: cards are widely spaced (24-32px gaps), stat tiles get heavy internal padding, and hero text is allowed to dominate. A typical slide carries one display moment + a small constellation of supporting elements (badges, labels, a chart, or a small grid), all sitting on a fully decorated atmospheric background.\n\n**Key Characteristics:**\n- Three-font stack: Tektur (display), Chakra Petch (body), Space Mono (HUD/labels) — never substitute, never mix outside their roles.\n- Navy ground (`{colors.dark-void}` / `{colors.deep-navy}`) alternates with colored-grid surfaces (pink, cyan, lavender) — both carry the 40px etched grid.\n- Three neons (cyan, pink, yellow) reserved for display, stats, rules, and label fills — never for body text.\n- All measurements snap to the 4px pixel unit: borders 2-4px, shadow offsets 4px / 8px, corner brackets 24×24 with 4px stroke.\n- Stacked hard offset shadows are the system's depth language — never blurred, never colored on text shadows except in the yellow→navy cascade.\n- Every slide carries the persistent scanline + grain + CRT-vignette trio at z-index 49-51.\n- L-shaped corner brackets (`{components.pixel-corner-bracket}`) replace rounded corners and frame regions, cards, and stat tiles.\n- A monospace label pill (`{components.label-pill}`) sits as the universal eyebrow on every region — navy fill, neon text, 0.2em tracking, uppercase.\n- Animated starfields and floating particle squares wallpaper dark surfaces — ambient, not decorative.\n\n## Colors\n\n### Palette\n\n- **Dark Void** (`{colors.dark-void}` — `#0A0E27`): The deepest ground, used on `<body>` and as the base for dark-grid surfaces. Reads as black-with-blue-bias under the CRT vignette.\n- **Deep Navy** (`{colors.deep-navy}` — `#0F1B3D`): The structural color — all shadow stacks, label fills, dark cards, button text on neon surfaces, and chart bar text. Slightly warmer than the void; the two read as ground and figure when stacked.\n- **Neon Cyan** (`{colors.neon-cyan}` — `#5EDCF4`): The system's primary glow. Used for headlines on dark surfaces, primary button fill, stat numerals, primary chart bars, timeline nodes, navigation dots, corner brackets, and grid lines on dark surfaces (at 7% opacity).\n- **Neon Pink** (`{colors.neon-pink}` — `#F0A6CA`): The warm accent. Used as a colored surface ground (40px navy-on-pink grid), secondary button fill, secondary chart bars, mouth detail in pixel avatars, and tertiary corner brackets.\n- **Neon Yellow** (`{colors.neon-yellow}` — `#F4D03F`): The high-key alert color. Used in shadow halos behind buttons and on featured tier cards, as the active timeline-node fill, on hero badges, in label-pill text variants, in the quote-line, and as Tektur text-shadow layer 1.\n- **Soft Lavender** (`{colors.soft-lavender}` — `#E2D5F2`): The calm pastel surface — used as ground for slides that need a softer reprieve from the neon-on-navy intensity. Carries the same etched-navy grid wallpaper as the other colored surfaces.\n- **White** (`{colors.white}` — `#FFFFFF`): Text color on dark/neon surfaces only. Never used as a slide background.\n\n### Defaults\n\n- **Default surface background**: `{colors.dark-void}` with the 40px cyan grid (`{components.bg-grid}`). Always apply scanlines + grain + crt-glow on top.\n- **Default headline color on dark surfaces**: `{colors.neon-cyan}`, with the `{shadows.pixel-text-shadow-small}` or `{shadows.pixel-text-shadow}` treatment for hero-scale text.\n- **Default headline color on colored grids (pink/cyan/lavender)**: `{colors.deep-navy}` — neon text becomes illegible on neon grounds.\n- **Default body text color on dark surfaces**: `rgba(255, 255, 255, 0.7)` — softened white, not pure white.\n- **Default body text color on colored grids**: `rgba(15, 27, 61, 0.75)` — softened navy.\n- **Default label-pill fill**: `{colors.deep-navy}` with `{colors.neon-yellow}` text. On colored grids the text can swap to cyan or pink as long as contrast against navy holds.\n- **Default accent color for callouts and stat numerals**: `{colors.neon-cyan}`.\n- **Default chart palette order**: cyan → pink → yellow (in that order across series).\n- **Default corner bracket color**: `{colors.neon-cyan}`. Yellow and pink variants exist for thematic accents.\n\nWhen a slide needs to feel softer or warmer, switch the colored grid from cyan-on-navy (default) to navy-on-pink, navy-on-cyan, or navy-on-lavender — the structural relationship inverts (grid lines become navy at low opacity) but the typographic rules stay the same.\n\n## Typography\n\n### Font Family\nThe system runs three faces, each locked to its role.\n\n**Tektur** is the display face — a wide-bodied, semi-geometric grotesque with subtle pixel-grid cuts. Used for every hero title, headline, stat numeral, quote mark, and large numeral. Tektur's chunky personality is what makes the system feel arcade-native; replacing it with Inter or Space Grotesk breaks the entire aesthetic.\n\n**Chakra Petch** is the body face — a humanist sans with mild geometric/squared character that reads cleanly at 14-22px and has enough personality to sit next to Tektur without disappearing. Used for paragraphs, hero taglines, quote bodies, and any longer-form prose.\n\n**Space Mono** is the HUD face — a monospace used exclusively for labels, badges, chart values/axes, page counters, date chips, and any element that should feel like a system readout. The mono + wide-tracked uppercase combination is the system's \"interface\" voice.\n\nNever use Tektur for body, never use Chakra Petch for chrome/HUD, never use Space Mono for headlines. The three-role separation is the typographic structure.\n\n### Typography Scale\n\n| Token | Size (clamp) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.pixel-hero}` | 48–128px | Tektur | 900 | Hero or cover display title — always carries the two-layer text shadow |\n| `{typography.display}` | 32–64px | Tektur | 700 | Large section opener |\n| `{typography.headline}` | 24–45px | Tektur | 700 | Primary section headline |\n| `{typography.subhead}` | 17.6–24px | Tektur | 700 | Region-level subheading or card title |\n| `{typography.stat-number}` | 32–56px | Tektur | 900 | Stat tile numeral — pairs with the small text shadow |\n| `{typography.body}` | 14.4–18.4px | Chakra Petch | 400 | Paragraph body |\n| `{typography.hero-tagline}` | 14.4–19.2px | Chakra Petch | 400 | Hero subtitle / lede paragraph below a pixel-hero |\n| `{typography.quote-body}` | 17.6–25.6px | Chakra Petch | 500 | Quote text |\n| `{typography.label-pill}` | 12px | Space Mono | 700 | Text inside the navy label pill |\n| `{typography.label-eyebrow}` | 13.6px | Space Mono | 400 | Standalone uppercase eyebrow above a headline (heavier tracking than the pill) |\n| `{typography.badge}` | 11.2px | Space Mono | 400 | Outline-only hero badge text |\n| `{typography.chart-value}` | 12px | Space Mono | 700 | Chart bar value numerals |\n| `{typography.chart-label}` | 11.2px | Space Mono | 400 | Chart axis or category labels |\n| `{typography.date-chip}` | 11.2px | Space Mono | 400 | Date marker on timeline events |\n| `{typography.counter}` | 12.8px | Space Mono | 400 | Persistent slide counter (NN / NN) |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.pixel-hero}` (48–128px clamp) — always Tektur weight 900 with the two-layer text shadow.\n- **Default size for a primary section headline**: `{typography.headline}` (24–45px clamp) — Tektur weight 700.\n- **Default size for paragraph body**: `{typography.body}` (14.4–18.4px clamp) — Chakra Petch weight 400.\n- **Default size for a stat numeral**: `{typography.stat-number}` (32–56px clamp) — Tektur weight 900, always carries the 3px navy text shadow.\n- **Default size for an eyebrow label**: `{typography.label-pill}` (12px) housed in the navy pill — or `{typography.label-eyebrow}` (13.6px) if the eyebrow sits standalone.\n- **Default tracking for any Space Mono label**: 0.1em (badges) to 0.3em (eyebrow labels). Mono without wide tracking reads as code, not HUD.\n- **Default body weight**: 400 for Chakra Petch, 500 for quote bodies.\n- **Default display weight**: 700 for headlines, 900 for hero scale and stat numerals.\n\nWhen unsure which display token to reach for, default to `{typography.headline}` — it's the section-level workhorse. Reserve `{typography.pixel-hero}` for cover and CTA moments only.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every pixel-hero element carries the stacked text-shadow.** The pattern is `4px 4px 0 {colors.neon-yellow}, 8px 8px 0 {colors.deep-navy}` on cyan text. A pixel-hero element without this two-layer cascade reads as untreated display type and breaks the arcade voice.\n- **Every stat numeral carries the small text-shadow.** The pattern is `3px 3px 0 {colors.deep-navy}` on cyan text. Stat numerals on dark surfaces need this shadow to feel illuminated; without it they read flat.\n- **Every Space Mono element is uppercase with wide tracking** — minimum 0.05em for chart labels, 0.08–0.2em for pills and badges, 0.3em for standalone eyebrow labels. Sentence-case mono does not exist in this system.\n- **Every Tektur display element keeps its native letter-spacing or slight positive (+0.04em on hero scale).** Tektur is wide-bodied by design — adding negative tracking compresses it into something that no longer reads as the same face.\n- **Every Chakra Petch body block uses line-height ≥ 1.6.** The face is dense; tighter line-height on body bleeds into unreadable.\n- **Every label pill uses Space Mono at 12px with 0.2em letter-spacing.** No exceptions — the pill is the system's most recognizable small chrome and any deviation in size or tracking breaks it.\n- **Every chart bar value / axis label uses Space Mono.** Numerical chrome is mono, never Tektur or Chakra Petch.\n\n### Typography Principles\n\nThe voice contrast is **chunky display ↔ humanist body ↔ wide-tracked mono chrome**. Switching any of the three roles to a different face flattens the system into a generic dark-mode aesthetic. Italic is never used in display or body — the only italic that appears anywhere is implicit in the slight tilt on pixel-art decorative elements.\n\nTektur should always feel **planted** — left-aligned, generous line-height, never centered for body-length runs (centering is permitted on hero and CTA titles only). Chakra Petch should always feel **calm** — left-aligned by default, no all-caps treatment, no letter-spacing.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are stacked vertically inside a `slides-container` and translated via `transform: translateY(...)` for navigation. Only one slide occupies the viewport at a time, with cubic-bezier `(0.22, 1, 0.36, 1)` easing on an 800ms transition.\n\nDefault slide padding is `3vh 4vw`. The inner `slide-content` caps at `max-width: 1200px` and centers, so on wide displays content keeps editorial column width while the colored background fills the viewport.\n\n### Pixel Unit\nEvery measurement in the system snaps to a **4px grid**. Border widths are 2px or 4px. Shadow offsets are 4px or 8px. Corner brackets are 24×24 with 4px stroke. The background grid is 40px (10 × pixel-unit). Card padding usually resolves to multiples of 8 (16, 24, 32, 48). This discipline is what makes the system feel rasterized rather than vector.\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Navigation dot rail** — vertical stack of 12×12 cyan-bordered squares, fixed at `right: 24px`, vertically centered. Active state fills the inner 8×8 with cyan.\n- **Slide counter** — Space Mono `01 / 10` format, fixed at `bottom: 24px`, horizontally centered, dark-navy semi-transparent pill background.\n- **Nav hint** — `USE KEYS ↑ ↓`, Space Mono 11px at 50% opacity, fixed at `bottom: 24px right: 24px`.\n\nThe cursor across the entire deck is `crosshair` — an additional arcade signal.\n\n### Atmospheric Overlay Stack\nEvery slide carries (in z-order):\n1. Surface background — either `{components.bg-grid}` (cyan-on-navy) or one of the colored grid variants.\n2. Grain layer at z-index 49, opacity 0.035.\n3. Scanlines at z-index 50, multiply blend mode.\n4. CRT vignette glow at z-index 51 (dark surfaces only).\n5. Optional starfield / pixel particles at z-index 1 inside the surface.\n6. `.slide-content` at z-index 10 above the atmospheric layers.\n\nThis overlay stack is the system's identity. A slide rendered without it looks like a wireframe.\n\n## Depth and Elevation\n\n### Stacked Hard Offset Shadow (Signature)\nThe system uses **stacked, multi-step hard offset shadows** in the 4px pixel unit. Every shadow value is composed in one of three patterns:\n\n- **Three-step navy L-shape** (`{shadows.pixel-l-shape}`) — three offsets at `4px 0`, `0 4px`, `4px 4px` in deep-navy, zero blur. Used on chart bars and small elevated chrome to suggest a single-layer drop.\n- **Six-step button cascade** (`{shadows.pixel-stack-cyan-yellow}` / `{shadows.pixel-stack-pink-cyan}`) — three navy offsets at 4px stepping then three colored halo offsets at 8px stepping behind. Creates a two-layer pixel-bevel effect. Used exclusively on `{components.pixel-button}`.\n- **Two-layer text-shadow** (`{shadows.pixel-text-shadow}` / `{shadows.pixel-text-shadow-small}`) — yellow layer at +4/+4 then navy layer at +8/+8 (or just navy at +3/+3 for stat-scale numerals). Used on every Tektur display element.\n\nAll shadows are zero-blur, hard-edged, locked to the pixel unit. A blurred drop shadow does not exist anywhere in the system.\n\n### Card Shadows\nTwo simpler patterns serve cards:\n- `{shadows.card-offset}` = `6px 6px 0 rgba(15, 27, 61, 0.15)` — soft navy offset for non-featured tier cards on light surfaces.\n- `{shadows.card-featured}` = `8px 8px 0 {colors.neon-yellow}` — neon-yellow offset for featured tier cards, paired with a `-12px` translateY lift.\n\n### Corner Brackets as Depth\nThe L-shaped corner brackets (`{components.pixel-corner-bracket}`) replace traditional border treatments on regions and cards. Two brackets at opposite corners imply a frame without enclosing it — the eye fills in the missing edges. On stat blocks and feature cards, brackets sit inset at `top: -2px / left: -2px` and `bottom: -2px / right: -2px` so they break the cell edge slightly, reinforcing the pixel-bevel feel.\n\n### Atmospheric Depth\nThe scanline + grain + CRT-vignette stack provides ambient depth on every surface without requiring shadow on individual elements. Animated starfields and floating particles layer additional spatial cues behind content. None of these are decorative add-ons — they are core to the depth perception of the system.\n\n## Shapes and Treatment\n\n### Border Radius\nEffectively zero. The only round shape that appears anywhere is the donut-style nav dot inner-fill (which is still a square in this system — the nav dots are square pips, not circles). Rounded buttons, rounded cards, or rounded pill chips break the pixel-art aesthetic immediately.\n\nThe pixel-face avatar zone uses square eyes and a rectangular mouth — anatomy rendered in pixels, not curves.\n\n### Border Weights\n- **2px solid** — used on feature-card outlines, hero badges, nav dots, stat-block frames, chart bars (inline edges).\n- **3px stroke** — used for chart axes inside SVG charts (deep-navy).\n- **4px solid** — used on corner brackets, timeline node borders, the quote-line, and the inner pixel-bevel of buttons.\n\nBorders are always solid, always navy or neon, never dashed except for the timeline rail (`{components.timeline-rail}`) which is intentionally rendered as a 16px-on, 8px-off repeating linear gradient to mimic a pixel-dashed line.\n\n### Decorative Element Types\n\n**Pixel corner bracket** — Two outward L-shapes (top-left + bottom-right) bracketing a region. 24×24 with 4px stroke. Default color is cyan; yellow and pink variants exist. The bracket pattern is the system's most distinctive non-typographic mark.\n\n**Label pill** — Navy rectangle with neon-yellow Space Mono text at 12px / 0.2em. The universal section eyebrow. Variants flip the text color to cyan or pink while keeping the navy fill.\n\n**Hero badge** — Outline-only 2px yellow border with yellow Space Mono text. Appears in clusters under hero titles as feature tags.\n\n**Stat block** — Cyan-tinted glass tile (8% cyan fill, 20% cyan border) with cyan corner brackets at top-left and bottom-right. Holds a large stat numeral over a Space Mono pink label.\n\n**Feature card** — Frosted-glass white card (15% white fill, blur) with navy corner brackets at opposite corners. Used on colored-grid surfaces.\n\n**Pixel button** — Cyan rectangle with the six-step stacked shadow cascade. On hover, the button translates +2/+2 and the shadow collapses to a 4-step cascade — simulating a key-press in pixel art.\n\n**Quote-line** — A 60×4 yellow rectangle with a 4×4 navy offset shadow. Used as a separator beneath quote bodies.\n\n**Timeline node** — 24×24 cyan square with a 4px navy border, positioned on a dashed navy rail. Active state swaps fill to yellow.\n\n**Date chip** — Inline 2px-padded navy pill with cyan Space Mono text, used to mark timeline events.\n\n**Pixel face** — A 120×120 grouping of square \"facial features\" (cyan eyes, pink mouth) rendered as absolutely positioned divs inside a navy avatar zone. Functions as both a friendly mascot and a system-signature decorative module.\n\n**Tier card** — White rectangle, 6px navy offset shadow. Featured tier swaps fill to deep-navy and shadow to 8px yellow, with a `-12px` translateY lift. Tier features use a `+` ::before glyph in cyan instead of standard bullets.\n\n**Pixel landscape** — A row of variable-height navy mountains at the bottom of CTA-class surfaces, opacity 0.3. Pure decoration suggesting an arcade horizon.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply the scanlines + grain + CRT-vignette overlay stack to every slide. The atmosphere is the design system; surfaces without it look like wireframes.\n- Use `{colors.neon-cyan}` as the default headline color on dark surfaces and `{colors.deep-navy}` as the default headline color on colored grids (pink/cyan/lavender).\n- Apply `{shadows.pixel-text-shadow}` to every pixel-hero element and `{shadows.pixel-text-shadow-small}` to every stat numeral. Tektur display type without its text-shadow reads flat.\n- Snap every measurement to the 4px pixel unit — border widths, shadow offsets, padding, corner-bracket dimensions. Off-grid values break the rasterized feel.\n- Use Tektur for display, Chakra Petch for body, Space Mono for chrome — exclusively. Cross-mixing the three voices flattens the system.\n- Wrap eyebrows in the `{components.label-pill}` (navy bg, yellow Space Mono text, 0.2em tracking, uppercase) as the universal section tag.\n- Pair the navy ground with at least one neon glow per region — text, chart bar, corner bracket, or button shadow halo. Pure navy without a neon accent reads as dead screen.\n- Layer animated starfields and pixel-particle floaters on dark hero and CTA surfaces. The motion is part of the atmosphere.\n- Render charts with cyan → pink → yellow series order and Space Mono numerals/labels. The neon trio is the chart palette.\n- Bracket cards and stat tiles with the L-shaped corner brackets at opposite corners instead of fully outlining them. The implied frame is the system's signature card treatment.\n\n### Don't\n\n- Don't substitute fonts. Tektur, Chakra Petch, and Space Mono are the three voices — replacing any of them with Inter, Roboto, or Space Grotesk collapses the system.\n- Don't round any corner. The pixel aesthetic depends on square edges. Border-radius is reserved for SVG donut chart geometry only.\n- Don't blur any shadow. Every shadow is hard-edged at zero blur. `0 4px 12px rgba(0,0,0,0.1)` does not exist here.\n- Don't place neon text on neon surfaces. Cyan headlines on the pink grid become illegible — switch to deep-navy on colored grounds.\n- Don't use Tektur in sentence-case body runs or Chakra Petch in chrome/labels. Each face has a single role.\n- Don't introduce a fourth neon. The palette is cyan + pink + yellow + lavender pastel. Adding green or orange breaks the curated neon trio.\n- Don't omit the atmospheric overlay stack on any slide, even chart-heavy or table-heavy slides. The overlays are non-negotiable.\n- Don't use uppercase Chakra Petch body text. Body always sentence-case; uppercase is reserved for Space Mono and Tektur display.\n- Don't drop the navy label pill in favor of a plain text eyebrow. The pill is the most recognizable small chrome in the system.\n- Don't shadow text or chrome with off-axis offsets. Every shadow steps down-right in 4px increments — left or upward offsets do not exist.\n\n## Responsive Behavior\n\n8-Bit Orbit is a **viewport-fluid system** built around `vw/vh`-based sizing and CSS `clamp()` ranges. There are no hard breakpoints for the deck itself — every font size, padding value, and gap interpolates between a minimum and maximum based on viewport width.\n\n### Scaling Behavior\n- Hero text scales 48px → 128px on viewport width.\n- Stat numerals scale 32px → 56px.\n- Body scales 14.4px → 18.4px.\n- The 4px pixel unit, 40px grid size, scanline 4px stripe, and corner-bracket dimensions are fixed — they do not scale, which means at larger viewports the pixel chrome appears proportionally finer (intentionally — the larger the canvas, the smaller and more refined the pixels read).\n\n### Component Breakpoints\nThree component-level breakpoints exist:\n- `max-width: 1024px` — feature grid collapses 4→2 columns, two-column split layouts stack.\n- `max-width: 900px` — feature grid further collapses, hbar chart label column shrinks.\n- `max-width: 500px` — feature grid becomes single column, stats grid stacks.\n\n### Presenter Behavior\n- Slides advance via `ArrowDown`, `ArrowRight`, or `Space`.\n- Slides reverse via `ArrowUp` or `ArrowLeft`.\n- `Home` jumps to first, `End` to last.\n- Vertical swipe on touch devices advances/reverses with a 50px threshold.\n- Mouse wheel scroll advances/reverses with an 800ms debounce lock.\n- Slide transitions use 800ms cubic-bezier `(0.22, 1, 0.36, 1)` on a translateY transform.\n\n### Animation Triggers\nChart bars and stat counters animate in on slide entry with `setTimeout` staggers (100-150ms between items). When a slide is exited, its bars/counters reset to 0 so re-entry replays the animation. The `prefers-reduced-motion` media query disables transitions and the starfield/particle twinkle keyframes.\n\n### Print Behavior\nThe system has no `@media print` rule. The deck is screen-first; printing produces only the active slide. For static export, screenshots of each slide preserve all atmospheric overlays (scanlines and grain are CSS-rendered, not assets).\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / stat numerals | Tektur 700–900 | 思源黑体 Noto Sans SC 900 |\n| Body / hero tagline / quote body | Chakra Petch 400–500 | 思源黑体 Noto Sans SC 400 |\n| HUD labels / badges / chart values / counter | Space Mono 400–700 (uppercase + wide tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) — see Known CJK Gap below |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family with built-in Latin glyph coverage. Set every text element to `font-family: 'Noto Sans SC', sans-serif`. 思源黑体 ships Latin glyphs that read cleanly alongside Chinese characters, so a sentence like `使用 Tektur 字体` renders in one consistent face rather than font-switching mid-word. This system normally runs three faces (display / body / HUD); collapsing to one CJK face is the right tradeoff because none of the three Latin faces have credible Chinese counterparts, and visual hierarchy still works through weight (900 / 700 / 500 / 400) plus the system's signature shadow stacks.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.7–1.8), display 1.15–1.25 (up from 1.05–1.15). CJK characters are square and visually full — they crowd vertically more than Latin.\n- **Letter-spacing**: set to 0 on every CJK run. The template's positive tracking on Tektur display (+0.04em) and 0.1–0.3em mono tracking on Space Mono labels looks broken on square CJK glyphs — they're already evenly spaced by design.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Space Mono label in this system uses `text-transform: uppercase`; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `8 位赛博 / 1989 模式` not `8位赛博/1989模式`.\n- **One font per sentence**: 思源黑体 covers both CJK and Latin glyphs in a unified style — let it handle mixed sentences. Don't let the browser fall back to Tektur or Space Mono mid-sentence for ASCII characters.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on three voices — Tektur (chunky arcade display), Chakra Petch (humanist body), Space Mono (HUD readouts) — and a CJK build cannot preserve that three-face contrast. Compensate by leaning harder on the **non-typographic** signature elements: the stacked text-shadow (yellow at +4/+4, navy at +8/+8) still works on 思源黑体 900 headlines and is what carries the arcade voice when the face itself is generic. Keep all atmospheric overlays (scanlines, grain, CRT vignette, starfields, grid wallpaper) — they do more identity work in a CJK build than in the Latin original.\n\nThe system's Space Mono label-pill (navy fill, neon-yellow text, 0.2em tracking, uppercase) is the most recognizable small chrome and translates poorly: CJK characters won't accept the wide tracking or uppercase transform. Render Chinese label-pills with 思源黑体 weight 500 at 0 tracking, no transform, and a slightly tighter fontSize (10–11px instead of 12px) to preserve the chip's compact silhouette. The colored pill background and corner-bracket framing carry the recognition load.\n\n### Known CJK Gap\n\n- **No CDN-loadable Chinese pixel font.** The system's arcade aesthetic depends on Tektur's semi-pixel grotesque character — there is no equivalent Chinese face on Google Fonts or major CDNs that reads as \"pixel-art\" while remaining legible. 思源黑体 at weight 900 gives heft but loses the pixel-grid signal entirely. The atmospheric overlays (scanlines, grain, vignette, starfields) and pixel-bevel shadow stacks must carry the arcade voice on their own.\n- **No CDN Chinese monospace face for HUD labels.** Space Mono's \"system readout\" voice depends on monospaced rhythm + uppercase + 0.1–0.3em tracking — none of which transfer to CJK. The label-pill loses its mono character; lean on the navy fill + neon text + corner-bracket framing to keep chrome recognizable.\n\n## Iteration Guide\n\n1. Any new slide gets the full atmospheric overlay trio (scanlines + grain + crt-glow on dark surfaces, scanlines + grain on colored surfaces) and a 40px etched grid surface. Don't skip the overlays.\n2. Any new display element uses Tektur. Any new body element uses Chakra Petch. Any new label, badge, counter, or chart value uses Space Mono. Never cross the role boundaries.\n3. Any new headline gets `{colors.neon-cyan}` on dark surfaces or `{colors.deep-navy}` on colored grids — both with the appropriate Tektur weight and (for hero scale) the stacked text-shadow.\n4. Any new eyebrow uses the `{components.label-pill}` — navy fill, neon-yellow Space Mono text at 12px / 0.2em / uppercase. Don't substitute a plain h-tag.\n5. Any new card or region gets the L-shaped corner brackets at opposite corners (top-left + bottom-right) instead of a full outline. The implied frame is the system's signature.\n6. Any new measurement snaps to the 4px pixel unit. Borders 2-4px, shadow offsets 4px / 8px, corner brackets 24px, grid 40px. Off-grid values feel wrong.\n7. Any new shadow is hard-edged at zero blur. For buttons use the six-step cascade; for cards use 6px navy or 8px yellow; for text use the two-layer cascade.\n8. Any new chart cycles cyan → pink → yellow in series order. Numerical labels and axis labels are always Space Mono.\n9. If a surface needs to feel warmer or softer, switch to the pink, cyan, or lavender etched grid variant — but keep all typographic rules intact (navy headlines, softened-navy body).\n10. Animated elements (starfield, particles, chart bar grow, counter rollup) should respect `prefers-reduced-motion`. Atmospheric overlays (scanlines, grain, vignette) are not animated and stay on always.\n\n## Known Gaps\n\n- **Tektur, Chakra Petch, and Space Mono are Google Fonts** loaded via a preconnect + `<link>`. The system has no fallback strategy beyond `cursive` / `sans-serif` / `monospace` — in environments where Google Fonts fail (offline, restricted networks), the aesthetic collapses to system defaults and loses its character.\n- **Starfield and pixel-particle elements are generated by inline JS** that creates a fixed count of absolutely-positioned divs with random positions and animation delays. The animation keyframes are present in CSS, but the elements are only created if the JS runs successfully.\n- **The chart system is hardcoded**: bar heights, hbar widths, and stat counter targets are stored in `data-*` attributes and animated via `setTimeout` staggers triggered by slide-index matching. There is no data-binding layer — adding a new chart requires copying the HTML pattern and updating the JS slide-index matcher.\n- **The pixel-landscape on CTA surfaces is JS-generated** from a hardcoded heights array `[30, 50, 70, ...]`. Width varies per mountain (60 + (i % 3) * 20px). Replacing the landscape requires editing the JS heights array.\n- **The CRT vignette glow uses a fixed dark-navy radial gradient.** Adjusting it requires editing the CSS gradient stops; there is no tokenized vignette intensity.\n- **The cursor is set to `crosshair` deck-wide** for atmospheric reasons. This may conflict with text-selection expectations in contexts where the deck is embedded.\n- **No keyboard navigation hint exists for the wheel/touch fallback.** The nav-hint reads `USE KEYS ↑ ↓` even though wheel and touch are also wired up.\n- **The slide counter format is fixed at `NN / NN` zero-padded.** Decks with more than 99 slides would render with a layout-shifting counter.\n- **The pixel-corner-bracket sizing is fixed at 24×24 with 4px stroke** and does not scale with viewport. On very large or very small viewports the brackets may feel proportionally off.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/preview.md":"# 8-Bit Orbit Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/8-bit-orbit/design.md`\n- Preview card: `bold-template-pack/templates/8-bit-orbit/preview.md`\n\n## Selection Metadata\n\n- Slug: `8-bit-orbit`\n- Tagline: Pixel-art neon arcade aesthetic on a deep navy void.\n- Mood: retro-tech, playful, cyberpunk, energetic\n- Tone: geeky, neon, rebellious, sci-fi\n- Formality: low\n- Density: medium\n- Scheme: dark\n- Best for: Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos. Just as good for a tech talk that wants to lean into nostalgic-digital craft, a synthwave brand deck, or a creative review that wants to feel like a console.\n- Avoid for: Contexts where the dark neon palette would actively work against the message — quiet institutional finance disclosures, healthcare patient-facing materials, traditional luxury.\n\n## Visual Snapshot\n\nA retro-futuristic pixel-art presentation system that fuses 16-bit arcade nostalgia with editorial discipline. Display type runs in Tektur (a chunky geometric display face built on pixel-grid logic) paired with Chakra Petch for body and Space Mono for code-flavored labels and tabular data. The palette pivots on a deep cosmic navy (#0F1B3D / #0A0E27) lit by three saturated neons — cyan, hot pink, and a high-key yellow — with a soft lavender pastel for warm reprieves. Depth is built from stacked hard offset shadows in 4px increments (the pixel unit), CRT scanlines, atmospheric grain, vignettes, and animated starfields. The effect sits between an arcade cabinet and a Tron-era boardroom — unmistakably digital, intentionally lo-fi, and engineered to feel as if it just booted up.\n\n8-Bit Orbit is a retro-futuristic pixel-art presentation system. Its foundational premise is the 4-pixel unit: every shadow offset, every border, every corner bracket, every label height resolves to a multiple of 4px. Layouts feel as if they were rasterized on an old CRT and dragged into HTML — and atmospheric overlays (scanlines, grain, vignette glow, animated starfields) reinforce the illusion on every surface.\n\n## Preview Ingredients\n\n- Palette: dark-void #0A0E27; deep-navy #0F1B3D; neon-cyan #5EDCF4; neon-pink #F0A6CA; neon-yellow #F4D03F; soft-lavender #E2D5F2; white #FFFFFF\n- Typography: See full design doc after selection.\n- Signature move: Three-font stack: Tektur (display), Chakra Petch (body), Space Mono (HUD/labels) — never substitute, never mix outside their roles.\n- Signature move: Navy ground ({colors.dark-void} / {colors.deep-navy}) alternates with colored-grid surfaces (pink, cyan, lavender) — both carry the 40px etched grid.\n- Signature move: Three neons (cyan, pink, yellow) reserved for display, stats, rules, and label fills — never for body text.\n- Signature move: All measurements snap to the 4px pixel unit: borders 2-4px, shadow offsets 4px / 8px, corner brackets 24×24 with 4px stroke.\n- Signature move: Stacked hard offset shadows are the system's depth language — never blurred, never colored on text shadows except in the yellow→navy cascade.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/design.md":"---\nversion: alpha\nname: Biennale Yellow\ndescription: \"A literary-editorial presentation system in the visual register of an art biennale catalogue or quiet exhibition poster. The aesthetic is built on warm parchment grounds (`#E9E5DB`) flooded with soft solar yellow (`#F1EE2E`) radial blooms, set against a single deep indigo navy ink color. Display type is Instrument Serif — a contemporary high-contrast serif with tall ascenders and elegant italics — paired with Archivo for sans-serif chrome and JetBrains Mono for numerical and metadata callouts. No drop shadows, no rounded corners, no bordered cards: the only structural lines are hairline 1px rules in ink. The mood sits between a folded museum brochure, a slow-reading literary quarterly, and a Mediterranean exhibition poster — confident, atmospheric, and deeply restrained.\"\n\ncolors:\n  paper: \"#E9E5DB\"\n  paper-deep: \"#DCD6C4\"\n  sun: \"#F1EE2E\"\n  sun-soft: \"#F8F39B\"\n  haze: \"#F0DA7C\"\n  ink: \"#1B2566\"\n  ember: \"#E26B4A\"\n\ncolor-aliases:\n  line: ink\n\ntypography:\n  display:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, min(14.6vw, 22vh), 240px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-md:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(80px, min(10vw, 16vh), 200px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-sm:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(110px, min(11vw, 18vh), 200px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-it:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontStyle: italic\n    fontSize: \"clamp(56px, min(7vw, 11vh), 120px)\"\n    lineHeight: 1.04\n    letterSpacing: -0.005em\n  numeral-jumbo:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(220px, min(28vw, 64vh), 720px)\"\n    lineHeight: 0.84\n    letterSpacing: -0.04em\n  numeral-lg:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, min(15vw, 22vh), 280px)\"\n    lineHeight: 0.9\n    letterSpacing: -0.04em\n  numeral-md:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(72px, min(7vw, 12vh), 144px)\"\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n  headline:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(40px, min(4.6vw, 7vh), 88px)\"\n    lineHeight: 1.06\n    letterSpacing: -0.005em\n  headline-sm:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, min(3.6vw, 6vh), 56px)\"\n    lineHeight: 1\n  date-rail:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(48px, min(5.2vw, 9vh), 96px)\"\n    lineHeight: 0.96\n    letterSpacing: -0.005em\n  ledger-title:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(20px, 1.6vw, 30px)\"\n    lineHeight: 1.15\n  strand-title:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(22px, 1.7vw, 32px)\"\n    lineHeight: 1.1\n  strand-num:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 2vw, 38px)\"\n    lineHeight: 1\n  body-lede:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(15px, 1.05vw, 18px)\"\n    lineHeight: 1.55\n  body:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    lineHeight: 1.5\n  body-sm:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 0.78vw, 13px)\"\n    lineHeight: 1.5\n  micro-label:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(11px, 0.85vw, 14px)\"\n    lineHeight: 1.2\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  micro-label-tight:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.72vw, 12px)\"\n    lineHeight: 1.2\n    letterSpacing: 0.16em\n    textTransform: uppercase\n  rail-label:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    lineHeight: 1\n    letterSpacing: 0.32em\n    textTransform: uppercase\n  mono-data:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 0.85vw, 14px)\"\n    lineHeight: 1.4\n    letterSpacing: 0.04em\n  mono-date:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 0.95vw, 16px)\"\n    lineHeight: 1.4\n    letterSpacing: 0.02em\n  pagenum:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    lineHeight: 1\n    letterSpacing: 0.08em\n\nspacing:\n  pad-edge: \"clamp(40px, 4vw, 76px)\"\n  pad-region: \"clamp(40px, 4.2vw, 80px)\"\n  pad-foot: \"clamp(56px, 5vh, 88px)\"\n  pad-strand-y: \"clamp(12px, 1.6vh, 22px)\"\n  gap-region: \"clamp(20px, 2.5vw, 48px)\"\n  gap-strand: \"clamp(14px, 1.8vh, 22px)\"\n  gap-footer-col: \"clamp(20px, 2.4vw, 44px)\"\n  pagenum-bottom: \"clamp(22px, 2.4vh, 42px)\"\n  pagenum-right: \"clamp(24px, 2.4vw, 48px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.paper}\"\n\ncomponents:\n  pagenum:\n    position: \"absolute, right + bottom\"\n    color: \"{colors.ink}\"\n    opacity: 0.75\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    letterSpacing: 0.08em\n    description: \"Single mono pagenum NN / NN pinned to bottom-right of every slide at 75% opacity. The only persistent chrome on every surface.\"\n  hairline-rule:\n    border: \"1px solid {colors.ink}\"\n    description: \"1px solid ink horizontal or vertical rule. The system's only border treatment — separates header bands from content, footer columns from each other, ledger rows from each other. No thicker rule exists.\"\n  hairline-rule-soft:\n    border: \"1px solid rgba(27, 37, 102, 0.18-0.2)\"\n    description: \"1px ink at 18-20% opacity. Used for between-row separators inside dense ledger or strand lists where a full-weight rule would feel oppressive.\"\n  sun-bloom:\n    background: \"radial-gradient using {colors.sun} {colors.sun-soft} {colors.haze} blending to transparent on {colors.paper}\"\n    description: \"Large soft radial bloom of solar yellow placed off-center or behind a focal element. The system's primary atmospheric layer. Sized 42-70% of viewport in the larger axis.\"\n  ember-bloom:\n    background: \"radial-gradient using {colors.ember} at 15-22% opacity blending to transparent\"\n    description: \"Small warm peach bloom used as a counter-temperature accent in a corner opposite the sun bloom. Always subordinate; never dominant.\"\n  block-tile:\n    background: \"{colors.sun} at 40-70% opacity\"\n    description: \"Geometric blocks of translucent solar yellow placed on an 8-row × 4-column grid behind cover or colophon surfaces. Suggests a layered poster underprint.\"\n  yellow-panel:\n    background: \"{colors.sun}\"\n    color: \"{colors.ink}\"\n    description: \"Full-bleed yellow panel covering a column or third of the slide. The strongest possible color statement — used when a region needs to read as poster-fill, not paper.\"\n  bar-ink:\n    background: \"{colors.ink}\"\n    height: \"clamp(14px, 1.6vh, 22px)\"\n    description: \"Solid ink horizontal bar for data charts. Width carries the data value.\"\n  bar-lit:\n    background: \"{colors.sun}\"\n    border: \"1px solid {colors.ink}\"\n    height: \"clamp(14px, 1.6vh, 22px)\"\n    description: \"Highlighted variant of bar-ink — yellow fill with 1px ink stroke. Used to mark the current or featured row in a series.\"\n  strand-row:\n    layout: \"grid 56px 1fr, gap clamp(14px, 1.4vw, 24px), border-bottom hairline-soft, padding-bottom clamp(12px, 1.6vh, 22px)\"\n    description: \"Numbered editorial list row — numeral cell + content cell separated by hairline-soft. Used for programmes, agendas, and curated lists.\"\n  ledger-row:\n    layout: \"grid 92px 1.6fr 0.9fr 80px, gap clamp(14px, 1.4vw, 28px), border-bottom hairline-soft, padding clamp(10px, 1.3vh, 18px) 0\"\n    description: \"Four-column tabular row for calendars and itineraries. Date column is mono, title is serif, venue is sans, duration is mono right-aligned.\"\n  footer-band:\n    layout: \"grid 4-column with hairline-rule top border on each cell, gap clamp(20px, 2.4vw, 44px)\"\n    description: \"Four-column metadata strip pinned to the bottom of cover and colophon surfaces. Each cell has a tiny uppercase tag + a brief plain-English statement.\"\n  vertical-rail:\n    transform: \"rotate(-90deg) translateY(-50%) at left edge\"\n    fontFamily: \"'Archivo', sans-serif\"\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    letterSpacing: 0.32em\n    textTransform: uppercase\n    description: \"Rotated vertical text label running up the left edge. Used on chapter/divider surfaces as a section marker.\"\n  date-rail-stack:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontSize: \"clamp(48px, min(5.2vw, 9vh), 96px)\"\n    lineHeight: 0.96\n    textAlign: right\n    description: \"Large serif date or date-range stacked at top-right of cover surfaces. Uses an en-dash to indicate spans.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBiennale Yellow is a **literary-editorial presentation system** modeled on the visual language of European art biennale catalogues, slow exhibition posters, and quarterly literary publications. There are no cards, no buttons, no shadows, no rounded corners. The structural vocabulary is just three things: paper, ink, and yellow.\n\nThe typographic system pivots on **Instrument Serif**, a contemporary high-contrast serif with tall ascenders, elegant italics, and slightly flared terminals. It carries every display moment, every numeral, every quote — at scales ranging from headline-small (40px) to jumbo numerals over 700px. Set tight (line-height 0.86, letter-spacing −0.018em), it reads as confident editorial display; set looser in italic (line-height 1.04, letter-spacing −0.005em), it becomes a slow-reading quotation face. **Archivo** is the sans companion — used for body paragraphs and as small, wide-tracked uppercase labels (the \"micro-label\" treatment). **JetBrains Mono** handles all numerical and metadata callouts: dates, ledger figures, page numbers. The three-face system is rigid and disciplined; the contrast between them is the entire typographic story.\n\nThe color world is built on **warm parchment** (`{colors.paper}` — `#E9E5DB`) as the universal ground, marked by a single **ink** color (`{colors.ink}` — `#1B2566`, a deep indigo navy) used for every line of type and every rule. The system's signature color is **sun** (`{colors.sun}` — `#F1EE2E`), a highly saturated solar yellow used as a flooded panel, as a soft blooming radial gradient, or as a geometric tile underprint. A **soft ember peach** (`{colors.ember}` — `#E26B4A`) appears only as a subordinate counter-temperature accent, always at 15-22% opacity in a corner radial bloom. Inverted color treatments are not used; the system commits to navy ink on a warm ground.\n\nDepth is **atmospheric, not structural**. There are no drop shadows anywhere in the system. Depth comes from layered radial gradients of yellow (the sun-bloom and ember-bloom components) and the optional block-tile underprint on cover-class surfaces. Cards have no borders; regions are separated only by 1px hairline rules in ink. The lack of border weight is itself the aesthetic — the design feels printed, not engineered.\n\n**Density philosophy: editorial-restrained.** This system reads as elegant when sparse and broken when crowded. A typical surface holds one large display moment + a handful of supporting elements (a micro-label, a body paragraph, an ordered list, or a single radial bloom). Crowding the canvas with cards, buttons, panels, or stacked components turns the system into a different aesthetic entirely. Even dense surfaces (a calendar or programme) achieve density through tabular repetition, not visual richness — many quiet rows of hairline-separated metadata, not many bordered cells. Generous edge padding (40-76px) and wide footer/header bands let the canvas breathe.\n\n**Key Characteristics:**\n- Warm parchment ground (`{colors.paper}`) on every surface; never white, never gray.\n- Single ink color (`{colors.ink}`) for all text and all rules — no secondary text colors.\n- Solar yellow (`{colors.sun}`) deployed three ways: as a flooded panel, as a soft radial bloom, as a translucent geometric tile underprint.\n- Instrument Serif handles every display moment at scales from 40px to 720px+.\n- Archivo Bold uppercase + 0.16–0.32em tracking is the universal label voice.\n- JetBrains Mono is reserved exclusively for dates, ledger numerals, and page numbers.\n- 1px hairline rules in `{colors.ink}` are the only border treatment — used for header bands, ledger rows, footer columns, and strand separators.\n- No drop shadows, no rounded corners, no card outlines, no buttons. Decoration is atmospheric (radial blooms) or geometric (translucent tile blocks).\n- Persistent `01 / NN` JetBrains Mono pagenumber at bottom-right of every surface at 75% opacity.\n- Optional vertical rotated rail-label at the left edge of chapter/divider surfaces.\n\n## Colors\n\n### Palette\n\n- **Paper** (`{colors.paper}` — `#E9E5DB`): The warm parchment canvas. The default and near-universal background. Reads as a softened off-white with strong warmth — never neutral, never cold.\n- **Paper-deep** (`{colors.paper-deep}` — `#DCD6C4`): A slightly darker parchment tone, available as a secondary surface or to suggest a shadow band without using actual shadow. Reserved for moments that need surface differentiation while staying within the warm-paper family.\n- **Ink** (`{colors.ink}` — `#1B2566`): The single text and line color across the entire system. A deep indigo navy that reads as confident editorial black-with-blue-bias. Used for headlines, body, micro-labels, monos, hairline rules, and ink-bar fills. The `--line` CSS variable resolves to this same color.\n- **Sun** (`{colors.sun}` — `#F1EE2E`): The system's signature solar yellow. Highly saturated, slightly green-leaning. Used three ways: as a flooded full-bleed or column-bleed panel, as the core of soft radial blooms, and as 40-70% opacity geometric tile blocks.\n- **Sun-soft** (`{colors.sun-soft}` — `#F8F39B`): A paler buttery yellow used in the middle stops of sun-bloom gradients to soften the transition from saturated sun to paper.\n- **Haze** (`{colors.haze}` — `#F0DA7C`): A warmer mustard-leaning yellow used in the outermost stops of sun-bloom gradients to extend the bloom into the paper without a hard edge.\n- **Ember** (`{colors.ember}` — `#E26B4A`): A warm peach-orange used only as a subordinate counter-temperature accent in 15-22% opacity radial blooms. Never used as a fill color, never as a text color. Its job is to balance a sun-bloom on the opposite side of the canvas.\n\n### Defaults\n\n- **Default surface background**: `{colors.paper}`. Every surface starts here.\n- **Default headline color**: `{colors.ink}`. Always. Headlines never appear in yellow, ember, or paper-deep — only ink.\n- **Default body text color**: `{colors.ink}`. Body uses the same color as display; the contrast is achieved through size and weight, not color.\n- **Default rule color**: `{colors.ink}` (1px solid) for primary separators, ink at 18-20% opacity for secondary row separators.\n- **Default accent surface for poster moments**: `{colors.sun}` — a flooded panel of solar yellow with `{colors.ink}` text on top.\n- **Default atmospheric layer**: a single `{components.sun-bloom}` placed off-center on the surface, with an optional `{components.ember-bloom}` in the opposite corner.\n- **Default chart bar color**: `{colors.ink}`. The featured/current bar uses `{components.bar-lit}` (yellow fill, ink stroke).\n- **Default label color**: `{colors.ink}` for the text, no fill. Labels are tracking + uppercase + weight 600, not filled pills.\n\nThe system never inverts: ink text on a sun panel is correct (and a key signature treatment), but yellow text on an ink ground does not exist. Text is always ink; the variability lives in what's behind the text, not in the text color itself.\n\n## Typography\n\n### Font Family Stack\nThe system runs three faces, each with a tightly defined role.\n\n**Instrument Serif** (Google Fonts, italic + roman) is the display and editorial face. Its high contrast, tall ascenders, and slightly flared terminals give it a contemporary literary register — closer to a magazine masthead than a traditional book serif. Roman is used for headlines, numerals, ledger titles, and date rails. Italic is used for manifesto quotes and certain emphasis moments. Set tight (line-height ≤ 1.06, negative letter-spacing −0.005 to −0.04em).\n\n**Archivo** (Google Fonts) is the sans companion. Used at weight 400 for body paragraphs (line-height 1.5) and at weight 600 for the universal micro-label treatment (uppercase, 0.16-0.32em tracking, 10-14px). Never used at intermediate weights, never used for headlines.\n\n**JetBrains Mono** (Google Fonts) is the numerical/metadata face. Used exclusively for dates in ledgers, mono numerical callouts in data slides, page numbers, and the nav-hint. Its slab character gives editorial weight to numerical content without leaning on bold styling.\n\n### Typography Scale\n\n| Token | Size (clamp) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 120–240px | Instrument Serif | 400 | Cover-scale display title |\n| `{typography.display-sm}` | 110–200px | Instrument Serif | 400 | Editorial display in a panel context |\n| `{typography.display-md}` | 80–200px | Instrument Serif | 400 | Closing-statement display |\n| `{typography.display-it}` | 56–120px | Instrument Serif italic | 400 | Manifesto-scale italic quote body |\n| `{typography.numeral-jumbo}` | 220–720px | Instrument Serif | 400 | Chapter-divider ordinal numeral |\n| `{typography.numeral-lg}` | 120–280px | Instrument Serif | 400 | Decorative quotation mark, oversized punctuation |\n| `{typography.numeral-md}` | 72–144px | Instrument Serif | 400 | Hero stat figure |\n| `{typography.headline}` | 40–88px | Instrument Serif | 400 | Primary section headline, large quote body |\n| `{typography.headline-sm}` | 32–56px | Instrument Serif | 400 | Region headline, ledger/calendar topbar |\n| `{typography.date-rail}` | 48–96px | Instrument Serif | 400 | Date or date-range stacked at top of a surface |\n| `{typography.ledger-title}` | 20–30px | Instrument Serif | 400 | Title cell inside a calendar/ledger row |\n| `{typography.strand-title}` | 22–32px | Instrument Serif | 400 | Title inside a numbered strand/list row |\n| `{typography.strand-num}` | 28–38px | Instrument Serif | 400 | Numeral cell inside a strand row |\n| `{typography.body-lede}` | 15–18px | Archivo | 400 | Lede paragraph following a chapter headline |\n| `{typography.body}` | 14–16px | Archivo | 400 | Standard body paragraph |\n| `{typography.body-sm}` | 11–13px | Archivo | 400 | Footer-band body text, dense metadata |\n| `{typography.micro-label}` | 11–14px | Archivo | 600 | Universal uppercase eyebrow label |\n| `{typography.micro-label-tight}` | 10–12px | Archivo | 600 | Smaller uppercase label inside footer cells |\n| `{typography.rail-label}` | 11–13px | Archivo | 600 | Vertical rotated rail label |\n| `{typography.mono-data}` | 12–14px | JetBrains Mono | 400 | Chart year/value labels, mono inline data |\n| `{typography.mono-date}` | 13–16px | JetBrains Mono | 400 | Date column in calendar ledgers |\n| `{typography.pagenum}` | 11–13px | JetBrains Mono | 400 | Persistent page number |\n\n### Defaults\n\n- **Default size for a cover-scale display headline**: `{typography.display}` (120–240px clamp). Anything smaller reads as section-level, not cover-level.\n- **Default size for a primary section headline**: `{typography.headline}` (40–88px clamp).\n- **Default size for a chapter-divider numeral**: `{typography.numeral-jumbo}` (220–720px clamp). Don't shrink — the jumbo numeral is the point of a divider surface.\n- **Default size for a hero statistic**: `{typography.numeral-md}` (72–144px clamp). Stat figures share the same serif as headlines — they are display moments, not data chrome.\n- **Default size for a paragraph body**: `{typography.body}` (14–16px). For a lede after a chapter headline, step up to `{typography.body-lede}` (15–18px).\n- **Default size for any eyebrow label**: `{typography.micro-label}` (11–14px) at weight 600, uppercase, 0.18em tracking.\n- **Default weight for any Archivo body**: 400. Archivo body at any other weight breaks the rhythm.\n- **Default weight for any micro-label**: 600. Labels at weight 400 or 700 read as either timid or oversized.\n- **Default tracking for any uppercase label**: 0.16em minimum, 0.32em maximum. Labels without wide tracking read as code, not editorial.\n\nWhen unsure which display token to reach for, default to `{typography.headline}` (40–88px) for the primary moment, and `{typography.numeral-md}` (72–144px) for a single hero statistic. The display, display-sm, and display-md tokens are reserved for cover/colophon/poster-scale moments.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every display, numeral, headline, and ledger-title element is Instrument Serif at weight 400.** Bold serif display does not exist in this system — the face's contrast is its weight signal. Setting Instrument Serif at weight 700 collapses the entire elegance.\n- **Every Instrument Serif display element uses tight line-height (0.84–1.06).** Generous line-height on display destroys the editorial poster feel — large serif headlines must feel stacked, not aerated.\n- **Every Instrument Serif display element uses negative letter-spacing.** Display, headline, jumbo numerals at −0.018 to −0.04em; italic display at −0.005em. Without negative tracking, the wide-bodied glyphs read as untreated.\n- **Every micro-label is uppercase Archivo weight 600 with tracking ≥ 0.16em.** No exceptions. A label without uppercase + tracking is not a label in this system; it's a stray sans element.\n- **Every numerical metadata element (date, page number, chart value, calendar date) is JetBrains Mono.** Serif numerals are for display moments; mono numerals are for data chrome. Don't cross the line.\n- **Every italic manifesto-scale quote uses `{typography.display-it}`.** Setting an italic quote at headline scale (40–88px) reads as a smaller moment; the italic is meant to dominate.\n- **Every body paragraph is Archivo weight 400 with line-height ≥ 1.45.** Body in Instrument Serif does not exist — Instrument is for display only.\n\n### Typography Principles\n\nThe voice contrast is **slow elegant serif ↔ wide-tracked uppercase sans ↔ tabular mono**. Italic Instrument is the system's \"feeling\" voice (reserved for quotes and manifesto moments); roman Instrument is the \"statement\" voice; Archivo upper-tracked is the \"label\" voice; mono is the \"data\" voice. Each has a single job.\n\nMixing rules are tight: an `<em>` inside an Instrument Serif headline stays in italic Instrument Serif (no face switch). An `<em>` inside an Archivo body paragraph becomes italic Archivo, not a serif. Don't mix faces inline.\n\nColor is locked to ink on every element. There is no \"accent color text\" treatment in this system — accent is delivered through atmospheric blooms and panel fills, not text color.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and crossfade via opacity transition (280ms ease). Only one slide is `.active` at a time. Every measurement uses CSS `clamp()` with both vw and vh terms — typography clamps include `min(...vw, ...vh)` patterns so display type scales by whichever viewport axis is shorter.\n\n### Padding and Margin Scale\n\n| Token | Range | Use |\n|---|---|---|\n| `{spacing.pad-edge}` | 40–76px | Standard edge padding from any slide edge to content |\n| `{spacing.pad-region}` | 40–80px | Internal padding inside a flooded yellow panel or major region |\n| `{spacing.pad-foot}` | 56–88px | Bottom padding when the footer band is present |\n| `{spacing.gap-region}` | 20–48px | Gap between two major content columns/regions |\n| `{spacing.gap-strand}` | 14–22px | Gap between strand rows in a numbered list |\n| `{spacing.gap-footer-col}` | 20–44px | Gap between columns of the footer-band metadata strip |\n| `{spacing.pagenum-bottom}` | 22–42px | Bottom inset of the persistent pagenum |\n| `{spacing.pagenum-right}` | 24–48px | Right inset of the persistent pagenum |\n\n### Persistent Chrome\nThe **pagenum** is the only persistent on-canvas element. It appears at `bottom-right` of every slide in JetBrains Mono at 11–13px, color ink, opacity 0.75. A **nav-hint** (`← / → · space`) appears once, fixed to the bottom-left of the viewport in JetBrains Mono at 10–12px / opacity 0.4. The nav-hint is not part of the slide composition — it lives outside the `.stage`.\n\n### Edge Discipline\nEvery meaningful element respects a minimum 40px (mobile) to 76px (desktop) edge inset. The system's elegance depends on negative space at the edges — pushing content to the bleed (other than full-bleed panels, blooms, and tile blocks) breaks the catalogue feel.\n\n### Atmospheric Layer\nEvery slide may carry one or both atmospheric layers behind content:\n- A **sun-bloom** (`{components.sun-bloom}`) — a large soft radial gradient of solar yellow, sized 42-70% of viewport, placed off-center or behind a focal element.\n- An **ember-bloom** (`{components.ember-bloom}`) — a small warm peach radial gradient at 15-22% opacity, placed in a corner opposite the sun bloom.\n\nThese layers are not optional decoration — they are the system's primary depth mechanism. A surface without a bloom reads as flat parchment.\n\n## Depth and Elevation\n\n### No Drop Shadows\nThe system has **zero drop shadows**. No `box-shadow`, no `text-shadow`, no `filter: drop-shadow(...)`. Depth is delivered atmospherically.\n\n### Atmospheric Depth (Sun Bloom)\nThe primary depth mechanism is the **sun-bloom** — a large soft radial gradient of solar yellow blooming from a point on the canvas. Bloom anatomy is a layered radial gradient with three or four color stops:\n- 0%: `{colors.sun}` at 70-95% opacity (the hot core)\n- ~30-40%: `{colors.sun}` at 40-65% opacity (the bloom)\n- ~55-65%: `{colors.haze}` at 18-22% opacity (the soft extension)\n- 80-90%: `{colors.paper}` at 0% (smooth fade into ground)\n\nBloom size and position varies by surface need: cover surfaces use a centered or slightly-off-center bloom 42% × 38% of viewport; chapter surfaces use a corner-anchored 720px-radius bloom; closing surfaces use a bottom-anchored 55% × 50% bloom rising from below.\n\n### Counter-Temperature Accent (Ember Bloom)\nAn optional **ember-bloom** in a corner opposite the sun-bloom provides warm-cool color tension without raising the saturation of the canvas. Always at 15-22% opacity, always smaller than the sun-bloom, always subordinate.\n\n### Geometric Underprint (Block Tiles)\nOn cover and colophon surfaces, an additional **block-tile** layer can appear behind content — translucent solar yellow rectangles placed on an 8-row × 4-column grid system at 40-70% opacity. This layer suggests a layered poster underprint without committing to a solid panel. The tiles are decorative geometry, not active content regions.\n\n### Yellow Panel (Structural Color)\nFor surfaces that need the strongest possible color statement, a **yellow-panel** flood (`{components.yellow-panel}`) covers a column, half, or third of the canvas in saturated `{colors.sun}`. This is the only \"hard\" color treatment in the system — when a panel is used, ink text sits on top at full opacity. Panels do not have borders or shadows; they meet the paper edge or another panel edge directly.\n\n### Hairline Rules\nInternal structural depth is delivered by **1px solid ink hairline rules** separating header bands from content, ledger rows from each other, and footer columns from each other. Rules are never thicker than 1px. Between secondary list rows (e.g., strand separators), the rule drops to `rgba(27, 37, 102, 0.18-0.2)` — same color, lower opacity.\n\n## Shapes and Treatment\n\n### Border Radius\n**Zero, on everything.** Every shape is a strict rectangle. The radial blooms are technically circles but they have no visible edge — they fade into paper.\n\n### Border Weights\n- **1px solid `{colors.ink}`** — the universal rule. Used for header-band underlines, ledger row separators, footer-column tops, and the bordered chart bar accent on the lit row.\n- **1px solid `rgba(27, 37, 102, 0.18-0.2)`** — soft variant of the same rule. Used for secondary row separators inside dense lists where full-weight ink would feel heavy.\n\nThe system has **no thicker borders**. There are no 2px, 3px, or 4px outlines anywhere. The visual structure depends on the lightness of the hairline.\n\n### Decorative Element Types\n\n**Sun-bloom** — Large soft radial gradient of solar yellow placed off-center or behind a focal element. The system's primary depth mechanism. Always one per surface, sometimes paired with a counter-bloom.\n\n**Ember-bloom** — Small warm peach radial gradient at 15-22% opacity, placed in a corner opposite the sun-bloom. Subordinate atmospheric balance.\n\n**Block-tile underprint** — Translucent solar yellow rectangles placed on an 8×4 grid system. Decorative geometry suggesting a layered poster, used on cover and colophon-type surfaces.\n\n**Yellow panel** — A full-bleed column, half, or third of the canvas flooded with `{colors.sun}`. The system's strongest color statement. Carries ink text on top.\n\n**Hairline rule** — 1px solid ink. Used for header-band underlines, ledger separators, footer column tops. The system's only border.\n\n**Footer band** — A four-column metadata strip at the bottom of cover/colophon surfaces. Each cell has a `{components.hairline-rule}` top border, an Archivo micro-label, and a short body statement.\n\n**Strand row** — Numbered editorial list row with serif numeral cell + serif title + sans body, separated from the next row by a hairline-soft rule.\n\n**Ledger row** — Four-column tabular calendar/itinerary row: mono date + serif title + sans venue + mono duration (right-aligned), separated by hairline-soft rules.\n\n**Vertical rail label** — Rotated Archivo uppercase text running up the left edge of a chapter-divider surface, with 0.32em tracking.\n\n**Date rail** — Large serif date or date-range stacked at top-right of cover surfaces, often using an en-dash to indicate a span across years or months.\n\n**Jumbo numeral** — A single huge Instrument Serif numeral (220-720px) dominating a divider surface. Always serif, always at weight 400, always with tight line-height.\n\n**Chart bar** — A solid ink rectangle whose width carries the data value. The featured/current bar swaps to yellow fill with a 1px ink stroke (`{components.bar-lit}`). Chart layouts use grid-row patterns: mono year label + bar + mono value, separated by gap.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.paper}` as the universal background. Every surface starts on parchment.\n- Set every line of text in `{colors.ink}` — display, body, micro-label, mono, everything. The single text color is non-negotiable.\n- Use Instrument Serif at weight 400 with tight line-height (0.84-1.06) and negative letter-spacing (-0.018 to -0.04em) for every display moment. The serif's elegance lives in this configuration.\n- Add at least one `{components.sun-bloom}` to every surface. Atmospheric depth is the system's depth mechanism; a flat parchment surface reads as broken.\n- Pair a sun-bloom with an `{components.ember-bloom}` in the opposite corner when you want warm-cool tension without raising the overall saturation.\n- Use `{components.hairline-rule}` (1px solid ink) for every structural separator: header-band underline, ledger row, footer column, strand separator.\n- Set every uppercase label in Archivo weight 600 with 0.16-0.32em tracking. Without the wide tracking, labels read as code, not editorial.\n- Use `{components.yellow-panel}` (full-bleed sun column or panel) when a surface needs strongest color commitment — keep ink text on top at full opacity.\n- Place the persistent `{components.pagenum}` (JetBrains Mono, 75% opacity ink) at bottom-right of every surface.\n- Reserve JetBrains Mono exclusively for numerical and metadata callouts: dates, ledger figures, chart values, page numbers, nav-hint. Never use mono for display or body.\n\n### Don't\n\n- Don't add drop shadows. The system has zero box-shadows and zero text-shadows. Adding any blurred or offset shadow breaks the printed-paper feel immediately.\n- Don't round any corner. Every shape is strict rectangle. Border-radius is forbidden.\n- Don't use borders thicker than 1px. The hairline rule is the only border vocabulary; 2px, 3px, or 4px outlines do not exist.\n- Don't set Instrument Serif at weight 700 or any bold weight. The serif's character lives at weight 400; bold serif display flattens the system.\n- Don't introduce a second text color. Yellow text on paper, ember text anywhere, or muted-ink secondary text — none exist. Text is always full-opacity ink.\n- Don't crowd the canvas with cards or panels. The system reads as elegant when sparse. Bordered cards, button stacks, or multi-region grids of containers break the editorial restraint.\n- Don't invert: ink panels with yellow or paper text are not part of the system. Ink ground is reserved for chart bars and small rule elements only.\n- Don't substitute Inter, Helvetica, or system-ui for Archivo, or Times for Instrument Serif. The font selection is the visual identity; substitution collapses the aesthetic.\n- Don't use mono for body or headlines. JetBrains Mono is exclusively for numerical/metadata chrome.\n- Don't omit the bloom layer on a surface. A flat parchment slide reads as a CMS template; the bloom is the atmosphere that signals \"biennale\".\n\n## Responsive Behavior\n\nThis system is built as a **viewport-fluid 100vw × 100vh deck** with no responsive breakpoints. Every font size, padding value, and gap uses CSS `clamp()` with both vw and vh terms — `clamp(40px, min(4.4vw, 7vh), 88px)` is a typical pattern. Display type scales by whichever viewport axis is shorter, so portrait orientations don't blow out the headlines.\n\n### Scaling Behavior\n- Cover-scale display scales 120px → 240px.\n- Chapter-divider jumbo numeral scales 220px → 720px.\n- Headline scales 40px → 88px.\n- Body scales 14px → 16px.\n- Edge padding scales 40px → 76px.\n- Hairline rule (1px) and pagenum sizing (11-13px) are essentially fixed.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `PageDown`, or `Space`.\n- Slides reverse via `ArrowLeft` or `PageUp`.\n- `Home` jumps to first slide, `End` to last.\n- Horizontal touch swipe with a 40px threshold advances/reverses.\n- Slide crossfades at 280ms ease via `opacity` toggle on the `.active` class. Only the active slide is `pointer-events: auto`.\n\n### Print Behavior\nThe system has no `@media print` rule. The crossfade transition is screen-only. For static export, capturing each slide individually via screenshot preserves all atmospheric layers (the radial blooms are pure CSS gradients, not assets).\n\n### Mobile Behavior\nThe `min(vw, vh)` pattern in display clamps means narrow portrait viewports automatically shrink display type to fit. The strand and ledger rows use fixed-px first columns (56px, 92px) that may feel tight on narrow widths — the system is designed for landscape presentation contexts and is functional but not optimized for sub-768px portrait usage.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / numerals / headlines / date rail | Instrument Serif 400 | 得意黑 Smiley Sans (oblique) — display moments; 思源宋体 Noto Serif SC 400 as fallback for long-form serif headlines |\n| Body / lede / micro-label | Archivo 400–600 | 思源宋体 Noto Serif SC 400 for body; 思源黑体 Noto Sans SC 600 for micro-labels |\n| Mono data / dates / page numbers | JetBrains Mono 400 | 思源黑体 Noto Sans SC 500 with tabular-feeling alignment — see Known CJK Gap below |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role, with Latin glyphs handled by the same CJK family. Both 思源宋体 and 思源黑体 ship Latin glyphs that read cleanly alongside Chinese characters, so a mixed sentence renders in a consistent face. 得意黑 is used surgically — only on the biggest display moments where its slight oblique slant matches the Italian-poster register Instrument Serif provides in the Latin original. For everything else (body, micro-label, mono), Noto Serif SC / Noto Sans SC carries both scripts.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=Noto+Serif+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-smiley-sans-oblique/font.min.css\">\n```\n\nAfter loading, reference 得意黑 as `font-family: 'Smiley Sans Oblique', 'Noto Serif SC', serif` on the display tokens that should carry the strongest poster register.\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.5–1.55), display 1.05–1.15 (up from the very tight 0.84–0.96 used on Instrument Serif). The Latin display tokens here use line-height as low as 0.84 — at that compression, CJK characters collide vertically. Open display to a minimum of 1.0 for Chinese, and 1.15+ on multi-line headlines.\n- **Letter-spacing**: set to 0 on every CJK run. The Latin display tokens use negative tracking from −0.005em down to −0.04em; on square CJK glyphs this overlaps strokes and reads as broken. Micro-labels at 0.16–0.32em wide tracking also drop to 0.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every micro-label and rail-label in this system uses `text-transform: uppercase`; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））. Replace the en-dash separator in date ranges with a Chinese 至 or full-width 「—」 hyphen.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 春季双年展` not `2024春季双年展`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style — let it handle mixed editorial sentences. Don't let the browser font-switch to Archivo mid-paragraph.\n\n### Aesthetic Notes for This System\n\nThe system's editorial identity rests on Instrument Serif's high-contrast, tall-ascender personality — a face that signals \"art biennale catalogue\" and \"slow literary quarterly\". The closest Chinese equivalent for register is **思源宋体 Noto Serif SC** for body and editorial display, with **得意黑 Smiley Sans Oblique** reserved for the poster-scale display moments where Instrument Serif at 120–240px does the heaviest identity work in the Latin original. 得意黑's slight italic tilt and slab character matches the Italian-exhibition-poster register; pure Noto Serif SC at jumbo numerals reads as restrained academic Chinese rather than biennale-loud.\n\nThe \"single text color, single accent\" discipline of this system transfers cleanly to CJK — ink-on-paper, sun-bloom atmosphere, hairline rules, no shadows. The micro-label treatment (Archivo weight 600, uppercase, 0.16–0.32em tracking) is the system's most fragile element when translated: CJK micro-labels lose both the uppercase signal and the wide tracking. Compensate by setting Chinese micro-labels in 思源黑体 weight 600 at 0 tracking with the **slightly heavier weight contrast** (drop body to weight 400 of 思源宋体, keep labels at 600 of 思源黑体) and by **always pairing the label with a hairline-soft rule beneath** — the rule does the chrome-recognition work the wide-tracked uppercase did in Latin.\n\n### Known CJK Gap\n\n- **No CDN-loadable Chinese monospace face for tabular data.** JetBrains Mono's role here (calendar ledger dates, chart year/value labels, page numbers) depends on monospaced figure rhythm that CJK doesn't provide. 思源黑体 at weight 500 with `font-feature-settings: \"tnum\"` gives tabular Latin digits but Chinese characters remain proportional. For ledger rows where alignment is structural, keep the date and value columns in Latin digits (Arabic numerals + Latin date abbreviations) and use 思源黑体 only for the title/venue cells.\n- **Instrument Serif italic has no direct Chinese counterpart.** The italic display token (manifesto-scale quote body) loses its slow-reading personality entirely in CJK. Use 思源宋体 400 with looser line-height (1.4) and slightly larger size to compensate; consider 「」 quotation framing to signal \"this is a quoted passage\".\n- **得意黑 may not load on restricted networks.** The cn-fontsource CDN is reliable in mainland China but less proven internationally. Always include `'Noto Serif SC', serif` in the stack as fallback so display headlines remain editorial even when 得意黑 fails.\n\n## Iteration Guide\n\n1. Any new surface starts on `{colors.paper}`, places at least one `{components.sun-bloom}` for atmosphere, and pins the persistent `{components.pagenum}` to bottom-right.\n2. Any new headline uses Instrument Serif weight 400 with tight line-height and negative tracking. Reach for `{typography.headline}` for primary moments and `{typography.display}` only for cover-scale.\n3. Any new body paragraph uses Archivo weight 400 with line-height 1.5. Lede paragraphs following a headline use the slightly larger `{typography.body-lede}` for breathing room.\n4. Any new eyebrow or section tag uses the micro-label treatment: Archivo weight 600, uppercase, 0.16-0.32em tracking, ink color, no fill. Don't substitute a pill or chip.\n5. Any new structural separator is a 1px `{components.hairline-rule}` in ink, or its soft variant for secondary list rows. Never reach for a thicker border.\n6. Any new numerical or metadata content (date, page number, chart value, ledger figure) uses JetBrains Mono. Serif numerals are reserved for display moments only.\n7. Any new \"poster-scale\" color statement uses `{components.yellow-panel}` — a flooded column or fraction of the canvas in `{colors.sun}` with ink text on top.\n8. Any new ordered list of program items uses the `{components.strand-row}` pattern: serif numeral cell + serif title + sans body, separated by hairline-soft rule.\n9. Any new tabular itinerary uses the `{components.ledger-row}` pattern: mono date + serif title + sans venue + mono duration right-aligned, separated by hairline-soft rule.\n10. If a surface feels flat, add an `{components.ember-bloom}` in the opposite corner from the sun-bloom — never add a card border or shadow.\n\n## Known Gaps\n\n- **Instrument Serif, Archivo, and JetBrains Mono are loaded from Google Fonts** via a preconnect + `<link>`. Fallbacks (`Georgia`, `Helvetica Neue`, `ui-monospace`) are defined but render very differently — in environments where Google Fonts fail, the system collapses to generic editorial defaults and loses its identity.\n- **The Instrument Serif italic axis is loaded** but used only for the manifesto-scale quote treatment. Other italic moments (an `<em>` inside a body paragraph, for instance) will not stylistically signal the same as the dedicated italic display.\n- **The system has no chart engine** — the data slide uses inline `style=\"width: XX%\"` on bar divs. Building dynamic charts requires computing widths in JS or templating the markup server-side.\n- **The block-tile underprint uses hardcoded grid positions** (`grid-column: 1 / 3; grid-row: 6 / 9;`) per tile. Tiles are decorative and the placements are tuned per surface; there is no parametric tile placement system.\n- **The vertical rail-label uses a rotated transform** that can produce subtle subpixel rendering artifacts on some browsers. The label is decorative; if rendering looks off, it can safely be dropped.\n- **The slide navigation has no slide indicator beyond the pagenum.** There are no dot-rails, no progress bar, no thumbnail bar. The pagenum text is the only positional cue.\n- **The crossfade transition is screen-only** and doesn't degrade to a sensible print/static state. Capturing slides for PDF export requires manual screenshot per surface.\n- **The cover and colophon footer-band columns use fractional widths** (`1.1fr 1fr 1.4fr 2fr` and `1.2fr 1.1fr 1fr 1.4fr`). These ratios are tuned to the demo content and may need adjusting if footer cells carry significantly different text length.\n- **The system loads Google Fonts with `ital` axis for Instrument Serif** but only `wght` axes for Archivo and JetBrains Mono. Adding italic body or italic mono moments requires updating the font-loading request.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/preview.md":"# Biennale Yellow Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/biennale-yellow/design.md`\n- Preview card: `bold-template-pack/templates/biennale-yellow/preview.md`\n\n## Selection Metadata\n\n- Slug: `biennale-yellow`\n- Tagline: Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients.\n- Mood: editorial, atmospheric, warm, cultural-institution, poster-like\n- Tone: literary, considered, contemplative, warm-modern, Dutch-editorial\n- Formality: high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, studio retrospectives. Equally good for any deck wanting Dutch-editorial atmosphere with an unmistakable single-color signature.\n- Avoid for: Decks that need visual punch or saturated multi-color energy — the warm-paper canvas and one-yellow palette are intentionally quiet and atmospheric.\n\n## Visual Snapshot\n\nA literary-editorial presentation system in the visual register of an art biennale catalogue or quiet exhibition poster. The aesthetic is built on warm parchment grounds (#E9E5DB) flooded with soft solar yellow (#F1EE2E) radial blooms, set against a single deep indigo navy ink color. Display type is Instrument Serif — a contemporary high-contrast serif with tall ascenders and elegant italics — paired with Archivo for sans-serif chrome and JetBrains Mono for numerical and metadata callouts. No drop shadows, no rounded corners, no bordered cards: the only structural lines are hairline 1px rules in ink. The mood sits between a folded museum brochure, a slow-reading literary quarterly, and a Mediterranean exhibition poster — confident, atmospheric, and deeply restrained.\n\nBiennale Yellow is a literary-editorial presentation system modeled on the visual language of European art biennale catalogues, slow exhibition posters, and quarterly literary publications. There are no cards, no buttons, no shadows, no rounded corners. The structural vocabulary is just three things: paper, ink, and yellow.\n\n## Preview Ingredients\n\n- Palette: paper #E9E5DB; paper-deep #DCD6C4; sun #F1EE2E; sun-soft #F8F39B; haze #F0DA7C; ink #1B2566; ember #E26B4A\n- Typography: See full design doc after selection.\n- Signature move: Warm parchment ground ({colors.paper}) on every surface; never white, never gray.\n- Signature move: Single ink color ({colors.ink}) for all text and all rules — no secondary text colors.\n- Signature move: Solar yellow ({colors.sun}) deployed three ways: as a flooded panel, as a soft radial bloom, as a translucent geometric tile underprint.\n- Signature move: Instrument Serif handles every display moment at scales from 40px to 720px+.\n- Signature move: Archivo Bold uppercase + 0.16–0.32em tracking is the universal label voice.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/design.md":"---\nversion: alpha\nname: BlockFrame\ndescription: \"A maximalist neobrutalist presentation system built on 4px solid black borders, 8px hard offset shadows, and a high-key candy palette of five saturated pastels plus cream and off-white. Display type runs Inter at weight 800-900 in tight uppercase; secondary chrome uses Space Grotesk as a quasi-monospace label face. Tilted decorative shapes (rotated stars, rectangles, badges) puncture the borders and break the grid intentionally. Pastels are paired loudly: pink + blue + green + yellow + cream cycle through every region with deliberate juxtaposition. The aesthetic borrows from zine layout, 1990s-revival sticker books, and contemporary toy packaging — bold, joyful, slightly chaotic, never timid.\"\n\ncolors:\n  black: \"#000000\"\n  white: \"#FFFFFF\"\n  offwhite: \"#FFFDF5\"\n  pink: \"#FE90E8\"\n  blue: \"#C0F7FE\"\n  green: \"#99E885\"\n  yellow: \"#F7CB46\"\n  cream: \"#FFDC8B\"\n\nborders:\n  primary: \"4px solid {colors.black}\"\n  thin: \"3px solid {colors.black}\"\n\nshadows:\n  default: \"8px 8px 0px {colors.black}\"\n  small: \"4px 4px 0px {colors.black}\"\n  hover: \"6px 6px 0px {colors.black}\"\n  close-yellow: \"12px 12px 0px {colors.yellow}\"\n  close-white: \"6px 6px 0px {colors.white}\"\n\ntypography:\n  heading-xl:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(48px, 6vw, 96px)\"\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n    textTransform: uppercase\n  heading-lg:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 800\n    fontSize: \"clamp(32px, 4vw, 64px)\"\n    lineHeight: 1\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  heading-md:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(24px, 2.5vw, 40px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  close-title:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(40px, 5vw, 80px)\"\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n    textTransform: uppercase\n  quote-text:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(28px, 3.5vw, 52px)\"\n    lineHeight: 1.15\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  stat-number:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(36px, 4vw, 64px)\"\n    lineHeight: 1\n  card-title:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: 22px\n    lineHeight: 1.2\n    textTransform: uppercase\n  step-num:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: 48px\n    lineHeight: 1\n  body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(16px, 1.2vw, 20px)\"\n    lineHeight: 1.6\n  body-card:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: 15px\n    lineHeight: 1.6\n  list-body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: 16px\n    lineHeight: 1.5\n  label:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 13px\n    lineHeight: 1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  mono-tag:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 14px\n    lineHeight: 1\n    letterSpacing: 0.05em\n    textTransform: uppercase\n  mono-meta:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 500\n    fontSize: 15px\n    letterSpacing: 0.02em\n  subtitle-mono:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 500\n    fontSize: 18px\n    lineHeight: 1.5\n  counter:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 700\n    fontSize: 14px\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  legend-item:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 13px\n\nspacing:\n  slide-pad: 60px\n  card-pad-lg: 60px\n  card-pad-md: 36px\n  card-pad-sm: 28px\n  card-pad-xs: 22px\n  gap-lg: 48px\n  gap-md: 32px\n  gap-sm: 24px\n  gap-xs: 16px\n  pad-bottom-clearance: 110px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  default-background: \"{colors.offwhite}\"\n\ncomponents:\n  card-elevated:\n    border: \"4px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.default}\"\n    description: \"Primary elevated card. 4px ink border + 8px ink offset shadow. Background is white by default; on darker surfaces background may shift to offwhite or to a colored fill.\"\n  card-flat:\n    border: \"4px solid {colors.black}\"\n    background: \"{colors.white}\"\n    description: \"Bordered card without elevation shadow. Used for secondary content cells inside multi-card grids where the shadow would compound.\"\n  card-small:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Compact card with thinner border + smaller offset shadow. Used for intro-cards, stat-cards, team-cards, and timeline-steps.\"\n  label-pill:\n    border: \"3px solid {colors.black}\"\n    padding: \"6px 16px\"\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontSize: 13px\n    fontWeight: 600\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Universal section eyebrow. White base by default; pink, blue, green, yellow, cream variants swap background. Always sits on a 3px black border with a 4px hard offset shadow.\"\n  button-primary:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    color: \"{colors.black}\"\n    padding: \"14px 32px\"\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: 16px\n    boxShadow: \"{shadows.small}\"\n    description: \"Primary CTA. Yellow fill with black text, 3px black border, 4px offset shadow. Hover lifts the button -2/-2 and grows shadow to 6px.\"\n  corner-bracket:\n    width: 24px\n    height: 24px\n    border: \"3px solid {colors.black}\"\n    description: \"Two L-shaped brackets at opposite corners of a card or frame (tl + br + tr + bl pattern available). Sits inside the card edge as a decorative frame-within-frame.\"\n  icon-square:\n    width: 64px\n    height: 64px\n    border: \"3px solid {colors.black}\"\n    description: \"Solid pastel square (pink/blue/green) holding a single uppercase letter glyph at weight 700 / 28px. Used as feature-card icons.\"\n  feature-deco:\n    width: 48px\n    height: 48px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    position: \"absolute top -12px right 24px\"\n    description: \"Yellow square notch that protrudes from the top edge of a feature card, breaking the card's top border line.\"\n  stat-deco-dot:\n    width: 12px\n    height: 12px\n    borderRadius: 50%\n    border: \"2px solid {colors.black}\"\n    description: \"Small black-bordered colored circle pinned to the top-right of a stat card. The only round shape used on cards. Fill cycles through the pastel palette.\"\n  avatar-square:\n    width: 72px\n    height: 72px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.pink}\"\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: 28px\n    textTransform: uppercase\n    description: \"Square avatar with two-letter initials, used in team grids. Fill cycles through the pastel palette.\"\n  list-number:\n    width: 36px\n    height: 36px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 700\n    fontSize: 14px\n    description: \"Square numerical bullet pinned to the left of each list item. Black border, yellow fill, mono numeral.\"\n  star-burst:\n    clipPath: \"polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)\"\n    border: \"3px solid\"\n    background: \"{colors.pink}\"\n    description: \"10-point star clipped via CSS clip-path with a 3px border. Decorative attention-grabber pinned to corners of close-frames and feature cards.\"\n  stripe-block:\n    background: \"repeating-linear-gradient(45deg, {colors.black}, {colors.black} 4px, {colors.green} 4px, {colors.green} 12px)\"\n    border: \"3px solid {colors.black}\"\n    description: \"Black-and-color diagonal stripe panel used as decorative attention block on poster-class surfaces.\"\n  bg-dot-grid:\n    backgroundImage: \"radial-gradient(circle, {colors.black} 1.2px, transparent 1.2px)\"\n    backgroundSize: \"24px 24px\"\n    description: \"Faint dot-grid background pattern used as an overlay on light surfaces or as decoration in corners of cards.\"\n  tilt-card:\n    transform: \"rotate(±2deg) or rotate(±8deg)\"\n    description: \"Card with intentional tilt. Stat cards alternate -2deg / +2deg; decorative rectangles tilt up to ±12deg. The tilt is the system's playful structural signature.\"\n  nav-btn:\n    width: 48px\n    height: 48px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Square nav arrow button. Hover translates -2/-2 and grows shadow; active translates 2/2 and shrinks shadow.\"\n  slide-counter:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    padding: \"10px 18px\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Persistent slide counter pill at bottom-left. Space Grotesk uppercase NN / NN format.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBlockFrame is a **maximalist neobrutalist presentation system** built on five structural laws: every region has a 4px black border, every elevated element has an 8px hard offset shadow, every corner is square, every accent color is a saturated pastel, and every layout is allowed to be a little bit crooked. The system's joy comes from the deliberate collision of these laws — bordered cards meet bordered cards, shadows stack against shadows, tilted decorations puncture the grid intentionally.\n\nThe type system pivots on **Inter** (weights 400-900) for display, body, and stats — set at weight 800-900 in tight uppercase with negative letter-spacing for headlines, weight 500 sentence case for body, and weight 700 uppercase for card titles. **Space Grotesk** (weights 400-700) is the secondary face, used as a quasi-monospace label voice for eyebrows, slide counters, stat labels, mono tags, and any chrome that should read as \"system\" rather than \"editorial\". The face combination is deliberately ordinary — both are widely-available open sans-serifs — but the treatment (heavy uppercase Inter + wide-tracked Space Grotesk) gives them a distinct neobrutalist register.\n\nThe palette is built around **five saturated pastels** (pink `#FE90E8`, blue `#C0F7FE`, green `#99E885`, yellow `#F7CB46`, cream `#FFDC8B`) plus **pure black** (`#000000`) for borders and text, **white** (`#FFFFFF`) for clean card fills, and **off-white** (`#FFFDF5`) for warm canvas. The pastels are not subtle accents — they are full-bleed surface fills. A typical deck cycles every slide through a different colored ground (offwhite cover → blue intro → offwhite content → green chart → pink quote → yellow split → offwhite timeline → blue stats → cream team → black close). This color cycling is the system's primary rhythm.\n\nDepth is **hard offset shadow at 4px and 8px**, always solid black, always zero blur, always positioned bottom-right. Larger elements get 8px, smaller chrome gets 4px. The close-frame uses a single 12px offset in **yellow** (the only colored shadow in the system) as the system's loudest depth statement, and inverted close-frames pair 6px **white** shadows on black surfaces. Borders are 4px solid black on primary cards, 3px solid black on secondary chrome. Border weight and shadow size are tightly coupled — a 4px border carries an 8px shadow; a 3px border carries a 4px shadow.\n\n**Density philosophy: comfortably dense.** This system reads as authoritative when packed and timid when sparse. A typical surface holds: a label-pill eyebrow + a large headline + a multi-card grid (3-6 cards) + at least one decorative element (tilted rectangle, star burst, stripe block, corner bracket, deco dots). Empty space within a region reads as \"broken\" — every card should be filled, every grid should be complete. The system's joy depends on the visual chatter of many bordered objects existing in the same frame.\n\n**Key Characteristics:**\n- 4px solid black borders on primary cards, 3px on secondary chrome — never thinner.\n- 8px hard offset shadows on primary cards, 4px on secondary chrome — solid black, zero blur.\n- Five-pastel palette (pink, blue, green, yellow, cream) plus black, white, off-white — cycled across surfaces.\n- Inter weight 800-900 uppercase with negative tracking is the display voice; Space Grotesk weight 600 uppercase with 0.08em tracking is the label voice.\n- Square corners everywhere except a single circular accent dot on stat cards.\n- Tilted decorative elements (rotated rectangles, stars, badges) puncture the grid intentionally.\n- Label pills (`{components.label-pill}`) carry a 3px border, 4px offset shadow, and a pastel fill variant — the universal section eyebrow.\n- Colored fills are bold and saturated; pastels are used as panel grounds, not as light accents.\n- Yellow is the default CTA color; black is the default close-surface color.\n- Star bursts, stripe blocks, and dot grids are reusable decorative attention units.\n\n## Colors\n\n### Palette\n\n- **Black** (`{colors.black}` — `#000000`): The structural color. Every border, every primary text moment, every shadow. Pure black, no warm bias. The system's contrast anchor.\n- **White** (`{colors.white}` — `#FFFFFF`): The default card fill. Used on every primary card and as the background of label-pills and nav-buttons. Pure white, no warmth.\n- **Off-white** (`{colors.offwhite}` — `#FFFDF5`): The warm canvas tone. The default body/slide background when no pastel ground is in play. Subtly warmer than pure white so that white cards sitting on top still feel layered.\n- **Pink** (`{colors.pink}` — `#FE90E8`): A high-key candy magenta. Used as a full-surface ground, as label-pill fill, as icon-square fill, as star-burst fill, and as one of the pastel chart series. The most saturated of the five pastels.\n- **Blue** (`{colors.blue}` — `#C0F7FE`): A pale cyan-ice blue. Used as a full-surface ground (the \"intro\" and \"stats\" feel), as label-pill fill, as icon-square fill, and as a chart series.\n- **Green** (`{colors.green}` — `#99E885`): A bright spring green. Used as a full-surface ground, as label-pill fill, as icon-square fill, in the stripe-block diagonal pattern, and as a chart series.\n- **Yellow** (`{colors.yellow}` — `#F7CB46`): The CTA color. Used as the default button fill, as the close-frame shadow color, as list-number squares, as the feature-deco notch, and as label-pill fill. The brightest, most attention-pulling pastel.\n- **Cream** (`{colors.cream}` — `#FFDC8B`): A warm yellow-cream. Softer than yellow, more saturated than offwhite. Used as a full-surface ground (the \"team\" or \"cover\" feel), as label-pill fill, and as a tertiary chart accent.\n\n### Defaults\n\n- **Default surface background**: `{colors.offwhite}` for content-heavy surfaces; cycle through `{colors.cream}`, `{colors.blue}`, `{colors.pink}`, `{colors.green}`, `{colors.yellow}` for surfaces that need a stronger ground. The cycle is the rhythm; staying on one ground for many slides flattens the system.\n- **Default headline color**: `{colors.black}` on all light/pastel surfaces; `{colors.white}` on the black close-surface.\n- **Default body text color**: `{colors.black}` on all light/pastel surfaces; `{colors.white}` or `{colors.cream}` on dark surfaces.\n- **Default border color**: `{colors.black}` — always. There are no colored borders anywhere except the 4px white border on the inverted close-frame.\n- **Default card fill**: `{colors.white}`. Use a pastel fill only when the card is part of a multi-card row where each card needs distinct color identity (e.g., the timeline-step row where each step is a different pastel).\n- **Default button fill**: `{colors.yellow}`. Other pastels work, but yellow is the system's primary \"click here\" signal.\n- **Default label-pill base**: `{colors.white}`; pastel variants (`{colors.pink}`, `{colors.blue}`, `{colors.green}`, `{colors.yellow}`, `{colors.cream}`) signal section type or decorate the eyebrow.\n- **Default decorative accent on stat cards**: a 12px circle (`{components.stat-deco-dot}`) in a pastel fill — cycling pink, blue, green, yellow across cards.\n- **Default chart palette order**: pink → blue → green (three-series), with yellow and cream available for additional series.\n\nThe pastels are interchangeable in role — none of them carry fixed semantic meaning (green isn't \"success\", red doesn't exist in the palette at all). Pair them by visual juxtaposition: pink + blue + green is the most common trio; cream + yellow is the warm pair; blue + pink is the cool-warm contrast.\n\n## Typography\n\n### Font Family Stack\nThe system runs two faces.\n\n**Inter** (weights 400-900) is the display, body, headline, and stat face. Used at weight 900 for hero/close titles and quote text, weight 800 for primary headlines, weight 700 for medium headlines and card titles, weight 500 for body. Display weights are always uppercase with negative letter-spacing (-0.02 to -0.03em); body weights are always sentence case with default tracking. The contrast between heavy uppercase display and weight-500 sentence body is the system's typographic rhythm.\n\n**Space Grotesk** (weights 400-700) is the label and chrome face. Used at weight 600 for label-pills (13px, 0.08em tracking, uppercase) and at weight 500 for monospace meta callouts. The face is technically not monospace, but its slightly geometric character + the wide tracking treatment makes it read as the system's \"code\" voice.\n\nDon't introduce a third face. The Inter + Space Grotesk pairing is the entire typographic palette.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.heading-xl}` | 48–96px clamp | Inter | 900 | Hero or cover-scale headline |\n| `{typography.heading-lg}` | 32–64px clamp | Inter | 800 | Primary section headline |\n| `{typography.heading-md}` | 24–40px clamp | Inter | 700 | Region headline, chart title |\n| `{typography.close-title}` | 40–80px clamp | Inter | 900 | Closing-statement title (inverted surface) |\n| `{typography.quote-text}` | 28–52px clamp | Inter | 900 | Quote body — always uppercase |\n| `{typography.stat-number}` | 36–64px clamp | Inter | 900 | Stat numeral |\n| `{typography.card-title}` | 22px | Inter | 700 | Feature card title — uppercase |\n| `{typography.step-num}` | 48px | Inter | 900 | Numeral inside a timeline-step (opacity 0.6) |\n| `{typography.body}` | 16–20px clamp | Inter | 500 | Standard body paragraph |\n| `{typography.body-card}` | 15px | Inter | 500 | Body inside compact cards |\n| `{typography.list-body}` | 16px | Inter | 500 | Numbered list body |\n| `{typography.label}` | 13px | Space Grotesk | 600 | Text inside label-pill |\n| `{typography.mono-tag}` | 14px | Space Grotesk | 600 | Mono tag/badge, slide-counter |\n| `{typography.mono-meta}` | 15px | Space Grotesk | 500 | Inline mono metadata |\n| `{typography.subtitle-mono}` | 18px | Space Grotesk | 500 | Hero subtitle / close subtitle |\n| `{typography.counter}` | 14px | Space Grotesk | 700 | Persistent slide counter (NN / NN) |\n| `{typography.legend-item}` | 13px | Space Grotesk | 600 | Chart legend label |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.heading-xl}` (48–96px). Always uppercase, always weight 900, always with -0.03em tracking.\n- **Default size for a primary section headline**: `{typography.heading-lg}` (32–64px). Uppercase, weight 800, -0.02em.\n- **Default size for a region or chart title**: `{typography.heading-md}` (24–40px). The only Inter heading not in uppercase by default — though uppercase is permitted.\n- **Default size for a stat numeral**: `{typography.stat-number}` (36–64px). Weight 900, line-height 1.\n- **Default size for body paragraph**: `{typography.body}` (16–20px clamp). Weight 500, sentence case, line-height 1.6.\n- **Default size for an eyebrow label**: `{typography.label}` (13px) inside the `{components.label-pill}`.\n- **Default weight for any Inter display**: 800 or 900. Inter display at weight 700 reads as \"almost there\"; only use 700 for `{typography.heading-md}` or card titles.\n- **Default weight for any Inter body**: 500. Body at 400 reads as too light, body at 700 reads as oversized.\n- **Default tracking for any Space Grotesk label/chrome**: 0.05-0.10em. Wide tracking is the face's \"chrome\" signal.\n- **Default tracking for any Inter display**: -0.01em (heading-md) to -0.03em (heading-xl). Display without negative tracking reads as untreated.\n\nWhen unsure which heading token to reach for, default to `{typography.heading-lg}` (32–64px) for the slide's primary text moment. `{typography.heading-md}` is for region or chart titles within a slide.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Inter display element (heading-xl, heading-lg, quote-text, close-title) is uppercase.** Sentence-case Inter display at weights 800+ does not exist in this system. The uppercase + heavy-weight + negative-tracking combination is the visual identity.\n- **Every Inter display element uses negative letter-spacing** (-0.01 to -0.03em). Display without negative tracking reads as default Inter, which is a fundamentally different aesthetic.\n- **Every label-pill carries the 3px border + 4px shadow + uppercase Space Grotesk text** combination. A label without all three properties is not a label-pill — it's a stray text element.\n- **Every card-title is uppercase Inter weight 700.** Card titles in sentence case break the brutalist rhythm.\n- **Every Space Grotesk label/chrome/counter is uppercase with 0.05-0.1em tracking.** Sentence-case Space Grotesk does not exist in this system except for body-adjacent metadata (mono-meta, mono inline).\n- **Every stat numeral is Inter weight 900 with line-height 1.** Stat numerals are display moments, not data chrome.\n- **Every Inter body block is sentence case with line-height 1.6 (or 1.5 for compact card body).** Body in uppercase or with tight line-height reads as broken.\n- **Step numbers inside timeline-step cards are 48px weight 900 at opacity 0.6.** The reduced opacity is mandatory — full-opacity step numbers overwhelm the step title.\n\n### Typography Principles\n\nThe voice contrast is **bold uppercase display ↔ sentence body ↔ wide-tracked label**. Italic is never used. Underline is never used. The only emphasis mechanism is weight contrast within the Inter ladder and the uppercase/sentence-case switch.\n\nDisplay elements should be allowed to **dominate the canvas**. The system is built for poster-scale typography; reading a heading-xl at small size collapses its character. Lean into the upper bound of every clamp.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and toggled via `display: none` / `display: flex` on the `.active` class. Default slide padding is 60px on all sides. Slides that contain bottom-anchored grids (timeline, team grid, chart with stat column) carry an additional `padding-bottom: 110px` to clear the fixed slide-counter and nav-controls chrome.\n\nThe default slide flex direction is column with `justify-content: center`. For two-column splits (intro slide, split image+text), flex direction switches to row.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.slide-pad}` | 60px | Default slide padding from edge to content |\n| `{spacing.card-pad-lg}` | 60px | Hero-frame and quote-frame internal padding |\n| `{spacing.card-pad-md}` | 36px | Feature-card internal padding |\n| `{spacing.card-pad-sm}` | 28px | Intro-card internal padding |\n| `{spacing.card-pad-xs}` | 22px | Team-card and small-cell padding |\n| `{spacing.gap-lg}` | 48px | Gap between major sections (header-to-grid) |\n| `{spacing.gap-md}` | 32px | Gap between feature cards |\n| `{spacing.gap-sm}` | 24px | Gap between intro cards, stat cards |\n| `{spacing.gap-xs}` | 16px | Gap inside list items, intra-card content |\n| `{spacing.pad-bottom-clearance}` | 110px | Bottom padding reserve to clear fixed nav chrome |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Slide counter** at bottom-left — 3px black border, white fill, 4px shadow, Space Grotesk 14px weight 700 uppercase, NN / NN format.\n- **Nav controls** at bottom-right — two 48px square nav buttons with 3px borders, white fills, 4px shadows.\n- The slide-counter and nav-controls are not part of the slide composition — they live outside `.slides-container` and overlap the bottom edge.\n\n### Card-on-Card Structure\nThe system's primary layout pattern is **cards on grounds on grounds**. A typical slide places a colored-ground surface, on which sits a white card with 4px black border + 8px shadow, which may contain smaller cards or icon-squares. Each level of nesting carries its own border weight: 4px for the outer card, 3px for inner chrome. This nested-bordered structure is what gives the system its dense, packed feel.\n\n### Decorative Disruption\nTilted decorative elements (rotated rectangles, stars, badges, dot grids) are placed absolutely on slide and card surfaces to puncture the grid intentionally. These are not \"background decoration\" — they are part of the composition. A surface without any decorative element reads as too clean.\n\n## Depth and Elevation\n\n### Hard Offset Shadow Stack\nThe system uses three primary shadow values:\n- **`{shadows.default}`** = `8px 8px 0px {colors.black}` — primary card shadow. Used on hero-frame, feature-card, quote-frame, chart-frame, and any elevated card.\n- **`{shadows.small}`** = `4px 4px 0px {colors.black}` — secondary chrome shadow. Used on intro-card, stat-card, team-card, timeline-step, label-pill, button-primary, nav-btn, slide-counter.\n- **`{shadows.hover}`** = `6px 6px 0px {colors.black}` — hover state for buttons and nav. Triggered with a -2/-2 transform.\n\nAll shadows are solid black, zero blur, fixed offset bottom-right. The shadow + transform pairing on hover creates a \"lifting off the page\" interaction signature — the element translates -2/-2 while the shadow grows to 6/6, simulating a peel-up.\n\n### Inverted Shadows\nOn the dark close-surface, shadows invert their color but keep the offset logic:\n- **`{shadows.close-yellow}`** = `12px 12px 0px {colors.yellow}` — the loudest depth statement in the system. Used on close-frame to make the inverted surface read as still \"elevated\" despite its dark ground.\n- **`{shadows.close-white}`** = `6px 6px 0px {colors.white}` — used on the close-btn to maintain elevation on the black ground.\n\nThese colored shadows are the only exceptions to the \"shadows are always black\" rule, and they appear only on the dark surface.\n\n### Border-Based Depth\nMost of the system's apparent layering comes from the 4px or 3px ink borders, not from shadow. A card with a border but no shadow still reads as \"an object on a surface\" — the shadow is what makes it read as \"lifted\". Use shadow for elevated cards; use border-only for secondary cards inside a multi-card grid where stacked shadows would compound into noise.\n\n### Tilted Elements as Depth\nThe system's playful depth signature is **tilt**. Stat cards alternate -2deg / +2deg rotation. Decorative pink rectangles tilt up to ±12deg. The yellow button tab on the hero frame tilts -3deg. These tilts break the grid alignment intentionally and create perceived dimensionality without using actual perspective or shadow.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px** on everything structural — cards, label-pills, buttons, icon-squares, list-numbers, avatars, badges. Square corners are non-negotiable.\n- **50% (circle)** used only for the stat-deco dot (12×12 circular accent pinned to stat cards). This is the only round shape in the system.\n\nThe square-corner discipline is the system's structural identity. Adding rounded corners to any card or chip immediately reads as a different aesthetic.\n\n### Border Weights\n- **4px solid `{colors.black}`** — used on primary cards (hero-frame, feature-card, quote-frame, chart-frame, team-card border, timeline-step border, stat-card border) and the close-frame inverse (4px solid white on black ground).\n- **3px solid `{colors.black}`** — used on secondary chrome (label-pill, button, intro-card, icon-square, list-number, avatar, corner-bracket, nav-btn, slide-counter, stripe-block, star-burst). The 3px weight signals \"secondary structural\" vs. the 4px \"primary structural\".\n- **2px solid `{colors.black}`** — used only on legend swatches (16×16 chart swatches) and stat-deco dots. The thinnest border weight, reserved for atomic chrome.\n- **4px solid `{colors.white}`** — used only on the inverted close-frame, the visual-box, and its ::after offset frame on the dark split-visual surface.\n\nThe border weight ladder (2 / 3 / 4) is fixed. No 1px borders, no 5px+ borders.\n\n### Decorative Element Types\n\n**Label-pill** — Square bordered pill (3px black border, 4px shadow), pastel or white fill, Space Grotesk 13px weight 600 uppercase text with 0.08em tracking. The universal section eyebrow.\n\n**Corner-bracket** — Two L-shaped brackets (or four for full enclosure) at the corners of a card, 3px black border. Creates a frame-within-frame decorative motif.\n\n**Star-burst** — 10-point star clipped via CSS clip-path with a 3px border, pastel fill. Decorative attention-grabber pinned to corners of close-frames and feature cards.\n\n**Stripe-block** — Diagonal 4px-on, 8px-off stripe pattern in black + a pastel color, framed with a 3px black border. Decorative attention block used on poster-class surfaces.\n\n**Dot-grid** — 1.2px radial-gradient dot pattern at 24×24 spacing. Used as a faint decorative overlay in corners of slides, at 30-40% opacity.\n\n**Feature-deco notch** — 48×48 yellow square with 3px black border, positioned absolutely to protrude from the top edge of a feature card. The notch breaks the card's top border, suggesting it's been \"stapled on\".\n\n**Icon-square** — 64×64 pastel square with 3px black border holding a single uppercase letter glyph at Inter weight 700 / 28px. Used as feature-card icons.\n\n**Stat-deco dot** — 12×12 circle with 2px black border, pastel fill, pinned to the top-right of a stat card. The system's only round shape.\n\n**List-number** — 36×36 yellow square with 3px black border holding a Space Grotesk 14px weight 700 numeral. Used as bullets on numbered lists.\n\n**Avatar-square** — 72×72 pastel square with 3px black border holding two uppercase initials at Inter weight 900 / 28px. Used in team grids; fills cycle through pastels.\n\n**Step-connector** — A 28×4 horizontal black bar pinned to the right edge of a timeline-step card, mid-height. Visually links adjacent steps in a horizontal flow.\n\n**Tilted decoration** — Any rectangle, badge, or star with a rotate(±2deg to ±12deg) transform. The tilt is intentional disruption of the grid; without it, the system reads as too uniform.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply 4px solid black borders to primary cards (`{components.card-elevated}`, hero-frame, quote-frame) and 3px to secondary chrome. The border weight ladder is the system's structural backbone.\n- Pair every 4px border with an 8px offset shadow, and every 3px border with a 4px offset shadow. The border/shadow coupling is non-negotiable.\n- Cycle slide backgrounds through the pastel palette — offwhite, cream, blue, pink, green, yellow — to keep the deck visually rhythmic. Staying on one color for many slides flattens the system.\n- Set every Inter display element in uppercase with negative letter-spacing (-0.01 to -0.03em) and weight 800+. The combination is the typographic identity.\n- Use the `{components.label-pill}` (3px border, 4px shadow, pastel fill, Space Grotesk uppercase 0.08em) as the universal section eyebrow on every region.\n- Apply tilt to decorative rectangles, stat cards, stars, and badges (±2deg to ±12deg). The intentional misalignment is the system's playful signature.\n- Use `{colors.yellow}` as the default button color. Yellow with a 3px black border and 4px black shadow is the system's \"click here\" voice.\n- Render shadows as solid black with zero blur, always offset bottom-right. The hard-edge shadow is the depth language.\n- Add a decorative element (star-burst, stripe-block, dot-grid, corner-bracket, tilted rectangle) to every surface. The visual chatter is part of the system's energy.\n- Use pure black `{colors.black}` for the closing surface, with white text and a 12px yellow offset shadow on the close-frame. The inverted dark surface is the system's loudest contrast moment.\n\n### Don't\n\n- Don't round any corner on cards, buttons, label-pills, icon-squares, or avatars. Border-radius is forbidden except on the stat-deco dot (12px circle).\n- Don't blur any shadow. Every shadow is hard-edged at zero blur. `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` does not exist in this system.\n- Don't use colored borders. Borders are always pure black, except for the inverted 4px white border on the close-frame.\n- Don't use Inter display weights in sentence case. Uppercase is mandatory on heading-xl, heading-lg, quote-text, close-title, and card-title.\n- Don't set Inter display without negative letter-spacing. Default-tracked Inter at heavy weights reads as a different system.\n- Don't introduce a sixth pastel color. The palette is locked at pink, blue, green, yellow, cream. Adding purple, orange, or red breaks the curated candy palette.\n- Don't omit the label-pill on a region. Going straight from background to headline without an eyebrow tag breaks the system's editorial rhythm.\n- Don't render label-pills as plain text. The 3px border + 4px shadow + pastel fill combination is what defines the pill.\n- Don't use blurred or colored body text. Body is solid black on light surfaces, solid white or cream on dark surfaces.\n- Don't keep every card perfectly aligned. The tilt on stat cards, decorations, and badges is what gives the system its hand-made energy.\n\n## Responsive Behavior\n\nBlockFrame is designed as a **1920×1080 presentation system** (effective 100vw × 100vh). Sizing uses CSS `clamp()` for type and fixed px for borders, shadows, and structural padding. The system has three component-level breakpoints for narrow viewports.\n\n### Scaling Behavior\n- Heading-xl scales 48px → 96px on viewport width.\n- Heading-lg scales 32px → 64px.\n- Body scales 16px → 20px.\n- Borders (3px, 4px), shadows (4px, 8px), and structural padding (60px slide-pad) are fixed and do not scale.\n\n### Component Breakpoints\n- `max-width: 1024px` — slide padding shrinks 60px → 40px, two-column splits stack vertically, feature card row stacks vertically, timeline track stacks vertically with step-connectors hidden, stats grid collapses to 2 columns, team grid collapses to 2 columns. Split visual loses left border and gains a top border.\n- `max-width: 640px` — stats grid collapses to 1 column, team grid collapses to 1 column, hero-frame padding shrinks to 32px, quote-frame padding shrinks to 32px.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are instant (`display: none` ↔ `display: flex` on the `.active` class), with no crossfade.\n\n### Print Behavior\nThe system has no `@media print` rule. Slides are absolute-positioned and only one is visible at a time — printing produces only the active slide. For static export, screenshots of each slide preserve all borders, shadows, and decorations (all are CSS, not image assets).\n\n### Interactive States\n- Buttons and nav-buttons translate -2/-2 on hover and shadow grows to 6px (`{shadows.hover}`); on active, translate 2/2 and shadow shrinks to 2px. The hover-press behavior is unusual for a presentation system; it reflects BlockFrame's hybrid identity as both deck and interactive product mockup.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / quote / close title / stat numerals | Inter 800–900 (uppercase, negative tracking) | 思源黑体 Noto Sans SC 900 (sentence case, 0 tracking) |\n| Card title | Inter 700 (uppercase) | 思源黑体 Noto Sans SC 700 (no transform) |\n| Body / list body | Inter 500 | 思源黑体 Noto Sans SC 400 |\n| Label / mono tag / counter / legend | Space Grotesk 600–700 (uppercase, 0.05–0.1em tracking) | 思源黑体 Noto Sans SC 600 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family with built-in Latin glyph coverage. Set every text element to `font-family: 'Noto Sans SC', sans-serif`. 思源黑体 ships Latin glyphs that pair cleanly with its Chinese characters, so mixed sentences render in one consistent face. The Inter / Space Grotesk distinction in the Latin original is preserved through weight contrast: weight 900 carries the brutalist display role, weight 600 carries the label role, weight 400–500 carries body. Visual hierarchy survives even though the face contrast is gone.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.15–1.25 (up from 0.95–1). The Latin display compresses to 0.95 line-height; CJK at that compression collides vertically.\n- **Letter-spacing**: set to 0 on every CJK run. The template's negative display tracking (−0.02 to −0.03em on Inter) overlaps CJK strokes and reads as broken; the positive 0.05–0.1em tracking on Space Grotesk labels reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Inter display heading (heading-xl, heading-lg, quote-text, close-title, card-title) uses `text-transform: uppercase` in the Latin original; remove it for CJK runs. Every label-pill, counter, and chrome element also uses uppercase; remove that too.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `BlockFrame 设计系统` not `BlockFrame设计系统`.\n- **One font per sentence**: 思源黑体 covers both CJK and Latin glyphs in a unified style — let it handle mixed sentences. Don't let the browser font-switch to Inter or Space Grotesk mid-word.\n\n### Aesthetic Notes for This System\n\nThe Latin original's typographic identity rests entirely on the **heavy uppercase + negative tracking** combination on Inter display. CJK has no case, so this signal disappears. The system survives because its identity is **80% structural, 20% typographic**: the 4px black borders, 8px hard offset shadows, five-pastel palette, tilted decorations, label-pills, star bursts, stripe blocks, and dot grids do the brutalist work. Set 思源黑体 900 in sentence case at the same large sizes; the chunky black-on-pastel + hard-shadow framing reads as brutalist regardless of whether the type is in caps.\n\nThe label-pill (Space Grotesk 600 uppercase, 0.08em tracking, 3px border + 4px shadow, pastel fill) loses the uppercase + tracked-mono character. Render Chinese label-pills with 思源黑体 weight 600 at 0 tracking and a slightly tighter fontSize (11–12px instead of 13px) — the bordered pill shape and shadow do the chrome-recognition work. Keep the pastel fill rotation (pink / blue / green / yellow / cream) intact; it's the system's most recognizable signal after the borders themselves.\n\n### Known CJK Gap\n\n- **No CDN Chinese monospace face for the \"system readout\" voice.** Space Grotesk's quasi-mono role (label-pills, counters, mono-tags, slide counter NN / NN) depends on its slightly geometric character plus the wide-tracked uppercase treatment. Neither survives the CJK translation. The slide counter and chart legend can keep Latin digits + Latin labels intact; for purely Chinese chrome, lean on the pill border + shadow + pastel fill to signal \"label\" rather than the typographic treatment.\n- **The \"uppercase brutalist\" identity weakens.** The system's most distinctive typographic decision is \"heavy uppercase Inter with negative tracking\" — and that signal is irreplaceable in CJK. Compensate by leaning harder on the structural elements: more decorative disruption (extra tilted rectangles, star bursts, stripe blocks), more saturated pastel-ground rotation across slides, and slightly tighter shadow offsets to compensate for the calmer typographic baseline.\n\n## Iteration Guide\n\n1. Any new card uses a 4px or 3px solid black border + the matched-weight offset shadow (8px or 4px). Never use a card without both.\n2. Any new region begins with a `{components.label-pill}` eyebrow in pastel fill, then the headline in uppercase Inter weight 800+, then content. The label-headline-content sequence is the system's editorial rhythm.\n3. Any new headline uses uppercase Inter with negative letter-spacing and weight 800-900. Reach for `{typography.heading-lg}` (32-64px) for primary moments and `{typography.heading-xl}` (48-96px) for cover/hero scale.\n4. Any new accent or surface fill picks from the 5-pastel palette (pink, blue, green, yellow, cream) — never introduce a sixth pastel.\n5. Any new CTA uses the `{components.button-primary}` pattern: 3px black border, yellow fill, 4px black shadow, Inter weight 700 / 16px. Hover lifts -2/-2 with shadow growing to 6px.\n6. Any new chart cycles through pink → blue → green for series order, with yellow/cream available for additional series. Legend swatches use 2px black border.\n7. Any new stat or metric uses Inter weight 900 + line-height 1 for the numeral, paired with Space Grotesk uppercase label below. Decorate the card with a `{components.stat-deco-dot}` in a pastel color.\n8. Any new slide adds at least one decorative disruption (tilted rectangle, star-burst, stripe-block, dot-grid corner, corner-bracket frame) — empty surfaces feel timid.\n9. Any new closing-style surface uses pure `{colors.black}` ground with white text, a 4px white-bordered close-frame, and a 12px yellow offset shadow. This is the only colored shadow allowed.\n10. If a surface feels too noisy, drop a decoration — don't drop a border or shadow. The borders and shadows are structural; the decorations are tunable.\n\n## Known Gaps\n\n- **Inter and Space Grotesk are loaded from Google Fonts** via inline `@import`. There are no system fallbacks beyond `sans-serif` and `monospace` — in environments where Google Fonts fail, the system collapses to system defaults and loses its identity.\n- **The system uses `@import` inside the `<style>` block** rather than a `<link>` preconnect. This is slower than the standard `<link>` approach and may delay first paint of typography.\n- **The chart is rendered as inline SVG with hardcoded coordinates** (`viewBox=\"0 0 800 360\"`, hardcoded `x/y/width/height` per `<rect>`). Adding new chart slides requires manual coordinate math; there is no data-binding layer.\n- **The hover/active state on buttons assumes a pointing device.** On touch devices the lift-and-press feedback only triggers on tap and may feel inconsistent.\n- **The tilt on stat cards is hardcoded with `:nth-child(odd)` -2deg and `:nth-child(even)` +2deg.** Re-ordering cards changes which tilts which direction — there's no per-card tilt control beyond ordering.\n- **The decorative star uses a CSS clip-path polygon with 10 points.** Browsers without clip-path support (very old IE/Edge) will render the star as a colored rectangle.\n- **The slide-counter and nav-controls overlap the slide content area at the bottom edge.** The 110px bottom padding on certain slides (slide-4, slide-9) reserves space, but other slides may have content that crowds the bottom-left counter pill.\n- **The black close-surface uses pure `#000000` ground with white text** — accessibility-wise this is high-contrast and fine, but the colored decorations on this surface (yellow shadow, white border) don't pass the WCAG color contrast checks at small sizes.\n- **The dot-grid background is a CSS radial-gradient.** At very large viewport sizes the dots may look too small to read as a grid; at very small sizes they may visually merge into solid noise.\n- **There is no transition between slides** other than the binary display toggle. Adding a fade or slide animation requires modifying the JS and adding transition CSS.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/preview.md":"# BlockFrame Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/block-frame/design.md`\n- Preview card: `bold-template-pack/templates/block-frame/preview.md`\n\n## Selection Metadata\n\n- Slug: `block-frame`\n- Tagline: Neobrutalist deck with pastel-neon color blocks and chunky black borders.\n- Mood: bold, playful, graphic, fresh\n- Tone: confident, graphic, pop, design-led\n- Formality: medium-low\n- Density: high\n- Scheme: light\n- Best for: Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns. Also a strong unexpected pick for tech, finance, or research when the speaker wants to land as confident and contemporary rather than buttoned-up.\n- Avoid for: Contexts that require quiet institutional restraint or traditional weight (regulated disclosures, formal legal briefs).\n\n## Visual Snapshot\n\nA maximalist neobrutalist presentation system built on 4px solid black borders, 8px hard offset shadows, and a high-key candy palette of five saturated pastels plus cream and off-white. Display type runs Inter at weight 800-900 in tight uppercase; secondary chrome uses Space Grotesk as a quasi-monospace label face. Tilted decorative shapes (rotated stars, rectangles, badges) puncture the borders and break the grid intentionally. Pastels are paired loudly: pink + blue + green + yellow + cream cycle through every region with deliberate juxtaposition. The aesthetic borrows from zine layout, 1990s-revival sticker books, and contemporary toy packaging — bold, joyful, slightly chaotic, never timid.\n\nBlockFrame is a maximalist neobrutalist presentation system built on five structural laws: every region has a 4px black border, every elevated element has an 8px hard offset shadow, every corner is square, every accent color is a saturated pastel, and every layout is allowed to be a little bit crooked. The system's joy comes from the deliberate collision of these laws — bordered cards meet bordered cards, shadows stack against shadows, tilted decorations puncture the grid intentionally.\n\n## Preview Ingredients\n\n- Palette: black #000000; white #FFFFFF; offwhite #FFFDF5; pink #FE90E8; blue #C0F7FE; green #99E885; yellow #F7CB46; cream #FFDC8B\n- Typography: See full design doc after selection.\n- Signature move: 4px solid black borders on primary cards, 3px on secondary chrome — never thinner.\n- Signature move: 8px hard offset shadows on primary cards, 4px on secondary chrome — solid black, zero blur.\n- Signature move: Five-pastel palette (pink, blue, green, yellow, cream) plus black, white, off-white — cycled across surfaces.\n- Signature move: Inter weight 800-900 uppercase with negative tracking is the display voice; Space Grotesk weight 600 uppercase with 0.08em tracking is the label voice.\n- Signature move: Square corners everywhere except a single circular accent dot on stat cards.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/design.md":"---\nversion: alpha\nname: Blue Professional\ndescription: A restrained, consulting-grade presentation system on a warm cream canvas (#fdfae7) with a single saturated cobalt blue (#1e2bfa) as the only accent color. Display type runs Space Grotesk for headlines and numerical callouts; Inter handles body and chrome. Cards are soft-tinted cobalt at 4% opacity with 1.5px translucent borders and 10-14px rounded corners — quiet, never bordered in solid color. The aesthetic borrows from investment-research reports, McKinsey-grade quarterly briefings, and contemporary financial dashboards — measured, data-dense without feeling crowded, and unmistakably professional. The system is built for executive readability at distance, with strong typographic hierarchy and a single accent color carrying every emphasis moment.\n\ncolors:\n  bg: \"#fdfae7\"\n  primary: \"#1e2bfa\"\n  text: \"#111111\"\n  text-muted: \"#6b6b6b\"\n  text-light: \"#9a9a9a\"\n  accent-light: \"rgba(30, 43, 250, 0.08)\"\n  accent-medium: \"rgba(30, 43, 250, 0.15)\"\n  border: \"rgba(30, 43, 250, 0.2)\"\n  card-bg: \"rgba(30, 43, 250, 0.04)\"\n  positive: \"#059669\"\n  negative: \"#dc2626\"\n\ntypography:\n  h1:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(44.8px, 5vw, 67.2px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h2:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(28.8px, 3vw, 41.6px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h3:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(17.6px, 1.8vw, 24px)\"\n    lineHeight: 1.3\n    letterSpacing: -0.02em\n  h4-eyebrow:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(13.6px, 1.2vw, 16px)\"\n    lineHeight: 1.1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    color: \"{colors.primary}\"\n  body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13.6px, 1.1vw, 16.8px)\"\n    lineHeight: 1.6\n    color: \"{colors.text-muted}\"\n  metric-value:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(35.2px, 3.4vw, 48px)\"\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  metric-label:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(15.2px, 1.3vw, 17.6px)\"\n    lineHeight: 1.3\n    color: \"{colors.text}\"\n  metric-desc:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12.5px, 0.95vw, 14.4px)\"\n    lineHeight: 1.5\n    color: \"{colors.text-muted}\"\n  metric-support:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 0.9vw, 13.6px)\"\n    lineHeight: 1.45\n    color: \"{colors.text-muted}\"\n  stat-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(25.6px, 2.4vw, 33.6px)\"\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  stat-name:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(13.6px, 1vw, 15.2px)\"\n    lineHeight: 1.35\n    color: \"{colors.text}\"\n  stat-context:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: 12px\n    lineHeight: 1.4\n    color: \"{colors.text-light}\"\n  agenda-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: 28.8px\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  insight-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    lineHeight: 1.7\n    letterSpacing: 0.05em\n    color: \"{colors.primary}\"\n  split-highlight:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(18.4px, 1.55vw, 24px)\"\n    lineHeight: 1.4\n    color: \"{colors.text}\"\n  blockquote:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(25.6px, 2.8vw, 38.4px)\"\n    lineHeight: 1.35\n    color: \"{colors.text}\"\n  quote-mark:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"128px\"\n    lineHeight: 0.5\n    color: \"{colors.primary}\"\n    opacity: 0.15\n  step-circle-text:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: 20.8px\n    lineHeight: 1\n  step-title:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(15.2px, 1.4vw, 18.4px)\"\n    lineHeight: 1.2\n  bar-label:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(12.8px, 1.1vw, 16px)\"\n    lineHeight: 1.3\n    color: \"{colors.text}\"\n  bar-pct:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 15.2px\n    color: \"{colors.primary}\"\n  tag:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12px\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  counter:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12.8px\n    lineHeight: 1\n    letterSpacing: 0.05em\n    color: \"{colors.text-muted}\"\n  meta:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: 12.8px\n    lineHeight: 1.4\n    letterSpacing: 0.05em\n    color: \"{colors.text-light}\"\n  cite:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12.5px\n    lineHeight: 1.4\n    letterSpacing: 0.04em\n    textTransform: uppercase\n    color: \"{colors.text-muted}\"\n\nspacing:\n  pad-slide-x: \"4vw\"\n  pad-slide-y-top: \"3.5vw\"\n  pad-slide-y-bottom: \"8.5vh\"\n  pad-card-lg: \"1.5rem 1.6rem\"\n  pad-card-md: \"1.4rem 1.5rem\"\n  pad-card-sm: \"1rem 1.2rem\"\n  pad-mini: \"0.9rem 1rem\"\n  gap-grid-lg: \"3.5rem\"\n  gap-grid-md: \"2rem 3rem\"\n  gap-grid-sm: \"1.5rem\"\n  gap-cards: \"1.2rem\"\n  gap-mini: \"1rem\"\n  header-margin: \"2.5vh\"\n  accent-line-width: \"60px\"\n  accent-line-height: \"4px\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.bg}\"\n\nradii:\n  pill: \"100px\"\n  card-lg: \"14px\"\n  card-md: \"12px\"\n  card-sm: \"10px\"\n  bar: \"6px\"\n  circle: \"50%\"\n\ncomponents:\n  card-tinted:\n    background: \"{colors.card-bg}\"\n    border: \"1.5px solid {colors.border}\"\n    borderRadius: 14px\n    padding: \"1.5rem 1.6rem\"\n    description: \"Primary content card. Cobalt tinted at 4% with a 20% cobalt 1.5px border. Soft 14px radius. Never solid-colored, never outlined in full primary.\"\n  card-tinted-sm:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 12px\n    padding: \"1.4rem 1.5rem\"\n    description: \"Compact tinted card with 1px border. Used for stat cells and small data blocks.\"\n  card-tinted-xs:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 10px\n    padding: \"0.9rem 1rem\"\n    description: \"Mini tinted card used for inline mini-stats.\"\n  detail-block:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 10px\n    padding: \"1rem 1.2rem\"\n    description: \"Detail block holding a small h3 + a bulleted ul. Used in detail-analysis grids.\"\n  tag-pill:\n    background: \"{colors.accent-light}\"\n    color: \"{colors.primary}\"\n    padding: \"0.35rem 0.9rem\"\n    borderRadius: 100px\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12px\n    description: \"Pill-shaped tag sitting in the top-right of the slide-header. Fully rounded, soft cobalt tint background, cobalt text.\"\n  cta-button:\n    background: \"{colors.primary}\"\n    color: \"{colors.bg}\"\n    padding: \"0.9rem 2.2rem\"\n    borderRadius: 100px\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 15.2px\n    description: \"Primary CTA. Fully rounded solid cobalt pill with cream text. Hover lifts -2 with a soft cobalt drop shadow.\"\n  nav-btn:\n    width: 44px\n    height: 44px\n    borderRadius: 50%\n    border: \"1.5px solid {colors.border}\"\n    background: \"{colors.bg}\"\n    color: \"{colors.primary}\"\n    description: \"Circular nav-arrow button. Hover inverts: cobalt fill, cream icon. Disabled state at 30% opacity.\"\n  accent-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.primary}\"\n    borderRadius: 2px\n    description: \"Short horizontal cobalt rule, 60×4px, slightly rounded. Used above cover titles and as eyebrow separators.\"\n  accent-dot:\n    width: 8px\n    height: 8px\n    background: \"{colors.primary}\"\n    borderRadius: 50%\n    description: \"Small inline cobalt dot. Decorative inline marker.\"\n  bar-track:\n    height: 28px\n    background: \"{colors.accent-light}\"\n    borderRadius: 6px\n    description: \"Horizontal bar chart track. Soft cobalt tint with 6px rounded corners.\"\n  bar-fill:\n    height: \"100%\"\n    background: \"{colors.primary}\"\n    borderRadius: 6px\n    description: \"Solid cobalt fill inside bar-track. Width carries the data value. Animates from 0 to value on slide entry.\"\n  step-circle:\n    width: 56px\n    height: 56px\n    borderRadius: 50%\n    background: \"{colors.primary}\"\n    color: \"{colors.bg}\"\n    description: \"Circular numbered step marker in cobalt with cream numeral. Sequential steps reduce opacity (1.0 → 0.85 → 0.7 → 0.55) to suggest fade-into-future.\"\n  metric-change-positive:\n    color: \"{colors.positive}\"\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    description: \"Inline positive-change chip with up-arrow glyph and percentage. Green text inline; no border or fill.\"\n  metric-change-negative:\n    color: \"{colors.negative}\"\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    description: \"Inline negative-change chip with up/down-arrow glyph and percentage. Red text inline; no border or fill.\"\n  insight-list-item:\n    paddingLeft: \"2.6rem\"\n    description: \"Numbered insight list with a Space Grotesk 600 counter (decimal-leading-zero) at position absolute left. Numbers in cobalt, body in default text color.\"\n  split-highlight-block:\n    background: \"{colors.accent-light}\"\n    borderLeft: \"4px solid {colors.primary}\"\n    borderRadius: 12px\n    padding: \"1.3rem 1.5rem\"\n    description: \"Highlighted callout block with cobalt left rule and tinted cobalt fill. Used for inline pull-quotes inside split-column layouts.\"\n  progress-bar:\n    position: \"fixed bottom 0 left 0\"\n    height: 3px\n    background: \"{colors.primary}\"\n    description: \"Thin cobalt progress bar at the bottom edge of the viewport, width grows linearly with slide index.\"\n  cover-decoration:\n    background: \"{colors.accent-light}\"\n    clipPath: \"polygon(30% 0, 100% 0, 100% 100%, 0% 100%)\"\n    description: \"Diagonal accent panel filling the right ~35% of cover surfaces. Soft cobalt tint, clip-path angled cut on the left edge.\"\n  cover-dots:\n    layout: \"3x3 grid of 6px cobalt dots at 12px gap, 25% opacity\"\n    description: \"Small dotted decoration used on cover and other open-space surfaces.\"\n  closing-circles:\n    border: \"1px solid {colors.border}\"\n    borderRadius: \"50%\"\n    description: \"Two concentric centered circles (500px outer, 360px inner) as atmospheric decoration on closing-class surfaces. Opacity 0.3-0.4.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBlue Professional is a **consulting-grade presentation system** designed for executive briefings, research deliverables, and quarterly reviews. Its foundational visual premise is **restraint with one strong commitment**: a warm cream canvas (`{colors.bg}` — `#fdfae7`) and a single saturated cobalt (`{colors.primary}` — `#1e2bfa`) that carries every accent, every metric, every CTA, every eyebrow, every chart fill. There is no secondary brand color, no palette of pastels, no warm/cool pairing — just cream, cobalt, and a tight ladder of muted grays for body text.\n\nThe type system uses two open Google Fonts in tightly defined roles. **Space Grotesk** (weights 300-700) is the display, headline, numerical, and chrome face — used for h1-h3 headings, all metric/stat numerals, eyebrow labels (in uppercase with 0.08em tracking), tag pills, CTAs, slide counters, agenda numbers, and step circles. Its slightly geometric character + soft humanist warmth makes it read as both modern (suitable for AI/tech audiences) and trustworthy (suitable for finance audiences). **Inter** (weights 300-600) is the body face — used for paragraph text, list bodies, metric descriptions, and table-style content. The Space Grotesk / Inter pairing is deliberately ordinary; what makes the system feel distinctive is the discipline of their usage, not the novelty of the faces.\n\nThe color philosophy is **one accent, three text grays**. Cobalt does all the emphasis work: headlines stay in `{colors.text}` (a near-black `#111111`), but every metric value, every eyebrow, every CTA, every chart bar, every callout border, every step circle, every progress indicator is cobalt. Body text uses a three-step gray ladder — `{colors.text}` for primary body, `{colors.text-muted}` (`#6b6b6b`) for paragraph body and metric descriptions, `{colors.text-light}` (`#9a9a9a`) for tertiary metadata. Only two non-cobalt accent colors exist: `{colors.positive}` (a subdued green `#059669`) and `{colors.negative}` (a subdued red `#dc2626`), used only on directional change indicators (arrows and percentages on metric cards) — and these are inline text colors, not fills.\n\nDepth is **soft and tinted**, never offset or shadowed. Cards are 4% cobalt tints (`{colors.card-bg}`) with 1.5px translucent cobalt borders (`{colors.border}` — cobalt at 20% opacity) and 10-14px rounded corners. There are no drop shadows except a single subtle cobalt-tinted shadow on the CTA hover state (`0 8px 24px rgba(30, 43, 250, 0.25)`). The lack of harsh shadows is what gives the system its quiet, premium feel — every elevation is implied by border + tint, not by shadow.\n\n**Density philosophy: balanced and data-dense without crowding.** This system is built to carry information — six-stat dashboards, six-detail-block grids, seven-bar rankings, multi-column splits with callouts and mini-stats. The system reads as authoritative when populated with substantive content and timid when sparse. A typical surface holds: a slide-header (h4 eyebrow + tag pill) + a section h2 headline + a grid or list of 3-6 information cells. Cards have moderate internal padding (1.5rem) and moderate inter-card gap (1.2-1.5rem) — neither tight nor airy. The system can support both quote/cover-class surfaces (one bold statement in space) and dashboard-class surfaces (six cards of dense data) without feeling like two different systems.\n\n**Key Characteristics:**\n- Warm cream ground (`{colors.bg}`) on every surface — never pure white, never gray.\n- Single saturated cobalt (`{colors.primary}`) as the only accent — used for every eyebrow, metric, CTA, chart fill, and progress indicator.\n- Space Grotesk (display + chrome) + Inter (body) — never substitute either.\n- Cards are 4% cobalt tints with 1.5px cobalt-at-20% borders and 10-14px rounded corners.\n- Soft pill-shaped chrome (`{components.tag-pill}`, `{components.cta-button}`) with full `100px` border-radius.\n- Headlines use Space Grotesk weight 600-700 with -0.02em tracking on a near-black text color.\n- Body uses Inter weight 400 at 13.6-16.8px with 1.6 line-height in the muted gray.\n- Every slide carries a slide-header (eyebrow + tag pill), a single h2, and a flexible content region — the structure is rhythmic across the deck.\n- Persistent chrome: cobalt progress bar at bottom edge, slide-counter at bottom-left, circular nav-arrows at bottom-right.\n- Decorative atmospheric elements (concentric circles, dot grids, diagonal accent panels) appear only on cover and closing-class surfaces.\n\n## Colors\n\n### Palette\n\n- **Bg** (`{colors.bg}` — `#fdfae7`): The warm cream canvas. The default and universal surface. Slightly green-cream-leaning warmth that distinguishes the system from corporate-template white. Every slide rests on this ground.\n- **Primary** (`{colors.primary}` — `#1e2bfa`): The signature cobalt. A highly saturated electric blue that carries every emphasis moment. Used for h4 eyebrows, metric values, stat numerals, chart bar fills, CTA fills, step circles, progress bars, accent lines, agenda numbers, and the cite border on highlight blocks. No other accent color exists.\n- **Text** (`{colors.text}` — `#111111`): The primary text color. Near-black, slightly warmer than `#000000`. Used for h1-h3 headlines, primary content text, metric labels, and any text that should carry full weight.\n- **Text-muted** (`{colors.text-muted}` — `#6b6b6b`): Secondary text — body paragraphs, metric descriptions, captions. Reads as comfortably softer than the primary text without disappearing.\n- **Text-light** (`{colors.text-light}` — `#9a9a9a`): Tertiary text — slide meta info, hairline dividers in text, stat context lines. The lightest readable gray; below this, text becomes ambient noise.\n- **Accent-light** (`{colors.accent-light}` — `rgba(30, 43, 250, 0.08)`): The default cobalt tint for tag pills, bar tracks, highlight callouts, and cover-decoration panels.\n- **Accent-medium** (`{colors.accent-medium}` — `rgba(30, 43, 250, 0.15)`): A slightly darker cobalt tint, available but used sparingly.\n- **Border** (`{colors.border}` — `rgba(30, 43, 250, 0.2)`): Cobalt at 20% opacity. The universal soft border color for cards, nav buttons, decorative circles, and structural rules.\n- **Card-bg** (`{colors.card-bg}` — `rgba(30, 43, 250, 0.04)`): Cobalt at 4% opacity. The universal card fill — softer than accent-light, reading as a barely-tinted surface that lifts slightly off the cream ground.\n- **Positive** (`{colors.positive}` — `#059669`): Subdued green. Used only inline as the text color for positive-change indicators (up-arrow + percentage). Never used as a fill or border.\n- **Negative** (`{colors.negative}` — `#dc2626`): Subdued red. Used only inline as the text color for negative-change indicators. Never used as a fill or border.\n\n### Defaults\n\n- **Default surface background**: `{colors.bg}` — every surface starts on cream.\n- **Default headline color**: `{colors.text}` (`#111111`) — headlines are near-black, never cobalt. Cobalt is reserved for accent moments (eyebrows, metrics, CTAs).\n- **Default body text color**: `{colors.text-muted}` (`#6b6b6b`) — body paragraphs default to muted, not full black.\n- **Default eyebrow / h4 color**: `{colors.primary}` — eyebrows are always cobalt, always uppercase, always with 0.08em tracking.\n- **Default card fill**: `{colors.card-bg}` (cobalt at 4%) — the universal soft tint.\n- **Default card border**: `{colors.border}` (cobalt at 20%) at 1px or 1.5px. Never solid full-cobalt borders.\n- **Default card border-radius**: 10-14px depending on card size (`{radii.card-sm}` for stat cells, `{radii.card-md}` for stat cards and detail blocks, `{radii.card-lg}` for metric cards).\n- **Default accent for any numerical value (metric, stat, agenda number, bar percentage)**: `{colors.primary}`.\n- **Default chart bar color**: `{colors.primary}` solid fill on a `{colors.accent-light}` track.\n- **Default CTA**: `{components.cta-button}` — solid cobalt pill with cream text and 100px border-radius.\n- **Default tag pill**: `{components.tag-pill}` — soft cobalt tint with cobalt text and 100px border-radius, paired with an h4 eyebrow in the slide-header.\n\nThe system has **no secondary accent color**. Don't reach for orange, teal, or purple to differentiate categories — the single-cobalt discipline is the system's identity. Categorical differentiation should be done through positioning, sizing, or labeling, not through additional hues.\n\n## Typography\n\n### Font Family Stack\nThe system runs two faces, each with a single role.\n\n**Space Grotesk** (Google Fonts, weights 300-700) is the display + numerical + chrome face. Used for every h1, h2, h3, h4 heading; every numerical callout (metric values, stat numbers, agenda numbers, bar percentages, step circles); every chrome element (tag pills, CTAs, slide counters, hint text); and every uppercase eyebrow with 0.08em tracking. Its slightly geometric character + softly rounded humanist forms read as both contemporary and trustworthy — suitable for both AI/tech and finance audiences.\n\n**Inter** (Google Fonts, weights 300-600) is the body face. Used for paragraph text, list bodies, metric descriptions, agenda descriptions, detail-block body, and any longer-form content. Set at weight 400 with line-height 1.6 in the muted gray, Inter reads as comfortable, generous, and editorial.\n\nThe face roles are non-overlapping: Space Grotesk handles every numeral and every heading; Inter handles every paragraph and list body. Don't cross the boundary — Inter h1 reads as a different brand; Space Grotesk body reads as a tech startup landing page.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.h1}` | 44.8–67.2px clamp | Space Grotesk | 700 | Cover or closing title |\n| `{typography.h2}` | 28.8–41.6px clamp | Space Grotesk | 600 | Primary section headline on each slide |\n| `{typography.h3}` | 17.6–24px clamp | Space Grotesk | 500 | Agenda item / region title |\n| `{typography.h4-eyebrow}` | 13.6–16px clamp | Space Grotesk | 600 | Uppercase eyebrow in the slide-header (always cobalt) |\n| `{typography.body}` | 13.6–16.8px clamp | Inter | 400 | Standard body paragraph |\n| `{typography.metric-value}` | 35.2–48px clamp | Space Grotesk | 700 | Large metric numeral in a callout card |\n| `{typography.metric-label}` | 15.2–17.6px clamp | Inter | 600 | Metric label line under the numeral |\n| `{typography.metric-desc}` | 12.5–14.4px clamp | Inter | 400 | Metric supporting description paragraph |\n| `{typography.metric-support}` | 12–13.6px clamp | Inter | 400 | Metric supporting bullet list |\n| `{typography.stat-num}` | 25.6–33.6px clamp | Space Grotesk | 700 | Stat-cell numeral (smaller than metric-value) |\n| `{typography.stat-name}` | 13.6–15.2px clamp | Inter | 500 | Stat-cell descriptive name line |\n| `{typography.stat-context}` | 12px | Inter | 400 | Stat-cell tertiary context line below a hairline divider |\n| `{typography.agenda-num}` | 28.8px | Space Grotesk | 700 | Agenda item numeral |\n| `{typography.insight-num}` | 12.5px | Space Grotesk | 600 | Counter-style number prefix on insight list items |\n| `{typography.split-highlight}` | 18.4–24px clamp | Space Grotesk | 500 | Inline pull-quote text inside a split-highlight block |\n| `{typography.blockquote}` | 25.6–38.4px clamp | Space Grotesk | 500 | Quote-class headline body |\n| `{typography.quote-mark}` | 128px | Space Grotesk | 700 | Decorative oversized quote glyph at 15% opacity above a blockquote |\n| `{typography.step-circle-text}` | 20.8px | Space Grotesk | 700 | Numeral inside a circular step marker |\n| `{typography.step-title}` | 15.2–18.4px clamp | Space Grotesk | 600 | Step title beneath a step circle |\n| `{typography.bar-label}` | 12.8–16px clamp | Inter | 500 | Bar chart row label |\n| `{typography.bar-pct}` | 15.2px | Space Grotesk | 600 | Bar chart row percentage value |\n| `{typography.tag}` | 12px | Space Grotesk | 500 | Tag pill text in slide-header |\n| `{typography.counter}` | 12.8px | Space Grotesk | 500 | Persistent slide counter |\n| `{typography.meta}` | 12.8px | Space Grotesk | 400 | Cover meta line (e.g., date / confidential marker) |\n| `{typography.cite}` | 12.5px | Space Grotesk | 500 | Cite/attribution under a pull-quote, uppercase with 0.04em tracking |\n\n### Defaults\n\n- **Default size for a cover title**: `{typography.h1}` (44.8–67.2px). Always Space Grotesk weight 700 with -0.02em tracking.\n- **Default size for the primary section headline on each slide**: `{typography.h2}` (28.8–41.6px). Space Grotesk weight 600. The \"section h2\" is the system's structural workhorse — every content slide has one.\n- **Default size for a region or agenda-item title**: `{typography.h3}` (17.6–24px).\n- **Default size for the eyebrow above the h2**: `{typography.h4-eyebrow}` (13.6–16px) in cobalt, uppercase, 0.08em tracking.\n- **Default size for paragraph body**: `{typography.body}` (13.6–16.8px clamp). Inter weight 400 with line-height 1.6.\n- **Default size for a large metric numeral**: `{typography.metric-value}` (35.2–48px). For dashboard stat cells, step down to `{typography.stat-num}` (25.6–33.6px).\n- **Default size for a quote body**: `{typography.blockquote}` (25.6–38.4px). Always Space Grotesk weight 500.\n- **Default weight for Space Grotesk headings**: 500 (h3) → 600 (h2 and eyebrow) → 700 (h1 and numerical callouts). Don't reach for weight 400 or 800; the weight ladder is fixed.\n- **Default weight for Inter body**: 400. Inter body at 500-600 reads as too assertive; at 300 reads as too thin.\n- **Default tracking for h1-h3 headings**: -0.02em. Without negative tracking, Space Grotesk display reads as untreated.\n- **Default tracking for the h4 eyebrow**: 0.08em uppercase. Without the wide tracking + uppercase combination, the eyebrow doesn't read as an eyebrow.\n\nWhen unsure which heading token to reach for, default to `{typography.h2}` (28.8–41.6px) for the slide's primary text moment. `{typography.h3}` is for region or agenda-item titles; `{typography.h1}` is reserved for cover and closing.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every h4 eyebrow is Space Grotesk weight 600 in `{colors.primary}` cobalt, uppercase, with 0.08em letter-spacing.** No exceptions. An eyebrow without uppercase + tracking + cobalt color is not the system's eyebrow — it's a stray sans element.\n- **Every headline (h1, h2, h3) uses negative letter-spacing of -0.02em.** Default-tracked Space Grotesk display reads as untreated and breaks the editorial discipline.\n- **Every headline uses `{colors.text}` (`#111111`), not cobalt.** Cobalt headlines are forbidden — cobalt is reserved for accent moments (eyebrows, metrics, CTAs, chart bars). Reversing this collapses the visual hierarchy.\n- **Every numerical callout (metric value, stat number, agenda number, bar percentage, step circle) is Space Grotesk weight 600-700 in `{colors.primary}` cobalt.** Numerical values are the system's primary accent moment.\n- **Every body paragraph is Inter weight 400 in `{colors.text-muted}` (`#6b6b6b`) with line-height 1.6.** Body in pure black reads as too heavy; body in text-light reads as too faint.\n- **Every CTA is the `{components.cta-button}` pattern: solid cobalt pill with cream text, 100px border-radius, 0.9rem × 2.2rem padding.** CTAs in any other shape or color don't exist.\n- **Every tag pill is the `{components.tag-pill}` pattern: soft cobalt tint with cobalt text, 100px border-radius, 0.35rem × 0.9rem padding.** Tag pills with solid backgrounds or borders break the system.\n- **Every slide-header places the h4 eyebrow on the left and the tag pill on the right.** This is the structural rhythm of every content slide.\n\n### Typography Principles\n\nThe voice contrast is **near-black display headlines ↔ cobalt eyebrows + numerals ↔ muted gray body**. Italic and underline are not used. The only emphasis mechanisms are: switching weight within the Space Grotesk ladder, switching color from text-muted to text or to cobalt, and uppercase + tracking on labels.\n\nNumerical content is **always Space Grotesk**, even small numerical labels (bar percentages, slide counters, mini-stat values). The mono-flavored character of Space Grotesk at numerical sizes mimics tabular figures without requiring an actual monospace face.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and animated in via opacity + translateX (40px → 0px) on 500ms ease. Only the `.active` slide is `opacity: 1`; the previous slide gets a `.prev` class and translates -40px out of view.\n\nDefault slide padding is asymmetric: `3.5vw` left, top, and right; `8.5vh` bottom. The extra bottom space reserves room for the fixed slide-counter (left) and nav-controls (right) which sit at `bottom: 2.5vh` overlapping the viewport bottom.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide-x}` | 4vw | Slide horizontal padding |\n| `{spacing.pad-slide-y-top}` | 3.5vw | Slide top padding |\n| `{spacing.pad-slide-y-bottom}` | 8.5vh | Slide bottom padding (extra to clear nav chrome) |\n| `{spacing.pad-card-lg}` | 1.5rem 1.6rem | Large card internal padding (metric cards) |\n| `{spacing.pad-card-md}` | 1.4rem 1.5rem | Medium card internal padding (stat cells) |\n| `{spacing.pad-card-sm}` | 1rem 1.2rem | Small card internal padding (detail blocks) |\n| `{spacing.pad-mini}` | 0.9rem 1rem | Mini card internal padding (mini-stat cells) |\n| `{spacing.gap-grid-lg}` | 3.5rem | Large gap between split columns |\n| `{spacing.gap-grid-md}` | 2rem 3rem | Medium gap in two-column grids (row × col) |\n| `{spacing.gap-grid-sm}` | 1.5rem | Standard gap in 3-column metric grids |\n| `{spacing.gap-cards}` | 1.2rem | Gap between dashboard stat cells |\n| `{spacing.gap-mini}` | 1rem | Gap between mini-stats |\n| `{spacing.header-margin}` | 2.5vh | Margin below the slide-header |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Slide counter** at bottom-left — Space Grotesk 12.8px weight 500 in text-muted gray, fixed at `bottom: 2.5vh; left: 3vw`.\n- **Nav controls** at bottom-right — two circular 44px nav-buttons with 1.5px cobalt-at-20% borders, fixed at `bottom: 2.5vh; right: 3vw`. Disabled state at 30% opacity (first slide / last slide).\n- **Progress bar** at bottom edge — 3px solid cobalt strip with width = `(currentSlide + 1) / total * 100%`. Animates on slide change.\n\nA **keyboard hint** (\"Use arrow keys to navigate\") appears at bottom center in text-light gray.\n\n### Slide-Header Structure\nEvery content slide carries a `.slide-header` band at the top: an h4 eyebrow on the left, a tag pill on the right. Below the slide-header sits the section h2, then the content region (a grid, list, chart, or split). Cover, quote, and closing slides skip the slide-header in favor of centered content.\n\n### Content Grids\nThe system uses repeated grid patterns for content layout: 2×3 agenda grid, 3-column metric row, 3-column stats grid (becomes 2 rows on dashboards), 1.05fr/1fr split-body, 4-step timeline row, 2-column detail grid. These are content-density containers; the grid choice depends on content volume, not on a fixed layout vocabulary.\n\n## Depth and Elevation\n\n### Tinted Cards (Primary Depth Mechanism)\nThe system uses **soft cobalt-tinted backgrounds + soft cobalt-borders + rounded corners** to create the impression of elevation without using shadows. A card with `background: {colors.card-bg}` (cobalt at 4%) and `border: 1.5px solid {colors.border}` (cobalt at 20%) sits visually above the cream ground without any actual offset. This treatment is the system's depth language.\n\n### No Drop Shadows on Cards\nThere are no `box-shadow` declarations on cards, stat cells, detail blocks, or any content container. The only shadow in the system is a single soft cobalt-tinted hover state on the CTA button: `0 8px 24px rgba(30, 43, 250, 0.25)`, which appears for 200ms on hover and disappears on mouse-out. This is the only colored, blurred shadow in the system.\n\n### Border-Left Accent (Highlight Block)\nThe `{components.split-highlight-block}` uses a 4px solid cobalt left border to signal \"this is a quoted callout, distinct from surrounding body\". This is the system's structural accent mechanism — it's not a shadow, but it carries the same elevation cue (the colored rule pulls the block forward visually).\n\n### Rounded Corners as Softness\nThe 10-14px border-radius on cards is part of the depth language. Without rounded corners, the cobalt-tinted cards would read as flat panels; the soft radius softens them into \"lifted\" surfaces.\n\n### Atmospheric Decorations\nDecorative elements (cover-decoration diagonal panel, concentric closing-circles, cover-dots grid, quote decoration circles) appear only on cover, quote, and closing-class surfaces. They are atmospheric, not structural — used to soften open-space surfaces without filling them with content.\n\n## Shapes and Treatment\n\n### Border Radius\n- **`{radii.pill}` = 100px** — fully rounded. Used on `{components.tag-pill}`, `{components.cta-button}`, and any pill-shaped chrome.\n- **`{radii.card-lg}` = 14px** — used on large metric cards.\n- **`{radii.card-md}` = 12px** — used on standard stat cells, split-highlight blocks.\n- **`{radii.card-sm}` = 10px** — used on detail blocks and mini-stats.\n- **`{radii.bar}` = 6px** — used on bar tracks and bar fills.\n- **`{radii.circle}` = 50%** — used on step circles, nav-button circles, accent dots, closing decoration circles, cover dots, quote decoration circles.\n\nThe radius ladder is graduated: tighter radii on smaller chrome, larger radii on bigger cards, fully rounded on pills, perfect circles on chrome. The system has **no square (0px) corners** anywhere except the progress bar.\n\n### Border Weights\n- **1px solid `{colors.border}`** — universal soft border. Used on stat cells, mini-stats, detail blocks, agenda items (bottom border only), stat-context dividers (top border only).\n- **1.5px solid `{colors.border}`** — slightly heavier soft border. Used on metric cards, nav-buttons.\n- **2px solid `{colors.border}`** — used on the split column divider (border-left on the right column of split layouts).\n- **4px solid `{colors.primary}`** — used only as the left rule on `{components.split-highlight-block}` to signal a quoted callout.\n\nThe borders are **never opaque cobalt** — they are always at 20% opacity (`{colors.border}`). This is what gives the system its quiet, lifted quality.\n\n### Decorative Element Types\n\n**Tinted card** (`{components.card-tinted}`) — Cobalt-at-4% background with 1.5px cobalt-at-20% border, 14px radius. The primary content card.\n\n**Tag pill** (`{components.tag-pill}`) — Fully rounded cobalt-at-8% pill with cobalt text. Sits in the top-right of the slide-header.\n\n**Eyebrow** (`{typography.h4-eyebrow}`) — Uppercase cobalt label with 0.08em tracking. Sits in the top-left of the slide-header.\n\n**CTA button** (`{components.cta-button}`) — Solid cobalt pill with cream text. The system's only solid-color element. Used once per closing surface.\n\n**Accent line** (`{components.accent-line}`) — A short 60×4 horizontal cobalt rule with 2px radius. Used above cover titles and as eyebrow separators on open-space surfaces.\n\n**Step circle** (`{components.step-circle}`) — A 56×56 solid cobalt circle with cream Space Grotesk numeral inside. Sequential timeline steps reduce opacity (1.0 → 0.85 → 0.7 → 0.55) to suggest fade-into-future.\n\n**Bar track + fill** (`{components.bar-track}` + `{components.bar-fill}`) — 28px-tall track in cobalt-at-8% with a solid cobalt fill whose width carries the data. 6px rounded corners on both.\n\n**Insight list item** (`{components.insight-list-item}`) — A counter-numbered list using CSS counter() to render decimal-leading-zero prefixes (\"01\", \"02\") in cobalt Space Grotesk 600 / 12.5px positioned absolute left.\n\n**Split highlight block** (`{components.split-highlight-block}`) — A cobalt-at-8% tinted block with a 4px cobalt left rule and a cite line below. Used for inline pull-quotes inside split-column layouts.\n\n**Cover decoration** (`{components.cover-decoration}`) — A clipped diagonal cobalt-tinted panel filling the right ~35% of cover surfaces. Reads as a printed accent without enclosing the layout.\n\n**Cover dots** (`{components.cover-dots}`) — A 3×3 grid of 6px cobalt dots at 12px gap, 25% opacity. Decorative atmosphere on open-space surfaces.\n\n**Closing circles** (`{components.closing-circles}`) — Two concentric centered circles (500px outer, 360px inner) with 1px cobalt-at-20% borders, opacity 0.3-0.4. Atmospheric decoration on closing-class surfaces.\n\n**Metric change chip** (`{components.metric-change-positive}` / `{components.metric-change-negative}`) — Inline directional indicator: a small arrow glyph + percentage value in `{colors.positive}` or `{colors.negative}`. No fill, no border — pure inline text color.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.bg}` (cream) as the universal canvas. Every surface starts on warm cream, never pure white.\n- Use `{colors.primary}` cobalt as the only accent color across the entire deck — for eyebrows, metrics, CTAs, chart fills, step circles, and progress indicators.\n- Set headlines (h1, h2, h3) in `{colors.text}` (`#111111`) near-black with -0.02em tracking. Cobalt headlines are forbidden; cobalt is for accent moments only.\n- Set every h4 eyebrow in cobalt Space Grotesk weight 600 with uppercase + 0.08em tracking. The eyebrow is the universal section opener.\n- Use `{components.card-tinted}` (cobalt-at-4% fill + cobalt-at-20% 1.5px border + 14px radius) as the universal content card pattern.\n- Pair every slide-header with an h4 eyebrow on the left and a `{components.tag-pill}` on the right. The rhythm is the system's structural identity.\n- Set body in Inter weight 400 at 13.6-16.8px in `{colors.text-muted}` (`#6b6b6b`) with line-height 1.6. The muted gray body is what makes the system feel premium.\n- Render every numerical callout (metric, stat, bar percentage, agenda number) in Space Grotesk weight 600-700 in cobalt. The cobalt numerical accent is the system's data voice.\n- Use full 100px border-radius on all chrome (tag pills, CTAs, nav-buttons). The pill shape is the system's chrome signature.\n- Use directional change chips (`{components.metric-change-positive}` / `{components.metric-change-negative}`) inline with no fill — green for positive, red for negative, both subdued.\n\n### Don't\n\n- Don't introduce a second accent color. Cobalt is the only accent — orange, teal, purple, or any additional brand color breaks the single-accent discipline.\n- Don't set headlines in cobalt. Headlines are near-black; cobalt is reserved for eyebrows, metrics, CTAs, and chart fills.\n- Don't use drop shadows on cards or content. The system has zero box-shadows except a single soft cobalt CTA hover.\n- Don't use square corners (0px radius) anywhere. The system is built around soft rounded corners — square corners immediately read as a different aesthetic.\n- Don't use opaque cobalt borders on cards. Borders are always cobalt-at-20% (`{colors.border}`). Full-opacity borders break the quiet, lifted feel.\n- Don't substitute fonts. Space Grotesk + Inter is the pairing. Substituting Arial, Helvetica, Roboto, or Open Sans collapses the typographic identity.\n- Don't crowd the canvas with bordered hard-edged elements. The system depends on soft tints and gentle borders; adding heavy outlines makes it feel like a different system.\n- Don't omit the slide-header (h4 eyebrow + tag pill) on a content slide. The header is the editorial rhythm.\n- Don't use uppercase body text. Uppercase is reserved for h4 eyebrows and the cite line under highlight blocks.\n- Don't use directional chips for non-directional emphasis. The green/red change chips are reserved for actual positive/negative comparisons (e.g., \"+11 pts vs. prior quarter\"). They are not general accent colors.\n\n## Responsive Behavior\n\nBlue Professional is designed as a **1920×1080 presentation system** (effective 100vw × 100vh). Sizing uses CSS `clamp()` for type and `vw / vh / rem` for spacing. The system has minimal responsive behavior — it's built for landscape presentation contexts.\n\n### Scaling Behavior\n- h1 scales 44.8px → 67.2px on viewport width.\n- h2 scales 28.8px → 41.6px.\n- Body scales 13.6px → 16.8px.\n- Metric values scale 35.2px → 48px.\n- Card padding (rem-based) scales with the user's font-size setting; default cards stay around 24-26px internal padding.\n- Borders (1px, 1.5px, 2px), border-radii (10-14px), and pill radius (100px) are fixed and do not scale.\n\n### Component Adjustments at Low Viewport Heights\nA single `@media (max-height: 700px)` block tightens spacing on dense slides:\n- Slide padding reduces from 3.5vw / 8.5vh to 2.5vh / 3vw.\n- Agenda grid gap reduces.\n- Metric and detail card padding reduces to 1rem.\n- Bar item padding reduces.\n\nThis ensures the system fits on shorter laptop screens without breaking the structural layout.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `Space`, or `PageDown`.\n- Slides reverse via `ArrowLeft` or `PageUp`.\n- `Home` jumps to first, `End` to last.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are 500ms ease with opacity fade + 40px translateX slide-in/out.\n- Nav-buttons disable at first/last slide (opacity 0.3).\n- Progress bar at the bottom edge animates to the current slide percentage with a 400ms ease.\n\n### Print Behavior\nThe system has no `@media print` rule. The slide transition is screen-only; printing produces only the active slide. For static export, screenshots of each slide preserve all atmospheric elements (cover decoration, dots, concentric circles are all CSS).\n\n### Interactive States\n- Nav-buttons invert on hover (cobalt fill, cream icon).\n- Agenda items get a subtle `{colors.card-bg}` background on hover (200ms transition).\n- CTA button lifts -2px on hover with a soft cobalt drop shadow (the only shadow in the system).\n- Bar fills animate from 0 to data value with a 0.8s ease transition — most visible on slide entry.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| h1 / h2 / h3 / h4-eyebrow / metric numerals / chart percentages | Space Grotesk 500–700 (negative tracking, uppercase on h4) | 思源黑体 Noto Sans SC 700 (0 tracking, no transform) |\n| Body / metric description / list body | Inter 400 | 思源宋体 Noto Serif SC 400 |\n| Mono / counter / tag pill / cite | Space Grotesk 500–600 (often uppercase) | 思源黑体 Noto Sans SC 500 (no transform) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use 思源黑体 Noto Sans SC for every Space Grotesk role (display, eyebrow, numerical, chrome) and 思源宋体 Noto Serif SC for the Inter body role. Both faces ship Latin glyphs that read cleanly alongside Chinese characters. The serif body pairing reinforces the consulting-grade editorial register that this template is built for — investor reports and McKinsey-style briefings often pair sans display with serif body in Chinese.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.2–1.3 (up from 1.1). CJK characters are visually full and crowd vertically more than Latin.\n- **Letter-spacing**: set to 0 on every CJK run. The template's −0.02em negative tracking on h1–h3 overlaps CJK strokes; the +0.08em positive tracking on h4 eyebrows reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. The h4-eyebrow and cite tokens use `text-transform: uppercase` in the Latin original; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 Q3 业绩复盘` not `2024Q3业绩复盘`.\n- **One font per sentence**: 思源黑体 / 思源宋体 cover both CJK and Latin glyphs — let one face handle each sentence. Don't let the browser fall back to Space Grotesk or Inter for ASCII characters mid-sentence.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on **restraint with one strong commitment** — cream ground, cobalt accent, soft tinted cards, no shadows. None of that depends on Latin typography; it transfers cleanly to Chinese. The h4-eyebrow loses its \"uppercase + 0.08em tracked + cobalt\" character in CJK because both uppercase and wide tracking drop. Compensate by **always pairing the eyebrow with the cobalt accent-line component above the headline** — the 60×4 cobalt rule does the chrome-recognition work that the tracked-uppercase did in Latin. Keep the eyebrow's cobalt color and weight-600 contrast against the muted-gray body.\n\nThe cobalt color discipline (`#1e2bfa` as the only accent, full-opacity on numerals and CTAs, 20% opacity on borders, 4% opacity on card fills) is the system's actual identity and transfers entirely to a CJK build. Numerical callouts remain Latin Arabic digits in Chinese consulting decks by convention (业绩 $24.3M, 同比 +18%), so the cobalt Space Grotesk → 思源黑体 swap mostly affects labels and headlines, not the headline-grabbing numerical figures. Keep numerals in 思源黑体 weight 700 for the digit rendering.\n\n### Known CJK Gap\n\n- **No CDN Chinese face matches Space Grotesk's \"trustworthy consulting\" register exactly.** 思源黑体 reads as more institutional and slightly less contemporary than Space Grotesk. The template will feel slightly more \"official report\" and slightly less \"AI startup\" than its Latin original. This is generally desirable for executive-briefing contexts in Chinese.\n- **The h4-eyebrow signal weakens.** The \"uppercase Space Grotesk 600 in cobalt with 0.08em tracking\" combination is the system's most recognizable small chrome and loses both the uppercase and tracking signals in CJK. Adding the `{components.accent-line}` above or below the eyebrow is the recommended compensation; without it, eyebrows can blend into body weight contrast.\n- **Body in 思源宋体 changes the register.** Inter body reads as neutral-modern; 思源宋体 reads as editorial-serious. The system's \"premium consulting\" feel becomes slightly more \"policy paper\" — appropriate for state-owned enterprise or government audiences, slightly heavy for startup-pitch audiences. For startup contexts, swap body to 思源黑体 Noto Sans SC 400 instead.\n\n## Iteration Guide\n\n1. Any new slide starts on `{colors.bg}` cream ground. Don't switch the background per slide; the constant ground is the system's identity.\n2. Any new content slide carries a slide-header at the top: h4 eyebrow (cobalt, uppercase, 0.08em) on the left + tag-pill on the right.\n3. Any new headline uses Space Grotesk weight 600-700 in `{colors.text}` near-black with -0.02em tracking. Reach for h2 (28.8-41.6px) for primary moments.\n4. Any new card uses the tinted pattern: `{colors.card-bg}` (cobalt at 4%) + 1-1.5px `{colors.border}` (cobalt at 20%) + 10-14px radius. Never use solid color fills or opaque borders.\n5. Any new numerical callout (metric value, stat number, agenda number, bar percentage, step circle) is Space Grotesk weight 600-700 in `{colors.primary}` cobalt. Numbers are the accent moment.\n6. Any new accent line, divider, or directional rule uses cobalt — solid for the primary rule, soft-cobalt (20% opacity) for borders.\n7. Any new CTA uses the `{components.cta-button}` pattern: solid cobalt pill with cream text, 100px radius, no other CTA shape exists.\n8. Any new chart bar uses `{components.bar-fill}` (solid cobalt) on `{components.bar-track}` (cobalt at 8%) with 6px radius.\n9. Any new step or sequential indicator uses the `{components.step-circle}` with diminishing opacity for future steps (1.0 → 0.85 → 0.7 → 0.55).\n10. If a surface feels too sparse, add information (more stats, more detail blocks) — don't add a second accent color or a heavier border to fill space. The system reads as elegant when populated with substance, not noise.\n\n## Known Gaps\n\n- **Space Grotesk and Inter are loaded from Google Fonts** via a preconnect + `<link>`. There are no system fallbacks beyond `sans-serif` — in environments where Google Fonts fail, the system collapses to system defaults and loses its character.\n- **The directional change colors (`{colors.positive}` and `{colors.negative}`) are inline-only.** There is no token-level support for status fills, success/error badges, or alerts beyond these two inline text colors.\n- **The single-accent discipline limits categorical color encoding.** Multi-series charts must distinguish through positioning or labeling — there is no design-system answer for \"show 4 categorical series in different colors\". This is intentional but limits chart expressiveness.\n- **The agenda-item hover state changes background to `{colors.card-bg}`** — interactive on hover. This may not work as expected in static screen-share contexts.\n- **Bar fills animate from 0 to value on entry** but only the active slide's bars are visible. Re-entering a slide replays the animation; the system does not preserve animation state.\n- **The progress bar reads as decorative on slide 1** (it's at ~10% on a 10-slide deck) and\n\n<!-- [TRUNCATED AT 50KB] -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/preview.md":"# Blue Professional Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/blue-professional/design.md`\n- Preview card: `bold-template-pack/templates/blue-professional/preview.md`\n\n## Selection Metadata\n\n- Slug: `blue-professional`\n- Tagline: Cream paper background with electric cobalt blue accents; clean modern professional.\n- Mood: professional, modern, calm, trustworthy\n- Tone: clean, considered, polished, neutral\n- Formality: medium-high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports. Also a clean, tasteful choice whenever you want to read as professional without going stiff — research synthesis, internal reviews, brand work for service businesses.\n- Avoid for: Contexts where the deck should feel hot, playful, or intentionally informal — the cool electric-blue restraint will read as overly polished.\n\n## Visual Snapshot\n\nA restrained, consulting-grade presentation system on a warm cream canvas (#fdfae7) with a single saturated cobalt blue (#1e2bfa) as the only accent color. Display type runs Space Grotesk for headlines and numerical callouts; Inter handles body and chrome. Cards are soft-tinted cobalt at 4% opacity with 1.5px translucent borders and 10-14px rounded corners — quiet, never bordered in solid color. The aesthetic borrows from investment-research reports, McKinsey-grade quarterly briefings, and contemporary financial dashboards — measured, data-dense without feeling crowded, and unmistakably professional. The system is built for executive readability at distance, with strong typographic hierarchy and a single accent color carrying every emphasis moment.\n\nBlue Professional is a consulting-grade presentation system designed for executive briefings, research deliverables, and quarterly reviews. Its foundational visual premise is restraint with one strong commitment: a warm cream canvas ({colors.bg} — #fdfae7) and a single saturated cobalt ({colors.primary} — #1e2bfa) that carries every accent, every metric, every CTA, every eyebrow, every chart fill. There is no secondary brand color, no palette of pastels, no warm/cool pairing — just cream, cobalt, and a tight ladder of muted grays for body text.\n\n## Preview Ingredients\n\n- Palette: bg #FDFAE7; primary #1E2BFA; text #111111; text-muted #6B6B6B; text-light #9A9A9A; positive #059669; negative #DC2626\n- Typography: See full design doc after selection.\n- Signature move: Warm cream ground ({colors.bg}) on every surface — never pure white, never gray.\n- Signature move: Single saturated cobalt ({colors.primary}) as the only accent — used for every eyebrow, metric, CTA, chart fill, and progress indicator.\n- Signature move: Space Grotesk (display + chrome) + Inter (body) — never substitute either.\n- Signature move: Cards are 4% cobalt tints with 1.5px cobalt-at-20% borders and 10-14px rounded corners.\n- Signature move: Soft pill-shaped chrome ({components.tag-pill}, {components.cta-button}) with full 100px border-radius.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/design.md":"---\nversion: alpha\nname: Bold Poster\ndescription: \"A populist editorial poster system that mashes vintage Italian sports-magazine display lettering with classical serif body and tight monospace metadata. The display face is Shrikhand — a heavy slab/script hybrid with playful italic personality — rendered at poster scale (often 200-320px) and routinely tilted off-axis. Body runs Libre Baskerville for a literary editorial register; Space Grotesk handles tiny uppercase labels and chrome. The palette is uncompromising: white canvas, deep brown-black ink (#1C1410), single saturated tomato red (#D8000F), and a warm off-white (#F5F2EF) for alternating panels. Borders are bold 1.5-3px ink rules; the only shadow is a single stacked offset behind red display text. The aesthetic is loud, confident, and unmistakably print-poster — closer to a 1970s European brand annual report or a wine merchant's catalogue than a contemporary slide deck.\"\n\ncolors:\n  bg: \"#FFFFFF\"\n  dark: \"#1C1410\"\n  red: \"#D8000F\"\n  light: \"#F5F2EF\"\n\ntypography:\n  hero-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(72px, 16vw, 220px)\"\n    lineHeight: 0.88\n    letterSpacing: 1px\n    color: \"{colors.dark}\"\n  hero-title-red:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(84px, 18vw, 260px)\"\n    lineHeight: 0.85\n    color: \"{colors.red}\"\n    transform: \"rotate(-4deg)\"\n  hero-title-bottom:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(64px, 14vw, 200px)\"\n    lineHeight: 0.9\n    color: \"{colors.dark}\"\n    transform: \"rotate(2deg)\"\n  close-big:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(80px, 18vw, 260px)\"\n    lineHeight: 0.88\n    color: \"{colors.red}\"\n    transform: \"rotate(-5deg)\"\n  stat-big:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, 26vw, 320px)\"\n    lineHeight: 0.82\n    color: \"{colors.red}\"\n    transform: \"rotate(-6deg)\"\n  red-quote:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, 7vw, 90px)\"\n    lineHeight: 1.15\n    color: \"{colors.bg}\"\n    textShadow: \"2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)\"\n  section-header:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, 5vw, 64px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  section-header-lg:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(36px, 6vw, 72px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  cell-number-lg:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 3.5vw, 52px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  cell-number-md:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 3.5vw, 48px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  card-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(22px, 3vw, 36px)\"\n    lineHeight: 1.1\n    color: \"{colors.dark}\"\n  card-title-sm:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(20px, 2.5vw, 32px)\"\n    lineHeight: 1.1\n    color: \"{colors.dark}\"\n  pillar-num:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(36px, 5vw, 64px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  pillar-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2.2vw, 28px)\"\n    lineHeight: 1.15\n    color: \"{colors.dark}\"\n  stat-item-num:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 4vw, 56px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  roadmap-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2.5vw, 32px)\"\n    lineHeight: 1.1\n  inline-stat:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2vw, 28px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  body:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.2vw, 16px)\"\n    lineHeight: 1.75\n    color: \"{colors.dark}\"\n  body-card:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 1.1vw, 14px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  body-cell:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 13px)\"\n    lineHeight: 1.55\n    color: \"{colors.dark}\"\n  body-small:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 13px)\"\n    lineHeight: 1.5\n    color: \"{colors.dark}\"\n  hero-meta:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 14px)\"\n    lineHeight: 1.5\n    color: \"{colors.dark}\"\n  tag-body:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.2vw, 16px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  red-cite:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.3vw, 16px)\"\n    lineHeight: 1.5\n    color: \"{colors.bg}\"\n  close-sub:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(14px, 1.5vw, 18px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 10px\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  label-red:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 10px\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  rm-label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 9px\n    letterSpacing: 3px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  tag-label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    letterSpacing: 3px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  bullet-body:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    lineHeight: 1.45\n    color: \"{colors.dark}\"\n  counter:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 11px\n    lineHeight: 1\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  link:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  fc-micro:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: 10px\n    lineHeight: 1.4\n    color: \"{colors.dark}\"\n\nspacing:\n  pad-slide: \"48px 56px\"\n  pad-cell: \"22px 20px\"\n  pad-cell-sm: \"20px 24px\"\n  pad-pillar: \"32px 24px\"\n  pad-card: \"24px\"\n  pad-roadmap: \"40px 48px\"\n  gap-grid-md: \"24px 32px\"\n  gap-grid-roadmap: \"28px 36px\"\n  gap-grid-stats: \"48px\"\n  gap-stat-row: \"20px\"\n  pad-bottom-clearance: \"40px\"\n  max-width-content: 1100px\n  max-width-services: 1000px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.bg}\"\n\ncomponents:\n  progress-bar:\n    position: \"fixed, bottom 0 left 0\"\n    height: 5px\n    background: \"{colors.red}\"\n    description: \"Persistent thick red progress strip at the bottom of the viewport. Width grows linearly with slide index. The system's most prominent piece of chrome.\"\n  counter:\n    position: \"fixed, bottom 18px right 24px\"\n    color: \"{colors.dark}\"\n    opacity: 0.5\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontSize: 11px\n    letterSpacing: 2px\n    description: \"Persistent slide counter NN / NN at 50% opacity in Space Grotesk uppercase.\"\n  hint-pill:\n    position: \"fixed, bottom 18px center\"\n    background: \"{colors.light}\"\n    padding: \"6px 14px\"\n    borderRadius: 4px\n    fontSize: 10px\n    opacity: 0\n    description: \"Bottom-center hint pill that fades to 50% opacity on body hover. Subtle wayfinding only.\"\n  section-bordered-grid:\n    border: \"3px solid {colors.dark}\"\n    description: \"Heavy 3px ink border enclosing a grid of cells. Each child cell carries a 1.5px ink inner border, producing a hairline-on-heavy double-border tabular grid. Used for financial-figure and summary-highlight grids.\"\n  cell-bordered:\n    border: \"1.5px solid {colors.dark}\"\n    padding: \"22px 20px\"\n    description: \"Tabular cell with 1.5px ink border. Lives inside a 3px-bordered parent grid; the two border weights touch to produce the system's signature grid-with-double-edge.\"\n  red-leftbar-card:\n    borderLeft: \"4px solid {colors.red}\"\n    paddingLeft: 18px\n    description: \"Service or content card marked by a 4px solid red left rule and 18px left padding. The system's editorial card pattern — no outline, just the red rule signaling the start of a block.\"\n  red-leftbar-card-thin:\n    borderLeft: \"3px solid {colors.red}\"\n    paddingLeft: 16px\n    description: \"Thinner variant of the red-leftbar card used on dark surfaces (roadmap phases). Same pattern, scaled-down rule weight.\"\n  bullet-em-dash:\n    glyph: \"—\"\n    color: \"{colors.red}\"\n    fontWeight: 700\n    paddingLeft: 14px\n    description: \"List bullet using a red em-dash (—) glyph in place of a disc. The dash sits at position absolute left and the body text indents to clear it.\"\n  bullet-bullet:\n    glyph: \"•\"\n    color: \"{colors.red}\"\n    paddingLeft: 12px\n    description: \"List bullet using a red round bullet (•) glyph. Same indent pattern as the em-dash variant.\"\n  pillar-panel:\n    flex: 1\n    padding: \"32px 24px\"\n    borderRight: \"3px solid {colors.dark}\"\n    description: \"Vertical column panel inside a multi-pillar layout. Each pillar separated by a 3px ink vertical rule. Alternating panels swap background from {colors.bg} to {colors.light} for striping.\"\n  pillar-bullet-row:\n    padding: \"5px 0\"\n    borderBottom: \"1px solid rgba(28, 20, 16, 0.08)\"\n    description: \"Bullet row inside a pillar with a hairline-soft bottom border (ink at 8%) separating items. The last item drops the border.\"\n  global-card:\n    border: \"2px solid {colors.dark}\"\n    padding: 24px\n    description: \"Bordered information card with 2px ink outline. Used on the global presence layout. Heavier than the leftbar pattern, more contained.\"\n  stacked-text-shadow:\n    textShadow: \"2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)\"\n    description: \"Three-step decreasing-opacity stacked offset shadow in ink. Applied only to large red display text on red panels. The system's only shadow treatment.\"\n  red-panel:\n    background: \"{colors.red}\"\n    color: \"{colors.bg}\"\n    description: \"Full-bleed saturated red panel surface. Carries white text with the stacked-text-shadow treatment on display.\"\n  dark-panel:\n    background: \"{colors.dark}\"\n    color: \"{colors.bg}\"\n    description: \"Full-bleed deep brown-black panel surface. Carries white text and red accents (left bars, mono labels).\"\n  link-underline:\n    color: \"{colors.dark}\"\n    borderBottom: \"2px solid {colors.red}\"\n    paddingBottom: 4px\n    description: \"Footer link style — Space Grotesk uppercase with a 2px red underline. Hover swaps text color to red.\"\n  hero-title-stack:\n    description: \"A three-line stacked title where each line is a Shrikhand display element at a slightly different size. Two of the three lines carry rotation transforms (-4deg, +2deg) and one is set in red. The composition is the system's signature opener.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBold Poster is a **populist editorial poster system** that lifts its visual vocabulary from vintage Italian sports magazines, mid-century European brand annual reports, and wine-merchant catalogues. The premise is that every slide should feel printed — set in heavy display type, locked to one strong red accent, on a white or off-white sheet, with grids ruled in ink and decoration kept to a strict minimum.\n\nThe type system is three faces working in tight roles. **Shrikhand** (Google Fonts) is the display face — a heavy slab/script hybrid with chunky italic terminals, narrow apertures, and a distinctly Italian-sports-script personality. Used at poster scale (often 100-320px) and almost always with playful rotation (-6° to +2°), Shrikhand carries every hero title, every section header, every stat figure, every card title. **Libre Baskerville** (Google Fonts) is the body face — a classical literary serif with strong stroke contrast that anchors the system in editorial register. Used at 11-16px with 1.5-1.75 line-height in deep ink, Libre Baskerville is what makes the system feel printed rather than digital. **Space Grotesk** (Google Fonts) is the chrome face — used exclusively for tiny uppercase labels (9-12px, 2-3px tracking), bullet body inside cards, slide counters, and footer links. The Space Grotesk treatment is the system's \"metadata\" voice.\n\nThe color philosophy is **uncompromising restraint**: white canvas, deep brown-black ink (`{colors.dark}` — `#1C1410`), single saturated tomato red (`{colors.red}` — `#D8000F`), and a warm off-white (`{colors.light}` — `#F5F2EF`) for alternating panels. There are no secondary brand colors, no gradients (except the inside of the stacked text-shadow), no tints, no semantic state colors. Every numerical callout, every active rule, every CTA, every emphasis moment is red — and red is reserved for these moments only (it is never used as body text, never as fill on a card without text on top, never as a tint).\n\nDepth is **structural, not atmospheric**. The system has no drop shadows except a single stacked text-shadow applied to red display text on red panels (three steps at 2/2, 4/4, 6/6 in decreasing-opacity ink). All other depth comes from heavy borders: 3px ink outlines on tabular grids, 1.5-2px ink borders on cells, 4px red left rules on editorial cards, 1px hairline rules between bullet items. The double-border treatment (3px outer + 1.5px inner) is the system's signature tabular pattern — it produces a printed-newsprint quality that defines the look.\n\n**Density philosophy: high — populist and packed.** This system reads as authoritative when slides are dense and timid when sparse. Roadmap, pillar, and financial slides routinely carry 3-6 distinct cells with body paragraphs, bullet lists, and tabular data — and they read as energetic, not crowded. Conversely, hero, closing, and statement slides intentionally drop to one or two huge display elements with massive negative space — the very-low and very-high density polarities are both deliberate. A typical content slide carries a section header + a grid of 3-6 cells, each holding a red numerical/title + a Libre Baskerville body paragraph + 3-6 Space Grotesk mono bullets. A typical statement slide carries one rotated red Shrikhand element occupying half the canvas with a single tagline below.\n\n**Key Characteristics:**\n- White (`{colors.bg}`) canvas alternating with off-white (`{colors.light}`) panels for striping, plus dark (`{colors.dark}`) and red (`{colors.red}`) full-bleed panel surfaces for statement moments.\n- Single tomato red (`{colors.red}`) as the only accent — used for every numerical figure, every section rule, every label, every left-bar marker.\n- Three-face stack: Shrikhand (display + numerical), Libre Baskerville (body), Space Grotesk (mono labels + bullets + chrome).\n- Display Shrikhand is routinely tilted (-6° to +2°) — the rotation is the system's signature movement.\n- Heavy ink borders: 3px on tabular grid containers, 1.5-2px on cells, 4px red on editorial leftbar cards, 1px hairlines between bullet rows.\n- Stacked text-shadow (three steps at 2/2, 4/4, 6/6 in decreasing ink opacity) on red display elements — the only shadow in the system.\n- Persistent red progress bar (5px thick) at the bottom edge of every slide.\n- Em-dash and bullet glyphs in red as list markers — never default disc bullets.\n- Hero compositions stack three Shrikhand lines at varying sizes with at least one in red and at least one tilted.\n- Footer links use Space Grotesk uppercase with a 2px red underline.\n\n## Colors\n\n### Palette\n\n- **Bg** (`{colors.bg}` — `#FFFFFF`): Pure white canvas. The default ground for most surfaces. Reads as fresh newsprint paper.\n- **Dark** (`{colors.dark}` — `#1C1410`): A deep brown-black with warm bias — not pure black. Used for every line of body text, every border, every Space Grotesk label, every Libre Baskerville paragraph, and as a full-bleed panel ground on roadmap-class surfaces. The warmth distinguishes it from generic editorial black.\n- **Red** (`{colors.red}` — `#D8000F`): Saturated tomato red. The system's single accent. Used for every numerical figure (Shrikhand red numerals are the most common element), every section eyebrow label, every leftbar rule on editorial cards, every list bullet glyph, every footer link underline, the persistent progress bar, and as a full-bleed panel ground on statement-class surfaces. Never used as body text color, never as a tint, never as a card fill without overlaid text.\n- **Light** (`{colors.light}` — `#F5F2EF`): Warm off-white. Used for alternating panel backgrounds inside pillar layouts (every other pillar swaps to off-white for vertical striping) and as the background of the hint-pill chrome. Subtly warmer than the white canvas — creates surface differentiation without disrupting the printed-paper register.\n\n### Defaults\n\n- **Default surface background**: `{colors.bg}` (white). For statement moments, switch to `{colors.red}` (full-bleed red panel). For roadmap-class moments, switch to `{colors.dark}`. For striping inside a pillar layout, alternate `{colors.bg}` and `{colors.light}`.\n- **Default headline / display color on white surfaces**: `{colors.dark}` for primary headlines, `{colors.red}` for numerical figures and stat-class display elements.\n- **Default headline color on red panels**: `{colors.bg}` (white) with the stacked text-shadow treatment.\n- **Default headline color on dark panels**: `{colors.bg}` (white). Numerical accents stay `{colors.red}`.\n- **Default body text color**: `{colors.dark}` on white/light surfaces, `{colors.bg}` (white) on dark/red surfaces with opacity 0.5-0.8 for tertiary content.\n- **Default eyebrow / label color**: `{colors.red}` on white surfaces (red Space Grotesk uppercase at 2-3px tracking), `{colors.dark}` for the smaller cell labels inside grids.\n- **Default leftbar rule color**: `{colors.red}`. The 4px (or 3px on dark surfaces) red left rule is the editorial card signature.\n- **Default border color for cells and grids**: `{colors.dark}`. There are no colored cell borders.\n- **Default bullet glyph color**: `{colors.red}`. Default disc bullets do not exist in this system; every list uses red em-dash or red round-bullet glyphs.\n\nThe system commits **hard** to the four-color palette. Don't introduce a fifth color (green for positive, blue for info, yellow for highlight). All emphasis is achieved by red, all body is dark on light, all inversion is white on red or white on dark. Categorical differentiation comes from positioning, label, and tilt — never from color.\n\n## Typography\n\n### Font Family Stack\nThe system runs three faces, each tightly bound to its role.\n\n**Shrikhand** (Google Fonts) is the display + numerical face. It's a single-weight (400) heavy slab-script with playful italic-leaning forms and narrow apertures — a face that reads as both old-world (postcard-script) and contemporary (variable-weight digital display). Used at every scale from 18px (inline stats) to 320px (the hero stat). Always weight 400 (the face has no other weights). Rotation is part of the face's voice — multiple Shrikhand elements per slide carry transforms ranging from -6° to +2°.\n\n**Libre Baskerville** (Google Fonts, 400 / 700 + italic) is the body face. A classical literary serif with high stroke contrast — used for every paragraph, every body cell, every metadata line, every cite, every close-sub. Set at 11-16px with 1.5-1.75 line-height, the face reads as comfortably editorial. The face's italic and bold weights are loaded but used sparingly — italic exists for inline emphasis, bold weight 700 is rarely needed since Shrikhand already handles all the heavy display work.\n\n**Space Grotesk** (Google Fonts, weights 400-700) is the metadata + chrome face. Used at 9-12px in uppercase with 2-3px letter-spacing for labels, eyebrows, slide counters, link text, card bullet bodies (when not using Libre Baskerville), and progress chrome. The wide-tracked uppercase treatment is the system's \"stamped metadata\" voice.\n\nThe roles are non-overlapping: Shrikhand handles every display moment and every numerical figure; Libre Baskerville handles every body paragraph and editorial text; Space Grotesk handles every uppercase label, bullet, and chrome element. Don't cross — Shrikhand body would be illegible; Libre Baskerville labels would look like book footnotes; Space Grotesk headlines would feel like a tech startup.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.stat-big}` | 120–320px clamp | Shrikhand | 400 | Hero-class stat figure (always rotated -6°, always red) |\n| `{typography.hero-title-red}` | 84–260px clamp | Shrikhand | 400 | Red word in a multi-line hero stack (always rotated -4°) |\n| `{typography.close-big}` | 80–260px clamp | Shrikhand | 400 | Closing-statement title (always rotated -5°, always red) |\n| `{typography.hero-title}` | 72–220px clamp | Shrikhand | 400 | Top line of a hero stack (default no rotation) |\n| `{typography.hero-title-bottom}` | 64–200px clamp | Shrikhand | 400 | Bottom line of a hero stack (always rotated +2°) |\n| `{typography.section-header-lg}` | 36–72px clamp | Shrikhand | 400 | Large section header for financial / dense-data slides |\n| `{typography.section-header}` | 32–64px clamp | Shrikhand | 400 | Standard section header (summary, services, global, close) |\n| `{typography.pillar-num}` | 36–64px clamp | Shrikhand | 400 | Numeral atop a pillar panel (red) |\n| `{typography.cell-number-lg}` / `{typography.cell-number-md}` | 28–52px clamp | Shrikhand | 400 | Tabular cell numerical figure (always red) |\n| `{typography.stat-item-num}` | 28–56px clamp | Shrikhand | 400 | Inline supplementary stat numeral (dark color) |\n| `{typography.card-title}` | 22–36px clamp | Shrikhand | 400 | Service card title or global card title |\n| `{typography.card-title-sm}` | 20–32px clamp | Shrikhand | 400 | Smaller card title (global cards) |\n| `{typography.pillar-title}` | 18–28px clamp | Shrikhand | 400 | Pillar panel title |\n| `{typography.roadmap-title}` | 18–32px clamp | Shrikhand | 400 | Roadmap phase title (white on dark surface) |\n| `{typography.red-quote}` | 32–90px clamp | Shrikhand | 400 | Quote body on a red panel (white text + stacked shadow) |\n| `{typography.inline-stat}` | 18–28px clamp | Shrikhand | 400 | Inline mini-stat number (red) inside a body block |\n| `{typography.body}` | 13–16px clamp | Libre Baskerville | 400 | Standard body paragraph |\n| `{typography.body-card}` | 12–14px clamp | Libre Baskerville | 400 | Card body inside service/global cards |\n| `{typography.body-cell}` | 11–13px clamp | Libre Baskerville | 400 | Tabular cell body inside grids |\n| `{typography.body-small}` | 11–13px clamp | Libre Baskerville | 400 | Small body for summary highlights |\n| `{typography.hero-meta}` | 11–14px clamp | Libre Baskerville | 400 | Hero meta line above the title stack |\n| `{typography.red-cite}` | 13–16px clamp | Libre Baskerville | 400 | Citation under a red-panel quote (white text) |\n| `{typography.close-sub}` | 14–18px clamp | Libre Baskerville | 400 | Subtitle / contact line under a closing title |\n| `{typography.label-red}` / `{typography.tag-label}` | 10–12px | Space Grotesk | 600 | Section label (uppercase, 2-3px tracking, red) |\n| `{typography.label}` | 10px | Space Grotesk | 600 | Cell label inside grids (uppercase, 2px tracking, dark) |\n| `{typography.rm-label}` | 9px | Space Grotesk | 600 | Roadmap phase label (uppercase, 3px tracking, red) |\n| `{typography.bullet-body}` | 10–12px clamp | Space Grotesk | 400 | List bullet body inside cards and pillars |\n| `{typography.counter}` | 11px | Space Grotesk | 600 | Persistent slide counter |\n| `{typography.link}` | 10–12px clamp | Space Grotesk | 600 | Footer / closing link text (uppercase, 2px tracking) |\n| `{typography.fc-micro}` | 10px | Space Grotesk | 400 | Tiny micro-context line at the bottom of a tabular cell |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.hero-title}` (72–220px) at the top of a stack, paired with `{typography.hero-title-red}` (84–260px, red, rotated -4°) on a second line and `{typography.hero-title-bottom}` (64–200px, rotated +2°) on a third line. The three-line stacked composition is the system's standard hero pattern.\n- **Default size for a primary section headline**: `{typography.section-header}` (32–64px). Always Shrikhand.\n- **Default size for a hero-class statistic**: `{typography.stat-big}` (120–320px) rotated -6°, always red.\n- **Default size for a tabular cell numeral**: `{typography.cell-number-md}` (28–52px) in red.\n- **Default size for body**: `{typography.body}` (13–16px) Libre Baskerville at line-height 1.75.\n- **Default size for a card body**: `{typography.body-card}` (12–14px) at line-height 1.6.\n- **Default size for a section eyebrow label**: `{typography.tag-label}` (10–12px) Space Grotesk weight 600 in red, uppercase, with 2-3px letter-spacing.\n- **Default size for a list bullet body**: `{typography.bullet-body}` (10–12px) Space Grotesk weight 400.\n- **Default weight for Shrikhand**: 400 — the face has no other weights.\n- **Default weight for Libre Baskerville body**: 400. Bold (700) is used only for inline emphasis inside body paragraphs.\n- **Default weight for Space Grotesk labels**: 600. Wide tracking is the system's label voice; weight 400 is for bullet bodies only.\n\nWhen unsure which display token to reach for, default to `{typography.section-header}` (32–64px) for a primary slide section opener. Reserve `{typography.stat-big}` for hero-stat moments and `{typography.hero-title}` triples for cover-class surfaces.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every hero-class Shrikhand element is part of a multi-line stacked composition with at least one rotated line and at least one red line.** A single-line Shrikhand hero title without rotation or color contrast collapses into a generic display moment.\n- **Every tabular numerical cell figure is Shrikhand at the cell-number scale (28–52px) in `{colors.red}`.** Numerical cells in dark text break the system's hierarchy — red is the data signal.\n- **Every section eyebrow is Space Grotesk weight 600 in `{colors.red}`, uppercase, with 2-3px letter-spacing.** No exceptions. Eyebrows at any other tracking, weight, color, or case are not the system's eyebrow.\n- **Every statement-class Shrikhand element (stat-big, close-big) is rotated -5° to -6° in `{colors.red}`.** Untilted red Shrikhand at hero scale looks like a misplaced word — the tilt is the system's \"movement\" signal.\n- **Every red-panel display element carries the stacked text-shadow** (`2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)`). Without the shadow, white Shrikhand on red reads as floating; with it, the text feels printed-and-pressed into the panel.\n- **Every list bullet uses a `{colors.red}` em-dash (—) or round-bullet (•) glyph** at position absolute left with a 12-14px padding-left on the body. Default disc bullets do not exist; the red marker is the system's list signal.\n- **Every Libre Baskerville body is at line-height ≥ 1.5 (preferably 1.6-1.75).** Tighter line-height collapses the editorial register.\n- **Every body strong (`<strong>`) inside a Libre Baskerville paragraph switches face to Space Grotesk weight 600.** The inline face-switch is the system's primary inline emphasis mechanism — a serif strong tag does not produce the same effect.\n\n### Typography Principles\n\nThe voice contrast is **chunky tilted display Shrikhand ↔ literary serif body ↔ wide-tracked mono labels**. Italic is rare (Libre Baskerville italic exists but is used only for inline emphasis inside body); underline is reserved for the red-underline footer link treatment. Bold within Libre Baskerville body is replaced by an inline face-switch to Space Grotesk weight 600 — the change-of-face is the emphasis signal.\n\nNumerical content (stat figures, financial values, percentage callouts, mini-stats) is always Shrikhand in red. Even small inline stats inside body cells become red Shrikhand. The numerical-as-display pattern is what gives the system its sports-magazine register.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and animate in via opacity + translateY (30px) + scale (0.98 → 1) on 550ms ease. Only one slide is `.active` at a time. Default slide padding is `48px 56px` with major variations:\n- Hero slides: `5vh 7vw` top-padding, alignment shifted to top-left.\n- Roadmap slides: `40px 48px` to accommodate the dense two-column grid.\n- Pillars slides: `0` (the pillar columns provide their own internal padding).\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide}` | 48px 56px | Default slide padding |\n| `{spacing.pad-cell}` | 22px 20px | Tabular cell internal padding (financial grid) |\n| `{spacing.pad-cell-sm}` | 20px 24px | Summary highlight cell padding |\n| `{spacing.pad-pillar}` | 32px 24px | Pillar column padding |\n| `{spacing.pad-card}` | 24px | Global card padding |\n| `{spacing.pad-roadmap}` | 40px 48px | Roadmap surface padding |\n| `{spacing.gap-grid-md}` | 24px 32px | Standard service/global grid gap (row × col) |\n| `{spacing.gap-grid-roadmap}` | 28px 36px | Roadmap two-column grid gap |\n| `{spacing.gap-grid-stats}` | 48px | Big stat row gap |\n| `{spacing.gap-stat-row}` | 20px | Vertical gap within a stat-item stack |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Progress bar** at the bottom edge — a 5px thick `{colors.red}` strip that grows in width with slide index. The thickest, most visible piece of chrome; it functions as both progress indicator and bottom-edge poster trim.\n- **Slide counter** at bottom-right (`bottom: 18px right: 24px`) — Space Grotesk weight 600 uppercase NN / NN at 50% opacity.\n- **Hint pill** at bottom-center — Space Grotesk uppercase text in an off-white pill, opacity 0 by default, fading to 50% on `body:hover`.\n\n### Surface Variations\nThe deck cycles through five surface treatments:\n- **White content surfaces** — default, most slides.\n- **Off-white striped panels** — inside pillar layouts, alternating columns get `{colors.light}` background for vertical striping.\n- **Full-bleed red panel** — statement / quote slides flood the canvas in `{colors.red}` with white display text and the stacked text-shadow.\n- **Full-bleed dark panel** — roadmap-class surfaces use `{colors.dark}` ground with white text and red accents.\n- **Bordered tabular grids** — financial-figure and summary-highlight grids carry a 3px ink outer border + 1.5px ink inner cell borders, producing the system's signature double-border tabular composition.\n\n### Hero Stack Composition\nThe standard cover/hero pattern is a **three-line Shrikhand stack** where each line carries a different size and at least one carries rotation and at least one is in red. The stack reads top-left → bottom-right, with the smallest line at the bottom and the boldest red rotation in the middle. The composition is the system's most distinctive opener.\n\n## Depth and Elevation\n\n### No Cards, No Shadows (Mostly)\nThe system uses **almost no box-shadows**. Cards do not float off the surface via shadow. Depth comes from:\n- **Heavy borders** (3px outer + 1.5px inner double-border on tabular grids; 2px solid borders on global cards; 4px red left rules on editorial leftbar cards).\n- **Surface inversion** (full-bleed red or dark panels switch the entire surface).\n- **Tilted display elements** that break the grid alignment.\n\n### The Single Shadow Pattern (Stacked Text Shadow)\nThe only shadow in the entire system is the **stacked text-shadow on red display text on red panels**: three steps at 2/2, 4/4, 6/6 with decreasing-opacity ink fill (0.25, 0.20, 0.15). The shadow is applied via `text-shadow:` not `box-shadow:`. The effect is a printed-press feel — the text reads as having been stamped slightly off-register, three times. This treatment appears only on the red-quote and certain rotated Shrikhand display moments on red panels.\n\n### Border-as-Depth (Tabular Grid Signature)\nThe financial-grid and summary-highlight-grid patterns use a **3px solid ink outer border** with **1.5px solid ink inner cell borders** — the two border weights touch at every cell intersection, producing a printed-newsprint quality. This is the system's primary structural depth mechanism on data-heavy surfaces.\n\n### Leftbar Rules\nEditorial cards (service cards, roadmap phases, global cards) are marked by a **4px (or 3px on dark surfaces) red solid left border** with 16-18px padding-left. The leftbar rule signals \"this is a card\" without enclosing it — the card reads as cantilevered off the red rule. This is the system's most common card pattern.\n\n### Tilt as Depth\nRotated Shrikhand display elements break the horizontal baseline and create perceived dimensionality without using perspective. The standard rotations are -6° (stat-big), -5° (close-big), -4° (hero-title-red), +2° (hero-title-bottom). These tilts are part of the system's spatial language.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px** on everything except the hint-pill (4px) and the bar-track elements (none in this template, but if used should be 0px). Every card, every cell, every panel, every callout is a strict rectangle.\n- **4px** on the hint-pill only — a minor concession for the floating chrome.\n\nThe square-corner discipline is essential. Rounded cards immediately collapse the printed-poster feel into generic web aesthetic.\n\n### Border Weights\n- **5px solid `{colors.red}`** — used only on the persistent progress bar.\n- **4px solid `{colors.red}`** — used on the editorial leftbar card (service cards on white surfaces).\n- **3px solid `{colors.dark}`** — used on the outer border of tabular grids (financial-grid, summary-highlights) and as the vertical pillar separator.\n- **3px solid `{colors.red}`** — used on the leftbar of roadmap phase cards (on dark surfaces).\n- **2px solid `{colors.red}`** — used as the underline rule on footer links.\n- **2px solid `{colors.dark}`** — used as the outline border on global cards.\n- **1.5px solid `{colors.dark}`** — used on inner cells of tabular grids.\n- **1px solid `rgba(28, 20, 16, 0.08)`** — hairline-soft separator between bullet rows inside pillar panels.\n\nThe border ladder (1px-soft / 1.5px / 2px / 3px / 4px / 5px) is fixed. Every border is solid; dashed and dotted borders do not exist.\n\n### Decorative Element Types\n\n**Hero title stack** — A three-line Shrikhand composition at varying sizes with rotation and color contrast. The system's signature opener.\n\n**Red panel** — Full-bleed `{colors.red}` ground with white display text carrying the stacked text-shadow. Used for statement / quote moments.\n\n**Dark panel** — Full-bleed `{colors.dark}` ground with white text and red accents. Used for roadmap-class dense-data surfaces.\n\n**Tabular bordered grid** — 3px ink outer border + 1.5px ink inner cell borders producing a double-border tabular composition. Each cell holds a Shrikhand red numeral + Space Grotesk uppercase label + Libre Baskerville body paragraph + optional Space Grotesk micro line at bottom.\n\n**Red leftbar card** — A 4px solid red left rule with 18px left padding holding a Shrikhand card title + Libre Baskerville body + Space Grotesk red-bullet list. The system's primary editorial card pattern.\n\n**Pillar panel** — A vertical column inside a multi-pillar layout, separated by 3px ink vertical rules and alternating between white and off-white backgrounds. Each pillar holds a Shrikhand red numeral, Shrikhand title, Libre Baskerville lead, and Space Grotesk bullets separated by 1px hairline-soft rules.\n\n**Global card** — A 2px solid ink-bordered card with 24px padding holding a Space Grotesk red label + Shrikhand title + Libre Baskerville body + inline gc-stats row. Used on the global-presence surface.\n\n**Em-dash bullet** — A red em-dash glyph at position absolute left with 14px padding-left on the body. The system's primary list marker.\n\n**Round bullet** — A red round-bullet glyph at position absolute left with 12px padding-left on the body. Secondary list marker, used in card and pillar bullets.\n\n**Footer link** — Space Grotesk uppercase text with a 2px red underline and 4px padding-bottom. Hover swaps text color to red.\n\n**Stacked text shadow** — Three-step decreasing-opacity ink shadow applied to red display text on red panels. The system's only shadow treatment.\n\n**Tilted display** — Shrikhand elements rotated -6° to +2°. Used on hero-title-red, stat-big, close-big, and hero-title-bottom.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.bg}` (white) as the default canvas on most surfaces. Switch to `{colors.red}` for statement slides, `{colors.dark}` for dense-data slides, and alternate `{colors.bg}` / `{colors.light}` for vertical pillar striping.\n- Set every hero-class title as a multi-line Shrikhand stack with at least one rotated line and at least one red line. The composed-stack is the system's opener signature.\n- Use Shrikhand at every numerical-callout moment in `{colors.red}` — tabular cells, summary highlights, pillar numbers, inline mini-stats. Red Shrikhand numerals are the system's data voice.\n- Set every section eyebrow in Space Grotesk weight 600 uppercase with 2-3px letter-spacing in `{colors.red}`. The wide-tracked red label is the universal section opener.\n- Apply the stacked text-shadow to red display text on red panels. The three-step decreasing-opacity ink shadow is the system's only shadow and creates the printed-press feel.\n- Use the 4px red leftbar pattern (`{components.red-leftbar-card}`) for editorial cards. The cantilevered-off-the-rule treatment is the system's primary card pattern.\n- Build tabular grids with the double-border treatment: 3px ink outer border + 1.5px ink inner cell borders touching at intersections.\n- Render every list bullet with a red em-dash (`{components.bullet-em-dash}`) or red round-bullet (`{components.bullet-bullet}`) at position absolute left. Default disc bullets are forbidden.\n- Tilt Shrikhand statement elements (-5° to -6°) to create the system's signature movement. Untilted red statement display reads as misplaced.\n- Use Libre Baskerville at line-height 1.5-1.75 in `{colors.dark}` for every body paragraph. The literary editorial body is what makes the system feel printed.\n\n### Don't\n\n- Don't introduce a second accent color. Red is the only accent — green for positive, blue for info, yellow for highlight all break the single-accent discipline.\n- Don't round any corner on cards, panels, cells, or callouts. Square corners are non-negotiable; the only exception is the 4px hint-pill chrome.\n- Don't add drop shadows or blurred shadows. The system has zero box-shadows; the only shadow is the stacked text-shadow on red display text.\n- Don't substitute fonts. Shrikhand + Libre Baskerville + Space Grotesk is the trio. Replacing Shrikhand with any other display face collapses the entire identity.\n- Don't use Shrikhand for body or Libre Baskerville for labels. The three-face role discipline is non-negotiable.\n- Don't use default bullet points or disc list markers. Lists always use red em-dash or red round-bullet glyphs at position absolute left.\n- Don't omit the tilt on hero-class red Shrikhand elements. The rotation is the system's signature movement; untilted red display reads as flat.\n- Don't render headlines in red on white surfaces (except for stat-big, close-big, hero-title-red — the rotated statement elements). Most section headers are `{colors.dark}` Shrikhand, not red.\n- Don't tighten Libre Baskerville body line-height below 1.5. Tight body line-height collapses the literary register into something cramped.\n- Don't crowd a statement slide with cards or structural content. Statement surfaces (red panel, stat slide, close slide) deliberately reserve massive negative space around a single rotated red display element.\n\n## Responsive Behavior\n\nBold Poster is designed as a **1920×1080 presentation system**. Sizing uses CSS `clamp()` with `vw`-based mid values for display type, fixed `px` for borders and chrome, and `rem`-adjacent fixed values for cell padding. The system has a single responsive breakpoint at 768px for narrow viewports.\n\n### Scaling Behavior\n- Hero stat scales 120px → 320px on viewport width.\n- Hero titles scale 64px → 260px.\n- Section headers scale 32px → 72px.\n- Body scales 11px → 16px.\n- Borders (1px-soft / 1.5px / 2px / 3px / 4px / 5px) and rotation transforms are fixed and do not scale.\n\n### Mobile Breakpoint (max-width: 768px)\nA single `@media (max-width: 768px)` block restructures dense layouts for narrow viewports:\n- Slide padding shrinks from 48px × 56px to 32px × 24px.\n- Summary columns collapse from 2 → 1.\n- Summary highlights grid collapses from 3 → 1.\n- Financial grid collapses from 3 → 2.\n- Service grid collapses from 2 → 1.\n- Roadmap grid collapses from 2 → 1.\n- Pillars switch from horizontal flex-row to vertical flex-column; vertical separators become horizontal bottom borders.\n- Global grid collapses from 2 → 1.\n- Stat row stacks vertically.\n- Hero tagline shifts from absolute-positioned bottom-right to relative-positioned below the hero title stack.\n\nThe system is functional but not optimized for sub-768px portrait usage — it's designed for landscape presentation contexts.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, `Space`, `Enter`, or `PageDown`.\n- Slides reverse via `ArrowLeft`, `ArrowUp`, or `PageUp`.\n- Click on the right half of the viewport advances; click on the left half reverses.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are 550ms cubic-bezier `(0.22, 1, 0.36, 1)` with combined opacity, translateY (30px), and scale (0.98 → 1).\n- Progress bar at bottom edge animates to current slide percentage with a 500ms cubic-bezier ease.\n\n### Print Behavior\nThe system has no `@media print` rule. The transition is screen-only. For static export, screenshots of each slide preserve all rotation transforms and the stacked text-shadow (both are pure CSS).\n\n### Interactive States\n- Footer links swap text color from `{colors.dark}` to `{colors.red}` on hover.\n- The hint-pill fades from opacity 0 to 0.5 on `body:hover` via a 400ms ease.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / stat / section header / numerical figures / card titles | Shrikhand 400 (heavy slab-script, rotated) | 思源宋体 Noto Serif SC 900 |\n| Body / body-card / body-cell / hero-meta / cite / close-sub | Libre Baskerville 400 (literary serif) | 思源宋体 Noto Serif SC 400 |\n| Label / bullet body / counter / link / micro chrome | Space Grotesk 400–600 (uppercase, 2–3px tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use **思源宋体 Noto Serif SC** for both display and body (weight 900 for display, weight 400 for body — visual hierarchy comes from weight, size, color, and rotation, not face contrast). Use **思源黑体 Noto Sans SC** weight 500 for the small uppercase chrome (labels, bullet bodies, counter, links). 思源宋体 ships Latin glyphs that pair cleanly with Chinese characters; for mixed display moments, 思源宋体 weight 900 will render both 中文 and Latin in the same heavy serif voice.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (already close to Libre Baskerville 1.75; keep at 1.8 for CJK), display 1.1–1.25 (up from the very tight 0.82–0.9 used on Shrikhand). Display at 0.82 collides vertically in CJK; open to 1.0 minimum.\n- **Letter-spacing**: set to 0 on every CJK run. The template's 1px positive tracking on hero-title and the 2–3px tracking on Space Grotesk labels both read as gappy on square CJK glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Space Grotesk label, tag-label, rm-label, counter, and link uses `text-transform: uppercase` in the Latin original; remove for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `1970 米兰式海报` not `1970米兰式海报`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style — let it handle mixed sentences in display and body. Don't let the browser fall back to Shrikhand or Libre Baskerville mid-word for ASCII characters.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on **Shrikhand's chunky slab-script personality + rotation + saturated red**. Shrikhand is the most distinctive single decision in this template — and it has no Chinese equivalent. 思源宋体 weight 900 carries weight and editorial register but loses the playful italic-leaning slab character entirely. Compensate by **leaning harder on the non-typographic signatures**: keep all rotations intact (-6° on stat-big, -5° on close-big, -4° on hero-title-red, +2° on hero-title-bottom), keep the stacked text-shadow on red-panel display, keep the saturated tomato red as the only accent, keep the 3px + 1.5px double-border tabular grids, keep the red leftbar cards, keep the red em-dash bullet markers. The rotation, red, and printed-newsprint structural language survive the face swap.\n\nThe system's three-face role discipline (Shrikhand display / Libre Baskerville body / Space Grotesk chrome) collapses to a two-face system in CJK: 思源宋体 for everything Latin-serif, 思源黑体 for everything Latin-mono. The body-vs-display contrast becomes pure weight (400 vs 900) plus color (dark vs red). For inline `<strong>` emphasis inside body, switch from 思源宋体 400 to 思源黑体 600 — the change-of-face is what signals emphasis in the Latin original, and the serif-to-sans swap preserves the same logic in CJK.\n\n### Known CJK Gap\n\n- **No exact online CJK match for Shrikhand's slab-script personality.** The face is Italian-sports-magazine display script with chunky terminals and playful italic forms — there is no Chinese equivalent on Google Fonts, Adobe Fonts, or cn-fontsource. 思源宋体 weight 900 gives heft and editorial register but reads as serious rather than playful. The rotation transforms and saturated red carry the playful-sports-magazine voice on their own; don't drop the tilts when translating to CJK.\n- **No CDN Chinese monospace face for the chrome voice.** Space Grotesk's role (uppercase tracked labels, slide counter, footer links with red underline) depends on the uppercase + 2–3px tracking treatment. 思源黑体 weight 500–600 at 0 tracking is the closest match but loses the \"stamped metadata\" signal. The red color and 1–2px border treatments on tags/links do most of the chrome-recognition work in a CJK build.\n- **Libre Baskerville's classical literary register has no exact Chinese counterpart.** 思源宋体 reads as institutional-modern rather than 19th-century-literary. For projects that need the literary-quarterly voice specifically (long body paragraphs in essays or manifestos), consider 霞鹜文楷 LXGW WenKai instead of 思源宋体 — it carries a hand-written/calligraphic warmth closer to Baskerville's editorial personality.\n\n## Iteration Guide\n\n1. Any new content slide starts with a Shrikhand section header at `{typography.section-header}` (32–64px) in `{colors.dark}`, optionally preceded by a Space Grotesk red eyebrow label.\n2. Any new nume\n\n<!-- [TRUNCATED AT 50KB] -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/preview.md":"# Bold Poster Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/bold-poster/design.md`\n- Preview card: `bold-template-pack/templates/bold-poster/preview.md`\n\n## Selection Metadata\n\n- Slug: `bold-poster`\n- Tagline: Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent.\n- Mood: bold, editorial, loud, confident\n- Tone: dramatic, graphic, sharp, intentional\n- Formality: medium\n- Density: low\n- Scheme: light\n- Best for: Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews. Excellent any time you want a few words to feel like a poster — including unexpected fits like a tech keynote or a finance manifesto that wants to be quotable.\n- Avoid for: Decks that need to communicate dense information per slide — the layout is built around a few large statements, not paragraphs of detail.\n\n## Visual Snapshot\n\nA populist editorial poster system that mashes vintage Italian sports-magazine display lettering with classical serif body and tight monospace metadata. The display face is Shrikhand — a heavy slab/script hybrid with playful italic personality — rendered at poster scale (often 200-320px) and routinely tilted off-axis. Body runs Libre Baskerville for a literary editorial register; Space Grotesk handles tiny uppercase labels and chrome. The palette is uncompromising: white canvas, deep brown-black ink (#1C1410), single saturated tomato red (#D8000F), and a warm off-white (#F5F2EF) for alternating panels. Borders are bold 1.5-3px ink rules; the only shadow is a single stacked offset behind red display text. The aesthetic is loud, confident, and unmistakably print-poster — closer to a 1970s European brand annual report or a wine merchant's catalogue than a contemporary slide deck.\n\nBold Poster is a populist editorial poster system that lifts its visual vocabulary from vintage Italian sports magazines, mid-century European brand annual reports, and wine-merchant catalogues. The premise is that every slide should feel printed — set in heavy display type, locked to one strong red accent, on a white or off-white sheet, with grids ruled in ink and decoration kept to a strict minimum.\n\n## Preview Ingredients\n\n- Palette: bg #FFFFFF; dark #1C1410; red #D8000F; light #F5F2EF\n- Typography: See full design doc after selection.\n- Signature move: White ({colors.bg}) canvas alternating with off-white ({colors.light}) panels for striping, plus dark ({colors.dark}) and red ({colors.red}) full-bleed panel surfaces for statement moments.\n- Signature move: Single tomato red ({colors.red}) as the only accent — used for every numerical figure, every section rule, every label, every left-bar marker.\n- Signature move: Three-face stack: Shrikhand (display + numerical), Libre Baskerville (body), Space Grotesk (mono labels + bullets + chrome).\n- Signature move: Display Shrikhand is routinely tilted (-6° to +2°) — the rotation is the system's signature movement.\n- Signature move: Heavy ink borders: 3px on tabular grid containers, 1.5-2px on cells, 4px red on editorial leftbar cards, 1px hairlines between bullet rows.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/design.md":"---\nversion: alpha\nname: Broadside\ndescription: A protest-poster editorial system built on massive Barlow type and a single fire-orange environment color. The aesthetic is \"ink on fire\" — dark slides for documentation, orange slides for declaration. Display type is enormous (13vw, roughly 187px at 1440 width) in weight 900 lowercase, treating words as graphic elements rather than reading copy. The cultural reference is broadside printing, SPACE10 reports, and Wim Crouwel grids reinterpreted with one loud color and zero decoration.\n\ncolors:\n  ink-black: \"#111111\"\n  ink-black-alt: \"#1A1A18\"\n  fire-orange: \"#E85D26\"\n  cream: \"#F0ECE5\"\n  cream-muted: \"#888880\"\n  cream-hint: \"#505048\"\n  border-dark: \"#282826\"\n  ink-on-orange-muted: \"rgba(17, 17, 17, 0.75)\"\n  ink-on-orange-hint: \"rgba(17, 17, 17, 0.55)\"\n  ink-on-orange-faint: \"rgba(17, 17, 17, 0.40)\"\n  ink-on-orange-border: \"rgba(17, 17, 17, 0.20)\"\n\ncolor-aliases:\n  c-bg: ink-black\n  c-bg-alt: ink-black-alt\n  c-bg-light: ink-black            # Broadside collapses \"light\" → dark; there are no cream slides\n  c-bg-orange: fire-orange\n  c-fg: cream\n  c-fg-2: cream-muted\n  c-fg-3: cream-hint\n  c-accent: fire-orange\n  c-border: border-dark\n\ntypography:\n  display:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"13vw\"\n    fontWeight: 900\n    lineHeight: 0.88\n    letterSpacing: -0.04em\n  h1:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"7.5vw\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  h2:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"4.5vw\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h3:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"2.8vw\"\n    fontWeight: 600\n    lineHeight: 1.2\n  lead:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"1.6vw\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"1.2vw\"\n    fontWeight: 400\n    lineHeight: 1.6\n  caption:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"0.9vw\"\n    fontWeight: 400\n    lineHeight: 1.5\n  label:\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontSize: \"0.72vw\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  stat-value:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"5.5vw\"\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.04em\n  quote-mark:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"10vw\"\n    fontWeight: 900\n    lineHeight: 0.6\n  quote-text:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"3.8vw\"\n    fontWeight: 700\n    lineHeight: 1.15\n    letterSpacing: -0.02em\n  fadelist-item:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"7.5vw\"\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.03em\n  fadelist-title:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"10.5vw\"\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.04em\n\nspacing:\n  pad-x: \"5.5vw\"\n  pad-y: \"5.5vh\"\n  gap-lg: \"3.5vh\"\n  gap-md: \"2vh\"\n  gap-sm: \"1vh\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\nmotion:\n  ease-slide: \"cubic-bezier(0.77, 0, 0.175, 1)\"\n  dur-slide: \"0.8s\"\n  ease-enter: \"cubic-bezier(0.16, 1, 0.3, 1)\"\n  dur-enter: \"0.5s\"\n\ncomponents:\n  slide-chrome:\n    layout: \"flex row, justify space-between\"\n    paddingBottom: \"{spacing.gap-sm}\"\n    borderBottom: \"1px solid {colors.border-dark}\"\n    marginBottom: \"{spacing.gap-md}\"\n    description: \"Top chrome bar carrying section label on left, slide number/meta on right. Suppressed on cover, chapter, quote, and end slides.\"\n  slide-foot:\n    layout: \"flex row, justify space-between\"\n    paddingTop: \"{spacing.gap-sm}\"\n    borderTop: \"1px solid {colors.border-dark}\"\n    marginTop: \"{spacing.gap-md}\"\n    description: \"Bottom chrome bar, mirrors top chrome. Same suppression rules.\"\n  rule:\n    width: 36px\n    height: 2px\n    background: \"{colors.fire-orange}\"\n    description: \"Stub accent rule. On orange slides this flips to {colors.ink-black}.\"\n  rule-full:\n    width: \"100%\"\n    height: 2px\n    background: \"{colors.border-dark}\"\n  kicker:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.fire-orange}\"\n    description: \"Eyebrow above headlines. Orange on dark; dark-ink-at-55%-opacity on orange.\"\n  tag:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.fire-orange}\"\n    border: \"1px solid {colors.fire-orange}\"\n    padding: \"0.3em 0.8em\"\n    description: \"Bordered mono tag. On orange slides flips to dark ink with 40%-opacity dark border.\"\n  broadside-num:\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontSize: \"1.1vw\"\n    fontWeight: 500\n    letterSpacing: 0.1em\n    color: \"rgba(17, 17, 17, 0.45)\"\n    description: \"Catalogue-style slide number, typically anchored top-left on orange slides. On dark slides, color shifts to {colors.cream-hint}.\"\n  stat-card:\n    borderTop: \"1px solid {colors.border-dark}\"\n    padding: \"{spacing.gap-md} {spacing.gap-md} {spacing.gap-md} 0\"\n    description: \"Top-border-only data card. Big orange numeral above body label above mono note.\"\n  bullet-marker:\n    content: \"/\"\n    color: \"{colors.fire-orange}\"\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontWeight: 700\n    description: \"Slash glyph rendered via ::before on every bullet item. Orange on dark, dark-at-45%-opacity on orange.\"\n  compare-panel-left:\n    paddingRight: \"calc({spacing.pad-x} * 0.55)\"\n    borderRight: \"1px solid {colors.border-dark}\"\n  compare-panel-right:\n    paddingLeft: \"calc({spacing.pad-x} * 0.55)\"\n  compare-panel-orange:\n    background: \"{colors.fire-orange}\"\n    description: \"Right-half panel filled with fire orange — the 'after' or payoff side in compare layouts.\"\n  bar-track:\n    height: \"30vh\"\n    borderLeft: \"1px solid {colors.border-dark}\"\n    description: \"Vertical bar chart container. Bars are cream-hint by default; one bar per chart gets the .accent class for fire orange.\"\n  bar-fill:\n    background: \"{colors.cream-hint}\"\n  bar-fill-accent:\n    background: \"{colors.fire-orange}\"\n  img-placeholder:\n    height: \"55vh\"\n    background: \"rgba(255, 255, 255, 0.04)\"\n    border: \"1px dashed {colors.border-dark}\"\n    textTransform: uppercase\n    letterSpacing: 0.12em\n    description: \"Dashed-border placeholder shown when no image is wired. Same 55vh footprint as a real img.\"\n  fadelist-stack:\n    description: \"Vertical stack of three display-weight words, opacities 1.0 / 0.5 / 0.22 top-to-bottom. The SPACE10 'before/during/after' treatment.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBroadside is a **protest-poster editorial system**. The defining premise: type is so large it stops behaving as text and starts behaving as graphic primitive. Display sizes at `13vw` (`{typography.display}`) put a single word at roughly 187px on a 1440-wide screen — wide enough that the eye scans letterforms before reading. This is the system's primary expressive instrument.\n\nThe typeface stack is monolithic. **Barlow** carries every text role from `{typography.display}` down to `{typography.body}` — there is no serif companion, no script accent, no secondary display face. The expressive range is achieved entirely through weight (400 to 900) and size, not face contrast. **IBM Plex Mono** is the only secondary face and it appears only in chrome: slide numbers, kickers, labels, tags, captions, and the bullet-list slash markers. **Noto Sans SC** sits in every font-family stack as the CJK fallback at matching weights. The voice is uniform, heavy, and lowercase — *Broadside does not use uppercase headlines.* That is a meaningful inversion of the brutalist norm.\n\nThe palette functions in two distinct registers. The **dark register** uses near-black canvas `{colors.ink-black}` with cream text `{colors.cream}` and `{colors.fire-orange}` as the singular accent — the orange is used only for emphasis (kickers, accent stats, bullet markers, the leading bar). The **orange register** flips the relationship entirely: `{colors.fire-orange}` becomes the full slide background, and the same dark `#111111` ink is used for headlines and body. There is no light/cream slide variant — the `.light` class is intentionally aliased to dark in the source. Cover and chapter slides default to the orange register; content slides default to dark.\n\nDepth is **flat**. There are no drop shadows, no elevation tokens, no soft surfaces. Hierarchy is constructed entirely from type weight, type size, and 1px hairline dividers. The `slide-chrome` and `slide-foot` borders, the `stat-card` top borders, and the `compare-panel` divider are the system's only depth signals. Everything sits on a single plane.\n\n**Density philosophy: low to medium.** Broadside is built for negative space. A correctly composed slide pairs one massive display moment with a 1–2 line caption and nothing else. Bullet lists are explicitly capped at three items — the system prizes density of impact over density of information. A slide that feels broken in this system is one where four columns of body copy compete for attention; the correct density is one statement, one rule, breathing room. Cover, chapter, and quote slides take this furthest, suppressing chrome entirely and leaving the type alone in the field.\n\n**Key Characteristics:**\n- Massive Barlow display type at weight 900 in **lowercase** — never uppercase on display elements.\n- Two-register color system: dark slides with cream text, or orange slides with dark ink. No cream/white slides exist.\n- `{colors.fire-orange}` is both accent (on dark) and environment (on orange) — never a secondary color, always *the* color.\n- Single-typeface system on Barlow + IBM Plex Mono for chrome only. No serif, no script, no third face.\n- 1px hairline dividers (`{colors.border-dark}` on dark; `rgba(17,17,17,0.2)` on orange) provide all hierarchy structure.\n- Mono kickers, mono tags, mono catalogue numbers — the chrome voice is always IBM Plex Mono uppercase.\n- Bullet lists use `/` glyph in mono as the marker, capped at three items per list.\n- Flat plane — no shadows, no rounded surfaces, no gradient backgrounds.\n- `{spacing.pad-x}` of 5.5vw + `{spacing.pad-y}` of 5.5vh creates a generous frame; type fills the remaining space.\n\n## Colors\n\n### The Two Registers\nBroadside operates on a binary surface system. Every slide is either **dark** (near-black background, cream text, orange as singular accent) or **orange** (fire-orange background, dark-ink text, dark-ink as the muted-emphasis tone). There is no cream/paper register — the `.light` class is aliased to dark in the source. Choose one register per slide and commit to it.\n\n### Palette\n- **Ink Black** (`{colors.ink-black}` — #111111): The dark register's primary canvas, and the primary text color on orange slides. Slightly softer than pure black but reads as black. This is the universal \"ink\" of the system.\n- **Ink Black Alt** (`{colors.ink-black-alt}` — #1A1A18): A secondary surface for the dark register, used when a region needs to feel slightly raised from the base canvas without breaking the flat plane.\n- **Fire Orange** (`{colors.fire-orange}` — #E85D26): The signature. On dark slides it is the accent — kickers, accent stat values, bullet markers, the leading bar in a chart, the orange opening quote mark. On orange slides it is the entire environment. Saturation is high but the hue is warm rather than electric; it reads as protest poster, not safety vest.\n- **Cream** (`{colors.cream}` — #F0ECE5): Primary text color on dark slides. Warm off-white, never pure white — the warmth softens the dark canvas and signals an editorial register.\n- **Cream Muted** (`{colors.cream-muted}` — #888880): Secondary text on dark slides — supporting body, sub-headings, the muted half of a comparison.\n- **Cream Hint** (`{colors.cream-hint}` — #505048): Tertiary text on dark — chart axis labels, source notes, slide numbers when not in mono context.\n- **Border Dark** (`{colors.border-dark}` — #282826): The 1px divider color on dark slides. Barely visible against the canvas; provides structure without drawing attention.\n- **Ink-on-orange overlays**: Dark ink at four opacities (75% / 55% / 40% / 20%) for body, hint, label, and border treatments on orange slides. These are the orange register's \"muted\" equivalents.\n\n### Defaults\n- **Default surface for content slides**: `{colors.ink-black}` (dark register).\n- **Default surface for cover, chapter, statement-payoff, and section-divider slides**: `{colors.fire-orange}` (orange register).\n- **Default headline color on dark surfaces**: `{colors.cream}`.\n- **Default headline color on orange surfaces**: `{colors.ink-black}`.\n- **Default body text color on dark surfaces**: `{colors.cream}`.\n- **Default body text color on orange surfaces**: `rgba(17, 17, 17, 0.75)`.\n- **Default accent color on dark surfaces**: `{colors.fire-orange}` — used for kickers, accent stat values, bullet markers, the lead bar in a chart, and the opening quote mark.\n- **Default accent color on orange surfaces**: `{colors.ink-black}` — the dark ink itself becomes the contrast pop.\n- **Default chrome border color**: `{colors.border-dark}` on dark; `rgba(17, 17, 17, 0.2)` on orange.\n\nThe orange register has no third color. When emphasis is needed on an orange slide, use weight or opacity contrast on the existing ink, not a new hue. Introducing a second accent color breaks the system.\n\n## Typography\n\n### Font Family\nThe system is monolingual on **Barlow** (with Noto Sans SC as the CJK fallback for identical role coverage). Every display, heading, lead, body, and caption token uses Barlow. The only secondary face is **IBM Plex Mono**, which is reserved entirely for chrome: slide numbers, kickers, tags, labels, captions in chart axes, bullet-list markers, image captions, and source notes. The contrast between Barlow's tight grotesque density and IBM Plex Mono's even monospace is the system's secondary typographic rhythm; the primary rhythm is Barlow's own weight and size axis.\n\nItalic is not used. Underline is not used. The only emphasis mechanisms are weight, size, and color (orange accent on dark, or weight-only on orange).\n\n### Display, Heading, and Body Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 13vw | Barlow | 900 | Cover-scale display — the single dominant element on a slide where type *is* the composition |\n| `{typography.fadelist-title}` | 10.5vw | Barlow | 900 | Oversized side-of-stage display in a fadelist composition |\n| `{typography.quote-mark}` | 10vw | Barlow | 900 | The opening quotation glyph on a pull-quote slide |\n| `{typography.h1}` | 7.5vw | Barlow | 800 | Chapter or section-opener title |\n| `{typography.fadelist-item}` | 7.5vw | Barlow | 900 | Each stacked word in a three-stage fadelist treatment |\n| `{typography.stat-value}` | 5.5vw | Barlow | 900 | Large data figure inside a stat card |\n| `{typography.h2}` | 4.5vw | Barlow | 700 | Primary slide headline |\n| `{typography.quote-text}` | 3.8vw | Barlow | 700 | Pull-quote body |\n| `{typography.h3}` | 2.8vw | Barlow | 600 | Sub-headline or panel title inside a comparison |\n| `{typography.lead}` | 1.6vw | Barlow | 400 | Lead paragraph, list items, prominent supporting copy |\n| `{typography.body}` | 1.2vw | Barlow | 400 | Standard body paragraph |\n| `{typography.caption}` | 0.9vw | Barlow | 400 | Image caption, footnote, source line |\n| `{typography.label}` | 0.72vw | IBM Plex Mono | 500 | Chrome labels, kickers, tags, mono notes |\n\n### Defaults\n- **Default size for a primary content slide headline**: `{typography.h2}` (4.5vw).\n- **Default size for a cover or chapter title**: `{typography.h1}` (7.5vw).\n- **Default size for the single declarative display moment on a statement slide**: `{typography.display}` (13vw).\n- **Default size for paragraph body**: `{typography.body}` (1.2vw); for the lead paragraph immediately following a headline, `{typography.lead}` (1.6vw).\n- **Default size for any inline chrome element (label, kicker, tag, slide number, axis label)**: `{typography.label}` (0.72vw).\n- **Default size for a hero numerical figure inside a stat card**: `{typography.stat-value}` (5.5vw).\n- **Default weight for any Barlow display moment (h2 and above)**: 700+; for the largest display, 900.\n- **Default weight for body**: 400.\n\nWhen unsure, reach for `{typography.h2}` for the slide's primary text moment. `{typography.h1}` is reserved for chapter/section openers; `{typography.display}` for the rare moment where type is the entire composition.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **All Barlow display, heading, lead, and body text is set in sentence case (or true title case for proper nouns).** Uppercase Barlow at display weights does not exist in this system — it reads as a different design language entirely. The lowercase-display choice is the most distinctive single decision in Broadside.\n- **All IBM Plex Mono chrome text is uppercase with at least 0.1em letter-spacing.** Mono labels, kickers, tags, slide numbers, axis labels, source notes, and bullet markers are always uppercase. The uppercase/lowercase split between Barlow body and mono chrome is the system's primary case rhythm.\n- **All display tokens carry negative letter-spacing.** `{typography.display}` and `{typography.stat-value}` at -0.04em; `{typography.h1}` and `{typography.fadelist-title}` at -0.03em or -0.04em; `{typography.h2}` and `{typography.quote-text}` at -0.02em. Barlow at display weight without negative tracking reads as untreated.\n- **All Barlow display elements run at weight 700, 800, or 900 — never lighter.** Lighter Barlow at display sizes loses the broadside density.\n- **On orange slides, every Barlow display/h1/h2/h3 element is forced to `{colors.ink-black}`.** This is the \"ink on fire\" rule — cream-colored headlines on orange do not exist.\n- **Every bulleted list item carries the orange `/` mono marker via `::before`.** Bullet discs, dashes, or numerals do not exist in this system.\n- **Every kicker is uppercase IBM Plex Mono at `{typography.label}` size in `{colors.fire-orange}`** (or dark-ink-at-55%-opacity on orange).\n\n### Typography Principles\nThe weight-900 + lowercase + negative-tracking + Barlow combination is the system's voice. Substituting uppercase, switching to weight 600, or removing the negative tracking each reads as a different system. The chrome's IBM Plex Mono uppercase + 0.14em-tracking is similarly inseparable.\n\nLine-height collapses at scale: `{typography.display}` runs at 0.88, `{typography.h1}` at 0.9, `{typography.h2}` at 1.1, and only by `{typography.lead}` does it open to 1.5+. The compression at the top of the scale is what makes the display feel monolithic.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Slides sit side-by-side in a horizontal `#deck` flexbox; navigation translates the deck container horizontally rather than swapping `display`. All sizes are viewport-relative (`vw` / `vh`) — there is no fixed 1920×1080 grid.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 5.5vw | Outer horizontal padding on every slide |\n| `{spacing.pad-y}` | 5.5vh | Outer vertical padding on every slide |\n| `{spacing.gap-lg}` | 3.5vh | Large vertical spacing between major blocks |\n| `{spacing.gap-md}` | 2vh | Standard spacing between sibling elements |\n| `{spacing.gap-sm}` | 1vh | Tight spacing — kicker to headline, chrome bar inner gap |\n\nThe padding is deliberately tighter than a generic editorial system. Broadside's massive type needs the slide's edge to feel close, not distant — the type is supposed to crowd the frame.\n\n### Chrome Frame\nThe system has an optional chrome frame consisting of two horizontal hairline bars: a top `slide-chrome` bar (label left, slide number right) and a bottom `slide-foot` bar (mirror). Both are 1px solid borders in `{colors.border-dark}` on dark slides, or `rgba(17, 17, 17, 0.2)` on orange. Internal padding/margin uses `{spacing.gap-sm}` and `{spacing.gap-md}`.\n\nThe chrome is **suppressed entirely** on the system's \"declarative\" slide types — cover, chapter, statement, quote, and end. Those slides remove all chrome and let the type occupy the whole field. Content slides (split, stats, list, compare, chart, diagram) keep the chrome.\n\nA separate `broadside-num` element (mono, ~1.1vw, low-opacity) may also be placed independently of the chrome bar as a catalogue-style slide number anchored at the top-left of orange cover/chapter slides.\n\n## Depth and Elevation\n\n### Flat Plane (Only Technique)\nBroadside is entirely flat. There are no drop shadows, no inner shadows, no blurred elevations, no rounded surface gradients. Every element sits on a single plane.\n\nHierarchy is constructed from:\n- **Type weight + size contrast** — the dominant signal.\n- **1px hairline dividers** — `slide-chrome`/`slide-foot` borders, `stat-card` top borders, `compare-panel` dividers, `bar-track` left border, `chart-baseline` baseline.\n- **Color shift** — orange against ink, ink against cream, cream-muted against cream.\n- **Negative space** — generous padding and intentional empty regions.\n\nIntroducing a `box-shadow`, a card with elevation, or a soft gradient breaks the system. The flatness is the editorial signal.\n\n## Shapes and Treatment\n\n### Border Radius\nBorder radius is **0px everywhere** except `nav-dot` (50% — the tiny navigation circles at the bottom). Cards, panels, tags, image placeholders, stat cards, chart bars — all rectangles with sharp corners.\n\n### Border Weights\n- **1px solid** — the only structural weight. Used on `slide-chrome`, `slide-foot`, `stat-card` top, `compare-panel` divider, `bar-track` left edge, `chart-baseline`, image captions, the `rule.full` divider.\n- **1px dashed** — used only on `img-placeholder` to signal \"no image wired\".\n- **2px solid** — used only on the small `rule` accent stub (36px wide) and the `chapter-rule` mark.\n\nAll borders are either `{colors.border-dark}` (dark slides), `rgba(17, 17, 17, 0.2)` (orange slides), or `{colors.fire-orange}` (the tag border on dark slides).\n\n### Decorative Element Types\n\n**Stub accent rule** — A 36×2px solid bar in `{colors.fire-orange}` (on dark) or `{colors.ink-black}` (on orange). Used as a visual \"section break\" mark above a chapter title, above a stat, or beside a kicker. Functions as Broadside's only ornament.\n\n**Mono catalogue number** — A small IBM Plex Mono numeral anchored top-left on cover/chapter slides at low opacity (`rgba(17, 17, 17, 0.45)` on orange, `{colors.cream-hint}` on dark). Reads as a publication catalogue mark.\n\n**Stat card** — A top-border-only data block: 1px solid border on top, no other borders, padded body containing `{typography.stat-value}` (large orange numeral on dark; dark ink on orange) above `{typography.body}` (label) above `{typography.caption}` (mono note in `{colors.cream-hint}` or dark-faint).\n\n**Compare panel pair** — Two equal-width panels divided by a 1px vertical border. The right panel may optionally be filled with `{colors.fire-orange}` (`compare-panel-orange`) as the \"after\" / payoff side; the left panel remains transparent over the dark canvas.\n\n**Vertical bar chart** — A `bar-track` container with `border-left` only (no other axes), bars dropping from the top with `cream-hint` fill, one bar per chart carrying the `.accent` class for fire orange. Axis labels in mono uppercase below the baseline.\n\n**Fadelist** — A SPACE10-style composition: three stacked Barlow-900 words at descending opacity (1.0 / 0.5 / 0.22) paired with one oversized display title on the opposite side of the slide. Used for \"before / during / after\" or \"past / present / future\" narratives.\n\n**Pull quote** — An oversized fire-orange `{typography.quote-mark}` glyph (with line-height 0.6 so it sits on the baseline rather than below), followed by `{typography.quote-text}` capped at ~78% of the column width, followed by a two-line `quote-attr` with name above mono role/affiliation.\n\n**Bordered mono tag** — A small inline pill in IBM Plex Mono uppercase with a 1px solid border, padded 0.3em vertical × 0.8em horizontal. The border and text are both `{colors.fire-orange}` on dark; dark ink at 40% opacity on orange.\n\n## Do's and Don'ts\n\n### Do\n- Set every Barlow display, heading, lead, and body element in sentence case. Lowercase display is Broadside's most distinctive single choice.\n- Use IBM Plex Mono uppercase at 0.1em+ tracking for every chrome element: slide numbers, kickers, labels, tags, axis labels, source notes, bullet markers.\n- Make `{colors.fire-orange}` the singular accent on dark slides — kickers, accent stat values, bullet `/` markers, the leading chart bar, the opening quote mark, the `rule` stub.\n- Make orange the *full background* on cover, chapter, and declarative-payoff slides. Use it as environment, not just accent, on those slide types.\n- Cap bullet lists at three items. Broadside prizes density of impact over density of information.\n- Apply negative letter-spacing on every Barlow display moment — -0.04em on the largest, -0.02em on h2.\n- Use 1px hairline borders (`{colors.border-dark}` on dark, `rgba(17,17,17,0.2)` on orange) for all structural division. They are the system's only hierarchy chrome.\n- Suppress slide-chrome and slide-foot on cover, chapter, statement, quote, and end slides — let the type breathe edge-to-edge.\n- Place the `broadside-num` catalogue number top-left on orange cover/chapter slides as a publication-style mark.\n- Use the `/` mono glyph in fire orange as the bullet marker on every list item.\n\n### Don't\n- Don't uppercase Barlow at display or heading weights. Uppercase Barlow at 13vw reads as a different design system entirely.\n- Don't introduce a second accent color. Orange is *the* color — adding a blue, yellow, or green accent breaks the protest-poster identity.\n- Don't add drop shadows, blurred elevations, or rounded surfaces. Broadside is strictly flat — depth comes from type and 1px lines.\n- Don't use cream-colored text on orange slides. The \"ink on fire\" rule is absolute: orange slides use `{colors.ink-black}` for headlines and body.\n- Don't pair Barlow with a serif companion. The single-typeface monolith is part of the identity.\n- Don't use border-radius on cards, tags, panels, or stat blocks. The only round shapes in the system are the small nav dots.\n- Don't pack more than one display moment into a slide. Broadside is for one statement, one rule, breathing room — not magazine-style layered composition.\n- Don't render chrome elements in Barlow. Chrome is exclusively IBM Plex Mono uppercase.\n- Don't introduce a third surface register. There are two: dark and orange. A cream/paper slide does not exist.\n- Don't use italic or underline. Emphasis is achieved through weight, size, or orange color only.\n\n## Responsive Behavior\n\nThis is a viewport-fluid 1920×1080 presentation system that uses `vw`/`vh` units throughout. There are no fixed pixel breakpoints. Every typography token, padding value, and component dimension scales linearly with the viewport.\n\n### Scaling Behavior\n- Display headline (`{typography.display}`) scales from ~138px at 1066-wide viewports to ~250px at 1920-wide.\n- Body text (`{typography.body}`) scales from ~13px to ~23px across the same range.\n- Outer padding (`{spacing.pad-x}` 5.5vw) scales from ~59px to ~106px.\n- All borders are fixed at 1px or 2px and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, `Space`, or `PageDown`.\n- Slides reverse via `ArrowLeft`, `ArrowUp`, or `PageUp`.\n- Navigation translates the deck container horizontally with a `cubic-bezier(0.77, 0, 0.175, 1)` ease at 0.8s.\n- Per-element entry animations (`data-anim=\"fade-up\"`, `fade-in`, `reveal-right`, `reveal-left`, `scale-in`) replay every time a slide becomes `.is-active`, staggered by `data-delay` (0 through 6).\n- Nav dots at bottom-center, mono slide counter at bottom-right.\n\n### Print / Export\nNot explicitly handled by the source. Each slide is a `100vw × 100vh` block; export workflows should target 1920×1080 PNG/PDF per slide.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / h1 / h2 / h3 / stat-value / quote / fadelist | Barlow 700–900 (lowercase, negative tracking) | 思源宋体 Noto Serif SC 900 |\n| Lead / body / caption | Barlow 400 | 霞鹜文楷 LXGW WenKai 400 |\n| Label / kicker / tag / slide number / bullet marker | IBM Plex Mono 500 (uppercase, 0.14em tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use **思源宋体 Noto Serif SC** weight 900 for every display and heading role; use **霞鹜文楷 LXGW WenKai** weight 400 for body and lead text; use **思源黑体 Noto Sans SC** weight 500 for chrome (kickers, labels, slide numbers, bullet markers). All three faces ship Latin glyphs that pair cleanly with Chinese characters. The serif/handwritten/sans contrast loosely echoes Broadside's display/body/mono distinction even though the source uses Barlow throughout.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500&family=LXGW+WenKai+TC&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.15–1.25 (up from the very tight 0.88–0.9 used on Barlow display). The Latin template compresses display to 0.6 on the quote-mark token; at that compression CJK characters overlap entirely. Open display to 1.0 minimum.\n- **Letter-spacing**: set to 0 on every CJK run. The template's −0.02 to −0.04em negative tracking on Barlow display overlaps CJK strokes; the +0.14em positive tracking on IBM Plex Mono chrome reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every IBM Plex Mono label, kicker, tag, slide number, and bullet marker uses `text-transform: uppercase` in the Latin original; remove for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines. Especially important for Broadside's massive display moments — a trailing 。 at 13vw is visually disruptive.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 大字海报` not `2024大字海报`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style for display; 霞鹜文楷 covers both for body. Don't let the browser fall back to Barlow mid-word for ASCII characters in a Chinese sentence.\n\n### Aesthetic Notes for This System\n\nBroadside's most distinctive single decision is **lowercase Barlow at weight 900 at 13vw display sizes**. The lowercase-display choice is what separates this system from generic brutalist decks. In CJK that signal disappears entirely — Chinese has no case. The system compensates because its identity is **80% structural + color**: the two-register surface system (dark / orange), the singular fire-orange accent, the flat plane, the 1px hairline dividers, the `/` mono bullet markers, the suppressed chrome on declarative slides, and the negative-space-as-composition philosophy all transfer cleanly.\n\nThe closest Chinese face to Barlow's \"monolithic heavy grotesque\" register is **思源宋体 weight 900** — but a serif heavy display rather than a sans heavy display. This is a deliberate register shift: heavy Chinese serif at protest-poster scale reads as \"broadside printed-poster\" (the system's actual cultural reference) more credibly than heavy Chinese sans, which reads more \"corporate signage.\" For the body face, **霞鹜文楷 LXGW WenKai** brings a handwritten/calligraphic warmth that pairs with the editorial-protest register; if a more institutional body is needed, swap to 思源宋体 400.\n\nKeep the chrome's \"stamped metadata\" voice by maintaining the small font size (0.72vw equivalent) and the orange color on kickers/labels. The IBM Plex Mono uppercase + tracked treatment loses both signals in CJK, but the orange color carries enough chrome-recognition on its own. The `/` bullet marker can stay as a Latin slash character even in Chinese contexts — it's a graphic mark, not a language element.\n\n### Known CJK Gap\n\n- **No CDN Chinese face matches Barlow's monolithic grotesque + lowercase identity.** Barlow's distinctive choice in this system is lowercase-display at heavy weights — and CJK has no equivalent expressive lever. The system's \"protest-poster lowercase-shouting\" character softens to \"heavy-serif declarative.\" The two-register color system (dark / orange) and the singular fire-orange accent carry the protest-poster identity on their own.\n- **No CDN Chinese monospace face for the chrome voice.** IBM Plex Mono's role (kickers, labels, slide numbers, `/` bullet markers) depends on monospaced rhythm + uppercase + 0.14em tracking. 思源黑体 weight 500 at 0 tracking is the closest match but loses the \"catalogue mark\" signal. Keep the orange color and the small font size; the color and scale do the chrome-recognition work.\n- **霞鹜文楷 may not load on restricted networks.** The Google Fonts CDN serves the Traditional Chinese variant (LXGW WenKai TC) reliably; the Simplified variant is also available via cn-fontsource. Always include `'Noto Serif SC', serif` in the body stack as fallback.\n- **The quote-mark glyph at 10vw with line-height 0.6 is a Latin-quote convention.** Chinese typography uses 「」 or 『』 framing rather than oversized opening-quote glyphs. For Chinese pull-quotes, consider replacing the oversized fire-orange quote-mark with a full-width 「 character at 8vw, or dropping the decorative quote glyph entirely and relying on the orange color + larger size to signal \"this is a quoted passage.\"\n\n## Iteration Guide\n\n1. Every new content slide opens with a `kicker` in mono uppercase fire orange, followed by `{typography.h2}` headline in Barlow lowercase. Don't skip the kicker — it is the system's content-slide chrome signal.\n2. Every cover, chapter, statement-payoff, or end slide uses the orange register. Don't use orange for content/data slides — orange is for declaration moments.\n3. New stat cards use the `stat-card` top-border-only pattern with `{typography.stat-value}` in orange (on dark) or ink (on orange). Don't bottom-border or fully-border stat cards.\n4. New bullet lists use the `/` mono marker in fire orange. Cap at three items.\n5. New charts use the `bar-track` vertical-bar pattern with one accent bar per chart in fire orange; remaining bars in `{colors.cream-hint}`.\n6. New quotes use the oversized fire-orange `{typography.quote-mark}` opening glyph, followed by `{typography.quote-text}` at max 78% width.\n7. Headlines on orange slides are always `{colors.ink-black}`. There are no cream headlines on orange.\n8. New tags use `tag` styling: 1px fire-orange border + fire-orange mono uppercase text on dark; dark-ink at 40% opacity on orange.\n9. The system has nine canonical layout patterns — cover, chapter, statement, split, stats, quote, list, compare, end — plus fadelist, chart, and diagram extensions. New layouts should respect the chrome/no-chrome rule based on whether the slide is declarative or content-bearing.\n\n## Known Gaps\n\n- Broadside's `.light` slide class is intentionally overridden to dark — the source comments confirm \"there are no cream/white slides.\" Any attempt to use `.light` will fall back to the dark register.\n- Noto Sans SC is in every font stack as the CJK fallback but the system was not designed with mixed Latin/CJK headlines in mind; line-height behavior on CJK display sizes may need per-slide adjustment.\n- The bullet marker glyph (`/`) is set in IBM Plex Mono via `::before` — replacing it with a different glyph requires editing CSS, not markup.\n- The bar chart `bar-fill` heights are inline-styled via `style=\"height: NN%\"` in the source; there is no data-binding layer.\n- The fadelist and bar-chart layouts are not in the canonical \"9 layout patterns\" comment block; they are extensions added beyond the documented system.\n- Image placeholders use a dashed `{colors.border-dark}` border and a mono uppercase label — replace with a real `<img src>` at the same 55vh height to maintain layout.\n- The `c-fg-light` token exists in the palette (`#111111`) for \"light theme primary text\" but since the light theme is suppressed, this token is effectively unused in the rendered output.\n- The system loads three Google Fonts families (Barlow, IBM Plex Mono, Noto Sans SC) with multiple weights — initial render requires successful font load to avoid Times New Roman fallback.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/preview.md":"# Broadside Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/broadside/design.md`\n- Preview card: `bold-template-pack/templates/broadside/preview.md`\n\n## Selection Metadata\n\n- Slug: `broadside`\n- Tagline: Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack.\n- Mood: editorial, dramatic, loud, newspaper\n- Tone: graphic, punchy, literary, considered\n- Formality: medium-high\n- Density: medium\n- Scheme: dark\n- Best for: Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements. Also a striking pick for tech, research, or business decks that want a dramatic single-accent editorial feel.\n- Avoid for: Decks that need to feel quiet, warm, or institutionally traditional — the dark canvas with fire-orange accent commits to drama.\n\n## Visual Snapshot\n\nA protest-poster editorial system built on massive Barlow type and a single fire-orange environment color. The aesthetic is \"ink on fire\" — dark slides for documentation, orange slides for declaration. Display type is enormous (13vw, roughly 187px at 1440 width) in weight 900 lowercase, treating words as graphic elements rather than reading copy. The cultural reference is broadside printing, SPACE10 reports, and Wim Crouwel grids reinterpreted with one loud color and zero decoration.\n\nBroadside is a protest-poster editorial system. The defining premise: type is so large it stops behaving as text and starts behaving as graphic primitive. Display sizes at 13vw ({typography.display}) put a single word at roughly 187px on a 1440-wide screen — wide enough that the eye scans letterforms before reading. This is the system's primary expressive instrument.\n\n## Preview Ingredients\n\n- Palette: ink-black #111111; ink-black-alt #1A1A18; fire-orange #E85D26; cream #F0ECE5; cream-muted #888880; cream-hint #505048; border-dark #282826\n- Typography: Barlow; IBM Plex Mono; {typography.label.fontFamily}\n- Signature move: Massive Barlow display type at weight 900 in lowercase — never uppercase on display elements.\n- Signature move: Two-register color system: dark slides with cream text, or orange slides with dark ink. No cream/white slides exist.\n- Signature move: {colors.fire-orange} is both accent (on dark) and environment (on orange) — never a secondary color, always *the* color.\n- Signature move: Single-typeface system on Barlow + IBM Plex Mono for chrome only. No serif, no script, no third face.\n- Signature move: 1px hairline dividers ({colors.border-dark} on dark; rgba(17,17,17,0.2) on orange) provide all hierarchy structure.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/design.md":"---\nversion: alpha\nname: Capsule\ndescription: A playful editorial system built on pill-shaped containers, a sun-bleached cream canvas, and a nine-color candy palette. Bodoni Moda serif headlines pair with Space Grotesk body to suggest a literary magazine that took a holiday at a 1970s ice-cream parlor. Every container that holds text is a pill (border-radius 9999px) outlined with a 2px ink stroke, casting a soft 6–12px offset shadow. The aesthetic is \"Memphis-meets-editorial\" — confident typography, generous bordered shapes, and decorative floating pills as atmospheric wallpaper.\n\ncolors:\n  cream: \"#F5F5F0\"\n  ink: \"#1A1A1A\"\n  outline: \"#1E1E1E\"\n  white: \"#FFFFFF\"\n  coral: \"#E85D4E\"\n  lime: \"#C4D94E\"\n  lavender: \"#C5B5E0\"\n  sky: \"#8BB4F7\"\n  violet: \"#A06CE8\"\n  yellow: \"#F2D160\"\n  peach: \"#F5B895\"\n  mint: \"#A8E6CF\"\n  shadow: \"rgba(26, 26, 26, 0.08)\"\n\ncolor-aliases:\n  bg: cream\n  fg: ink\n  outline: outline                  # same hue family as ink; reserved for stroke role\n\ntypography:\n  display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(3rem, 8vw, 7rem)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.02em\n  closing-display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2.5rem, 6vw, 5rem)\"\n    fontWeight: 800\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n  headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2rem, 4vw, 3.5rem)\"\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.02em\n  section-headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.01em\n  quote-display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(1.6rem, 3.5vw, 3rem)\"\n    fontWeight: 600\n    lineHeight: 1.35\n    letterSpacing: -0.01em\n  card-headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 700\n    lineHeight: 1.1\n  stat-number:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2rem, 3.5vw, 3rem)\"\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.03em\n  orbit-numeral:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"2.5rem\"\n    fontWeight: 700\n    lineHeight: 1\n  body:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.2vw, 1.15rem)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-sm:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.9rem\"\n    fontWeight: 400\n    lineHeight: 1.55\n  subtitle:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"clamp(0.8rem, 1.5vw, 1.1rem)\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  pill-text-md:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  pill-text-sm:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.7rem\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  label:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  mini-label:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.65rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n\nspacing:\n  pad-lg: \"3rem 4rem\"\n  pad-md: \"2rem\"\n  gap-xl: \"4rem\"\n  gap-lg: \"3rem\"\n  gap-md: \"2rem\"\n  gap-sm: \"1.5rem\"\n  gap-xs: \"0.75rem\"\n  card-pad: \"2.5rem 2rem\"\n  pill-pad-lg: \"1.5rem 3.5rem\"\n  pill-pad-md: \"1rem 2.5rem\"\n  pill-pad-sm: \"0.4rem 1.2rem\"\n  pill-pad-xs: \"0.35rem 1rem\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  pill:\n    borderRadius: 9999px\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontWeight: 500\n    letterSpacing: 0.02em\n    whiteSpace: nowrap\n    description: \"The universal container shape. Any text container — chip, button, label, statement-highlight, stat tile, card, bar — is a pill with 2px outline. Background can be any palette accent or white.\"\n  pill-card:\n    background: \"{colors.white}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: \"2rem\"\n    padding: \"{spacing.card-pad}\"\n    boxShadow: \"8px 8px 0 {colors.shadow}\"\n    description: \"Larger pill-shaped card (slightly squared corners at 2rem rather than full pill) for content blocks. Always white background, always shadowed.\"\n  stat-pill:\n    background: \"{colors.white}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: \"2rem\"\n    padding: \"2rem 1.5rem\"\n    boxShadow: \"6px 6px 0 {colors.shadow}\"\n    description: \"Stat tile — pill-shaped white card containing a colored stat number, label, and a tiny accent bar.\"\n  bar-track:\n    height: 36px\n    background: \"{colors.cream}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: 9999px\n    overflow: hidden\n    description: \"Horizontal bar chart track shaped as a pill. Fills use the candy palette.\"\n  bar-fill:\n    height: \"100%\"\n    borderRadius: 9999px\n    borderRight: \"2px solid {colors.outline}\"\n    description: \"Inner bar pill with the value label printed at right edge inside the fill.\"\n  accent-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.coral}\"\n    borderRadius: 9999px\n    description: \"Pill-shaped 60×4 accent rule. Default color coral; closing-context variant uses 80×4.\"\n  card-icon:\n    width: 60px\n    height: 60px\n    borderRadius: \"50%\"\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 700\n    description: \"Circular pill icon (60px) used as a card mark. Background is an accent color; contains a 1–3 character Roman numeral or letter.\"\n  step-node:\n    width: 56px\n    height: 56px\n    borderRadius: \"50%\"\n    border: \"2px solid {colors.outline}\"\n    background: \"{colors.white}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.3rem\"\n    fontWeight: 700\n    boxShadow: \"4px 4px 0 {colors.shadow}\"\n    description: \"Circular pill node (56px) used as a timeline step or sequence marker. Step accent color appears as filled-pill class on the node.\"\n  orbit-center:\n    width: 160px\n    height: 160px\n    borderRadius: \"50%\"\n    background: \"{colors.lime}\"\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"2.5rem\"\n    fontWeight: 700\n    description: \"Large circular pill (160px) used as the gravitational anchor of an orbit composition. Default fill lime; small satellite pills orbit around it.\"\n  diagram-node:\n    borderRadius: 9999px\n    border: \"2px solid {colors.outline}\"\n    padding: \"1rem 2rem\"\n    boxShadow: \"6px 6px 0 {colors.shadow}\"\n    background: \"{colors.white}\"\n    description: \"Flow-diagram node — pill-shaped container with shadow. Connected by 50×4 ink connectors with triangular arrowheads.\"\n  diagram-connector:\n    width: 50px\n    height: 4px\n    background: \"{colors.outline}\"\n    description: \"Solid 50×4 ink bar with a triangular arrowhead at the right end, connecting two diagram nodes inline.\"\n  visual-frame:\n    borderRadius: \"2rem\"\n    border: \"2px solid {colors.outline}\"\n    boxShadow: \"12px 12px 0 {colors.shadow}\"\n    description: \"Large image/illustration frame — slightly squared pill (2rem radius) with thicker 12px offset shadow. Often filled with a tri-stop linear gradient and a dot-pattern overlay.\"\n  grain-overlay:\n    position: fixed\n    inset: 0\n    pointerEvents: none\n    zIndex: 9999\n    opacity: 0.04\n    mixBlendMode: multiply\n    backgroundImage: \"fractalNoise SVG\"\n    description: \"Subtle film-grain noise overlay applied to the entire viewport at 4% opacity in multiply blend mode. Always present, never absent.\"\n  radial-glow:\n    description: \"Soft radial gradient wash anchored to a corner or center of a slide background. Uses one of the candy palette colors at 6–15% opacity, blended into the cream canvas. Provides atmospheric warmth without changing the surface color.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCapsule is a **playful editorial system** whose defining structural premise is the **pill**: every text container is a pill, every icon is a pill, every bar is a pill, every node in a diagram is a pill. The `border-radius: 9999px` rule applies to virtually all UI elements, with larger panels softening to a 2rem radius. Combined with the 2px ink outline that wraps every shape, the result is a system where containers feel inflated, friendly, and graphically distinct — a nod to Memphis design and late-70s ice-cream-parlor signage without abandoning editorial discipline.\n\nThe typeface stack is a deliberate two-face conversation. **Bodoni Moda** — a high-contrast didone serif — carries every display moment, every section headline, every stat numeral, every card title, every quote. Bodoni's tall capitals and thin-thick stroke contrast give the headlines their editorial weight and a touch of fashion-magazine glamour. **Space Grotesk** — a contemporary geometric sans — carries every body paragraph, every label, every pill text, every subtitle. The serif/grotesk pairing creates the system's primary typographic rhythm: glamorous serif statements + clean grotesk supporting structure.\n\nThe palette runs nine colors plus three neutrals. The canvas is `{colors.cream}` — a warm sun-bleached off-white that signals \"magazine paper\" rather than \"screen white.\" The ink is `{colors.ink}`, used for body text, headlines, and the universal outline. The seven candy accents — `{colors.coral}`, `{colors.lime}`, `{colors.lavender}`, `{colors.sky}`, `{colors.violet}`, `{colors.yellow}`, `{colors.peach}`, plus `{colors.mint}` — are interchangeable. They fill pills, color stat numbers, fill bar charts, and float as decorative atmosphere. There is no semantic mapping: no color means \"warning,\" none means \"success.\" Each accent is chosen for compositional balance, not meaning.\n\nDepth comes from **soft hard-offset shadows** at 4px, 6px, 8px, and 12px in a low-opacity ink color (`{colors.shadow}` = `rgba(26, 26, 26, 0.08)`). Unlike a true brutalist shadow, these are slightly transparent — they read as \"lifted\" rather than \"stamped.\" Combined with the 2px outline, every pill feels like it's floating just above the cream canvas. There is no use of blurred drop shadows; the offset is always solid, always to the bottom-right.\n\n**Density philosophy: medium-high atmospheric.** Capsule slides feel populated. The system is built around the idea that decorative floating pills should orbit the actual content as wallpaper — small colored pills tilted at 5–25° rotations across the slide background, each containing a single uppercase word. These atmospheric pills are non-functional; they are typographic confetti. A correctly composed slide pairs one or two substantive content blocks (a pill-card, a stat grid, a diagram) with 5–8 floating decorative pills around the edges. A slide that feels broken in Capsule is one with empty corners or unrelieved cream space — the candy palette wants to participate even where the content doesn't strictly require it.\n\n**Key Characteristics:**\n- Universal pill geometry — `border-radius: 9999px` for small containers, 2rem for larger cards/frames.\n- 2px solid `{colors.outline}` stroke wraps every pill, icon, and card.\n- Bodoni Moda serif for every display/headline/stat; Space Grotesk sans for every body/label/pill text.\n- Sun-bleached cream canvas `{colors.cream}` with soft radial glows in candy accent colors at 6–15% opacity for background atmosphere.\n- Hard-offset shadows in low-opacity ink (`{colors.shadow}`) at 4/6/8/12px offsets, always solid, always bottom-right.\n- Nine-color candy accent palette used interchangeably — no semantic mapping.\n- Decorative floating pills tilted at 5–25° rotations populate slide backgrounds as atmospheric wallpaper.\n- A persistent fractal-noise grain overlay (4% opacity, multiply blend) sits over the entire viewport at all times.\n- Full-screen vertical nav-dot column at right, mono slide counter at bottom-right.\n\n## Colors\n\n### Canvas & Ink\n- **Cream** (`{colors.cream}` — #F5F5F0): The canvas. Warm sun-bleached off-white. Used as default slide background, default bar-track interior, and any neutral region that wants paper warmth without being pure white.\n- **Ink** (`{colors.ink}` — #1A1A1A): The primary text color. Used for headlines, body, and (under the alias `outline`) the universal stroke.\n- **Outline** (`{colors.outline}` — #1E1E1E): Functionally identical to ink; reserved as the stroke color on every pill, card, icon, and frame for semantic clarity.\n- **White** (`{colors.white}` — #FFFFFF): True white. Used as the default fill for pill-cards, stat-pills, diagram nodes, and any pill that needs the highest contrast against the cream canvas. White pills always carry the 2px ink outline.\n\n### Candy Accents\n- **Coral** (`{colors.coral}` — #E85D4E): Warm orange-red. The most \"voice-y\" of the accents; used as a default accent-line color, default pill-card icon fill on the first card in a sequence, and the most frequent stat-number color.\n- **Lime** (`{colors.lime}` — #C4D94E): Vivid chartreuse-green. Pairs well with coral; default fill for orbit-center anchors and frequent stat-number color.\n- **Lavender** (`{colors.lavender}` — #C5B5E0): Soft lilac-purple. Used as a calming pill fill in headers and as a frequent quote-highlight color.\n- **Sky** (`{colors.sky}` — #8BB4F7): Mid-saturation cornflower blue. The default \"third accent\" — sits comfortably next to coral and lime in a 3-card grid.\n- **Violet** (`{colors.violet}` — #A06CE8): Deeper purple. Used when a slide already has lavender as one accent and needs a second purple-family pop.\n- **Yellow** (`{colors.yellow}` — #F2D160): Warm marigold. The default fill for title pills, closing pills, and any pill that should read as \"important / featured.\"\n- **Peach** (`{colors.peach}` — #F5B895): Pale apricot. The softest accent; used in floating decorative pills and circular decorative spots.\n- **Mint** (`{colors.mint}` — #A8E6CF): Pale aqua-green. Used most often inside the linear-gradient visual frame and in lower-emphasis decorative pills.\n- **Shadow** (`{colors.shadow}` — `rgba(26, 26, 26, 0.08)`): The universal soft hard-offset shadow color. Never use a different shadow color.\n\n### Defaults\n- **Default slide surface**: `{colors.cream}`.\n- **Default headline color**: `{colors.ink}` — Bodoni serif headlines are always ink, never colored. Color appears only on stat numerals and inside accent pills.\n- **Default body text color**: `{colors.ink}` rendered at opacity 0.6–0.7 to soften it against the cream canvas.\n- **Default outline color**: `{colors.outline}` (≈ ink) — 2px on every pill/card/icon, no exceptions.\n- **Default card fill**: `{colors.white}`.\n- **Default accent-line color**: `{colors.coral}`.\n- **Default title-pill fill**: `{colors.yellow}`.\n- **Default closing-pill fill**: `{colors.yellow}`.\n- **Default orbit-center fill**: `{colors.lime}`.\n- **Default first accent in a 3- or 4-accent sequence**: coral → lime → sky → violet (rotated when more colors are needed). The sequence is the system's \"Roy G. Biv\"; it gives the agent a deterministic order to reach for so the candy palette doesn't feel random.\n- **Default decorative pill background opacity**: full saturation (no fading). The floating pills are loud on purpose.\n\nAccent colors have no semantic role. Choose accents based on warm/cool balance and adjacency, not meaning. When three accents appear together, pair a warm (coral/yellow/peach) with a cool (sky/lavender/violet/mint) with a neutral-bright (lime). Avoid placing two same-family accents adjacent (two purples, two greens, two warms).\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face conversation**: `Bodoni Moda` (serif, weights 400–900, opsz axis) carries every display and headline; `Space Grotesk` (sans, weights 300–700) carries every body, label, and pill text. There is no third face. Both families are loaded from Google Fonts at variable-axis weights.\n\nBodoni Moda's high contrast and didone modulation give the system its editorial-glamour register; the thin-thick stroke contrast is most pronounced at large sizes, so display weights should always be 700+ to maintain stroke presence. Space Grotesk's geometric grotesque carries clean, modern body — it never tries to compete with the Bodoni headlines.\n\nAn inline `<em>` inside a Bodoni headline keeps Bodoni and shifts to italic. A `quote-highlight` inside a Bodoni quote body switches the wrapped word to a pill (Space Grotesk uppercase pill text on a candy fill) for visual emphasis.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3rem, 8vw, 7rem) | Bodoni Moda | 800 | Largest cover/title display |\n| `{typography.closing-display}` | clamp(2.5rem, 6vw, 5rem) | Bodoni Moda | 800 | Conclusive declarative headline |\n| `{typography.headline}` | clamp(2rem, 4vw, 3.5rem) | Bodoni Moda | 700 | Primary slide headline on split or two-column layouts |\n| `{typography.section-headline}` | clamp(1.8rem, 3.5vw, 3rem) | Bodoni Moda | 700 | Section-opening or centered headline above cards/charts |\n| `{typography.quote-display}` | clamp(1.6rem, 3.5vw, 3rem) | Bodoni Moda | 600 | Pull-quote body |\n| `{typography.card-headline}` | 1.5rem | Bodoni Moda | 700 | Card or pillar-block title |\n| `{typography.stat-number}` | clamp(2rem, 3.5vw, 3rem) | Bodoni Moda | 800 | Large numerical stat figure |\n| `{typography.orbit-numeral}` | 2.5rem | Bodoni Moda | 700 | Centered ordinal inside the orbit-center circle |\n| `{typography.body}` | clamp(0.95rem, 1.2vw, 1.15rem) | Space Grotesk | 400 | Paragraph body |\n| `{typography.body-sm}` | 0.9rem | Space Grotesk | 400 | Compact body inside a card |\n| `{typography.subtitle}` | clamp(0.8rem, 1.5vw, 1.1rem) | Space Grotesk | 400 | Uppercase tracked subtitle below a display headline |\n| `{typography.pill-text-md}` | 0.85rem | Space Grotesk | 600 | Text inside title/closing pills |\n| `{typography.pill-text-sm}` | 0.7rem | Space Grotesk | 600 | Text inside small floating decorative pills |\n| `{typography.label}` | 0.75rem | Space Grotesk | 500 | Header tag pills, attribution lines |\n| `{typography.mini-label}` | 0.65rem | Space Grotesk | 500 | Mini-pill chips in a tag cluster |\n\n### Defaults\n- **Default size for the primary section headline**: `{typography.section-headline}` (clamp 1.8–3rem). For two-column or split layouts, `{typography.headline}` (clamp 2–3.5rem).\n- **Default size for a cover or opening display moment**: `{typography.display}` (clamp 3–7rem).\n- **Default size for paragraph body**: `{typography.body}` (clamp 0.95–1.15rem).\n- **Default size for any inline label or chip**: `{typography.label}` (0.75rem).\n- **Default weight for any Bodoni display element**: 700 minimum; 800 for the largest display.\n- **Default weight for any Space Grotesk body element**: 400.\n- **Default size for a hero stat figure**: `{typography.stat-number}` (clamp 2–3rem).\n\nWhen unsure, reach for `{typography.section-headline}` for the slide's primary text moment, not `{typography.card-headline}` (which is for block-level titles within a card).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every display, headline, stat-number, card-headline, and quote-display element is set in Bodoni Moda.** Space Grotesk does not appear in any display role.\n- **Every body, subtitle, pill-text, label, and chip element is set in Space Grotesk.** Bodoni does not appear in body or chip roles.\n- **Every Bodoni display element uses negative letter-spacing** (-0.01em to -0.03em). Bodoni at large sizes with default tracking reads loose.\n- **Every Space Grotesk subtitle, label, pill-text, and chip element is uppercase with 0.08em+ tracking.** The uppercase + tracking is the small-text identity signal.\n- **Bodoni headlines are always rendered in `{colors.ink}`, never in a candy color.** Color appears on stat numerals (e.g., `color: {colors.coral}`) but not on serif headlines. The exception is the orbit-center numeral, which sits inside a colored circular pill but the numeral itself remains ink.\n- **Every pill element carries the 2px solid outline.** A pill without its 2px ink stroke breaks the system.\n- **Every container with `border-radius: 9999px` or `2rem` carries either the 2px outline or sits inside an already-outlined parent.** Unoutlined rounded containers do not exist.\n- **Every card or elevated pill carries a hard-offset shadow** at 4/6/8/12px in `{colors.shadow}`. Smaller pills get 4–6px; cards get 8px; visual frames get 12px.\n\n### Typography Principles\nThe Bodoni-headline + Space-Grotesk-body pairing is the primary rhythm; switching either face breaks the system. Italic appears only inside pull-quote bodies via the `<em>` tag (Bodoni italic). Underline is not used. Pill-encapsulation is the system's primary emphasis mechanism: wrapping a phrase in a candy-filled pill is the equivalent of bold-italicizing it in a traditional editorial system.\n\nLine-height tightens at scale: `{typography.display}` at 0.9, `{typography.headline}` at 1.05, body at 1.6. The tight display + open body contrast is what gives the system its editorial breathing rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport, with one slide carrying `.active` (opacity 1) at a time. Transitions are 0.6s opacity fades via `cubic-bezier(0.4, 0, 0.2, 1)`. All sizes use rem units inside CSS `clamp()` so the layout scales fluidly.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-lg}` | 3rem 4rem | Default slide outer padding |\n| `{spacing.gap-xl}` | 4rem | Major two-column gutter |\n| `{spacing.gap-lg}` | 3rem | Section-block spacing |\n| `{spacing.gap-md}` | 2rem | Standard inter-element spacing |\n| `{spacing.gap-sm}` | 1.5rem | Tight card-internal spacing |\n| `{spacing.gap-xs}` | 0.75rem | Inline gap between mini-pills |\n| `{spacing.card-pad}` | 2.5rem 2rem | Default pillar-card padding |\n| `{spacing.pill-pad-lg}` | 1.5rem 3.5rem | Title-pill / closing-pill padding |\n| `{spacing.pill-pad-md}` | 1rem 2.5rem | Featured pill padding |\n| `{spacing.pill-pad-sm}` | 0.4rem 1.2rem | Header-tag pill padding |\n| `{spacing.pill-pad-xs}` | 0.35rem 1rem | Mini-pill chip padding |\n\n### Atmospheric Background Layer\nEvery slide layers two atmospheric treatments on top of the cream canvas:\n1. **Radial glows** — one to three soft `radial-gradient(ellipse at X% Y%, rgba(accent, 0.06–0.15), transparent)` washes anchored to corners or center. These tint the canvas warmly without changing its surface color.\n2. **Grain overlay** — a fractal-noise SVG fixed at `inset: 0`, opacity 0.04, mix-blend-mode multiply, z-index 9999. Always present, always identical, never removed.\n\nThese are not decorative options; they are baseline canvas treatments that should appear on every slide.\n\n### Decorative Pill Wallpaper\nA signature: small decorative pills (60–160px wide, 35–90px tall) tilted at -20° to +25° rotations are placed absolutely on slide backgrounds as atmospheric typographic confetti. Each contains a single uppercase Space-Grotesk word and a candy fill. Some are circular (border-radius 50%) instead of capsule-shaped. They have no informational role — they are visual atmosphere. Typical count: 5–8 per slide on cover/closing/quote layouts; 0 on dense data layouts.\n\n## Depth and Elevation\n\n### Soft Hard-Offset Shadow\nThe system's only depth technique is a **solid hard-offset shadow** in low-opacity ink:\n- **4px 4px 0** — small elevated nodes (step nodes, small pills).\n- **6px 6px 0** — orbit pills, stat-pills, diagram nodes.\n- **8px 8px 0** — pillar-cards, chart container.\n- **12px 12px 0** — large visual frame (the most lifted element in the system).\n\nAll shadows use `{colors.shadow}` (`rgba(26, 26, 26, 0.08)`). The opacity is the key distinction from a brutalist hard shadow: at 8% the shadow reads as a soft lift rather than a stamped offset. The offset direction is always bottom-right.\n\n### Outline-Based Depth\nMost apparent depth comes from the 2px ink outline that wraps every pill against the cream canvas. The outline does much of the elevation work; the shadow adds the lift on cards and elevated pills.\n\n### Flat Decorative Layer\nDecorative floating pills and radial glows are flat — they cast no shadow. The shadow is reserved for content-bearing containers (cards, stat tiles, diagram nodes, visual frames). This visual rule separates \"content\" from \"atmosphere\" at a glance.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 9999px (full pill) | All small pills: title pill, closing pill, decorative pills, header tags, mini chips, bar tracks, bar fills, accent lines, orbit pills, floating pills, quote highlights, diagram nodes |\n| 2rem (32px) | Larger cards: pillar-cards, stat-pills, chart container, visual frame |\n| 1.5rem (24px) | Inner dashed frame inside the visual frame |\n| 50% (circle) | Circular pills: card-icon (60px), step-node (56px), orbit-center (160px), nav dots (10px) |\n| 0 | The grain overlay; the slide itself; the candy-color gradient regions inside a visual frame |\n\nThe system has **no sharp-cornered text containers**. Every container that holds text or icon content is rounded.\n\n### Border Weights\n- **2px solid `{colors.outline}`** — the universal stroke. Used on every pill, card, icon, frame, bar track, nav dot.\n- **2px dashed `{colors.outline}`** — used only on the inner frame inside the visual-frame component (a decorative interior border indicating \"image placeholder\").\n- **4px solid ink** — used only on the timeline-line that connects sequential step nodes horizontally.\n\nAll borders are `{colors.outline}`. Colored borders do not exist in the system.\n\n### Decorative Element Types\n\n**Decorative floating pill** — A small (60–160px wide × 35–90px tall) pill or circle in a candy fill, tilted at -20° to +25° rotation, positioned absolutely on the slide background. Contains a single uppercase Space-Grotesk word at 0.55–0.85rem. Functions as typographic confetti / atmospheric wallpaper. Five to eight per declarative slide.\n\n**Header tag pill** — A small (≈0.7rem text) pill in a candy fill (typically lavender) with `pill-pad-sm` padding, centered above a section headline. The system's section-tag chip.\n\n**Title pill / closing pill** — A medium pill (`pill-pad-lg`) in `{colors.yellow}` carrying uppercase Space-Grotesk text. Placed above the largest display headline on cover and closing slides.\n\n**Pillar-card** — A 2rem-radius white card with 2px outline and 8px offset shadow, containing a circular `card-icon` at the top, a Bodoni `card-headline`, and a Space-Grotesk body paragraph. Used in 3-card and 4-card grids.\n\n**Stat-pill** — A 2rem-radius white card containing a colored Bodoni stat number, a small uppercase label, and a tiny 40×4 accent bar at the bottom. Sits in 3- or 4-column stat grids.\n\n**Bar-track** — A 36px-tall horizontal pill (9999px radius) with 2px outline and cream interior. The fill is a child pill in a candy color with the value label printed at the right edge inside the fill.\n\n**Orbit composition** — A central 160px circular pill in `{colors.lime}` carrying a Bodoni ordinal, surrounded by 4–6 small `orbit-pill` satellites in candy fills, each tilted, positioned at 8–45% / 8–45% offsets, with 6px shadows.\n\n**Diagram-node + connector** — Pill-shaped flow node (`diagram-node`) with 6px shadow, connected to the next node by a 50×4 ink bar with a triangular arrowhead. Nodes may carry candy fills; arrows are always ink.\n\n**Visual-frame** — A 2rem-radius large frame with 12px offset shadow, filled with a tri-stop linear gradient (typically lavender → sky → mint), overlaid with a dot-grid pattern at 0.15 opacity, with an inner dashed border indicating \"image placeholder.\" Used for hero visual moments.\n\n**Quote-highlight** — An inline pill in lime or sky with 2px outline, wrapped around a single phrase inside a Bodoni quote body. The system's primary inline emphasis mechanism.\n\n**Accent line** — A 60×4 (or 80×4 on closing slides) horizontal pill in `{colors.coral}` used as a sub-headline accent rule.\n\n## Do's and Don'ts\n\n### Do\n- Make every text container a pill — 9999px radius for small pills, 2rem radius for larger cards. The pill geometry is the system's most distinctive single trait.\n- Apply the 2px `{colors.outline}` stroke to every pill, card, icon, and frame. The outline is what makes the candy palette read as graphic rather than candy.\n- Set every Bodoni display element in `{colors.ink}`, never in a candy color. Color belongs on stat numerals and pill fills, not on serif headlines.\n- Use Bodoni Moda for every headline/stat/card title; use Space Grotesk for every body/label/pill. The two-face split is non-negotiable.\n- Render shadows as solid hard offsets at 4/6/8/12px in `{colors.shadow}` (`rgba(26,26,26,0.08)`). Never blur; never re-color.\n- Populate slide backgrounds with 5–8 floating decorative pills tilted at -20° to +25° rotations on cover, closing, quote, and other declarative layouts. The wallpaper-pill treatment is a system signature.\n- Layer radial-gradient accent glows (6–15% opacity) into the cream canvas on every slide for atmospheric warmth.\n- Keep the grain overlay (4% opacity, multiply blend) active on every slide — it is a baseline layer, not optional decoration.\n- Wrap inline emphasis phrases in `quote-highlight` pills (lime, sky, or another candy) inside Bodoni quote bodies, rather than bolding or italicizing.\n- Pair warm + cool accents adjacently: coral with sky, yellow with lavender, peach with mint. Avoid two same-family accents next to each other.\n\n### Don't\n- Don't render any text container with sharp corners. Square text containers do not exist in Capsule.\n- Don't render a pill, card, or icon without the 2px ink outline. The stroke is the system's identity.\n- Don't render Bodoni headlines in a candy color. Headlines are always `{colors.ink}`; color lives on stat numerals and pill fills.\n- Don't use blurred drop shadows. The shadow is always solid offset at 4/6/8/12px in `{colors.shadow}`.\n- Don't pair Bodoni with a different sans companion. The Bodoni Moda + Space Grotesk pairing is fixed.\n- Don't use uppercase on Bodoni headlines. Bodoni in this system is sentence case (or true title case for proper nouns).\n- Don't use sentence case on Space Grotesk subtitles, labels, or pill text. Small Space Grotesk text is always uppercase + 0.08em tracking.\n- Don't introduce a tenth accent color. The nine candy accents are the closed palette.\n- Don't apply shadows to decorative floating pills. Shadows are reserved for content-bearing containers.\n- Don't leave a slide's corners empty on declarative layouts. The cream canvas wants atmospheric pills or radial glows; bare corners read as broken.\n\n## Responsive Behavior\n\nCapsule is a viewport-fluid 1920×1080 presentation system using `clamp()` and viewport-relative units throughout. There is a single `@media (max-width: 900px)` breakpoint that collapses grid columns to single-column stacks and hides the nav-dot column; below 600px the stats grid further collapses from 2-col to 1-col. The system is otherwise responsive without breakpoints.\n\n### Scaling Behavior\n- Display headline scales from 3rem at minimum viewport to 7rem at maximum.\n- Body text scales from 0.95rem to 1.15rem.\n- Padding scales via `clamp` inside individual layout selectors.\n- Borders, pill outlines, shadow offsets, and grain overlay are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, or `Space`.\n- Slides reverse via `ArrowLeft` or `ArrowUp`.\n- `Home` jumps to the first slide; `End` to the last.\n- Touch swipe (horizontal): swipe distance >50px advances or reverses.\n- The active slide carries `.active` (opacity 1); non-active slides are opacity 0 + pointer-events none.\n- Nav dots are a vertical column at the right edge; the slide counter is at bottom-right; a keyboard hint is at bottom-left.\n\n### Print / Export\nNot explicitly handled; opacity-toggling means a naïve print captures only the active slide. Export workflows should snapshot each slide individually at 1920×1080.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Bodoni Moda 700–800) | Bodoni Moda | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body / Pill text (Space Grotesk 400–600) | Space Grotesk | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare the CJK font *after* the Latin font in the same `font-family` stack so Latin glyphs render in Bodoni Moda / Space Grotesk and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bodoni+Moda:ital,opsz,wght@0,6..96,400..900;1,6..96,400..900&family=Space+Grotesk:wght@300..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Bodoni Moda\", \"ZCOOL XiaoWei\", serif;\n  --font-body: \"Space Grotesk\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.7 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (negative tracking that flatters Bodoni capitals jams Hanzi strokes together). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any pill/label/subtitle when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei is a high-contrast literary serif-leaning Hanzi face whose thin-thick stroke modulation echoes Bodoni Moda's didone register — it gives display headlines the same editorial-glamour weight as the Latin original. Yozai is a friendly rounded Hanzi sans whose open counters and modest stroke contrast mirror Space Grotesk's geometric grotesque, so pill text, labels, and body paragraphs retain the \"clean modern sans\" feel rather than reverting to a stiff system Hanzi. Both pair cleanly with the candy palette: ZCOOL XiaoWei in `{colors.ink}` keeps the rule \"Bodoni headlines are never colored\" intact, and Yozai sits inside coral / lime / yellow pills without losing legibility against the 2px ink outline. The decorative floating pill wallpaper still works in Chinese — substitute single-character or two-character atmospheric words (愿景, 未来, 下一步) for the English uppercase confetti.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a display face with limited weight axis (single weight) and a smaller glyph set than Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage and a similar friendly humanist register. The ZCOOL XiaoWei italic / heavy moments that Bodoni achieves via the opsz axis have no equivalent in the Chinese face — use scale and color to compensate when Latin would have leaned on italic Bodoni.\n\n## Iteration Guide\n\n1. Any new container that holds text uses the pill geometry — 9999px radius for small, 2rem radius for cards. Don't introduce a sharp-cornered text container.\n2. Any new pill carries the 2px solid `{colors.outline}` stroke. Don't render an unstroked pill.\n3. Any new headline uses Bodoni Moda in `{colors.ink}`. Don't color a serif headline; don't switch to Space Grotesk for display.\n4. Any new card carries a `8px 8px 0 {colors.shadow}` offset shadow (4px for small nodes, 12px for the visual frame). Don't blur; don't re-color.\n5. Any new accent uses the nine-color candy palette in the coral → lime → sky → violet → yellow → lavender → peach → mint default sequence. Don't introduce a tenth color.\n6. Any new declarative slide (cover, closing, quote, statement) gets 5–8 floating decorative pills as atmospheric wallpaper.\n7. Any new data slide gets one or two radial accent glows in the canvas background. Don't leave the cream surface flat.\n8. Any inline emphasis inside a Bodoni quote body uses a `quote-highlight` pill. Don't bold; don't italicize except via the Bodoni italic axis inside `<em>`.\n9. New components inherit the pill geometry + 2px outline + 4–12px shadow pattern. If a new component breaks any of these three rules, redesign it before adding it.\n\n## Known Gaps\n\n- Two Bodoni font axes (italic and opsz 6..96) are loaded but the template only exercises the upright axis at fixed sizes; the optical-size variation across display sizes is not explicitly opted into.\n- Bar-chart values are inline-styled via `style=\"width: NN%\"` — there is no data-binding layer.\n- The decorative floating pill positions and rotations are all hand-tuned via inline style on each instance; there is no generative placement system.\n- The visual-frame's tri-stop gradient (lavender → sky → mint) is a hardcoded \"default\" — alternate gradient combinations are valid but need to be authored per instance.\n- The grain overlay uses an inline SVG data URL; replacing or removing it requires editing the markup, not a CSS variable.\n- The chart-bar-fill border-right at 2px solid outline is what gives bars their pill-end-cap definition; removing it loses the pill aesthetic on bars.\n- The system inherits all 9 candy accent CSS variables but only ~6 are actively used across the source — peach and mint are present in the palette but used sparingly. They are available for new compositions.\n- Decorative floating pills include their text content as part of the visual identity (single uppercase Space-Grotesk words). The words are not informational; new compositions should pick neutral single-word atmospheres (\"VISION\", \"FUTURE\", \"NEXT\", etc.) rather than content-specific text.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/preview.md":"# Capsule Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/capsule/design.md`\n- Preview card: `bold-template-pack/templates/capsule/preview.md`\n\n## Selection Metadata\n\n- Slug: `capsule`\n- Tagline: Modular pill-shaped cards on warm bone with a full pastel-pop palette.\n- Mood: playful, modern, warm, fresh, fun\n- Tone: upbeat, graphic, approachable, cool\n- Formality: medium-low\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials. Also fun for a playful tech demo or a research deck that wants pop-art clarity instead of gravitas.\n- Avoid for: Contexts that require traditional institutional weight — the capsule shapes and pastel pops actively soften authority.\n\n## Visual Snapshot\n\nA playful editorial system built on pill-shaped containers, a sun-bleached cream canvas, and a nine-color candy palette. Bodoni Moda serif headlines pair with Space Grotesk body to suggest a literary magazine that took a holiday at a 1970s ice-cream parlor. Every container that holds text is a pill (border-radius 9999px) outlined with a 2px ink stroke, casting a soft 6–12px offset shadow. The aesthetic is \"Memphis-meets-editorial\" — confident typography, generous bordered shapes, and decorative floating pills as atmospheric wallpaper.\n\nCapsule is a playful editorial system whose defining structural premise is the pill: every text container is a pill, every icon is a pill, every bar is a pill, every node in a diagram is a pill. The border-radius: 9999px rule applies to virtually all UI elements, with larger panels softening to a 2rem radius. Combined with the 2px ink outline that wraps every shape, the result is a system where containers feel inflated, friendly, and graphically distinct — a nod to Memphis design and late-70s ice-cream-parlor signage without abandoning editorial discipline.\n\n## Preview Ingredients\n\n- Palette: cream #F5F5F0; ink #1A1A1A; outline #1E1E1E; white #FFFFFF; coral #E85D4E; lime #C4D94E; lavender #C5B5E0; sky #8BB4F7\n- Typography: Bodoni Moda; Space Grotesk\n- Signature move: Universal pill geometry — border-radius: 9999px for small containers, 2rem for larger cards/frames.\n- Signature move: 2px solid {colors.outline} stroke wraps every pill, icon, and card.\n- Signature move: Bodoni Moda serif for every display/headline/stat; Space Grotesk sans for every body/label/pill text.\n- Signature move: Sun-bleached cream canvas {colors.cream} with soft radial glows in candy accent colors at 6–15% opacity for background atmosphere.\n- Signature move: Hard-offset shadows in low-opacity ink ({colors.shadow}) at 4/6/8/12px offsets, always solid, always bottom-right.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/design.md":"---\nversion: alpha\nname: Cartesian\ndescription: A quiet, museum-catalog editorial system built on Playfair Display serif headlines, Inter sans body, and a five-tone warm-stone palette. The aesthetic is \"consulting deck meets architectural monograph\" — minimal geometric line decorations (thin circles, dashed arcs, vertical and horizontal hairlines) drift behind content, suggesting drafting paper and compass work. Every divider is a single 1px line in a muted taupe; nothing is bold, nothing is loud. The cultural reference is Massimo Vignelli's editorial work, the Cooper Hewitt catalog, and pencil-and-tracing-paper urban planning documents.\n\ncolors:\n  bg-primary: \"#EDE8E0\"\n  bg-secondary: \"#E2DBD1\"\n  text-primary: \"#1A1A1A\"\n  text-secondary: \"#5A5A5A\"\n  accent: \"#8A8178\"\n  line: \"#B8B0A4\"\n  white-overlay: \"rgba(255, 255, 255, 0.3)\"\n\ntypography:\n  display:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(3rem, 6vw, 5.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h1:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(2.5rem, 5vw, 4.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h2:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h3:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(1.2rem, 2vw, 1.6rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  stat-figure:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"2rem\"\n    fontWeight: 400\n    lineHeight: 1\n  agenda-numeral:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 400\n    lineHeight: 1\n  team-initial:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"2rem\"\n    fontWeight: 400\n    lineHeight: 1\n  quote-mark:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"5rem\"\n    fontWeight: 400\n    lineHeight: 1\n  card-headline:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.3rem\"\n    fontWeight: 400\n    lineHeight: 1.1\n  timeline-headline:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.2rem\"\n    fontWeight: 400\n    lineHeight: 1.1\n  body:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(0.9rem, 1.2vw, 1.1rem)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-sm:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.9rem\"\n    fontWeight: 400\n    lineHeight: 1.6\n  subtitle:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(1rem, 1.5vw, 1.3rem)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  attribution:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 2px\n    textTransform: uppercase\n  label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  micro:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.7rem\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n    textTransform: uppercase\n\nspacing:\n  pad-y: \"4vh\"\n  pad-x: \"4vw\"\n  gap-xl: \"6vw\"\n  gap-lg: \"5vw\"\n  gap-md: \"3vw\"\n  gap-sm: \"2vh\"\n  card-pad: \"4vh 2vw\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  card:\n    border: \"1px solid {colors.line}\"\n    padding: \"{spacing.card-pad}\"\n    background: \"{colors.white-overlay}\"\n    description: \"Tracing-paper card — 1px taupe outline with semi-transparent white fill that lets the canvas tone bleed through. No radius, no shadow.\"\n  card-icon:\n    width: 40px\n    height: 40px\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    color: \"{colors.accent}\"\n    fontSize: \"1rem\"\n    description: \"Small ringed circle (40px) containing a 1–3 character Roman numeral or letter in accent taupe.\"\n  agenda-row:\n    padding: \"2vh 0\"\n    borderBottom: \"1px solid {colors.line}\"\n    description: \"List row separated only by a 1px taupe hairline. Numeral at left, label at right.\"\n  timeline-rule:\n    height: \"1px\"\n    background: \"{colors.line}\"\n    description: \"Single horizontal 1px taupe line connecting timeline items. No nodes, no markers — just the line.\"\n  vertical-line:\n    width: \"1px\"\n    height: \"100%\"\n    background: \"{colors.line}\"\n    opacity: 0.3\n    description: \"Optional decorative vertical hairline anchored at left edge (default 8vw from edge) at low opacity. Provides drafting-paper grid feel.\"\n  horizontal-accent:\n    width: \"20vw\"\n    height: \"1px\"\n    background: \"{colors.text-primary}\"\n    description: \"Single short ink-black 1px horizontal line used as a strong accent rule. Black, not taupe.\"\n  geo-circle:\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.5\n    description: \"Thin solid taupe ring at low opacity, used as decorative geometry behind content.\"\n  geo-arc:\n    border: \"1px dashed {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.3\n    description: \"Thin dashed taupe ring at very low opacity, paired with geo-circle to suggest compass construction.\"\n  geo-decoration:\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    description: \"Large decorative ring (30–50vw diameter) anchored to a corner or center. Always pairs with a ::before pseudo-element rendering a smaller dashed ring inside it, suggesting concentric drafting.\"\n  geo-ring:\n    width: \"50vw\"\n    height: \"50vw\"\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.3\n    description: \"The largest geometric decoration variant — a 50vw centered ring with an inner ::before dashed ring at 70% diameter.\"\n  image-placeholder:\n    background: \"{colors.bg-secondary}\"\n    border: \"1px solid {colors.line}\"\n    description: \"Solid taupe-tinted block with two crossed 1px diagonal hairlines via ::before/::after at +30° and -30°, suggesting an X over a blank frame. Holds a small uppercase label centered.\"\n  team-photo:\n    width: \"12vw\"\n    height: \"12vw\"\n    borderRadius: \"50%\"\n    border: \"1px solid {colors.line}\"\n    background: \"{colors.bg-secondary}\"\n    description: \"Circular portrait frame (12vw) in slightly darker stone, ringed in taupe, holding a single Playfair initial in accent taupe at center.\"\n  nav-arrow:\n    width: 40px\n    height: 40px\n    border: \"1px solid {colors.line}\"\n    background: \"transparent\"\n    description: \"Square 40px button with 1px taupe border holding an arrow glyph. Hover state inverts to ink fill with cream text.\"\n  nav-dot:\n    width: 8px\n    height: 8px\n    borderRadius: \"50%\"\n    background: \"{colors.line}\"\n    description: \"Small taupe dot at right edge as navigation indicator. Active state shifts to ink and scales 1.3.\"\n  chart-stroke-primary: \"{colors.text-primary}\"\n  chart-stroke-comparison: \"{colors.line}\"\n  chart-comparison-dash: \"5, 5\"\n  chart-grid-color: \"{colors.bg-secondary}\"\n  chart-axis-tick-color: \"{colors.accent}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCartesian is a **quiet museum-catalog editorial system**. Its defining premise is **restraint through 1px lines**. Every structural element — list separators, agenda rules, timeline connectors, card borders, table dividers — is a single 1px line in a muted taupe `{colors.line}`. There are no thick borders, no fills, no shadows, no rounded surfaces. Hierarchy is built through type contrast and negative space; depth does not exist in the conventional sense.\n\nThe typeface stack is a literary-monograph pairing. **Playfair Display** — a high-contrast didone-influenced serif — carries every headline, every stat numeral, every card title, every team initial, every quote mark. Playfair runs at weight 400 (regular) almost exclusively — there is no use of bold or 700-weight Playfair in the system. The thin-stroke didone aesthetic depends on letting the letterforms breathe at modest weights. **Inter** — a clean modern grotesque — carries every body paragraph, every subtitle, every label, every attribution. Inter runs at 400 for body and 500 for labels. The pairing creates the system's editorial voice: serif statements + clean sans supporting structure.\n\nThe palette is **five warm stones plus ink**. The canvas is `{colors.bg-primary}` — a warm sandstone off-cream. A slightly deeper stone `{colors.bg-secondary}` provides subtle region differentiation (image placeholders, team photo frames). Ink `{colors.text-primary}` is the headline color; medium gray `{colors.text-secondary}` is body. A warmer taupe `{colors.accent}` carries labels, attribution, and small numerals. The lightest taupe `{colors.line}` is the universal 1px line color. There are no accent colors in the populist sense — no red, no orange, no blue. The palette is stone, stone, stone, ink, ink. The only \"color\" in the system is type contrast.\n\nDepth is **entirely absent in the conventional sense**. There are no shadows, no elevated cards, no rounded surfaces, no gradients. Atmosphere is created by **geometric line decorations**: thin solid and dashed circles in `{colors.line}` at 20–50% opacity drift behind content as if drawn on tracing paper with a compass. These do not create hierarchy — they create mood. The decorative geometry signals \"drafted, considered, precise.\"\n\n**Density philosophy: sparse and breathing.** Cartesian reads as elegant when sparse and broken when crowded. A correctly composed slide pairs one Playfair headline with one body paragraph, or one chart with one short caption, framed by generous negative space. Most slide composition uses centered or asymmetric two-column layouts with `5–6vw` gutters and significant vertical breathing room. The decorative compass arcs reinforce the sparseness — they are most effective when there is room around them. A slide that feels broken in this system is one packed edge-to-edge with content; the correct density is \"one clear idea, well-framed, on stone paper.\"\n\n**Key Characteristics:**\n- Warm sandstone canvas `{colors.bg-primary}` with single 1px taupe `{colors.line}` dividers as the universal structural element.\n- Playfair Display serif at weight 400 for every headline/numeral/quote-mark; Inter sans for every body/label/attribution.\n- Five-tone monochrome palette: two stones, two grays, one ink. No vivid accent colors anywhere.\n- Decorative geometric rings (thin solid + dashed circles, 20–50% opacity) drift behind content as compass-drafted atmosphere.\n- Every label, attribution, and micro-text is uppercase Inter with 2–3px letter-spacing.\n- All borders are 1px hairlines; no element has a thicker border, a shadow, or a rounded fill.\n- Right-edge vertical nav-dot column, bottom-left square nav-arrow buttons, bottom-right mono slide counter.\n- Image placeholders carry a signature pair of crossed 1px diagonals (an X) over a stone-tinted block.\n\n## Colors\n\n### Stone & Ink Palette\n- **Background Primary** (`{colors.bg-primary}` — #EDE8E0): The canvas. Warm sandstone off-cream — closer to \"manila folder\" than \"white paper.\" This is the default slide background.\n- **Background Secondary** (`{colors.bg-secondary}` — #E2DBD1): A slightly deeper stone, used for image placeholders, team-photo frames, and any region that needs subtle separation from the canvas without a colored fill or a border.\n- **Text Primary** (`{colors.text-primary}` — #1A1A1A): Near-black ink. Used for headlines, stat numerals, and the special `{components.horizontal-accent}` rule. The strongest contrast color in the system.\n- **Text Secondary** (`{colors.text-secondary}` — #5A5A5A): Medium warm gray. Used for all body paragraph text. Softer than ink — readable but recedes.\n- **Accent** (`{colors.accent}` — #8A8178): Warm taupe. Used for labels, attributions, agenda numerals, slide counter, card-icon text, team-member role text. The system's \"small text\" color.\n- **Line** (`{colors.line}` — #B8B0A4): Pale taupe. The universal 1px line color: card borders, agenda rules, timeline connectors, team-photo rings, nav-arrow borders, geo-decoration rings.\n\n### Defaults\n- **Default surface background**: `{colors.bg-primary}`.\n- **Default headline color**: `{colors.text-primary}` — always ink, never colored, never accent-taupe. Playfair headlines are uniformly ink.\n- **Default body text color**: `{colors.text-secondary}` (medium warm gray).\n- **Default label / attribution / micro-text color**: `{colors.accent}` (warm taupe).\n- **Default border color**: `{colors.line}` — every 1px structural border. Never use ink-black for borders except the rare `horizontal-accent` rule.\n- **Default secondary surface fill**: `{colors.bg-secondary}`.\n- **Default chart primary series color**: `{colors.text-primary}` (ink).\n- **Default chart comparison/secondary series color**: `{colors.line}` with 5px dashed stroke.\n- **Default chart grid color**: `{colors.bg-secondary}`.\n- **Default chart axis tick color**: `{colors.accent}`.\n\nCartesian has **no accent color in the populist sense.** A red callout, a blue bar, a green stat — none of these exist. When emphasis is needed, increase type size, switch from sans to serif, or add a single 1px `horizontal-accent` rule in ink. Color is not the emphasis mechanism in this system; restraint is.\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face conversation**: `Playfair Display` (serif, weights 400/600/700, italic available) carries every headline, stat numeral, quote mark, card title, and team initial; `Inter` (sans, weights 300/400/500/600) carries every body, subtitle, label, attribution, and micro-text. There is no third face.\n\nPlayfair Display is used almost exclusively at **weight 400 (regular)**. The system deliberately avoids bold Playfair — the didone aesthetic relies on thin-stroke modulation that disappears at heavier weights. Italic Playfair is available (loaded) but not exercised in the default template; reserve it for inline emphasis inside body copy.\n\nInter runs at weight 400 for body, weight 500 for labels and micro-text, weight 600 for the rare emphasized inline element. The contrast between Playfair's high-modulation serif and Inter's even sans is the system's primary typographic rhythm.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3rem, 6vw, 5.5rem) | Playfair Display | 400 | Cover or large opening title |\n| `{typography.h1}` | clamp(2.5rem, 5vw, 4.5rem) | Playfair Display | 400 | Section-opening or large closing headline |\n| `{typography.h2}` | clamp(1.8rem, 3.5vw, 3rem) | Playfair Display | 400 | Primary slide headline |\n| `{typography.h3}` | clamp(1.2rem, 2vw, 1.6rem) | Playfair Display | 400 | Sub-headline within a region |\n| `{typography.card-headline}` | 1.3rem | Playfair Display | 400 | Card or pillar-block title |\n| `{typography.timeline-headline}` | 1.2rem | Playfair Display | 400 | Timeline-step or phase headline |\n| `{typography.stat-figure}` | 2rem | Playfair Display | 400 | Numerical stat figure (typically inline in a stats cluster) |\n| `{typography.team-initial}` | 2rem | Playfair Display | 400 | Initial letter centered inside a team-photo circle |\n| `{typography.agenda-numeral}` | 1.5rem | Playfair Display | 400 | Ordinal numeral preceding an agenda row |\n| `{typography.quote-mark}` | 5rem | Playfair Display | 400 | Opening quotation glyph for a pull-quote |\n| `{typography.subtitle}` | clamp(1rem, 1.5vw, 1.3rem) | Inter | 400 | Subtitle paragraph below a display headline |\n| `{typography.body}` | clamp(0.9rem, 1.2vw, 1.1rem) | Inter | 400 | Standard paragraph body |\n| `{typography.body-sm}` | 0.9rem | Inter | 400 | Compact body inside cards or timeline items |\n| `{typography.attribution}` | 0.85rem | Inter | 400 | Attribution line below a quote, with 2px tracking + uppercase |\n| `{typography.label}` | 0.75rem | Inter | 500 | Section label / eyebrow above a headline, with 3px tracking + uppercase |\n| `{typography.micro}` | 0.7rem | Inter | 400 | Image label, slide counter, smallest chrome text |\n\n### Defaults\n- **Default size for the primary slide headline**: `{typography.h2}` (clamp 1.8–3rem).\n- **Default size for a cover or large opening headline**: `{typography.h1}` (clamp 2.5–4.5rem); for the most expansive cover, `{typography.display}` (clamp 3–5.5rem).\n- **Default size for paragraph body**: `{typography.body}` (clamp 0.9–1.1rem).\n- **Default size for any inline label or eyebrow**: `{typography.label}` (0.75rem) — always 3px tracking + uppercase.\n- **Default weight for any Playfair headline**: 400. Don't reach for 600 or 700.\n- **Default weight for body**: 400.\n- **Default weight for labels/micro**: 500.\n- **Default size for a stat numeral inside a stats cluster**: `{typography.stat-figure}` (2rem). Cartesian does not have a hero-stat-numeral pattern (no 5–7rem display stat); stats are presented as inline ranks at modest scale.\n\nWhen unsure, reach for `{typography.h2}` for the slide's primary text moment, not `{typography.h3}` (which is a sub-headline within a region).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Playfair headline, stat, quote, card title, and initial is set at weight 400.** Bold Playfair does not exist in this system. The thin-stroke didone aesthetic is the identity.\n- **Every Playfair element is set in sentence case (or true title case for proper nouns).** Uppercase Playfair is not used.\n- **Every Inter label, attribution, and micro-text element is uppercase with 2–3px letter-spacing.** Labels at 3px tracking; attributions and micro at 2px. Without the tracking, Inter caps read as untreated.\n- **Every Playfair element is rendered in `{colors.text-primary}` (ink).** Headlines are never accent-taupe and never gray. The exception is decorative initial letters inside a circular `card-icon` or `team-photo`, where the letterform is rendered in `{colors.accent}`.\n- **Every 1px structural border uses `{colors.line}`.** Other border colors do not exist except for the rare `horizontal-accent` rule in ink.\n- **Every card, image-placeholder, team-photo, and nav-arrow border is 1px solid.** Thicker borders do not exist in this system.\n- **Charts use ink-black for the primary series and dashed taupe (5px, 5px) for the comparison series.** This pair is the only chart-color rule.\n\n### Typography Principles\nThe Playfair-400 + Inter-400 combination is the system's voice. Switching either family or jumping Playfair to weight 700 reads as a different design system. Italic emphasis is permitted via inline `<em>` inside body copy (Inter italic) — italic Playfair is loaded but reserved for rare uses. Underline is not used.\n\nLine-height stays open: headlines at 1.1, body at 1.6. The wide body line-height is part of the breathing-room aesthetic.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, visibility visible) at a time. Transitions are 0.6s opacity + visibility fades.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-y}` | 4vh | Default vertical slide padding |\n| `{spacing.pad-x}` | 4vw | Default horizontal slide padding |\n| `{spacing.gap-xl}` | 6vw | Major two-column gutter (most spacious) |\n| `{spacing.gap-lg}` | 5vw | Standard two-column or grid gutter |\n| `{spacing.gap-md}` | 3vw | Card-grid gutter |\n| `{spacing.gap-sm}` | 2vh | Agenda row vertical padding, attribution spacing |\n| `{spacing.card-pad}` | 4vh 2vw | Internal padding for content cards |\n\nHeadlines typically carry a 2–3vh margin-bottom from labels above and a 2vh margin-bottom from body below. Section headers above 3-card or 4-team grids carry a 6vh margin-bottom from the grid (significant breathing room).\n\n### Decorative Geometry Layer\nCartesian's signature is its **drafting-paper geometric decoration**. Every slide may layer one or more of:\n- A large ringed `geo-decoration` anchored to a corner (typically 30–50vw diameter) with an inner dashed ring at ~80% diameter (the `::before` pseudo).\n- A `vertical-line` at ~8vw from the left edge running floor-to-ceiling at 30% opacity.\n- A `horizontal-accent` (a single short black 1px line) anchored at 15vh from the bottom-left.\n- A centered `geo-ring` (50vw circle) on closing or contemplative slides.\n\nThese elements have **no informational role** — they create atmosphere. Slides without any geometric decoration are valid; over-decoration (more than two geo elements per slide) breaks the restraint.\n\n### Chrome\nThe system's chrome is minimal:\n- Right-edge vertical column of small `nav-dot` indicators (8px circles in taupe).\n- Bottom-left pair of square `nav-arrow` buttons (40×40, 1px taupe border, transparent fill).\n- Bottom-right `slide-counter` text in Inter at 0.75rem with 2px tracking in `{colors.accent}`.\n\nThere is no top chrome bar, no persistent header, no footer rule.\n\n## Depth and Elevation\n\n### Flat Plane (Only Technique)\nCartesian has no shadows, no elevated cards, no rounded surfaces, no gradients. Every element sits on a single plane.\n\nHierarchy is constructed from:\n- **Type contrast** — Playfair serif vs Inter sans; size scale from 5rem down to 0.7rem.\n- **1px hairline dividers** — agenda rows, timeline rule, card outlines, image-placeholder outlines, stats top-border, team-photo rings, nav-arrow borders.\n- **Color tone** — ink vs gray vs taupe.\n- **Negative space** — generous padding around every element.\n- **Geometric atmosphere** — compass-drafted rings behind content suggest depth without creating it.\n\nIntroducing a `box-shadow`, an elevated card, or a soft gradient breaks the restraint that defines the system.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 50% (circle) | Every circular element: `card-icon` (40px), `team-photo` (12vw), `nav-dot` (8px), `geo-circle`, `geo-arc`, `geo-decoration`, `geo-ring` |\n| 0 | Everything else: cards, image-placeholders, nav-arrows, agenda rows, timeline, stat-blocks, chart container |\n\nThe system uses **only two radius values**: 50% (true circle) or 0 (sharp rectangle). Soft-rounded corners do not exist.\n\n### Border Weights\n- **1px solid `{colors.line}`** — the universal structural border. Used on every card, image-placeholder, team-photo ring, nav-arrow, agenda row bottom, timeline rule, stats top, geo-circle, geo-decoration.\n- **1px dashed `{colors.line}`** — used on `geo-arc` and the inner `::before` ring inside `geo-decoration` / `geo-ring`. Dashed signals \"construction line / arc.\"\n- **1px solid `{colors.text-primary}`** — used only on the rare `horizontal-accent` decorative rule. The system's only ink-black line.\n- **Chart bar/line stroke widths** — Chart.js series at 1px (bar borders), 2px (line series). Comparison series at 2px dashed (5px dash, 5px gap).\n\nAll structural borders are `{colors.line}`. Thicker borders, colored borders, and dashed structural borders (other than geo-arcs) do not exist.\n\n### Decorative Element Types\n\n**Geometric ring (geo-circle / geo-decoration / geo-ring)** — Thin 1px taupe circles in various sizes (10vw, 30vw, 50vw) at 20–50% opacity. Typically paired with an inner dashed `::before` ring at 70–80% of the outer diameter, suggesting compass construction with both a primary and an offset arc. Anchored to corners or centers; sits behind content with `z-index: 0` and `pointer-events: none`.\n\n**Vertical line** — A single 1px taupe column anchored at ~8vw from the left slide edge, running floor-to-ceiling at 30% opacity. Suggests a drafting-paper alignment guide. Optional per slide.\n\n**Horizontal accent** — A single 20vw × 1px black line anchored 15vh from the bottom-left of a slide. The system's only ink-black line — used as a strong terminal accent rule on cover or closing layouts. Use sparingly.\n\n**Image placeholder** — A solid `{colors.bg-secondary}` block with two 150% diagonal 1px taupe lines crossed at +30° and -30° via `::before` / `::after`, forming an X. Centers a small uppercase Inter label (\"Visual Reference\" or similar). The X pattern is the signature image-not-yet-wired treatment.\n\n**Team-photo frame** — A 12vw circular block in `{colors.bg-secondary}` with a 1px taupe ring, holding a single Playfair-400 initial at 2rem in `{colors.accent}` centered. Used as portrait placeholder.\n\n**Card** — A 1px taupe-bordered block with a semi-transparent white interior fill (`{colors.white-overlay}`) that lets the canvas tone bleed through subtly. The faint white fill is what differentiates a card from a bare region; remove the fill and the card disappears.\n\n**Agenda row** — A flex row containing a Playfair `{typography.agenda-numeral}` in `{colors.accent}` at left, then a label at right, with 2vh padding and a 1px taupe bottom border. Stacked rows form an agenda list.\n\n**Timeline** — A 1px taupe top-border across a flex row of evenly-distributed timeline items; each item carries a small Inter `year` label in taupe, a Playfair `{typography.timeline-headline}`, and an Inter body paragraph. The hairline is the only timeline structure — there are no nodes, no markers, no dots.\n\n**Stats cluster** — A flex row of stat items separated by `gap-md`, framed by a 1px taupe top border, holding inline `{typography.stat-figure}` Playfair numerals with small uppercase Inter labels in taupe below.\n\n**Quote mark** — A 5rem Playfair quote glyph at 50% opacity in taupe, positioned above a Playfair `{typography.h2}` headline + a small uppercase taupe attribution below.\n\n**Chart** — Chart.js bar or line chart with ink-black primary series and dashed taupe comparison series. Grid lines in `{colors.bg-secondary}`. Axis ticks in `{colors.accent}`. Always rendered without fill on the primary series (or with a 5% ink-tinted fill on line charts).\n\n## Do's and Don'ts\n\n### Do\n- Use a single 1px line in `{colors.line}` for every structural separator — agenda rule, timeline connector, card border, stats top, team-photo ring. The 1px hairline is Cartesian's identity.\n- Set every Playfair headline, stat, quote mark, and card title at weight 400. Don't reach for bold; the thin-stroke didone aesthetic depends on it.\n- Render every headline in `{colors.text-primary}` (ink). Playfair never appears in taupe or color.\n- Render every label, attribution, agenda numeral, and micro-text in `{colors.accent}` (taupe) with uppercase + 2–3px letter-spacing.\n- Layer decorative geometric rings (solid + dashed) at 20–50% opacity behind content for atmosphere. One or two geo elements per slide; never more.\n- Pair Playfair Display (serif headlines) with Inter (sans body). The two-face pairing is fixed.\n- Use the crossed-diagonal X pattern inside image placeholders. It is the system's signature placeholder treatment.\n- Let slides breathe — sparse layouts with generous negative space are the correct density.\n- Use `{colors.bg-secondary}` as the fill for image placeholders and team-photo frames — a subtle stone, not white, not gray.\n- Use a single `horizontal-accent` (20vw × 1px ink line) sparingly as a strong terminal rule on cover or closing compositions.\n\n### Don't\n- Don't introduce a populist accent color. No red, no orange, no blue, no green. The palette is stone-on-stone with ink for headlines.\n- Don't render Playfair headlines in `{colors.accent}` (taupe). Headlines are ink; taupe is reserved for small text.\n- Don't bold any Playfair element. Weight 400 is the standing rule; bold breaks the didone aesthetic.\n- Don't add shadows, elevated cards, or gradient fills. Cartesian is flat; depth comes from geometry and type, not z-axis.\n- Don't use rounded corners on cards or rectangles. The only round shapes are true circles (radius 50%).\n- Don't use thick borders (2px+). Every structural border is 1px.\n- Don't crowd the slide. Sparse breathing layouts read as elegant; packed layouts read as broken.\n- Don't pair Playfair with a different sans companion. The Inter pairing is fixed.\n- Don't render labels or micro-text in sentence case. Small Inter text is always uppercase + 2–3px tracking.\n- Don't add more than two geo decorations per slide — restraint is the rule; over-decoration reads as cluttered.\n\n## Responsive Behavior\n\nCartesian is a viewport-fluid 1920×1080 presentation system using `vw` / `vh` units and `clamp()` throughout. There is a single `@media (max-aspect-ratio: 4/3)` breakpoint that collapses two-column grids to single-column, hides the timeline rule (which would lose meaning when stacked), and stacks team and card grids vertically. The system is otherwise responsive without breakpoints.\n\n### Scaling Behavior\n- Display headlines scale from 2.5rem at minimum viewport to 5.5rem at maximum via `clamp()`.\n- Body text scales from 0.9rem to 1.1rem.\n- Padding uses `vh` / `vw` units that scale linearly with viewport.\n- The 1px borders, 8px nav dots, and 40px nav arrows are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Nav dots at right edge can be clicked to jump to specific slides.\n- Nav arrows at bottom-left are clickable; hover state inverts background to ink and text to cream.\n- Slide counter at bottom-right shows current / total with 2-digit zero-padding.\n\n### Charts\nCharts are rendered with Chart.js (loaded via CDN). The two chart types in the source are bar and line; both follow the ink-primary / dashed-taupe-comparison convention. Custom font settings inject Inter into Chart.js label rendering.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Playfair Display 400) | Playfair Display | 思源宋体 Noto Serif SC 700 | Google Fonts |\n| Body / Label (Inter 400–500) | Inter | 思源宋体 Noto Serif SC 400 | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin font in the same `font-family` stack so Latin glyphs render in Playfair / Inter and CJK glyphs fall through to Noto Serif SC automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400..700;1,400..700&family=Inter:wght@300..600&family=Noto+Serif+SC:wght@400;700&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Playfair Display\", \"Noto Serif SC\", serif;\n  --font-body: \"Inter\", \"Noto Serif SC\", sans-serif;\n}\n/* Headlines use Noto Serif SC 700; body uses Noto Serif SC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.75 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase, and Cartesian already favors generous leading.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs. Keep the 2–3px tracking only on uppercase Latin labels.\n- **Text-transform**: drop `text-transform: uppercase` on any label/attribution/micro when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nNoto Serif SC (思源宋体) is the only mainstream Hanzi serif with the same restrained editorial register Cartesian needs — its modulated horizontal-thin / vertical-thick strokes echo Playfair's didone aesthetic, and its uniformly even cadence matches Cartesian's \"museum-catalog\" voice. Using NSC at weight 700 for headlines preserves the visual mass of the Latin display while NSC 400 carries body with the same quiet warmth Inter provides. The five-stone palette absorbs Hanzi cleanly because every glyph stays in ink or taupe — no candy fills to negotiate. The decorative compass-arc geometry layer is content-agnostic and works identically in any language. Avoid bolding Hanzi (the Chinese-typography equivalent of Cartesian's \"no bold Playfair\" rule); rely on size and the 1px line dividers for hierarchy.\n\n### Known CJK Gap\n\nNoto Serif SC is the only Hanzi serif loaded — there is no italic axis (Chinese type historically has no italic), so the rare italic Playfair `<em>` moment loses its emphasis when the body falls through to NSC. Substitute a single-character span colored in `{colors.accent}` (taupe), or wrap the emphasized phrase in faint brackets 「」, to recover emphasis. NSC's 700 weight is the heaviest available — the system's restraint-through-400-weight rule naturally extends to Chinese, so this is rarely a gap in practice.\n\n## Iteration Guide\n\n1. Every new structural separator uses a 1px solid `{colors.line}` border. No exceptions.\n2. Every new headline uses Playfair Display at weight 400 in `{colors.text-primary}`. Don't bold; don't color.\n3. Every new small text element (label, attribution, micro) uses Inter uppercase with 2–3px letter-spacing in `{colors.accent}`.\n4. Every new body paragraph uses Inter weight 400 in `{colors.text-secondary}`, with line-height 1.6.\n5. Every new card uses 1px taupe border + semi-transparent white overlay fill. No shadow, no radius.\n6. New circular elements (icons, photos, decorative rings) use border-radius 50% with 1px taupe ring.\n7. New geometric decorations stay subtle: 1 or 2 per slide, at 20–50% opacity, behind content (z-index 0, pointer-events none).\n8. New chart series follow the ink-primary / dashed-taupe-comparison convention. Don't introduce colored chart series.\n9. New layouts respect the breathing-room density rule — sparse beats dense in Cartesian.\n10. The `horizontal-accent` 20vw ink line is the system's only \"ink rule\" — use it sparingly as a terminal accent, never as a routine divider.\n\n## Known Gaps\n\n- The Chart.js library is loaded via CDN; new chart types beyond bar and line require manual configuration matching the ink-primary / dashed-taupe-comparison aesthetic.\n- The decorative `geo-decoration` and `geo-ring` `::before` inner-ring pattern is hardcoded in CSS; size variants beyond what the source exercises require new style rules.\n- The team-photo placeholder shows a single Playfair initial in taupe; real portrait insertion requires replacing the initial with an `<img>` and adjusting the circular crop.\n- The chart axis label colors and grid colors are hardcoded inline in the Chart.js options blocks (rather than reading from CSS variables) — restyling requires editing JS, not CSS.\n- The image-placeholder X pattern (crossed +30°/-30° diagonals) is rendered via `::before` / `::after` with fixed 150% widths; resizing the placeholder beyond the source dimensions may require recomputing the rotation angle to maintain edge-touch.\n- Italic Playfair is loaded but not exercised in any default rule; it is available for inline `<em>` emphasis in body copy but the system itself does not author any italic text.\n- The `vertical-line` and `horizontal-accent` decorative elements have hardcoded position values (8vw from left, 15vh from bottom); using them off-default-position requires per-instance style overrides.\n- The slide-counter `currentSlide` / `totalSlides` IDs are referenced in the JS but the system has no internal slide-name registry; new slides simply increment by their DOM order.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/preview.md":"# Cartesian Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/cartesian/design.md`\n- Preview card: `bold-template-pack/templates/cartesian/preview.md`\n\n## Selection Metadata\n\n- Slug: `cartesian`\n- Tagline: Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried.\n- Mood: quiet, considered, elegant, warm-minimal\n- Tone: classical, literary, restrained, confident-quiet\n- Formality: high\n- Density: low\n- Scheme: light\n- Best for: Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks. Also a strong choice for editorial features, founder reflections, or any deck where restraint is the message — including across tech and finance.\n- Avoid for: Decks that need visual heat, multiple accents, or a sense of urgency — the warm-neutral palette is intentionally low-energy.\n\n## Visual Snapshot\n\nA quiet, museum-catalog editorial system built on Playfair Display serif headlines, Inter sans body, and a five-tone warm-stone palette. The aesthetic is \"consulting deck meets architectural monograph\" — minimal geometric line decorations (thin circles, dashed arcs, vertical and horizontal hairlines) drift behind content, suggesting drafting paper and compass work. Every divider is a single 1px line in a muted taupe; nothing is bold, nothing is loud. The cultural reference is Massimo Vignelli's editorial work, the Cooper Hewitt catalog, and pencil-and-tracing-paper urban planning documents.\n\nCartesian is a quiet museum-catalog editorial system. Its defining premise is restraint through 1px lines. Every structural element — list separators, agenda rules, timeline connectors, card borders, table dividers — is a single 1px line in a muted taupe {colors.line}. There are no thick borders, no fills, no shadows, no rounded surfaces. Hierarchy is built through type contrast and negative space; depth does not exist in the conventional sense.\n\n## Preview Ingredients\n\n- Palette: bg-primary #EDE8E0; bg-secondary #E2DBD1; text-primary #1A1A1A; text-secondary #5A5A5A; accent #8A8178; line #B8B0A4\n- Typography: Playfair Display; Inter\n- Signature move: Warm sandstone canvas {colors.bg-primary} with single 1px taupe {colors.line} dividers as the universal structural element.\n- Signature move: Playfair Display serif at weight 400 for every headline/numeral/quote-mark; Inter sans for every body/label/attribution.\n- Signature move: Five-tone monochrome palette: two stones, two grays, one ink. No vivid accent colors anywhere.\n- Signature move: Decorative geometric rings (thin solid + dashed circles, 20–50% opacity) drift behind content as compass-drafted atmosphere.\n- Signature move: Every label, attribution, and micro-text is uppercase Inter with 2–3px letter-spacing.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/design.md":"---\nversion: alpha\nname: Cobalt Grid\ndescription: \"A Japanese-magazine trend-report system built on warm cream paper, electric cobalt ink, and a graph-paper grid that lives permanently behind every slide. Newsreader serif headlines tower at 18vh while DM Mono carries chrome and ticker text. The signature decoration is a pixel-glitch column — vertical scanlines stair-stepped down the right edge of declarative slides — paired with QR-style 8×8 grid patches. The cultural reference is WIRED Japan, Shift magazine, and architectural trend reports printed in two-color risograph: cream + one cobalt.\"\n\ncolors:\n  paper: \"#F0EBDE\"\n  paper-2: \"#E6E0CE\"\n  ink: \"#1F2BE0\"\n  ink-soft: \"#5560E5\"\n  grid: \"rgba(31, 43, 224, 0.10)\"\n  ink-faint: \"rgba(31, 43, 224, 0.18)\"\n\ncolor-aliases:\n  rule: ink\n  bg: paper\n\ntypography:\n  display-hero:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(100px, min(11vw, 18vh), 200px)\"\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.008em\n  display-closing:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(72px, min(8.4vw, 14vh), 180px)\"\n    fontWeight: 400\n    lineHeight: 0.96\n    letterSpacing: -0.005em\n  display-chapter:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(56px, min(6vw, 10vh), 130px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.005em\n  display-quote:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(50px, min(5.6vw, 9vh), 110px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n  display-manifesto:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(56px, min(6.4vw, 11vh), 120px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n  headline:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(46px, min(4.8vw, 8.2vh), 92px)\"\n    fontWeight: 400\n    lineHeight: 0.95\n  headline-index:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(48px, min(5vw, 8.5vh), 100px)\"\n    fontWeight: 400\n    lineHeight: 0.95\n  vbig-numeral:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(110px, min(11vw, 18vh), 240px)\"\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.015em\n  ed-callout:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(28px, min(2.8vw, 4.6vh), 50px)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  row-headline:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(26px, 2vw, 40px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n  table-name:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(20px, 1.6vw, 28px)\"\n    fontWeight: 400\n    lineHeight: 1.15\n  micro:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(12px, 0.9vw, 14px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.16em\n    textTransform: uppercase\n  micro-strong:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(13px, 1vw, 16px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  micro-sm:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(11px, 0.75vw, 12px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  body:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(14px, 0.95vw, 15px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body-lede:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(15px, 1vw, 18px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body-stat:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(15px, 1vw, 17px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  mono-tag:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(13px, 0.9vw, 15px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.04em\n  mono-chrome:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.82vw, 13px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.06em\n  mono-tick:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(12px, 0.85vw, 14px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.04em\n\nspacing:\n  edge: \"clamp(36px, 3.6vw, 80px)\"\n  edge-inner: \"clamp(60px, 8vw, 160px)\"\n  pad-top: \"clamp(76px, 8vh, 130px)\"\n  pad-bottom: \"clamp(100px, 10vh, 150px)\"\n  gap-lg: \"clamp(28px, 3vw, 56px)\"\n  gap-md: \"clamp(20px, 2.2vh, 36px)\"\n  gap-sm: \"clamp(14px, 1.6vh, 24px)\"\n  gap-xs: \"clamp(10px, 1.2vh, 18px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  graph-paper-grid:\n    backgroundImage: \"linear-gradient(to right, {colors.grid} 1px, transparent 1px), linear-gradient(to bottom, {colors.grid} 1px, transparent 1px)\"\n    backgroundSize: \"clamp(28px, 2.2vw, 44px) clamp(28px, 2.2vw, 44px)\"\n    description: \"Permanent ::before pseudo on every stage. 28–44px squared graph paper grid in 10%-opacity cobalt that sits behind every slide at z-index 1. Cannot be turned off — it is the canvas tone.\"\n  hairlines:\n    height: \"1.5px\"\n    background: \"{colors.ink}\"\n    description: \"Two persistent slim cobalt rules — one at the top of every slide (≈2.6vh from top) and one near the bottom (≈2vh from bottom) — both inset from edges by {spacing.edge}. They frame the slide composition.\"\n  pagenum:\n    position: absolute\n    right: \"{spacing.edge}\"\n    bottom: \"clamp(48px, 4.8vh, 76px)\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.82vw, 13px)\"\n    color: \"{colors.ink}\"\n    letterSpacing: 0.06em\n    description: \"Mono cobalt page number anchored bottom-right above the bottom hairline. One per slide.\"\n  nav-hint:\n    position: fixed\n    left: \"{spacing.edge}\"\n    bottom: \"clamp(48px, 4.8vh, 76px)\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(10px, 0.75vw, 12px)\"\n    color: \"{colors.ink}\"\n    letterSpacing: 0.08em\n    opacity: 0.4\n    description: \"Mono cobalt navigation hint anchored bottom-left, mirrors pagenum.\"\n  pixel-glitch:\n    description: \"Stair-stepped column of vertical scanlines, rendered as inline SVG. Each stepped rectangle contains evenly-spaced cobalt vertical lines on cream. Sits absolutely positioned (typically right edge) at z-index 3, decorative only. Size ranges from 16vw × full-height (compact decoration) to 32vw × full-height (signature cover decoration).\"\n  qr-block:\n    display: grid\n    gridTemplateColumns: \"repeat(8, 1fr)\"\n    gridTemplateRows: \"repeat(8, 1fr)\"\n    gap: 1.5px\n    background: \"{colors.paper}\"\n    padding: 4px\n    boxShadow: \"0 0 0 1.5px {colors.paper}\"\n    description: \"8×8 QR-style mosaic of cobalt cells on cream background. Paper-fill ensures it reads as a discrete patch when overlapping the pixel-glitch column. Typical size 58–100px square.\"\n  topbar-rule:\n    borderBottom: \"1.5px solid {colors.ink}\"\n    paddingBottom: \"clamp(12px, 1.4vh, 22px)\"\n    description: \"1.5px cobalt rule under the topbar of an index, data, or table layout. Below the rule sits a Newsreader headline (left) and a mono lab-tag (right).\"\n  row-divider:\n    borderBottom: \"1px solid {colors.ink-faint}\"\n    description: \"Faint 18%-opacity cobalt rule between rows of an index list, table, or ledger.\"\n  attribution-rule:\n    borderTop: \"1px solid {colors.ink}\"\n    paddingTop: \"clamp(10px, 1.2vh, 18px)\"\n    description: \"Solid cobalt rule above a quote attribution or manifesto byline.\"\n  pixel-stack-bars:\n    description: \"Vertical bar chart rendered as a column of stacked 'cells' — flex column-reverse with 3px gaps, each cell a small horizontal block. Cells default to 10%-opacity cobalt (the grid color); .on cells fill solid cobalt to represent the value. Reads as a pixelated bar made of grid units.\"\n  ledger-row:\n    display: grid\n    gridTemplateColumns: \"76px 0.6fr 1.4fr 0.7fr 0.5fr\"\n    gap: \"clamp(14px, 1.4vw, 28px)\"\n    borderBottom: \"1px solid {colors.ink-faint}\"\n    description: \"Dense table row carrying a num-tag, name (Newsreader), description (Hanken Grotesk), mood-tag, and delta-tag (mono with up/down arrow prefix). Header row uses 1.5px solid cobalt bottom border.\"\n  vstack-label:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    writingMode: \"vertical-rl\"\n    textOrientation: \"mixed\"\n    letterSpacing: 0.04em\n    description: \"Vertical-orientation mono label column anchored to the right edge of a slide. Replaces the Korean vertical column of the reference with mono catalogue text rotated 90°.\"\n  delta-up:\n    content: \"↑ \"\n    description: \"Up arrow prefix via ::before on a mono delta tag in the ledger table.\"\n  delta-down:\n    content: \"↓ \"\n    opacity: 0.6\n    description: \"Down arrow prefix via ::before, dimmed 40% to read as decline.\"\n  delta-flat:\n    content: \"— \"\n    opacity: 0.6\n    description: \"Em-dash prefix via ::before, dimmed 40% to read as neutral.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCobalt Grid is a **two-color trend-report editorial system** built on three immovable foundations: a warm cream paper canvas (`{colors.paper}`), an electric cobalt ink (`{colors.ink}`), and a **permanent graph-paper grid** that sits behind every slide. The grid is not optional decoration — it is rendered via a `::before` pseudo on every `.stage` and cannot be turned off. The aesthetic is \"two-color risograph monograph\": cream + cobalt only, with the grid lending the entire deck the feel of architectural tracing paper or a Japanese trend report.\n\nThe typeface stack is a deliberate three-face conversation. **Newsreader** — a contemporary literary serif with low-modulation roman letterforms — carries every display moment, every section headline, every stat numeral. Newsreader is used at weight 400 only; the type relies on size to assert hierarchy, not weight. **Hanken Grotesk** — a humanist sans — carries every body paragraph, every uppercase label, every micro-text. Hanken runs at 400 for body and 600 for labels. **DM Mono** — a monospace — carries every chrome element: page numbers, mono tags, axis ticks, vertical-stack labels, delta arrows in tables. The three-face system creates the system's identity: serif statements + sans bodies + mono chrome.\n\nThe palette is **strictly two-color**: cream and cobalt, with a softer cobalt `{colors.ink-soft}` and two opacity tones (`{colors.grid}` at 10%, `{colors.ink-faint}` at 18%) for atmospheric and structural use. There are no accent colors. Cobalt is the *only* ink color — for headlines, body, borders, page numbers, the graph paper, the pixel-glitch decoration, and the QR patches. The cream paper is the *only* surface. Even the pixel-stack bar chart uses cobalt at two opacities (10% off, 100% on) to render data.\n\nDepth is **flat with structural rules**. There are no drop shadows, no elevated cards, no rounded surfaces. Hierarchy comes from:\n- The 1.5px cobalt **hairline frame** (top and bottom of every slide).\n- 1.5px cobalt **topbar rule** under section headers.\n- 1px faint-cobalt **row dividers** between table or index entries.\n- The 10%-opacity **graph paper grid** behind everything.\n- The pixel-glitch and QR-block **decorative SVG patches** as compositional accents.\n\n**Density philosophy: medium to dense, structured by the grid.** Cobalt Grid is built for editorial density — magazine spreads, trend indices, data ledgers. A correctly composed slide pairs one large Newsreader headline with multiple structured information rows (an index of six trends, a ledger of eight entries, a chart with eight pixel-stack bars). The graph paper underneath actively wants to be filled; sparse slides leave too much grid showing and read as wireframe. The exception is the manifesto, quote, and colophon layouts, which deliberately leave space open and let the graph paper breathe. Choose density by slide type: chapter / manifesto / quote / colophon are sparse; index / data / table are dense.\n\n**Key Characteristics:**\n- Cream paper canvas `{colors.paper}` with electric cobalt `{colors.ink}` as the only ink — strictly two-color.\n- Permanent 28–44px graph-paper grid in 10%-opacity cobalt behind every slide.\n- Top and bottom 1.5px cobalt hairlines frame every slide with `{spacing.edge}` insets.\n- Newsreader serif at weight 400 for every display/headline; Hanken Grotesk sans for body/labels; DM Mono for all chrome.\n- Pixel-glitch vertical scanline columns and QR-style 8×8 mosaics as the system's signature decorative patches.\n- Display type can be enormous — `{typography.display-hero}` up to 18vh (≈194px on a 1080-tall display) and `{typography.vbig-numeral}` to 240px.\n- Hanken labels are uppercase at 0.16–0.18em letter-spacing; mono tags carry 0.04–0.06em tracking.\n- Pixel-stack bar charts render data as stacks of grid-unit cells (cobalt on / cobalt-10% off).\n- Page number bottom-right, mono navigation hint bottom-left, both anchored above the bottom hairline.\n\n## Colors\n\n### Two-Color System\n- **Paper** (`{colors.paper}` — #F0EBDE): The canvas. Warm cream off-white with a clear yellow-warm bias — closer to \"newsprint paper\" than \"blank white.\" Used as the universal slide background and as the fill behind QR-blocks so they read as discrete patches against the pixel-glitch column.\n- **Paper-2** (`{colors.paper-2}` — #E6E0CE): A slightly deeper cream. Defined in the palette but used sparingly — available for subtle region differentiation when needed.\n- **Ink** (`{colors.ink}` — #1F2BE0): Electric cobalt / royal blue. The *only* ink color in the system. Used for all headlines, all body text, all borders, all chrome, the graph paper grid, the pixel-glitch decoration, and the QR patches. The high saturation is intentional — at full strength it reads as risograph-printed cobalt, not navy blue.\n- **Ink Soft** (`{colors.ink-soft}` — #5560E5): A lighter cobalt for secondary marks. Defined in the palette but used sparingly — most softened cobalt in the system comes from opacity-on-ink rather than this dedicated tone.\n- **Grid** (`{colors.grid}` — rgba(31, 43, 224, 0.10)): 10%-opacity cobalt. Used exclusively for the permanent graph-paper grid behind every slide, and for the \"off\" cells in pixel-stack bar charts.\n- **Ink Faint** (`{colors.ink-faint}` — rgba(31, 43, 224, 0.18)): 18%-opacity cobalt. Used exclusively for the faint row dividers in index lists, tables, and ledgers — between rows that share the same dense information layer.\n\n### Defaults\n- **Default slide surface**: `{colors.paper}`.\n- **Default headline color**: `{colors.ink}` — every Newsreader serif headline is cobalt. There is no other headline color.\n- **Default body text color**: `{colors.ink}` — body is also cobalt, just smaller. Cobalt-on-cream is the system's only text relationship.\n- **Default label / mono / micro color**: `{colors.ink}`.\n- **Default border color (structural rules)**: `{colors.ink}` at 1.5px solid.\n- **Default border color (row dividers within dense lists)**: `{colors.ink-faint}` at 1px solid.\n- **Default grid color**: `{colors.grid}` — never visible at full strength; never disabled.\n- **Default chart data color (on)**: `{colors.ink}`.\n- **Default chart data color (off)**: `{colors.grid}`.\n\nThe system has **no accent color** in the populist sense. A second color does not exist — adding a red callout, a green stat, or a yellow highlight breaks the risograph two-color identity. When emphasis is needed, increase type size, switch from Hanken to Newsreader, add a mono delta arrow, or use opacity to dim rather than coloring to highlight.\n\n## Typography\n\n### Font Family\nThe system runs on a **three-face conversation**: `Newsreader` (serif, weight 400 / 500 italic) carries every display and headline; `Hanken Grotesk` (sans, weights 400–700) carries every body, label, and micro-text; `DM Mono` (monospace, 400–500) carries every chrome element. There is no fourth face.\n\nNewsreader's roman letterforms run at weight 400 almost exclusively — the type relies on size to assert hierarchy, not weight. Italic Newsreader is loaded (300/400/500 italic axis) and is used inside the manifesto's `.roman` modifier (which is *non-italic* — the modifier flips the italic body back to roman for an inline pull moment) and is available for inline `<em>` emphasis. Hanken Grotesk carries body at 400 and labels at 600. DM Mono provides chrome at 400.\n\nThe serif/grotesk/mono three-way pairing is the system's primary typographic rhythm. Each face has a strict role: serif = statement, grotesk = supporting copy, mono = catalogue chrome.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.vbig-numeral}` | clamp(110px, min(11vw, 18vh), 240px) | Newsreader | 400 | Largest numerical display — hero stat figure |\n| `{typography.display-hero}` | clamp(100px, min(11vw, 18vh), 200px) | Newsreader | 400 | Largest title — cover or hero display |\n| `{typography.display-closing}` | clamp(72px, min(8.4vw, 14vh), 180px) | Newsreader | 400 | Conclusive headline on a colophon/closing layout |\n| `{typography.display-chapter}` | clamp(56px, min(6vw, 10vh), 130px) | Newsreader | 400 | Section-opening or chapter title |\n| `{typography.display-manifesto}` | clamp(56px, min(6.4vw, 11vh), 120px) | Newsreader | 400 | Manifesto statement display |\n| `{typography.display-quote}` | clamp(50px, min(5.6vw, 9vh), 110px) | Newsreader | 400 | Pull-quote body |\n| `{typography.headline-index}` | clamp(48px, min(5vw, 8.5vh), 100px) | Newsreader | 400 | Index or trend-list section header |\n| `{typography.headline}` | clamp(46px, min(4.8vw, 8.2vh), 92px) | Newsreader | 400 | Data, table, or chart section header |\n| `{typography.ed-callout}` | clamp(28px, min(2.8vw, 4.6vh), 50px) | Newsreader | 400 | Editorial subtitle below a hero title |\n| `{typography.row-headline}` | clamp(26px, 2vw, 40px) | Newsreader | 400 | Per-row headline inside an index list |\n| `{typography.table-name}` | clamp(20px, 1.6vw, 28px) | Newsreader | 400 | Per-row name cell inside a ledger table |\n| `{typography.body-lede}` | clamp(15px, 1vw, 18px) | Hanken Grotesk | 400 | Lead paragraph below a chapter title |\n| `{typography.body-stat}` | clamp(15px, 1vw, 17px) | Hanken Grotesk | 400 | Descriptive paragraph next to a stat figure |\n| `{typography.body}` | clamp(14px, 0.95vw, 15px) | Hanken Grotesk | 400 | Standard paragraph body |\n| `{typography.micro-strong}` | clamp(13px, 1vw, 16px) | Hanken Grotesk | 600 | Largest uppercase label / kicker |\n| `{typography.micro}` | clamp(12px, 0.9vw, 14px) | Hanken Grotesk | 600 | Standard uppercase label / lab-tag |\n| `{typography.micro-sm}` | clamp(11px, 0.75vw, 12px) | Hanken Grotesk | 600 | Smallest uppercase label / table header |\n| `{typography.mono-tag}` | clamp(13px, 0.9vw, 15px) | DM Mono | 400 | Mono catalogue tag, num-tag in an index row |\n| `{typography.mono-tick}` | clamp(12px, 0.85vw, 14px) | DM Mono | 400 | Mono chart tick label, vertical-stack-label entry |\n| `{typography.mono-chrome}` | clamp(11px, 0.82vw, 13px) | DM Mono | 400 | Mono page number, navigation hint, secondary meta |\n\n### Defaults\n- **Default size for the primary section headline (index, data, table)**: `{typography.headline}` (clamp 46–92px) or `{typography.headline-index}` for index layouts.\n- **Default size for a cover or hero display**: `{typography.display-hero}` (clamp 100–200px).\n- **Default size for a chapter or section-opener title**: `{typography.display-chapter}` (clamp 56–130px).\n- **Default size for paragraph body**: `{typography.body}` (clamp 14–15px).\n- **Default size for any inline uppercase label**: `{typography.micro}` (clamp 12–14px) at weight 600 with 0.16em tracking.\n- **Default size for any mono chrome (page number, tag, tick)**: `{typography.mono-tag}` (clamp 13–15px).\n- **Default weight for Newsreader**: 400. Newsreader bold is not used.\n- **Default weight for Hanken body**: 400.\n- **Default weight for Hanken label**: 600.\n\nWhen unsure, reach for `{typography.headline}` (clamp 46–92px) for the slide's primary section header, not `{typography.display-chapter}` (which is for chapter-opening moments only).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Newsreader element is set at weight 400.** Newsreader at 600/700 is not used in this system. The literary-serif aesthetic depends on the open roman letterforms at modest weight.\n- **Every Newsreader element is rendered in `{colors.ink}` (cobalt).** A cream serif headline does not exist.\n- **Every Hanken label, kicker, lab-tag, and micro-text is uppercase with at least 0.16em letter-spacing** at weight 600. Hanken caps without tracking read as untreated.\n- **Every DM Mono element is rendered in `{colors.ink}` with 0.04–0.08em letter-spacing.** Mono with tighter tracking reads as code, not editorial.\n- **Every display element carries negative letter-spacing.** Display-hero at -0.008em, vbig-numeral at -0.015em, chapter / closing / manifesto / quote at -0.005em.\n- **The graph-paper grid is permanent on every slide.** The `.stage::before` rule is not overridable per-slide — every composition sits on top of it.\n- **The top and bottom hairlines frame every slide.** The `.hairlines::before` and `.hairlines::after` rules apply by default; they should not be suppressed.\n- **Page number sits above the bottom hairline with clear vertical space.** The bottom hairline anchors at `bottom: clamp(20px, 2vh, 32px)`; the page number anchors at `bottom: clamp(48px, 4.8vh, 76px)` — they must not collide.\n\n### Typography Principles\nThe Newsreader-400 + Hanken-600-uppercase-tracked + DM-Mono-tracked combination is the system's voice. Switching any of those three face/weight/case rules reads as a different design system. Italic is permitted via Newsreader italic (loaded) for inline `<em>` and for the manifesto's editorial italic-with-`.roman`-flip treatment. Underline is not used.\n\nLine-height collapses at the top: display-hero / vbig-numeral at 0.92, display-chapter at 1.0, body at 1.5. The tight display + open body contrast is what gives the system its trend-report rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, pointer-events auto) at a time. Transitions are 280ms opacity fades.\n\nA `.stage` wrapper sits inside `.deck` (`position: fixed; inset: 0`) and provides the cream background plus the permanent `::before` graph-paper grid.\n\n### Edge and Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.edge}` | clamp(36px, 3.6vw, 80px) | Standard slide edge inset for content, page number, hairlines |\n| `{spacing.edge-inner}` | clamp(60px, 8vw, 160px) | Tighter inset used for manifesto-style centered statements |\n| `{spacing.pad-top}` | clamp(76px, 8vh, 130px) | Top padding inside index/data/table frame, below the top hairline |\n| `{spacing.pad-bottom}` | clamp(100px, 10vh, 150px) | Bottom padding inside index/data/table frame, above the bottom hairline |\n| `{spacing.gap-lg}` | clamp(28px, 3vw, 56px) | Large gap between major regions inside a slide |\n| `{spacing.gap-md}` | clamp(20px, 2.2vh, 36px) | Standard inter-element spacing |\n| `{spacing.gap-sm}` | clamp(14px, 1.6vh, 24px) | Tight spacing — chrome bar inner gap, attribution-to-quote gap |\n| `{spacing.gap-xs}` | clamp(10px, 1.2vh, 18px) | Vertical-stack row gap, smallest inter-element gap |\n\n### Universal Chrome Frame\nEvery slide carries a four-piece chrome frame:\n1. **Top hairline** — 1.5px solid cobalt at ≈2.6vh from top, inset by `{spacing.edge}` left/right.\n2. **Bottom hairline** — 1.5px solid cobalt at ≈2vh from bottom, inset by `{spacing.edge}` left/right.\n3. **Page number** — DM Mono cobalt anchored bottom-right, ≈4.8vh from bottom (above the bottom hairline).\n4. **Nav hint** — DM Mono cobalt at 40% opacity anchored bottom-left, same vertical level as page number.\n\nThis frame is rendered automatically by the `.hairlines` and `.pagenum` / `.nav-hint` rules — every new slide inherits it.\n\nA nested **`.frame` content rectangle** sits inside the chrome on index, data, table, and chapter layouts. It is absolutely positioned with `inset: {spacing.pad-top} {spacing.edge} {spacing.pad-bottom}` and serves as the actual content container.\n\n### Composition Patterns\nWithin the chrome frame, content typically follows one of these compositional moves (not enumerated as available layouts — these are descriptive, not prescriptive):\n- A `topbar` block (Newsreader headline left, mono lab-tag right, 1.5px cobalt rule beneath) above a main content region.\n- A pixel-glitch column anchored to the right edge of the content region (or occasionally the left, as on the colophon).\n- A QR-block patch as a small punctuation mark (typically top-right corner).\n- A vertical-stack mono label column anchored to one edge.\n- A dense ledger or index of equal-flex rows separated by faint cobalt dividers.\n\n## Depth and Elevation\n\n### Flat With Structural Rules\nCobalt Grid has no drop shadows, no elevated cards, no rounded surfaces, no gradients. Every element sits on a single plane.\n\nDepth signals are entirely structural:\n- **1.5px cobalt rules** — top/bottom slide hairlines, topbar rule, attribution rule.\n- **1px faint cobalt dividers** — row separators inside index lists, tables, and ledgers.\n- **Graph-paper grid** — the 10%-opacity cobalt background creates a sense of measured plane.\n- **Pixel-glitch decoration** — vertical scanline columns add visual texture without z-axis elevation.\n- **QR-block patches** — read as discrete graphic objects against the grid+glitch background due to their paper-fill and 1.5px paper-color outset shadow (which is functionally an \"anti-shadow\" — it pushes the grid away so the QR mosaic stays readable).\n\nThe QR-block's 1.5px paper-color outset is the *only* shadow-like effect in the system, and it exists to preserve readability against the pixel-glitch column, not to create elevation. There is no z-axis depth.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 0 | Every structural element — frames, cards, ledger rows, QR cells, pixel-glitch rectangles, charts, tables |\n| 50% (circle) | None — Cobalt Grid has no circular elements |\n\nThe system uses **zero rounded corners**. Every shape is a strict rectangle. This is unusual for editorial systems and is part of the trend-report identity.\n\n### Border Weights\n- **1.5px solid `{colors.ink}`** — primary structural rules: top/bottom slide hairlines, topbar bottom rule, table head row bottom border, chart baseline rule.\n- **1px solid `{colors.ink}`** — attribution rules above quote bylines, manifesto attribution top border.\n- **1px solid `{colors.ink-faint}`** (18% opacity) — faint row dividers between dense list / table / ledger entries.\n- **1px solid `{colors.grid}`** (10% opacity) — the permanent graph-paper grid behind every slide.\n- **1.5px box-shadow in `{colors.paper}`** — QR-block readability outset (functional, not decorative).\n\nAll structural borders are cobalt. Colored borders do not exist (there is no \"colored\" — only cobalt at different opacities).\n\n### Decorative Element Types\n\n**Pixel-glitch column** — A stair-stepped vertical column rendered as inline SVG. Each step is a rectangle filled with evenly-spaced cobalt vertical scanlines on cream. Steps decrease in width as the column descends (or vice versa), creating a \"glitch\" pixelation effect. Anchored to one edge of a slide (typically right), absolutely positioned, z-index 3, pointer-events disabled. Decorative only — sizes range from compact 16vw × full-height secondary use to 32vw × full-height signature cover decoration. Opacity 0.6–1.0 depending on context (lower opacity when used as background, full opacity when used as primary decoration).\n\n**QR-block patch** — An 8×8 grid of cells (some `.on` = solid cobalt, some default = paper) forming a QR-code-like mosaic. Sits over a paper-fill background with 4px internal padding and 1.5px paper-color outset (which preserves readability when overlapping the pixel-glitch column). Typical size 58–100px square. Used as compositional punctuation — typically top-right corner.\n\n**Vertical-stack label column** — A column of DM Mono labels written with `writing-mode: vertical-rl` and `text-orientation: mixed`, rotating Latin text 90° clockwise. Anchored to right edge, vertically centered, evenly spaced. Reads as catalogue-style metadata stacked along the slide edge.\n\n**Topbar (with rule)** — A flex row containing a Newsreader headline left and a small mono lab-tag right, separated from the content below by a 1.5px solid cobalt bottom border. The universal section-header pattern.\n\n**Frame** — An absolutely-positioned content container with `inset: {spacing.pad-top} {spacing.edge} {spacing.pad-bottom}`. Holds the slide's actual content while keeping it clear of the hairline frame, page number, and nav hint.\n\n**Index list** — A 2×3 grid of equal-flex rows, each row a 56px num-tag column + a content column with a Newsreader row-headline and a Hanken body paragraph, separated by 1px faint-cobalt bottom borders.\n\n**Pixel-stack bar chart** — A row of 8 vertical \"stacks,\" each a flex column-reverse of small horizontal cells (default 10%-cobalt off, .on solid cobalt). Cell counts represent values. A 1.5px cobalt top border with mono tick labels sits beneath the bars as the axis. Renders data as pixelated bars made of grid units — directly echoes the pixel-glitch decoration.\n\n**Ledger table** — A flex column of dense rows, each row a 5-column grid (76px num-tag / 0.6fr name / 1.4fr description / 0.7fr mood-tag / 0.5fr delta-tag), separated by 1px faint-cobalt bottom borders. Header row uses 1.5px solid cobalt. Delta tags use `↑` / `↓` / `—` prefixes via `::before`.\n\n**Manifesto** — A centered statement in `{typography.display-manifesto}` Newsreader with an italic `<em>` body containing inline `.roman` (non-italic) emphasis moments. Below: a 1px cobalt top border with a Hanken who-tag and a mono meta-tag side-by-side.\n\n**Quote** — A Hanken kicker above a `{typography.display-quote}` Newsreader pull, with a 1px cobalt top-border attribution row beneath. Paired with a compact pixel-glitch column at the right edge.\n\n**Colophon** — Right-aligned closing layout. A large `{typography.display-closing}` Newsreader title aligned right with a kicker above. Pixel-glitch column anchored to left edge (mirroring the cover). Page footer with 3–4 column grid of paragraph credits.\n\n## Do's and Don'ts\n\n### Do\n- Set every Newsreader element at weight 400 in `{colors.ink}`. The thin roman serif at modest weight is the literary register's identity.\n- Render every label, kicker, and micro-text in Hanken Grotesk weight 600 uppercase with 0.16em+ letter-spacing in `{colors.ink}`.\n- Render every chrome element (page number, mono tag, tick label, vertical-stack) in DM Mono with 0.04–0.08em tracking in `{colors.ink}`.\n- Keep the permanent graph-paper grid behind every slide. The grid is the system — disabling it breaks the identity.\n- Maintain the top and bottom 1.5px cobalt hairlines on every slide, with the page number and nav hint sitting above the bottom hairline.\n- Use the pixel-glitch column as the system's primary decorative move on declarative slides (cover, chapter, quote, colophon).\n- Pair pixel-glitch with a QR-block patch when the composition needs a discrete graphic anchor — the QR's paper-fill keeps it readable against the glitch lines.\n- Use the `topbar + 1.5px cobalt rule` pattern as the standard section-header treatment on index, data, and table layouts.\n- Use 1px faint-cobalt dividers between rows of dense lists, tables, and ledgers.\n- Render charts as pixel-stack columns of grid cells (cobalt on / cobalt-10% off). The pixel-stack bar treatment echoes the decorative glitch and unifies the visual language.\n\n### Don't\n- Don't introduce a second ink color. The system is strictly two-color: cream paper + cobalt ink. A second hue breaks the risograph identity.\n- Don't render a Newsreader headline at weight 600 or 700. The 400-only rule is a signature.\n- Don't disable or hide the graph-paper grid. It is the canvas tone, not optional decoration.\n- Don't suppress the top/bottom hairlines on a slide. They are the frame — every slide carries them.\n- Don't round any corner. Every shape is a strict rectangle; the system has zero circular elements.\n- Don't add drop shadows, elevated cards, or gradient fills. Depth is structural (rules + grid + glitch), not z-axis.\n- Don't use Hanken caps without 0.16em+ tracking. Untracked Hanken caps read as untreated.\n- Don't put the page number directly on the bottom hairline. It sits at `bottom: clamp(48px, 4.8vh, 76px)` with clear space above the hairline.\n- Don't render the QR-block without its paper-fill and 1.5px paper outset. The fill is what preserves QR readability against the pixel-glitch column.\n- Don't crowd the manifesto, quote, or colophon layouts. Those layouts deliberately leave grid showing — over-stuffing them breaks the contemplative register.\n\n## Responsive Behavior\n\nCobalt Grid is a viewport-fluid 1920×1080 presentation system using `clamp()` and viewport-relative units throughout. There are no explicit responsive breakpoints in the source — every dimension scales between a min and max.\n\n### Scaling Behavior\n- Display-hero scales from ~100px at minimum viewport to ~200px at maximum.\n- Body text scales from 14px to 15px (deliberately narrow range — body stays compact).\n- Graph-paper grid scales from 28px cells (smaller viewports) to 44px cells (larger viewports), maintaining roughly 50–80 cells across the slide width.\n- Edge insets scale from 36px to 80px.\n- The 1.5px hairlines and 1px row dividers are fixed and do not scale.\n\n### Presenter Behavior\n- Slides cross-fade via 280ms opacity transitions.\n- Navigation is JS-driven (the source includes a `.deck` / `.slide.active` pattern); typical keyboard arrow / spacebar conventions apply.\n- The nav hint at bottom-left displays interaction guidance in mono cobalt at 40% opacity.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080. The grid and hairline overlays should render correctly in PDF capture (no blend modes or filters).\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Newsreader 400) | Newsreader | 思源宋体 Noto Serif SC 700 | Google Fonts |\n| Body / Label (Hanken Grotesk 400–600) | Hanken Grotesk | 思源宋体 Noto Serif SC 400 | Google Fonts |\n| Chrome / Mono (DM Mono) | DM Mono | DM Mono (Latin/digit only — keep mono chrome in Latin) | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin font in the same `font-family` stack so Latin glyphs render in Newsreader / Hanken Grotesk and CJK glyphs fall through to NSC automatically. Mono chrome stays Latin/digit-only — page numbers, ticks, and vertical-stack tags do not need a CJK fallback (and DM Mono has no CJK glyphs by design).\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,400..500;1,6..72,400..500&family=Hanken+Grotesk:wght@400..700&family=DM+Mono:wght@400..500&family=Noto+Serif+SC:wght@400;700&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Newsreader\", \"Noto Serif SC\", Georgia, serif;\n  --font-body: \"Hanken Grotesk\", \"Noto Serif SC\", sans-serif;\n  --font-mono: \"DM Mono\", ui-monospace, monospace;\n}\n/* Headlines use Noto Serif SC 700; body uses Noto Serif SC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.7 (from 1.5) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 0.16em+ Hanken caps tracking shatters Hanzi cadence). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any micro/label/kicker when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nNoto Serif SC (思源宋体) is the natural Hanzi partner for Newsreader — both are quiet literary serifs with thin-thick modulation that holds at very large display sizes (up to 18vh / 240px on the vbig-numeral). The cobalt-on-cream two-color rule absorbs Chinese without negotiation because there's only one ink color to assign. NSC 700 carries display moments where Newsreader 400 would have at 100–200px; NSC 400 carries body and labels. The DM Mono chrome layer (page numbers, vertical-stack tags, ticks) intentionally stays Latin/digit-only — `编号 001` is rendered as Latin \"001\" in DM Mono with the Hanzi prefix in Hanken/NSC, preserving the mono catalogue chrome's \"technical spec\" voice. The graph-paper grid, pixel-glitch column, and QR-block decoration are content-agnostic and read identically in any language. Vertical-stack labels written with `writing-mode: vertical-rl` work for Hanzi too — Chinese is the original vertical script — but mixing Latin and Hanzi in the same vertical run will rotate the Hanzi to upright while keeping Latin rotated 90°; isolate runs by language.\n\n### Known CJK Gap\n\nNoto Serif SC has no italic axis (Chinese type historically has no italic), so the manifesto layout's italic-Newsreader-with-`.roman`-flip emphasis pattern collapses when content is Hanzi. Substitute a weight contrast (NSC 700 vs NSC 400) or a faint-cobalt tone (`{colors.ink-faint}`) to recover the emphasis register. Newsreader's optical-size axis (6..72) has no NSC equivalent — the literary \"this is a small caption\" optical refinement is unavailable for Hanzi, but at NSC's quality this is rarely noticeable.\n\n## Iteration Guide\n\n1. Every new slide inherits the permanent graph-paper grid, the top and bottom 1.5px cobalt hairlines, the page number bottom-right, and the nav hint bottom-left. Don't author these per-slide — they live on `.stage` and `.hairlines`.\n2. Every new headline uses Newsreader at weight 400 in `{colors.ink}`. Don't bold; don't color.\n3. Every new label uses Hanken Grotesk weight 600 uppercase with 0.16em+ letter-spacing in `{colors.ink}`.\n4. Every new chrome element uses DM Mono in `{colors.ink}` with 0.04–0.08em tracking.\n5. New content slides on index / data / table layouts use a topbar (Newsreader headline left + Hanken lab-tag right) with a 1.5px cobalt bottom rule.\n6. New chart slides use the pixel-stack treatment — cobalt on / cobalt-10% off cells in column-reverse stacks. Don't introduce filled bar charts in a single solid block.\n7. New declarative slides (cover, chapter, quote, colophon) use a pixel-glitch column as the primary decoration. Pair with a QR-block when the composition needs a discrete graphic anchor.\n8. New row dividers in dense lists use 1px solid `{colors.ink-faint}` (18% opacity), not full-strength cobalt. Full-strength cobalt is reserved for major structural rules.\n9. New components inherit the zero-radius, no-shadow, no-gradient flatness. If a component breaks any of these, redesign it before adding.\n10. The system has one ink color (`{colors.ink}`) and one surface (`{colors.paper}`). New compositions should never introduce a third color or a third surface tone (paper-2 is available but rarely needed).\n\n## Known Gaps\n\n- The pixel-glitch column is rendered as inline SVG hand-authored per usage; there is no generative component — adjusting the stair-step pattern requires editing the SVG markup directly.\n- The QR-block 8×8 cell pattern is hand-authored per usage; each instance places `.on` cells manually. There is no QR-code generation logic.\n- The pixel-stack bar chart cell counts are hardcoded in markup; there is no data-binding layer translating numeric values to cell-on counts.\n- The vertical-stack label column uses `writing-mode: vertical-rl`; this works in modern browsers but rendering of mixed Latin/CJK in this orientation may vary across rendering engines.\n- The manifesto layout's italic-with-`.roman`-flip pattern (italic Newsreader body containing inline non-italic `.roman` spans for emphasis) is the inverse of typical italic emphasis — the rule lives in the manifesto-specific CSS and is not generalized.\n- The 1.5px paper-color outset on the QR-block is a `box-shadow` used as an anti-shadow (it extends the paper fill outward to clear the grid behind the QR cells). This is the only `box-shadow` in the system and it should not be repurposed for elevation.\n- The colophon's pixel-glitch column anchors to the left edge (mirroring the cover); other slides anchor to the right edge — the directionality is per-slide and should be considered when authoring new declarative layouts.\n- The graph-paper grid cell size scales between 28–44px via `clamp` — at extreme aspect ratios, the grid count across the slide width may feel uneven.\n- The system loads three Google Fonts families (Newsreader, Hanken Grotesk, DM Mono) with multiple weights — initial render requires successful font load to avoid Georgia/Helvetica fallback shifting the visual rhythm.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/preview.md":"# Cobalt Grid Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/cobalt-grid/design.md`\n- Preview card: `bold-template-pack/templates/cobalt-grid/preview.md`\n\n## Selection Metadata\n\n- Slug: `cobalt-grid`\n- Tagline: Electric cobalt serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules.\n- Mood: editorial, design-research, studious, modernist, tech-print, monochrome\n- Tone: considered, literary, studious, quietly-modern, editorial\n- Formality: high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report. Strong for studio annuals, agency capabilities decks, design-research publications, architecture / art / academic decks, and any deck wanting one strict accent colour and a printed-ledger calmness rather than corporate polish.\n- Avoid for: Decks that need warmth, multi-colour energy, or a casual / playful voice — the strict cobalt + cream + grid palette is intentionally austere.\n\n## Visual Snapshot\n\nA Japanese-magazine trend-report system built on warm cream paper, electric cobalt ink, and a graph-paper grid that lives permanently behind every slide. Newsreader serif headlines tower at 18vh while DM Mono carries chrome and ticker text. The signature decoration is a pixel-glitch column — vertical scanlines stair-stepped down the right edge of declarative slides — paired with QR-style 8×8 grid patches. The cultural reference is WIRED Japan, Shift magazine, and architectural trend reports printed in two-color risograph: cream + one cobalt.\n\nCobalt Grid is a two-color trend-report editorial system built on three immovable foundations: a warm cream paper canvas ({colors.paper}), an electric cobalt ink ({colors.ink}), and a permanent graph-paper grid that sits behind every slide. The grid is not optional decoration — it is rendered via a ::before pseudo on every .stage and cannot be turned off. The aesthetic is \"two-color risograph monograph\": cream + cobalt only, with the grid lending the entire deck the feel of architectural tracing paper or a Japanese trend report.\n\n## Preview Ingredients\n\n- Palette: paper #F0EBDE; paper-2 #E6E0CE; ink #1F2BE0; ink-soft #5560E5\n- Typography: Newsreader; Hanken Grotesk; DM Mono\n- Signature move: The 1.5px cobalt hairline frame (top and bottom of every slide).\n- Signature move: 1.5px cobalt topbar rule under section headers.\n- Signature move: 1px faint-cobalt row dividers between table or index entries.\n- Signature move: The 10%-opacity graph paper grid behind everything.\n- Signature move: The pixel-glitch and QR-block decorative SVG patches as compositional accents.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/design.md":"---\nversion: alpha\nname: Coral\ndescription: \"A bold magazine-poster system that runs on three surface registers — coral fire, ink black, and warm cream — animated by Bebas Neue display caps and a constant 45° diagonal hatch pattern. Inter handles body copy; Bebas Neue handles every headline, stat, title, and meta-figure at heavy letter-spacing. The cultural reference is mid-century travel posters, Saul Bass film titles, and modern editorial sport magazines: solid color planes meeting at hard edges, oversized condensed caps as architectural elements, and a single coral hue used both as accent and as full-slide environment.\"\n\ncolors:\n  coral: \"#E85D5D\"\n  coral-dark: \"#D44A4A\"\n  cream: \"#F5F0E8\"\n  cream-dark: \"#E8E0D4\"\n  black: \"#1A1A1A\"\n  gray: \"#6B6B6B\"\n  light-gray: \"#B0B0B0\"\n  white: \"#FFFFFF\"\n\ncolor-aliases:\n  bg: cream\n  ink: black\n\ntypography:\n  hero-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(120px, 9vw, 13vh)\"\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 4px\n  jumbo-feature:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(80px, 15vw, 200px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 12px\n  display-statement:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(42px, 7vw, 100px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  section-headline:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(40px, 6vw, 80px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  column-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(36px, 5vw, 72px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  stat-numeral:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(48px, 7vw, 96px)\"\n    fontWeight: 400\n    lineHeight: 1\n  card-stat:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(36px, 4vw, 56px)\"\n    fontWeight: 400\n    lineHeight: 1\n  sidebar-value:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(28px, 3vw, 48px)\"\n    fontWeight: 400\n    lineHeight: 1\n  card-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(24px, 2.5vw, 36px)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 1px\n  bar-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(28px, 4vw, 56px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  meta-figure:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(44px, 3.5vw, 5.5vh)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  meta-date:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(38px, 3vw, 4.8vh)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  background-numeral:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(100px, 15vw, 200px)\"\n    fontWeight: 400\n    lineHeight: 1\n    description: \"Decorative oversized numeral placed inside a coral region at rgba(0,0,0,0.12) — wallpaper opacity. Sits behind the actual column title at full opacity.\"\n  giant-mark:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(140px, 20vw, 280px)\"\n    fontWeight: 400\n    lineHeight: 1\n    description: \"Oversized quote mark or single character placed inside a coral region at opacity 0.35 — half-decorative, half-content.\"\n  body:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(15px, 1.4vw, 20px)\"\n    fontWeight: 400\n    lineHeight: 1.7\n  body-sm:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(13px, 1.1vw, 16px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-light:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(20px, 2.5vw, 36px)\"\n    fontWeight: 300\n    lineHeight: 1.5\n    description: \"Lighter-weight Inter for pull quotes — weight 300 to contrast against the Bebas Neue dominant voice.\"\n  item-text:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(14px, 1.2vw, 18px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  card-text:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(13px, 1.1vw, 16px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  bar-meta:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 2px\n    textTransform: uppercase\n  section-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 4px\n    textTransform: uppercase\n  item-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"11px\"\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  meta-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"11px\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  sidebar-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 1px\n  quote-attribution:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"14px\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  quote-role:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 1px\n\nspacing:\n  pad-y: \"clamp(40px, 6vh, 80px)\"\n  pad-x: \"clamp(40px, 8vw, 100px)\"\n  pad-y-tight: \"clamp(28px, 4.5vh, 60px)\"\n  pad-col: \"clamp(32px, 4vw, 60px)\"\n  gap-grid: \"32px\"\n  gap-md: \"40px\"\n  card-pad: \"clamp(24px, 3vh, 40px)\"\n  bar-pad: \"clamp(24px, 4vh, 40px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  diagonal-hatch:\n    background: \"repeating-linear-gradient(45deg, transparent, transparent 20px, rgba(0,0,0,0.06) 20px, rgba(0,0,0,0.06) 40px)\"\n    description: \"Signature 45° diagonal hatch pattern in 6%-opacity black. Applied as a pseudo-element overlay on coral regions to provide texture without changing the surface color. Variant: -45° hatch on coral quote-left, with 30/60px stride. Variant: 90° vertical hatch in 10%-opacity black on coral gradient regions, with 60/62px stride. The hatch is a per-region atmospheric treatment, not a slide-level overlay.\"\n  accent-line:\n    width: \"80px\"\n    height: \"4px\"\n    background: \"{colors.coral}\"\n    description: \"Solid 80×4 coral rectangle used as a sub-headline accent rule. Closing or section-divider variant uses 60×4.\"\n  quote-accent:\n    width: \"60px\"\n    height: \"4px\"\n    background: \"{colors.coral}\"\n    description: \"60×4 coral rectangle placed above a quote attribution as a terminal accent.\"\n  title-rule:\n    width: \"100%\"\n    height: \"3px\"\n    background: \"{colors.black}\"\n    opacity: 0.15\n    description: \"Full-width 3px ink rule at 15% opacity used as a subtle horizontal divider beneath the hero title on the cover composition.\"\n  card:\n    background: \"{colors.white}\"\n    padding: \"{spacing.card-pad}\"\n    borderTop: \"5px solid {colors.coral}\"\n    description: \"Column card — white surface with a 5px solid coral top border as the only border on the element. No shadow, no radius.\"\n  sidebar-item:\n    background: \"{colors.white}\"\n    padding: \"20px 24px\"\n    borderLeft: \"4px solid {colors.coral}\"\n    description: \"Compact data tile — white surface with a 4px solid coral left border. Holds a Bebas value and an Inter label.\"\n  card-icon:\n    width: \"48px\"\n    height: \"48px\"\n    background: \"{colors.coral}\"\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"24px\"\n    color: \"{colors.white}\"\n    description: \"48px solid coral square (no radius) containing a 1-character Bebas Neue glyph in white. Used as a card mark.\"\n  timeline-line:\n    height: \"4px\"\n    background: \"{colors.black}\"\n    description: \"Horizontal 4px solid ink line spanning the timeline width. A ::after pseudo overlays a repeating linear-gradient (20px ink + 10px transparent) to create a dashed effect. The dashed pattern is rendered through the gradient, not the border-style.\"\n  t-point-dot:\n    width: \"20px\"\n    height: \"20px\"\n    borderRadius: \"50%\"\n    background: \"{colors.coral}\"\n    border: \"4px solid {colors.cream}\"\n    description: \"Timeline node — 20px coral circle with a 4px cream halo, sitting on the timeline-line.\"\n  nav-dot:\n    width: \"10px\"\n    height: \"10px\"\n    borderRadius: \"50%\"\n    background: \"rgba(255, 255, 255, 0.3)\"\n    border: \"2px solid rgba(255, 255, 255, 0.5)\"\n    description: \"Small 10px nav indicator. White-translucent default on dark/coral surfaces; ink-translucent .dark variant on cream surfaces. Active state fills with coral.\"\n  nav-arrow:\n    width: \"44px\"\n    height: \"44px\"\n    borderRadius: \"50%\"\n    background: \"rgba(255, 255, 255, 0.1)\"\n    border: \"2px solid rgba(255, 255, 255, 0.3)\"\n    description: \"44px circular nav button with translucent fill and 2px translucent border. .dark variant for cream surfaces. Hover state fills with coral.\"\n  zigzag-layer:\n    description: \"SVG zigzag pattern overlay used decoratively on the cover's coral top-section. Renders as a thin black zigzag line at low opacity behind the title.\"\n  pattern-overlay:\n    description: \"Decorative repeating-pattern overlay applied to feature regions — typically 90° vertical hatch in ink at 10% opacity on coral gradient backgrounds. Separate from the 45° diagonal-hatch which is the system's primary texture.\"\n  bar-fill:\n    description: \"Chart.js horizontal bar fills use solid coral (#E85D5D) as the primary series color, with a darker coral (#D44A4A) for comparison or secondary series.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCoral is a **bold magazine-poster system** built on three surface registers — coral fire, ink black, and warm cream — that meet at hard edges. The defining structural premise is **solid color planes**: a single slide will split into a coral half + a cream half + an ink top-section, with each region a flat solid color holding its own self-contained composition. There are no gradient transitions between regions; the meeting point of two colors is the layout. This is the populist counterpart to a more refined editorial system — closer to a sports magazine cover than a literary catalogue.\n\nThe typeface stack is a **two-face hierarchy**. **Bebas Neue** — a tall narrow condensed sans display face — carries every headline, every stat, every column title, every meta figure, every section name. Bebas runs at its single available weight (400) and is treated as architectural — heavy letter-spacing (2–12px), oversized scale (up to 200px on jumbo features), and always set in its native uppercase. **Inter** — a contemporary humanist sans — carries every body paragraph, every label, every micro-text, every attribution. Inter spans weights 300 to 700: 300 for pull-quote bodies, 400 for paragraph body, 600 for meta labels, 700 for section eyebrows. The Bebas/Inter pair creates the system's voice: Bebas declares, Inter explains.\n\nThe palette is **three surfaces + ink + neutrals**. The coral `{colors.coral}` is both *the* accent (a 4px left border on a sidebar tile, a 5px top border on a card, a 48px solid icon square) and an entire slide environment (a full coral panel, the cover's top-section, a coral gradient feature region). The cream `{colors.cream}` is the warm canvas — the magazine paper. Ink `{colors.black}` is the strongest surface, used as full-slide background on quote and statement layouts. White appears only as card fills against coral or cream regions. Two grays (`{colors.gray}`, `{colors.light-gray}`) carry body and meta text.\n\nDepth is **flat with hard color edges**. There are no drop shadows, no rounded surfaces, no soft elevations. Hierarchy comes from:\n- **Solid color region splits** — coral / ink / cream regions meeting at hard edges.\n- **Accent borders** — 4px coral left, 5px coral top, 3px ink top, 4px ink horizontal.\n- **45° diagonal hatch** — a signature 6%-opacity black diagonal repeating pattern overlaid on coral regions, providing texture.\n- **Oversized decorative typography** — background numerals at 12% opacity, giant quote marks at 35% opacity, sitting behind or beside primary content.\n\n**Density philosophy: medium-high, structured by region.** Coral slides are structured rather than dense — each color region holds a self-contained composition (a single column title with one body block, a single stat tile with one label, a single timeline line with five dots). The aesthetic relies on regions feeling fully populated within their boundary, not on the slide overall being crowded. A correctly composed slide pairs 2–3 substantive regions, each fully expressed. A slide that feels broken is one where a coral region holds only a sparse fragment, or where a cream region attempts to carry too many competing elements. Decorative oversized numerals at 12% opacity behind a region's primary title are the standard \"fill the region\" move when content alone doesn't fully occupy the plane.\n\n**Key Characteristics:**\n- Three-surface system: `{colors.coral}` (fire), `{colors.black}` (ink), `{colors.cream}` (paper) — used as solid regions meeting at hard edges.\n- Bebas Neue uppercase condensed display for every headline/stat/title; Inter sans for every body/label/attribution.\n- 45° diagonal hatch in 6%-opacity black on coral regions as the signature atmospheric texture.\n- Coral as both accent (4–5px borders, 48px icon squares, 4-point timeline dots) and environment (full-region surfaces).\n- Decorative oversized numerals at 12% opacity behind column titles inside coral regions.\n- Oversized quote marks at 35% opacity inside coral regions as half-decorative content.\n- No rounded corners on rectangles; circular shapes only for nav dots, nav arrows, and timeline nodes.\n- Heavy letter-spacing on every Bebas element: 1–4px on most, 12px on the largest feature treatment.\n- Hard-edge color splits (vertical, horizontal, or 40/60 ratios) define slide composition.\n\n## Colors\n\n### Three-Surface System\n- **Coral** (`{colors.coral}` — #E85D5D): The signature color — a warm orange-red, vivid but not neon. Used both as accent (4px sidebar-item left border, 5px card top border, 48px card-icon fill, 80×4 accent line, 60×4 quote accent, timeline-point dot, chart primary series, hover-state fills, section eyebrows, stat-numerals on cream surfaces) and as a full-region surface (cover top-section, two-column left panel, full-width feature region, quote left panel). Defines the system.\n- **Coral Dark** (`{colors.coral-dark}` — #D44A4A): A darker coral variant. Used as the start stop in linear-gradient feature regions (135° from coral-dark to coral), and as the chart secondary/comparison series color.\n- **Cream** (`{colors.cream}` — #F5F0E8): The warm canvas. Used as default slide background, as the cover's bottom-section, as info-bar surfaces, as body text color on ink-black surfaces, and as the timeline-point dot halo.\n- **Cream Dark** (`{colors.cream-dark}` — #E8E0D4): A slightly deeper cream. Available in the palette for subtle region differentiation but sparingly used.\n- **Black** (`{colors.black}` — #1A1A1A): Near-black ink. Used as headline color on cream surfaces, as the full-background ink register for quote and certain feature slides, as timeline-line color, as title-rule color, as decorative background-numeral color (at 12% opacity inside coral regions), and as giant-mark color (at 35% opacity inside coral regions).\n- **Gray** (`{colors.gray}` — #6B6B6B): Mid neutral. Used for body paragraph text on cream surfaces, for meta labels, for sidebar labels, for card body copy, for quote roles.\n- **Light Gray** (`{colors.light-gray}` — #B0B0B0): Pale neutral. Defined in the palette but used sparingly — available for tertiary text where gray is too strong.\n- **White** (`{colors.white}` — #FFFFFF): True white. Used as card fills (sidebar-item, card, column-card), as item-text color on ink surfaces, as nav-dot/nav-arrow translucent fills.\n\n### Defaults\n- **Default slide surface**: `{colors.cream}`. (Cover and feature slides use mixed-surface compositions; statement, quote, and three-column slides default to cream or ink.)\n- **Default headline color on cream surfaces**: `{colors.black}` — Bebas Neue headlines are ink, not coral.\n- **Default headline color on coral surfaces**: `{colors.black}` — ink-on-fire. Bebas on coral is always ink, never white.\n- **Default headline color on ink surfaces**: `{colors.cream}`.\n- **Default body text color on cream surfaces**: `{colors.gray}`.\n- **Default body text color on ink surfaces**: `{colors.cream}`.\n- **Default body text color on coral surfaces**: `{colors.black}` — ink, not white.\n- **Default eyebrow / section-label color**: `{colors.coral}` on cream and ink surfaces; `{colors.black}` on coral surfaces.\n- **Default accent border color**: `{colors.coral}` — 4px left (sidebar tiles), 5px top (cards), 48px solid (icon squares).\n- **Default decorative numeral color inside a coral region**: `rgba(0, 0, 0, 0.12)` (ink at 12% opacity).\n- **Default giant-mark color inside a coral region**: `rgba(0, 0, 0, 0.35)` (ink at 35% opacity).\n- **Default chart primary series color**: `{colors.coral}`.\n- **Default chart comparison series color**: `{colors.coral-dark}`.\n\nThe three surfaces are intermixed by composition: a slide may be split coral/cream, coral/ink, ink/cream, or held to a single surface. There is no semantic mapping between surfaces; each is chosen for compositional balance and contrast.\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face hierarchy**: `Bebas Neue` (display, single weight 400) carries every headline, stat numeral, column title, meta figure, bar title, card stat, sidebar value, and decorative numeral; `Inter` (sans, weights 300 / 400 / 600 / 700) carries every body paragraph, label, eyebrow, meta-label, attribution, role, and chart legend. There is no third face.\n\nBebas Neue is a tall narrow condensed sans display face — its narrow letterforms allow large sizes without overwhelming the slide width, and its single available weight (400) is treated as the system's only weight. Bebas is always set in its native uppercase. The display character of the system comes from heavy letter-spacing (1–4px on standard headlines, 12px on the largest jumbo feature treatment) and oversized scale (up to 200–280px on jumbo / giant-mark moments).\n\nInter carries the supporting voice with weight contrast: 300 for pull-quote bodies (a lighter register against Bebas's dominance), 400 for body paragraphs, 600 for meta labels, 700 for section eyebrows. Italic and underline are not used.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.giant-mark}` | clamp(140px, 20vw, 280px) | Bebas Neue | 400 | Oversized decorative quote mark or feature character inside a coral region |\n| `{typography.jumbo-feature}` | clamp(80px, 15vw, 200px) | Bebas Neue | 400 | Single dominant word filling a feature region |\n| `{typography.background-numeral}` | clamp(100px, 15vw, 200px) | Bebas Neue | 400 | Decorative wallpaper numeral inside a coral region at 12% opacity |\n| `{typography.hero-title}` | min(120px, 9vw, 13vh) | Bebas Neue | 400 | Largest cover title — 3-line title cap-and-line-broken |\n| `{typography.display-statement}` | clamp(42px, 7vw, 100px) | Bebas Neue | 400 | Big declarative statement on a cream surface |\n| `{typography.stat-numeral}` | clamp(48px, 7vw, 96px) | Bebas Neue | 400 | Hero stat figure |\n| `{typography.section-headline}` | clamp(40px, 6vw, 80px) | Bebas Neue | 400 | Primary section headline |\n| `{typography.column-title}` | clamp(36px, 5vw, 72px) | Bebas Neue | 400 | Column or panel title inside a region |\n| `{typography.card-stat}` | clamp(36px, 4vw, 56px) | Bebas Neue | 400 | Per-card stat figure |\n| `{typography.bar-title}` | clamp(28px, 4vw, 56px) | Bebas Neue | 400 | Info-bar title |\n| `{typography.sidebar-value}` | clamp(28px, 3vw, 48px) | Bebas Neue | 400 | Sidebar tile value |\n| `{typography.card-title}` | clamp(24px, 2.5vw, 36px) | Bebas Neue | 400 | Card or column-card title |\n| `{typography.meta-figure}` | min(44px, 3.5vw, 5.5vh) | Bebas Neue | 400 | Cover meta value (location, date, brand) |\n| `{typography.meta-date}` | min(38px, 3vw, 4.8vh) | Bebas Neue | 400 | Cover date variant |\n| `{typography.body-light}` | clamp(20px, 2.5vw, 36px) | Inter | 300 | Pull-quote body (lighter weight against Bebas dominance) |\n| `{typography.body}` | clamp(15px, 1.4vw, 20px) | Inter | 400 | Standard paragraph body |\n| `{typography.item-text}` | clamp(14px, 1.2vw, 18px) | Inter | 400 | Item body on ink surfaces |\n| `{typography.card-text}` | clamp(13px, 1.1vw, 16px) | Inter | 400 | Card body copy |\n| `{typography.body-sm}` | clamp(13px, 1.1vw, 16px) | Inter | 400 | Compact body |\n| `{typography.section-label}` | 12px | Inter | 700 | Section eyebrow above a headline, 4px letter-spacing |\n| `{typography.item-label}` | 11px | Inter | 700 | Item eyebrow in a list, 3px letter-spacing |\n| `{typography.meta-label}` | 11px | Inter | 600 | Cover meta label, 3px letter-spacing |\n| `{typography.quote-attribution}` | 14px | Inter | 600 | Author name below a pull quote, 3px letter-spacing |\n| `{typography.bar-meta}` | 12px | Inter | 400 | Info-bar meta-text, 2px letter-spacing |\n| `{typography.sidebar-label}` | 12px | Inter | 400 | Sidebar tile label, 1px letter-spacing |\n| `{typography.quote-role}` | 12px | Inter | 400 | Author role below quote attribution, 1px letter-spacing |\n\n### Defaults\n- **Default size for the primary section headline**: `{typography.section-headline}` (clamp 40–80px).\n- **Default size for a cover/hero title**: `{typography.hero-title}` (min(120px, 9vw, 13vh)).\n- **Default size for a feature dominant word**: `{typography.jumbo-feature}` (clamp 80–200px) with 12px letter-spacing.\n- **Default size for paragraph body**: `{typography.body}` (clamp 15–20px).\n- **Default size for any uppercase eyebrow / label**: `{typography.section-label}` (12px) at weight 700 with 4px letter-spacing; or `{typography.item-label}` (11px) at weight 700 with 3px letter-spacing for in-list contexts.\n- **Default weight for any Bebas Neue element**: 400 (the only available weight).\n- **Default weight for body**: 400; for pull quotes, 300.\n- **Default weight for labels**: 600 or 700.\n- **Default size for a hero stat figure**: `{typography.stat-numeral}` (clamp 48–96px).\n- **Default size for an in-card stat figure**: `{typography.card-stat}` (clamp 36–56px).\n\nWhen unsure, reach for `{typography.section-headline}` for the slide's primary text moment.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Bebas Neue element is set in its native uppercase.** Bebas Neue in sentence case does not exist — the typeface itself doesn't support it. This is the system's most foundational typographic rule.\n- **Every Bebas Neue element carries letter-spacing of at least 1px.** Standard headlines at 2px, hero-title at 4px, jumbo-feature at 12px. Untracked Bebas reads as untreated.\n- **Every Inter label, eyebrow, and meta-text is uppercase with 1–4px letter-spacing.** Section labels at 4px, item labels at 3px, bar-meta at 2px, sidebar-labels at 1px. Inter caps without tracking break the editorial register.\n- **Every Bebas headline is rendered in `{colors.black}`, `{colors.cream}`, or `{colors.coral}`** based on surface contrast — never gray. Color choice: ink on cream/coral, cream on ink, coral on cream when emphasis is needed.\n- **Every section eyebrow is rendered in `{colors.coral}`** when sitting on cream or ink, or in `{colors.black}` when sitting on coral. Coral-on-coral does not exist.\n- **Every decorative oversized numeral inside a coral region is rendered at `rgba(0, 0, 0, 0.12)`** — the wallpaper-numeral signature. Sits behind primary content at full opacity.\n- **Every giant decorative mark (quote, single character) inside a coral region is rendered at `rgba(0, 0, 0, 0.35)`** — half-decorative, half-content.\n- **Pull-quote bodies use Inter weight 300, not Bebas.** This is the system's primary \"voice break\" — when content needs to feel personal rather than declarative, Inter Light takes over.\n\n### Typography Principles\nThe Bebas-uppercase-tracked + Inter-mixed-weight combination is the system's voice. Switching either face — using a different display sans for headlines, or using Bebas for body — breaks the system entirely. Italic does not appear. Underline does not appear. The only emphasis mechanism is weight (Bebas dominance), case (uppercase always on Bebas + labels), color (coral on cream surfaces), and surface inversion (placing the element in a different region).\n\nLine-height is uniformly tight at the top of the scale: Bebas elements at 0.9–1.0; Inter body at 1.6–1.7. The display compression + open body is what gives the system its magazine-poster rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, visibility visible) at a time. Transitions are 0.6s opacity + visibility fades.\n\nThe system has **no universal chrome bar**. Each slide is its own self-contained composition with its own padding, region structure, and color treatment. Navigation is per-page (nav arrows + nav dots + slide counter) and floats over the active surface with `.dark` variants for cream surfaces.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-y}` | clamp(40px, 6vh, 80px) | Standard vertical slide padding |\n| `{spacing.pad-x}` | clamp(40px, 8vw, 100px) | Standard horizontal slide padding |\n| `{spacing.pad-y-tight}` | clamp(28px, 4.5vh, 60px) | Compact vertical padding (cover bottom-section) |\n| `{spacing.pad-col}` | clamp(32px, 4vw, 60px) | Column padding inside a region |\n| `{spacing.gap-grid}` | 32px | Column-grid gap |\n| `{spacing.gap-md}` | 40px | Chart container internal gap |\n| `{spacing.card-pad}` | clamp(24px, 3vh, 40px) | Card internal padding |\n| `{spacing.bar-pad}` | clamp(24px, 4vh, 40px) | Info-bar internal padding |\n\n### Region Composition\nCoral's primary layout move is **multi-surface composition**. Slides split into regions of solid color, with the boundary between regions defining the layout. Standard splits include:\n- `grid-template-rows: 32% 68%` — top accent strip + main body (cover composition).\n- `grid-template-rows: 1fr auto` — large feature region + bottom info-bar.\n- `grid-template-columns: 1fr 1fr` — equal vertical split (often coral left + ink right).\n- `grid-template-columns: 40% 60%` — narrow accent column + wider content column (quote layout).\n- Single-surface slides — cream or ink as the whole canvas (statement, three-column, timeline layouts).\n\nThe boundary between regions is always a **hard color edge** — no soft transitions, no gradients across the boundary, no rounded corners at the junction. The meeting of two solid colors is the layout structure.\n\n## Depth and Elevation\n\n### Flat With Hard Color Edges\nCoral has no drop shadows, no soft elevations, no rounded surfaces. Every element sits on a single plane.\n\nDepth signals are entirely structural:\n- **Hard color region boundaries** — the primary structural signal.\n- **Accent borders** — 5px coral top on cards, 4px coral left on sidebar tiles, 4px ink horizontal timeline-line, 3px ink at 15% opacity title-rule.\n- **45° diagonal hatch** — 6%-opacity black diagonal repeating-linear-gradient overlay on coral regions creates texture without depth.\n- **Decorative wallpaper typography** — oversized numerals at 12% opacity and giant marks at 35% opacity sit behind primary content as wallpaper, creating a layered effect without z-index trickery.\n\nIntroducing a box-shadow, an elevated card, or a soft gradient breaks the populist-poster aesthetic that defines the system.\n\n### Atmospheric Hatch Variants\nThe 45° diagonal hatch is the system's primary atmospheric treatment, but several stride/angle variants appear:\n- **45° at 20/40px stride** in 6%-opacity black — the standard coral region overlay.\n- **-45° at 30/60px stride** in 6%-opacity black — coral quote-left panel variant.\n- **90° vertical at 60/62px stride** in 10%-opacity black — coral gradient feature-region overlay.\n\nAll hatches are subtle (6–10% opacity black). They provide texture without competing with content.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 50% (circle) | Circular elements only: `nav-dot` (10px), `nav-arrow` (44px), `t-point-dot` (20px timeline node) |\n| 0 | Everything else: every region, every card, every sidebar tile, every icon square, every chart, every accent line, every accent border |\n\nThe system uses **only two radius values**: 50% (true circle) or 0 (sharp rectangle). Soft-rounded corners do not exist. Cards, icon squares, info-bars, and feature regions are all strict rectangles.\n\n### Border Weights\n- **5px solid `{colors.coral}` (top)** — used on card top borders (column-card pattern).\n- **4px solid `{colors.coral}` (left)** — used on sidebar-item left borders.\n- **4px solid `{colors.black}` (horizontal)** — used on timeline-line.\n- **4px solid `{colors.cream}` (ring)** — used as the halo around 20px coral timeline-point dots.\n- **3px solid `{colors.black}` at 15% opacity** — used on title-rule beneath the cover hero title.\n- **2px solid translucent** — used on nav-dot and nav-arrow borders (rgba(255,255,255,0.3–0.5) on dark surfaces; rgba(26,26,26,0.2–0.4) on cream surfaces).\n\nAll borders are either coral, black, cream, or translucent. There is no border-radius on bordered rectangles.\n\n### Decorative Element Types\n\n**45° diagonal hatch** — A `repeating-linear-gradient(45deg, transparent, transparent 20px, rgba(0,0,0,0.06) 20px, rgba(0,0,0,0.06) 40px)` applied as a `::before` pseudo-element overlay on coral regions. The signature atmospheric texture. Variants: -45°, 90° vertical, different stride widths.\n\n**Background numeral** — An oversized Bebas Neue numeral (clamp 100–200px) at `rgba(0, 0, 0, 0.12)` placed inside a coral region. Sits behind the region's primary column-title at full opacity, creating a layered \"ordinal wallpaper\" effect.\n\n**Giant mark** — An oversized Bebas Neue character (clamp 140–280px) at `rgba(0, 0, 0, 0.35)` placed inside a coral region. Used as a half-decorative half-content element, typically a quotation mark on the coral left panel of a quote layout.\n\n**Card (column-card)** — A white-fill rectangle with a 5px coral top border as its only border. Contains a 48px solid coral icon square at top, a Bebas card-title, an Inter card-text body, and a coral card-stat figure at the bottom. The 5px top border is the only chrome — no other border, no shadow, no radius.\n\n**Sidebar item** — A white-fill rectangle with a 4px coral left border as its only border. Contains a Bebas sidebar-value and an Inter sidebar-label. The 4px left border is the only chrome.\n\n**Icon square** — A 48px solid coral rectangle (no radius) containing a 1-character Bebas glyph in white. Used as a card mark.\n\n**Info bar** — A flex row spanning a region's full width, holding a Bebas bar-title left and an uppercase Inter bar-meta right. Cream background; used as a footer band beneath a feature region.\n\n**Timeline** — A 4px solid ink horizontal line spanning the timeline width, with a `::after` repeating-linear-gradient overlay (20px ink + 10px transparent) creating a dashed effect. Timeline points are 20px coral circles with 4px cream halos, distributed evenly along the line.\n\n**Accent line** — An 80×4 solid coral rectangle used as a sub-headline accent rule, or 60×4 for closing/quote contexts. Always coral, always solid, no radius.\n\n**Title rule** — A full-width 3px solid ink line at 15% opacity, used as a subtle horizontal divider beneath the cover hero title.\n\n**Zigzag layer** — An SVG zigzag pattern rendered as a thin ink line at low opacity, overlaid decoratively on the cover's coral top-section.\n\n**Pattern overlay** — A separate repeating-pattern overlay (typically 90° vertical hatch in 10%-opacity ink) applied to coral gradient feature regions. Distinct from the standard 45° diagonal hatch.\n\n## Do's and Don'ts\n\n### Do\n- Compose slides as multi-surface region splits — coral, ink, and cream meeting at hard color edges. The region boundary is the layout structure.\n- Set every Bebas Neue element in its native uppercase with at least 1px letter-spacing — 2px for standard headlines, 4px for hero titles, 12px for jumbo feature treatments.\n- Render every section eyebrow in `{colors.coral}` uppercase Inter weight 700 with 3–4px letter-spacing on cream and ink surfaces.\n- Apply the 45° diagonal hatch (6% opacity black, 20/40px stride) as a `::before` overlay on coral regions for atmospheric texture.\n- Use the 5px coral top border on cards and the 4px coral left border on sidebar tiles as the only chrome on those elements — no other border, no shadow, no radius.\n- Place oversized decorative Bebas numerals at 12% opacity behind column titles inside coral regions when a region needs more visual weight than the title alone provides.\n- Use Inter weight 300 (light) for pull-quote bodies on ink-surface quote layouts — the lighter weight contrasts against Bebas dominance.\n- Render Bebas headlines on coral surfaces in `{colors.black}` (ink-on-fire). White headlines on coral do not exist in this system.\n- Use the coral chart series + coral-dark comparison series convention for any chart data.\n- Use the 48px solid coral icon square (no radius, single white Bebas glyph) as the standard card mark.\n\n### Don't\n- Don't render Bebas Neue in sentence case. The typeface is uppercase only — that is the entire identity.\n- Don't render Bebas without letter-spacing. Untracked Bebas reads as untreated, even at large sizes.\n- Don't introduce a fourth surface color. The three surfaces (coral / ink / cream) are the system — adding a yellow or blue region breaks the magazine-poster identity.\n- Don't render headlines in `{colors.gray}`. Headlines are ink, cream, or coral; gray is reserved for body and meta text only.\n- Don't add drop shadows, elevated cards, or rounded surfaces. The system is flat — depth comes from color region splits and accent borders.\n- Don't round any rectangular element. Cards, sidebar tiles, info bars, icon squares, accent lines — all sharp rectangles.\n- Don't pair Bebas with a different sans body face. The Bebas + Inter pairing is fixed.\n- Don't render Inter labels in sentence case. Small Inter text is always uppercase with 1–4px tracking.\n- Don't soften region boundaries with gradients (except in the rare 135° coral-dark → coral feature gradient). Region edges are hard color meetings.\n- Don't fill a coral region with sparse content. Coral wants weight — either fully populate the region's composition or use a decorative oversized numeral / giant mark as wallpaper.\n\n## Responsive Behavior\n\nCoral is a viewport-fluid 1920×1080 presentation system using `clamp()`, `min()`, and viewport-relative units throughout. There are no explicit responsive breakpoints in the source — every dimension scales between minimum and maximum bounds.\n\n### Scaling Behavior\n- Hero title scales via `min(120px, 9vw, 13vh)` — capped by both width and height so the 3-line title cannot overflow a short laptop screen.\n- Jumbo feature scales from 80px at minimum viewport to 200px at maximum.\n- Body text scales from 15px to 20px.\n- Padding scales via `clamp` per-region.\n- Borders, icon squares (48px), nav dots (10px), nav arrows (44px), and timeline dots (20px) are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Nav-dots float at right edge; nav-arrows at bottom-left; slide counter at bottom-right. All three carry `.dark` variants for cream surfaces (ink-translucent fills) and standard variants for coral/ink surfaces (white-translucent fills).\n- Active nav-dot fills with `{colors.coral}` regardless of surface.\n\n### Charts\nCharts are rendered with Chart.js (loaded via CDN). Primary series uses `{colors.coral}`; comparison series uses `{colors.coral-dark}`. Chart styling is configured inline in the JS; restyling requires editing JS, not CSS.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080. The 45° hatch overlays should render correctly in PDF capture.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Bebas Neue uppercase 400) | Bebas Neue | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body / Label (Inter 300–700) | Inter | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare ZCOOL XiaoWei *after* Bebas Neue and Yozai *after* Inter in the same `font-family` stack so Latin glyphs render in Bebas / Inter and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@300..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Bebas Neue\", \"ZCOOL XiaoWei\", sans-serif;\n  --font-body: \"Inter\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.8 (from 1.7) — Hanzi need more vertical breathing than Latin lowercase, and Coral's body already favors generous leading.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 1–12px Bebas tracking and 1–4px Inter tracking shatter Hanzi cadence). Keep heavy tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any label/eyebrow/meta when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei carries the magazine-poster voice that Bebas Neue provides for Latin — its tall narrow Hanzi forms have a similar architectural-display register, and at the 80–200px sizes Coral uses for jumbo features, ZCOOL XiaoWei holds shape without crumbling the way a system Hanzi face would. Critically, Bebas Neue's \"uppercase only with heavy tracking\" rule is meaningless for Hanzi (no case, no tracking), so the system's most foundational typographic rule simply doesn't apply to CJK — drop the tracking, drop the uppercase, and let ZCOOL XiaoWei stand on size alone. Yozai pairs with Inter for body and labels: its rounded humanist forms match Inter's warmth and stay legible inside coral / cream / ink surfaces. The three-surface region splits, 45° diagonal hatch, decorative oversized numerals (which can stay Latin — 01, 02, 03 work perfectly as wallpaper behind a Chinese column title), and 5px coral top borders are all content-agnostic and work identically in any language.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a single-weight display face with limited glyph coverage compared to Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage. Bebas Neue's narrow condensed proportion has no exact Chinese equivalent — ZCOOL XiaoWei is medium-condensed at best, so Chinese hero titles will occupy ~20% more horizontal space than Latin equivalents. Adjust line-breaks (typically a 2-line Chinese title fills the same area as a 3-line English hero-title) and consider increasing the hero-title `min()` cap when a Chinese title runs long.\n\n## Iteration Guide\n\n1. Every new slide is a composition of one to three surface regions (coral, ink, cream) meeting at hard edges. Choose the surface split based on content emphasis.\n2. Every new headline uses Bebas Neue uppercase with at least 1–2px letter-spacing. Don't sentence-case; don't untracked.\n3. Every new section eyebrow uses Inter weight 700 uppercase 4px-tracked in `{colors.coral}` on cream/ink, or `{colors.black}` on coral.\n4. Every new card uses the 5px coral top border + white fill + no shadow + no radius pattern.\n5. Every new sidebar tile uses the 4px coral left border + white fill + no radius pattern.\n6. Every new coral region carries a 45° diagonal hatch overlay at 6% opacity for texture.\n7. New coral regions that feel underweight get a decorative oversized Bebas numeral at 12% opacity as wallpaper behind the primary title.\n8. New chart series use coral + coral-dark; don't introduce additional series colors.\n9. New quote layouts pair a coral left panel (with a giant mark at 35% opacity) with an ink or cream right panel (carrying the quote body in Inter weight 300).\n10. The system has three surfaces and one accent (coral). Don't introduce a fourth surface color or a second accent.\n\n## Known Gaps\n\n- The Chart.js library is loaded via CDN; chart styling is configured inline in JS rather than reading from CSS variables — restyling requires editing JS.\n- The 45° diagonal hatch stride values (20px/40px standard; 30px/60px variant; 60px/62px vertical) are hardcoded per usage; there is no parameterized hatch component.\n- Decorative oversized numerals are placed as inline content with hardcoded values; there is no generative ordinal system.\n- The cover composition's SVG zigzag-layer is an inline SVG embedded in the source — adjusting the zigzag pattern requires editing SVG markup.\n- The timeline-line's dashed effect is rendered via a `::after` repeating-linear-gradient overlay rather than `border-style: dashed` — this gives precise control over dash dimensions but is unusual.\n- The cover composition uses `min(120px, 9vw, 13vh)` triple-cap sizing to prevent the 3-line title from overflowing on short laptops; new cover variants should follow the same multi-axis cap pattern.\n- The pull-quote layout uses Inter weight 300; Inter weight 300 is loaded explicitly but not used elsewhere — this is the system's only Inter Light deployment.\n- The `cream-dark` and `light-gray` palette tokens are defined but used sparingly across the source; they are available for new compositions that need additional neutral shades.\n- The nav-dot and nav-arrow `.dark` variant must be manually applied on cream-surface slides to maintain visibility — there is no automatic surface detection.\n- Linear-gradient feature regions (135° coral-dark → coral) are the system's only intentional gradient; all other surfaces are flat colors. Using gradients elsewhere breaks the flat-surface aesthetic.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/preview.md":"# Coral Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/coral/design.md`\n- Preview card: `bold-template-pack/templates/coral/preview.md`\n\n## Selection Metadata\n\n- Slug: `coral`\n- Tagline: Cream and coral on near-black, set in oversized Bebas Neue.\n- Mood: bold, warm, modern, confident\n- Tone: graphic, punchy, magazine\n- Formality: medium\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials. Just as strong for a creator portfolio, a manifesto, or a tech / research deck that wants warmth and a single bold accent instead of corporate cool.\n- Avoid for: Contexts that should feel quiet or institutional — the coral accent and oversized Bebas Neue commit hard to a confident magazine voice.\n\n## Visual Snapshot\n\nA bold magazine-poster system that runs on three surface registers — coral fire, ink black, and warm cream — animated by Bebas Neue display caps and a constant 45° diagonal hatch pattern. Inter handles body copy; Bebas Neue handles every headline, stat, title, and meta-figure at heavy letter-spacing. The cultural reference is mid-century travel posters, Saul Bass film titles, and modern editorial sport magazines: solid color planes meeting at hard edges, oversized condensed caps as architectural elements, and a single coral hue used both as accent and as full-slide environment.\n\nCoral is a bold magazine-poster system built on three surface registers — coral fire, ink black, and warm cream — that meet at hard edges. The defining structural premise is solid color planes: a single slide will split into a coral half + a cream half + an ink top-section, with each region a flat solid color holding its own self-contained composition. There are no gradient transitions between regions; the meeting point of two colors is the layout. This is the populist counterpart to a more refined editorial system — closer to a sports magazine cover than a literary catalogue.\n\n## Preview Ingredients\n\n- Palette: coral #E85D5D; coral-dark #D44A4A; cream #F5F0E8; cream-dark #E8E0D4; black #1A1A1A; gray #6B6B6B; light-gray #B0B0B0; white #FFFFFF\n- Typography: Bebas Neue; Inter\n- Signature move: Solid color region splits — coral / ink / cream regions meeting at hard edges.\n- Signature move: Accent borders — 4px coral left, 5px coral top, 3px ink top, 4px ink horizontal.\n- Signature move: 45° diagonal hatch — a signature 6%-opacity black diagonal repeating pattern overlaid on coral regions, providing texture.\n- Signature move: Oversized decorative typography — background numerals at 12% opacity, giant quote marks at 35% opacity, sitting behind or beside primary content.\n- Signature move: Three-surface system: {colors.coral} (fire), {colors.black} (ink), {colors.cream} (paper) — used as solid regions meeting at hard edges.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/design.md":"---\nversion: alpha\nname: Creative Mode\ndescription: A neo-brutalist editorial presentation system built for 1920x1080 slides. The deck anchors on a warm cream canvas with heavy 4px ink borders, hard offset drop-shadows, and a bold four-color accent palette (forest green, hot pink, burnt orange, sunshine yellow). Display headlines run Archivo Black in pure uppercase — aggressive, loud, zero letter-spacing softness. Monospace labels in JetBrains Mono echo a typesetting rule-sheet. Body copy sits in Space Grotesk. Every slide uses flat color-blocking with no gradients, no rounded cards, and no subtlety. The aesthetic is part Bauhaus grid, part punk zine, part Swiss editorial.\n\ncolors:\n  cream: \"#EFE9D9\"\n  cream-2: \"#E4DCC4\"\n  ink: \"#0F0F0F\"\n  ink-2: \"#2A2A2A\"\n  green: \"#1F8A4C\"\n  green-dark: \"#136636\"\n  pink: \"#F06CA8\"\n  pink-dark: \"#D14E8B\"\n  orange: \"#E85A1F\"\n  yellow: \"#F5C518\"\n\ntypography:\n  display-jumbo:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 220px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-hero:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 160px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-xl:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-lg:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 100px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-md:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 96px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-sm:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 84px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-xs:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 72px\n    fontWeight: 400\n    lineHeight: 0.95\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  stat-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 96px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  step-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 0.85\n    letterSpacing: 0\n  step-title:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 34px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  stamp-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 64px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  marker-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 46px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  badge-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  table-head:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  table-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  body-lg:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-md:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.3\n    letterSpacing: 0\n  mono-label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.06em\n    textTransform: uppercase\n  mono-kicker:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  mono-tag:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  mono-chart:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.08em\n    textTransform: uppercase\n\nspacing:\n  slide-gutter: 96px\n  chrome-gutter: 64px\n  grid-gap: 28px\n  cell-pad: 32px\n  step-pad: 28px\n  topbar-top: 48px\n  meta-bottom: 40px\n  table-cell-pad: 18px 26px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  slide-chrome:\n    topbar:\n      fontFamily: \"JetBrains Mono, monospace\"\n      fontSize: 24px\n      letterSpacing: 0.08em\n      textTransform: uppercase\n      position: absolute\n      left: 64px\n      right: 64px\n      top: 48px\n    topbar-pill:\n      border: \"2px solid {colors.ink}\"\n      padding: 6px 14px\n      borderRadius: 999px\n    slide-meta:\n      fontFamily: \"JetBrains Mono, monospace\"\n      fontSize: 24px\n      letterSpacing: 0.06em\n      textTransform: uppercase\n      position: absolute\n      left: 64px\n      right: 64px\n      bottom: 40px\n    slide-meta-dot:\n      width: 10px\n      height: 10px\n      background: \"{colors.ink}\"\n      borderRadius: 50%\n  stat-cell:\n    border: \"4px solid {colors.ink}\"\n    padding: 28px 32px\n  stat-cell-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  stat-cell-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  stat-cell-cream:\n    background: \"{colors.cream}\"\n    color: \"{colors.ink}\"\n  stat-cell-orange:\n    background: \"{colors.orange}\"\n    color: \"{colors.cream}\"\n  step-card:\n    border: \"4px solid {colors.ink}\"\n    padding: 28px\n    height: 420px\n  step-card-cream:\n    background: \"{colors.cream}\"\n    color: \"{colors.ink}\"\n  step-card-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  step-card-yellow:\n    background: \"{colors.yellow}\"\n    color: \"{colors.ink}\"\n  step-card-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  step-arrow:\n    borderTop: \"18px solid transparent\"\n    borderBottom: \"18px solid transparent\"\n    borderLeft: \"24px solid {colors.ink}\"\n  table:\n    border: \"4px solid {colors.ink}\"\n    background: \"{colors.cream-2}\"\n    rowBorder: \"3px solid {colors.ink}\"\n    colBorder: \"3px solid {colors.ink}\"\n  table-head-row:\n    background: \"{colors.ink}\"\n    color: \"{colors.cream}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    borderColor: \"{colors.cream}\"\n  table-col-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  table-col-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  table-col-orange:\n    background: \"{colors.orange}\"\n    color: \"{colors.cream}\"\n  marker-block:\n    background: \"{colors.pink}\"\n    border: \"4px solid {colors.ink}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 46px\n    hardShadow: \"24px 24px 0 {colors.orange}, 24px 24px 0 4px {colors.ink}\"\n  iso-panel:\n    background: \"{colors.green}\"\n    border: \"4px solid {colors.ink}\"\n  stacked-block:\n    border: \"4px solid {colors.ink}\"\n    hardShadow: \"18px 18px 0 {colors.ink}\"\n  badge-rotated:\n    background: \"{colors.yellow}\"\n    border: \"4px solid {colors.ink}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    textTransform: uppercase\n    transform: rotate(-4deg)\n  stamp:\n    background: \"{colors.pink}\"\n    border: \"4px solid {colors.cream}\"\n    width: 340px\n    height: 340px\n    transform: rotate(-6deg)\n  stamp-inner:\n    border: \"4px solid {colors.cream}\"\n    borderRadius: 50%\n  kicker-block:\n    background: \"{colors.ink}\"\n    color: \"{colors.cream}\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    padding: 8px 16px\n  bar-chart-bar:\n    border: \"3px solid {colors.ink}\"\n  bar-chart-axis:\n    borderRight: \"3px solid {colors.ink}\"\n    borderBottom: \"3px solid {colors.ink}\"\n  decorative-circle:\n    background: \"{colors.yellow}\"\n    border: \"4px solid {colors.ink}\"\n    borderRadius: 50%\n  closing-slide:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCreative Mode is a **neo-brutalist editorial slide system** for 1920x1080 presentations. The foundational aesthetic choice is restraint of technique paired with aggression of expression: no rounded cards, no gradients, no shadows that suggest light sources — only flat color-blocking and hard offset drop-shadows (the \"Risograph\" or \"screen-print\" kind where the shadow is a sold same-color offset).\n\nThe canvas is warm cream (`{colors.cream}` — #EFE9D9) with near-black ink (`{colors.ink}` — #0F0F0F) for borders, text, and rules. Four accent colors fire at full saturation: forest green, hot pink, burnt orange, and sunshine yellow. These never blend — they collide on the slide and the collision is the design.\n\nHeadlines run **Archivo Black** (weight 400 due to the display face being intrinsically heavy) in strict uppercase with tight line-height (0.92). Font sizes are extreme: 220px for closing slides, 160px for titles. **JetBrains Mono** carries all metadata, labels, topbar text, and axis labels — reinforcing a \"designed artifact\" or \"technical manual\" register. **Space Grotesk** handles all body paragraphs.\n\nEvery slide follows an identical chrome frame: a JetBrains Mono topbar at 48px from top (left text + right pill), and a JetBrains Mono meta footer at 40px from bottom (label left, slide number right with ink dot divider). Content lives inside this frame with 96px side gutters.\n\n**Key Characteristics:**\n- Cream canvas (`{colors.cream}` — #EFE9D9) as the universal background; green (`{colors.green}` — #1F8A4C) used for the closing slide only.\n- 4px solid ink borders on every structural element — cards, panels, table cells, chart axes.\n- Hard offset box-shadows in place of blurred drops: `24px 24px 0 color, 24px 24px 0 4px ink` on featured blocks.\n- Archivo Black display type in uppercase with 0.92 line-height for extreme tightness.\n- Four accent colors used as flat fills; each slide uses two or three of the four, never all simultaneously.\n- Topbar pill badge (JetBrains Mono, 2px ink border, 999px radius) as the only rounded element per slide.\n\n## Colors\n\n### Canvas and Ink\n- **Cream** (`{colors.cream}` — #EFE9D9): The universal slide background. Warm, not white. Distinguishes the deck from sterile white-background slides.\n- **Cream 2** (`{colors.cream-2}` — #E4DCC4): One step darker cream. Used exclusively as the comparison table's background fill, creating a subtle recessed surface inside the ink border.\n- **Ink** (`{colors.ink}` — #0F0F0F): Near-black used for all borders, body text, rules, topbar chrome, and the closing stamp border. Not pure #000000 — slightly softened.\n- **Ink 2** (`{colors.ink-2}` — #2A2A2A): Softer near-black for secondary body text, descriptions inside stat cells, chart footnotes.\n\n### Accent Colors\n- **Green** (`{colors.green}` — #1F8A4C): Forest green. The dominant accent. Works on stat cells, diagram panels, process steps, and as a full-slide background for maximum visual impact.\n- **Green Dark** (`{colors.green-dark}` — #136636): Darker green variant — available for lever/depth decorative effects. Not used as a primary surface fill.\n- **Pink** (`{colors.pink}` — #F06CA8): Hot pink. High energy. Works on toggle switch illustrations, section markers, stat cells, process steps, and stamp elements.\n- **Pink Dark** (`{colors.pink-dark}` — #D14E8B): Darker pink for depth on decorative lever elements. Available for shadow-side accents.\n- **Orange** (`{colors.orange}` — #E85A1F): Burnt orange. The hard drop-shadow color on featured blocks; also works as a stat cell fill, bar chart color, and table column background.\n- **Yellow** (`{colors.yellow}` — #F5C518): Sunshine yellow. Works on decorative circles, process steps, rotated badges, and bar chart bars. A warm punctuation color.\n\n\n## Typography\n\n### Font Families\nThe system uses three typefaces, each in a strict register:\n- **Archivo Black** — display headlines, step numbers, stat numbers, table labels, all uppercase presentation text. Intrinsically heavy, no additional font-weight needed.\n- **JetBrains Mono** — all metadata: topbar labels, meta footer, kicker labels, chart axes, legend rows, layer tags, figure notes. Carries the \"technical spec\" voice.\n- **Space Grotesk** — body copy only: body column text (slide 2), stat cell descriptors, diagram subtext, step descriptions, closing strap.\n\n### Display Scale\nThe slide canvas is 1920x1080px, so font sizes are far larger than web norms.\n\n| Token | Size | Use |\n|---|---|---|\n| `{typography.display-jumbo}` | 220px | Jumbo title or closing headline |\n| `{typography.display-hero}` | 160px | Primary deck title or hero name |\n| `{typography.display-xl}` | 140px | Section-opening display headline |\n| `{typography.display-lg}` | 100px | Section headline alongside a panel |\n| `{typography.display-md}` | 96px | Mid-weight section headline |\n| `{typography.display-sm}` | 84px | Section headline for data-heavy layouts |\n| `{typography.display-xs}` | 72px | Section headline for grid layouts |\n| `{typography.step-num}` | 140px | Large ordinal numerals in stepped layouts |\n| `{typography.stat-num}` | 96px | Large numerals in stat or data cells |\n| `{typography.stamp-num}` | 64px | Stamp or seal numeral |\n| `{typography.marker-label}` | 46px | Featured marker or callout block label |\n| `{typography.step-title}` | 34px | Card or step title |\n| `{typography.table-head}` | 28px | Table header or label row text |\n| `{typography.badge-label}` | 28px | Rotated badge or annotation label |\n\n### Monospace Scale\nAll JetBrains Mono text sits at 24px. Letter-spacing varies by use:\n- Topbar labels: 0.08em\n- Meta footer: 0.06em\n- Kicker labels (inverted): 0.14em\n- Chart axes: 0.08em (via `{typography.mono-chart}`)\n- Legend rows: 0.06em\n- Layer tags: 0.1em\n\n### Body Scale\n- `{typography.body-lg}` (28px): Body copy for wide column layouts or lede paragraphs.\n- `{typography.body-md}` (24px): Body text in stat cells, diagram annotations, step descriptions, footnotes, and strap lines.\n\n### Principles\nArchivo Black has a line-height of 0.92 — headlines overlap their own cap-height, which is intentional. Uppercase lock is non-negotiable for the display face; lowercase Archivo Black breaks the editorial register. The monospace face uses generous letter-spacing (0.06–0.16em) to feel like a typewritten label. Never use letter-spacing on Archivo Black or Space Grotesk.\n\n## Layout\n\n### Canvas System\nEvery slide is exactly 1920×1080px in a fixed, non-scrolling viewport. The `deck-stage` custom element handles centering and scaling.\n\n### Gutter System\n- **Chrome gutter** (64px left/right): Used by topbar and slide-meta only.\n- **Content gutter** (96px left/right): Used by all content — headlines, body, grids.\n- Headlines occasionally push right to within 96px of the right edge, or are constrained by `right: 1000px` / `right: 900px` to coexist with a right-panel diagram.\n\n\n### Chrome Frame (All Slides)\n```\n┌─ topbar @ top:48px, left:64px, right:64px ──────────────────────────────────┐\n│  SECTION LABEL                                       [pill badge]            │\n├─────────────────────────────────────────────────────────────────────────────┤\n│                                                                              │\n│   CONTENT (96px left gutter, 96px right gutter)                            │\n│                                                                              │\n├─ slide-meta @ bottom:40px, left:64px, right:64px ───────────────────────────┤\n│  DESCRIPTOR LABEL                                    01 • 08                 │\n└─────────────────────────────────────────────────────────────────────────────┘\n```\n\n## Depth and Elevation\n\nThe system uses **zero blurred shadows**. Depth is expressed through two techniques:\n\n### Hard Offset Shadow\nThe signature treatment: a second solid shape offset by a fixed amount in both X and Y. Two values are used:\n- **Large offset** (24px 24px): Featured blocks like the marker and poster switch — `box-shadow: 24px 24px 0 {colors.orange}, 24px 24px 0 4px {colors.ink}`. The first shadow is the colored offset; the second is the ink border around it.\n- **Medium offset** (18px 18px): Stacked blocks in the diagram — `box-shadow: 18px 18px 0 {colors.ink}`. Pure ink shadow only.\n\n### Color-Block Contrast\nDepth perception comes from juxtaposing surfaces: cream on cream-2 (table), ink on cream (kicker block), green on cream (diagram panel). No shadow needed when contrast does the work.\n\n### Flat Elements\nTopbar, meta footer, chart axis lines, legend swatches: flat, no shadow, no border-radius.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px (square)**: All structural elements — stat cells, step cards, table cells, chart bars, diagram panels, stacked blocks. No rounding.\n- **50% (circle)**: Decorative circles within diagram (yellow circ), the topbar pill dot (slide meta separator dot).\n- **999px (pill)**: Topbar badge pill only. The one exception to the system's overall squareness, and it reads as a label chip rather than a card.\n- **Rotated elements**: The comparison badge rotates -4deg; the closing stamp rotates -6deg. These are the system's only non-orthogonal placements.\n\n### Borders\n- **4px solid `{colors.ink}`**: All structural borders — stat cells, step cards, diagram panels, table (outer), poster block, marker block, switch block, stamp.\n- **3px solid `{colors.ink}`**: All internal structural lines — table rows, table columns, chart axis, bar chart bars.\n- **2px solid `{colors.ink}`**: Topbar pill badge.\n- **3px dashed `{colors.ink}`**: Dashed horizontal rule separating the process slide's topbar from its flow cards.\n\n### Decorative Elements\n- **Toggle switch**: Pink square with a lever shape (skewed div) and thick/dark underside, offset shadow in orange with ink border.\n- **Stacked blocks**: Four overlapping absolute-positioned rectangles in pink, yellow, orange, cream-2 with 18px ink hard shadows.\n- **Circle overlay**: Yellow circle centered in a green square — shape contrast acting as decorative figure.\n- **Stamp**: Pink rotated square with a cream circular inner border — acts as a seal or approval mark.\n\n## Do's and Don'ts\n\n### Do\n- Use 4px ink borders on every structural element. Thinner looks soft; thicker looks like a web component.\n- Use hard offset shadows in exactly two sizes: 24px for featured hero blocks, 18px for diagram stacked blocks. Don't mix sizes.\n- Stay uppercase on all Archivo Black usage. The font in sentence case reads as a different brand.\n- Use the four accents in groups of two or three per slide. Every accent on one slide is noise.\n- Reserve the green background for a single dominant slide. Its rarity is what gives it impact.\n- Use JetBrains Mono for all labels, metadata, indices, figure notes, and axis text. Never use it for body or headlines.\n- Keep line-height at 0.92 for all display text. Looser leading breaks the tight editorial register.\n- Maintain 96px content gutter and 64px chrome gutter consistently across all slides.\n\n### Don't\n- Don't round card corners (except the topbar pill). Rounding signals \"friendly SaaS\"; sharp corners signal \"editorial precision.\"\n- Don't use gradients, drop shadows with blur, or glow effects. All depth must come from hard offset or color contrast.\n- Don't use Archivo Black in sentence case. Never lowercase the display face.\n- Don't apply letter-spacing to Archivo Black (except at -0.01em which is already encoded). Extra tracking breaks its density.\n- Don't introduce a fifth accent color. The four-color palette is the brand constraint.\n- Don't use pure white (#ffffff) as a background. Cream is the canvas; white reads as blank.\n- Don't use Space Grotesk for labels or metadata. That role belongs to JetBrains Mono.\n- Don't add multiple typefaces. The three-family stack is complete.\n- Don't center-align body text. All body copy is left-aligned; centered text breaks the grid discipline.\n- Don't soften the stamp or badge rotation. The -4deg and -6deg angles are deliberate imperfection signals.\n\n## Responsive Behavior\n\nThis template is designed **exclusively for 1920x1080 presentation display**. It is not a web page and has no mobile breakpoints. The `deck-stage` web component handles viewport scaling via CSS transforms, so the 1920x1080 canvas scales proportionally on any screen size without layout changes.\n\n### Touch / Presenter Behavior\n- Slides advance via keyboard arrow keys or presentation clicker (handled by `deck-stage.js`).\n- No hover states are defined or needed.\n- No interactive form elements exist.\n\n### Print / Export Behavior\n- At 96dpi, the 1920x1080 canvas maps to a standard 20x11.25 inch frame.\n- For PDF export, a 1920x1080 viewport capture or browser print-to-PDF at 100% scale is recommended.\n- At 1pt = 1.333px, the effective print sizes of headlines range from 54pt (72px) to 165pt (220px) — correct for poster/title cards.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Archivo Black uppercase 400) | Archivo Black | 思源宋体 Noto Serif SC 900 | Google Fonts |\n| Body (Space Grotesk 400) | Space Grotesk | 思源宋体 Noto Serif SC 400 | Google Fonts |\n| Mono / Label (JetBrains Mono uppercase) | JetBrains Mono | JetBrains Mono (Latin/digit only — keep mono chrome in Latin) | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin face in the same `font-family` stack so Latin glyphs render in Archivo Black / Space Grotesk and CJK glyphs fall through to NSC automatically. JetBrains Mono chrome stays Latin/digit-only — topbar labels, slide-meta, axis ticks, and figure notes do not need a CJK fallback (and JetBrains Mono has no CJK glyphs by design).\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Archivo+Black&family=Space+Grotesk:wght@300..700&family=JetBrains+Mono:wght@400..500&family=Noto+Serif+SC:wght@400;900&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Archivo Black\", \"Noto Serif SC\", sans-serif;\n  --font-body: \"Space Grotesk\", \"Noto Serif SC\", sans-serif;\n  --font-mono: \"JetBrains Mono\", ui-monospace, monospace;\n}\n/* Display headlines use Noto Serif SC 900; body uses NSC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.55 (from 1.4) — Hanzi need more vertical breathing than Latin lowercase. For display NSC 900 at 100–220px, keep line-height tight at ~1.0 (NSC heavy weight at display size needs less leading than Archivo Black).\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (negative tracking that flatters Archivo Black caps jams Hanzi strokes together). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any display/label/mono when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nCreative Mode's neo-brutalist register depends on Archivo Black's extreme density at 100–220px — there is no Hanzi face that matches this exact mass, so Noto Serif SC at weight 900 is the closest available substitute. NSC 900's modulated serif strokes will read as more literary than the punk-zine Archivo Black voice, but the four-color block palette, 4px ink borders, and hard 24px offset shadows do most of the brutalist work — the typography becomes one component of a louder system rather than the system itself. The \"uppercase always\" rule for Archivo Black is meaningless for Hanzi (no case), so drop both `text-transform: uppercase` and the -0.01em tracking when content switches to Chinese — NSC 900 stands on size and color alone. JetBrains Mono chrome (topbar pill, slide-meta, axis ticks, kicker block) intentionally stays Latin/digit-only: render `04 / 08` slide counters in mono, but render any Chinese descriptor label in NSC 400 inside the meta footer. The four accents (green / pink / orange / yellow), stat-cell color blocks, table treatment, and decorative geometry (stamp, badge, stacked blocks) are all content-agnostic.\n\n### Known CJK Gap\n\n**Heavy Latin display has no exact CJK equivalent.** Archivo Black's brutalist density at 220px is the system's signature — Noto Serif SC 900 is the heaviest commonly available Hanzi weight, but it reads as a literary serif rather than a poster-grotesk. Chinese decks built with Creative Mode will feel ~30% less \"punk-zine\" than the Latin original; compensate by leaning harder on the accent color blocks, the hard offset shadows, and the rotated badge / stamp elements. Avoid the alternative of `Smiley Sans Oblique` for display — its oblique cut conflicts with the system's strict orthogonal rectangle geometry. NSC has no italic axis, but the system doesn't use italic anywhere — no loss. The mono chrome's \"technical spec\" voice is best preserved by keeping all JetBrains Mono content in Latin/digit and reserving NSC for headline and body roles only.\n\n## Iteration Guide\n\n1. New slide layouts must respect the chrome frame: topbar at top:48px left:64px, slide-meta at bottom:40px left:64px.\n2. Content begins at 96px from each side edge.\n3. When adding a data section (chart, table, grid), pair a display headline above with JetBrains Mono labels inside.\n4. Pick two or three accent fills per slide. Never mix all four on a single slide.\n5. Hard shadows go on featured single elements only (marker, featured block). Grid cells do not get individual shadows.\n6. New step/stat cards follow the existing color-sequence pattern: alternate cream with accents, end the sequence on green.\n7. All borders are 4px solid ink. Internal sub-borders within a table or axis are 3px solid ink.\n8. Rotated elements (badge, stamp) use single fixed angles (-4deg, -6deg). Do not introduce other angles.\n9. Icons and illustrations are CSS-only geometric shapes (divs, borders, pseudo-elements). No external images or SVGs needed.\n\n## Known Gaps\n\n- The `deck-stage.js` script (slide advancement, keyboard nav) is an external dependency not documented here.\n- Animation and transition between slides is not in scope for this template; all slides are static.\n- The title slide poster contains a decorative toggle switch illustration built from nested divs; it has no functional state.\n- Chart data (bar heights, values, labels) is hardcoded as inline styles and placeholder content — there is no data-binding layer.\n- Table data is all placeholder; no dynamic population is supported.\n- The `--rule` CSS variable (#0F0F0F, identical to `--ink`) is defined but not used explicitly — it is reserved for horizontal rule elements and can be considered an alias for ink.\n- Font fallback for Archivo Black is `sans-serif` — the font must be loaded from Google Fonts for the design to render correctly.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/preview.md":"# Creative Mode Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/creative-mode/design.md`\n- Preview card: `bold-template-pack/templates/creative-mode/preview.md`\n\n## Selection Metadata\n\n- Slug: `creative-mode`\n- Tagline: Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display.\n- Mood: creative, confident, playful, design-led\n- Tone: graphic, expressive, modern\n- Formality: medium\n- Density: medium-high\n- Scheme: light\n- Best for: Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews. Also a great unexpected pick for a tech talk, research findings, or finance review when the speaker wants to lead with taste rather than convention.\n- Avoid for: Contexts that demand institutional restraint and a quiet authority — the saturated multi-accent palette will read as expressive, not formal.\n\n## Visual Snapshot\n\nA neo-brutalist editorial presentation system built for 1920x1080 slides. The deck anchors on a warm cream canvas with heavy 4px ink borders, hard offset drop-shadows, and a bold four-color accent palette (forest green, hot pink, burnt orange, sunshine yellow). Display headlines run Archivo Black in pure uppercase — aggressive, loud, zero letter-spacing softness. Monospace labels in JetBrains Mono echo a typesetting rule-sheet. Body copy sits in Space Grotesk. Every slide uses flat color-blocking with no gradients, no rounded cards, and no subtlety. The aesthetic is part Bauhaus grid, part punk zine, part Swiss editorial.\n\nCreative Mode is a neo-brutalist editorial slide system for 1920x1080 presentations. The foundational aesthetic choice is restraint of technique paired with aggression of expression: no rounded cards, no gradients, no shadows that suggest light sources — only flat color-blocking and hard offset drop-shadows (the \"Risograph\" or \"screen-print\" kind where the shadow is a sold same-color offset).\n\n## Preview Ingredients\n\n- Palette: cream #EFE9D9; cream-2 #E4DCC4; ink #0F0F0F; ink-2 #2A2A2A; green #1F8A4C; green-dark #136636; pink #F06CA8; pink-dark #D14E8B\n- Typography: Archivo Black; Space Grotesk; JetBrains Mono\n- Signature move: Cream canvas ({colors.cream} — #EFE9D9) as the universal background; green ({colors.green} — #1F8A4C) used for the closing slide only.\n- Signature move: 4px solid ink borders on every structural element — cards, panels, table cells, chart axes.\n- Signature move: Hard offset box-shadows in place of blurred drops: 24px 24px 0 color, 24px 24px 0 4px ink on featured blocks.\n- Signature move: Archivo Black display type in uppercase with 0.92 line-height for extreme tightness.\n- Signature move: Four accent colors used as flat fills; each slide uses two or three of the four, never all simultaneously.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/design.md":"---\nversion: alpha\nname: Daisy Days\ndescription: A cheerful, childlike presentation system built around the chunky display face Fredoka One and the rounded humanist sans Quicksand. The palette is a sunny garden — cream canvas, turquoise, soft pink, butter yellow, mint, lavender, peach, sky blue, and a single coral accent — with charcoal-brown 2D outlines wrapping every shape. Hard offset shadows in dark charcoal, generous border-radius, and hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) anchor the aesthetic somewhere between a children's storybook spread and a sticker-sheet kawaii zine.\n\ncolors:\n  cream: \"#F5F0E6\"\n  turquoise: \"#7ECDC0\"\n  soft-pink: \"#F7C8D4\"\n  butter: \"#FDE68A\"\n  mint: \"#A8E6CF\"\n  lavender: \"#D4A5E8\"\n  peach: \"#FFCBA4\"\n  sky: \"#A8D8F0\"\n  coral: \"#F8635F\"\n  text-dark: \"#2D2D2D\"\n  text-muted: \"#6B6B6B\"\n  white: \"#FFFFFF\"\n\nborders:\n  primary: \"3px solid {colors.text-dark}\"\n  thin: \"2px solid {colors.text-dark}\"\n\nshadows:\n  default: \"6px 6px 0 {colors.text-dark}\"\n  small: \"4px 4px 0 {colors.text-dark}\"\n  text-headline: \"3px 3px 0 {colors.text-dark}\"\n  text-headline-soft: \"3px 3px 0 rgba(0,0,0,0.2)\"\n\ntypography:\n  display:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(3.2rem, 7vw, 6.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0.02em\n  headline:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(2.5rem, 5vw, 4.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0.02em\n  title:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 400\n    lineHeight: 1.15\n    letterSpacing: 0.02em\n  subtitle:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.3rem, 2vw, 1.8rem)\"\n    fontWeight: 400\n    lineHeight: 1.2\n    letterSpacing: 0.02em\n  label-display:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1rem, 1.5vw, 1.3rem)\"\n    fontWeight: 400\n    lineHeight: 1.3\n    letterSpacing: 0.02em\n  quote:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.3rem, 2.5vw, 2rem)\"\n    fontWeight: 400\n    lineHeight: 1.35\n  body:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.3vw, 1.15rem)\"\n    fontWeight: 500\n    lineHeight: 1.6\n  body-strong:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.4vw, 1.15rem)\"\n    fontWeight: 600\n    lineHeight: 1.5\n  meta:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.8rem, 1.1vw, 0.95rem)\"\n    fontWeight: 600\n    lineHeight: 1.45\n  badge:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"0.85rem\"\n    fontWeight: 400\n    letterSpacing: 0.02em\n\nspacing:\n  pad-slide: \"40px 60px\"\n  pad-card-lg: \"48px 56px\"\n  pad-card-md: \"32px 40px\"\n  pad-card-sm: \"16px 24px\"\n  gap-grid-lg: \"28px\"\n  gap-grid-md: \"24px\"\n  gap-grid-sm: \"14px\"\n  radius: \"20px\"\n  radius-lg: \"28px\"\n  radius-pill: \"50px\"\n  radius-round: \"50%\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  card:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius}\"\n    boxShadow: \"{shadows.default}\"\n  card-lg:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-lg}\"\n    boxShadow: \"{shadows.default}\"\n  badge-pill:\n    display: \"inline-block\"\n    padding: \"8px 20px\"\n    borderRadius: \"{spacing.radius-pill}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"0.85rem\"\n    background: \"{colors.butter}\"\n  framed-header:\n    description: \"A two-part stacked card: a colored header strip (any accent surface) with rounded top corners and no bottom border, sitting flush above a white body with rounded bottom corners. The pair reads as a single unit with a tonal cap.\"\n    headerBackground: \"any accent surface\"\n    headerBorderRadius: \"{spacing.radius-lg} {spacing.radius-lg} 0 0\"\n    bodyBackground: \"{colors.white}\"\n    bodyBorderRadius: \"0 0 {spacing.radius-lg} {spacing.radius-lg}\"\n    border: \"3px solid {colors.text-dark}\"\n    boxShadow: \"{shadows.default}\"\n  circle-dot:\n    width: \"48px\"\n    height: \"48px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    color: \"{colors.white}\"\n    description: \"Outlined colored disc holding a numeral or single letter. Used as timeline node, step marker, or list bullet anchor.\"\n  circle-icon:\n    width: \"44px\"\n    height: \"44px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    background: \"any accent surface\"\n    description: \"Smaller cousin of circle-dot used as a card icon at the top of an info card.\"\n  step-circle-lg:\n    width: \"90px\"\n    height: \"90px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    color: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Oversized outlined disc used as a process step marker. Carries a hard offset shadow.\"\n  avatar-circle:\n    width: \"100px\"\n    height: \"100px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    overflow: \"hidden\"\n  bullet-dot:\n    width: \"20px\"\n    height: \"20px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"2px solid {colors.text-dark}\"\n    background: \"{colors.butter}\"\n    description: \"Small outlined disc used as a ::before bullet for body list items, anchored 4px from the top of the line.\"\n  list-dash:\n    description: \"A simple muted-text dash character used as a ::before bullet for compact in-card lists (day-card body).\"\n  legend-swatch:\n    width: \"18px\"\n    height: \"18px\"\n    border: \"2px solid {colors.text-dark}\"\n    borderRadius: \"4px\"\n  decoration:\n    position: \"absolute\"\n    pointerEvents: \"none\"\n    zIndex: 1\n    description: \"Hand-drawn SVG sticker (daisy, star, sun, cloud, rainbow) placed at slide corners and edges as atmospheric ornament. Often crops past the slide edge.\"\n  nav-dots:\n    position: \"fixed\"\n    placement: \"right edge, vertically centered\"\n    dotSize: \"12px\"\n    dotBorder: \"2px solid {colors.text-dark}\"\n    activeBackground: \"{colors.butter}\"\n    activeTransform: \"scale(1.2)\"\n  slide-counter:\n    position: \"fixed\"\n    placement: \"bottom center\"\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-pill}\"\n    padding: \"6px 20px\"\n    fontFamily: \"'Fredoka One', cursive\"\n    boxShadow: \"{shadows.small}\"\n  chart-container:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-lg}\"\n    boxShadow: \"{shadows.default}\"\n    padding: \"{spacing.pad-card-md}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nDaisy Days is a **cheerful childlike presentation system** rooted in a single typographic pairing: the chubby rounded display face **Fredoka One** for every headline, and the friendly humanist sans **Quicksand** for every line of body and meta text. The visual language descends from picture-book illustration and sticker-sheet kawaii: every shape carries a charcoal 2D outline, every elevated element casts a solid offset shadow, and every surface is a pastel from a sunny garden palette.\n\nThe color philosophy is **multi-pastel with a single warm pop**. The background canvas alternates between a soft cream (`{colors.cream}`) and the saturated pastels (`{colors.turquoise}`, `{colors.soft-pink}`, `{colors.butter}`, `{colors.mint}`, `{colors.lavender}`, `{colors.peach}`, `{colors.sky}`). The lone high-saturation accent is `{colors.coral}` — used sparingly on small marker dots and headline strokes, never as a full surface. Headlines on top of a colored surface get a 3px charcoal text-shadow, which gives display text the same outlined appearance as the shapes around it; headlines on cream stay flat. Body text never leaves `{colors.text-dark}` or `{colors.text-muted}`.\n\nDepth is **2D and graphic**, not photographic. Every elevated element gets a `{shadows.default}` or `{shadows.small}` — a solid charcoal block offset to the bottom-right, with zero blur. The combination of thick charcoal outline plus hard offset shadow gives the system its sticker-on-paper feel. There are no gradients, no glow, no glass effects.\n\nThe signature treatment is the **hand-drawn SVG decoration layer**. Every region carries 3–7 absolutely-positioned ornaments — yellow-centered daisies, multi-color stars, smiling suns, fluffy clouds, arched rainbows — that cluster at the corners and edges, often cropping past the slide boundary at `top:-30px / right:-20px`. These decorations sit on a `z-index:1` layer behind the content (`z-index:2`) and carry the same 2px-ish charcoal stroke as the rest of the system, unifying ornament with structure.\n\n**Density philosophy: full but not crowded.** This system reads as authoritative when every slide carries one focused content region (a card, a frame, a grid) at the center plus a generous wreath of corner ornaments at the edges. An empty corner with no decoration reads as broken — the ornaments are part of the structural composition, not optional garnish. Conversely, dense overlapping content panels read as anxious; the system wants one main subject, framed and surrounded, not three competing ones. Aim for one bordered/shadowed container per slide, with the corner decorations doing the work of filling the rest of the canvas.\n\n**Key Characteristics:**\n- Cream (`{colors.cream}`) default canvas with rotating pastel surfaces — every slide may pick a different surface color.\n- Fredoka One for all headline / display / quote text; Quicksand 500/600 for all body and meta text.\n- Every shape and card carries a 3px solid charcoal outline (`{colors.text-dark}`) plus a hard offset shadow (`{shadows.default}` or `{shadows.small}`).\n- Generous border-radius: 20px on standard cards, 28px on featured cards, pill (`{spacing.radius-pill}`) on badges, full circle on dots and avatars.\n- Hand-drawn SVG ornaments (daisies, stars, suns, clouds, rainbows) cluster at corners and crop past slide edges as atmospheric layer.\n- Headlines on colored surfaces always carry a 3px solid charcoal text-shadow; headlines on cream sit flat.\n- Bullets are colored outlined dots (`{components.bullet-dot}`), not glyphs. Lists feel hand-set.\n- One main content container per slide, surrounded by 3–7 ornaments. Empty corners are wrong.\n\n## Colors\n\n### Palette\n- **Cream** (`{colors.cream}` — #F5F0E6): The default canvas. A warm off-white that reads as paper-stock rather than digital white. Used as the deck's neutral surface — title openings, info-card slides, anything that wants to feel like a storybook page.\n- **Turquoise** (`{colors.turquoise}` — #7ECDC0): A medium-saturation teal-green. The boldest of the surface pastels; loud enough that headlines on top need the charcoal text-shadow to stay legible.\n- **Soft Pink** (`{colors.soft-pink}` — #F7C8D4): A bubblegum blush. Used as a full surface, a header-strip color, a day-marker fill, and the quote-mark accent inside a quote card.\n- **Butter** (`{colors.butter}` — #FDE68A): A buttery pastel yellow. The active-state color for nav dots, the default badge fill, and the default bullet-dot fill. It is the system's \"highlight\" color when something needs to feel marked.\n- **Mint** (`{colors.mint}` — #A8E6CF): A cool celadon green. A surface color, a header-strip color, a circle-icon fill, and a timeline-dot color.\n- **Lavender** (`{colors.lavender}` — #D4A5E8): A muted purple. Surface, header-strip, marker-dot, day-marker — same role flexibility as mint and soft-pink.\n- **Peach** (`{colors.peach}` — #FFCBA4): A warm pastel orange. Used as a surface (typically on process or sequence slides) and an accent.\n- **Sky** (`{colors.sky}` — #A8D8F0): A pastel blue. Surface and accent color, often paired with cloud decorations.\n- **Coral** (`{colors.coral}` — #F8635F): The single saturated accent. Used only as a marker fill (a numbered dot, a timeline node, a step circle) and a day-header — never as a full slide surface. Coral is the system's \"look here\" color and loses its punch if overused.\n- **Text Dark** (`{colors.text-dark}` — #2D2D2D): The structural color. Every border, every body text run on light surfaces, every shadow, every SVG stroke. Slightly warmer than pure black — reads charcoal, not jet.\n- **Text Muted** (`{colors.text-muted}` — #6B6B6B): The de-emphasized text color. Subtitles, descriptions under headlines, list-dash bullets, role labels.\n- **White** (`{colors.white}` — #FFFFFF): The default card fill — every card, every avatar, every chart-container interior. Cards on a cream canvas still get white interiors so the card edge reads cleanly.\n\n### Defaults\n- **Default slide background**: `{colors.cream}`. Use a saturated pastel surface (turquoise, soft-pink, mint, butter, lavender, peach, sky) when the slide wants a tonal personality; default to cream when it doesn't.\n- **Default card background**: `{colors.white}` — on any surface, including pastel surfaces. White-on-pastel is the standard card treatment.\n- **Default headline color**: `{colors.text-dark}` — always.\n- **Default body color**: `{colors.text-dark}` for primary body, `{colors.text-muted}` for descriptions, role labels, captions, and sublines.\n- **Default border color**: `{colors.text-dark}` — always. There are no colored borders anywhere.\n- **Default shadow color**: `{colors.text-dark}` — always. Shadows are never pastel.\n- **Default badge fill**: `{colors.butter}`.\n- **Default marker / accent fill** when an element needs a single \"attention\" color: `{colors.coral}`. When a sequence of markers is needed, rotate through the full pastel set (coral → mint → sky → lavender → butter) for sequence steps and dots.\n- **Default header-strip color** on a framed-header component: any pastel surface — pick whichever harmonizes with the slide's surface color.\n\nThe pastels are interchangeable at the surface level — they do not carry fixed semantic meaning (mint is not \"success\", coral is not \"warning\"). Pick the surface that best serves the slide's emotional register. The one rule: coral is reserved for small high-contrast accents, not surfaces.\n\n## Typography\n\n### Font Family\nThe system loads exactly two web fonts from Google Fonts: **Fredoka One** (a single-weight rounded display face) and **Quicksand** (a humanist sans available at 400/500/600/700). The pairing is the entire typographic identity.\n\nFredoka One is a chunky single-weight display face — it has no italic, no lighter variants, no condensed cuts. The display weight reads as 400 by spec but visually behaves as a heavy weight because the letterforms are so rounded and full. Every headline, every title, every step number, every quote in the system runs in Fredoka One. There is no exception — using Quicksand for a heading or Fredoka One for a body paragraph breaks the system instantly.\n\nQuicksand carries everything else: paragraphs, list items, role labels, captions, day-card body lists, legend text. Quicksand 500 is the body default; 600 is the \"slightly stronger\" variant used for emphasized body (welcome-list items, info-card descriptions, legend labels); 700 is used sparingly for quote-author attribution.\n\n### Display, Body, and Marker Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3.2rem, 7vw, 6.5rem) | Fredoka One | 400 | Cover / opening hero headline |\n| `{typography.headline}` | clamp(2.5rem, 5vw, 4.5rem) | Fredoka One | 400 | Primary slide headline |\n| `{typography.title}` | clamp(1.8rem, 3.5vw, 3rem) | Fredoka One | 400 | Section title or framed-header title |\n| `{typography.quote}` | clamp(1.3rem, 2.5vw, 2rem) | Fredoka One | 400 | Pull-quote body text |\n| `{typography.subtitle}` | clamp(1.3rem, 2vw, 1.8rem) | Fredoka One | 400 | Sub-headline, in-card title |\n| `{typography.label-display}` | clamp(1rem, 1.5vw, 1.3rem) | Fredoka One | 400 | Small Fredoka labels — day-card header, step title |\n| `{typography.body-strong}` | clamp(0.95rem, 1.4vw, 1.15rem) | Quicksand | 600 | Emphasized body — welcome lists, info-card descriptions |\n| `{typography.body}` | clamp(0.95rem, 1.3vw, 1.15rem) | Quicksand | 500 | Standard paragraph body |\n| `{typography.meta}` | clamp(0.8rem, 1.1vw, 0.95rem) | Quicksand | 600 | Compact secondary text — day-card lists, step descriptions, legend rows |\n| `{typography.badge}` | 0.85rem | Fredoka One | 400 | Text inside a pill badge |\n\n### Defaults\n- **Default size for a primary slide headline**: `{typography.headline}` (clamp 2.5–4.5rem).\n- **Default size for a cover-level title moment**: `{typography.display}` (clamp 3.2–6.5rem).\n- **Default size for a paragraph**: `{typography.body}` (clamp 0.95–1.15rem) in Quicksand 500.\n- **Default size for emphasized list items**: `{typography.body-strong}` (Quicksand 600).\n- **Default size for a description under a card title or a meta caption**: `{typography.meta}` in `{colors.text-muted}`.\n- **Default size for a section / framed-header title**: `{typography.title}`.\n- **Default family for any text larger than ~1.3rem**: Fredoka One. Default family for any text smaller than that: Quicksand. The size threshold roughly tracks the Fredoka / Quicksand role boundary.\n\nWhen unsure, reach for `{typography.headline}` for the slide's main text moment, not `{typography.subtitle}` or `{typography.title}` (which are intra-content titles, not the primary slide voice).\n\n### Signature Treatments\nThese are **non-optional whenever the corresponding element type is used**:\n\n- **Every Fredoka One headline placed on a saturated pastel surface carries a 3px charcoal text-shadow** (`{shadows.text-headline}` on bold surfaces like turquoise / mint, `{shadows.text-headline-soft}` on softer surfaces like pink / lavender). Headlines on cream sit flat without the shadow. The text-shadow is what makes the headline read as \"outlined\" in the same vocabulary as the rest of the system. Skipping it on a colored surface reads as broken.\n- **Headlines placed on saturated surfaces switch text color to `{colors.white}`**; headlines on cream and on light pastel cards stay `{colors.text-dark}`. The pairing is white-on-saturated, dark-on-cream-or-card.\n- **Every body list item uses an outlined colored disc as its bullet, not a glyph.** Default fill is `{colors.butter}`. The bullet is rendered as a `::before` 20px circle with 2px charcoal border, positioned 4px from the top of the first line.\n- **Every quote uses the Fredoka quote-mark treatment**: an oversized `\"` glyph in `{colors.soft-pink}` sits above the quoted text. Quotes never appear without a quote-mark anchor.\n- **Quicksand body text never goes uppercase.** No display-style ALL-CAPS treatments on body. Fredoka has its own personality and doesn't need shouting.\n\n### Typography Principles\nThe size ladder is the rhythm. Fredoka One does not get italicized, underlined, or rendered in alternate weights — Fredoka has one weight, full stop. Quicksand stays inside the 500 / 600 / 700 ladder; do not introduce 400 or 800 even if available. Letter-spacing on Fredoka stays at the spec default of `0.02em`. Letter-spacing on Quicksand stays at 0.\n\nMixing Quicksand into a headline (e.g. for an italicized phrase) is not supported in this system — the headline runs in one face. If a headline needs a different emotional register, the size and color do the work, not the font swap.\n\n## Layout\n\n### Canvas System\nThe system targets full viewport — every `.slide` is `100vw × 100vh` with `padding: 40px 60px` (default slide padding). Slides are stacked vertically inside a `.slides-container` that uses CSS scroll-snap (`scroll-snap-type: y mandatory`) to lock each slide to the viewport. Navigation is handled via fixed right-edge nav dots, a fixed bottom-center counter pill, keyboard arrows / spacebar, and intersection-observer-driven dot state.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide}` | 40px 60px | Outer slide padding |\n| `{spacing.pad-card-lg}` | 48px 56px | Large featured cards (quote box, welcome body) |\n| `{spacing.pad-card-md}` | 32px 40px | Standard cards (chart container, framed-header body) |\n| `{spacing.pad-card-sm}` | 16px 24px | Compact cards (timeline card, day-card body) |\n| `{spacing.gap-grid-lg}` | 28px | Major grid gaps (team grid, info-card grid) |\n| `{spacing.gap-grid-md}` | 24px | Standard grid gaps |\n| `{spacing.gap-grid-sm}` | 14px | Tight grid gaps (weekly day-card grid) |\n\n### Border-Radius Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.radius}` | 20px | Standard cards, day-cards, timeline cards |\n| `{spacing.radius-lg}` | 28px | Featured cards (chart container, welcome frame, quote box) |\n| `{spacing.radius-pill}` | 50px | Badges, slide counter |\n| `{spacing.radius-round}` | 50% | All circles (avatars, bullet dots, marker dots, step circles, icons) |\n\nEvery visible region carries some radius. There are zero square corners in this system besides the SVG decorations themselves.\n\n### Content Centering\nSlide content is flex-centered both vertically and horizontally inside the slide padding. The main content container has a max-width that varies by composition (typically 700–1100px) and never spans the full slide width — there is always margin between content and slide edge for the decorations to occupy.\n\n## Depth and Elevation\n\n### Hard Offset Shadow (Only Technique)\nEvery elevated element uses one of two shadow values:\n- **`{shadows.default}`** = `6px 6px 0 {colors.text-dark}` — standard offset for cards, frames, chart containers, badges, the slide counter.\n- **`{shadows.small}`** = `4px 4px 0 {colors.text-dark}` — lighter offset for smaller elevated elements (day-cards, timeline-cards, info-cards, step circles, avatars).\n\nThe shadow is **solid charcoal, zero blur, fixed bottom-right offset**. There is no rgba shadow, no blur, no soft elevation. An element either casts a hard offset shadow in `{colors.text-dark}` or it casts no shadow.\n\n### Text Shadow for Display Type\nA separate text-shadow treatment lives only on display headlines placed over saturated pastel surfaces:\n- **`{shadows.text-headline}`** = `3px 3px 0 {colors.text-dark}` for bold pastel surfaces (turquoise, butter, peach).\n- **`{shadows.text-headline-soft}`** = `3px 3px 0 rgba(0,0,0,0.2)` for softer pastel surfaces (soft-pink, mint) where the full charcoal would feel too heavy.\n\nHeadlines on cream get no text-shadow.\n\n### Decorative Z-Index Layer\nThe atmospheric SVG decorations live on `z-index: 1` with `pointer-events: none`. Content sits on `z-index: 2`. This means decorations may visually overlap content rectangles, but never block interaction. Decorations frequently crop past the slide edge with negative offsets like `top:-30px / left:-30px`, which gives the layout a \"stickers reaching off the page\" feel.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **3px solid `{colors.text-dark}`** — the universal structural border. Cards, framed headers, badges, marker circles, step circles, avatars, chart containers, the slide counter.\n- **2px solid `{colors.text-dark}`** — the lighter border used only on small elements at the bullet / nav-dot / legend-swatch / day-header divider scale.\n- **~2.1px solid `#232323` or `#000`** — the SVG stroke weight used inside the daisy / star / cloud / sun decorations. This matches the perceived weight of the 3px structural border at the SVG's natural scale.\n\nBorders are never colored. Borders are never dashed. The only line style in the system is solid charcoal.\n\n### Decorative Element Types\n\n**Daisy** — A six-petal white-petal / yellow-center daisy in two paired stem positions. The system's signature ornament. Place at corners (typically `top-left`, `top-right`, `bottom-left`, `bottom-right`), often cropped past the edge at `top:-30px` or `right:-20px`. Two daisies plus 2–3 stars is the most common decoration cluster.\n\n**Star** — A puffy five-pointed sticker star in a solid pastel fill (pink, yellow, mint, lavender, white) with charcoal outline. Used as scattered accents between the larger daisy / sun / cloud ornaments. Vary fill color across instances on the same slide; do not use all-white or all-yellow stars.\n\n**Sun** — A smiling round sun in butter yellow with rays. Used as a single feature ornament, typically at top-left or bottom-right.\n\n**Cloud** — A puffy white-and-blue cloud with optional smaller cloud variant. Used in sequences (two clouds at opposing corners) or as a single ornament on slides that want a sky atmosphere.\n\n**Rainbow** — An arched four-band rainbow (coral / yellow / mint / sky) with the standard charcoal outline. Used as a single feature ornament, typically at top-right or bottom-right.\n\n**Framed Header** (`{components.framed-header}`) — A two-part stacked card: a colored header strip (any pastel) sits flush above a white body. The pair shares one rounded outer corner radius and one continuous 3px border, and the whole unit casts a single offset shadow. Used as a featured info container.\n\n**Badge Pill** (`{components.badge-pill}`) — A short rounded-pill chip with 3px border and butter (default) fill. Used as a section tag or small label. Pill text is Fredoka One at 0.85rem.\n\n**Marker Circle Set** — Three sizes (`{components.bullet-dot}` 20px, `{components.circle-dot}` 48px, `{components.circle-icon}` 44px, `{components.step-circle-lg}` 90px). All are outlined circles in a pastel fill, all carry charcoal border. Numerals or single letters inside larger marker circles are always Fredoka One in white text (except on butter-yellow, where text returns to dark).\n\n**Avatar Circle** — A 100px outlined white circle holding a small character SVG portrait or initial. Carries `{shadows.small}`.\n\n**Quote Mark** — An oversized `\"` glyph in Fredoka One at ~4rem in `{colors.soft-pink}`, placed above the quote body inside a quote card.\n\n**Process Arrow** — A simple `→` glyph in Fredoka One at ~2rem in `{colors.text-dark}`, sat between process steps.\n\n**Legend Swatch** — A 18px square with 4px rounded corners and a 2px border. Holds a fill color matched to a corresponding data series.\n\n## Do's and Don'ts\n\n### Do\n- Pair Fredoka One with Quicksand strictly by role — Fredoka for every headline and display moment, Quicksand for every paragraph and meta line. The two-face contrast is the system's voice.\n- Set the default canvas to `{colors.cream}`. Reach for a saturated pastel surface (turquoise, soft-pink, mint, etc.) when the slide wants a tonal mood, but cream is the safe default for content-heavy moments.\n- Apply a 3px solid charcoal outline plus a `{shadows.default}` or `{shadows.small}` hard offset shadow to every elevated container. The outline + offset shadow combo is the system's signature elevation.\n- Apply the `{shadows.text-headline}` text-shadow to every Fredoka One headline placed over a saturated pastel surface. Skip it only on cream.\n- Cluster 3–7 hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) around every slide's edges, often cropping past the boundary. Empty corners look broken in this system.\n- Use outlined colored discs as list bullets — never bare hyphens or asterisks. The `{components.bullet-dot}` with `{colors.butter}` fill is the default.\n- Reserve `{colors.coral}` for small high-attention markers (step numbers, timeline dots, day-headers). Coral as a full slide surface breaks the warmth-balance and reads aggressive.\n- Center the main content container with a max-width well inside the slide padding. The decorations need room at the edges; full-bleed content blocks the ornament layer.\n- Rotate marker / dot colors through the pastel set (coral → mint → sky → lavender → butter) when a sequence needs distinct steps. Do not use a single color for all steps.\n\n### Don't\n- Don't use any font other than Fredoka One and Quicksand. The system loads only those two faces from Google Fonts. Adding a third face breaks the storybook voice.\n- Don't put Quicksand into a headline or Fredoka One into a paragraph. The role / face mapping is strict.\n- Don't use square corners. Every card, every badge, every marker has some radius — the smallest radius in the system is 4px (legend swatch), and most are 20px or larger.\n- Don't use blurred or rgba shadows. The system uses solid charcoal offsets only. `0 4px 12px rgba(0,0,0,0.1)` does not exist here.\n- Don't use colored borders. All borders are charcoal `{colors.text-dark}`.\n- Don't use coral as a full slide surface. Coral is the system's high-attention spot color; it loses power if it covers a region.\n- Don't render Fredoka One in italic, underline, or stretched weights. Fredoka has one weight — that's the design.\n- Don't omit the text-shadow on Fredoka headlines that sit on a saturated pastel surface. The shadow is what unifies headline weight with the outlined-shape vocabulary.\n- Don't leave a slide's corners empty of decorations. The ornament layer is part of the composition, not optional dressing.\n- Don't pile two cards on top of each other without separation. The system reads as one main content region per slide, surrounded by ornament — not as a stack of competing panels.\n\n## Responsive Behavior\n\nThe system targets a viewport-fluid layout (everything sized in `clamp()` or `vw`), but is tuned for desktop / projector at roughly 1280–1920 width. Two responsive breakpoints adapt the grids:\n\n- **`@media (max-width: 768px)`**: Slide padding tightens to `24px 20px`. Multi-column grids collapse: the 5-column weekly grid drops to 3, the 4-column team grid drops to 2, the 2-column info-card grid drops to 1, the horizontal process flow stacks vertically with rotated arrows, and the horizontal donut layout stacks. The right-edge nav dots hide. Decoration opacity drops to 0.6 so they don't overwhelm the cramped layout.\n- **`@media (max-width: 480px)`**: The 3-column weekly grid drops further to 2. Decoration opacity drops to 0.4.\n\n### Presenter Behavior\n- Scroll-snap-y mandatory locks each slide to the viewport on vertical scroll.\n- Keyboard: ArrowDown / ArrowRight / Space / PageDown advance; ArrowUp / ArrowLeft / PageUp reverse; Home jumps to first; End jumps to last.\n- Right-edge nav dots show current slide and accept click-to-jump.\n- A bottom-center counter pill displays `N / total` and updates via IntersectionObserver.\n\n### Print / Export\nThere is no `@media print` rule defined. Print export will inherit the scroll-container layout, which may not paginate cleanly. Treat this as a screen-first system; a separate print stylesheet would be needed for PDF export.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Fredoka One 400) | Fredoka One | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body (Quicksand 500–600) | Quicksand | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare ZCOOL XiaoWei *after* Fredoka One and Yozai *after* Quicksand in the same `font-family` stack so Latin glyphs render in the Latin face and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Fredoka+One&family=Quicksand:wght@400..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Fredoka One\", \"ZCOOL XiaoWei\", cursive;\n  --font-body: \"Quicksand\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.75 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 0.02em Fredoka tracking jams Hanzi strokes together). Keep Latin tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any badge/label when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei's rounded soft display register is the closest Hanzi analogue to Fredoka One's chubby storybook voice — it carries the same \"friendly children's-book\" mood at headline scale without becoming saccharine. Yozai's open counters and modest stroke contrast match Quicksand's humanist warmth, so body paragraphs and meta lines feel continuous with the pastel-garden aesthetic. The 3px charcoal text-shadow on headlines that sit on saturated pastel surfaces works identically on ZCOOL XiaoWei — apply `{shadows.text-headline}` to Chinese headlines on turquoise / butter / peach surfaces, and `{shadows.text-headline-soft}` on soft-pink / mint, exactly as the Latin rule prescribes. The colored bullet-dots, hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows), framed-header cap-and-body pattern, and pastel marker rotation are all content-agnostic. The single-weight constraint of Fredoka One maps cleanly to ZCOOL XiaoWei's single-weight constraint — neither face supports italic, underline, or weight axis variation, which preserves the system's \"one weight, one face per role\" discipline.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a single-weight display face with limited glyph coverage compared to Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage and a similar friendly humanist register. ZCOOL XiaoWei reads slightly more literary-formal than Fredoka One's chubby chunky personality — Chinese decks built with Daisy Days will feel ~20% more \"calm pastel\" and ~20% less \"sticker-sheet kawaii\" than the Latin original. The hand-drawn SVG ornaments (daisy, star, sun, cloud, rainbow) carry the storybook mood that the typography slightly loses, so on Chinese decks consider clustering 5–7 ornaments per slide (the upper end of the 3–7 range) to recover the playful weight.\n\n## Iteration Guide\n\n1. Any new container is rounded (20px / 28px / pill / circle), bordered in 3px charcoal, and shadowed with `{shadows.default}` or `{shadows.small}`. Never ship a flat rectangle with square corners.\n2. Any new headline is Fredoka One. If it sits on a saturated pastel surface, it gets a 3px charcoal text-shadow and switches color to `{colors.white}`. If it sits on cream or on a white card, it stays `{colors.text-dark}` and skips the shadow.\n3. Any new paragraph is Quicksand 500 by default; Quicksand 600 when the paragraph needs emphasis.\n4. Any new bullet is an outlined colored disc (`{components.bullet-dot}`), not a glyph. The default fill is butter, but circle bullets can rotate through the pastel set.\n5. Any new sequence of markers (steps, timeline nodes, day labels) rotates through the pastel set (`coral → mint → sky → lavender → butter`) rather than reusing one color.\n6. Any new slide needs 3–7 SVG decorations clustered at corners and edges. Draw from the established ornament types (daisy, star, sun, cloud, rainbow) — do not introduce a new ornament style (e.g. line-art arrows, photo cutouts).\n7. Any new accent surface picks one of the eight pastels. Do not introduce a ninth color.\n8. Coral stays a small-marker color only. Do not make a coral surface, a coral card, or a coral headline.\n9. Any list bullet sits 4px from the top of the first text line, vertically aligned with x-height, not the line baseline.\n10. When a new component needs a \"two-part frame\" feel, reach for the `{components.framed-header}` pattern (colored cap + white body) rather than nesting two separate cards.\n\n## Known Gaps\n\n- The two Google Fonts (Fredoka One, Quicksand) are loaded via `<link>` from Google Fonts CDN. Offline rendering will fall back to `cursive` and `sans-serif` system defaults, which collapses the entire typographic identity. Self-hosting the fonts is required for offline / print reliability.\n- The hand-drawn SVG decorations (daisy, star, sun, cloud, rainbow) are inline SVG with their stroke colors hardcoded to `#232323` or `#2D2D2D`. There is no programmatic way to recolor them to match a new palette — extending the decoration library requires authoring new SVG sources.\n- The system uses scroll-snap navigation (not absolute-positioned slides). It does not have a dedicated print stylesheet; PDF export of the deck will not paginate one-slide-per-page out of the box.\n- The nav-dots / slide-counter / keyboard / observer JavaScript is embedded inline and hardcodes the slide count via the `<div class=\"nav-dot\">` array. Adding a new slide requires manually adding a corresponding nav-dot div.\n- The pastel surfaces (turquoise, mint, peach) have varying perceived brightness; the text-shadow treatment for headlines must be tuned per-surface (the system already does this — full charcoal for bold surfaces, 20%-opacity charcoal for soft surfaces). New surface colors will require a similar tuning decision.\n- The `--text-muted` color (#6B6B6B) is used for subtitles and captions but has limited contrast against pastel surfaces. Reserve muted text for use on cream or on white cards, not on pastel surfaces directly.\n- The decoration SVGs include a placeholder comment string `SVG created with Arrow, by QuiverAI (https://quiver.ai)` — this is the original authoring tool credit and can be stripped without affecting rendering.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/preview.md":"# Daisy Days Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/daisy-days/design.md`\n- Preview card: `bold-template-pack/templates/daisy-days/preview.md`\n\n## Selection Metadata\n\n- Slug: `daisy-days`\n- Tagline: Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm.\n- Mood: cheerful, playful, warm, sunny, wholesome\n- Tone: friendly, soft, encouraging, approachable, lighthearted\n- Formality: low\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration. Also lovely for an unexpected playful internal kickoff, a wedding planning deck, or any moment where warmth is the message — including across tech or business contexts.\n- Avoid for: Contexts where the audience explicitly expects authority and precision — the hand-drawn pastel SVG decorations are the opposite of buttoned-up.\n\n## Visual Snapshot\n\nA cheerful, childlike presentation system built around the chunky display face Fredoka One and the rounded humanist sans Quicksand. The palette is a sunny garden — cream canvas, turquoise, soft pink, butter yellow, mint, lavender, peach, sky blue, and a single coral accent — with charcoal-brown 2D outlines wrapping every shape. Hard offset shadows in dark charcoal, generous border-radius, and hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) anchor the aesthetic somewhere between a children's storybook spread and a sticker-sheet kawaii zine.\n\nDaisy Days is a cheerful childlike presentation system rooted in a single typographic pairing: the chubby rounded display face Fredoka One for every headline, and the friendly humanist sans Quicksand for every line of body and meta text. The visual language descends from picture-book illustration and sticker-sheet kawaii: every shape carries a charcoal 2D outline, every elevated element casts a solid offset shadow, and every surface is a pastel from a sunny garden palette.\n\n## Preview Ingredients\n\n- Palette: cream #F5F0E6; turquoise #7ECDC0; soft-pink #F7C8D4; butter #FDE68A; mint #A8E6CF; lavender #D4A5E8; peach #FFCBA4; sky #A8D8F0\n- Typography: See full design doc after selection.\n- Signature move: Cream ({colors.cream}) default canvas with rotating pastel surfaces — every slide may pick a different surface color.\n- Signature move: Fredoka One for all headline / display / quote text; Quicksand 500/600 for all body and meta text.\n- Signature move: Every shape and card carries a 3px solid charcoal outline ({colors.text-dark}) plus a hard offset shadow ({shadows.default} or {shadows.small}).\n- Signature move: Generous border-radius: 20px on standard cards, 28px on featured cards, pill ({spacing.radius-pill}) on badges, full circle on dots and avatars.\n- Signature move: Hand-drawn SVG ornaments (daisies, stars, suns, clouds, rainbows) cluster at corners and crop past slide edges as atmospheric layer.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/design.md":"---\nversion: alpha\nname: Editorial Forest\ndescription: A serif-led editorial presentation system in the register of a literary quarterly or art-book monograph. Display type runs in Source Serif 4 at weight 500 with optical-size axis engaged, scaling up to 220px for cover and stat moments. The palette pairs a deep forest green (#2e4a2a) with a dusty rose pink (#e89cb1) over an oat-cream paper ground (#efe7d4), with JetBrains Mono as the editorial chrome (labels, captions, axis ticks). The aesthetic is closer to a Penguin classic, Apartamento spread, or quiet annual report than a tech keynote — confident, paper-feeling, and committed to a small color vocabulary.\n\ncolors:\n  green: \"#2e4a2a\"\n  green-deep: \"#243a21\"\n  green-lite: \"#3a5a36\"\n  pink: \"#e89cb1\"\n  pink-deep: \"#d27e96\"\n  cream: \"#efe7d4\"\n  cream-2: \"#e6dcc4\"\n  ink: \"#1a1a17\"\n\ntypography:\n  display-hero:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 220\n    fontWeight: 500\n    lineHeight: 0.92\n    letterSpacing: -0.02em\n  display:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 140\n    fontWeight: 500\n    lineHeight: 1.02\n    letterSpacing: -0.02em\n  headline-xl:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 96\n    fontWeight: 500\n    lineHeight: 0.96\n    letterSpacing: -0.02em\n  headline:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 84\n    fontWeight: 500\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  headline-sm:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 80\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.02em\n  title-card-lg:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 84\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.01em\n  title-card:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 68\n    fontWeight: 500\n    lineHeight: 0.96\n    letterSpacing: -0.01em\n  title-card-sm:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 56\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.01em\n  figure-caption-serif:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 56\n    fontWeight: 500\n    lineHeight: 1.05\n  name:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 44\n    fontWeight: 600\n    lineHeight: 1.0\n  meta-value:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 32\n    fontWeight: 500\n  body-lg:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 32\n    fontWeight: 400\n    lineHeight: 1.32\n  body:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 30\n    fontWeight: 400\n    lineHeight: 1.38\n  body-card:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 26\n    fontWeight: 400\n    lineHeight: 1.34\n  label:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-tight:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  caption-mono:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 24\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  axis-mono:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.08em\n  stat-figure:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 220\n    fontWeight: 500\n    lineHeight: 0.92\n    letterSpacing: -0.03em\n  stat-figure-unit:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 110\n    fontWeight: 500\n    lineHeight: 0.92\n\nspacing:\n  slide-pad-default: \"96px 120px\"\n  slide-pad-narrow: \"100px 120px\"\n  slide-pad-wide: \"100px 140px\"\n  slide-pad-statement: \"130px 160px\"\n  grid-gap-cards: 28\n  grid-gap-topics: 24\n  grid-gap-kpi: 60\n  rule-weight: \"2px\"\n  rule-weight-card: \"2.5px\"\n  radius-card: \"6px\"\n  radius-card-step: \"8px\"\n  radius-bar-top: \"3px 3px 0 0\"\n  radius-mark-circle: \"50%\"\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  topic-tile:\n    description: \"Bordered or filled rectangular region holding a mono ordinal, a serif title, optional body, and a mono foot. Background may be green / green-lite / pink / cream-2-with-green-border. Corner radius 6px.\"\n    borderRadius: \"{spacing.radius-card}\"\n    padding: \"40px 40px 36px\"\n  step-tile:\n    description: \"Vertical card carrying a mono ordinal, a serif title, body paragraph, and a mono marker row separated by a top rule. Background fills: cream-with-green-border, solid green, or solid pink.\"\n    borderRadius: \"{spacing.radius-card-step}\"\n    padding: \"40px 32px 32px\"\n    minHeight: \"470px\"\n    border: \"2.5px solid currentColor-region\"\n  monogram-circle:\n    width: \"130px\"\n    height: \"130px\"\n    borderRadius: \"{spacing.radius-mark-circle}\"\n    border: \"2px solid {colors.pink}\"\n    fontFamily: \"JetBrains Mono\"\n    fontSize: 28\n    letterSpacing: 0.1em\n    fontWeight: 500\n    description: \"Outlined round mark holding a short mono monogram. The system's signature identity stamp.\"\n  topbar:\n    placement: \"top edge of slide\"\n    layout: \"flex space-between, baseline-aligned\"\n    content: \"{components.label} on the left, monogram-circle or counter on the right\"\n  footline:\n    position: \"absolute\"\n    placement: \"bottom edge of slide, full-width between slide padding\"\n    layout: \"flex space-between\"\n    typography: \"{typography.caption-mono}\"\n  meta-dl:\n    description: \"Three-column definition list separated by a top rule (2px {colors.green}). Each entry has a mono dt label and a serif dd value.\"\n    columns: 3\n    gap: \"36px\"\n    topBorder: \"2px solid {colors.green}\"\n  bar:\n    width: \"56px\"\n    borderRadius: \"{spacing.radius-bar-top}\"\n    description: \"Vertical chart bar in pink, cream, or green. Value label printed above bar in mono.\"\n  chart-axis:\n    border: \"2px solid currentColor\"\n    description: \"Y-axis and x-axis use a single 2px rule on the inner edges of the plot region; no full axis box.\"\n  rule-thin:\n    description: \"Hairline 2px rule, used as section separator above kpi rows, summary grids, meta dls. Color follows region (green on cream, pink on green).\"\n  legend-swatch:\n    display: \"inline-block\"\n    width: \"26px\"\n    height: \"26px\"\n    borderRadius: \"2px\"\n    description: \"Small filled square preceding a mono legend label. 2px corner radius is the smallest radius in the system.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nEditorial Forest is a **serif-led editorial presentation system** in the tonal register of a Penguin classic, a quiet annual report, or an art-book spread. The system's foundational premise is a single, confident typographic voice — Source Serif 4 — used at extreme scale (up to 220px) for headlines and stat figures, with JetBrains Mono playing the supporting role of editorial chrome (labels, captions, axis ticks, page footlines).\n\nThe serif is run at **weight 500** for nearly every display moment — never the more familiar 400 or 700. The 500 weight is the system's most distinctive typographic choice: heavy enough to feel authored, light enough to keep the page calm. Optical-size axis is engaged (`opsz` 8..60), which means the same Source Serif 4 face renders with subtly different letterforms at 26px caption sizes versus 220px display sizes — the small sizes pick up extra contrast and finer details automatically. JetBrains Mono runs at 500 in uppercase with 0.14em–0.18em letter-spacing, used for every label, tag, caption, axis tick, and footer line. The system never mixes a third typeface.\n\nThe palette is a tight five-color editorial set built around three primary surfaces: a **deep forest green** (`{colors.green}` — #2e4a2a), a **dusty rose pink** (`{colors.pink}` — #e89cb1), and an **oat cream paper** (`{colors.cream}` — #efe7d4). Two near-duplicates round out the set: `{colors.green-deep}` for green-on-pink text contrast, `{colors.green-lite}` for tile fills that need a second green shade, `{colors.pink-deep}` for pink-on-pink borders, and `{colors.cream-2}` for tiles that sit on the main cream surface. Body text everywhere is `{colors.ink}` (#1a1a17) — a warm near-black — except when sat on a green or pink surface, where it switches to the surface's complementary color (cream or pink on green; green-deep or cream on pink).\n\nDepth is **flat and paper-based**. There are no drop shadows, no glows, no gradients, no overlays. Elevation is communicated entirely through color-block contrast, 2px hairline rules, and the difference between a filled region and a bordered region. The 6px and 8px card radii are the only roundness in the system besides the monogram circle. The page feels printed, not glassy.\n\n**Density philosophy: spacious and committed.** Each slide carries one strong subject — a headline, a quote, a chart, a stat row, a card grid — surrounded by deep negative space. The slide padding of 96–140px is generous; the top of the slide carries a mono topbar (label + monogram or counter), the bottom carries a mono footline, and the middle holds the main subject at scale. A slide that crams two competing content blocks reads as broken; a slide with one display headline + supporting cards + breathing room reads as authoritative. Reach for fewer elements at larger sizes rather than more elements at smaller sizes.\n\n**Key Characteristics:**\n- Three-color editorial palette: deep forest green, dusty rose pink, oat cream paper. Two surface tones per slide is typical; three is loud.\n- Source Serif 4 at weight 500 for every headline, body, and display moment. Optical-size axis engaged for size-aware letterforms.\n- JetBrains Mono at weight 500 uppercase with wide tracking (0.14em–0.18em) for every label, caption, axis tick, and footline.\n- Display type scales to 220px for cover and stat-figure moments; 96px for primary headlines; 56–84px for card titles.\n- 2px hairline rules separate stacked sections — never thicker, never colored beyond region context.\n- Card radius is 6px for topic tiles and 8px for step tiles. The monogram circle is the only fully round shape.\n- Every slide carries a topbar (label + monogram or counter) and most carry a footline (mono caption row). The chrome anchors the editorial feel.\n- No shadows, no gradients, no glows. Elevation is color-block + rule.\n\n## Colors\n\n### Palette\n- **Green** (`{colors.green}` — #2e4a2a): The deep forest primary. Used as a slide surface, a tile fill, a card border, a meta-dl rule color, and a primary text color on cream surfaces. The most distinctive surface in the system.\n- **Green Deep** (`{colors.green-deep}` — #243a21): A darker green used almost exclusively as text color on pink surfaces, where pure green would lack contrast. Also used as text color on pink tiles.\n- **Green Lite** (`{colors.green-lite}` — #3a5a36): A lighter green used as a tile fill when two greens need to sit beside each other (e.g., a primary green tile next to a secondary green-lite tile in the same grid). Carries pink text.\n- **Pink** (`{colors.pink}` — #e89cb1): A dusty rose. Used as a slide surface, a tile fill, the on-green text color, a bar-chart series color, and the monogram circle border color. The system's primary accent.\n- **Pink Deep** (`{colors.pink-deep}` — #d27e96): A slightly darker rose used only as a border color on pink-filled tiles where the same-color border needs to differentiate from the fill.\n- **Cream** (`{colors.cream}` — #efe7d4): The oat paper surface. The default slide background on non-cover slides, the on-green body text color, and the cream bar-chart series color.\n- **Cream 2** (`{colors.cream-2}` — #e6dcc4): A subtly darker cream used as a tile fill on the cream slide surface. Pairs with a 2px green border so the tile reads as distinct from the slide ground.\n- **Ink** (`{colors.ink}` — #1a1a17): The body text color on cream surfaces. A warm near-black; never pure #000.\n\n### Defaults\n- **Default slide background**: `{colors.cream}` for content-heavy slides; `{colors.green}` for cover, statement-data, summary, and any moment that needs gravity.\n- **Default headline color on `{colors.cream}` surface**: `{colors.green}`.\n- **Default headline color on `{colors.green}` surface**: `{colors.cream}` for primary headlines, `{colors.pink}` for hero / cover-scale headlines.\n- **Default headline color on `{colors.pink}` surface**: `{colors.green-deep}`.\n- **Default body color on `{colors.cream}` surface**: `{colors.ink}`.\n- **Default body color on `{colors.green}` surface**: `{colors.cream}`.\n- **Default body color on `{colors.pink}` surface**: `{colors.green-deep}`.\n- **Default label / caption color**: matches the region's accent (label is pink on green, green on cream, green-deep on pink).\n- **Default tile fill on a cream slide**: choose from the rotation — solid green (with pink text), solid pink (with green-deep text), green-lite (with pink text), or cream-2 with a 2px green border (with green text). A single grid typically mixes 3 of these 4.\n- **Default rule color**: green on cream, pink on green, green-deep on pink. The 2px hairline always picks up the region's accent.\n\nThe palette is intentionally tight. Introducing a fourth chromatic family (a yellow, a blue, an additional rose) breaks the editorial discipline. Stick to the green / pink / cream triad and let the contrast between filled and bordered tiles do the variation work.\n\n## Typography\n\n### Font Family\nThe system loads exactly two web fonts: **Source Serif 4** (with the full optical-size axis 8..60 and weights 300–800) and **JetBrains Mono** (weights 400, 500, 700). Source Serif 4 carries every editorial moment — headlines, body, captions in serif, names, figures. JetBrains Mono carries every piece of chrome — labels, taglines, axis ticks, footlines, ordinals on tiles.\n\nThe mono / serif pairing is the system's typographic identity. Mono never tries to be the headline; serif never tries to be the caption. The roles are inverted from a typical \"sans for chrome, serif for body\" stack — here it's \"mono for chrome, serif for body and display.\"\n\nSource Serif 4 is run at **weight 500** for nearly every moment. Weight 400 appears only for body paragraphs (where the lighter weight reads better at small scale). Weight 600 appears once, for the attribution name on the statement slide — its slightly heavier set distinguishes a proper name from surrounding mono labels. Weight 700 is not used.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-hero}` | 220px | Source Serif 4 | 500 | Cover-scale or closing-scale headline |\n| `{typography.display}` | 140px | Source Serif 4 | 500 | Pull-quote / big-idea statement |\n| `{typography.headline-xl}` | 96px | Source Serif 4 | 500 | Primary section headline on cream |\n| `{typography.headline}` | 84px | Source Serif 4 | 500 | Primary section headline on green |\n| `{typography.headline-sm}` | 80px | Source Serif 4 | 500 | Stat-row introductory headline |\n| `{typography.title-card-lg}` | 84px | Source Serif 4 | 500 | Title inside a hero topic tile (largest tile in a grid) |\n| `{typography.title-card}` | 68px | Source Serif 4 | 500 | Title inside a step tile |\n| `{typography.title-card-sm}` | 56px | Source Serif 4 | 500 | Title inside a standard topic tile |\n| `{typography.figure-caption-serif}` | 56px | Source Serif 4 | 500 | Centered figure / image-placeholder caption |\n| `{typography.stat-figure}` | 220px | Source Serif 4 | 500 | KPI numeral |\n| `{typography.stat-figure-unit}` | 110px | Source Serif 4 | 500 | Unit suffix on a KPI numeral (e.g. \"%\") |\n| `{typography.name}` | 44px | Source Serif 4 | 600 | Personal name in an attribution row |\n| `{typography.meta-value}` | 32px | Source Serif 4 | 500 | Definition-list value in a meta row |\n| `{typography.body-lg}` | 32px | Source Serif 4 | 400 | Primary body paragraph in a summary or stat description |\n| `{typography.body}` | 30px | Source Serif 4 | 400 | Standard body paragraph |\n| `{typography.body-card}` | 26px | Source Serif 4 | 400 | Body inside a card or tile |\n| `{typography.label}` | 26px | JetBrains Mono | 500 / 0.18em | Eyebrow or section label in topbar |\n| `{typography.label-tight}` | 26px | JetBrains Mono | 500 / 0.14em | Caption row, foot line, attribution row, tile ordinal |\n| `{typography.caption-mono}` | 24px | JetBrains Mono | 500 / 0.12–0.16em | Tile foot, tile marker, kpi tag, meta-dl term |\n| `{typography.axis-mono}` | 26px | JetBrains Mono | 500 / 0.08em | Chart axis ticks and labels |\n\n### Defaults\n- **Default size for a primary section headline**: `{typography.headline-xl}` (96px) on cream surfaces, `{typography.headline}` (84px) on green surfaces.\n- **Default size for a cover-scale or closing-scale moment**: `{typography.display-hero}` (220px).\n- **Default size for a quote / big-idea statement**: `{typography.display}` (140px).\n- **Default size for a body paragraph**: `{typography.body}` (30px) in serif weight 400.\n- **Default size for a body paragraph inside a card / tile**: `{typography.body-card}` (26px).\n- **Default size for a meta dt label or tile ordinal**: `{typography.caption-mono}` (24px) in JetBrains Mono uppercase.\n- **Default size for a topbar label / eyebrow**: `{typography.label}` (26px) in JetBrains Mono uppercase with 0.18em tracking.\n- **Default weight for any serif moment**: 500. (400 is reserved for body paragraphs; 600 only for a proper name in attribution.)\n- **Default weight for any mono moment**: 500.\n\nWhen unsure, reach for `{typography.headline-xl}` (96px) for the slide's primary headline on cream, not the larger display sizes. The 140–220px tier is reserved for statement, stat-figure, and hero/closing moments — using it for routine headlines flattens the system's hierarchy.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every JetBrains Mono element is UPPERCASE with letter-spacing of at least 0.08em.** Mono in sentence case or without tracking reads as code, not editorial chrome. The wide tracking is what makes mono feel like a caption row in a magazine, not a terminal.\n- **Every Source Serif 4 display element uses negative letter-spacing (-0.01em to -0.03em).** Tighter tracking pulls the large serif glyphs into a single mass and is essential for the 96–220px sizes. Display serif at default tracking reads loose and untreated.\n- **Display headlines use line-height between 0.92 and 1.02.** Tight line-height is part of the system's display voice. Larger headlines run tighter (0.92 at 220px); smaller headlines (84–96px) run at 0.96–1.0.\n- **Body paragraphs use serif weight 400, not 500.** The weight drop from headline to body is the system's reading rhythm. Body at 500 reads heavy.\n- **Every slide carries a topbar (mono label + monogram or counter on the opposite edge).** The topbar is the system's universal chrome anchor.\n- **Hairline rules between sections are always 2px solid.** Never 1px (reads as web app), never 3px+ (reads as poster).\n\n### Typography Principles\nThe weight 500 + optical-size + tight tracking combination is the system's display voice — switching any of those three properties (e.g., serif weight 700, or default tracking, or no opsz) reads as a different design system. The serif/mono role split is strict: mono never appears at headline scale, serif never appears at axis-tick scale.\n\nItalics are not used anywhere in the system. Underline is not used. Emphasis is communicated through size and color contrast, not type variants.\n\n## Layout\n\n### Canvas System\nThe system targets a fixed **1920×1080** canvas. Slides are `<section>` elements at exact width/height; rendering relies on `deck-stage.js` to scale the canvas to fit the viewport. The canvas is paper, not a viewport — designed for projector, printer, or PDF export.\n\n### Slide Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.slide-pad-default}` | 96px 120px | Standard slide padding |\n| `{spacing.slide-pad-narrow}` | 100px 120px | Data, framework, stats slides — slightly taller top padding |\n| `{spacing.slide-pad-wide}` | 100px 140px | Cover, summary slides — extra side padding for hero headlines |\n| `{spacing.slide-pad-statement}` | 130px 160px | Statement slide — most generous padding for the display-quote moment |\n\nPick the padding that matches the content gravity. Statement-class moments get the widest padding; everyday content slides use the default 96×120.\n\n### Chrome Anatomy\nEvery slide carries (at minimum) a **topbar** at the top edge — a flex-row with a JetBrains Mono `{typography.label}` on one side and either a `{components.monogram-circle}` or a mono counter / location string on the other. Heavier slides (cover, data, summary) also carry a **footline** absolutely positioned at `bottom: 60–80px` with a mono caption row spanning the slide width between the padding.\n\nThe topbar is the system's spine. Without it, a slide reads as untreated.\n\n### Card Radii\n| Value | Use |\n|---|---|\n| 2px | Legend swatch only (smallest radius in the system) |\n| 3px 3px 0 0 | Top corners of bar-chart bars |\n| 6px | Topic tile (agenda-style grid) |\n| 8px | Step tile (framework-style grid) |\n| 50% | Monogram circle |\n\nCards are subtly rounded — never sharp-cornered, never heavily-rounded. The 6–8px radius gives the system its paper-not-plastic feel.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThere are **no shadows in this system**. Not on cards, not on tiles, not on text, not on the monogram circle. Elevation is communicated entirely through:\n\n1. **Color-block contrast** — a green tile on a cream slide reads as elevated because the dark green block separates from the paper ground.\n2. **2px hairline rules** — section separators (above kpi rows, summary grids, meta dls) sit on a 2px line in the region's accent color.\n3. **Border vs fill** — a cream-2 tile with a 2px green border reads as a different elevation than a solid-fill tile beside it.\n\nThe absence of shadow is itself the elevation language. Adding `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` would shatter the editorial feel.\n\n### Paper-Surface Rule\nEvery surface in the system reads as paper, not as a digital pane. The cream tones (`{colors.cream}`, `{colors.cream-2}`) carry that quality literally. The green and pink surfaces inherit it by association — used at full saturation, surrounded by cream chrome, never with shadow or glow, they read as printed ink on stock.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **2px solid** — the universal hairline. Section separator rules above kpi rows / summary grids / meta dls / chart axes; the border on cream-2 tiles; the border on the monogram circle.\n- **2.5px solid** — step-tile borders. Slightly heavier so the tile reads as a separate object from a hairline rule.\n\nBorders take the region's accent color (`{colors.green}` on cream, `{colors.pink}` on green, `{colors.green-deep}` or `{colors.pink-deep}` on pink).\n\n### Decorative Element Types\n\n**Monogram Circle** (`{components.monogram-circle}`) — A 130px outlined circle with a 2px pink border, holding a 2–3-character JetBrains Mono monogram at 28px. Lives in the top-right of cover and summary slides. The system's identity stamp.\n\n**Topbar** (`{components.topbar}`) — A flex row spanning the top of every slide. A JetBrains Mono label on one side, a monogram or counter or location string on the other. The topbar establishes which surface family the slide belongs to (label color tells you).\n\n**Footline** (`{components.footline}`) — An absolutely positioned flex row at `bottom: 60–80px` spanning the slide between padding. Two mono caption strings (e.g., a section name on the left, a page number on the right). Used on cover, data, summary, and any slide that wants to feel like a printed page.\n\n**Topic Tile** (`{components.topic-tile}`) — A 6px-radius rectangular region holding a mono ordinal, a serif title, optional body, and a mono foot string. Background fills rotate through green, green-lite, pink, or cream-2-with-green-border. A grid of these tiles is the agenda / table-of-contents pattern.\n\n**Step Tile** (`{components.step-tile}`) — An 8px-radius vertical card with 2.5px border, holding a mono ordinal, a serif title (68px), a body paragraph, and a mono marker row separated by a top rule. Background fills: cream-with-green-border, solid green, or solid pink. A row of 3–4 step tiles is the framework / process pattern.\n\n**KPI Block** — A vertical stack: mono tag (24px) on top, oversized serif figure (220px) with optional 110px unit, then a serif description paragraph (30px). Sits inside a row separated above by a 2px pink rule on green surfaces.\n\n**Bar (chart)** — A 56px-wide rectangle with top corners rounded at 3px, filled in pink, cream, or green. The value label is mono 24px, absolutely positioned 38px above the bar.\n\n**Meta Definition List** (`{components.meta-dl}`) — A three-column dt/dd grid with a 2px top border. The dt is mono 24px uppercase tracked, the dd is serif 32px weight 500. Used as a credits / specs / details row at the bottom of a two-column slide.\n\n**Legend Row** — A horizontal flex of mono uppercase items, each preceded by a 26×26px filled swatch with 2px corner radius. Used in chart and data contexts.\n\n## Do's and Don'ts\n\n### Do\n- Run every display headline in Source Serif 4 at weight 500 with negative letter-spacing (-0.01em to -0.03em) and tight line-height (0.92–1.0). The combination is the system's voice.\n- Run every label, caption, tag, axis tick, and footline in JetBrains Mono at weight 500 uppercase with 0.08em–0.18em letter-spacing.\n- Place a topbar (mono label + monogram or counter) on every slide. The topbar is the system's spine.\n- Pick a single dominant surface per slide (green, pink, or cream) and let it carry the whole canvas. Two surface colors per slide is the maximum.\n- Pair tile fills in a grid: rotate through green + pink + green-lite + cream-2-with-green-border rather than reusing one fill across all tiles.\n- Use 2px solid hairline rules to separate stacked sections (kpi rows, summary grids, meta dls). The hairline is the system's separator language.\n- Scale display type aggressively when content allows — 140–220px for statement, hero, and closing moments. The system rewards bigness when there's room.\n- Use generous slide padding (96–160px). Negative space is part of the editorial register; cramped padding reads as broken.\n- Reserve the monogram circle for cover and summary moments. Using it on every slide dilutes its function as an identity stamp.\n\n### Don't\n- Don't add box-shadow to any element. The system is shadow-free; adding shadow shatters the paper feel.\n- Don't introduce a third typeface. Only Source Serif 4 and JetBrains Mono. No Inter, no system stack.\n- Don't run serif text in italic or underline. Emphasis is size and color, not type variant.\n- Don't render JetBrains Mono in sentence case or without letter-spacing. Mono without uppercase + tracking reads as code, not chrome.\n- Don't introduce a fourth chromatic family (yellow, blue, lavender). The green / pink / cream triad is the entire palette.\n- Don't use heavy borders (4px+) or thin hairlines (1px). The system has 2px and 2.5px — pick one.\n- Don't pile two competing content blocks on one slide. One subject per slide; expand or split.\n- Don't use rgba transparency for surface colors. Each surface is solid ink-on-paper.\n- Don't run serif body text at weight 500 — it reads heavy. Body is weight 400; display is weight 500.\n- Don't omit the topbar. A slide without the mono label at the top loses its editorial spine.\n\n## Responsive Behavior\n\nThis is a **fixed 1920×1080 presentation system** rendered through `deck-stage.js`. The canvas is not responsive in the web sense — there are no media queries, no breakpoints, no fluid sizing. Every measurement is in fixed pixels at 1920×1080.\n\n### Scaling Behavior\nThe `deck-stage.js` script wraps each `<section>` and scales the 1920×1080 canvas uniformly to fit the browser viewport, letterboxing as needed. Type, padding, gaps, and rule weights are all in pixels and scale proportionally with the canvas. Borders that read as 2px at 1920px will read as 1px at 960px viewport width — this is acceptable inside the system's tolerance.\n\n### Presenter Behavior\nNavigation is delegated to whatever wrapper `deck-stage.js` provides — there is no inline keyboard handler. Treat each `<section>` as a slide; the runtime handles transitions.\n\n### Print / Export\nBecause every measurement is fixed-pixel inside a 1920×1080 canvas, the system exports cleanly to PDF at the same aspect ratio (16:9). Source Serif 4 with the optical-size axis renders well at print resolution because the small-sized variants pick up the print-appropriate letterform detail automatically.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display headline (220 / 140 / 96 / 84px) | 霞鹜文楷 LXGW WenKai (Noto Serif SC fallback) | 400 | Literary, handwritten-ish brushwork; matches the Penguin-classic register of Source Serif 4 |\n| Body paragraph (26 / 30 / 32px) | 思源宋体 Noto Serif SC | 400 | Reads as the printed body voice of a literary quarterly |\n| Stat figure (220px) | 思源宋体 Noto Serif SC | 700 | Mincho weight 700 gives the numeric mass that Source Serif 4 weight 500 provides in Latin |\n| Mono label / caption / footline (24–26px) | 思源等宽 Noto Sans Mono CJK SC | 500 | JetBrains Mono has no CJK glyphs; Noto Sans Mono CJK SC preserves the typewriter-chrome quality |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Source Serif 4 as the Latin face and fall back to LXGW WenKai (for headlines / display) or Noto Serif SC (for body / stats) for CJK glyphs. This is the right call for Editorial Forest because the Source Serif 4 optical-size axis is a signature of the system; replacing it wholesale with a Mincho would flatten the Penguin-classic register that defines the deck. The font-family stack puts the Latin face first, then the CJK fallback, then the generic serif:\n\n```css\nfont-family: 'Source Serif 4', 'Source Serif Pro', 'LXGW WenKai TC', 'Noto Serif SC', Georgia, serif;\n```\n\nBrowsers per-glyph fall back: Latin characters render in Source Serif 4 at weight 500 with opsz engaged, Chinese characters render in LXGW WenKai (display) or Noto Serif SC (body). The baseline mismatch at display sizes (96–220px) is the main thing to watch — LXGW WenKai sits slightly higher than Source Serif 4 in optical baseline, so a mixed-script line like \"Designed in 北京\" may show a 1–2px vertical wobble. Acceptable for slide content; for printed export, prefer all-CJK or all-Latin lines.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>` (or as a second link tag):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=LXGW+WenKai+TC&family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\nLXGW WenKai TC is the version served on Google Fonts (the Simplified-Chinese build `LXGW+WenKai+SC` is not yet on the Google CDN — TC ships both traditional and simplified glyphs and works for both).\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.92–1.0 on display, 1.32–1.38 on body) read as cramped in Chinese. Bump display to 1.0–1.1 and body to 1.5–1.6.\n- **Remove negative letter-spacing on CJK headlines.** Source Serif 4 display uses -0.01em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Latin portion was meant to be capitalized.\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between LXGW WenKai and Noto Serif SC inside the same sentence — pick the face that matches the size tier (display = LXGW WenKai, body = Noto Serif SC) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nEditorial Forest's whole voice is \"Penguin classic / quiet annual report\" — a serif at weight 500 with the optical-size axis doing the size-aware letterform work. The Chinese equivalent of that register is **LXGW WenKai for display moments** (it has the same hand-set, slightly informal warmth as Source Serif 4 at 500) and **Noto Serif SC at 400 for body** (the calm Mincho voice that reads like a literary journal). Avoid Noto Sans SC for body — the sans face flips the system into \"tech report\" rather than \"monograph spread.\"\n\nThe system's mono / serif role split (JetBrains Mono for chrome, Source Serif 4 for everything else) maps cleanly onto Chinese. Use Noto Sans Mono CJK SC for the topbar label, footline strings, tile ordinals, and axis ticks — keep them uppercase-equivalent (i.e., 0.14em–0.18em letter-spacing on Latin labels, and for Chinese, the Mono CJK face at 500 weight provides the same chrome quality). Do not run Chinese labels in LXGW WenKai or Noto Serif SC; the editorial chrome would lose its typewriter feel.\n\n### Known CJK Gap\n\nLXGW WenKai's brushwork warmth is its strength at large display sizes, but at body scale (26–32px) the same brushwork reads slightly noisy. The system bumps body to Noto Serif SC (a cleaner Mincho) to avoid this, but the visual handoff between a 96px LXGW WenKai headline and a 30px Noto Serif SC paragraph below it is the system's biggest CJK seam — the two faces have different stroke contrast profiles. If the seam reads loud, use Noto Serif SC for both display and body (sacrifices warmth for consistency), or use LXGW WenKai for both (sacrifices body legibility for consistency). The default split is the right trade-off for most decks, but worth a manual check on cover and statement slides.\n\n## Iteration Guide\n\n1. Any new headline is Source Serif 4 weight 500 with negative letter-spacing. Pick the size from the display ladder (220 / 140 / 96 / 84 / 80 / 68 / 56) — do not invent a new size.\n2. Any new label, caption, or tag is JetBrains Mono weight 500 uppercase with 0.08em–0.18em letter-spacing. Pick the size from the mono ladder (26 / 24).\n3. Any new slide carries a topbar at the top. The mono label color follows the surface (pink-on-green, green-on-cream, green-deep-on-pink).\n4. Any new card uses 6px (topic tile) or 8px (step tile) radius. The monogram circle is the only fully round shape; do not introduce a fourth radius.\n5. Any new section separator is a 2px hairline rule in the region's accent color. No 1px rules, no 3px rules.\n6. Any new fill color must come from the existing palette (`{colors.green}`, `{colors.green-lite}`, `{colors.pink}`, `{colors.cream}`, `{colors.cream-2}`). Do not introduce a yellow, blue, or third pink.\n7. Any new body paragraph is serif weight 400 at 26–32px. Do not run body at weight 500.\n8. Any new KPI figure is `{typography.stat-figure}` (220px). Smaller KPI sizes are not in the system — if the layout can't accommodate 220px, restructure the slide.\n9. Any new chart uses the bar treatment (pink / cream / green fills, mono axes, 2px axis rules) on a green surface. The data composition is part of the system identity.\n10. When in doubt, reach for fewer elements at larger sizes. The system's editorial register collapses when crowded.\n\n## Known Gaps\n\n- The system depends on `deck-stage.js` for canvas scaling and slide navigation. The script is not described in this design.md — treat it as a runtime dependency.\n- Source Serif 4 and JetBrains Mono are loaded from Google Fonts via `<link>`. Offline rendering will fall back to Georgia serif and Menlo mono respectively, which will preserve the rough character but lose the optical-size axis and the JetBrains Mono identity. Self-hosting recommended for offline / print reliability.\n- The Source Serif 4 optical-size axis (`opsz` 8..60) is critical to the system's quality — using a non-opsz fallback face flattens the size-aware letterform contrast.\n- The bar chart uses hand-set bar heights (`%` of a fixed 520px plot region). There is no data-binding — extending the chart requires manually computing heights.\n- The monogram circle, footline strings, and tile counters carry hardcoded text in the source. Replacing them with a deck's actual identity is required per-deck.\n- The system has no `@media print` rule and no responsive breakpoints — it is fixed 1920×1080 and relies on `deck-stage.js` for any viewport adaptation.\n- The green-on-pink and pink-on-green text contrast ratios are sufficient at the display sizes used (84px+) but would fail WCAG AA at body-text sizes. Do not put 26px body text in pink-on-green or green-on-pink — keep small text in cream-on-green or ink-on-cream.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/preview.md":"# Editorial Forest Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/editorial-forest/design.md`\n- Preview card: `bold-template-pack/templates/editorial-forest/preview.md`\n\n## Selection Metadata\n\n- Slug: `editorial-forest`\n- Tagline: Forest green, dusty pink, and warm cream meet Source Serif 4 in a quiet, intentional quarterly-review deck.\n- Mood: editorial, quiet, considered, warm, intentional\n- Tone: literary, thoughtful, warm, low-pressure\n- Formality: medium\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel like a considered editorial — quarterly reviews, internal readouts, studio updates, creative-agency presentations. Equally good for any deck that wants to feel warm and unhurried rather than corporate, including research recaps, book or program announcements, and team retrospectives.\n- Avoid for: Contexts that need to feel urgent, punchy, or sales-driven — the palette and rhythm are intentionally quiet.\n\n## Visual Snapshot\n\nA serif-led editorial presentation system in the register of a literary quarterly or art-book monograph. Display type runs in Source Serif 4 at weight 500 with optical-size axis engaged, scaling up to 220px for cover and stat moments. The palette pairs a deep forest green (#2e4a2a) with a dusty rose pink (#e89cb1) over an oat-cream paper ground (#efe7d4), with JetBrains Mono as the editorial chrome (labels, captions, axis ticks). The aesthetic is closer to a Penguin classic, Apartamento spread, or quiet annual report than a tech keynote — confident, paper-feeling, and committed to a small color vocabulary.\n\nEditorial Forest is a serif-led editorial presentation system in the tonal register of a Penguin classic, a quiet annual report, or an art-book spread. The system's foundational premise is a single, confident typographic voice — Source Serif 4 — used at extreme scale (up to 220px) for headlines and stat figures, with JetBrains Mono playing the supporting role of editorial chrome (labels, captions, axis ticks, page footlines).\n\n## Preview Ingredients\n\n- Palette: green #2E4A2A; green-deep #243A21; green-lite #3A5A36; pink #E89CB1; pink-deep #D27E96; cream #EFE7D4; cream-2 #E6DCC4; ink #1A1A17\n- Typography: JetBrains Mono\n- Signature move: Three-color editorial palette: deep forest green, dusty rose pink, oat cream paper. Two surface tones per slide is typical; three is loud.\n- Signature move: Source Serif 4 at weight 500 for every headline, body, and display moment. Optical-size axis engaged for size-aware letterforms.\n- Signature move: JetBrains Mono at weight 500 uppercase with wide tracking (0.14em–0.18em) for every label, caption, axis tick, and footline.\n- Signature move: Display type scales to 220px for cover and stat-figure moments; 96px for primary headlines; 56–84px for card titles.\n- Signature move: 2px hairline rules separate stacked sections — never thicker, never colored beyond region context.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/design.md":"---\nversion: alpha\nname: Editorial Tri-Tone\ndescription: A literary magazine-meets-annual-report presentation system built on a strict three-color palette — blush pink, golden butter, and deep burgundy wine. Despite having eleven CSS variable names, only three hex values exist in the entire system; every alias is a semantic rename of one of those three. Headlines run Bricolage Grotesque (a variable grotesque with an optical-size axis) at extreme weights and negative letter-spacing. Instrument Serif (italic-cut only) appears as the expressive accent face for chapter numerals, pull-quotes, years, and signatures. JetBrains Mono carries all metadata, labels, and section markers at tight uppercase tracking. The aesthetic is \"independent arts publication\" — the kind with a colophon, hand-numbered editions, and an editorial desk.\n\ncolors:\n  pink: \"#F2B6C6\"\n  butter: \"#F2D86A\"\n  burgundy: \"#7A1F35\"\n\ncolor-aliases:\n  pink-deep: pink\n  sky: pink\n  cream: butter\n  lime: butter\n  terracotta: butter\n  navy: burgundy\n  forest: burgundy\n  ink: burgundy\n\ntypography:\n  display-wordmark:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 300px\n    fontWeight: 800\n    lineHeight: 0.82\n    letterSpacing: -0.04em\n  display-closer:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 320px\n    fontWeight: 700\n    lineHeight: 0.82\n    letterSpacing: -0.05em\n  display-stat:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 540px\n    fontWeight: 700\n    lineHeight: 0.78\n    letterSpacing: -0.06em\n  display-stat-unit:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 220px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  chapter-num:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 240px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  quote-mark:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 200px\n    fontWeight: 400\n    lineHeight: 0.6\n    letterSpacing: 0\n  display-xl:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 84px\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.02em\n  display-lg:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 76px\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.02em\n  signature:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 64px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  endorsement-num:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 56px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    color: pink\n  timeline-year:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 56px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  subhead-serif:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 48px\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0\n  lede:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 56px\n    fontWeight: 500\n    lineHeight: 1.05\n    letterSpacing: -0.02em\n  cover-pill:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 44px\n    fontWeight: 500\n    lineHeight: 1.0\n    letterSpacing: 0\n  chart-title:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 40px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  card-title:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 40px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  quote-heading:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 56px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  body-lg:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.45\n    letterSpacing: 0\n  body-md:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 26px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-sm:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.45\n    letterSpacing: 0\n  label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  label-wide:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-mid:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  label-tight:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.10em\n    textTransform: uppercase\n  footer:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    opacity: 0.75\n\nspacing:\n  slide-pad: 96px\n  chrome-gutter: 64px\n  section-gap: 48px\n  card-pad: 28px 28px 30px\n  chart-pad: 48px 48px 56px\n  footer-bottom: 36px\n  grid-gap: 24px\n  endorsement-pad: 20px 0\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  pill:\n    borderRadius: 999px\n    padding: 0.35em 0.9em\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontWeight: 500\n    lineHeight: 1.0\n  cover-pill:\n    borderRadius: 999px\n    padding: 16px 38px\n    fontSize: 44px\n    fontWeight: 500\n  closer-pill:\n    borderRadius: 999px\n    padding: 12px 28px\n    fontSize: 22px\n  value-card:\n    borderRadius: 28px\n    padding: 28px 28px 30px\n    height: 340px\n  value-card-dark:\n    background: \"{colors.burgundy}\"\n    color: \"{colors.butter}\"\n  value-card-light:\n    background: \"{colors.butter}\"\n    color: \"{colors.burgundy}\"\n  chart-card:\n    background: \"{colors.butter}\"\n    color: \"{colors.burgundy}\"\n    borderRadius: 32px\n    padding: 48px 48px 56px\n  timeline-ribbon:\n    background: \"{colors.burgundy}\"\n    color: \"{colors.butter}\"\n    borderRadius: 999px\n    padding: 24px 44px\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  timeline-ribbon-accent:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 30px\n    fontWeight: 400\n    letterSpacing: 0\n    textTransform: none\n    color: \"{colors.pink}\"\n  footer-chrome:\n    position: absolute\n    left: 64px\n    right: 64px\n    bottom: 36px\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    opacity: 0.75\n  footer-dot:\n    width: 8px\n    height: 8px\n    borderRadius: 999px\n    background: currentColor\n    opacity-inactive: 0.3\n    opacity-active: 1.0\n  swatch-circle:\n    width: 36px\n    height: 36px\n    borderRadius: 999px\n  stat-breakdown-bar:\n    height: 10px\n    borderRadius: 999px\n    background: \"rgba(246,237,220,0.15)\"\n  stat-breakdown-divider:\n    borderTop: \"1px solid rgba(246,237,220,0.25)\"\n  endorsement-divider:\n    borderTop: \"1px solid rgba(246,237,220,0.30)\"\n  avatar:\n    width: 72px\n    height: 72px\n    borderRadius: 999px\n    background: \"{colors.burgundy}\"\n    border: \"3px solid {colors.burgundy}\"\n  timeline-axis:\n    height: 4px\n    background: \"{colors.burgundy}\"\n    opacity: 0.15\n  timeline-dot:\n    width: 28px\n    height: 28px\n    borderRadius: 999px\n    border: \"4px solid {colors.butter}\"\n    background: \"{colors.burgundy}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nEditorial Tri-Tone is a **literary magazine presentation system** built on the strictest possible palette: three hex values, eleven CSS variable names. The naming system reveals editorial intent — `--pink` and `--sky` point at the same blush; `--cream`, `--butter`, `--lime`, and `--terracotta` all resolve to the same golden yellow; `--burgundy`, `--navy`, `--forest`, and `--ink` all collapse to the same deep wine. The aliases exist to communicate the role of the color in context, not to introduce variation.\n\nThe typeface stack is a deliberate three-way conversation:\n1. **Bricolage Grotesque** — a variable grotesque with an optical-size axis. Used at weights 500, 600, 700, and 800 for all display and body sans text.\n2. **Instrument Serif** — used exclusively in weight 400, often in its italic guise. Reserved for chapter numerals, pull-quote marks, timeline years, signatures, endorsement ordinals, and stat percentage symbols.\n3. **JetBrains Mono** — all metadata, labels, section markers, footnotes, footer chrome.\n\nThe editorial voice is that of an independent magazine with a colophon — the deck's last slide is literally called \"Colophon.\" Section markers use the section sign (§) followed by a number and a title. The tone is measured, literary, and warm rather than corporate or high-energy.\n\n**Key Characteristics:**\n- Three-color palette with semantic aliases: blush pink (#F2B6C6), golden butter (#F2D86A), deep burgundy (#7A1F35).\n- Mixed typography: Bricolage Grotesque grotesque for display and body; Instrument Serif for expressive accent numerals, quotes, and years; JetBrains Mono for all labels.\n- The `em` tag within Bricolage Grotesque headlines always triggers a switch to Instrument Serif italic — the system's primary typographic mix.\n- Pills (border-radius 999px) are the universal tag component; used at three different sizes across cover, chart legend, and closer.\n- Value cards have a generous 28px border-radius — soft, rounded, not brutalist.\n- Dividers on dark surfaces use low-opacity rgba (0.25–0.30) rather than solid colors — whispered separators.\n- Footer dot row: a progress indicator using 8px circles at 30% opacity (inactive) and 100% opacity (active).\n- The sole SVG chart combines four series types on a single canvas: filled area, vertical bars, connected circles, dotted line.\n\n## Colors\n\n### The Three Actual Colors\nDespite many CSS variable names, the palette is:\n\n| Name | Hex | Role |\n|---|---|---|\n| Blush Pink | #F2B6C6 | Accent / highlight on dark surfaces; stat figure color; quote mark glow |\n| Golden Butter | #F2D86A | Warm mid-tone; background for light slides; accent text on dark surfaces |\n| Deep Burgundy | #7A1F35 | Primary dark surface; ink color; structural tone |\n\n### Alias Map\nAll aliases resolve to one of the three values above. The alias name signals context:\n\n| Alias | Points to | Context of use |\n|---|---|---|\n| `--pink` | #F2B6C6 | Default accent label |\n| `--pink-deep` | #F2B6C6 | (unused distinct value — same as pink) |\n| `--sky` | #F2B6C6 | Segment D bar in breakdown |\n| `--cream` | #F2D86A | Light surface background |\n| `--butter` | #F2D86A | Accent text on dark; card backgrounds |\n| `--lime` | #F2D86A | Ribbon accent text; kicker label on dark surfaces |\n| `--terracotta` | #F2D86A | Italic em highlights in lede or body |\n| `--navy` | #7A1F35 | Alternate label for dark surface contexts |\n| `--forest` | #7A1F35 | Dark panel or column background |\n| `--burgundy` | #7A1F35 | Structural background color |\n| `--ink` | #7A1F35 | All text color |\n\n\n## Typography\n\n### Font Families\n- **Bricolage Grotesque**: The primary typeface. Variable with optical-size axis (opsz 12..96) and weights from 400 to 800. The weight range is the expressive tool — 400 for body, 500 for lede, 600 for card titles and quote headers, 700 for section headlines, 800 for the wordmark.\n- **Instrument Serif**: Weight 400 only, italic variant loaded. Functions as the expressive counterpoint to Bricolage Grotesque. Never used for body copy; always for large numerals, quotation marks, signatures, years, endorsement ordinals, and the stat percentage symbol. The key insight is that the system never uses Instrument Serif for \"normal\" running text — only for moments of human expressiveness.\n- **JetBrains Mono**: Weights 400 and 500. All labels are uppercase with 0.10–0.18em letter-spacing. Always secondary information: section markers, metadata, footnotes, legend categories, kickers, footer chrome.\n\n### The `em` Rule\nWithin any Bricolage Grotesque headline, an `<em>` tag triggers a switch to Instrument Serif at weight 400. This is the system's primary in-line typographic mix — a grotesque headline interrupted by a serif aside. Example: \"A short trajectory, told in *five stops*.\" The em portion reads as a quieter, more reflective counterpoint.\n\n### The `b` Rule (Quote Slide Only)\nWithin Instrument Serif blockquotes, a `<b>` tag triggers a switch back to Bricolage Grotesque weight 600 in burgundy. The reverse of the em rule — a serif quote punctuated by a grotesk emphasis.\n\n### Display Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-stat}` | 540px | Bricolage Grotesque | 700 | Full-bleed oversized stat or number figure |\n| `{typography.display-closer}` | 320px | Bricolage Grotesque | 700 | Jumbo title or closing wordmark |\n| `{typography.display-wordmark}` | 300px | Bricolage Grotesque | 800 | Primary wordmark or deck title |\n| `{typography.display-stat-unit}` | 220px | Instrument Serif | 400 | Accent symbol alongside a stat figure |\n| `{typography.chapter-num}` | 240px | Instrument Serif | 400 | Large chapter or section numeral |\n| `{typography.quote-mark}` | 200px | Instrument Serif | 400 | Decorative large quotation mark |\n| `{typography.display-xl}` | 84px | Bricolage Grotesque | 700 | Section headline for data or chart layouts |\n| `{typography.display-lg}` | 76px | Bricolage Grotesque | 700 | Section headlines |\n| `{typography.signature}` | 64px | Instrument Serif | 400 | Signature or sign-off element |\n| `{typography.lede}` | 56px | Bricolage Grotesque | 500 | Lede or opening statement |\n| `{typography.quote-heading}` | 56px | Bricolage Grotesque | 600 | Panel heading or editorial subhead |\n| `{typography.endorsement-num}` | 56px | Instrument Serif | 400 | Endorsement or list ordinals |\n| `{typography.timeline-year}` | 56px | Instrument Serif | 400 | Year stamps or large ordinal accents |\n| `{typography.subhead-serif}` | 48px | Instrument Serif | 400 | Secondary subheads on dark surfaces |\n| `{typography.cover-pill}` | 44px | Bricolage Grotesque | 500 | Large tag cloud or keyword pills |\n| `{typography.chart-title}` | 40px | Instrument Serif | 400 | Card or panel title |\n| `{typography.card-title}` | 40px | Bricolage Grotesque | 600 | Card or value title |\n\n### Body and Label Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.body-lg}` | 28px | Bricolage Grotesque | 400 | Manifesto right-column body |\n| `{typography.body-md}` | 26px | Bricolage Grotesque | 600/400 | Attribution name, endorsement body |\n| `{typography.body-sm}` | 24px | Bricolage Grotesque | 400 | Card descriptions, stat annotation, closer index |\n| `{typography.label}` | 24px | JetBrains Mono | 400 | Standard section labels (0.15em tracking) |\n| `{typography.label-wide}` | 24px | JetBrains Mono | 400 | Kickers on dark slides (0.18em tracking) |\n| `{typography.label-mid}` | 24px | JetBrains Mono | 400 | Manifesto bottom meta (0.12em) |\n| `{typography.label-tight}` | 24px | JetBrains Mono | 400 | Legend categories, breakdown labels (0.10em) |\n| `{typography.footer}` | 16px | JetBrains Mono | 400 | Page footer chrome (0.12em, opacity 0.75) |\n\n### Principles\nBricolage Grotesque's optical-size axis makes the face significantly more expressive at large sizes and more legible at small sizes without changing weight. At 540px and 300px (stat and wordmark), the display renders with wide, open letterforms; at 24px (body), it compresses. Both are weight 700 or 800 at display; both are weight 400 at body. The face is never used in intermediate sizes (48–72px) — that zone belongs to Instrument Serif.\n\nLetter-spacing on Bricolage Grotesque is always negative at display: -0.04em at 300px, -0.05em at 320px, -0.06em at 540px. At body sizes (24–28px), no letter-spacing is applied.\n\nJetBrains Mono label tracking is always positive and varies by use: 0.10em for dense data contexts, 0.12em for secondary meta, 0.15em for standard section labels, 0.18em for headline kickers on dark slides.\n\n## Layout\n\n### Canvas System\nEvery slide is exactly 1920×1080px. The `deck-stage` custom element handles centering and scaling.\n\n### Gutter System\n- **Chrome gutter** (64px left/right): Used by footer chrome and most content edges.\n- **Generous slide padding** (96px): Most slides use `padding: 96px 64px` — the top/bottom pad is larger than the sides, giving a portrait-publication feel even on landscape slides.\n- **Wide slide padding** (88px top on chart slide): Slight reduction to accommodate the two-column layout.\n\n\n### Slide Internal Spacing Pattern\nEach slide follows a top-to-bottom reading order:\n1. Section marker (`§ XX — Title`, JetBrains Mono, 24px, label tracking)\n2. Headline or major content\n3. Body / grid content\n4. Footer meta (absolute, bottom 36px)\n\n## Elevation and Depth\n\nThe system uses **no box shadows at all**. Depth comes entirely from:\n\n### Color Surface Contrast\nThe burgundy/butter/pink trio creates its own depth hierarchy:\n- Butter surfaces feel \"forward\" (warm, light)\n- Pink feels \"accented\" (warm, mid)\n- Burgundy feels \"recessed\" (dark, anchoring)\n\nAlternating surface colors within split slides (cream left / burgundy right on manifesto; lime left / burgundy right on quote) creates depth through edge contrast rather than shadow.\n\n### Opacity Dividers\nOn dark (burgundy) surfaces, all dividers and structural lines use rgba rather than solid colors:\n- Row separators in stat breakdown: `rgba(246,237,220,0.25)`\n- Endorsement rows in quote slide: `rgba(246,237,220,0.30)`\n- Timeline axis: `opacity: 0.15` on solid burgundy\n\nThe cream values (246,237,220) in those rgba strings approximate the butter color at full opacity — dividers feel like recessed etchings rather than drawn lines.\n\n### Chart Card Lift\nThe chart card (slide 6) achieves its \"lifted\" feeling through border-radius 32px on a butter card placed over a burgundy background. No shadow — the rounded corner on a contrasting surface signals elevation.\n\n## Shapes and Treatment\n\n### Border Radius Scale\n| Value | Use |\n|---|---|\n| 999px | All pills, timeline ribbon, swatch circles, avatar, breakdown bars, timeline dots, footer dots, chart data circles |\n| 32px | Chart card (slide 6) |\n| 28px | Value cards (slide 3) |\n| 4px | SVG chart bars (rx=\"4\") |\n| 0px | Section headlines, grid cells (no rounding) |\n\nThe system has a strong binary: either fully rounded (pills, circles) or square (content blocks). The exception is the chart card (32px) and value cards (28px) — large enough radius to feel \"soft\" but geometric rather than circular.\n\n### Pill System\nPills are the universal label/tag component. Three size variants:\n- **Cover pills**: 44px font, 16px 38px padding — large enough to read as headline elements in the tag cloud\n- **Standard pills** (section labels, legend items): 22–24px font, 10–12px 24–28px padding\n- **Color assignments** alternate: burgundy-bg/pink-text and butter-bg/burgundy-text on cover; burgundy/cream or lime/ink on closer\n\n### SVG Chart (Slide 6)\nThe inline SVG chart at 720×380 viewBox combines four series types deliberately to demonstrate the range of a single chart surface:\n- **Area series** (Series A): Filled path with pink fill at 0.85 opacity, burgundy stroke at weight 3\n- **Bar series** (Series C): Burgundy rectangles with rx=\"4\"\n- **Connected circle series** (Series B): Butter circles (r=8) with burgundy stroke/fill on a burgundy line at weight 3\n- **Dotted line** (Series D): Burgundy dashed stroke (stroke-dasharray=\"2 10\", stroke-linecap=\"round\") at 60% opacity\n\nY-axis labels are JetBrains Mono 24px at 60% opacity, left-aligned to x=0.\n\n## Do's and Don'ts\n\n### Do\n- Treat the three hex values as a closed system. Every element uses pink, butter, or burgundy — no neutrals, no grays, no white.\n- Use Instrument Serif only for moments of human expressiveness: numerals, years, signatures, quotation marks, endorsement ordinals. Never for running body text.\n- Use the `em` tag in Bricolage Grotesque headlines to trigger the serif switch. This is the system's primary inline mix and its clearest editorial voice.\n- Give all label text (JetBrains Mono) positive letter-spacing between 0.10em and 0.18em. Monospace without tracking reads as code, not editorial.\n- Alternate surface colors across the two-column split slides. One side is always butter, the other always burgundy.\n- Keep body text in Bricolage Grotesque at weights 400 (text) and 500–600 (emphasized labels). The weight axis is the tonal dial.\n- Use pills at multiple sizes — the pill is the universal tag and its size signals context: 44px for headline-level categorization, 22–24px for utility labels.\n- Section markers follow the pattern `§ NN — Title` in JetBrains Mono — every slide opens with this convention.\n\n### Don't\n- Don't introduce a fourth color. The tri-tone constraint is the design premise.\n- Don't use Instrument Serif at small sizes or in body paragraphs. It is purely an accent face.\n- Don't break the em rule — using Bricolage Grotesque italic instead of Instrument Serif for inline emphasis loses the typographic mix.\n- Don't use letter-spacing on Bricolage Grotesque at display sizes — only negative tracking via `letter-spacing: -0.02em` to `-0.06em` depending on size.\n- Don't add solid-color dividers on dark (burgundy) surfaces. All structural lines on dark backgrounds must use low-opacity rgba.\n- Don't apply box shadows. The system has none. Depth comes from surface contrast and border-radius on contrasting backgrounds.\n- Don't round large content containers (section panels, grid backgrounds). Rounding applies only to pill-scale and card-scale elements (value cards, chart card).\n- Don't use Bricolage Grotesque weight 800 except in the wordmark. The weight 800 is reserved for the single largest typographic moment.\n\n## Responsive Behavior\n\nThis template is designed **exclusively for 1920x1080 presentation display**. The `deck-stage` web component handles viewport scaling via CSS transforms; the 1920x1080 canvas scales proportionally to any screen without layout changes.\n\n### Presenter Behavior\n- Slide advancement via keyboard or presentation clicker (handled by `deck-stage.js`).\n- No hover states are defined.\n- No interactive elements.\n\n### Print / Export\n- At 96dpi, 1920x1080 maps to a 20x11.25 inch frame.\n- The stat figure at 540px renders at ~405pt — suitable for large-format print.\n- The three-color palette is print-safe; burgundy is a deep PMS-range wine tone, butter is a warm yellow, pink is a muted blush — all reproduce well in CMYK offset.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display wordmark / closer / stat (300–540px) | 站酷小薇体 ZCOOL XiaoWei | 400 | A literary decorative serif with the same expressive personality as Bricolage Grotesque + Instrument Serif italic at extreme scale |\n| Section headlines (76–84px) | 思源黑体 Noto Sans SC | 700 | The grotesque equivalent in CJK — carries the Bricolage Grotesque structural weight |\n| Chapter numerals / quote marks / years (200–240px) | 霞鹜文楷 LXGW WenKai | 400 | Hand-set warmth that matches Instrument Serif's expressive accent role |\n| Body paragraph (24–28px) | 思源宋体 Noto Serif SC | 400 | Mincho body voice; literary register |\n| Lede / quote-heading (56px) | 思源黑体 Noto Sans SC | 500–600 | Matches Bricolage Grotesque weight 500/600 |\n| Mono label / section marker / footer | 思源等宽 Noto Sans Mono CJK SC | 400–500 | Preserves the JetBrains Mono chrome quality for `§ NN — Title` markers |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Bricolage Grotesque (display, body) and Instrument Serif (italic accents) as the Latin faces and fall back to the Chinese stack only for CJK glyphs. The literary-magazine identity of Editorial Tri-Tone depends on Bricolage Grotesque's optical-size axis and Instrument Serif's italic cut as part of the brand voice; replacing them wholesale with a CJK family would flatten the system into \"generic Chinese editorial.\" Stack:\n\n```css\n/* Bricolage Grotesque roles (display, body) */\nfont-family: 'Bricolage Grotesque', 'Noto Sans SC', sans-serif;\n/* Instrument Serif roles (chapter-num, quote-mark, year, signature) */\nfont-family: 'Instrument Serif', 'LXGW WenKai TC', serif;\n/* JetBrains Mono roles (labels, section markers) */\nfont-family: 'JetBrains Mono', 'Noto Sans Mono CJK SC', monospace;\n```\n\nThe system's signature `<em>` rule (Bricolage Grotesque → Instrument Serif italic inline) is what carries the editorial tone in Latin. The CJK equivalent: an `<em>` inside a 思源黑体 (Noto Sans SC) headline should switch to **站酷小薇体 (ZCOOL XiaoWei)** — a decorative literary serif with the same softness contrast as Instrument Serif italic. Add a CSS rule:\n\n```css\nh1 em, h2 em, .lede em, .quote-heading em {\n  font-family: 'Instrument Serif', 'ZCOOL XiaoWei', 'LXGW WenKai TC', serif;\n  font-style: italic; /* Latin only — CJK ignores font-style */\n}\n```\n\nWatch for baseline mismatch at display sizes (300–540px): Bricolage Grotesque at -0.04em to -0.06em tracking sits visually tighter than Noto Sans SC, so a mixed-script wordmark like `INTO 中国` may feel uneven. For hero / wordmark moments, prefer single-script lines and let the second script live on its own line below.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>` (or as a second link tag):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700&family=Noto+Serif+SC:wght@400;500;700&family=LXGW+WenKai+TC&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n```\n\nZCOOL XiaoWei is the decorative-terminal serif used for the em-switch role; it's hosted on Google Fonts at weight 400 only.\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.78–0.92 on display, 1.4–1.45 on body) read as cramped in Chinese. Bump display to 0.95–1.05 and body to 1.5–1.6.\n- **Remove negative letter-spacing on CJK headlines.** Bricolage Grotesque display uses -0.04em to -0.06em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Latin portion was meant to be capitalized.\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between Noto Sans SC, Noto Serif SC, and ZCOOL XiaoWei inside the same sentence — pick the face that matches the role (headline = Noto Sans SC, body = Noto Serif SC, em-accent = ZCOOL XiaoWei) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nEditorial Tri-Tone's literary-magazine voice depends on the typographic contrast between Bricolage Grotesque (structural) and Instrument Serif italic (expressive). In Chinese, that same contrast lives in the **思源黑体 ↔ 站酷小薇体** pairing — a clean grotesque set against a literary decorative serif. The em-rule inside headlines should switch from 思源黑体 to **站酷小薇体** specifically (not 霞鹜文楷, which is warmer but less \"literary-decorative\"); this preserves the typographic mix that defines the system.\n\nFor the system's signature display moments — the 300px wordmark, the 540px stat figure, the 240px chapter numeral — Chinese is at its loudest. Reach for **站酷小薇体** when the moment is decorative (a chapter ordinal \"第一章\" rendered in literary serif) and **思源黑体 weight 700** when the moment is structural (a section headline like \"我们的方法\"). The 200px quote-mark glyph is harder in Chinese — Chinese quotation marks (「」) don't carry the same decorative weight as Latin 'curly quotes', so consider rendering the entire quote moment in the Latin glyph (using the `Instrument Serif` face on the punctuation character itself) and let the body text below switch to 思源宋体.\n\nThe section marker convention `§ NN — Title` works in Chinese: `§ 02 — 我们的承诺`. Keep the section sign and the numeral in JetBrains Mono / Noto Sans Mono CJK SC; the title text can switch to 思源黑体 weight 400 with 0.05em tracking to preserve the chrome quality.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is the right aesthetic match for the em-switch role, but it ships as **weight 400 only with no italic cut**. Chinese has no italic concept (slanted Han glyphs read as broken, not emphasized), so the lack of italic is fine — but the visual softness contrast that Instrument Serif italic provides in Latin (a slanted, more flowing letterform) cannot be exactly replicated in Chinese. The decorative-terminal serif quality of ZCOOL XiaoWei provides the closest equivalent, but the contrast against 思源黑体 is **face-based, not slant-based**. Decks with heavy reliance on the em-rule should test the visual rhythm in Chinese before committing — if the contrast feels muted, increase the em-portion font-size by 4–8px to compensate.\n\n## Iteration Guide\n\n1. Section labels always use the `§ NN — Title` convention in JetBrains Mono with `{typography.label}` tracking.\n2. Every headline with an em/italic moment uses `<em>` to trigger Instrument Serif. Never use `font-style: italic` on Bricolage Grotesque directly.\n3. Value card alternation: odd-numbered cards (c1, c3, c5, c7) are dark (burgundy/butter); even-numbered (c2, c4, c6, c8) are light (butter/burgundy).\n4. New dark-surface sections use `rgba(246,237,220,0.25)` for dividers — not `{colors.butter}` at full opacity.\n5. New pills follow the existing alternation: burgundy-bg/pink-text and butter-bg/burgundy-text for variety in clusters.\n6. Adding a chart series: use the four established visual encodings (area, bars, circles, dotted line) before inventing a new one.\n7. All section backgrounds must be one of the three palette colors — never mix (no half-pink half-butter).\n8. Footer chrome is shared across all slides: `position:absolute; left:64px; right:64px; bottom:36px; font-family:JetBrains Mono; font-size:16px; opacity:0.75`.\n\n## Known Gaps\n\n- The `deck-stage.js` script is an external dependency not documented here.\n- The footer dot-row progress indicator (`.footer .dotrow`) is rendered in the HTML but the dots are all styled with class \"on\" or left as inactive — a presenter would need to update slide state dynamically.\n- The SVG chart uses hardcoded paths, coordinates, and placeholder values — no data-binding layer exists.\n- The breakdown bars in slide 4 use inline `width: XX%` as a style — percentages must be set manually.\n- The timeline stop dots (`.stop .dot`) have `display: none` — they are styled but not visible. A presenter populating this slide would enable them via CSS.\n- Instrument Serif italic is loaded as a font variant but is not explicitly called with `font-style: italic` in every context — in some cases the browser selects it from the variable font's italic axis automatically based on surrounding context.\n- Color swatch circles on slide 4 reference `--terracotta` and `--sky`, which resolve identically to `--butter` and `--pink` — the visual distinction exists only semantically in the source, not visually.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/preview.md":"# Editorial Tri-Tone Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/editorial-tri-tone/design.md`\n- Preview card: `bold-template-pack/templates/editorial-tri-tone/preview.md`\n\n## Selection Metadata\n\n- Slug: `editorial-tri-tone`\n- Tagline: Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif.\n- Mood: editorial, warm, intentional, moody\n- Tone: literary, warm, considered, stylish\n- Formality: medium-high\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews. Equally good for any deck — including tech, research, or business — that wants tri-tone discipline and serif/sans contrast instead of the usual neutrals.\n- Avoid for: Decks that need to read as soft or comforting — the burgundy/pink/cream tri-tone is intentionally high-contrast and styled.\n\n## Visual Snapshot\n\nA literary magazine-meets-annual-report presentation system built on a strict three-color palette — blush pink, golden butter, and deep burgundy wine. Despite having eleven CSS variable names, only three hex values exist in the entire system; every alias is a semantic rename of one of those three. Headlines run Bricolage Grotesque (a variable grotesque with an optical-size axis) at extreme weights and negative letter-spacing. Instrument Serif (italic-cut only) appears as the expressive accent face for chapter numerals, pull-quotes, years, and signatures. JetBrains Mono carries all metadata, labels, and section markers at tight uppercase tracking. The aesthetic is \"independent arts publication\" — the kind with a colophon, hand-numbered editions, and an editorial desk.\n\nEditorial Tri-Tone is a literary magazine presentation system built on the strictest possible palette: three hex values, eleven CSS variable names. The naming system reveals editorial intent — --pink and --sky point at the same blush; --cream, --butter, --lime, and --terracotta all resolve to the same golden yellow; --burgundy, --navy, --forest, and --ink all collapse to the same deep wine. The aliases exist to communicate the role of the color in context, not to introduce variation.\n\n## Preview Ingredients\n\n- Palette: pink #F2B6C6; butter #F2D86A; burgundy #7A1F35\n- Typography: Bricolage Grotesque; Instrument Serif; JetBrains Mono\n- Signature move: Three-color palette with semantic aliases: blush pink (#F2B6C6), golden butter (#F2D86A), deep burgundy (#7A1F35).\n- Signature move: Mixed typography: Bricolage Grotesque grotesque for display and body; Instrument Serif for expressive accent numerals, quotes, and years; JetBrains Mono for all labels.\n- Signature move: The em tag within Bricolage Grotesque headlines always triggers a switch to Instrument Serif italic — the system's primary typographic mix.\n- Signature move: Pills (border-radius 999px) are the universal tag component; used at three different sizes across cover, chart legend, and closer.\n- Signature move: Value cards have a generous 28px border-radius — soft, rounded, not brutalist.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/emerald-editorial/design.md":"---\nversion: alpha\nname: Emerald Editorial\ndescription: \"A bold display-serif editorial system in the register of a fashion masthead or vintage magazine cover. Bodoni Moda runs at weight 900 across a wide scale (44–460px), set against a saturated emerald-green canvas with deep navy ink and oat-paper accents. The signature treatment is a stacked double-rule ornament that brackets centered display words like a 19th-century theatrical playbill. The aesthetic borrows from Harper's Bazaar / Vogue / Wallpaper covers: confident, theatrical, paper-and-ink committed, with a tight three-color palette and zero gradients or shadows.\"\n\ncolors:\n  bg: \"#3CD896\"\n  bg-2: \"#2DC684\"\n  bg-3: \"#25B377\"\n  ink: \"#0F1A5C\"\n  ink-2: \"#1B2774\"\n  ink-3: \"#3A4593\"\n  paper: \"#F1E9D6\"\n  rule: \"rgba(15, 26, 92, 0.22)\"\n  rule-strong: \"rgba(15, 26, 92, 0.85)\"\n\ntypography:\n  numeral-jumbo:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 460\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.04em\n  display-section:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 200\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.015em\n  display-cover:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 184\n    fontWeight: 900\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n  display:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 130\n    fontWeight: 900\n    lineHeight: 0.96\n    letterSpacing: -0.015em\n  display-md:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 128\n    fontWeight: 900\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n  display-sm:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 120\n    fontWeight: 900\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n  headline-xl:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 104\n    fontWeight: 900\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n  headline:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 92\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.02em\n  ornament-word-lg:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 84\n    fontWeight: 800\n    lineHeight: 1\n  ornament-word:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 76\n    fontWeight: 800\n    lineHeight: 1\n  ornament-word-sm:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 68\n    fontWeight: 800\n    lineHeight: 1\n  title-card-lg:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 64\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.005em\n  title-card:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 48\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.005em\n  title-card-sm:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 44\n    fontWeight: 800\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n  step-numeral:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 80\n    fontWeight: 900\n    lineHeight: 1\n  step-title:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 40\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.005em\n  kpi-figure:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 144\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  kpi-figure-unit:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 60\n    fontWeight: 800\n  stat-figure:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 92\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.02em\n  stat-figure-unit:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 48\n    fontWeight: 900\n  eyebrow:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 28\n    fontWeight: 800\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 26\n    fontWeight: 700\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  label-tight:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 26\n    fontWeight: 700\n    letterSpacing: 0.05em\n    textTransform: uppercase\n  tag:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 24\n    fontWeight: 800\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  caption:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 24\n    fontWeight: 700\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  body-lg:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 28\n    fontWeight: 500\n    lineHeight: 1.5\n  body:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 26\n    fontWeight: 500\n    lineHeight: 1.5\n  body-sm:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 24\n    fontWeight: 500\n    lineHeight: 1.45\n  credit:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 28\n    fontWeight: 700\n    letterSpacing: 0.18em\n    textTransform: uppercase\n\nspacing:\n  pad-default: \"110px 110px 70px\"\n  pad-cover: \"56px 110px\"\n  pad-closing: \"80px 110px\"\n  pad-statement: \"110px 110px 70px\"\n  masthead-inset: \"56px 80px\"\n  rule-thick: \"4px\"\n  rule-thicker: \"5px\"\n  rule-thin: \"2px\"\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  ornament-double-rule:\n    description: \"The system's signature treatment. A centered serif word framed by two stacked 4px horizontal rules on each side. The rules sit 3px apart on top and 3px apart on bottom, giving a 19th-century playbill / theatrical-poster bracket effect. Configurable via :root[data-ornament] to switch between double (default), single, or none.\"\n    ruleHeight: \"4px\"\n    ruleGap: \"3px\"\n    wordWeight: 800\n    wordFamily: \"'Bodoni Moda', serif\"\n  ornament-vertical:\n    description: \"An inline horizontal pair of stacked rules (each 4px tall, 8px apart) on either side of a small serif word. Used as a side bracket around connector words like prepositions.\"\n    ruleHeight: \"4px\"\n    ruleGap: \"8px\"\n    barWidth: \"64px\"\n  masthead:\n    position: \"absolute\"\n    placement: \"top: 56px, full-width between 80px side padding\"\n    layout: \"flex space-between\"\n    typography: \"{typography.label-tight}\"\n    color: \"{colors.ink}\"\n  footline:\n    position: \"absolute\"\n    placement: \"bottom: 56px, full-width between 80px side padding\"\n    layout: \"flex space-between\"\n    typography: \"{typography.label-tight}\"\n    color: \"{colors.ink}\"\n  rule-h-thick:\n    height: \"4px\"\n    background: \"{colors.ink}\"\n    description: \"Universal 4px horizontal rule used as section separator and tile/row border. The system's standard rule weight.\"\n  agenda-row:\n    description: \"A three-column grid row (130px / 1fr / 320px) with 4px ink top borders. Holds a serif ordinal, serif name, and sans-serif kind label. The last row in a list also carries a 4px bottom border, sealing the list.\"\n    rowPad: \"26px 0\"\n    topBorder: \"4px solid {colors.ink}\"\n  inverse-tile:\n    description: \"A solid {colors.ink} rectangle holding {colors.bg} text. Used for chart-card containers, kpi tiles, process steps, section-opener panels. Carries no corner radius and no shadow.\"\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"32px to 36px\"\n  paper-tile:\n    description: \"A solid {colors.paper} rectangle holding {colors.ink} text. The alt variant of inverse-tile — used in rotation across a row of process steps or kpi tiles to break the monotony of ink fills.\"\n    background: \"{colors.paper}\"\n    color: \"{colors.ink}\"\n  mark-pill:\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"10px 22px\"\n    fontWeight: 700\n    letterSpacing: 0.1em\n    fontSize: 24\n    textTransform: uppercase\n    description: \"A small ink-on-bg pill used as a category mark or section tag. No border-radius — strict rectangle.\"\n  tag-pill:\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"8px 20px\"\n    fontWeight: 700\n    letterSpacing: 0.12em\n    fontSize: 24\n    textTransform: uppercase\n  delta-pill:\n    background: \"{colors.bg}\"\n    color: \"{colors.ink}\"\n    padding: \"6px 16px\"\n    fontWeight: 800\n    letterSpacing: 0.08em\n    fontSize: 24\n    textTransform: uppercase\n    description: \"A small bg-on-ink delta indicator placed inside an inverse kpi tile to show change direction. Inverted to ink-on-bg when inside a paper-tile.\"\n  bar:\n    description: \"A vertical rectangular chart bar in bg (primary), paper (alt). Value label printed above bar in Bodoni 30px. No corner radius.\"\n    background: \"{colors.bg} or {colors.paper}\"\n  chart-card:\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"36px 50px 30px\"\n    gridLineColor: \"rgba(60, 216, 150, 0.22)\"\n    description: \"An ink container framing a bar chart on bg. Y-axis labels are Bodoni 26px on the left; x-axis labels are Manrope 24px. Grid lines are 2px at 22% bg-on-ink.\"\n  ornament-numeral-panel:\n    description: \"A full-bleed inverse panel (ink background) holding a single oversized Bodoni numeral (~460px weight 900) centered. Used as a section-opener device. Topbar / footline strings sit absolutely positioned in the panel corners.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nEmerald Editorial is a **bold display-serif editorial system** rooted in the visual language of fashion magazines and 19th-century theatrical playbills. The foundational premise is a single typographic face — **Bodoni Moda at weight 900** — used at unapologetic scale: 92px for routine headlines, 130–200px for statements and section openers, and 460px for hero numerals. The serif is loud, theatrical, and confident. Every slide leads with type, not with image.\n\nThe palette is a tight three-color editorial set: a **saturated emerald green** (`{colors.bg}` — #3CD896) as the dominant surface, a **deep navy ink** (`{colors.ink}` — #0F1A5C) as both the primary text color and the inverse-panel surface, and an **oat paper** (`{colors.paper}` — #F1E9D6) as the secondary surface for alternate tiles. The navy / emerald contrast is the system's chromatic identity; every body of text is navy-on-emerald or emerald-on-navy. Two near-duplicates of the emerald (`{colors.bg-2}`, `{colors.bg-3}`) and two of the navy (`{colors.ink-2}`, `{colors.ink-3}`) exist in the token system but are reserved — the published slides commit almost entirely to the three primaries.\n\nThe supporting typeface is **Manrope**, a humanist geometric sans, run at weight 500 for body paragraphs and weight 700–800 in uppercase with wide letter-spacing for every label, tag, eyebrow, caption, and footline. Manrope never crosses into display territory — it stops at 28px and stays in the chrome layer.\n\nThe signature treatment is the **double-rule ornament** — a centered serif word framed by two stacked 4px horizontal rules on each side, with 3px between the rules. This treatment appears as the cover's centerpiece and as a recurring statement bracket. It reads as a 19th-century playbill or vintage program — a \"The [word] of [word]\" framing device. The double-rule ornament is configurable to a single-rule or no-rule variant via a `:root[data-ornament]` attribute, but the double variant is the system's identity.\n\nDepth is **flat and ink-based**. There are no drop shadows, no gradients, no blur, no glow. Every surface is solid emerald, solid navy, or solid paper. Elevation happens through color-block inversion (a navy tile on the emerald canvas is the \"elevated\" element) and 4px ink rules separating sections. The whole system reads as printed ink on paper, not as a digital interface.\n\n**Density philosophy: medium-full and centered.** Most slides carry one display headline at scale (92–200px) plus 3–4 supporting elements (a stat row, a kpi grid, a process flow, a chart card). The slide padding of 110px gives breathing room, and the masthead/footline chrome at top and bottom anchors the page. A slide that crams six small elements reads as broken; a slide with one giant headline plus three supporting tiles reads as authoritative. Reach for fewer, larger elements. The exception: the agenda-list pattern (a vertical list of large-numbered rows separated by 4px ink rules) is naturally dense and fills the canvas vertically — and it should, when used.\n\n**Key Characteristics:**\n- Bodoni Moda at weight 900 for every display moment; Manrope at weight 500/700/800 for every body and label moment.\n- Saturated emerald canvas (`{colors.bg}`) with deep navy ink (`{colors.ink}`) text and inverse panels.\n- Double-rule ornament with centered serif word is the signature decorative device.\n- 4px ink horizontal rules separate every stacked section, every list row, every chart border. The 4px weight is the system's default rule.\n- No corner radius anywhere. Every shape is a strict rectangle, except for the round logo/typographic glyphs themselves.\n- No shadows, no gradients, no blur. Depth is color-block inversion + 4px rules.\n- Display type scales aggressively — 184–460px for hero / section-opener / closing moments.\n- Manrope chrome (labels, tags, captions) is always uppercase with 0.05em–0.18em letter-spacing.\n\n## Colors\n\n### Palette\n- **BG / Emerald** (`{colors.bg}` — #3CD896): The dominant slide canvas. A saturated, slightly cool emerald — saturated enough to feel like printed ink, not like a CSS preset. The default slide background.\n- **BG-2** (`{colors.bg-2}` — #2DC684): A slightly darker emerald reserved for tonal variation; available in the token system but used sparingly. Reach for it only when two emerald surfaces sit adjacent and need separation.\n- **BG-3** (`{colors.bg-3}` — #25B377): The darkest emerald variant; similarly reserved.\n- **Ink / Navy** (`{colors.ink}` — #0F1A5C): The deep navy primary. The text color on emerald and paper surfaces; the inverse-panel background color; the rule color; the border color. The system's structural color.\n- **Ink-2** (`{colors.ink-2}` — #1B2774): A slightly lighter navy variant — available for tonal contrast inside ink-on-ink situations, but rarely used.\n- **Ink-3** (`{colors.ink-3}` — #3A4593): The lightest navy variant; reserved.\n- **Paper** (`{colors.paper}` — #F1E9D6): The oat-cream secondary surface. Used as the alt-tile fill in process / kpi rows, as the alt bar-chart series, and anywhere a third \"warm\" surface is needed to break a row of all-navy inverse tiles. Carries `{colors.ink}` text.\n- **Rule** (`{colors.rule}` — `rgba(15, 26, 92, 0.22)`): A semi-transparent navy used only for subtle internal grid lines (e.g., chart grid lines on a dark ground). Not a structural rule color.\n- **Rule Strong** (`{colors.rule-strong}` — `rgba(15, 26, 92, 0.85)`): An 85%-opacity navy, available as a near-solid rule alternative.\n\n### Defaults\n- **Default slide background**: `{colors.bg}` (emerald). Reach for `{colors.ink}` (navy) as a full slide surface when the moment wants gravity (section opener, closing).\n- **Default headline color on emerald**: `{colors.ink}`.\n- **Default headline color on navy**: `{colors.bg}` — emerald-on-navy is the only color flip the system uses for display type.\n- **Default body color on emerald**: `{colors.ink}`.\n- **Default body color on navy**: `{colors.bg}`.\n- **Default body color on paper**: `{colors.ink}`.\n- **Default label / eyebrow / tag color**: `{colors.ink}` on emerald and paper surfaces, `{colors.bg}` on navy surfaces.\n- **Default rule color**: `{colors.ink}` at 4px solid. Always.\n- **Default inverse tile fill**: `{colors.ink}` with `{colors.bg}` text. The alt tile in a row uses `{colors.paper}` with `{colors.ink}` text.\n- **Default delta / pill fill** inside an ink tile: `{colors.bg}` background with `{colors.ink}` text. Inside a paper tile, invert to `{colors.ink}` background with `{colors.bg}` text.\n\nThe palette is intentionally tight. Introducing a fourth chromatic family (red, yellow, orange, lavender) shatters the editorial commitment. Stay inside emerald / navy / paper. The bg-2/3 and ink-2/3 variants exist for tonal nuance but should rarely be needed.\n\n## Typography\n\n### Font Family\nThe system loads several display serif families from Google Fonts (Bodoni Moda, Playfair Display, DM Serif Display, Rozha One, Yeseva One) plus Manrope as the supporting sans. **In practice, only Bodoni Moda is used for display** — the other serif families are loaded but dormant, reserved as future variants. Bodoni Moda is the canonical display face; the others are not part of the system's voice.\n\nBodoni Moda is run almost exclusively at **weight 900** — the heaviest cut. Weight 800 appears for small ornament words and tile titles (slightly less heavy so they don't compete with the primary headline). Weight 700 appears once or twice for the smallest ornament prepositions. There is no weight-500 Bodoni in the published system. The 900-weight commitment is what gives the system its theatrical-playbill voice.\n\nManrope handles everything else: body paragraphs at weight 500, labels / eyebrows / tags / captions at weight 700 or 800 in uppercase with 0.05em–0.18em letter-spacing. Manrope never appears at display scale; Bodoni never appears at chrome scale.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.numeral-jumbo}` | 460px | Bodoni Moda | 900 | Hero numeral on an inverse section-opener panel |\n| `{typography.display-section}` | 200px | Bodoni Moda | 900 | Agenda / section-title hero |\n| `{typography.display-cover}` | 184px | Bodoni Moda | 900 | Cover masthead title |\n| `{typography.display}` | 130px | Bodoni Moda | 900 | Statement / pull-quote scale |\n| `{typography.display-md}` | 128px | Bodoni Moda | 900 | KPI-row introductory headline |\n| `{typography.display-sm}` | 120px | Bodoni Moda | 900 | Process-flow introductory headline |\n| `{typography.headline-xl}` | 104px | Bodoni Moda | 900 | Chart / data introductory headline |\n| `{typography.headline}` | 92px | Bodoni Moda | 900 | Routine slide headline |\n| `{typography.ornament-word-lg}` | 84px | Bodoni Moda | 800 | Large ornament-bracketed word (statement variant) |\n| `{typography.ornament-word}` | 76px | Bodoni Moda | 800 | Standard ornament-bracketed word (cover variant) |\n| `{typography.ornament-word-sm}` | 68px | Bodoni Moda | 800 | Cover preposition between the double-rule brackets |\n| `{typography.kpi-figure}` | 144px | Bodoni Moda | 900 | KPI-tile numeral |\n| `{typography.kpi-figure-unit}` | 60px | Bodoni Moda | 800 | Unit suffix on a KPI numeral |\n| `{typography.stat-figure}` | 92px | Bodoni Moda | 900 | Secondary stat numeral (in a side panel) |\n| `{typography.stat-figure-unit}` | 48px | Bodoni Moda | 900 | Unit suffix on a secondary stat |\n| `{typography.title-card-lg}` | 64px | Bodoni Moda | 800 | Title inside a large card / agenda-row name |\n| `{typography.title-card}` | 48px | Bodoni Moda | 800 | Chart-card take-away title |\n| `{typography.title-card-sm}` | 44px | Bodoni Moda | 800 | Statement-supporting cell title |\n| `{typography.step-numeral}` | 80px | Bodoni Moda | 900 | Process-step ordinal |\n| `{typography.step-title}` | 40px | Bodoni Moda | 800 | Process-step title (sits below a top rule) |\n| `{typography.body-lg}` | 28px | Manrope | 500 | Lede / subtitle paragraph |\n| `{typography.body}` | 26px | Manrope | 500 | Standard body paragraph |\n| `{typography.body-sm}` | 24px | Manrope | 500 | Compact body in a tile / chart side panel |\n| `{typography.eyebrow}` | 28px | Manrope | 800 / 0.18em | Section eyebrow above a headline |\n| `{typography.label}` | 26px | Manrope | 700 / 0.08em | Masthead / footline label |\n| `{typography.label-tight}` | 26px | Manrope | 700 / 0.05em | Cover top/bottom strings |\n| `{typography.tag}` | 24px | Manrope | 800 / 0.12em | Inverse pill / tag (mark, delta, side-tag) |\n| `{typography.caption}` | 24px | Manrope | 700 / 0.1em | Agenda-row kind label, chart x-axis, kpi label |\n| `{typography.credit}` | 28px | Manrope | 700 / 0.18em | Author / org credit row |\n\n### Defaults\n- **Default size for a routine slide headline**: `{typography.headline}` (92px).\n- **Default size for a hero / cover-scale moment**: `{typography.display-cover}` (184px) or `{typography.display-section}` (200px).\n- **Default size for a body paragraph**: `{typography.body}` (26px) in Manrope weight 500.\n- **Default size for a body paragraph inside a tile**: `{typography.body-sm}` (24px).\n- **Default size for an eyebrow above a headline**: `{typography.eyebrow}` (28px) in Manrope 800 uppercase 0.18em.\n- **Default size for a tag / pill / chip**: `{typography.tag}` (24px) in Manrope 800 uppercase 0.12em.\n- **Default size for a KPI figure**: `{typography.kpi-figure}` (144px) with an optional 60px unit.\n- **Default weight for any Bodoni display moment**: 900. The 800 variant is reserved for ornament words and tile titles, never for primary headlines.\n- **Default weight for any Manrope body line**: 500.\n\nWhen unsure, reach for `{typography.headline}` (92px) for the slide's primary headline. The 120–200px tier is reserved for section openers, statements, and KPI-row headlines — using it for routine headlines flattens the hierarchy.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every primary Bodoni headline runs at weight 900 with negative letter-spacing (-0.01em to -0.03em) and tight line-height (0.9–0.95).** A weight-700 or weight-800 Bodoni headline reads as a sub-headline, not a primary moment.\n- **Every Manrope label, eyebrow, tag, caption, footline, and credit element is UPPERCASE with letter-spacing of at least 0.05em.** Manrope in sentence case or with default tracking reads as web app body, not editorial chrome.\n- **The double-rule ornament, when used, is bilateral — rules on both sides of the centered word.** A one-sided ornament breaks the bracket symmetry. The ornament can be downgraded to a single-rule or no-rule variant via `:root[data-ornament]`, but the default and recommended form is double.\n- **Every section separator and tile divider is a 4px solid `{colors.ink}` rule.** Never 1px, never 2px, never colored beyond ink. The 4px weight is the system's structural rhythm.\n- **Inverse tiles always carry `{colors.ink}` background with `{colors.bg}` text.** The alt paper tile carries `{colors.paper}` background with `{colors.ink}` text. Color combinations outside these pairings break the system's printed-ink discipline.\n- **Bodoni numerals at jumbo scale (200px+) live on inverse navy panels.** Putting a 460px numeral on the emerald canvas is technically possible but visually breaks the panel-anchored playbill voice; the jumbo numerals belong inside ink panels.\n\n### Typography Principles\nThe weight 900 + negative tracking + tight leading combination is the system's display voice. Switching any of those three properties (e.g., weight 700, or default tracking, or 1.2 leading) reads as a different design system. The serif/sans role split is strict: Bodoni never appears at body / label scale, Manrope never appears at display scale.\n\nItalics are loaded in the Bodoni font request but not used in the published system — keep them out unless intentionally introducing a new pattern. Underline is not used. Emphasis is communicated through size, color inversion, and ornamentation.\n\n## Layout\n\n### Canvas System\nThe system targets a fixed **1920×1080** canvas. Slides are `<section class=\"slide\">` elements at exact width/height. Rendering relies on `deck-stage.js` to scale the canvas to fit the viewport. The canvas is paper-stock, not a viewport — designed for projector, printer, or PDF export at 16:9.\n\n### Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-default}` | 110px 110px 70px | Standard content slide (asymmetric — slightly less bottom for footline) |\n| `{spacing.pad-cover}` | 56px 110px | Cover slide (less top padding to give masthead room) |\n| `{spacing.pad-closing}` | 80px 110px | Closing slide |\n| `{spacing.masthead-inset}` | 56px top, 80px sides | Absolute masthead / footline inset on cover and closing |\n\n### Chrome Anatomy\nThe cover and closing carry a **masthead** at top (a Manrope flex row with two label strings on opposite sides) and a **footline** at bottom (a matching row). Content slides typically skip the masthead and footline, leaning on the 110px-top padding to give the headline space. When the masthead is used, it lives at `top: 56px, left/right: 80px`.\n\n### Card and Tile Treatment\nThe system has **no border-radius anywhere**. Cards, tiles, kpi panels, ornament rules, mark pills, tag pills — all strict rectangles. The only round shapes are the natural curves of the Bodoni glyphs themselves. The visual rhythm comes entirely from rectangle composition and 4px ink rules.\n\n### Rule Weights\n| Weight | Use |\n|---|---|\n| 2px | Chart grid lines (subtle, semi-transparent) |\n| 4px | Universal structural rule — section separators, list-row borders, tile top rules |\n| 5px | Cover ornament rules (slightly heavier so they hold weight next to the 184px display headline) |\n| 18px height (with 4px rule top + 4px rule bottom) | Double-rule ornament span |\n\nThe 4px weight is the system's default; reach for it unless the moment specifically needs the cover's heavier 5px rules.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThe system uses **zero shadows**. No box-shadow, no text-shadow, no filter blur, no gradient. Elevation is communicated entirely through:\n\n1. **Color-block inversion** — a navy tile on the emerald canvas is the system's \"elevated\" element. Inversion is the depth language.\n2. **4px ink rules** — sections are separated by 4px solid navy lines that read as paper-fold creases between regions.\n3. **Solid panels with no border-radius** — the strict-rectangle treatment combined with full inverse fill gives tiles the weight of printed ink blocks.\n\nThere is no soft-glow, no glass, no neumorphism. Adding box-shadow shatters the printed-ink discipline.\n\n### Section-Opener Panel\nA signature elevation device: a slide can be split into a full-bleed two-column grid where the left side is a solid `{colors.ink}` panel holding a jumbo Bodoni numeral (`{typography.numeral-jumbo}` at 460px) and the right side is the standard emerald canvas with headline + lede + category marks. The panel reads as a magazine title-page opening — heavy, anchored, ceremonial. Treat this as an opener pattern, not a routine slide layout.\n\n## Shapes and Treatment\n\n### Border Radius\n**Zero.** Every shape is a strict rectangle. Pills, tags, tiles, panels, bars, mastheads, footlines, ornament words — all square corners.\n\n### Border / Rule Style\n- **4px solid `{colors.ink}`** — universal structural rule. Section separators, list-row borders, tile internal rules.\n- **5px solid `{colors.ink}`** — the cover ornament's slightly heavier rule.\n- **4px solid `currentColor`** — used inside tiles where the rule should match the tile's text color (e.g., a paper tile's internal rule is `{colors.ink}`; an ink tile's internal rule is `{colors.bg}`).\n\nRules are never dashed, never dotted, never colored beyond the ink / currentColor pattern.\n\n### Decorative Element Types\n\n**Double-Rule Ornament** (`{components.ornament-double-rule}`) — The system's signature. A centered serif word framed by two stacked 4px horizontal rules on each side (3px between them). Used on the cover (\"The [word] of [word]\" framing), on statement slides (around a small connector word), and anywhere a typographic moment needs theatrical bracketing. Configurable to single-rule or no-rule via `:root[data-ornament]`.\n\n**Vertical Side-Bracket** (`{components.ornament-vertical}`) — A smaller inline variant: a pair of stacked 4px rules on the left and a matching pair on the right of a small serif preposition. Used inline within a sentence rather than as a centered span.\n\n**Masthead / Footline** (`{components.masthead}`, `{components.footline}`) — Absolutely positioned flex rows at top/bottom of cover and closing slides. Two Manrope uppercase strings on opposite sides (e.g., publication name + date; section + page number). Establishes the magazine-page identity.\n\n**Inverse Tile** (`{components.inverse-tile}`) — A solid `{colors.ink}` rectangle holding `{colors.bg}` text. Used as a chart-card container, a kpi tile, a process step, a side panel. No border-radius, no shadow.\n\n**Paper Tile** (`{components.paper-tile}`) — The alt variant: solid `{colors.paper}` with `{colors.ink}` text. Used in rotation across a row of inverse tiles to break monotony (e.g., a four-step process flow alternates ink → paper → ink → paper).\n\n**Mark Pill** (`{components.mark-pill}`) — A small ink-on-bg pill used as a category mark or section tag in the bottom margin of a section opener. Strict rectangle.\n\n**Tag Pill** (`{components.tag-pill}`) — Slightly smaller pill variant used inside chart sides and kpi tiles to mark a takeaway or stat type.\n\n**Delta Pill** (`{components.delta-pill}`) — A bg-on-ink (or inverted ink-on-bg when inside a paper tile) chip showing a directional change indicator (e.g., \"↑ 12% YoY\"). Lives at the corner of a kpi tile.\n\n**Agenda Row** (`{components.agenda-row}`) — A three-column grid row separated above and below by 4px ink rules. Holds a serif ordinal in the left column, a serif name in the middle, and a Manrope kind label in the right. Stacked agenda rows form the system's table-of-contents pattern.\n\n**Chart Card** (`{components.chart-card}`) — A navy inverse panel holding a bar chart on emerald + paper bars. Y-axis labels in Bodoni; x-axis labels in Manrope. Grid lines are 2px at 22% opacity emerald-on-navy. The panel reads as a magazine data-spread.\n\n**Ornament Numeral Panel** (`{components.ornament-numeral-panel}`) — A full-bleed inverse half-slide holding a single Bodoni numeral at 460px. Topbar / footline strings sit in the corners. Used as a section-opener device only.\n\n## Do's and Don'ts\n\n### Do\n- Run every Bodoni display headline at weight 900 with negative letter-spacing (-0.01em to -0.03em) and tight line-height (0.9–0.95). The combination is the system's voice.\n- Run every Manrope label / eyebrow / tag / caption / footline in uppercase with at least 0.05em letter-spacing. Manrope in sentence case loses the editorial register.\n- Default slide background to `{colors.bg}` (emerald). Reach for `{colors.ink}` as a full slide surface only for section openers and closing moments.\n- Use 4px solid `{colors.ink}` rules for every section separator, list border, tile divider. The 4px weight is the system's structural rhythm.\n- Reach for the double-rule ornament when a typographic moment needs theatrical framing — especially around small connector words (\"of\", \"in\", \"for\") between two display headlines.\n- Use inverse tiles (`{colors.ink}` bg with `{colors.bg}` text) as the default elevated element. Rotate in paper tiles to break a row of all-inverse fills.\n- Scale display type aggressively — 130–460px for hero, section-opener, and statement moments. The system rewards scale.\n- Pair ink-on-bg with bg-on-ink for color flips. Do not introduce a third color flip (paper-on-ink, ink-on-paper) without a clear semantic reason.\n- Keep every shape a strict rectangle. The no-radius commitment is the system's signature alongside the double-rule ornament.\n\n### Don't\n- Don't add box-shadow, text-shadow, gradient, or blur to any element. The system is flat printed-ink only.\n- Don't introduce a third typeface beyond Bodoni Moda and Manrope. The other serif families in the Google Fonts request (Playfair, DM Serif, Rozha, Yeseva) are loaded but not part of the published voice — adding them shatters the Bodoni commitment.\n- Don't run Bodoni at weight 500 or lighter. The system commits to 900 (default), 800 (ornament words, tile titles), and 700 (small prepositions only).\n- Don't render Manrope in sentence case or without letter-spacing. Manrope is always uppercase chrome.\n- Don't introduce a fourth chromatic family. The emerald / navy / paper triad is the entire palette.\n- Don't use border-radius on any element. Zero radius is the system's signature.\n- Don't use 1px or 2px structural rules. The 4px weight is the structural default; 2px is reserved for subtle chart grid lines.\n- Don't place a 460px numeral on the emerald canvas without an ink panel anchor. Jumbo numerals live on inverse navy panels.\n- Don't crowd a slide with six small elements. One display headline + 3–4 supporting tiles is the rhythm; more elements need a smaller scale and break the editorial register.\n- Don't omit the masthead / footline on cover and closing slides. The chrome is what makes them read as magazine title pages.\n\n## Responsive Behavior\n\nThis is a **fixed 1920×1080 presentation system** rendered through `deck-stage.js`. The canvas is not responsive in the CSS sense — there are no media queries, no breakpoints, no fluid sizing. Every measurement is in fixed pixels at 1920×1080.\n\n### Scaling Behavior\n`deck-stage.js` wraps each `<section class=\"slide\">` and scales the 1920×1080 canvas uniformly to fit the browser viewport, letterboxing as needed. Type, padding, gaps, and rule weights are all fixed pixels and scale proportionally with the canvas.\n\n### Presenter Behavior\nNavigation is delegated to `deck-stage.js`. Each `<section class=\"slide\">` is one frame; the runtime handles transitions.\n\n### Print / Export\nFixed-pixel measurements inside a 1920×1080 canvas export cleanly to PDF at 16:9. Bodoni Moda renders well at print resolution because the heavy display weight carries the page even at large physical sizes.\n\n### Ornament Variant Switch\nThe `:root[data-ornament]` attribute controls a global ornament style: `\"double\"` (default, two stacked rules), `\"single\"` (one rule centered), or `\"none\"` (no rule, word floats alone). This is a presentation-level decision per deck, not per slide.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display headline (92–460px) | 霞鹜文楷 LXGW WenKai (with Noto Serif SC fallback at 900) | 400 / 900 | LXGW WenKai's hand-lettered warmth is the closest Chinese analog to Bodoni Moda's theatrical-playbill voice; Noto Serif SC at weight 900 carries the structural mass at jumbo sizes |\n| Stat / KPI figure (144px+) | 思源宋体 Noto Serif SC | 900 | Mincho weight 900 provides the printed-ink mass Bodoni Moda achieves at 900 |\n| Body paragraph (24–28px) | 思源宋体 Noto Serif SC | 400 | Mincho body voice for warm magazine-spread reading |\n| Eyebrow / label / tag (24–28px) | 思源黑体 Noto Sans SC | 700–800 | Replaces Manrope for chrome-layer Chinese; geometric humanist quality |\n| Tile mark / pill / caption | 思源黑体 Noto Sans SC | 700 | Maintains the uppercase-tracked chrome feel for inverse pills and tags |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Bodoni Moda as the Latin display face and let CJK glyphs fall through to LXGW WenKai (display) or Noto Serif SC (body). The Bodoni Moda commitment at weight 900 is the entire brand identity of Emerald Editorial; replacing it with a CJK family would break the fashion-magazine / 19th-century playbill register that defines the deck. Stack:\n\n```css\n/* Bodoni Moda roles (every display moment) */\nfont-family: 'Bodoni Moda', 'LXGW WenKai TC', 'Noto Serif SC', Georgia, serif;\n/* Manrope roles (every chrome / body moment) */\nfont-family: 'Manrope', 'Noto Sans SC', system-ui, sans-serif;\n```\n\nThe per-glyph fallback strategy lets Latin words render in Bodoni 900 (with the theatrical compression that gives the system its voice) and Chinese characters render in LXGW WenKai or Noto Serif SC. Baseline mismatch at jumbo sizes (200–460px) is the biggest watchpoint — Bodoni Moda at -0.03em tracking sits visually denser than LXGW WenKai, so a mixed-script numeral panel like `第 3 期` may show wobble. For section-opener panels with jumbo numerals, prefer all-numeric (Bodoni) or all-Chinese (LXGW WenKai) lines.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>` (or as a second link tag):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=LXGW+WenKai+TC&family=Noto+Serif+SC:wght@400;700;900&family=Noto+Sans+SC:wght@500;700;800&display=swap\" rel=\"stylesheet\">\n```\n\nLXGW WenKai TC is the version on Google Fonts (ships both traditional and simplified glyphs).\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.9–0.95 on display, 1.45–1.5 on body) read as cramped in Chinese. Bump display to 1.0–1.1 and body to 1.55–1.65.\n- **Remove negative letter-spacing on CJK headlines.** Bodoni Moda display uses -0.01em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Manrope portion was meant to be capitalized. (This matters here — every Manrope label, eyebrow, tag, caption uses `text-transform: uppercase`.)\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between LXGW WenKai and Noto Serif SC inside the same sentence — pick the face that matches the size tier (display = LXGW WenKai, body = Noto Serif SC) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nEmerald Editorial's whole voice is \"fashion masthead / 19th-century theatrical playbill\" — Bodoni Moda weight 900 at extreme scale with the double-rule ornament bracketing centered words. The Chinese equivalent of that theatrical heaviness is **LXGW WenKai at large display sizes** (its brush-warmth replicates Bodoni's hand-set character) with **Noto Serif SC at weight 900 for jumbo numerals** (where pure mass matters more than warmth). Avoid Noto Sans SC for display — the geometric grotesque flattens the playbill voice into \"modern corporate.\"\n\nThe double-rule ornament works in Chinese — bracket a single Chinese word (e.g., 「春」) between the 4px stacked rules and let LXGW WenKai's warmth carry the theatrical bracket. For the \"The X of Y\" cover convention, Chinese reads naturally as `「X」之「Y」` or `X 与 Y`, with the connector preposition (之 / 与 / 的) replacing the Latin \"of\" inside the small-prep slot. The connector word should use LXGW WenKai at weight 400 (matching the ornament-word-sm role in Latin).\n\nManrope's role as the chrome layer (uppercase + 0.08em–0.18em tracking) translates to **思源黑体 Noto Sans SC weight 700–800 with 0.05em positive tracking** for Chinese. Don't try to fake uppercase — drop the `text-transform: uppercase` rule on CJK runs and let the geometric humanist quality of Noto Sans SC carry the chrome feel through weight and tracking alone.\n\n### Known CJK Gap\n\nThe system's commitment to Bodoni Moda weight 900 at 460px (jumbo numerals on inverse navy panels) is the hardest to translate — there is no Chinese face on the Google Fonts CDN that delivers Bodoni 900's optical heaviness at that scale. Noto Serif SC at weight 900 is the closest, but the contrast profile of Han glyphs at 460px reads visually heavier than Bodoni numerals, which can overwhelm the navy panel. For jumbo-numeral section openers in Chinese, consider: (1) using a Chinese numeral character (一二三四五六七八九十) which sits visually lighter than Western digits, or (2) keeping the numeral in Bodoni (Latin) and letting the panel label below it carry the Chinese context. The pure-Chinese jumbo numeral on this system is the riskiest moment and benefits from per-slide manual review.\n\n## Iteration Guide\n\n1. Any new display headline is Bodoni Moda at weight 900 with negative letter-spacing and tight leading. Pick the size from the display ladder (92 / 104 / 120 / 128 / 130 / 184 / 200) — do not invent a new size.\n2. Any new chrome line (label, eyebrow, tag, caption) is Manrope at weight 700 or 800 uppercase with 0.05em–0.18em letter-spacing. Pick the size from the chrome ladder (24 / 26 / 28).\n3. Any new section separator or list-row border is a 4px solid `{colors.ink}` rule. No 1px / 2px / 3px structural rules.\n4. Any new tile uses the inverse-fill pattern (`{colors.ink}` bg with `{colors.bg}` text) or the paper-fill pattern (`{colors.paper}` bg with `{colors.ink}` text). Mix the two in rotation across a row of tiles.\n5. Any new pill / tag / chip is a strict rectangle (no border-radius) in the inverse-fill or bg-fill color combination from `{components.tag-pill}` / `{components.delta-pill}`.\n6. Any new KPI figure is `{typography.kpi-figure}` (144px) with an optional `{typography.kpi-figure-unit}` (60px) suffix. Smaller KPI sizes are not in the system.\n7. Any new ornament moment uses the double-rule treatment by default. Switch to single or none only via the `:root[data-ornament]` global, not per-element.\n8. Any new section-opener uses the half-bleed inverse panel + jumbo numeral pattern. The numeral lives on the navy panel; the right half holds the eyebrow + headline + lede + marks.\n9. Any new color must come from `{colors.bg}` / `{colors.ink}` / `{colors.paper}` (or the reserved bg-2/3 / ink-2/3 variants if tonal nuance is needed). Do not introduce a yellow, red, or third accent.\n10. When the layout feels crowded, increase the display headline size rather than adding more elements. The system rewards bigger type, not more pieces.\n\n## Known Gaps\n\n- The Google Fonts request loads Bodoni Moda, Playfair Display, DM Serif Display, Rozha One, Yeseva One, and Manrope. **In practice only Bodoni Moda and Manrope are used.** The other four serif families are dormant — loaded but not referenced in the CSS. They are available as alternate display voices but must be wired in explicitly.\n- The system depends on `deck-stage.js` for canvas scaling and slide navigation. The script is not described in this design.md — treat it as a runtime dependency.\n- The `:root[data-ornament]` switch (`double` / `single` / `none`) is a global presentation setting. It cannot be applied per-slide or per-ornament — switching variants applies deck-wide.\n- The ink-2 / ink-3 and bg-2 / bg-3 color tokens are defined but not actively used in the published CSS. They are reserved for tonal variation but currently dormant.\n- The bar chart uses hand-set bar heights (CSS `%`). There is no data-binding layer — extending the chart requires manually computing percentages.\n- Offline rendering will fall back to system serif (likely Georgia) for Bodoni and system sans (likely SF/Segoe) for Manrope. The Bodoni fallback dramatically flattens the display voice; self-hosting recommended for offline / print reliability.\n- The 92px Bodoni headlines maintain WCAG AA contrast at navy-on-emerald and emerald-on-navy, but smaller text (24–28px Manrope) on the same color pairings approaches the contrast floor. Keep small text in navy-on-emerald (the more contrastful direction) when possible.\n- The masthead and footline strings are hardcoded placeholders in the source (publication name, date, page numbers). They must be edited per-deck.\n- The system has no `@media print` rule and no responsive breakpoints. It is fixed 1920×1080 and relies on `deck-stage.js` for any viewport adaptation.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/emerald-editorial/preview.md":"# Emerald Editorial Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/emerald-editorial/design.md`\n- Preview card: `bold-template-pack/templates/emerald-editorial/preview.md`\n\n## Selection Metadata\n\n- Slug: `emerald-editorial`\n- Tagline: A magazine-cover business deck: emerald + navy + paper, double-rule masthead ornaments, and a bold Bodoni-style display serif.\n- Mood: editorial, considered, confident, magazine-cover\n- Tone: literary, authoritative, warm, designed\n- Formality: medium-high\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel like the front of a serious magazine, including but not limited to leadership readouts, planning-office reviews, and strategy briefings. The double-rule masthead ornament gives it editorial gravitas without making it stiff — also a great unexpected pick for product launches or research recaps that want to feel considered rather than corporate.\n- Avoid for: Contexts that need to read as quiet, neutral, or institutionally restrained — the emerald field is too saturated to disappear into the background.\n\n## Visual Snapshot\n\nA bold display-serif editorial system in the register of a fashion masthead or vintage magazine cover. Bodoni Moda runs at weight 900 across a wide scale (44–460px), set against a saturated emerald-green canvas with deep navy ink and oat-paper accents. The signature treatment is a stacked double-rule ornament that brackets centered display words like a 19th-century theatrical playbill. The aesthetic borrows from Harper's Bazaar / Vogue / Wallpaper covers: confident, theatrical, paper-and-ink committed, with a tight three-color palette and zero gradients or shadows.\n\nEmerald Editorial is a bold display-serif editorial system rooted in the visual language of fashion magazines and 19th-century theatrical playbills. The foundational premise is a single typographic face — Bodoni Moda at weight 900 — used at unapologetic scale: 92px for routine headlines, 130–200px for statements and section openers, and 460px for hero numerals. The serif is loud, theatrical, and confident. Every slide leads with type, not with image.\n\n## Preview Ingredients\n\n- Palette: bg #3CD896; bg-2 #2DC684; bg-3 #25B377; ink #0F1A5C; ink-2 #1B2774; ink-3 #3A4593; paper #F1E9D6\n- Typography: See full design doc after selection.\n- Signature move: Bodoni Moda at weight 900 for every display moment; Manrope at weight 500/700/800 for every body and label moment.\n- Signature move: Saturated emerald canvas ({colors.bg}) with deep navy ink ({colors.ink}) text and inverse panels.\n- Signature move: Double-rule ornament with centered serif word is the signature decorative device.\n- Signature move: 4px ink horizontal rules separate every stacked section, every list row, every chart border. The 4px weight is the system's default rule.\n- Signature move: No corner radius anywhere. Every shape is a strict rectangle, except for the round logo/typographic glyphs themselves.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/grove/design.md":"---\nversion: alpha\nname: Grove\ndescription: A quiet, editorial-serif presentation system in the register of a well-bound monograph or boutique brand book. Playfair Display at weight 400 (never bold) carries every headline, italicized in terracotta coral for accent emphasis as the signature move. Jost weight 300 carries every paragraph as the \"good paper\" body face. JetBrains Mono at weight 300 holds labels, kickers, and the thin chrome bars. The palette pairs a deep forest green canvas (#192b1b) with warm cream text (#d4cfbf) and a single terracotta coral accent (#c8524a). Generous negative space, hairline 1px borders, and a near-invisible serif watermark numeral give it the calm authority of a literary journal.\n\ncolors:\n  bg: \"#192b1b\"\n  bg-alt: \"#1e3221\"\n  bg-light: \"#e8e4d6\"\n  bg-light-alt: \"#dedad0\"\n  fg: \"#d4cfbf\"\n  fg-2: \"rgba(212, 207, 191, 0.6)\"\n  fg-3: \"rgba(212, 207, 191, 0.32)\"\n  fg-light: \"#192b1b\"\n  fg-light-2: \"rgba(25, 43, 27, 0.58)\"\n  fg-light-3: \"rgba(25, 43, 27, 0.33)\"\n  accent: \"#c8524a\"\n  border: \"rgba(212, 207, 191, 0.12)\"\n  border-light: \"rgba(25, 43, 27, 0.14)\"\n  watermark-dark: \"rgba(212, 207, 191, 0.06)\"\n  watermark-light: \"rgba(25, 43, 27, 0.06)\"\n\ncolor-aliases:\n  fg-light: bg\n  fg-light-canonical: \"fg-light shares hex #192b1b with bg — the green is reused as both surface and primary text-on-light\"\n\ntypography:\n  display:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"10vw\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.01em\n  h1:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"5.5vw\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h1-statement:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"min(4.5vw, 7.5vh, 88px)\"\n    fontWeight: 400\n    lineHeight: 1.15\n  h2:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"3.2vw\"\n    fontWeight: 400\n    lineHeight: 1.2\n  h3:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"2vw\"\n    fontWeight: 400\n    lineHeight: 1.3\n  quote-text:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"3.2vw\"\n    fontWeight: 400\n    lineHeight: 1.35\n    letterSpacing: -0.01em\n    fontStyle: italic\n  quote-mark:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"8vw\"\n    fontWeight: 400\n    lineHeight: 0.6\n  stat-value:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"4.5vw\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.02em\n  grove-num:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"18vw\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.03em\n  lead:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"1.45vw\"\n    fontWeight: 300\n    lineHeight: 1.65\n  body:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"1.05vw\"\n    fontWeight: 300\n    lineHeight: 1.75\n  body-list-emph:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"max(1.4vw, 17px)\"\n    fontWeight: 300\n    lineHeight: 1.6\n  caption:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"0.82vw\"\n    fontWeight: 300\n    lineHeight: 1.55\n  label:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.12em\n  kicker:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  chapter-num:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.2em\n    textTransform: uppercase\n  stat-label:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.12em\n    textTransform: uppercase\n\nspacing:\n  pad-x: \"8vw\"\n  pad-y: \"6.5vh\"\n  pad-quote-x: \"calc(8vw * 1.1)\"\n  pad-quote-y: \"calc(6.5vh * 1.2)\"\n  gap-lg: \"4.5vh\"\n  gap-md: \"2.8vh\"\n  gap-sm: \"1.4vh\"\n  rule-short: \"36px\"\n\nmotion:\n  ease-slide: \"cubic-bezier(0.77, 0, 0.175, 1)\"\n  dur-slide: \"0.9s\"\n  ease-enter: \"cubic-bezier(0.16, 1, 0.3, 1)\"\n  dur-enter: \"0.7s\"\n  stagger-delays: \"0 / 0.08s / 0.18s / 0.3s / 0.44s / 0.6s / 0.78s\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  slide-chrome:\n    description: \"Thin top bar separating slide content from the page edge. A flex space-between row holding mono label text on each side, separated below by a 1px hairline in {colors.border} (or {colors.border-light} on light slides). Pads with {spacing.gap-sm} above the rule, then {spacing.gap-md} below before content starts.\"\n    border: \"1px solid {colors.border}\"\n    typography: \"{typography.label}\"\n  slide-foot:\n    description: \"Matching bottom bar. Flex space-between row holding section name and 'NN / TT' counter, with 1px hairline border-top. The chrome and foot together frame every content slide; cover, chapter, quote, and end slides hide both.\"\n    border: \"1px solid {colors.border}\"\n    typography: \"{typography.label}\"\n  grove-num:\n    description: \"Massive serif digit placed in the background at very low opacity (6%) as compositional texture. Sits absolutely at right: {spacing.pad-x}, bottom: -0.15em, with pointer-events disabled. The system's signature wallpaper element on chapter and section moments.\"\n    fontSize: \"18vw\"\n    color: \"{colors.watermark-dark} on dark / {colors.watermark-light} on light\"\n  grove-stat:\n    description: \"Stat card: large Playfair value in {colors.accent}, mono uppercase label beneath, 1px border-bottom hairline. No background fill — the card is defined by the rule and the type ratio alone.\"\n    valueColor: \"{colors.accent}\"\n    valueSize: \"4.5vw\"\n    labelTypography: \"{typography.stat-label}\"\n    borderBottom: \"1px solid {colors.border}\"\n  bullet-list:\n    description: \"Two-column grid list (2em / 1fr) where the bullet is a coral em-dash glyph rendered in JetBrains Mono, not a CSS bullet. The em-dash is the system's bullet language.\"\n    bulletGlyph: \"—\"\n    bulletColor: \"{colors.accent}\"\n    bulletFont: \"'JetBrains Mono', monospace\"\n  rule-coral:\n    width: \"{spacing.rule-short}\"\n    height: \"1px\"\n    background: \"{colors.accent}\"\n    description: \"A 36px-wide 1px-tall terracotta coral rule. The compositional beat between a kicker and the headline that follows.\"\n  rule-full:\n    width: \"100%\"\n    height: \"1px\"\n    background: \"{colors.border} on dark / {colors.border-light} on light\"\n    description: \"Full-width hairline divider. Used between stacked sections inside a slide.\"\n  kicker:\n    typography: \"{typography.kicker}\"\n    color: \"{colors.accent}\"\n    description: \"Mono uppercase eyebrow in coral, placed above an h1/h2 headline.\"\n  chapter-num:\n    typography: \"{typography.chapter-num}\"\n    color: \"{colors.accent}\"\n    marginBottom: \"{spacing.gap-md}\"\n  quote-mark:\n    typography: \"{typography.quote-mark}\"\n    color: \"{colors.accent}\"\n    description: \"Massive Playfair opening-quote glyph in coral, placed above the italic quote body.\"\n  img-placeholder:\n    background: \"{colors.bg-alt} on dark / {colors.border-light} on light\"\n    color: \"{colors.fg-3} on dark / {colors.fg-light-3} on light\"\n    typography: \"{typography.label}\"\n    minHeight: \"30vh\"\n    description: \"Image-region marker — solid darker-than-background fill with a mono caption stating the placeholder text. Use this in place of <img> until a real image is available.\"\n  nav-dots:\n    position: \"fixed\"\n    placement: \"bottom: 24px, horizontally centered\"\n    dotSize: \"5px\"\n    dotBackground: \"rgba(255, 255, 255, 0.22)\"\n    activeBackground: \"rgba(255, 255, 255, 0.8)\"\n    activeTransform: \"scale(1.4)\"\n    description: \"Small white dots at the bottom of the viewport indicating slide position. The fixed counter (#slide-counter) is intentionally disabled — the slide-foot already shows NN / TT.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nGrove is a **quiet, editorial-serif presentation system** in the register of a literary monograph or boutique brand book. The foundational premise is restraint: every slide carries one focused content moment surrounded by deep negative space, anchored by thin 1px chrome bars at top and bottom and supported by a small library of compositional beats (coral kicker, 36px coral rule, italic-coral accent, em-dash bullet, near-invisible watermark numeral).\n\nThe typographic stack runs four faces, each in a single specific weight:\n\n- **Playfair Display at weight 400** carries every headline, every quote, every stat figure, and every watermark numeral. **Bold serif is not permitted** — the no-bold rule is the system's most important typographic commitment. Italicized Playfair in `{colors.accent}` coral is the signature accent move: `<em>` inside any headline switches to italic coral.\n- **Jost at weight 300** carries every paragraph and bullet body. The light weight is the \"good paper\" feel — it sits back and lets the serif lead.\n- **JetBrains Mono at weight 300** carries every label, kicker, footline, slide counter, and stat caption. Always uppercase, always with at least 0.12em letter-spacing.\n- **Noto Serif SC / Noto Sans SC at weight 300–500** are loaded as Chinese fallbacks for every role. The deck is built bilingually-aware — Chinese characters render through the Noto cuts when present in the content.\n\nThe palette is a tight two-surface system with one accent. Dark slides use `{colors.bg}` (a deep forest green) with `{colors.fg}` (warm cream — never pure white) for body text. Light slides flip to `{colors.bg-light}` (warm parchment) with `{colors.fg-light}` (the same forest green now used as text). The single accent is **terracotta coral** (`{colors.accent}` — #c8524a), used only in small, deliberate places: the italic emphasis inside headlines, the 36px rule under a kicker, the em-dash bullet, the stat figure, the chapter ordinal, and the opening quote mark. Coral is the system's accent voice; using it as a surface fill or for body paragraphs shatters the editorial discipline.\n\nDepth is **flat and air-based**. There are no drop shadows, no gradients, no blur, no glow. The only \"depth\" devices are 1px hairline borders (the chrome bars, the stat-card divider, the compare-panel separator) and the watermark numeral at 6% opacity. The whole system reads as printed ink on linen paper, not as a digital surface.\n\nThe system carries a built-in **motion vocabulary**: slide-to-slide transitions use a sharp `cubic-bezier(0.77, 0, 0.175, 1)` pan at 0.9s; element entrances stagger via `[data-anim]` and `[data-delay]` attributes (fade-up / fade-in / reveal-right / reveal-left / scale-in) with a spring-y `cubic-bezier(0.16, 1, 0.3, 1)` curve at 0.7s and delays of 0 / 0.08 / 0.18 / 0.3 / 0.44 / 0.6 / 0.78s. Animation is part of the system identity; new slides should use the animation attribute stack rather than authoring custom transitions.\n\n**Density philosophy: sparse and breathing.** Grove reads as elegant when slides are quiet — one headline, one supporting paragraph, three stats in a row, two columns of text-and-image. The 8vw horizontal and 6.5vh vertical padding is generous by design. A slide that crowds 6 elements into the canvas breaks the system; a slide with one headline, one lede, and one accent rule reads as authoritative. Reach for fewer, larger elements. The system rewards silence around the type, not density of content.\n\n**Key Characteristics:**\n- Playfair Display at weight 400 — never bold — for every serif moment. Italic in `{colors.accent}` is the headline accent.\n- Jost weight 300 for every body paragraph. Lighter weight is the system's \"good paper\" voice.\n- JetBrains Mono weight 300 uppercase with 0.12em–0.2em letter-spacing for every label, kicker, footline, counter, and caption.\n- Dark slides on `{colors.bg}` deep forest green with `{colors.fg}` warm cream text. Light slides on `{colors.bg-light}` parchment with `{colors.fg-light}` green text.\n- One accent color: `{colors.accent}` terracotta coral. Used only for italic headline emphasis, the 36px coral rule, em-dash bullets, stat figures, chapter ordinals, and the quote mark.\n- 1px hairline borders only (`{colors.border}` on dark, `{colors.border-light}` on light). No thick borders, no shadows, no gradients.\n- Em-dash glyph rendered in JetBrains Mono coral is the system's universal bullet.\n- A massive serif watermark numeral (`{components.grove-num}` at 18vw, 6% opacity) sits in the bottom-right corner of chapter and section slides as compositional texture.\n- A staggered fade / reveal animation system (`[data-anim]` + `[data-delay]`) is built-in; new content should use it rather than appearing without entrance.\n\n## Colors\n\n### Palette\n- **BG / Deep Forest** (`{colors.bg}` — #192b1b): The dominant dark canvas. A deep, considered forest green — grounded, editorial, the Grove base. The default slide background.\n- **BG Alt** (`{colors.bg-alt}` — #1e3221): A slightly lighter forest green for secondary dark surfaces. Used as the `{components.img-placeholder}` fill on dark slides, where it reads as a tonal step up from the canvas without leaving the green family.\n- **BG Light / Parchment** (`{colors.bg-light}` — #e8e4d6): The warm parchment surface used on light slides. Reads as good-quality paper stock, not as digital white.\n- **BG Light Alt** (`{colors.bg-light-alt}` — #dedad0): A slightly cooler parchment for secondary light surfaces. Available for tonal separation between adjacent light regions.\n- **FG / Warm Cream** (`{colors.fg}` — #d4cfbf): Primary text color on dark surfaces. Warm cream — never pure white. The off-white temperature is essential to the printed-ink feel.\n- **FG-2** (`{colors.fg-2}` — rgba(212,207,191,0.6)): Secondary / muted text on dark. Used for ledes, captions, and supporting copy that needs to recede from primary.\n- **FG-3** (`{colors.fg-3}` — rgba(212,207,191,0.32)): Tertiary / hint text on dark. Near-invisible — used for image-placeholder captions and the faintest metadata.\n- **FG Light** (`{colors.fg-light}` — #192b1b): Primary text on light surfaces. **Shares its hex with `{colors.bg}`** — the deep forest green is used both as the dark canvas and as the dark text-on-light color. This is the system's primary surface-text inversion device.\n- **FG Light 2** (`{colors.fg-light-2}` — rgba(25,43,27,0.58)): Secondary muted text on light.\n- **FG Light 3** (`{colors.fg-light-3}` — rgba(25,43,27,0.33)): Tertiary text on light.\n- **Accent / Terracotta Coral** (`{colors.accent}` — #c8524a): The single warm note. Used sparingly: italic emphasis inside headlines, the 36px coral rule under a kicker, the em-dash bullet, the stat figure, the chapter ordinal, the opening quote mark, and nav-dot active state. Never used as a surface fill, never used for body paragraphs.\n- **Border** (`{colors.border}` — rgba(212,207,191,0.12)): Hairline divider on dark slides. 12% cream — visible as a structural line but never loud.\n- **Border Light** (`{colors.border-light}` — rgba(25,43,27,0.14)): Hairline divider on light slides. 14% forest green.\n\n### Defaults\n- **Default slide background**: `{colors.bg}` (deep forest green) for the deck's dominant tonal register. Reach for `{colors.bg-light}` (parchment) when the content wants a literal \"page\" feel — typically for quote slides, lighter chapters, or contrast.\n- **Default primary text color on dark surface**: `{colors.fg}` (warm cream).\n- **Default primary text color on light surface**: `{colors.fg-light}` (deep forest green — same hex as the dark surface).\n- **Default secondary / muted text**: `{colors.fg-2}` on dark, `{colors.fg-light-2}` on light. Use the `.muted` utility class.\n- **Default headline color**: matches the surface's primary text color. Headlines never appear in coral except for the italic `<em>` accent inside them.\n- **Default body color**: matches the surface's primary text color.\n- **Default border color**: `{colors.border}` on dark, `{colors.border-light}` on light — both at 1px solid hairline weight.\n- **Default kicker / chapter-num color**: `{colors.accent}` (terracotta coral). The mono uppercase kicker is the only chrome element that takes the accent color.\n- **Default rule color** for the short 36px compositional rule under a kicker: `{colors.accent}`. The full-width section divider rule uses `{colors.border}` instead.\n\nThe palette is intentionally minimal. The dark forest / light parchment / terracotta coral triad is the entire color vocabulary. Introducing a fourth color (a navy, a yellow, a second accent) breaks the system's editorial restraint.\n\n## Typography\n\n### Font Family\nThe system loads four families from Google Fonts:\n\n- **Playfair Display** at weights 400 and 500 (italic and roman). **Only weight 400 is used in published slides.** Weight 500 is loaded but reserved; bold serif (weight 700) is explicitly not permitted by the system rules.\n- **Jost** at weights 200, 300, 400, 500. **Only weight 300 is used.** The light weight is the system's body voice.\n- **JetBrains Mono** at weights 300 and 400. **Only weight 300 is used.** The light mono is the chrome voice.\n- **Noto Serif SC / Noto Sans SC** at weights 300–500, loaded as the Chinese fallback chain for every role.\n\nThe four-family stack is strict by role: Playfair for every serif moment (display, headlines, quotes, stat figures, watermark), Jost for every body paragraph and bullet, JetBrains Mono for every label / kicker / footline / counter / caption.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.grove-num}` | 18vw | Playfair | 400 | Watermark ordinal numeral, 6% opacity, absolute bottom-right |\n| `{typography.display}` | 10vw | Playfair | 400 | Cover hero title |\n| `{typography.quote-mark}` | 8vw | Playfair | 400 | Opening quotation glyph |\n| `{typography.h1}` | 5.5vw | Playfair | 400 | Chapter title, statement headline |\n| `{typography.stat-value}` | 4.5vw | Playfair | 400 / coral | Stat-card numeric value |\n| `{typography.h2}` | 3.2vw | Playfair | 400 | Routine slide headline |\n| `{typography.quote-text}` | 3.2vw | Playfair | 400 italic | Quote body |\n| `{typography.h3}` | 2vw | Playfair | 400 | Sub-headline, compare-panel title |\n| `{typography.lead}` | 1.45vw | Jost | 300 | Lead paragraph |\n| `{typography.body-list-emph}` | max(1.4vw, 17px) | Jost | 300 | List-slide body / bullets — emphasized for legibility |\n| `{typography.body}` | 1.05vw | Jost | 300 | Standard body paragraph |\n| `{typography.caption}` | 0.82vw | Jost | 300 | Captions, footnotes, chart sources |\n| `{typography.label}` | 0.7vw | JetBrains Mono | 300 / 0.12em | Chrome label, mono metadata |\n| `{typography.kicker}` | 0.7vw | JetBrains Mono | 300 / 0.14em / UPPER | Eyebrow above a headline |\n| `{typography.chapter-num}` | 0.7vw | JetBrains Mono | 300 / 0.2em / UPPER | Chapter ordinal label |\n| `{typography.stat-label}` | 0.7vw | JetBrains Mono | 300 / 0.12em / UPPER | Mono label beneath a stat figure |\n\n### Defaults\n- **Default size for a routine slide headline**: `{typography.h2}` (3.2vw).\n- **Default size for a chapter or statement headline**: `{typography.h1}` (5.5vw). For statement-class moments specifically, use `{typography.h1-statement}` which caps at `min(4.5vw, 7.5vh, 88px)` to prevent overflow on short viewports.\n- **Default size for a cover hero title**: `{typography.display}` (10vw).\n- **Default size for a body paragraph**: `{typography.body}` (1.05vw) in Jost weight 300.\n- **Default size for a lede / introductory paragraph**: `{typography.lead}` (1.45vw).\n- **Default size for a kicker / eyebrow**: `{typography.kicker}` (0.7vw) in JetBrains Mono uppercase 0.14em with `{colors.accent}` color.\n- **Default size for a stat-card figure**: `{typography.stat-value}` (4.5vw) in Playfair coral.\n- **Default weight for every serif element**: 400.\n- **Default weight for every body / Jost element**: 300.\n- **Default weight for every mono / JetBrains element**: 300.\n\nWhen the body text on a list-style slide reads too small at 1.05vw on typical laptop viewports, the system bumps it to `{typography.body-list-emph}` (max of 1.4vw or 17px). Reach for the emphasized size whenever a slide's primary content moment is a body paragraph or bulleted list — the default 1.05vw is calibrated for projector viewing, not laptop reading.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Playfair element runs at weight 400.** Bold serif (weight 700) is not used anywhere in the system. This is the system's most important typographic rule.\n- **An `<em>` tag inside any Playfair headline (h1, h2, h3, or quote) renders as italic in `{colors.accent}` coral.** This is the signature Grove accent — the way you add emphasis to a headline is to italicize a word in coral. The em-style switch is automatic via CSS.\n- **The opening quote mark on a quote slide is rendered as a massive Playfair glyph at 8vw in `{colors.accent}` coral.** A quote without the oversized coral quote-mark is broken.\n- **The quote body is always italic.** Roman-style quote text is not in the system.\n- **Every kicker / chapter-num / footline / label / caption is JetBrains Mono uppercase with at least 0.12em letter-spacing.** Mono in sentence case or without tracking reads as code, not chrome.\n- **Bullet glyphs are em-dashes (`—`) rendered in JetBrains Mono `{colors.accent}` coral.** Never bullets (`•`), never hyphens (`-`), never asterisks. The em-dash is the system's bullet language.\n- **Every chrome bar (top and bottom) carries a 1px solid `{colors.border}` rule (or `{colors.border-light}` on light slides).** The hairline rule is what makes the chrome read as a \"frame around the page\" rather than a banner.\n\n### Typography Principles\nThe Playfair-400 / Jost-300 / JetBrains-Mono-300 weight commitment is the system's voice. Switching any of those weights breaks the editorial register. There is no weight ladder — each face has exactly one weight.\n\nItalics are reserved for two specific roles: the coral accent inside headlines (via `<em>`) and the quote body. Italic body paragraphs are not used. Underline is not used. Emphasis in body text is communicated by the `.accent` color utility (changes color to coral), not by italic or bold.\n\n## Layout\n\n### Canvas System\nThe system targets a fluid viewport — each `.slide` is `100vw × 100vh` with `padding: {spacing.pad-y} {spacing.pad-x}` (6.5vh / 8vw). Slides sit side-by-side in a horizontal `#deck` flex strip and translate via `transform: translateX(...)` with the `{motion.dur-slide}` / `{motion.ease-slide}` transition. Only one slide is `is-active` at a time; non-active slides hold their content invisible (`[data-anim]` is `opacity: 0`) until the active class triggers the entrance animations.\n\n### Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 8vw | Horizontal slide padding |\n| `{spacing.pad-y}` | 6.5vh | Vertical slide padding |\n| `{spacing.pad-quote-x}` | 8.8vw | Slightly wider horizontal padding on quote slides |\n| `{spacing.pad-quote-y}` | 7.8vh | Slightly taller vertical padding on quote slides |\n| `{spacing.gap-lg}` | 4.5vh | Between major content sections |\n| `{spacing.gap-md}` | 2.8vh | Between related elements |\n| `{spacing.gap-sm}` | 1.4vh | Between tightly coupled elements |\n\n### Chrome Anatomy\nEvery content slide carries a **slide-chrome** at the top — a thin flex space-between row holding two mono labels separated below by a 1px hairline border — and a **slide-foot** at the bottom — a matching row with section name + \"NN / TT\" counter, separated above by a matching hairline.\n\nThe chrome and foot are hidden on cover, chapter, quote, and end slides — those are the deck's chromeless emotional moments. Every other slide carries the frame.\n\n### Border-Radius\n**Zero structural radius.** No rounded cards, no rounded buttons, no rounded image placeholders. The only round shapes in the system are the 5px nav-dots (50% radius — fully circular) at the bottom of the viewport.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThe system uses **zero box-shadow, zero text-shadow, zero blur, zero gradient**. Depth is communicated entirely through:\n\n1. **1px hairline borders** — the chrome bars at top and bottom, the stat-card divider, the compare-panel separator, the section-divider rule.\n2. **Opacity layers in text color** — primary (`{colors.fg}`), muted (`{colors.fg-2}`), hint (`{colors.fg-3}`). The three-step opacity ladder is the system's text-elevation device.\n3. **The watermark numeral** at 6% opacity — a massive Playfair digit sitting in the bottom-right corner of chapter and section slides as compositional texture, not as UI.\n\nThe absence of shadow is itself the elevation language. Adding `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` shatters the printed-ink feel.\n\n### Watermark Numeral\nThe `{components.grove-num}` element is a Playfair digit at 18vw / 6% opacity, positioned absolutely at `right: {spacing.pad-x}, bottom: -0.15em`. It reads as a faint background texture, never as content. Use it on chapter / section / statement slides where the empty bottom-right would otherwise feel un-anchored. It is part of the depth language even though it appears as a decorative element.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **1px solid `{colors.border}`** — the universal hairline on dark slides. Chrome bar borders, stat-card bottoms, compare-panel separators, full-width section dividers.\n- **1px solid `{colors.border-light}`** — the matching hairline on light slides.\n- **1px solid `{colors.accent}`** — the 36px-wide coral rule (`{components.rule-coral}`) used as the compositional beat between a kicker and the headline that follows.\n\nBorders are never thicker than 1px. Never dashed, never dotted. The 1px hairline is the system's structural rhythm.\n\n### Decorative Element Types\n\n**Slide Chrome Bar** (`{components.slide-chrome}`) — Thin top bar with mono labels on each side, separated below by a 1px hairline. The system's universal \"you are reading a page\" frame.\n\n**Slide Foot Bar** (`{components.slide-foot}`) — Matching bottom bar with section name + counter, separated above by 1px hairline.\n\n**Coral Rule** (`{components.rule-coral}`) — A 36px-wide 1px terracotta coral horizontal rule. The compositional beat that sits between a kicker (above) and a headline (below). Use it once per slide where a kicker leads into a primary headline — do not stack multiple coral rules.\n\n**Full Rule** (`{components.rule-full}`) — Full-width 1px hairline divider in `{colors.border}` / `{colors.border-light}`. Used as a section break inside a slide body.\n\n**Kicker** (`{components.kicker}`) — Mono uppercase eyebrow in coral, placed above an h1 or h2 headline. Often paired with a coral rule below it.\n\n**Chapter Number** — A mono uppercase ordinal in coral (`{typography.chapter-num}`) above the chapter title. Sets the chapter's identity at chapter-opener slides.\n\n**Em-Dash Bullet** (`{components.bullet-list}`) — A two-column grid list (2em / 1fr) where the bullet is a coral em-dash glyph rendered in JetBrains Mono. Never use a true bullet (`•`); always the em-dash.\n\n**Grove Stat** (`{components.grove-stat}`) — A vertical stack: large Playfair coral value (4.5vw) on top, mono uppercase label beneath, 1px border-bottom hairline. No background fill — the card is defined by the rule + the type, not by a containing box.\n\n**Quote Mark** (`{components.quote-mark}`) — Massive Playfair opening-quote glyph at 8vw in coral, placed above the italic quote body. Always present on a quote slide.\n\n**Watermark Numeral** (`{components.grove-num}`) — Playfair digit at 18vw / 6% opacity in the bottom-right corner. Compositional texture only, never UI.\n\n**Image Placeholder** (`{components.img-placeholder}`) — A solid `{colors.bg-alt}` (on dark) or `{colors.border-light}` (on light) fill marking where a real `<img>` will go. Holds a mono caption like \"[ image ]\" in `{colors.fg-3}`.\n\n**Nav Dots** (`{components.nav-dots}`) — Fixed 5px circular dots at the bottom of the viewport indicating slide position. Inactive: 22% white. Active: 80% white at 1.4× scale.\n\n## Do's and Don'ts\n\n### Do\n- Run every serif moment in Playfair Display weight 400. Never bold.\n- Use `<em>` inside any Playfair headline to switch a word to italic terracotta coral — this is the system's signature accent move.\n- Run every paragraph in Jost weight 300. The lighter weight is the system's body voice.\n- Run every label, kicker, chapter-num, footline, counter, and stat-caption in JetBrains Mono weight 300, uppercase, with at least 0.12em letter-spacing.\n- Default slide background to `{colors.bg}` (deep forest green). Use `{colors.bg-light}` (parchment) on quote slides and any moment that wants a literal \"page\" feel.\n- Pair the kicker with the 36px coral rule as a single compositional unit above the slide's primary headline.\n- Use the em-dash glyph (`—`) in coral as the universal bullet. Never use round bullets or hyphens.\n- Apply the `{components.grove-num}` watermark numeral to chapter and section-opener slides — the bottom-right corner needs that anchor.\n- Use the built-in `[data-anim]` + `[data-delay]` animation stack (fade-up / fade-in / reveal-right / reveal-left / scale-in, with delays 0–6) for every new content element. Animation is part of the system identity, not optional polish.\n- Keep slides spacious — one headline + one supporting paragraph + one accent rule is the rhythm. Reach for fewer elements at larger sizes.\n\n### Don't\n- Don't use bold serif. Playfair at weight 700 is not in this system. Bold serif breaks the editorial voice.\n- Don't introduce a fourth typeface beyond Playfair, Jost, JetBrains Mono, and Noto SC. The four-family stack is the entire typographic identity.\n- Don't use coral as a surface fill or for body paragraphs. Coral is the accent voice: italic emphasis, kicker, rule, em-dash bullet, stat figure, quote mark, chapter ordinal. That's the entire coral vocabulary.\n- Don't use box-shadow, gradient, blur, or any rgba shadow. The system is flat.\n- Don't use thick borders (2px+). The 1px hairline is the system's structural rhythm.\n- Don't round any corners. The only round shape is the 5px nav-dot.\n- Don't use round bullets, hyphens, or asterisks for list items. The em-dash in coral is the only bullet glyph.\n- Don't put a kicker without a coral rule below it. The kicker → rule → headline triad is one unit.\n- Don't render mono text in sentence case or without letter-spacing. Mono is always uppercase chrome with 0.12em+ tracking.\n- Don't omit the slide-chrome and slide-foot on content slides. The thin frame at top and bottom is what makes the slide read as a page.\n- Don't crowd the canvas. Grove rewards silence around the type. If a slide feels full, remove a supporting element rather than shrinking type.\n\n## Responsive Behavior\n\nThe system uses **vw / vh units throughout** — every size, padding, gap, and rule is proportional to the viewport. The same composition renders correctly on a 1280×720 laptop, a 1920×1080 monitor, and a 2560×1440 display without breakpoints.\n\n### Scaling Behavior\n- Display headline scales linearly with viewport width (10vw → 192px at 1920, 128px at 1280).\n- Body text scales similarly (1.05vw → 20.16px at 1920, 13.44px at 1280) — except on list-slide body, where the `max(1.4vw, 17px)` floor prevents the text from going unreadable on smaller viewports.\n- Padding, gaps, and grove-num all scale proportionally with vw/vh.\n- The 1px hairline borders are fixed-pixel and do not scale, which means at larger viewports they appear proportionally finer. This is by design.\n\n### Presenter Behavior\n- Slides advance via right/down arrow / space / page-down (handled by the deck JavaScript).\n- Slides reverse via left/up arrow / page-up.\n- The horizontal `#deck` strip translates via `transform: translateX(-N * 100vw)` between slides, with the `{motion.dur-slide}` sharp deceleration curve at 0.9s.\n- Each slide carries an `is-active` class that triggers the staggered entrance animations on its `[data-anim]` elements.\n- Bottom nav-dots reflect current slide position; clicking a dot jumps to that slide.\n\n### Animation\nThe `[data-anim]` + `[data-delay]` system is built-in:\n- `fade-up`: opacity 0 → 1, translateY 28px → 0\n- `fade-in`: opacity 0 → 1\n- `reveal-right`: clip-path inset(0 100% 0 0) → inset(0 0 0 0)\n- `reveal-left`: clip-path inset(0 0 0 100%) → inset(0 0 0 0)\n- `scale-in`: opacity 0 → 1, scale 0.94 → 1\n\nAll entrance animations use `{motion.ease-enter}` at `{motion.dur-enter}` (0.7s). Stagger delays: 0 / 0.08s / 0.18s / 0.3s / 0.44s / 0.6s / 0.78s.\n\n### Print / Export\nThe system has no `@media print` rule. Print export will inherit the horizontal-strip layout and is unlikely to paginate cleanly. Treat Grove as a screen-first system; PDF export requires a dedicated print stylesheet.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display / h1 / h2 / h3 (Playfair roles, 2–10vw) | 霞鹜文楷 LXGW WenKai | 400 | Literary, hand-set warmth that mirrors Playfair Display at weight 400 — never bold, exactly the Grove rule |\n| Quote text / mark (8vw mark, 3.2vw text) | 霞鹜文楷 LXGW WenKai | 400 | The same literary warmth carries the italic-quote moment; Chinese has no italic so the face does the expressive work |\n| Stat figure (4.5vw, coral) | 霞鹜文楷 LXGW WenKai | 400 | Keeps stat figures in the Playfair register; the coral color carries the accent |\n| Watermark numeral (18vw) | 霞鹜文楷 LXGW WenKai | 400 | The 6%-opacity watermark works at this scale with LXGW WenKai's open letterforms |\n| Body / lede (Jost roles, 1.05–1.45vw) | 思源宋体 Noto Serif SC | 300–400 | Mincho body voice — calm, literary, sits back like Jost weight 300 |\n| Label / kicker / chapter-num (JetBrains Mono roles) | 思源等宽 Noto Sans Mono CJK SC | 300–400 | Preserves the typewriter-chrome quality for kickers and footlines |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Playfair Display as the Latin serif and let CJK glyphs fall through to LXGW WenKai. Playfair Display weight 400 (never bold) is the system's most important typographic commitment; replacing it with a CJK serif wholesale would break the monograph / boutique-brand-book register that defines Grove. The system already loads Noto Serif SC / Noto Sans SC as fallbacks per its existing font stack — the change is to add LXGW WenKai as the preferred CJK display face ahead of Noto Serif SC:\n\n```css\n/* Playfair roles (display, h1, h2, h3, quote, stat, watermark) */\nfont-family: 'Playfair Display', 'LXGW WenKai TC', 'Noto Serif SC', Georgia, serif;\n/* Jost roles (lead, body, caption) */\nfont-family: 'Jost', 'Noto Serif SC', system-ui, sans-serif;\n/* JetBrains Mono roles (label, kicker, chapter-num, stat-label) */\nfont-family: 'JetBrains Mono', 'Noto Sans Mono CJK SC', monospace;\n```\n\n(Note: the system currently lists `'Noto Sans SC'` in the Jost stack — for Grove's literary register, swap to `'Noto Serif SC'` instead. The Mincho body voice is closer to Jost weight 300's \"good paper\" feel than the Hei sans face.)\n\nBaseline mismatch at display sizes (5.5–10vw) is mild — LXGW WenKai and Playfair Display both sit at similar optical baselines, so mixed-script headlines like `A Quiet 山林` read cleanly. The `<em>` italic-coral accent rule is the more delicate piece (see Known CJK Gap below).\n\n### Loading\n\nReplace the existing Noto-only fallback with an LXGW WenKai + Noto Serif SC + Noto Sans Mono CJK pair:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=LXGW+WenKai+TC&family=Noto+Serif+SC:wght@300;400;500&family=Noto+Sans+Mono+CJK+SC:wght@300;400&display=swap\" rel=\"stylesheet\">\n```\n\nLXGW WenKai TC is the version hosted on Google Fonts (covers both traditional and simplified glyphs).\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (1.0–1.1 on display, 1.65–1.75 on body) read as cramped in Chinese. Bump display to 1.15–1.25 and body to 1.7–1.85.\n- **Remove negative letter-spacing on CJK headlines.** Playfair Display uses -0.01em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the JetBrains Mono portion was meant to be capitalized.\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between LXGW WenKai and Noto Serif SC inside the same sentence — pick the face that matches the role (display = LXGW WenKai, body = Noto Serif SC) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nGrove's whole voice is \"literary monograph / boutique brand book\" with a single accent of terracotta coral. The Chinese equivalent of that quiet authority is **LXGW WenKai for every serif moment** (its hand-set warmth is the closest Chinese analog to Playfair Display at weight 400) and **Noto Serif SC at weight 300–400 for body** (the Mincho calm that matches Jost weight 300's reticence). Avoid running Chinese body in Noto Sans SC — the geometric sans tips the system from \"good paper\" to \"modern app.\"\n\nThe em-dash bullet glyph in DM Mono coral works in Chinese without modification — the em-dash character itself is the same Unicode glyph (—) and reads as a deliberate mark in front of a Chinese list item. Keep the bullet column in Noto Sans Mono CJK SC at weight 300 coral, exactly mirroring the Latin pattern.\n\nThe watermark numeral (18vw, 6% opacity) is particularly effective in Chinese — render a Chinese ordinal character (e.g., 「三」or 「五」) instead of a Western digit. At 6% opacity it reads as faint compositional texture, and the Han glyph's denser visual weight at that scale balances the slide better than a thin Western numeral would.\n\n### Known CJK Gap\n\nThe system's signature `<em>` italic-coral treatment is the hardest piece to translate: **Chinese has no italic concept** — slanted Han glyphs read as broken, not as emphasis. The current Grove CSS depends on the browser's default `<em>` styling (italic) plus a CSS color rule for the coral. In Chinese, the italic does nothing visually, so the emphasis collapses to \"just coral text inside a headline.\" That's not bad — coral inside an LXGW WenKai headline still reads as a deliberate accent — but the system loses one of its two emphasis dimensions (color + slant) and is left with only color.\n\nTo compensate, two options: (1) accept color-only emphasis on Chinese headlines and let the coral carry the weight, or (2) switch the `<em>` portion to a different face inside Chinese headlines — e.g., **站酷小薇体 (ZCOOL XiaoWei)** — to provide a face-based contrast that approximates the slant contrast of Latin italic. Add to the CSS:\n\n```css\n.h1 em, .h2 em, .h3 em, .quote-text em {\n  color: var(--c-accent);\n  font-family: 'Playfair Display', 'ZCOOL XiaoWei', 'LXGW WenKai TC', serif;\n  font-style: italic; /* Latin renders italic; CJK ignores */\n}\n```\n\nThis gives the Latin portion italic-coral and the CJK portion face-shift-coral. Test on a per-deck basis — for many Grove decks, color-only emphasis is sufficient.\n\n## Iteration Guide\n\n1. Any new headline is Playfair Display weight 400. Pick the size from the headline ladder (10vw display / 5.5vw h1 / 3.2vw h2 / 2vw h3) — do not invent a new size.\n2. Any new emphasis inside a headline uses `<em>` and renders as italic coral automatically. Do not author a manual color/italic style.\n3. Any new body paragraph is Jost weight 300 at 1.05vw (or 1.45vw for lede, or `max(1.4vw, 17px)` on list-style slides).\n4. Any new label / kicker / footline / counter / caption is JetBrains Mono weight 300 uppercase with at least 0.12em letter-spacing.\n5. Any new chrome line (top bar, bottom bar, section divider, stat-card border) is a 1px solid hairline in `{colors.border}` (dark) or `{colors.border-light}` (light). No thicker borders.\n6. Any new bullet list uses the `{components.bullet-list}` pattern (two-column grid, em-dash in coral mono). Do not author a different bullet style.\n7. Any new accent moment uses `{colors.accent}` terracotta coral. The accent is for italic headline emphasis, the 36px rule, em-dashes, stat figures, quote marks, chapter ordinals, and the kicker text. Nothing else.\n8. Any new chapter or section-opener slide carries a `{components.grove-num}` watermark numeral in the bottom-right corner.\n9. Any new content element gets a `[data-anim]` attribute (fade-up, fade-in, reveal-right, reveal-left, or scale-in) plus a `[data-delay]` (0–6) for staggered entrance. Do not author custom transitions.\n10. When in doubt, add space rather than content. Grove's editorial register is silence, not density.\n\n## Known Gaps\n\n- The four Google Fonts (Playfair Display, Jost, JetBrains Mono, Noto Serif SC / Noto Sans SC) are loaded via `<link>`. Offline rendering will fall back to Georgia, system-ui, monospace, and system serif/sans for the Noto roles — which preserves the rough character but loses the typographic identity. Self-hosting recommended for offline / print reliability.\n- The system loads Playfair weight 500 and Jost weights 200/400/500 — these are not used in the published CSS but are available. Using them would break the system's single-weight commitment.\n- The `<em>` italic-coral treatment relies on the CSS rule `.h1 em, .h2 em, .h3 em { color: var(--c-accent); }` — note that the actual italic property is NOT set in the rule (the comment block is empty). The italic comes from the browser's default `<em>` styling. If a stylesheet override removes the default italic, the coral accent will lose its italic character.\n- The grove-num watermark uses 18vw font-size — on extremely wide viewports (3000px+) this becomes very large and may push the slide-foot area. The CSS positions it at `bottom: -0.15em` to absorb some overflow, but very tall numerals at very wide viewports may need adjustment.\n- The vertical sidebar component (`.grove-sidebar`) is loaded in the CSS but explicitly disabled (`display: none !important`). It was a chapter-tab decoration that read as clutter; the slide-chrome bar provides the section name already.\n- The fixed slide-counter (`#slide-counter`) is also disabled — the slide-foot bar already shows \"NN / TT\" so the fixed counter was a duplicate.\n- The CSS has a few empty rule blocks (`.h1 em { }`, `.grove-stat-val em { }`, `.quote-text { ... }`) which appear to be leftover stubs from earlier iterations. They are inert and can be removed without effect.\n- The deck is built bilingually-aware (Chinese fallbacks via Noto Serif SC / Noto Sans SC) but no actual Chinese content is in the published source — the bilingual support is structural, not active.\n- The image-placeholder component is a layout reservation, not a real image. Replacing the placeholder div with an `<img>` requires manually matching the parent's flex behavior and background.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/grove/preview.md":"# Grove Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/grove/design.md`\n- Preview card: `bold-template-pack/templates/grove/preview.md`\n\n## Selection Metadata\n\n- Slug: `grove`\n- Tagline: Forest-green canvas with cream type, classical Playfair serifs, and a single rust accent.\n- Mood: organic, considered, warm, literary, natural\n- Tone: classical, warm, considered, patient\n- Formality: medium-high\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel organic, considered, and grown-up: sustainability and wellness brands, outdoor / nature products, wineries and restaurants, literary or arts decks, advisory deliverables, bilingual EN/CN reports. Also a calm, distinctive choice for tech, research, or business decks that want patience over urgency.\n- Avoid for: Decks that need neon energy or rapid-fire pop — the forest-green canvas and Playfair serif commit to a slow, classical voice.\n\n## Visual Snapshot\n\nA quiet, editorial-serif presentation system in the register of a well-bound monograph or boutique brand book. Playfair Display at weight 400 (never bold) carries every headline, italicized in terracotta coral for accent emphasis as the signature move. Jost weight 300 carries every paragraph as the \"good paper\" body face. JetBrains Mono at weight 300 holds labels, kickers, and the thin chrome bars. The palette pairs a deep forest green canvas (#192b1b) with warm cream text (#d4cfbf) and a single terracotta coral accent (#c8524a). Generous negative space, hairline 1px borders, and a near-invisible serif watermark numeral give it the calm authority of a literary journal.\n\nGrove is a quiet, editorial-serif presentation system in the register of a literary monograph or boutique brand book. The foundational premise is restraint: every slide carries one focused content moment surrounded by deep negative space, anchored by thin 1px chrome bars at top and bottom and supported by a small library of compositional beats (coral kicker, 36px coral rule, italic-coral accent, em-dash bullet, near-invisible watermark numeral).\n\n## Preview Ingredients\n\n- Palette: bg #192B1B; bg-alt #1E3221; bg-light #E8E4D6; bg-light-alt #DEDAD0; fg #D4CFBF; fg-light #192B1B; accent #C8524A\n- Typography: See full design doc after selection.\n- Signature move: Playfair Display at weight 400 carries every headline, every quote, every stat figure, and every watermark numeral. Bold serif is not permitted — the no-bold rule is the system's most important typographic commitment. Italicized Playfair in {colors.accent} co...\n- Signature move: Jost at weight 300 carries every paragraph and bullet body. The light weight is the \"good paper\" feel — it sits back and lets the serif lead.\n- Signature move: JetBrains Mono at weight 300 carries every label, kicker, footline, slide counter, and stat caption. Always uppercase, always with at least 0.12em letter-spacing.\n- Signature move: Noto Serif SC / Noto Sans SC at weight 300–500 are loaded as Chinese fallbacks for every role. The deck is built bilingually-aware — Chinese characters render through the Noto cuts when present in the content.\n- Signature move: Playfair Display at weight 400 — never bold — for every serif moment. Italic in {colors.accent} is the headline accent.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/long-table/design.md":"---\nversion: alpha\nname: Long Table\ndescription: A warm, single-ink editorial system in the register of a supper-club poster, a small-batch zine, or a Risograph-printed program. The entire system runs in one ink color — a warm rust terracotta (#B53D2A) — on a buttery cream paper ground (#FAF1E2), with a subtle 4px radial-dot texture overlay giving the surface its \"printed paper\" quality. Display type runs in Bricolage Grotesque at weight 700–800 in uppercase; body and metadata run in Fraunces serif at weight 400–600 with optical-size axis engaged. Pill buttons, outlined edition badges, italic-edition numerals, and dashed/solid 1.5px borders complete the printed-program vocabulary.\n\ncolors:\n  paper: \"#FAF1E2\"\n  paper-d: \"#F2E5CF\"\n  paper-vd: \"#E8D7B6\"\n  ink: \"#B53D2A\"\n  ink-dp: \"#8E2D1F\"\n  rule: \"#B53D2A\"\n  ink-32: \"rgba(181, 61, 42, 0.32)\"\n  ink-78: \"rgba(181, 61, 42, 0.78)\"\n  ink-50: \"rgba(181, 61, 42, 0.5)\"\n\ncolor-aliases:\n  rule: ink\n  ink-32-canonical: \"Same ink #B53D2A at 32% opacity, used for dashed dividers and subtle internal rules\"\n  ink-78-canonical: \"Same ink #B53D2A at 78% opacity, used for de-emphasized metadata\"\n\ntypography:\n  display-jumbo-numeral:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(180px, min(22vw, 38vh), 480px)\"\n    fontWeight: 400\n    lineHeight: 0.86\n    letterSpacing: -0.02em\n    fontStyle: italic\n  display-cover:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(82px, min(8.8vw, 15vh), 180px)\"\n    fontWeight: 800\n    lineHeight: 0.92\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  display:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(72px, min(7.6vw, 13vh), 160px)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  headline-xl:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(60px, min(6.4vw, 10.5vh), 140px)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  headline:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(56px, min(6vw, 10vh), 120px)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  headline-md:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(48px, min(5vw, 8.4vh), 100px)\"\n    fontWeight: 800\n    lineHeight: 0.92\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  quote:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(40px, min(4.4vw, 7.4vh), 96px)\"\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  card-title:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(28px, 2.4vw, 44px)\"\n    fontWeight: 800\n    lineHeight: 0.95\n    letterSpacing: -0.008em\n    textTransform: uppercase\n  course-name:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(20px, 1.5vw, 28px)\"\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  info-value:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(20px, 1.6vw, 28px)\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  edition-label-tracked:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(15px, 1.1vw, 18px)\"\n    fontWeight: 700\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  who-tag:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(15px, 1.05vw, 18px)\"\n    fontWeight: 700\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  body-serif-italic-lg:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(20px, 1.5vw, 28px)\"\n    fontWeight: 400\n    lineHeight: 1.45\n    fontStyle: italic\n  body-serif-italic:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(17px, 1.2vw, 22px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n    fontStyle: italic\n  body-roman:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(15px, 1vw, 17px)\"\n    fontWeight: 400\n    lineHeight: 1.45\n  edition-label:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(20px, 1.6vw, 30px)\"\n    fontWeight: 400\n    lineHeight: 1\n    fontStyle: italic\n  tagline:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(18px, 1.4vw, 26px)\"\n    fontWeight: 400\n    lineHeight: 1.35\n    fontStyle: italic\n  stats:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(17px, 1.2vw, 22px)\"\n    fontWeight: 400\n    lineHeight: 1.4\n    fontStyle: italic\n  pill-text:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(15px, 1.1vw, 20px)\"\n    fontWeight: 400\n    lineHeight: 1\n    fontStyle: italic\n  meta-tag:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    fontWeight: 400\n    lineHeight: 1.4\n    fontStyle: italic\n  info-key:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    fontWeight: 400\n    letterSpacing: 0.16em\n    textTransform: uppercase\n    fontStyle: italic\n  pagenum:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    fontWeight: 400\n    letterSpacing: 0.02em\n    fontStyle: italic\n  nav-hint:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(11px, 0.78vw, 13px)\"\n    fontWeight: 400\n    letterSpacing: 0.02em\n    fontStyle: italic\n\nspacing:\n  slide-pad-h-default: \"clamp(60px, 5vw, 110px)\"\n  slide-pad-h-wide: \"clamp(80px, 7vw, 160px)\"\n  slide-pad-h-narrow: \"clamp(120px, 12vw, 280px)\"\n  slide-pad-top-default: \"clamp(96px, 10vh, 160px)\"\n  slide-pad-top-cover: \"clamp(60px, 6vh, 100px)\"\n  slide-pad-bottom-default: \"clamp(110px, 11vh, 170px)\"\n  slide-pad-bottom-wide: \"clamp(150px, 14vh, 220px)\"\n  gap-section: \"clamp(28px, 3vh, 50px)\"\n  gap-content: \"clamp(18px, 2vh, 32px)\"\n  gap-row: \"clamp(14px, 1.6vh, 24px)\"\n  gap-tight: \"clamp(10px, 1.2vh, 18px)\"\n  border-weight: \"1.5px\"\n  rule-dashed-color: \"{colors.ink-32}\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  pill:\n    description: \"Outlined rounded-rectangle (border-radius 999px → fully pill) holding short italic Fraunces text. The system's CTA / action button. Border is 1.5px solid {colors.ink}; padding is generous (~12px / 28px); text-color is {colors.ink}.\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: \"999px\"\n    padding: \"clamp(8px, 1vh, 14px) clamp(20px, 2vw, 32px)\"\n    typography: \"{typography.pill-text}\"\n  pill-divider:\n    typography: \"{typography.pill-text}\"\n    opacity: 0.7\n    description: \"A small italic Fraunces divider character (typically · or /) used inline between adjacent pills.\"\n  ed-badge:\n    description: \"A small circular outlined badge (~38px) holding a single italic Fraunces digit. The edition / chapter ordinal marker. Border is 1.5px solid {colors.ink}; background is transparent.\"\n    width: \"clamp(34px, 2.6vw, 44px)\"\n    height: \"clamp(34px, 2.6vw, 44px)\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: \"50%\"\n  rect-tag:\n    description: \"Outlined rectangular tag — like the pill but with sharp corners. Holds short italic Fraunces text. Used as a category / status / metadata chip when the pill's roundness isn't appropriate.\"\n    border: \"1.5px solid {colors.ink}\"\n    padding: \"clamp(7px, 0.9vh, 12px) clamp(14px, 1.4vw, 22px)\"\n    typography: \"{typography.pill-text}\"\n  card-outlined:\n    description: \"A 1.5px ink-outlined rectangular content card. Holds a card-top metadata row (separated below by a 1px @ 32%-opacity rule), a Bricolage card-name, a Fraunces body description, and a meta-row at the bottom (separated above by a 1px dashed @ 32%-opacity rule). The system's primary content card pattern.\"\n    border: \"1.5px solid {colors.ink}\"\n    padding: \"clamp(20px, 2vh, 32px) clamp(20px, 1.8vw, 30px)\"\n    internalDivider-solid: \"1px solid {colors.ink-32}\"\n    internalDivider-dashed: \"1px dashed {colors.ink-32}\"\n  paper-texture:\n    description: \"Subtle radial-dot texture overlay on the stage. A 4px-tile background-image of 0.5px radial-gradient dots in {colors.ink-50} at 10% opacity. Sits absolutely on the stage with pointer-events disabled, giving the paper its Risograph / printed-stock quality. This is on every slide.\"\n    backgroundImage: \"radial-gradient(circle at 1px 1px, {colors.ink-50} 0.5px, transparent 1px)\"\n    backgroundSize: \"4px 4px\"\n    opacity: 0.1\n  topbar-divider:\n    description: \"A 1.5px ink solid border-bottom under a slide topbar (where a Bricolage headline sits beside a small Fraunces label). The horizontal rule beneath the topbar is the system's universal page-divider device.\"\n    borderBottom: \"1.5px solid {colors.ink}\"\n  pagenum:\n    position: \"absolute\"\n    placement: \"right: clamp(36px, 3.6vw, 80px); bottom: clamp(40px, 4vh, 64px)\"\n    typography: \"{typography.pagenum}\"\n    color: \"{colors.ink}\"\n    description: \"Italic Fraunces page number at the bottom-right of every slide.\"\n  nav-hint:\n    position: \"fixed\"\n    placement: \"left: clamp(36px, 3.6vw, 80px); bottom: clamp(40px, 4vh, 64px)\"\n    typography: \"{typography.nav-hint}\"\n    color: \"{colors.ink}\"\n    opacity: 0.45\n    description: \"A faint italic Fraunces hint string at the bottom-left of the viewport (e.g. '← → to navigate'). Bonus interactivity affordance.\"\n  ledger-row:\n    description: \"A horizontal ledger-style row in a calendar/schedule context. Multi-column grid (typical: 80px / 130px / 1.6fr / 0.9fr / auto) with a 1px @ 32%-opacity ink border-bottom. Each cell is a tag, label, or pill. Reads as a guestbook / restaurant-reservation log.\"\n    rowPad: \"clamp(11px, 1.3vh, 18px) 0\"\n    borderBottom: \"1px solid {colors.ink-32}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nLong Table is a **single-ink editorial system** in the register of a supper-club poster, a Risograph zine, or a small-press dinner program. The foundational premise is monochromatic: every visible mark in the system — every headline, every paragraph, every border, every rule, every pill, every page number — is rendered in a single warm rust terracotta ink (`{colors.ink}` — #B53D2A) on a buttery cream paper ground (`{colors.paper}` — #FAF1E2). The only chromatic variation is opacity: the same ink at 100% for primary marks, at 78% for de-emphasized metadata, at 32% for dashed internal dividers, at 10% for the paper-texture dots.\n\nThe single-ink constraint is the system's identity. The aesthetic borrows from one-color screen printing, letterpress posters, and Risograph stationery — formats where each additional color is a separate printing pass and therefore a deliberate decision. By committing to one ink, the system achieves the calm authority of a printed object rather than the polish of a digital surface.\n\nA signature **paper-texture overlay** sits on every slide: a 4px-tile radial-dot pattern in 50%-opacity ink at 10% opacity, applied via the `.stage::before` pseudo-element. The dots are invisible at conversational viewing distance but visible up close — they give the cream surface its \"printed paper\" feel and are an essential part of the design system, not optional decoration.\n\nThe typographic stack is a two-face pairing:\n\n- **Bricolage Grotesque** at weights 700 and 800 in **strict uppercase** carries every display moment — covers, headlines, card titles, course names, quote bodies, info values, who-tags. Bricolage is a wide, slightly-condensed grotesque with strong personality; its uppercase set has the impact of a hand-lettered poster. The optical-size axis (`opsz` 12..96) is engaged.\n- **Fraunces** at weight 400–600 carries every body paragraph, every metadata field, every pill, every page number, every edition label. **Italic Fraunces is the default body style** — the slanted serif is the system's body voice, lending warmth and editorial personality. Roman Fraunces appears only for specific tight cases (info keys, the description body inside index cards). The optical-size axis (`opsz` 9..144) is engaged for both styles.\n\nA massive **italic Fraunces edition numeral** at up to 480px is the system's signature display anchor — it replaces the hand-drawn illustration that would traditionally fill the cover/featured slide right-half, giving the slide a typographic centerpiece in the same ink as the rest of the page.\n\nDepth is **flat and printed**. There are no shadows, no gradients, no blur, no glow. Elevation is communicated entirely through 1.5px solid ink borders on cards, badges, pills, and tags; 1px solid or 1px-dashed internal dividers at 32% opacity; and the texture overlay's atmospheric quality. The whole system reads as ink soaked into paper.\n\n**Density philosophy: rich-but-curated.** Long Table reads as authoritative when slides carry substantive content — a cover with a hero title plus a tagline plus action pills plus stats plus a big edition numeral; an index slide with a topbar headline plus three rich cards; a menu slide with five course rows with name + description + pairing. The slides are full but never crowded — each region carries one focused element with breathing room around it. A slide that holds only a headline reads as missing-its-program; a slide that holds 8 competing content blocks reads as broken. Reach for one major typographic moment (Bricolage display) anchored by 2–4 supporting groups (cards, pills, ledger rows, info-value pairs) per slide.\n\n**Key Characteristics:**\n- One ink color (`{colors.ink}` — warm rust terracotta) on cream paper (`{colors.paper}`). Opacity variants are the only color variation.\n- Bricolage Grotesque weight 700–800 uppercase for every display moment; Fraunces 400–600 italic-default for every body and metadata moment.\n- Subtle 4px radial-dot paper texture on every slide via `.stage::before` — invisible at distance, present up close.\n- Pill buttons (border-radius 999px), edition badges (circular), rect-tags (sharp-cornered), and outlined cards (1.5px solid) — all single-weight ink outlines, no fills.\n- A massive italic Fraunces edition numeral (up to 480px) is the system's hero typographic anchor on cover-class slides.\n- 1.5px structural borders, 1px @ 32%-opacity solid or dashed internal dividers. No thicker borders, no shadows.\n- Page number (italic Fraunces) at every slide's bottom-right; nav-hint (italic Fraunces at 45% opacity) at the bottom-left.\n- The system is single-ink by design — adding any second color (a navy, a green, a yellow) shatters the printed-program register.\n\n## Colors\n\n### Palette\n- **Paper / Cream** (`{colors.paper}` — #FAF1E2): The dominant warm buttery cream surface. Reads as good-quality paper stock — not white, not beige, somewhere between. The default slide background, and the only background fill the system uses.\n- **Paper Dark** (`{colors.paper-d}` — #F2E5CF): A slightly darker cream for secondary surfaces or tonal separation. Available in the token system but used sparingly.\n- **Paper Very Dark** (`{colors.paper-vd}` — #E8D7B6): A deeper cream for accent surfaces. Reserved.\n- **Ink / Warm Rust Terracotta** (`{colors.ink}` — #B53D2A): The single ink color. Every text run, every border, every rule, every pill outline, every page number — all in this one color. The system's structural and expressive color.\n- **Ink Deep** (`{colors.ink-dp}` — #8E2D1F): A deeper rust reserved for emphasis. Available in the token system but used sparingly in the published slides.\n- **Rule** (`{colors.rule}` — #B53D2A): An alias for `{colors.ink}` — same hex, used semantically when referring to a rule line.\n- **Ink @ 78%** (`{colors.ink-78}` — rgba(181,61,42,0.78)): The ink at 78% opacity. Used for de-emphasized metadata text where slightly lower contrast is desired (e.g., pairing notes in menu rows, meta-tags under quotes).\n- **Ink @ 50%** (`{colors.ink-50}` — rgba(181,61,42,0.5)): The ink at 50% opacity. Used inside the paper-texture radial-dot gradient.\n- **Ink @ 32%** (`{colors.ink-32}` — rgba(181,61,42,0.32)): The ink at 32% opacity. Used for internal dividers — solid 1px lines and 1px dashed lines inside cards, between ledger rows, between course rows.\n\n### Defaults\n- **Default slide background**: `{colors.paper}`. Every slide. There is no alternate surface in this system.\n- **Default text color**: `{colors.ink}`. Every text run.\n- **Default border color**: `{colors.ink}` at 1.5px solid for structural borders; `{colors.ink-32}` at 1px solid or dashed for internal dividers.\n- **Default headline color**: `{colors.ink}`.\n- **Default body color**: `{colors.ink}`.\n- **Default page-number / nav-hint color**: `{colors.ink}` (full opacity for pagenum; 45% opacity for nav-hint).\n- **Default de-emphasized metadata color**: `{colors.ink-78}` — when a small piece of supporting text needs to recede from a primary line.\n\nThe palette is intentionally single-ink. There is no \"accent color\" to reach for — the design language depends on the one-ink constraint. If a moment needs to stand out, scale up the type (Bricolage 800 at 180px) or reach for the italic Fraunces edition numeral; do not introduce a second color.\n\n## Typography\n\n### Font Family\nThe system loads exactly two web fonts from Google Fonts, both with optical-size axes:\n\n- **Bricolage Grotesque** with `opsz` 12..96 and weights 400, 600, 700, 800. **In the published slides, only 700 and 800 are used.**\n- **Fraunces** with `opsz` 9..144, both roman and italic styles, weights 400, 500, 600. **In the published slides, all three weights of italic and weight 400/600 of roman are used.**\n\nThe two-face role split is strict: **Bricolage uppercase carries every display moment** (covers, headlines, card titles, course names, quote bodies, info values, who-tags, edition labels with tracking). **Fraunces italic carries every body moment** (paragraphs, leads, metadata, taglines, pills, page numbers, info keys, edition labels without tracking). **Fraunces roman** is reserved for specific tight roles (info keys in info-rows where italic tracking would feel out of place, and the description body inside index cards where roman is more readable).\n\nThe optical-size axis is critical: the same Fraunces face renders with subtly different letterforms at 14px metadata sizes versus 480px hero-numeral sizes — small sizes pick up sturdier strokes; large sizes pick up finer detail. Self-hosted fallbacks without `opsz` will lose this quality.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight / Style | Use |\n|---|---|---|---|---|\n| `{typography.display-jumbo-numeral}` | up to 480px | Fraunces | 400 italic | Hero edition numeral (cover-class typographic anchor) |\n| `{typography.display-cover}` | up to 180px | Bricolage | 800 uppercase | Cover-scale Bricolage title |\n| `{typography.display}` | up to 160px | Bricolage | 800 uppercase | Section-opener / manifesto headline |\n| `{typography.headline-xl}` | up to 140px | Bricolage | 800 uppercase | Featured-edition title |\n| `{typography.headline}` | up to 120px | Bricolage | 800 uppercase | Topbar headline on index / calendar slides |\n| `{typography.headline-md}` | up to 100px | Bricolage | 800 uppercase | Menu / programme title |\n| `{typography.quote}` | up to 96px | Bricolage | 700 uppercase | Pull-quote / testimonial body |\n| `{typography.card-title}` | up to 44px | Bricolage | 800 uppercase | Title inside an outlined card |\n| `{typography.course-name}` | up to 28px | Bricolage | 700 uppercase | Course / item name in a ledger row |\n| `{typography.info-value}` | up to 28px | Bricolage | 700 uppercase | Value in a key/value info row |\n| `{typography.edition-label-tracked}` | up to 18px | Bricolage | 700 uppercase / 0.18em | Big-edition label beneath a hero numeral |\n| `{typography.who-tag}` | up to 18px | Bricolage | 700 uppercase | Attribution name in a quote row |\n| `{typography.body-serif-italic-lg}` | up to 28px | Fraunces | 400 italic | Lead paragraph in a manifesto / letter |\n| `{typography.body-serif-italic}` | up to 22px | Fraunces | 400 italic | Standard body paragraph / lede |\n| `{typography.body-roman}` | up to 17px | Fraunces | 400 roman | Card description body (tighter setting for legibility at small size) |\n| `{typography.edition-label}` | up to 30px | Fraunces | 400 italic | \"EDITION N.\" italic label beside an edition badge |\n| `{typography.tagline}` | up to 26px | Fraunces | 400 italic | Tagline / subtitle beneath a cover title |\n| `{typography.stats}` | up to 22px | Fraunces | 400 italic | Stats line (\"N seats · M cities · L hours\") |\n| `{typography.pill-text}` | up to 20px | Fraunces | 400 italic | Text inside a pill button or rect-tag |\n| `{typography.meta-tag}` | up to 16px | Fraunces | 400 italic | Card metadata (city tag, num tag, seats tag, date tag) |\n| `{typography.info-key}` | up to 16px | Fraunces | 400 italic / 0.16em / UPPER | Key in a key/value info row |\n| `{typography.pagenum}` | up to 16px | Fraunces | 400 italic | Page number at the bottom-right of every slide |\n| `{typography.nav-hint}` | up to 13px | Fraunces | 400 italic / 45% opacity | Navigation hint at the bottom-left of the viewport |\n\n### Defaults\n- **Default size for a primary slide headline**: `{typography.headline}` (up to 120px) in Bricolage 800 uppercase.\n- **Default size for a cover-scale title**: `{typography.display-cover}` (up to 180px).\n- **Default size for the hero typographic anchor on cover-class slides**: `{typography.display-jumbo-numeral}` (italic Fraunces up to 480px) — the system's signature hero element.\n- **Default size for a body paragraph**: `{typography.body-serif-italic}` (up to 22px) in italic Fraunces.\n- **Default size for a lede paragraph**: `{typography.body-serif-italic-lg}` (up to 28px).\n- **Default size for body text inside a card**: `{typography.body-roman}` (up to 17px) in **roman** Fraunces — the roman is more readable at small sizes than italic.\n- **Default size for an \"EDITION N.\" label**: `{typography.edition-label}` (up to 30px) in italic Fraunces, paired with an `{components.ed-badge}` circular ordinal.\n- **Default weight for any Bricolage display moment**: 800. (Weight 700 is reserved for the quote body and course/who-tag elements; weight 800 is the primary display weight.)\n- **Default weight for any Fraunces body moment**: 400.\n\nWhen unsure, reach for `{typography.headline}` (up to 120px) for a routine slide headline. The 140–180px tier is for featured-edition titles and covers; the 160px tier is for section openers. Use the jumbo edition numeral when the slide is a cover-class moment and needs a hero anchor.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Bricolage display element is UPPERCASE with negative letter-spacing (-0.005em to -0.012em).** A sentence-case Bricolage headline does not exist in this system. The uppercase + negative-tracking + weight 800 combination is the system's display voice.\n- **Every Fraunces body element is italic by default.** Roman Fraunces appears only for specific tight cases (info-key in info-rows, body inside index cards). When in doubt, italic.\n- **The edition badge (`{components.ed-badge}`) is always paired with an italic edition label** — the circle ordinal and the \"EDITION N.\" text are one unit. Using one without the other reads as broken.\n- **Every card / pill / rect-tag / badge carries a 1.5px solid ink border with no fill.** The single-weight outlined-shape vocabulary is the system's structural language. Filled shapes do not exist.\n- **The paper-texture overlay (`{components.paper-texture}`) is on every slide.** Removing it (or running the system on a pure flat cream without texture) loses the printed-paper quality.\n- **Every slide carries the page-number marker** at bottom-right in italic Fraunces. The page-number is the system's spine — without it, slides feel unanchored.\n- **Internal dividers inside cards alternate between 1px solid @ 32% opacity (above content) and 1px dashed @ 32% opacity (below content).** The solid/dashed pairing is the system's card-rhythm device.\n\n### Typography Principles\nThe weight 800 + uppercase + negative letter-spacing combination is the system's Bricolage voice. Switching any of those three properties (e.g., weight 700 uppercase, or weight 800 sentence case, or default tracking) reads as a different design system. The Fraunces italic-default + opsz-axis combination is the system's body voice — using a non-opsz fallback face flattens the quality at small sizes.\n\nUnderline is not used. Bold within body paragraphs uses Fraunces weight 600 (not 700/800). Color emphasis does not exist because there is only one color. The system's only emphasis mechanisms are: scale (bigger Bricolage), weight shift inside body (Fraunces 400 → 600), italic ↔ roman switch, and opacity (full → 78%).\n\n## Layout\n\n### Canvas System\nThe system targets a fluid viewport — each `.slide` is `100vw × 100vh` with absolute positioning. Slides stack inside a `.stage` container with the paper-texture overlay sitting absolutely on the stage. Only one `.slide.active` is visible at a time; opacity transitions between slides take 280ms.\n\n### Padding Scale (uses `clamp()` ranges)\n| Token | Range | Use |\n|---|---|---|\n| `{spacing.slide-pad-h-default}` | clamp(60px, 5vw, 110px) | Default horizontal slide padding |\n| `{spacing.slide-pad-h-wide}` | clamp(80px, 7vw, 160px) | Wider horizontal padding for featured / calendar slides |\n| `{spacing.slide-pad-h-narrow}` | clamp(120px, 12vw, 280px) | Narrow horizontal padding for menu / quote slides (forces content into a column) |\n| `{spacing.slide-pad-top-default}` | clamp(96px, 10vh, 160px) | Default top padding |\n| `{spacing.slide-pad-top-cover}` | clamp(60px, 6vh, 100px) | Cover top padding (less, to give the title room) |\n| `{spacing.slide-pad-bottom-default}` | clamp(110px, 11vh, 170px) | Default bottom padding (leaves room for page-num chrome) |\n| `{spacing.slide-pad-bottom-wide}` | clamp(150px, 14vh, 220px) | Wider bottom padding for featured / quote slides |\n| `{spacing.gap-section}` | clamp(28px, 3vh, 50px) | Between major content sections |\n| `{spacing.gap-content}` | clamp(18px, 2vh, 32px) | Between related content blocks |\n| `{spacing.gap-row}` | clamp(14px, 1.6vh, 24px) | Between row-level elements (course rows, ledger rows) |\n| `{spacing.gap-tight}` | clamp(10px, 1.2vh, 18px) | Between tightly coupled elements |\n\n### Chrome Anatomy\nEvery slide carries a **page-number marker** at the bottom-right (italic Fraunces, ~16px max). The viewport also carries a **nav-hint** at the bottom-left (italic Fraunces, 45% opacity), suggesting keyboard navigation. These two chrome elements are the system's universal slide anchors.\n\nSlides with a topbar (index, calendar) carry a Bricolage headline on the left + a small italic Fraunces label-tag on the right, separated below by a 1.5px solid ink horizontal rule. The topbar-divider is the system's universal page-divider device.\n\n### Border-Radius\n- **999px** — pill buttons (fully pill-shaped)\n- **50%** — circular edition badges\n- **0** — every other shape (cards, rect-tags, info-cards, ledger rows, internal dividers)\n\nThe system uses sharp corners for content containers and pill/circle for action and ordinal markers. No medium border-radius values (4px, 8px, 12px) exist.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThe system uses **zero shadows**. No box-shadow, no text-shadow, no filter, no gradient. Elevation is communicated entirely through:\n\n1. **1.5px solid ink borders** on cards, pills, badges, rect-tags — the outlined-shape vocabulary is the system's structural depth.\n2. **1px solid or dashed internal dividers at 32% opacity** inside cards and between rows — the subtle horizontal lines give cards their internal rhythm.\n3. **The paper-texture overlay** at 10% opacity on every slide — the dotted texture sits atmospherically beneath all content, giving the page its print-stock quality.\n4. **Opacity layering on text** — primary at 100%, de-emphasized metadata at 78%, near-invisible dividers at 32%.\n\nThe absence of shadow is itself the depth language. Adding `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` shatters the printed-paper feel.\n\n### Paper Texture as Atmospheric Depth\nThe radial-dot texture on `.stage::before` is part of the depth system — it is not optional decoration. The texture gives the cream surface a quality that flat #FAF1E2 lacks: a sense that the surface is paper stock with grain, not a CSS background fill. The 4px tile size with 0.5px radial dots in 50%-opacity ink at 10% overall opacity is calibrated to be invisible at conversational viewing distance and just-visible at close inspection.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **1.5px solid `{colors.ink}`** — the universal structural border. Cards, pills, edition badges, rect-tags, topbar dividers, who-row top borders, info-card outlines.\n- **1px solid `{colors.ink-32}`** — internal solid dividers inside cards (between card-top metadata and the card title), between ledger rows, between course rows.\n- **1px dashed `{colors.ink-32}`** — internal dashed dividers inside cards (between the card body and the meta-row at the bottom), between info-rows in info-cards.\n\nBorders are never thicker than 1.5px. Never colored beyond ink (full or 32%). Never dotted (dotted is reserved for the paper-texture pattern). The solid/dashed pairing inside cards is the system's signature rhythm device.\n\n### Decorative Element Types\n\n**Paper Texture Overlay** (`{components.paper-texture}`) — A 4px-tile radial-dot pattern in 50%-opacity ink at 10% overall opacity on `.stage::before`. The system's atmospheric base; on every slide.\n\n**Pill Button** (`{components.pill}`) — An outlined fully-rounded-rectangle (border-radius 999px) holding short italic Fraunces text. The system's CTA / action button. Pills cluster in action rows (e.g., cover action row).\n\n**Pill Divider** (`{components.pill-divider}`) — A small italic Fraunces character (typically `·` or `/`) at 70% opacity placed between pills in a row.\n\n**Edition Badge** (`{components.ed-badge}`) — A ~38px circular outlined badge holding a single italic Fraunces digit. The system's edition / chapter ordinal marker; always paired with an italic \"EDITION N.\" label.\n\n**Rect Tag** (`{components.rect-tag}`) — An outlined sharp-cornered rectangular tag holding short italic Fraunces text. The sharp-cornered cousin of the pill; used where roundness isn't appropriate.\n\n**Outlined Card** (`{components.card-outlined}`) — A 1.5px ink-outlined rectangular card. Holds a card-top metadata row (separated below by a 1px @ 32% solid divider), a Bricolage card title, a Fraunces body description, and a meta-row at the bottom (separated above by a 1px @ 32% dashed divider). The system's primary content card.\n\n**Topbar with Divider** — A Bricolage headline on the left + a small italic Fraunces label-tag on the right, separated below by a 1.5px solid ink horizontal rule. The system's universal section opener.\n\n**Info-Card** — A wider outlined card with internal info-rows (key / value pairs separated by 1px @ 32% dashed dividers). Used as a featured-edition supporting panel.\n\n**Ledger Row** (`{components.ledger-row}`) — A multi-column grid row with a 1px @ 32% solid border-bottom. Holds tags, labels, and pills aligned in columns. The system's calendar / schedule / index pattern.\n\n**Course Row** — A 64px / 1fr / auto grid row with a 1px @ 32% solid border-bottom. Holds a Fraunces num-tag, an item (Bricolage name + Fraunces description), and a Fraunces pairing tag. The menu / programme pattern.\n\n**Italic Jumbo Edition Numeral** — A massive italic Fraunces digit at up to 480px. The system's signature hero typographic anchor on cover-class slides, paired with a small tracked Bricolage label beneath and an italic Fraunces meta line.\n\n**Page Number** (`{components.pagenum}`) — Italic Fraunces at the bottom-right of every slide.\n\n**Nav Hint** (`{components.nav-hint}`) — Italic Fraunces at 45% opacity at the bottom-left of the viewport, suggesting keyboard navigation.\n\n## Do's and Don'ts\n\n### Do\n- Commit to single-ink rendering. Every text, border, rule, badge, and pill is `{colors.ink}` — the warm rust terracotta. Use opacity (78%, 32%, 10%) for variation, never a different hue.\n- Apply the paper-texture overlay to every slide. The 4px radial-dot pattern at 10% opacity is part of the design system, not optional polish.\n- Run every Bricolage display element at weight 800 (or 700 for quote / course-name / who-tag) in strict uppercase with negative letter-spacing.\n- Run every Fraunces body element in italic by default. Use roman only for info-keys (where italic tracking would feel out of place) and card body descriptions (where italic at small size is less readable).\n- Reach for the italic Fraunces jumbo numeral (up to 480px) as the hero typographic anchor on cover-class slides. It's the system's signature.\n- Pair every edition badge with an italic \"EDITION N.\" Fraunces label — the circle ordinal and the text label are one unit.\n- Use the outlined-card pattern (1.5px ink border + internal 1px @ 32% solid divider above content + 1px @ 32% dashed divider below content) for primary content cards. The solid/dashed pairing is the system's rhythm.\n- Use the pill (border-radius 999px) and the rect-tag (sharp corners) intentionally — pill for actions, rect for metadata / status. Don't conflate them.\n- Place the page-number marker (italic Fraunces, bottom-right) on every slide. The marker is the system's spine.\n- Keep slides rich-but-curated: one major Bricolage display moment + 2–4 supporting groups (cards, pills, ledger rows, info pairs). Single-element slides feel underweight; 8-element slides feel broken.\n\n### Don't\n- Don't introduce a second ink color. The system is single-ink — adding a navy, green, yellow, or any second hue shatters the printed-program register.\n- Don't fill any shape. Cards, pills, badges, rect-tags are outline-only. Filled rectangles in the ink color do not exist.\n- Don't use box-shadow, gradient, blur, or filter on any element. The system is flat printed paper.\n- Don't omit the paper-texture overlay. A flat #FAF1E2 background without the dot pattern reads as digital, not paper.\n- Don't run Bricolage in sentence case. Bricolage is always uppercase with negative tracking and weight 700 or 800.\n- Don't render Fraunces in roman by default. Italic is the body voice; roman is the exception for specific tight cases.\n- Don't use thicker borders (2px+). The 1.5px structural border weight is the system's commitment.\n- Don't use a medium border-radius (4px, 8px, 12px). The system uses 999px (pill), 50% (badge), or 0 (everything else).\n- Don't pair the edition badge with a non-Fraunces label or skip the label entirely. The badge-and-label unit is the system's edition marker.\n- Don't crowd a slide with 8 small elements. Reach for fewer, larger groups with breathing room.\n\n## Responsive Behavior\n\nThe system uses **`clamp()` units throughout** — every size, padding, gap, and rule scales fluidly between minimum and maximum based on viewport width and height. The same composition renders correctly on a 1280×720 laptop, a 1920×1080 monitor, and a 2560×1440 display without media queries.\n\n### Scaling Behavior\n- Bricolage display sizes clamp between a min (e.g. 60px), a vw/vh-based middle value, and a max (e.g. 140px). The `min()` inner function combines width-based and height-based caps so headlines never overflow on short viewports.\n- Fraunces body sizes follow the same pattern but with smaller ranges.\n- Padding and gaps scale linearly with vw/vh.\n- The 1.5px structural border and 1px @ 32% internal dividers are fixed-pixel and do not scale, which means at larger viewports the borders appear proportionally finer. This is by design.\n\n### Presenter Behavior\n- Slides advance via keyboard navigation (handled by deck JavaScript).\n- Only one `.slide.active` is visible at a time; non-active slides are `opacity: 0; pointer-events: none`.\n- Slide-to-slide transition is a 280ms opacity fade.\n- The nav-hint at the bottom-left (\"← → to navigate\") tells the viewer how to advance.\n\n### Print / Export\nThere is no `@media print` rule in the system. Print export will render only the active slide; multi-slide print requires per-slide rendering or a dedicated print stylesheet.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display / cover / headline (Bricolage roles, 96–180px) | 思源宋体 Noto Serif SC | 700 | Mincho heavy weight carries the printed-program mass that Bricolage 800 provides in Latin |\n| Card title / course-name / info-value (28–44px) | 思源宋体 Noto Serif SC | 700 | Same Mincho voice at smaller sizes for consistency |\n| Hero edition numeral (480px italic Fraunces) | 思源宋体 Noto Serif SC | 400 | Use a Chinese ordinal character (一二三 / 春夏秋) for the hero anchor instead of a Western digit |\n| Body / lede / tagline (Fraunces italic roles) | 思源宋体 Noto Serif SC | 400 | Mincho body voice — warmth without italic, since Chinese has no italic |\n| Pill text / meta-tag / pagenum | 思源宋体 Noto Serif SC | 400 | Keep all chrome in Mincho 400; the system's single-ink discipline carries through |\n| Info-key / edition-label-tracked (uppercase tracked roles) | 思源宋体 Noto Serif SC | 400 with 0.16em letter-spacing | Maintains the tracked-chrome feel |\n\n### Mixed-Content Strategy\n\nUse **Strategy A** — switch the entire face stack to Noto Serif SC across all roles, replacing both Bricolage Grotesque (display) and Fraunces (body). Long Table is a minimal single-ink data / program system where the typographic personality is carried more by the **single-ink rust terracotta**, the **outlined-shape vocabulary**, and the **paper-texture overlay** than by the specific Latin faces. Going all-Mincho in Chinese preserves the printed-program register cleanly without the per-glyph baseline wobble that Strategy C would introduce on a system this typographically dense. Stack:\n\n```css\n/* Bricolage roles (display, headline, card-title, course-name, info-value) */\nfont-family: 'Bricolage Grotesque', 'Noto Serif SC', sans-serif;\n/* Fraunces roles (body, lede, tagline, pill, pagenum, edition-label) */\nfont-family: 'Fraunces', 'Noto Serif SC', Georgia, serif;\n```\n\nWhen the deck content is pure Chinese, override both font stacks to lead with Noto Serif SC. Bricolage roles get weight 700 (matches 800 mass in Mincho), Fraunces roles get weight 400.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.86–0.95 on display, 1.45–1.5 on body) read as cramped in Chinese. Bump display to 1.0–1.1 and body to 1.55–1.65.\n- **Remove negative letter-spacing on CJK headlines.** Bricolage display uses -0.005em to -0.012em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Bricolage portion was meant to be capitalized. (This matters here — every Bricolage display element in the source is `text-transform: uppercase`.)\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between Noto Serif SC weight 400 and 700 inside the same sentence — pick the weight that matches the role (headline = 700, body = 400) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nLong Table's whole voice is \"supper-club poster / Risograph zine / small-press dinner program\" — single-ink rust terracotta on cream, outlined shapes, paper-texture overlay. In Chinese, the system's identity does not depend on the specific Latin faces (Bricolage and Fraunces); it depends on the **single-ink commitment**, the **1.5px outlined-shape vocabulary**, the **4px radial-dot paper texture**, and the **rich-but-curated density**. Going all-Noto-Serif-SC preserves every one of those identity markers cleanly.\n\nThe default-italic body rule does not translate to Chinese (Chinese has no italic concept; slanted Han glyphs read as broken, not as a body voice). In Chinese, every Fraunces-italic role simply becomes **Noto Serif SC weight 400 upright** — the warmth comes from the Mincho character itself, not from the slant. This is the right trade-off for this system.\n\nThe hero italic Fraunces jumbo numeral (up to 480px) is the system's signature anchor in Latin — a single italic digit acting as a typographic centerpiece. In Chinese, **use a Chinese ordinal or season character instead of a Western digit**: 「三」、「五」、「春」、「秋」, rendered in Noto Serif SC at weight 400. The Han glyph's denser visual weight at 480px balances the cover slide better than a Western digit would; the cream paper background and warm rust ink carry the printed-program feel through unchanged.\n\nThe system's outlined-shape vocabulary (pills, edition badges, rect-tags, outlined cards) works identically in Chinese — no adjustments needed. The \"EDITION N.\" label paired with the circular badge becomes 「第三期」or 「第 03 期」inside the circle, with the meta-label below in Noto Serif SC 400. The 32%-opacity solid / dashed internal divider rhythm is purely structural and unaffected by language.\n\n### Known CJK Gap\n\nThe Fraunces italic-default body voice is one of Long Table's most distinctive typographic moves in Latin — italic Mincho-style serif body that gives the system its lyrical, hand-written warmth. Chinese has no equivalent: there is no commonly-available \"italic Mincho\" face on the Google Fonts CDN, and slanted Han glyphs read as broken regardless. The Chinese rendering loses the italic-default character — every body line becomes upright Noto Serif SC weight 400. This is a real loss of personality, partially compensated by Noto Serif SC's own warmth at body sizes, but Chinese-content Long Table decks read measurably more \"neutral magazine\" than \"supper-club poster.\" For decks where this matters, lean harder on the **single-ink color** and the **paper-texture overlay** to carry the warmth that the italic body would have carried in Latin.\n\n## Iteration Guide\n\n1. Any new mark on a slide is in `{colors.ink}` — full opacity for primary, 78% for de-emphasized metadata, 32% for internal dividers. No second color.\n2. Any new headline is Bricolage Grotesque weight 800 uppercase with negative letter-spacing. Pick the size from the headline ladder (96 / 100 / 120 / 140 / 160 / 180px max) — do not invent a new size.\n3. Any new body paragraph is Fraunces italic at weight 400. Use roman only for info-keys (tracked uppercase) and card-body descriptions.\n4. Any new edition / ordinal marker uses the `{components.ed-badge}` (circular outline) paired with an italic \"EDITION N.\" Fraunces label.\n5. Any new action button is the `{components.pill}` (border-radius 999px); any new metadata tag is the `{components.rect-tag}` (sharp corners). Don't conflate the two.\n6. Any new card is the `{components.card-outlined}` pattern: 1.5px ink border, internal 1px @ 32% solid divider above content, internal 1px @ 32% dashed divider below content.\n7. Any new ledger / schedule / calendar row uses the multi-column grid + 1px @ 32% solid border-bottom pattern (`{components.ledger-row}`).\n8. Any new section opener uses the topbar pattern: Bricolage headline + small italic Fraunces label on the right + 1.5px solid ink horizontal rule beneath.\n9. Any new cover-class moment reaches for the italic Fraunces jumbo edition numeral as the hero typographic anchor — paired with a small tracked Bricolage label beneath and a italic Fraunces meta line.\n10. Every slide carries the page-number marker. If you skip it, the slide will feel unanchored.\n\n## Known Gaps\n\n- The two Google Fonts (Bricolage Grotesque with `opsz` 12..96, Fraunces with `opsz` 9..144) are loaded via `<link>`. Offline rendering will fall back to system sans (for Bricolage) and Georgia (for Fraunces) — which loses the optical-size axis and the personality of both faces. Self-hosting recommended for offline / print reliability.\n- The `opsz` optical-size axis is critical to quality at large display sizes (480px jumbo numeral) and small metadata sizes (14px page-number). Fallback faces without `opsz` will look noticeably flat at the extremes.\n- The system is single-ink by design. If a deck needs a second emphasis color (a \"callout\" or \"warning\" hue), the system cannot accommodate it without breaking the printed-program register. Use Bricolage scale + opacity + italic/roman switch as the only emphasis mechanisms.\n- The paper-texture overlay uses a `background-image` radial-gradient that may render with subtle compression artifacts on some browsers at high zoom. The texture is essential to the system identity; do not remove it as a \"performance optimization.\"\n- Body paragraphs are italic by default. For deck content where italic at body scale is hard to read (long technical paragraphs, code samples), the system has no clean fallback — italic is the body voice. Keep paragraphs short and lyrical.\n- The CSS has several empty rule blocks (`.body-it { ... }`, `.s-cover .stats .num { font-weight: 600; }` etc.) where the original commented-out italic / weight properties have been stripped. The intended treatment in many places is \"italic Fraunces at weight 400\" — the default style — but the empty blocks make this implicit rather than explicit. Treat italic as the default everywhere the comments hint at it.\n- The system loads Bricolage weights 400 and 600 and Fraunces weights 500 — these are not actively used in the published CSS. Using them would introduce intermediate weights that break the single-weight commitment per face.\n- The fallback `.body-it` and `.body-ro` utility classes are defined but use the explicit class names sparingly in the markup. Most slides set typography per-element rather than via the utility classes — copy the per-element styles when authoring new slides, not the utilities.\n- The hero italic Fraunces jumbo numeral at 480px is a literal numeral character — there is no glyph alternation or kerning fix for specific characters. The \"0\" and \"8\" glyphs may need optical adjustment at extreme sizes; check rendering at the target viewport.\n- The system has no `@media print` rule. Print export will not paginate; treat Long Table as screen-first.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/long-table/preview.md":"# Long Table Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/long-table/design.md`\n- Preview card: `bold-template-pack/templates/long-table/preview.md`\n\n## Selection Metadata\n\n- Slug: `long-table`\n- Tagline: Warm cream and rust-red supper-club aesthetic with bold uppercase grotesk headlines, Fraunces serifs, and pill-shaped outlined buttons.\n- Mood: warm, intimate, modern, friendly, small-batch, social, hospitality\n- Tone: warm, playful, considered, social, magazine-friendly, modern-editorial\n- Formality: medium\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel like a warm, intimate, modern hospitality / community brand: supper clubs, dinner series, small restaurants, creative-studio events, membership pitches, lifestyle and wine brands. Equally good for any deck wanting a single warm accent colour, mixed-weight typography, and a social-media-aware modern-editorial voice.\n- Avoid for: Decks that need corporate polish, technical density, or a cold / minimalist register — the rust-red palette and bold serif mix are intentionally warm and people-facing.\n\n## Visual Snapshot\n\nA warm, single-ink editorial system in the register of a supper-club poster, a small-batch zine, or a Risograph-printed program. The entire system runs in one ink color — a warm rust terracotta (#B53D2A) — on a buttery cream paper ground (#FAF1E2), with a subtle 4px radial-dot texture overlay giving the surface its \"printed paper\" quality. Display type runs in Bricolage Grotesque at weight 700–800 in uppercase; body and metadata run in Fraunces serif at weight 400–600 with optical-size axis engaged. Pill buttons, outlined edition badges, italic-edition numerals, and dashed/solid 1.5px borders complete the printed-program vocabulary.\n\nLong Table is a single-ink editorial system in the register of a supper-club poster, a Risograph zine, or a small-press dinner program. The foundational premise is monochromatic: every visible mark in the system — every headline, every paragraph, every border, every rule, every pill, every page number — is rendered in a single warm rust terracotta ink ({colors.ink} — #B53D2A) on a buttery cream paper ground ({colors.paper} — #FAF1E2). The only chromatic variation is opacity: the same ink at 100% for primary marks, at 78% for de-emphasized metadata, at 32% for dashed internal dividers, at 10% for the paper-texture dots.\n\n## Preview Ingredients\n\n- Palette: paper #FAF1E2; paper-d #F2E5CF; paper-vd #E8D7B6; ink #B53D2A; ink-dp #8E2D1F; rule #B53D2A\n- Typography: See full design doc after selection.\n- Signature move: Bricolage Grotesque at weights 700 and 800 in strict uppercase carries every display moment — covers, headlines, card titles, course names, quote bodies, info values, who-tags. Bricolage is a wide, slightly-condensed grotesque with strong personality; its upp...\n- Signature move: Fraunces at weight 400–600 carries every body paragraph, every metadata field, every pill, every page number, every edition label. Italic Fraunces is the default body style — the slanted serif is the system's body voice, lending warmth and editorial personali...\n- Signature move: One ink color ({colors.ink} — warm rust terracotta) on cream paper ({colors.paper}). Opacity variants are the only color variation.\n- Signature move: Bricolage Grotesque weight 700–800 uppercase for every display moment; Fraunces 400–600 italic-default for every body and metadata moment.\n- Signature move: Subtle 4px radial-dot paper texture on every slide via .stage::before — invisible at distance, present up close.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/mat/design.md":"---\nversion: alpha\nname: Mat\ndescription: A warm, material-tactile presentation system inspired by a high-end product landing page. Dark forest green is the dominant environment, warmed by a low atmospheric wood-brown glow from the bottom-right corner of every dark slide. Cream type floats directly on the field; warm orange acts as the single accent. The typeface stack pairs Bricolage Grotesque (a heavy, rounded grotesque) for display with DM Sans for body and DM Mono for labels — the result reads as industrial-design portfolio meets boutique product launch, never tech demo.\n\ncolors:\n  bg-dark: \"#232E26\"\n  bg-dark-alt: \"#2E3D30\"\n  bg-cream: \"#EDE6D0\"\n  bg-cream-alt: \"#E4DAC4\"\n  ink-cream: \"#F0E8D2\"\n  ink-cream-2: \"rgba(240, 232, 210, 0.58)\"\n  ink-cream-3: \"rgba(240, 232, 210, 0.3)\"\n  ink-dark: \"#1E2820\"\n  ink-dark-2: \"rgba(30, 40, 32, 0.6)\"\n  ink-dark-3: \"rgba(30, 40, 32, 0.3)\"\n  accent-orange: \"#C07030\"\n  border-on-dark: \"rgba(240, 232, 210, 0.12)\"\n  border-on-cream: \"rgba(30, 40, 32, 0.14)\"\n  wood-glow: \"#7A4E24\"\n\ncolor-aliases:\n  c-fg: ink-cream\n  c-fg-light: ink-dark\n  c-bg: bg-dark\n  c-bg-light: bg-cream\n  c-accent: accent-orange\n\ntypography:\n  display:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 12vw\n    fontWeight: 800\n    lineHeight: 0.88\n    letterSpacing: -0.03em\n  h1:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 7vw\n    fontWeight: 800\n    lineHeight: 0.92\n    letterSpacing: -0.025em\n  h2:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 4vw\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  h3:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 2.4vw\n    fontWeight: 600\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  lead:\n    fontFamily: \"DM Sans, Noto Sans SC, sans-serif\"\n    fontSize: 1.5vw\n    fontWeight: 400\n    lineHeight: 1.55\n  body:\n    fontFamily: \"DM Sans, Noto Sans SC, sans-serif\"\n    fontSize: 1.05vw\n    fontWeight: 400\n    lineHeight: 1.65\n  caption:\n    fontFamily: \"DM Sans, Noto Sans SC, sans-serif\"\n    fontSize: 0.82vw\n    fontWeight: 400\n    lineHeight: 1.5\n  label:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 0.7vw\n    fontWeight: 400\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  stat-value:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 5.5vw\n    fontWeight: 800\n    lineHeight: 1.0\n    letterSpacing: -0.025em\n  quote-text:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 3.4vw\n    fontWeight: 600\n    lineHeight: 1.2\n    letterSpacing: -0.02em\n  quote-mark:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 8vw\n    fontWeight: 800\n    lineHeight: 0.6\n\nspacing:\n  pad-x: 5.5vw\n  pad-y: 5.5vh\n  gap-lg: 4.5vh\n  gap-md: 2.8vh\n  gap-sm: 1.4vh\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  kicker:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    color: \"{colors.accent-orange}\"\n  rule:\n    width: 32px\n    height: 1px\n    background: \"{colors.accent-orange}\"\n  bullet-marker:\n    content: \"—\"\n    color: \"{colors.accent-orange}\"\n    fontFamily: \"{typography.label.fontFamily}\"\n    description: \"Em-dash prefix in warm orange; emerges in mono face. The system's standard list mark; never a bullet, never a checkmark.\"\n  info-card:\n    background: \"{colors.bg-cream}\"\n    color: \"{colors.ink-dark}\"\n    padding: \"{spacing.gap-md} calc({spacing.pad-x} * 0.8)\"\n    maxWidth: 28vw\n    description: \"Cream inset box embedded on a dark green field. The signature material-contrast component; carries a heading and a body block, no border, no shadow.\"\n  chrome-band:\n    borderBottom: \"1px solid {colors.border-on-dark}\"\n    paddingBottom: \"{spacing.gap-sm}\"\n    description: \"Label-pair on top of a 1px rule; suppressed on cover/quote/end slide types.\"\n  foot-band:\n    borderTop: \"1px solid {colors.border-on-dark}\"\n    paddingTop: \"{spacing.gap-sm}\"\n    description: \"Label-pair under a 1px rule; mirrors the chrome band.\"\n  stat-cell:\n    borderRight: \"1px solid {colors.border-on-dark}\"\n    padding: \"{spacing.gap-md} {spacing.pad-x} {spacing.gap-md} 0\"\n    description: \"A vertically-divided cell containing a large numerical value (with optional inline orange-emphasis em-span) and a one-line label. Last cell has no right border.\"\n  bar-fill:\n    width: \"100%\"\n    background: \"{colors.ink-cream-3}\"\n    description: \"Vertical bar in muted cream; gets the orange accent (.accent variant) when it's the highlighted data point.\"\n  compare-divider:\n    width: 1px\n    background: \"{colors.border-on-dark}\"\n    description: \"A 1px-wide vertical column (not a border) used to split a before/after comparison; subtle, not loud.\"\n  image-placeholder:\n    background: \"rgba(240, 232, 210, 0.06)\"\n    border: \"1px solid {colors.border-on-dark}\"\n    color: \"{colors.ink-cream-3}\"\n    description: \"Hairline-bordered void with centered mono label until photography is available.\"\n  atmospheric-glow:\n    selector: \".slide.dark::before\"\n    position: \"bottom-right ellipse, 55% wide × 70% tall\"\n    gradient: \"radial-gradient(ellipse at 70% 80%, rgba(122, 78, 36, 0.28) 0%, rgba(80, 50, 20, 0.14) 40%, transparent 70%)\"\n    description: \"The wood-brown atmospheric glow that lives on every dark slide via ::before. Non-optional on dark surfaces; defines the warmth of the system.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nMat is a **material-tactile presentation system** built around a single environmental premise: a deep forest-green surface warmed from the bottom-right corner by a low wood-brown glow. The atmosphere does the heavy lifting — before any content lands, the slide already feels like a workbench in afternoon light. Cream type floats directly on the green field; there are no cards, no panels, no frames. Where the system needs to break the green, it does so with a single cream inset box (the info-card) that reads as a piece of warm paper laid on the dark surface.\n\nThe typeface stack is a deliberate three-voice pairing. **Bricolage Grotesque** at weights 700 and 800 is the display workhorse — heavy, rounded, with a slightly mechanical character that suits product writing without feeling tech-startup. **DM Sans** at weight 400 is the body voice, neutral enough to let the display type breathe. **DM Mono** at weight 400 handles all labels, kickers, metadata, and chrome — anything structural that needs to read as a tag rather than a sentence. Display type is **always mixed case** in this system, never uppercase; the uppercase work is reserved for mono labels.\n\nThe palette is intentionally narrow. **Dark forest green** is the dominant surface (`{colors.bg-dark}`), with a slightly lighter alternate available for layered regions. **Warm cream** is the primary text color on dark and the secondary surface color when a slide flips light. **Warm orange** (`{colors.accent-orange}`) is the single accent — it appears only as small inline marks: kicker text, bullet em-dashes, the `<em>` inside a stat numeral, the opening quote glyph, the single highlighted bar in a chart. Orange is never a background and never a large headline color; it's the structural emphasis dot of the system.\n\nDepth is minimal and atmospheric, not stacked. There are no drop shadows. There are no rounded corners on any structural element. The only depth signal is the wood-brown radial glow that sits behind every dark slide via a `::before` pseudo-element. Region separation comes from **thin 1px hairline rules** in low-opacity cream — for chrome bands, foot bands, stat cell dividers, compare panel splits, and chart baselines. Nothing about this system is loud.\n\n**Density philosophy: medium-sparse.** Mat reads as elegant when the slide breathes — generous left and right padding (`{spacing.pad-x}` at 5.5vw), one main typographic moment, and one secondary block of supporting copy. Cramming three columns of bullets onto a slide breaks the system; the warm green field needs negative space to do its atmospheric work. The exception is the stats and compare slide types, where a clean three-up or two-up arrangement of restrained cells is correct. A slide with a single headline and one paragraph of lead copy is right in this system's lane. A slide that fills 80% of its area with type is fighting the design.\n\n**Key Characteristics:**\n- Dark forest green canvas (`{colors.bg-dark}`) with a warm wood-brown radial glow (`{components.atmospheric-glow}`) anchored to the bottom-right corner of every dark slide.\n- Cream text (`{colors.ink-cream}`) floats directly on the green field with no card, panel, or frame around it.\n- Bricolage Grotesque display type is **always mixed case** — never uppercase. Uppercase is reserved for DM Mono labels.\n- A single accent color, warm orange (`{colors.accent-orange}`), used only as small inline emphasis (kicker, bullet marker, inline `<em>`, quote glyph, one chart bar).\n- The cream **info-card** (`{components.info-card}`) is the signature material-contrast component — a warm paper rectangle inset on the dark field.\n- Bullet lists use an em-dash prefix in warm orange via DM Mono — never a dot, never a check.\n- Thin 1px hairline rules in low-opacity cream are the only divider language. No heavy borders, no shadows.\n- The system has one light slide variant (cream background with dark green text) used as a tonal inversion within a deck, never as the default.\n\n## Colors\n\n### Palette\n\n- **Dark Forest Green** (`{colors.bg-dark}` — #232E26): The dominant environment. Default background for every slide unless a deliberate light-slide variant is chosen. The green is muted enough that cream type sits on it without vibration.\n- **Slightly Lighter Green** (`{colors.bg-dark-alt}` — #2E3D30): A tonal step-up reserved for layered or recessed surfaces within a dark slide. Available but used sparingly.\n- **Warm Cream** (`{colors.bg-cream}` — #EDE6D0): The light-slide background and the fill color of the info-card inset. Reads as warm paper, not white — the warmth is essential to the system's material identity.\n- **Deeper Cream** (`{colors.bg-cream-alt}` — #E4DAC4): A secondary cream tone for image placeholders on light slides.\n- **Cream Ink** (`{colors.ink-cream}` — #F0E8D2): Primary text color on every dark surface. Slightly warmer than the background cream — chosen so headlines feel like they're carved into the green rather than printed on it.\n- **Cream Ink at 58% / 30%** (`{colors.ink-cream-2}`, `{colors.ink-cream-3}`): Secondary and tertiary text on dark. Used for muted lead copy and barely-there metadata respectively.\n- **Dark Ink** (`{colors.ink-dark}` — #1E2820): Primary text color on cream surfaces (info-card body, light slide). A very dark forest green, never pure black.\n- **Dark Ink at 60% / 30%** (`{colors.ink-dark-2}`, `{colors.ink-dark-3}`): Muted and tertiary text on cream.\n- **Warm Orange** (`{colors.accent-orange}` — #C07030): The single accent. A burnt copper-orange that nods to wood, leather, and oxidized metal. Never a background, never a large headline color.\n- **Wood Glow** (`{colors.wood-glow}` — #7A4E24): The radial atmospheric glow color, applied only at 0.28 and 0.14 alpha inside the bottom-right corner gradient. Never used as a flat fill.\n\n### Defaults\n\n- **Default surface background**: `{colors.bg-dark}` (forest green). The system is dark-default; cream slides are an intentional tonal break, not a routine choice.\n- **Default headline color on dark**: `{colors.ink-cream}`. Headlines never appear in orange.\n- **Default headline color on cream**: `{colors.ink-dark}`.\n- **Default body text color on dark**: `{colors.ink-cream-2}` (the 58% cream — the `.muted` helper).\n- **Default body text color on cream**: `{colors.ink-dark-2}`.\n- **Default border / divider color**: `{colors.border-on-dark}` on dark; `{colors.border-on-cream}` on cream. Always 1px, never thicker.\n- **Default kicker color**: `{colors.accent-orange}`. The kicker is the system's eyebrow label and is the most consistent place orange shows up.\n- **Default inline emphasis color**: `{colors.accent-orange}`. An `<em>` inside a stat value, a quote attribution, or a chart label resolves to orange.\n- **Default atmospheric treatment for dark slides**: the wood-brown radial glow (`{components.atmospheric-glow}`) is always on. It is part of the dark surface itself.\n\nOrange functions as a punctuation color: it tells the eye where the structural emphasis lives without ever competing for surface area. If two orange elements end up adjacent on the same slide, one of them is wrong.\n\n## Typography\n\n### Font Family\n\nThe system runs on three Google Fonts plus CJK fallback. **Bricolage Grotesque** carries every display, h1, h2, h3, stat numeral, and quote text — its rounded, heavy character at weights 700–800 is the defining voice. **DM Sans** at weight 400 carries every paragraph, lead, caption, and bullet item — neutral, readable, lets the display type lead. **DM Mono** at weight 400 carries every label, kicker, chrome tag, footer text, bullet em-dash, and chart label — anything that needs to read as a structural marker rather than prose. **Noto Sans SC** is the CJK fallback for all sans roles; **Noto Serif SC** is not used.\n\nA subtle but load-bearing rule: **the bullet em-dash before each list item renders in DM Mono in warm orange**, not in the body face. The mono shape is what makes the dash feel like a deliberate mark and not a stray punctuation glyph.\n\nItalics are not used for typographic decoration in this system. The `<em>` tag is repurposed as an **orange inline emphasis** — `<em>` inside a stat value or a quote attribution switches to `{colors.accent-orange}` and stays upright (font-style: normal). There is no italicized face anywhere.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 12vw | Bricolage Grotesque | 800 | Cover or opening hero display — massive, line-broken into 1–2 words per line |\n| `{typography.h1}` | 7vw | Bricolage Grotesque | 800 | Chapter-opening or closing headline |\n| `{typography.h2}` | 4vw | Bricolage Grotesque | 700 | Primary content-slide headline |\n| `{typography.stat-value}` | 5.5vw | Bricolage Grotesque | 800 | Large numerical figure inside a stat cell |\n| `{typography.quote-mark}` | 8vw | Bricolage Grotesque | 800 | Decorative opening quotation glyph in warm orange |\n| `{typography.quote-text}` | 3.4vw | Bricolage Grotesque | 600 | Pull-quote body text |\n| `{typography.h3}` | 2.4vw | Bricolage Grotesque | 600 | Sub-headline or region heading |\n| `{typography.lead}` | 1.5vw | DM Sans | 400 | Lead paragraph or large bullet item |\n| `{typography.body}` | 1.05vw | DM Sans | 400 | Body paragraph and info-card body |\n| `{typography.caption}` | 0.82vw | DM Sans | 400 | Image caption, tagline, fine print |\n| `{typography.label}` | 0.7vw | DM Mono | 400 | Kicker, chrome tag, footer label, metadata, chart label |\n\n### Defaults\n\n- **Default primary section headline**: `{typography.h2}` (4vw).\n- **Default opening or cover display**: `{typography.display}` (12vw) on a cover; `{typography.h1}` (7vw) on a chapter or closing moment.\n- **Default body paragraph size**: `{typography.body}` (1.05vw). Reach for `{typography.lead}` (1.5vw) when the paragraph is the single supporting block under a large headline.\n- **Default label / kicker size**: `{typography.label}` (0.7vw).\n- **Default weight for any display element**: 700 (h2) or 800 (display, h1, stat-value).\n- **Default weight for body**: 400.\n- **Default headline letter-spacing**: negative — display at -0.03em, h1 at -0.025em, h2 at -0.02em. The negative tracking is essential.\n\nWhen unsure, default to `{typography.h2}` for the primary text moment paired with one `{typography.lead}` paragraph as supporting copy — that pairing is the system's most reliable rhythm.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **All display, h1, h2, h3 text is mixed case** — never uppercase. Uppercase display type does not exist in this system. If text is in Bricolage Grotesque, it is sentence case.\n- **All labels, kickers, chrome text, footers, and metadata are DM Mono uppercase with 0.12em positive tracking.** Mono in sentence case does not exist here.\n- **The kicker is always warm orange.** When a slide carries a kicker (eyebrow label above a headline), its color is `{colors.accent-orange}` regardless of surface.\n- **Bullet lists use an em-dash prefix in DM Mono colored warm orange.** Never a dot, never a check, never a numeral.\n- **The `<em>` tag inside a stat numeral renders in warm orange and stays upright.** It is the mechanism for highlighting a unit suffix or a key digit inside a number.\n- **Headlines on dark surfaces are cream; headlines on cream surfaces are dark ink.** Headlines are never orange.\n- **All Bricolage display type uses negative letter-spacing.** Default tracking on display reads as untreated; the negative is what gives the type its compressed, premium-product character.\n\n### Typography Principles\n\nThe rhythm of the system is **heavy mixed-case display + light mixed-case body + small uppercase mono label**. Switching any of those three modes (e.g., uppercasing the display, or making the body the same weight as the display) breaks the editorial register. Bricolage at 700–800 sits next to DM Sans at 400 — the weight gap is deliberate and wide. Do not use intermediate Bricolage weights (400, 500) for display moments; they read as undecided.\n\nItalics are not used. Underline is not used. The only emphasis mechanism inside body copy is the orange `<em>` inline. The only structural emphasis is the kicker and the bullet em-dash.\n\n## Layout\n\n### Canvas System\n\nMat is **viewport-fluid by design**. All sizes use `vw` and `vh` units so the layout scales linearly with the viewport. The slide container is `100vw × 100vh` and the deck is a horizontal flex strip that translates left/right by full viewport widths. There is no fixed canvas dimension; the same composition renders correctly on any 16:9-ish viewport.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 5.5vw | Slide horizontal padding; the breathing room on left and right edges |\n| `{spacing.pad-y}` | 5.5vh | Slide vertical padding |\n| `{spacing.gap-lg}` | 4.5vh | Between major content sections |\n| `{spacing.gap-md}` | 2.8vh | Between related elements (headline → lead, stat → label) |\n| `{spacing.gap-sm}` | 1.4vh | Between tightly related elements (label pair in chrome band) |\n\nThe horizontal padding is generous — content occupies roughly the middle 89% of the viewport. Pushing content closer to the edges breaks the system's editorial spaciousness.\n\n### Chrome Frame\n\nMost slide types carry a **chrome band** (`{components.chrome-band}`) at the top and a **foot band** (`{components.foot-band}`) at the bottom. Each is a `flex space-between` row of two DM Mono labels (typically a section name on the left and a slide-position or section number on the right) separated from the body by a 1px hairline rule. Cover, quote, and end-style slides suppress both bands entirely — those moments are chromeless by convention.\n\n### Navigation Chrome\n\nA row of nav-dots is fixed center-bottom (5px circles in low-opacity white) and a slide counter sits bottom-right (10px DM Mono in `rgba(255,255,255,0.25)`, format `01 / 09`). These are presentation chrome, not part of the design language proper — they're consistent across all template families in this library.\n\n## Depth and Elevation\n\n### Atmospheric Glow (Primary Depth Mechanism)\n\nThe system's only depth treatment is the **bottom-right wood-brown radial glow** that lives on every dark slide via `::before`. The pseudo-element occupies 55% width × 70% height anchored to the bottom-right corner, with a radial gradient from `rgba(122,78,36,0.28)` to `rgba(80,50,20,0.14)` to transparent. The glow sits at `z-index: 0`; all slide content sits at `z-index: 1`. This is the depth — there are no drop shadows, no elevation cards, no glow effects on text.\n\n### Hairline Rules (Structural Separation)\n\nWhere the system needs to separate regions, it uses **1px hairline rules in low-opacity cream** (`{colors.border-on-dark}` at 12% opacity) on dark surfaces, or low-opacity dark ink (`{colors.border-on-cream}` at 14% opacity) on cream. These rules appear under chrome bands, above foot bands, between stat cells, between compare panels, and as the chart baseline. Hairlines never go thicker than 1px, never colored.\n\n### No Shadows\n\nThere are no `box-shadow` declarations on any structural element. The info-card sits on the dark field with no shadow — its material contrast is the cream-on-green tonal jump, not elevation. Adding a shadow to any component breaks the system's flat material-photography aesthetic.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Every structural element — info-card, image placeholders, stat cells, compare panels, bars |\n| 50% | Nav-dot circles only |\n\nThe system has **no rounded corners** on any composed content. Cards, panels, and image frames are all strict rectangles. The only round shapes are the navigation UI dots.\n\n### Border Weights\n\n- **1px solid hairline** — the universal structural border. Used for chrome bands, foot bands, stat cell dividers, compare panel splits, chart baselines, and image placeholder outlines. Color is `{colors.border-on-dark}` on dark surfaces and `{colors.border-on-cream}` on cream.\n- No other border weights exist. A 2px border breaks the system; a 3px border belongs to a different design family.\n\n### Decorative Element Types\n\n**Kicker** — A small DM Mono uppercase tag in warm orange with 0.12em positive tracking, placed above a headline as an eyebrow label. The most consistent appearance of orange in the system. Typically 0.7vw size.\n\n**Rule** — A 32px-wide × 1px-tall horizontal accent line in warm orange. Used as a small underline-style separator between a kicker and a headline, or beneath a chapter number. Decorative, not structural.\n\n**Bullet em-dash** — The list marker for every bullet list. Renders as `—` in DM Mono colored warm orange, prepended to the list item via the marker column of a CSS grid (`grid-template-columns: 1.4em 1fr`). The bullet voice of the system.\n\n**Info-card** — A cream inset rectangle (`{components.info-card}`) placed on a dark slide. Carries a heading (h3-scale, dark ink) and a body block (body-scale, muted dark ink). The single most distinctive component in the system — used to puncture the green field with a piece of warm paper. Has no border, no shadow, no rounded corners; the tonal jump alone defines the edge.\n\n**Stat cell** — A vertically-divided cell containing a large numerical value (`{typography.stat-value}`) above a one-line label (`{typography.body}` in muted cream). Cells line up in groups of three with a 1px right border separating each (last cell has no right border). The numerical value supports an inline `<em>` in orange for unit suffixes (e.g., the suffix in `4.7k`).\n\n**Quote mark** — An oversized opening quotation glyph at `{typography.quote-mark}` size in warm orange. Sits above the quote text as a typographic ornament. Used only inside the quote slide type.\n\n**Compare divider** — A 1px-wide vertical CSS column (not a border) between two side-by-side panels. Subtle by design — the contrast between the two panels does the visual work, not the divider.\n\n**Image placeholder** — A void rectangle with a 1px hairline border, 6% cream background, and centered DM Mono label reading the placeholder name. Used until real photography is dropped in. The placeholder color is intentionally close to the background — image regions should not announce themselves.\n\n## Do's and Don'ts\n\n### Do\n- Use the dark forest green (`{colors.bg-dark}`) as your default slide background. The system is dark-first; cream slides are a tonal break, not the default.\n- Apply the wood-brown atmospheric glow to every dark slide. It is part of the surface, not an optional flourish.\n- Pair Bricolage Grotesque display in mixed case with DM Mono labels in uppercase. The case contrast between the two faces is the system's typographic rhythm.\n- Set headlines in cream (`{colors.ink-cream}`) on dark and dark ink (`{colors.ink-dark}`) on cream. Headlines never carry the orange accent.\n- Use warm orange (`{colors.accent-orange}`) as the kicker color, the bullet em-dash color, and the inline `<em>` color. Orange is the punctuation, never the surface.\n- Use the cream info-card (`{components.info-card}`) when a slide needs a piece of warm paper inset on the green field — the system's signature material-contrast move.\n- Keep slides medium-sparse. One primary headline, one supporting paragraph, optionally one list of 3–5 short bullets is the right density.\n- Use 1px hairline rules in low-opacity cream or dark ink for every structural divider. Borders never go thicker.\n- Use the em-dash prefix in DM Mono for every bullet list. Never substitute a dot, check, or numeral.\n- Render the `<em>` inside a numerical value in warm orange, font-style normal — that's how unit suffixes and emphasis digits read in this system.\n\n### Don't\n- Don't uppercase any Bricolage display, h1, h2, or h3 text. Display type is always mixed case. Uppercase is exclusively for DM Mono labels.\n- Don't introduce a second accent color. The system has one accent (warm orange) and it cannot share that role.\n- Don't add drop shadows, blur shadows, or elevation effects on any component. Depth is the atmospheric glow only.\n- Don't round any corner on a structural element. Cards, panels, image frames, bars — all strict rectangles. Only the nav-dot circles are round.\n- Don't fill a slide with three columns of bullets or stack five regions vertically. Mat reads as broken when crowded.\n- Don't use orange as a background fill. Orange is inline-only.\n- Don't use a serif face anywhere. There is no serif in this system; the rounded grotesque carries every editorial moment.\n- Don't add a border around the info-card. The tonal jump between cream and forest green defines the edge — a border breaks the flat material reading.\n- Don't use italic letterforms. The `<em>` tag is repurposed as an orange inline color switch and stays upright.\n- Don't increase border weights above 1px. A 2px border breaks the hairline language of the system.\n\n## Responsive Behavior\n\nMat targets a fluid `100vw × 100vh` viewport and uses `vw`/`vh` units for every typographic size, padding, and gap. The same composition renders correctly across 1280×720, 1920×1080, and 2560×1440 displays without breakpoints. Because all sizes are viewport-relative, content scales linearly — at wider viewports, both text and padding grow proportionally, so the visual density stays constant.\n\n### Presenter Behavior\n- Arrow Right / Arrow Down / Space advance to the next slide.\n- Arrow Left / Arrow Up move back.\n- Home jumps to the first slide; End jumps to the last.\n- Touch swipe (horizontal) advances or reverses on mobile.\n- Mouse wheel advances with a 1000ms debounce to prevent accidental multi-skip.\n- Slides translate horizontally as a single flex strip with a 0s transition (the deck is configured for instant navigation, not animated transitions — the `--dur-slide` token is set to `0s`).\n\n### Print Behavior\nThe template does not declare a `@media print` rule. To produce a PDF, use the browser's screenshot or printing tool; multi-slide PDF export requires manually triggering each slide.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display / h1 / h2 / h3 / stat-value (Bricolage roles, 2.4–12vw) | 思源宋体 Noto Serif SC | 700 | Mincho heavy weight provides the structural mass that Bricolage 700–800 provides in Latin, while preserving the warm material register |\n| Quote text / quote mark (3.4vw / 8vw) | 思源宋体 Noto Serif SC | 600–700 | Same Mincho voice for editorial moments |\n| Lead / body / caption (DM Sans roles, 0.82–1.5vw) | 思源宋体 Noto Serif SC | 400 | Mincho body voice — calm and material; pairs with the wood-glow warmth |\n| Info-card body / heading | 思源宋体 Noto Serif SC | 400 / 600 | Maintains the warm-paper-on-green contrast in Chinese |\n| Label / kicker / chrome / footer (DM Mono roles, 0.7vw) | 思源宋体 Noto Serif SC | 500 with 0.05em letter-spacing | Replaces DM Mono — Chinese has no monospace tradition that reads as editorial chrome |\n\n### Mixed-Content Strategy\n\nUse **Strategy A** — switch the entire face stack to Noto Serif SC across all roles, replacing Bricolage Grotesque (display), DM Sans (body), and DM Mono (labels). Mat's identity does not depend on the specific Latin faces; it depends on the **dark forest green canvas with wood-brown atmospheric glow**, the **single warm orange accent**, the **cream info-card inset**, and the **1px hairline divider language**. Going all-Mincho in Chinese preserves every one of those identity markers cleanly without the baseline wobble that Strategy C would introduce on a viewport-fluid system. Stack:\n\n```css\n/* Bricolage roles (display, h1, h2, h3, stat-value, quote) */\nfont-family: 'Bricolage Grotesque', 'Noto Serif SC', sans-serif;\n/* DM Sans roles (lead, body, caption) */\nfont-family: 'DM Sans', 'Noto Serif SC', sans-serif;\n/* DM Mono roles (label, kicker, chrome, footer) */\nfont-family: 'DM Mono', 'Noto Serif SC', monospace;\n```\n\nThe system's source currently lists `'Noto Sans SC'` as the CJK fallback — for Mat's material-tactile register, **swap to `'Noto Serif SC'`**. The Mincho face's warm letterforms match the wood-glow / forest-green atmosphere better than the geometric Noto Sans SC, which reads as too modern-clinical for this system.\n\n### Loading\n\nReplace the existing Noto Sans SC link with Noto Serif SC:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.88–1.1 on display, 1.5–1.65 on body) read as cramped in Chinese. Bump display to 1.0–1.2 and body to 1.7–1.85.\n- **Remove negative letter-spacing on CJK headlines.** Bricolage display uses -0.025em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the DM Mono label portion was meant to be capitalized. (This matters here — every DM Mono label, kicker, chrome-band, and footer is `text-transform: uppercase`.)\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between Noto Serif SC weight 400, 500, and 700 inside the same sentence — pick the weight that matches the role (headline = 700, body = 400, label = 500) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nMat's whole voice is \"industrial-design portfolio meets boutique product launch\" — dark forest green with a wood-brown glow, cream type floating on the field, warm orange as the single accent. In Chinese, the system's identity does not depend on the Bricolage / DM Sans / DM Mono trio; it depends on the **environmental atmosphere** (the radial wood-glow on every dark slide), the **single-accent discipline** (orange only as kicker, em-dash bullet, inline emphasis), and the **cream info-card** as the signature material-contrast move. All of these translate without modification.\n\nThe bullet em-dash in orange works in Chinese identically — the em-dash character (—) is the same glyph in any script, and the orange Noto Serif SC at weight 500 prepended to a Chinese list item reads as a deliberate mark exactly as it does in Latin. Keep the bullet column in Noto Serif SC at weight 500 (replacing DM Mono); the warmth of the Mincho face matches the system's material-tactile register better than a sans-serif chrome face would.\n\nThe Bricolage rule \"always mixed case, never uppercase\" is interesting in Chinese — since Chinese has no case, the rule is automatically satisfied. But the system's uppercase rule for labels (DM Mono at 0.12em tracking) doesn't translate; in Chinese, labels should be **Noto Serif SC weight 500 with 0.05em positive tracking**, no `text-transform`. The positive tracking carries the chrome quality through weight and spacing alone.\n\nThe `<em>` inline-orange rule (for unit suffixes inside stat numerals) works in Chinese — a Chinese unit character like 「万」or 「亿」 inside `<em>` renders in warm orange and stays upright, exactly mirroring the Latin pattern. Use it the same way: `4.7<em>万</em>` for `4.7 万 (47k)`.\n\n### Known CJK Gap\n\nThe Bricolage Grotesque \"heavy, rounded grotesque with mechanical character\" is one of Mat's most distinctive typographic moves in Latin — it's what gives the system its industrial-product-page voice. Chinese has no exact equivalent: Noto Serif SC at weight 700 provides structural mass but reads as more traditional / literary than Bricolage's rounded modernity. The Chinese rendering loses some of the industrial-design quality, partially compensated by the wood-glow atmosphere and the warm orange accent doing more of the personality work. For decks where the industrial register is critical (e.g., a product launch deck specifically about hardware or material design), consider supplementing Noto Serif SC with **思源黑体 Noto Sans SC at weight 800** for the largest display moments only (cover, hero) — the geometric heaviness of Noto Sans SC at 800 reads closer to Bricolage Grotesque 800 than Noto Serif SC does. Use sparingly to preserve the literary-material register elsewhere.\n\n## Iteration Guide\n\n1. Any new component sits on the dark surface as cream text; no card, panel, or frame wraps it unless it's the info-card move (cream-on-green tonal contrast).\n2. Any new headline uses Bricolage Grotesque in mixed case, weight 700 (h2) or 800 (display/h1). Never reach for weight 500 on display.\n3. Any new structural divider is a 1px hairline rule in low-opacity cream or dark ink. Never use a thicker or colored border.\n4. Any new label, eyebrow, tag, or metadata text uses DM Mono uppercase with 0.12em tracking. Mono in mixed case does not exist here.\n5. Any new bullet list uses the em-dash prefix in DM Mono colored warm orange. The marker face and color are non-negotiable.\n6. Any new accent moment (a highlighted number, an emphasis word, a kicker) uses warm orange. Don't introduce a second accent.\n7. Any new dark slide carries the atmospheric glow on `::before`. If you make a custom slide layout, replicate the pseudo-element or the slide will read flat.\n8. If a slide needs a piece of warm paper to anchor it (a CTA, a summary, an attribution block), use the info-card. Don't invent a parallel card pattern.\n9. Tonal break slides (cream backgrounds) are used once per deck for emphasis, not as a routine alternative to dark. The system reads as dark-default.\n\n## Known Gaps\n\n- The `--c-bg-dark-alt` (#2E3D30) variable is defined for a slightly lighter green surface but is not actively used in any selector. It's reserved for future layered-region work.\n- The atmospheric glow is hardcoded to the bottom-right corner via the `::before` pseudo-element. Repositioning it requires editing the CSS rule directly; there's no token for glow position or intensity.\n- The system loads four Google Fonts (Bricolage Grotesque, DM Sans, DM Mono, Noto Sans SC) — render parity depends on those fonts loading. The CJK fallback stack covers Chinese, but Japanese and Korean glyphs fall back to system serif/sans.\n- The slide-transition duration is set to `0s` (instant). The `--ease-slide` and `--dur-slide` tokens exist for animation but are inert; if a deck needs animated transitions, the duration value must be raised.\n- The vertical bar chart uses inline `style=\"height: XX%\"` declarations on each bar fill. There is no data-binding layer; bar heights must be computed manually.\n- The `.split-center` image region is fixed at 52vh height. Tall portrait imagery may need a layout-level override.\n- Nav dots and slide counter use hardcoded `rgba(255,255,255,...)` values that don't adapt to the cream-slide variant — on cream slides, the white dots read as washed-out.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/mat/preview.md":"# Mat Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/mat/design.md`\n- Preview card: `bold-template-pack/templates/mat/preview.md`\n\n## Selection Metadata\n\n- Slug: `mat`\n- Tagline: Dark sage canvas with bone paper and burnt-orange accent; mid-century modern with wood undertones.\n- Mood: warm-modern, considered, tactile, mid-century\n- Tone: warm, design-led, intentional, considered\n- Formality: medium\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel mid-century, tactile, and intentional: design studio credentials, architecture / interior brands, ceramics / craft / furniture, advisory decks. Also a warm, distinctive choice for tech, research, or business decks that want a considered analog feel instead of digital-cool.\n- Avoid for: Contexts that need fast tech energy or institutional restraint — the muted sage and burnt-orange palette is intentionally warm and slow.\n\n## Visual Snapshot\n\nA warm, material-tactile presentation system inspired by a high-end product landing page. Dark forest green is the dominant environment, warmed by a low atmospheric wood-brown glow from the bottom-right corner of every dark slide. Cream type floats directly on the field; warm orange acts as the single accent. The typeface stack pairs Bricolage Grotesque (a heavy, rounded grotesque) for display with DM Sans for body and DM Mono for labels — the result reads as industrial-design portfolio meets boutique product launch, never tech demo.\n\nMat is a material-tactile presentation system built around a single environmental premise: a deep forest-green surface warmed from the bottom-right corner by a low wood-brown glow. The atmosphere does the heavy lifting — before any content lands, the slide already feels like a workbench in afternoon light. Cream type floats directly on the green field; there are no cards, no panels, no frames. Where the system needs to break the green, it does so with a single cream inset box (the info-card) that reads as a piece of warm paper laid on the dark surface.\n\n## Preview Ingredients\n\n- Palette: bg-dark #232E26; bg-dark-alt #2E3D30; bg-cream #EDE6D0; bg-cream-alt #E4DAC4; ink-cream #F0E8D2; ink-dark #1E2820; accent-orange #C07030; wood-glow #7A4E24\n- Typography: Bricolage Grotesque; DM Sans; DM Mono; {typography.label.fontFamily}\n- Signature move: Dark forest green canvas ({colors.bg-dark}) with a warm wood-brown radial glow ({components.atmospheric-glow}) anchored to the bottom-right corner of every dark slide.\n- Signature move: Cream text ({colors.ink-cream}) floats directly on the green field with no card, panel, or frame around it.\n- Signature move: Bricolage Grotesque display type is always mixed case — never uppercase. Uppercase is reserved for DM Mono labels.\n- Signature move: A single accent color, warm orange ({colors.accent-orange}), used only as small inline emphasis (kicker, bullet marker, inline <em>, quote glyph, one chart bar).\n- Signature move: The cream info-card ({components.info-card}) is the signature material-contrast component — a warm paper rectangle inset on the dark field.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/monochrome/design.md":"---\nversion: alpha\nname: Monochrome (Ivory Ledger)\ndescription: A literary editorial system rendered in black ink on cream paper. Ultra-light geometric sans (Jost at weight 200–300) carries every headline; Lora italic serif handles quote text and insight-card titles; JetBrains Mono provides the structural chrome. There are no chromatic accents — every color in the palette is a graphite or cream tone, and \"accent\" simply means \"darker ink.\" The aesthetic borrows from independent research reports, scholarly monographs, and the quietest end of contemporary editorial design — closer to a printed journal than a tech presentation.\n\ncolors:\n  cream-paper: \"#FAFADF\"\n  cream-paper-2: \"#F2F2D2\"\n  cream-paper-3: \"#F0F0D4\"\n  cream-warm: \"#F5F0E4\"\n  ink-black: \"#1A1A16\"\n  ink-graphite: \"#5E5E54\"\n  ink-graphite-light: \"#8A8A80\"\n\ncolor-aliases:\n  c-bg: cream-paper\n  c-bg-light: cream-paper\n  c-bg-cream: cream-warm\n  c-fg: ink-black\n  c-fg-light: ink-black\n  c-fg-2: ink-graphite\n  c-fg-3: ink-graphite-light\n  c-accent: ink-black\n  c-border: ink-black\n  c-border-light: ink-black\n\ntypography:\n  display:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 8.5vw\n    fontWeight: 200\n    lineHeight: 0.96\n    letterSpacing: -0.02em\n  h1:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 5vw\n    fontWeight: 200\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  h2:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 3.2vw\n    fontWeight: 300\n    lineHeight: 1.2\n  h3:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 2vw\n    fontWeight: 400\n    lineHeight: 1.3\n  lead:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 1.5vw\n    fontWeight: 300\n    lineHeight: 1.65\n  body:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 1.1vw\n    fontWeight: 300\n    lineHeight: 1.7\n  caption:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 0.85vw\n    fontWeight: 300\n    lineHeight: 1.55\n  label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 0.72vw\n    fontWeight: 400\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  quote-serif:\n    fontFamily: \"Lora, Noto Serif SC, Georgia, serif\"\n    fontSize: 3.2vw\n    fontWeight: 400\n    lineHeight: 1.35\n  insight-serif:\n    fontFamily: \"Lora, Noto Serif SC, Georgia, serif\"\n    fontSize: 2.8vw\n    fontWeight: 400\n    lineHeight: 1.15\n  stat-value:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 5.5vw\n    fontWeight: 200\n    lineHeight: 1.0\n    letterSpacing: -0.03em\n  flow-num:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 3.5vw\n    fontWeight: 200\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n\nspacing:\n  pad-x: 8vw\n  pad-y: 6vh\n  gap-lg: 5vh\n  gap-md: 3vh\n  gap-sm: 1.5vh\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  rule:\n    width: 36px\n    height: 1px\n    background: \"{colors.ink-black}\"\n    description: \"A 36-pixel hairline accent rule. The system's signature small punctuation mark — appears under chapter labels, beside kickers, above stat values.\"\n  rule-full:\n    width: \"100%\"\n    height: 1px\n    background: \"{colors.ink-black}\"\n    description: \"Full-width 1px hairline rule for chrome bands, foot bands, and section dividers.\"\n  kicker:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.ink-graphite-light}\"\n    description: \"Muted mono uppercase eyebrow label above a headline.\"\n  tag:\n    border: \"1px solid {colors.ink-black}\"\n    padding: \"0.3em 0.8em\"\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    description: \"Bordered inline tag for version numbers, status labels.\"\n  bullet-marker:\n    content: \"—\"\n    color: \"{colors.ink-graphite-light}\"\n    fontFamily: \"{typography.label.fontFamily}\"\n    description: \"Em-dash in muted graphite via JetBrains Mono. The standard list mark; never a dot, never a check.\"\n  insight-card:\n    background: \"{colors.cream-warm}\"\n    borderRadius: 16px\n    padding: \"3vh 2.5vw\"\n    description: \"Tall rounded-rectangle card in cream tone (one of three near-identical creams). Holds a large Lora serif title and a Jost body block at the bottom.\"\n  stat-cell:\n    borderTop: \"1px solid {colors.ink-black}\"\n    padding: \"{spacing.gap-md} {spacing.gap-md} {spacing.gap-md} 0\"\n    description: \"Rule-topped vertical cell with a 5.5vw weight-200 numeral, a Jost label, and a mono source note.\"\n  timeline-dot:\n    width: 8px\n    height: 8px\n    borderRadius: 50%\n    background: \"{colors.ink-black}\"\n    border: \"2px solid {colors.cream-warm}\"\n    description: \"Solid black dot with a cream border ring that punches through a horizontal connector rule.\"\n  vtimeline-spine:\n    width: 1px\n    background: \"{colors.ink-black}\"\n    description: \"1px vertical rule that anchors a vertical timeline. Carries a 9px solid black dot at the top of each entry.\"\n  pie-donut:\n    width: \"min(26vw, 42vh)\"\n    height: \"min(26vw, 42vh)\"\n    borderRadius: 50%\n    description: \"Donut ring rendered by overlaying a same-color circular ::after pseudo on a conic-gradient or similar. Center cutout is the slide background.\"\n  pyramid-bar:\n    borderLeft: \"2px solid {colors.ink-black}\"\n    background: \"color-mix(in srgb, {colors.ink-black} N%, {colors.cream-paper})\"\n    description: \"Horizontal pyramid level. Width grows down each level (36% → 100%); fill darkens up the pyramid via color-mix at increasing percentages.\"\n  bar-fill:\n    width: \"100%\"\n    background: \"{colors.ink-graphite-light}\"\n    opacity: 0.5\n    description: \"Vertical bar in muted graphite at half opacity. Accented variant uses solid ink-black at full opacity.\"\n  img-placeholder:\n    border: \"1px solid {colors.ink-black}\"\n    background: \"{colors.cream-paper-3}\"\n    color: \"{colors.ink-graphite}\"\n    description: \"Hairline-bordered cream void with a centered mono label. Used until photography is dropped in.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nMonochrome (Ivory Ledger) is a **literary editorial system** built on a single material constraint: black ink on cream paper, and nothing else. The palette has eight tokens, but seven of them are tonal variations of cream or graphite. There is no chromatic accent — the \"accent\" color is just darker ink. The result is a system that reads as a carefully typeset research report or a quiet contemporary monograph, not a presentation.\n\nThe typeface stack is a three-voice editorial pairing. **Jost** at weights 200, 300, and 400 carries every display, headline, body, and label — its geometric sans construction stays calm at ultra-light weights and the contrast between weight 200 (display) and weight 300 (body) is the system's primary typographic rhythm. **Lora** italic serif is reserved for two specific moments: the body text of a pull-quote and the title of an insight card. The serif italic provides the only typographic warmth in the system — wherever it appears, it signals \"this is the human voice.\" **JetBrains Mono** at weight 400 carries every structural marker: chrome labels, sidebar tags, version numbers, footer text, bullet dashes, axis labels, dates. Mono is uppercase and tracked at 0.12em or wider.\n\nThe palette functions in three roles. **Cream paper** (`{colors.cream-paper}` and its three near-identical sibling tones) is the canvas — slides are never white, always a warm off-yellow cream. **Black ink** (`{colors.ink-black}` — actually #1A1A16, a very dark olive-black) is every text moment, every border, every divider, every shape fill that isn't decorative cream. **Graphite** in two tones (`{colors.ink-graphite}` for secondary text, `{colors.ink-graphite-light}` for tertiary) handles muted copy. That's the whole color system.\n\nDepth is achieved entirely through **1px hairline rules** and **generous whitespace**. There are no drop shadows, no gradients, no elevation, no atmospheric effects. When two regions need separation, a 1px black line divides them. When a region needs visual weight, it gets more padding, not a fill change. The insight-card surfaces are nearly indistinguishable from the page itself — the cards are defined by their corner radius and padding, not by a contrast jump.\n\n**Density philosophy: sparse.** Ivory Ledger reads as elegant when generous whitespace dominates and a single typographic moment anchors the slide. The horizontal padding is set to 8vw (the most generous in the library), and content typically uses only the middle 60–70% of the canvas. A slide that fills 80% of its area with type reads as cramped and breaks the editorial reading. The system is asking the agent to leave space — to let a single Jost-200 headline carry an otherwise nearly-empty slide. When density is required (a research timeline, a two-column dense-text spread, a 12-row table), the system holds together only because the type is so light and the rules so thin that even dense content reads as airy.\n\n**Key Characteristics:**\n- Cream paper background (`{colors.cream-paper}`) on every slide — never white, never dark by default. The cream is the surface, not a stylistic choice.\n- Ultra-light Jost (weight 200 for display, weight 300 for body) is the dominant typographic voice.\n- Lora italic serif appears in two specific moments: pull-quote bodies and insight-card titles. Nowhere else.\n- JetBrains Mono uppercase with 0.12em+ tracking handles every structural label, chrome tag, axis, and bullet marker.\n- The system has no chromatic accent. The accent color is `{colors.ink-black}` — slightly darker ink.\n- All structural separation is 1px hairline rules in black, plus the signature 36px short rule (`{components.rule}`) used as a small punctuation mark.\n- The bullet list marker is an em-dash in muted graphite via JetBrains Mono.\n- Generous 8vw horizontal padding — the most spacious in the template library.\n\n## Colors\n\n### Palette\n\n- **Cream Paper** (`{colors.cream-paper}` — #FAFADF): The default surface. Warm off-yellow, never pure white. Every slide background is this color or a near-identical variant.\n- **Cream Paper Alt** (`{colors.cream-paper-2}` — #F2F2D2): A slightly deeper cream for inset surfaces. Used sparingly — the difference from the default cream is barely perceptible.\n- **Cream Paper Deep** (`{colors.cream-paper-3}` — #F0F0D4): The image-placeholder fill. Slightly more saturated cream that distinguishes a void rectangle from the slide surface.\n- **Cream Warm** (`{colors.cream-warm}` — #F5F0E4): The insight / timeline slide background, a warmer tone that signals these slides as related sub-aesthetic moments within the deck.\n- **Ink Black** (`{colors.ink-black}` — #1A1A16): Every text moment, every rule, every divider, every border. A very dark olive-black, not pure black — chosen for warmth against the cream paper.\n- **Ink Graphite** (`{colors.ink-graphite}` — #5E5E54): Secondary text color. Used for muted lead copy, body paragraphs in dense slides, and labels that need to step back from headline weight.\n- **Ink Graphite Light** (`{colors.ink-graphite-light}` — #8A8A80): Tertiary text. Used for kickers, axis labels, source notes, bullet markers, footer chrome — anything that should read as barely-present structural metadata.\n\n### Defaults\n\n- **Default surface background**: `{colors.cream-paper}`. The system is single-surface by default.\n- **Default primary headline color**: `{colors.ink-black}`. Headlines never appear in graphite or any other tone.\n- **Default body text color**: `{colors.ink-black}` for primary copy on light slides; `{colors.ink-graphite}` for muted lead paragraphs.\n- **Default kicker / label color**: `{colors.ink-graphite-light}` — the most muted graphite. Labels should sit back, not lead.\n- **Default border / divider color**: `{colors.ink-black}` — every divider is solid black. There is no muted border tone.\n- **Default rule weight**: 1px. The system never uses thicker rules.\n- **Default \"accent\" color**: `{colors.ink-black}` — the same as the primary text color. Accent in this system means darker emphasis ink, not a chromatic switch.\n- **Default warmer-surface treatment for insight or timeline groups**: `{colors.cream-warm}` — used to tonally identify a group of slides without breaking the monochrome palette.\n\nThe system has no warm/cool pairing, no semantic color (no red for warning, no green for success), no chromatic emphasis. Every emphasis comes from typography (size, weight, italic switch) or from a rule, never from color.\n\n## Colors (continued)\n\nThe three \"insight card surfaces\" (`--c-card-a`, `--c-card-b`, `--c-card-c`) are all near-identical cream tones (#FAFADF, #F5F0E4, #FAFADF). They are intentionally collapsed — the card distinction is meant to come from padding and serif title, not surface color. Treat the three card-surface tokens as effectively one surface.\n\n## Typography\n\n### Font Family\n\nThe system loads five faces: **Jost** (weights 200, 300, 400, 500, 600) carries all sans display and body; **Lora** (italic and roman, weights 400, 500, 600) carries only the pull-quote text and the insight-card title; **JetBrains Mono** (weights 300, 400, 500) carries every structural label; **Noto Serif SC** is the CJK fallback for Lora; **Noto Sans SC** is the CJK fallback for Jost.\n\nThe emotional register is deliberate:\n- Jost reads as **quiet, geometric, almost mathematical** at weight 200. It is the system's editorial voice.\n- Lora italic reads as **literary, personal, hand-set**. It signals \"this is the voice of a human or a quote\" — wherever it appears, the tone shifts from analytical to lyrical.\n- JetBrains Mono reads as **archival, indexical, structural**. It is the system's catalog-card voice — version numbers, dates, axis labels, anything that's metadata rather than message.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 8.5vw | Jost | 200 | Cover or opening hero display — generous and airy |\n| `{typography.h1}` | 5vw | Jost | 200 | Chapter-opening or section-break headline |\n| `{typography.h2}` | 3.2vw | Jost | 300 | Primary content-slide headline |\n| `{typography.stat-value}` | 5.5vw | Jost | 200 | Large numerical figure inside a stat cell |\n| `{typography.quote-serif}` | 3.2vw | Lora italic | 400 | Pull-quote body text |\n| `{typography.insight-serif}` | 2.8vw | Lora | 400 | Insight-card title |\n| `{typography.h3}` | 2vw | Jost | 400 | Sub-headline, region heading, flow-step title |\n| `{typography.lead}` | 1.5vw | Jost | 300 | Lead paragraph or large bullet item |\n| `{typography.body}` | 1.1vw | Jost | 300 | Body paragraph |\n| `{typography.caption}` | 0.85vw | Jost | 300 | Image caption, source note, fine print |\n| `{typography.label}` | 0.72vw | JetBrains Mono | 400 | Kicker, chrome label, axis label, version tag |\n| `{typography.flow-num}` | 3.5vw | Jost | 200 | Large step numeral in a process diagram |\n\n### Defaults\n\n- **Default primary section headline**: `{typography.h2}` (3.2vw at weight 300). Don't reach for `{typography.h1}` for a standard content slide — that size is for chapter breaks.\n- **Default opening or cover display**: `{typography.display}` (8.5vw at weight 200).\n- **Default body paragraph size**: `{typography.body}` (1.1vw at weight 300).\n- **Default lead paragraph size**: `{typography.lead}` (1.5vw at weight 300) when a paragraph is the single supporting block under a headline.\n- **Default label / kicker size**: `{typography.label}` (0.72vw).\n- **Default weight for any display element**: 200. Jost at 200 is the system's display voice.\n- **Default weight for body**: 300.\n\nWhen unsure, the canonical pairing is `{typography.h2}` (weight 300) for the headline + one paragraph at `{typography.lead}` (weight 300) for the supporting block. The narrow weight gap (300 vs. 300, distinguished only by size) is correct — Ivory Ledger does not lean on heavy weight contrast.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Jost display, h1, h2, h3 element is mixed case** — never uppercase. Uppercase is reserved exclusively for JetBrains Mono labels.\n- **Every label, kicker, chrome tag, footer, axis label, and source note uses JetBrains Mono uppercase with at least 0.12em positive tracking** (most are 0.14–0.18em). Mono in sentence case does not exist here.\n- **The pull-quote body is always Lora italic.** A pull-quote in Jost reads as a different design system.\n- **The insight-card title is always Lora roman (not italic).** The serif face is the card's defining visual signal.\n- **The bullet-list marker is always an em-dash in JetBrains Mono colored `{colors.ink-graphite-light}`.** Never a dot, never a check, never a numeral.\n- **Stat values, display headlines, and flow numerals all use Jost weight 200 with negative letter-spacing.** The combination of ultra-light weight and tight tracking is the system's display signature.\n- **Headlines and body text are colored `{colors.ink-black}`; muted lead is `{colors.ink-graphite}`; labels are `{colors.ink-graphite-light}`.** Headlines never carry the graphite tones.\n\n### Typography Principles\n\nThe rhythm of Ivory Ledger is **ultra-light Jost + Lora italic in two specific moments + tracked mono labels**. Switching Jost to a heavier weight (500+) for a headline reads as a different system. Setting body text in Lora reads as a different system. Setting a label in Jost rather than JetBrains Mono reads as a different system. The role of each face is narrow and unmoving.\n\nItalic is used exclusively in Lora (pull-quote body) and not in Jost. Underline is not used anywhere. Bold is not used to emphasize body text — emphasis inside a paragraph is achieved either by Lora italic switch (rare) or by isolation through whitespace.\n\n## Layout\n\n### Canvas System\n\nThe system targets a fluid `100vw × 100vh` viewport with all sizes in `vw`/`vh`. The deck is a horizontal flex strip with slide-to-slide transitions at 0.9s with a smooth easing curve. Animation tokens (`fade-up`, `fade-in`, `reveal-right`, `reveal-left`, `scale-in`) are available with stagger delays via `data-delay` attributes — these run on each slide entrance.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 8vw | Slide horizontal padding (the most generous in the library) |\n| `{spacing.pad-y}` | 6vh | Slide vertical padding |\n| `{spacing.gap-lg}` | 5vh | Between major content sections |\n| `{spacing.gap-md}` | 3vh | Between related elements |\n| `{spacing.gap-sm}` | 1.5vh | Between tightly related elements |\n\nThe slide container reserves an additional 3.5vw on the left for a vertical sidebar element (currently disabled in the source — see Known Gaps), so total left padding is ~11.5vw. Content sits inside this generous gutter system.\n\n### Chrome Frame\n\nMost content slides carry a **chrome header** and **chrome foot**: each is a `flex space-between` row of two JetBrains Mono labels, separated from the slide body by a 1px solid black rule. Cover-style, chapter-break, quote, and closing slide types suppress chrome and foot entirely.\n\n### Disabled Sidebar\n\nThe CSS defines a `.slide-sidebar` element — a thin vertical 1px black line in the left gutter with rotated mono labels reading bottom-to-top. The source explicitly disables this with `display: none !important`, with a comment noting it reads as \"visual noise.\" The styling remains in the CSS as a dormant artifact; do not re-enable without intentional design rationale.\n\n## Depth and Elevation\n\n### No Shadows, Hairline Rules Only\n\nThe system uses **zero box-shadow declarations** on any structural element. Depth is created through three mechanisms:\n\n1. **1px hairline rules in solid `{colors.ink-black}`** — under chrome bands, above foot bands, between compare panels, above stat cells, across timeline tracks, across chart baselines. The rule is the divider, the separator, the structural mark.\n2. **The 36px short rule** (`{components.rule}`) — a small punctuation mark used under chapter labels, beside kickers, or as a delicate accent break.\n3. **Generous whitespace** — the primary depth signal is the 8vw horizontal gutter and the space around each typographic moment.\n\n### No Atmospheric Effects\n\nThere are no gradients, no glows, no textures, no grain overlays. Even the donut chart center cutout is just a same-color circle laid over the conic ring — there is no contrast jump.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Every structural element — image placeholders, stat cells, compare panels, tables, chart areas |\n| 16px | Insight cards only |\n| 50% (circle) | Pie/donut chart shape, timeline-dot small circles, vt-spine dot |\n| 999px (pill) | None — pills are not used |\n\nThe system is dominantly square-cornered. The 16px rounded radius on insight cards is the only structural soft edge and is the visual signal that distinguishes a card from a region.\n\n### Border Weights\n\n- **1px solid `{colors.ink-black}`** — the universal structural rule weight. Used for every divider, every chrome rule, every chart axis, every cell border.\n- **2px solid `{colors.ink-black}`** — used only on the pyramid-bar left edge (`{components.pyramid-bar}`) as a slightly stronger left-anchor for that specific chart type.\n\nThere is no thicker border weight, no dashed border (except a `1px dashed` graphite hint inside dense charts), no colored border.\n\n### Decorative Element Types\n\n**36px short rule** — A small 36px-wide × 1px-tall solid black horizontal accent rule. The system's signature punctuation mark. Used under a chapter number, beside a kicker, or as a delicate section break.\n\n**Kicker / mono eyebrow** — A muted JetBrains Mono uppercase label in `{colors.ink-graphite-light}` placed above a headline. The eyebrow is barely-there by design.\n\n**Bordered tag** — A small inline element with a 1px black border and 0.3em × 0.8em padding, containing a mono uppercase string. Used for version tags or status labels.\n\n**Bullet em-dash** — A `—` glyph in JetBrains Mono colored `{colors.ink-graphite-light}`, prepended to each list item via a CSS grid marker column (`grid-template-columns: 1.2em 1fr`).\n\n**Insight card** — A 16px-rounded rectangle (`{components.insight-card}`) on a slightly warmer cream surface. Carries a Lora roman title (2.8vw weight 400) and a Jost body block (weight 300) pushed to the bottom of the card. The card is identified by its rounded corners and its serif title, not by a color contrast.\n\n**Stat cell** — A vertical region with a 1px solid black top rule (`{components.stat-cell}`), containing a 5.5vw Jost-200 numeral, a Jost label, and a small mono source note. Three stat cells side by side is the canonical arrangement.\n\n**Timeline dot** — An 8px solid black circle with a 2px cream-warm border ring (`{components.timeline-dot}`) that punches through the horizontal connector rule. The ring color matches the warm-cream slide surface so the dot reads as floating on the rule, not crossing it.\n\n**Vertical timeline spine** — A 1px-wide vertical solid black line (`{components.vtimeline-spine}`) with 9px solid black dots at the top of each entry. Used in long chronological lists.\n\n**Pie / donut chart** — A circle (`{components.pie-donut}`) at min(26vw, 42vh) size, with a same-color circular cutout via `::after` to create the donut ring. The chart sits beside a legend column.\n\n**Pyramid bar** — A horizontal bar (`{components.pyramid-bar}`) with a 2px solid black left edge and a tonal cream-to-graphite fill computed via `color-mix(in srgb, ink-black N%, cream-paper)` where N ranges from 4% to 55% across the five levels. Widths step from 36% (top, darkest) to 100% (bottom, lightest).\n\n**Vertical bar chart** — A muted graphite (`{colors.ink-graphite-light}`) bar at 50% opacity for default bars; a solid black bar at full opacity for the highlighted bar. The chart has a 1px black left axis and a 1px black baseline.\n\n**Image placeholder** — A 1px-bordered cream-paper-3 rectangle with centered mono label. Used until photography arrives.\n\n**Process flow with no arrows** — Flow diagrams in this system are explicit about not using arrows between steps. Whitespace between steps implies sequence; the system declares this with a comment in the CSS.\n\n## Do's and Don'ts\n\n### Do\n- Use the cream paper background (`{colors.cream-paper}`) on every slide. The single-surface canvas is the system's foundation.\n- Set every headline in `{colors.ink-black}` and let the weight (Jost 200) and size do the work. Headlines never need a chromatic shift.\n- Use Jost at weight 200 for any display moment. The ultra-light weight is the system's defining typographic voice.\n- Reach for Lora italic only when the text is a pull-quote body; reach for Lora roman only when it's an insight-card title. The serif's two roles are non-overlapping.\n- Use JetBrains Mono uppercase with at least 0.12em tracking for every structural label, axis tag, footer, and bullet marker. Mono is the catalog-card voice.\n- Render every structural divider as a 1px solid black rule. There is no thicker, no muted, no dashed border in the system.\n- Apply the em-dash marker in muted graphite via JetBrains Mono for every bullet list.\n- Leave generous whitespace. Content should sit comfortably in the middle 60–70% of the canvas; cramming content to the edges breaks the editorial reading.\n\n### Don't\n- Don't introduce a chromatic color. Red, blue, green, yellow do not exist in this system. The accent is darker ink.\n- Don't use heavy weights (Jost 500, 600, 700) for headlines. The system reads as broken if display type weighs more than 300.\n- Don't put a pull-quote in Jost. The Lora italic body is the quote's identity — switching to sans collapses the typographic distinction.\n- Don't use box-shadow on any element. The system has no elevation.\n- Don't use a card surface with chromatic contrast. Insight cards are identified by corner radius and serif title; a colored fill breaks the monochrome reading.\n- Don't crowd a slide. The horizontal padding is 8vw for a reason — content needs to breathe.\n- Don't use bold to emphasize body text. Inline emphasis is rare; when used, switch to Lora italic, not weight increase.\n- Don't substitute the em-dash bullet marker with a dot, check, arrow, or numeral. The em-dash is the system's only list mark.\n- Don't enable the disabled sidebar (`.slide-sidebar`). It's hidden intentionally — re-enabling it adds visual noise that the system was tuned to remove.\n- Don't round any element other than insight cards (16px) or true circles (dots, donut). Square corners are the structural default.\n\n## Responsive Behavior\n\nThe system is viewport-fluid by design. All sizes use `vw`/`vh` so the same composition renders correctly across any 16:9 viewport without breakpoints. At smaller viewports, both typography and padding scale linearly so the visual density and the negative-space ratio stay constant.\n\n### Presenter Behavior\n- Standard keyboard navigation: arrows, space, Home, End.\n- Touch swipe for mobile.\n- Mouse wheel with debounce to prevent multi-skip.\n- Slide-to-slide transitions animate over 0.9s with a smooth easing curve.\n- Each slide can declare entrance animations on individual elements via `data-anim` (fade-up, fade-in, reveal-right, reveal-left, scale-in) with stagger delays via `data-delay=\"N\"` where N maps to a discrete delay step (0s, 0.08s, 0.18s, 0.3s, 0.44s, 0.6s, 0.78s, 0.96s).\n- Elements with `[data-anim]` start invisible (opacity:0) and animate on `.is-active` — re-visiting a slide replays the entrance.\n\n### Print Behavior\nThe template does not declare a `@media print` rule. Browser-driven PDF export will capture only the active slide; multi-slide export requires manual navigation per slide.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / headline (Jost 200) | Jost | Noto Sans SC (思源黑体) | 700 (heaviest available; CJK at 200 reads as broken — see Aesthetic Notes) |\n| Body / lead (Jost 300) | Jost | Noto Sans SC (思源黑体) | 400 |\n| Pull quote / insight title (Lora italic / roman) | Lora | Noto Serif SC (思源宋体) | 400 |\n| Label / mono chrome (JetBrains Mono) | JetBrains Mono | Noto Sans SC | 400 (do not force monospace on CJK; see Aesthetic Notes) |\n\n### Mixed-Content Strategy\n\nStrategy A — same `font-family` stack, Latin-first fallback. Each typographic token already lists `\"Jost, Noto Sans SC, system-ui, sans-serif\"` (or the Lora equivalent). Latin glyphs render in Jost / Lora; CJK glyphs automatically fall through to Noto Sans SC / Noto Serif SC. No per-language class needed. Mixed sentences like `使用 Claude 思考` render in one logical run with the correct face per script.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Jost:wght@200;300;400;500;600&family=Lora:ital,wght@0,400;0,500;0,600;1,400;1,500&family=JetBrains+Mono:wght@300;400;500&family=Noto+Sans+SC:wght@300;400;500;700;900&family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nIvory Ledger's defining trait is Jost at weight 200 — paper-thin geometric strokes against cream. **Noto Sans SC does not have a usable weight 200.** Its lightest weight (300) still reads heavier than Jost 200 because Chinese glyphs carry far more strokes per character. Set Chinese display in **Noto Sans SC 700** to match the *visual presence* of Jost 200 on the cream paper (counterintuitive, but Chinese readers perceive lighter weights as anemic at large sizes). For body, Noto Sans SC 400 against Jost 300 is the correct match — the cream-paper-and-graphite ink moment carries across scripts.\n\nLora italic is the system's \"human voice\" in pull-quote bodies. **Noto Serif SC has no italic.** Drop italic entirely for Chinese pull quotes; the serif face itself carries the editorial warmth. Don't try to fake italic with `font-style: italic` — Noto Serif SC will render an auto-slanted glyph that looks broken.\n\nJetBrains Mono's uppercase tracked labels (0.12–0.18em) do not transfer to CJK. **Set Chinese labels in Noto Sans SC 400, mixed case, with letter-spacing reset to 0.** The \"catalog-card\" voice in Chinese is achieved through the small size and the cream-paper-light color, not through monospace + tracking. If a label is pure Latin (a version number, a date), keep it in JetBrains Mono uppercase as originally designed.\n\nThe em-dash bullet marker (`—`) works perfectly in Chinese — the Chinese em-dash is also `—` and renders the same width. Keep the marker as-is.\n\n### Known CJK Gap\n\nThe 8vw horizontal padding (the most generous in the library) was tuned for Latin's narrower glyph widths. Chinese characters are roughly square and consume more horizontal space at the same point size. Long Chinese headlines that would fit on one line in English may wrap to two. Reduce display headline sizes by ~15% (Jost 8.5vw → Noto Sans SC 7.2vw) when the headline is pure Chinese, or accept the wrap as part of the editorial rhythm.\n\n## Iteration Guide\n\n1. Any new slide background is `{colors.cream-paper}` (or `{colors.cream-warm}` for the insight/timeline sub-aesthetic). Never introduce a dark or chromatic background.\n2. Any new headline uses Jost in mixed case at weight 200 (display, h1) or 300 (h2). Never reach for heavier weights.\n3. Any new label, eyebrow, tag, or metadata text uses JetBrains Mono uppercase with at least 0.12em tracking colored `{colors.ink-graphite-light}`.\n4. Any new structural divider is a 1px solid black rule. Use `{components.rule}` (36px short) for decorative accents and `{components.rule-full}` for region separation.\n5. Any new pull-quote uses Lora italic at `{typography.quote-serif}` size. Quotes never appear in sans.\n6. Any new card moment uses 16px rounded corners and a Lora roman title. Don't introduce square cards or sans-titled cards.\n7. Any new bullet list uses the em-dash in muted graphite via JetBrains Mono.\n8. Generous whitespace is a feature, not a missing layout. Don't fill space because it's available.\n9. If you need to emphasize a moment, increase size or wrap a span in Lora italic. Do not introduce color.\n10. Color tokens that look chromatic (e.g. `--c-accent`) are aliased to `{colors.ink-black}` — they exist for token compatibility but resolve to black. Don't add a chromatic value to them.\n\n## Known Gaps\n\n- The CSS defines a `.slide-sidebar` element (rotated mono labels in the left gutter) that is intentionally hidden via `display: none !important`. The dormant styles remain in the source; re-enabling without design review will add visual noise the system was tuned to remove.\n- The three insight-card surface tokens (`--c-card-a`, `--c-card-b`, `--c-card-c`) resolve to two near-identical values (#FAFADF, #F5F0E4). The card \"color variation\" is effectively cosmetic — cards are distinguished by serif title and padding, not surface tone.\n- The pie/donut chart uses a `::after` pseudo cutout that requires the chart background to match the slide surface. Slides with a different background (e.g., the cream-warm variant) need the `--c-bg-light` token adjusted for the cutout to disappear correctly.\n- The pyramid chart uses `color-mix(in srgb, ...)` which requires a modern browser. Older browsers will render the bars as solid `{colors.cream-paper}`.\n- The animation system requires the `.is-active` class to be applied to a slide for entrance animations to play. Without proper navigation engine wiring, `[data-anim]` elements will remain at opacity 0.\n- Lora italic at large sizes (3.2vw quote body) has noticeably wider stroke contrast than the surrounding Jost — this is intentional but creates a perceived weight jump. Don't compensate by making the surrounding text heavier.\n- The bar-chart `bar-fill` uses inline `style=\"height: XX%\"` declarations — there's no data-binding layer. Heights are computed manually.\n- The system was originally named \"Ivory Ledger\" in the source comments. The template is exposed in the library as \"Monochrome\"; both names refer to the same design system.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/monochrome/preview.md":"# Monochrome Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/monochrome/design.md`\n- Preview card: `bold-template-pack/templates/monochrome/preview.md`\n\n## Selection Metadata\n\n- Slug: `monochrome`\n- Tagline: Ivory ledger paper with all-black type; Lora serif headlines, Jost body, no color at all.\n- Mood: restrained, literary, archival, ledger\n- Tone: literary, considered, neutral, honest\n- Formality: high\n- Density: high\n- Scheme: light\n- Best for: Anything that should feel like a hand-typeset ledger: user research synthesis, white papers, longform reports, academic and policy briefs, advisory deliverables, bilingual EN/CN reports. Equally good for tech, design, or brand decks that want their words to be the only thing on the page.\n- Avoid for: Decks that need visual personality or color-led storytelling — the all-ink palette is intentionally austere.\n\n## Visual Snapshot\n\nA literary editorial system rendered in black ink on cream paper. Ultra-light geometric sans (Jost at weight 200–300) carries every headline; Lora italic serif handles quote text and insight-card titles; JetBrains Mono provides the structural chrome. There are no chromatic accents — every color in the palette is a graphite or cream tone, and \"accent\" simply means \"darker ink.\" The aesthetic borrows from independent research reports, scholarly monographs, and the quietest end of contemporary editorial design — closer to a printed journal than a tech presentation.\n\nMonochrome (Ivory Ledger) is a literary editorial system built on a single material constraint: black ink on cream paper, and nothing else. The palette has eight tokens, but seven of them are tonal variations of cream or graphite. There is no chromatic accent — the \"accent\" color is just darker ink. The result is a system that reads as a carefully typeset research report or a quiet contemporary monograph, not a presentation.\n\n## Preview Ingredients\n\n- Palette: cream-paper #FAFADF; cream-paper-2 #F2F2D2; cream-paper-3 #F0F0D4; cream-warm #F5F0E4; ink-black #1A1A16; ink-graphite #5E5E54; ink-graphite-light #8A8A80\n- Typography: Jost; JetBrains Mono; Lora; {typography.label.fontFamily}\n- Signature move: Cream paper background ({colors.cream-paper}) on every slide — never white, never dark by default. The cream is the surface, not a stylistic choice.\n- Signature move: Ultra-light Jost (weight 200 for display, weight 300 for body) is the dominant typographic voice.\n- Signature move: Lora italic serif appears in two specific moments: pull-quote bodies and insight-card titles. Nowhere else.\n- Signature move: JetBrains Mono uppercase with 0.12em+ tracking handles every structural label, chrome tag, axis, and bullet marker.\n- Signature move: The system has no chromatic accent. The accent color is {colors.ink-black} — slightly darker ink.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/neo-grid-bold/design.md":"---\nversion: alpha\nname: Neo-Grid Bold\ndescription: A heavy editorial poster system built on a strict 12-column × 8-row block grid with neon-yellow accents on putty-ecru. Space Grotesk at weight 700 in strict uppercase carries every display moment; JetBrains Mono carries every label and metadata tag. Each slide reads as a magazine spread divided into colored panels — paper-ecru, ink-black, and electric lemon-yellow trading roles across cells. The aesthetic borrows from contemporary editorial print, brutalist annual reports, and the populist-poster end of design week showcases.\n\ncolors:\n  paper: \"#F5F4EF\"\n  bg: \"#ECECE8\"\n  ink: \"#0A0A0A\"\n  accent-lemon: \"#E6FF3D\"\n  muted: \"#8A8A85\"\n  stage-bg: \"#1A1A1A\"\n\ncolor-aliases:\n  line: ink\n  primary-bg: bg\n  card-bg: paper\n\ntypography:\n  display:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 132px\n    fontWeight: 700\n    lineHeight: 0.92\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  title:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 88px\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n    textTransform: uppercase\n  subtitle:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 56px\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  section-num:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 320px\n    fontWeight: 700\n    lineHeight: 0.85\n    letterSpacing: -0.05em\n  stat-num:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 156px\n    fontWeight: 700\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  stat-num-lg:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 240px\n    fontWeight: 700\n    lineHeight: 0.85\n    letterSpacing: -0.04em\n  stat-num-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 96px\n    fontWeight: 700\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  card-headline:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 44px\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  card-h3:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 30px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  body:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.35\n  body-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 22px\n    fontWeight: 400\n    lineHeight: 1.45\n  label:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  label-sm:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 16px\n    fontWeight: 400\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  label-xs:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 14px\n    fontWeight: 400\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  pagenum:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    letterSpacing: 0.04em\n\nspacing:\n  frame-inset: 40px\n  grid-gap: 12px\n  grid-gap-lg: 18px\n  card-pad-sm: \"24px 28px\"\n  card-pad-md: \"28px 32px\"\n  card-pad-lg: \"36px 32px\"\n  card-pad-xl: \"40px 44px\"\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  frame:\n    position: \"absolute; inset: 40px\"\n    display: grid\n    gridTemplateColumns: \"repeat(12, 1fr)\"\n    gridTemplateRows: \"repeat(8, 1fr)\"\n    gap: \"{spacing.grid-gap}\"\n    description: \"The universal slide frame — a 12-column × 8-row CSS grid inset 40px from each slide edge with 12px gaps between cells. Every slide composes its layout by spanning cells inside this frame.\"\n  card:\n    background: \"{colors.paper}\"\n    position: relative\n    overflow: hidden\n    description: \"Generic colored panel. Paper is the default fill; .ink switches to black with paper text; .lemon switches to yellow with ink text; .photo switches to deep-black with white text for image regions.\"\n  card-ink:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    description: \"Inverted card — black background, paper text. Used as a contrast block in any composition.\"\n  card-lemon:\n    background: \"{colors.accent-lemon}\"\n    color: \"{colors.ink}\"\n    description: \"Yellow accent card — full neon-yellow fill with ink text. The system's loudest signal.\"\n  pagenum:\n    position: \"absolute; left: 0; bottom: 0\"\n    background: \"{colors.paper}\"\n    color: \"{colors.ink}\"\n    padding: \"14px 22px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.04em\n    description: \"Bottom-left page-number tag in the format '01 / 12'. Three variants: default (paper bg), .invert (ink bg), .lemon (yellow bg).\"\n  corner-mark:\n    position: \"absolute; top: 22px; right: 22px\"\n    width: 36px\n    height: 36px\n    display: \"grid 2x2\"\n    gap: 4px\n    description: \"Top-right 2x2 block mark — three solid currentColor squares plus one transparent. A small structural identity stamp.\"\n  blockmark:\n    width: 56px\n    height: 56px\n    display: \"grid 2x2\"\n    gap: 4px\n    description: \"Larger 2x2 block stamp with diagonal squares filled — used as a brand mark on covers and dividers. May be sized 56px, 96px, or larger.\"\n  qr-tile:\n    width: 90px\n    height: 90px\n    display: \"grid 5x5\"\n    description: \"Decorative QR-pattern tile composed of a 5x5 grid of black squares with some accent-lemon squares interspersed. Decorative, not a real scannable code.\"\n  table-cell:\n    padding: \"18px 22px\"\n    borderBottom: \"1.5px solid {colors.ink}\"\n    borderRight: \"1.5px solid {colors.ink}\"\n    fontSize: 24px\n    lineHeight: 1.35\n    description: \"Comparison-matrix cell. Solid hairline ink dividers on bottom and right; last column has no right border.\"\n  table-head-row:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 14px\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    description: \"Inverted table header — black row with paper mono uppercase text.\"\n  pill-yes:\n    background: \"{colors.accent-lemon}\"\n    color: \"{colors.ink}\"\n    padding: \"6px 14px\"\n    description: \"Affirmative pill in a comparison cell — yellow fill, ink text, mono uppercase.\"\n  pill-part:\n    background: \"{colors.paper}\"\n    color: \"{colors.ink}\"\n    border: \"1.5px solid {colors.ink}\"\n    description: \"Partial-state pill — paper fill, ink border, ink text.\"\n  pill-no:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    description: \"Negative pill — black fill, paper text.\"\n  arrow:\n    width: 64px\n    height: 64px\n    description: \"Inline SVG arrow glyph (right-pointing) at 64px square. Used as a flow indicator between process steps and as an out-of-cell pointer on stat cards.\"\n  highlight-mark:\n    background: \"{colors.accent-lemon}\"\n    color: \"{colors.ink}\"\n    padding: \"0 6px\"\n    description: \"Inline <mark> element — yellow background swatch wrapping one or more words inside a headline for emphasis.\"\n  bar-fill-ink:\n    background: \"{colors.ink}\"\n    description: \"Solid black vertical bar for chart series A.\"\n  bar-fill-lemon:\n    background: \"{colors.accent-lemon}\"\n    border: \"1.5px solid {colors.ink}\"\n    description: \"Yellow vertical bar with ink border for chart series B.\"\n  copyright:\n    position: \"absolute; left: 22px; bottom: 22px\"\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 16px\n    lineHeight: 1.4\n    color: \"{colors.ink}\"\n    opacity: 0.85\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nNeo-Grid Bold is a **heavy editorial poster system** built on a single structural premise: every slide is a 12-column × 8-row CSS grid inset 40px from the slide edges, with 12px gaps between cells. Composition happens by assigning colored panels to grid spans — `grid-column: 4 / span 5` and `grid-row: 1 / span 5` is how layout is described. The grid is rigid; the visual variety comes from how panels of `{colors.paper}`, `{colors.ink}`, and `{colors.accent-lemon}` are arranged across cells.\n\nThe typeface stack is intentionally narrow. **Space Grotesk** at weight 700 carries every display moment in strict uppercase with negative letter-spacing. Body copy runs at weight 400 in mixed case. **JetBrains Mono** at weight 400 carries every label, page number, axis tag, and metadata string — always uppercase with 0.08–0.12em positive tracking. There is no third face. The contrast between heavy Space Grotesk uppercase and JetBrains Mono uppercase is the system's primary typographic rhythm.\n\nThe palette has three working colors plus a putty surface. **Paper** (`{colors.paper}` — a warm ecru off-white) is the default panel fill. **Ink** (`{colors.ink}` — a near-black) is the structural color: text on paper, fills for inverted panels, all dividers, all rules. **Accent Lemon** (`{colors.accent-lemon}` — an electric neon-yellow #E6FF3D) is the loud signal — used as panel fill, as a highlight `<mark>` swatch inside headlines, and as the second series in charts. **Putty BG** (`{colors.bg}`) is the slightly cooler ecru that sits behind the 40px slide inset, framing the composition like a passe-partout. **Muted graphite** is present in the token list but rarely used in practice.\n\nDepth is created entirely through **panel adjacency and color contrast**, not shadows. Cards do not carry box-shadows; cards do not have rounded corners; cards do not have borders (except for table cells and pill outlines, which use 1.5px solid ink). The visual weight of a slide is determined by how many cells are filled with `{colors.ink}` vs. `{colors.accent-lemon}` vs. `{colors.paper}`. A composition with three yellow panels reads as much more aggressive than one with a single yellow panel.\n\n**Density philosophy: dense.** Neo-Grid Bold reads as authoritative when the 12×8 grid is fully populated with panels of varying span and color. A slide with only one or two panels and large empty grid areas reads as broken; the system was designed as an editorial poster, and posters are dense. The expected pattern is 4–8 panels per slide, each occupying a non-trivial cell span, with the grid fully used corner-to-corner. The exception is a section-divider slide where a single 320px section number occupies an entire pane of the grid — but even there, the rest of the canvas is filled with a second panel of contrasting color.\n\n**Key Characteristics:**\n- Universal 12-column × 8-row CSS grid (`{components.frame}`) inset 40px from each slide edge, with 12px gaps between cells.\n- Three-color panel system: paper ecru (`{colors.paper}`) as default, ink black (`{colors.ink}`) for inverted blocks, accent lemon (`{colors.accent-lemon}`) for signal blocks.\n- Space Grotesk weight 700 uppercase with negative letter-spacing for every display element.\n- JetBrains Mono uppercase with 0.08–0.12em tracking for every label, page number, axis tag.\n- A signature corner-mark and blockmark — small 2×2 block stamps that act as decorative identity tags.\n- Inline `<mark>` element that wraps words inside a headline in a neon-yellow swatch — the system's headline emphasis mechanism.\n- A persistent page-number tag (`{components.pagenum}`) anchored bottom-left of every slide.\n- No rounded corners, no drop shadows, no gradients (apart from photo-region stylized noise textures).\n- Stat numerals scale up to 240px and even 320px — type is allowed to dominate entire panels.\n\n## Colors\n\n### Palette\n\n- **Paper** (`{colors.paper}` — #F5F4EF): Warm ecru off-white. The default panel fill, the default text color when inverted, and the canvas of any \"neutral\" card. Slightly creamier than pure white — chosen so the neon-yellow accent doesn't vibrate against it.\n- **BG (Putty)** (`{colors.bg}` — #ECECE8): A cooler ecru that sits behind the 40px slide inset, framing the grid composition like a passe-partout. The 40px border of putty around every slide is the system's universal frame.\n- **Ink** (`{colors.ink}` — #0A0A0A): The structural near-black. Used for all text on paper, all inverted panel fills, all dividers, all table cell borders, all pill outlines. Not pure #000 — slightly softer.\n- **Accent Lemon** (`{colors.accent-lemon}` — #E6FF3D): Electric neon-yellow. The signal color. Used as a panel fill, as the inline `<mark>` highlight swatch inside headlines, as the second chart series, as the affirmative pill fill, and as page-number variant background. Never as a text color (the yellow is too light to read as type against any surface).\n- **Muted** (`{colors.muted}` — #8A8A85): A reserved graphite tone present in the token list but used only at low opacity on photo-region tags. Available for de-emphasized text but rarely deployed.\n- **Stage BG** (`{colors.stage-bg}` — #1A1A1A): The viewport background outside the 1920×1080 slide canvas. This is the deck-stage container color, not part of slide design.\n\n### Defaults\n\n- **Default slide canvas background**: `{colors.bg}` — visible as the 40px putty frame around every grid composition.\n- **Default panel fill**: `{colors.paper}`. When in doubt, a panel is paper.\n- **Default primary headline color**: `{colors.ink}` on paper or lemon panels; `{colors.paper}` on ink panels.\n- **Default body text color**: `{colors.ink}` on paper/lemon; `{colors.paper}` on ink.\n- **Default label / metadata color**: `{colors.ink}` on paper, at opacity 0.7–0.85 to mute; `{colors.paper}` on ink, at opacity 0.7–0.85.\n- **Default chart series color**: `{colors.ink}` for series A; `{colors.accent-lemon}` for series B (with 1.5px ink border).\n- **Default emphasis mechanism inside a headline**: wrap in `<mark>` for a neon-yellow swatch on ink text. This is the system's primary headline-level emphasis.\n- **Default affirmative state**: `{colors.accent-lemon}` fill. Default negative state: `{colors.ink}` fill. Default neutral state: `{colors.paper}` fill with `{colors.ink}` border.\n\nNeon yellow is the system's only chromatic accent — never substitute red, blue, or any third color. Yellow's role is to draw the eye, not to communicate meaning (it is not \"warning\" or \"highlight\" in the semantic sense; it is simply the signal).\n\n## Typography\n\n### Font Family\n\nThe system uses two web fonts: **Space Grotesk** (weights 400, 500, 700) for all display and body, and **JetBrains Mono** (weights 400, 500) for all labels and metadata. There is no third face — no serif, no italic, no display script. The system's character lives in the weight contrast between Space Grotesk 700 uppercase and Space Grotesk 400 mixed case, plus the structural mono labels in JetBrains Mono.\n\nA specific inline mixing rule: **the `<em>` tag inside a Space Grotesk headline switches color to `{colors.accent-lemon}` and stays upright** (font-style is normalized to non-italic). Em is repurposed as a yellow inline color switch, like the `<mark>` swatch but without the background fill.\n\nA second inline mixing rule: **the `<mark>` element wraps words inside a Space Grotesk headline in a neon-yellow swatch with 0 6px padding**, creating the highlighter-pen emphasis that is a recurring signature of the system.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.section-num}` | 320px | Space Grotesk | 700 | Hero section ordinal in a section-divider panel |\n| `{typography.stat-num-lg}` | 240px | Space Grotesk | 700 | Featured large numerical stat |\n| `{typography.stat-num}` | 156px | Space Grotesk | 700 | Standard stat numeral |\n| `{typography.display}` | 132px | Space Grotesk | 700 | Cover, section, or hero display headline |\n| `{typography.stat-num-sm}` | 96px | Space Grotesk | 700 | Compact stat numeral inside a small card |\n| `{typography.title}` | 88px | Space Grotesk | 700 | Primary content-slide headline |\n| `{typography.subtitle}` | 56px | Space Grotesk | 700 | Secondary headline, region heading |\n| `{typography.card-headline}` | 44px | Space Grotesk | 700 | Card title at panel-fill scale |\n| `{typography.card-h3}` | 30px | Space Grotesk | 700 | Sub-headline inside a smaller card |\n| `{typography.body}` | 28px | Space Grotesk | 400 | Body paragraph inside a feature card |\n| `{typography.label}` | 24px | JetBrains Mono | 400 | Standard mono label or kicker |\n| `{typography.body-sm}` | 22px | Space Grotesk | 400 | Compact body inside dense cards |\n| `{typography.pagenum}` | 24px | JetBrains Mono | 400 | Page-number tag (e.g. \"01 / 12\") |\n| `{typography.label-sm}` | 16px | JetBrains Mono | 400 | Secondary metadata label, copyright text |\n| `{typography.label-xs}` | 14px | JetBrains Mono | 400 | Axis labels, table header text, fine print |\n\n### Defaults\n\n- **Default primary section headline**: `{typography.title}` (88px) — the workhorse content-slide headline.\n- **Default cover or section-opening display**: `{typography.display}` (132px) for a cover; `{typography.section-num}` (320px) for a section-divider ordinal.\n- **Default body paragraph size**: `{typography.body}` (28px). For dense multi-card slides, drop to `{typography.body-sm}` (22px).\n- **Default label / metadata size**: `{typography.label}` (24px) for standalone mono tags; `{typography.label-sm}` (16px) for inline metadata.\n- **Default stat numeral**: `{typography.stat-num}` (156px). Reach for `{typography.stat-num-lg}` (240px) only when the stat occupies an entire featured panel.\n- **Default weight for any display element**: 700. Display in any other weight does not exist in this system.\n- **Default weight for body**: 400.\n\nWhen unsure, reach for `{typography.title}` for the slide's primary text moment and pair it with `{typography.body}` for supporting copy.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Space Grotesk display, title, subtitle, card-headline, and stat numeral is uppercase** with negative letter-spacing (-0.005 to -0.05em depending on scale). Mixed-case display does not exist in this system.\n- **Body copy is mixed case at weight 400.** Never uppercase body.\n- **Every JetBrains Mono element is uppercase** with at least 0.08em positive tracking.\n- **The `<mark>` element inside a headline always uses `{colors.accent-lemon}` background with `{colors.ink}` text and 0 6px padding.** The yellow highlighter swatch is the system's headline emphasis signal.\n- **The `<em>` element inside a headline switches to `{colors.accent-lemon}` color and stays upright (font-style: normal).** Italic letterforms are not used.\n- **Negative letter-spacing scales with size**: smaller headlines use -0.005em to -0.015em; larger displays use -0.02 to -0.05em. The tighter the tracking, the more compressed and brutalist the headline reads — at 320px size, -0.05em is correct.\n- **Page numbers are always JetBrains Mono at 24px with 0.04em tracking** in the format `01 / 12` with a single padded zero and slash separator.\n\n### Typography Principles\n\nThe rhythm is **heavy uppercase display + light mixed-case body + small uppercase mono label**. Switching any of those three modes breaks the editorial register. Body in uppercase reads as a shouting paragraph. Display in mixed case reads as a different design system. Mono in mixed case reads as code, not editorial metadata.\n\nItalic letterforms are not used. The `<em>` and `<mark>` tags are repurposed as color/highlight switches, not italic emphasis. Underline is not used. Bold inside body text is not used — emphasis is achieved by isolating the headline in its own cell.\n\n## Layout\n\n### Canvas System\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component that handles scaling to fit the viewport. All sizes are in `px` (not vw/vh) — typography sizes, padding values, grid gaps, and inset values are all pixel-fixed. The composition is designed at 1920×1080 and the stage scales the entire deck proportionally.\n\nThe viewport background outside the deck stage is `{colors.stage-bg}` (#1A1A1A) — a dark gray frame that visually anchors the bright slide against the browser chrome.\n\n### The Universal Frame\n\nEvery slide carries a `.frame` div positioned `absolute; inset: 40px` with `display: grid; grid-template-columns: repeat(12, 1fr); grid-template-rows: repeat(8, 1fr); gap: 12px`. This is the structural constant of the system: a 12-column × 8-row grid with 12px gaps, inset 40px from the slide edges. Some slide variants increase the grid gap to 16–18px for breathing room, but the column/row counts and the 40px inset never change.\n\nComposition happens entirely by spanning cells inside this grid. A panel occupying `grid-column: 1 / span 4; grid-row: 1 / span 3` is a 4-cell-wide × 3-row-tall card in the upper-left. The grid is the only layout language — flexbox is used only for internal alignment inside a single cell.\n\n### Padding Inside Cells\n\nInternal padding inside a cell varies with cell size and purpose:\n- Compact cards (small stat tiles): 24px × 28px\n- Standard cards (feature panels): 28px × 32px\n- Large cards (chapter panels): 36px × 32px\n- Hero cards (section dividers): 40px × 44px\n\nThese are not rigid tokens — they're a practical scale. Choose the padding that gives the card's internal type room to breathe without losing the panel's identity.\n\n### Persistent Chrome\n\nEvery slide carries a `{components.pagenum}` tag bottom-left in the format `01 / 12`. Three variants:\n- Default: paper background, ink text.\n- `.invert`: ink background, paper text.\n- `.lemon`: yellow background, ink text.\n\nSome slides also carry a `{components.corner-mark}` (small 2×2 block) top-right, a `{components.copyright}` bottom-left, or a `{components.blockmark}` (larger 2×2 stamp) as a brand identifier.\n\n## Depth and Elevation\n\n### No Shadows, Color-Block Adjacency Only\n\nThe system uses **zero box-shadow declarations** on any structural panel. Depth is entirely a function of color adjacency: a paper panel next to an ink panel reads as elevated (paper toward viewer); a yellow panel next to an ink panel reads as the loudest signal in the composition. The 12px grid gap between panels reveals the putty `{colors.bg}` between cells, which acts as a unifying frame color.\n\n### No Gradients (Except Photo Regions)\n\nThe only gradients in the system are inside photo-region placeholder textures, where a `radial-gradient` plus a `repeating-linear-gradient` creates a stylized B&W-grain texture as a stand-in for photography. These textures live inside cells classed `.photo` or `.ph`, never on a structural panel.\n\n### Borders on Tables and Pills\n\n- Table cells (`{components.table-cell}`) use 1.5px solid ink dividers on bottom and right edges to create a wireframe grid.\n- Comparison pills (`{components.pill-part}`) use a 1.5px solid ink border as the partial-state outline.\n- Chart axes use 2px solid ink as the bottom-left wireframe.\n- The yellow bar in a bar chart (`{components.bar-fill-lemon}`) carries a 1.5px solid ink border to prevent the bright fill from vibrating against the paper background.\n\nNo other elements carry borders. Cards are borderless and rely on fill contrast.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Every element — cards, pills, tags, page numbers, table cells, chart bars, blockmarks |\n\nThe system has **zero border-radius** on any element. Every shape is a strict rectangle or square. The block-stamp and corner-mark glyphs are composed of right-angle squares.\n\n### Border Weights\n\n- **1.5px solid `{colors.ink}`** — used on table cell dividers, pill outlines, and the yellow bar's border. The most common border weight.\n- **2px solid `{colors.ink}`** — used on chart axes (left and bottom of the plot area) for slightly stronger wireframe.\n\nNo other border weights exist. There are no muted-color borders, no dashed borders (except a very specific `1px dashed rgba(0,0,0,.18)` chart grid line used internally).\n\n### Decorative Element Types\n\n**Block stamp (`{components.blockmark}`)** — A 2×2 grid of small squares with the top-left and bottom-right cells filled (and the other two transparent). A diagonal-fill stamp that acts as a brand identity mark. Sized from 36px (corner-mark) up to 96px (block stamp on quote slides). May render in ink or accent-lemon.\n\n**Corner mark (`{components.corner-mark}`)** — A 36px × 36px version of the block stamp anchored top-right of a panel. Acts as a small structural identity tag.\n\n**QR tile (`{components.qr-tile}`)** — A 5×5 grid of small squares with a checkerboard-like pattern of ink and accent-lemon fills. Decorative QR-pattern visual, not a real scannable code. Used as a cover-slide flourish.\n\n**Arrow (`{components.arrow}`)** — An inline SVG right-pointing arrow at 64px × 64px (or 24px × 24px for small flow indicators). Used as a flow signal between process steps and as an out-pointing indicator on stat panels.\n\n**Highlight mark (`{components.highlight-mark}`)** — A neon-yellow swatch wrapping one or more words inside a headline via the `<mark>` element. The system's headline emphasis mechanism. Padding is `0 6px` (or `0 8px` at larger sizes).\n\n**Page number (`{components.pagenum}`)** — Bottom-left position-tag in the format `01 / 12` with a colored background. The three background variants (paper, ink, lemon) let the page number adapt to whichever color is most visible against the active slide's dominant panels.\n\n**Photo region** — A cell classed `.photo` with a deep-black background (#111) containing a `.ph` child that renders a stylized B&W noise texture (radial + diagonal stripes). A small mono tag inside the cell labels the region (e.g., \"PORTRAIT / B&W\"). Used as a placeholder until real photography arrives.\n\n**Pills (`{components.pill-yes}`, `{components.pill-part}`, `{components.pill-no}`)** — Inline mono uppercase labels in a comparison cell with three color states: yellow fill (affirmative), paper with ink border (partial), ink fill with paper text (negative). All three are 0-radius rectangles, not rounded pills despite the name.\n\n**Section ordinal panel** — A panel containing a 320px Space Grotesk weight-700 numeral as the entire content. Used as the visual identity of a section-divider slide; the rest of the slide carries a complementary headline panel in ink.\n\n**Chart bar pair** — Vertical bars in groups of two (series A in solid ink, series B in yellow with ink border). The bars share equal width inside their column and the column gap is set by the parent grid.\n\n## Do's and Don'ts\n\n### Do\n- Compose every slide on the 12-column × 8-row grid (`{components.frame}`) with 40px inset and 12px (or 18px for breathing room) gaps. The grid is the system's identity.\n- Fill the grid corner to corner. The system reads as authoritative when the grid is densely populated with panels of varying span.\n- Use `{colors.paper}` as your default panel fill, `{colors.ink}` for contrast blocks, and `{colors.accent-lemon}` for one to three signal panels per slide.\n- Set every display, title, subtitle, and stat numeral in Space Grotesk 700 uppercase with negative letter-spacing. The combination is the system's typographic voice.\n- Use `<mark>` inside a headline to wrap one or more words in a yellow highlighter swatch — the system's primary headline emphasis.\n- Use `<em>` inside a headline to switch one word to accent-lemon color (stays upright, no italic).\n- Place a `{components.pagenum}` tag bottom-left of every slide. Choose the background variant (paper / ink / lemon) that contrasts with the lower-left panel.\n- Use JetBrains Mono uppercase with at least 0.08em tracking for every label, page number, axis tag, and metadata string.\n- Render pills (yes / part / no) in their canonical three-color treatment inside comparison tables.\n- Allow stat numerals to scale to 156–320px when they occupy a featured panel. Large numbers are part of the editorial poster identity.\n\n### Don't\n- Don't add box-shadow to any panel. Depth comes from color adjacency only.\n- Don't round any corner on any element. The system is strictly rectangular.\n- Don't put display headlines in mixed case. Space Grotesk display is always uppercase.\n- Don't put body copy in uppercase. Mixed case at weight 400 is the body voice.\n- Don't introduce a second accent color. Neon yellow is the only chromatic accent — adding red, blue, or green breaks the system.\n- Don't use the yellow as a text color. The accent is too light to read as type; it's a fill color only.\n- Don't compose layouts outside the 12×8 grid. Absolutely-positioned elements that break the grid (page number, corner mark, copyright) are explicitly the only exceptions.\n- Don't use italic letterforms. The `<em>` tag is repurposed as a color switch — italic visual style does not exist here.\n- Don't use rounded \"pill\" shapes despite the pill component naming. Pills are 0-radius rectangles.\n- Don't sparsely populate the grid. A slide with one panel and seven empty cells reads as broken — the system needs density to function as an editorial poster.\n\n## Responsive Behavior\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component (loaded via `deck-stage.js`). The stage scales the entire 1920×1080 composition proportionally to fit the browser viewport — type sizes, panel positions, grid gaps, and inset values are all pixel-fixed inside the canvas, and the stage handles the responsive transform.\n\nThis means: every typographic and layout decision in the system is made at 1920×1080 resolution. Sizes do not scale per breakpoint; the entire canvas scales as a single unit. There are no media queries inside slide styles.\n\n### Presenter Behavior\n- The `<deck-stage>` web component manages slide-to-slide navigation, viewport scaling, and presenter chrome.\n- Keyboard navigation, touch swipe, and mouse wheel are handled by the stage component, not by inline scripts.\n- The slide canvas is constant 1920×1080 regardless of browser viewport; the stage proportionally scales it.\n\n### Frontend Slides Integration Note\n\nWhen using this design system inside the `frontend-slides` skill, preserve the\nfixed 1920×1080 canvas model. Do not translate the 12-column × 8-row grid,\nfixed typography, and fixed spacing into independent viewport-responsive\n`clamp()` values. That breaks the relationship between panel size and type\nscale, especially with CJK text, and can create clipping even when the original\ntemplate would have scaled cleanly.\n\nThe safe single-file implementation is:\n\n1. Render each slide as a 1920×1080 `.stage`.\n2. Scale that stage proportionally to fit the current viewport.\n3. Keep the internal `.frame` grid at `inset: 40px`, `12` columns, `8` rows,\n   and `12px` gaps.\n4. Fit content at the 1920×1080 design size first, then scale the whole stage.\n5. Verify both text overflow and panel overlap in the rendered browser. A\n   `scrollHeight` check can pass while one grid panel visually covers another.\n\n### Print Behavior\nThe template uses the deck-stage component for rendering. Print export depends on the component's print handling, which may render slide-per-page or capture the active slide only.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / title / stat (Space Grotesk 700 UPPERCASE) | Space Grotesk | Noto Sans SC (思源黑体) | 900 |\n| Body (Space Grotesk 400) | Space Grotesk | Noto Sans SC | 400 |\n| Label / page number (JetBrains Mono UPPERCASE) | JetBrains Mono | Noto Sans SC | 400 (do not force monospace on CJK) |\n\n### Mixed-Content Strategy\n\nStrategy A — single `font-family` stack with Latin-first fallback. Update each token's `fontFamily` from `\"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"` to `\"Space Grotesk, Noto Sans SC, Helvetica Neue, Helvetica, Arial, sans-serif\"`. Latin glyphs render in Space Grotesk 700; CJK characters fall through to Noto Sans SC 900 automatically. Mixed strings like `THE CLAUDE 模型` render correctly inline.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&family=JetBrains+Mono:wght@400;500&family=Noto+Sans+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nNeo-Grid Bold is heavy uppercase Space Grotesk 700 with negative letter-spacing at sizes up to 320px. **Chinese has no concept of uppercase**, so the system's primary typographic signature (uppercase brutalist headlines) must transfer through *weight and density* instead. Set every Chinese display moment in **Noto Sans SC 900** — the heaviest available weight — to match the visual weight of Space Grotesk 700 ALL CAPS at large sizes. Chinese headlines should also drop the negative letter-spacing entirely; CJK glyphs are designed on a square em-box and tightening them causes glyph collision.\n\nThe `<mark>` neon-yellow swatch highlighting one word inside a headline is a perfect transfer to Chinese — wrap one CJK character or one phrase in `<mark>` and the lemon swatch reads the same. **Keep the highlighter mechanism as the system's primary headline emphasis in CJK.** The `<em>` color switch (yellow inline) also transfers cleanly.\n\nJetBrains Mono uppercase labels (page numbers in `01 / 12` format) are pure Latin / numeric — keep them in JetBrains Mono. Don't try to render Chinese in monospace; CJK glyphs are already monospaced by design and forcing JetBrains Mono produces missing glyphs. For mixed mono labels containing CJK, fall through to Noto Sans SC 400 at the same size.\n\nSection numerals (320px Space Grotesk 700) and stat numerals (156–240px) are pure digits — they transfer unchanged. The neon-yellow accent panel system is script-agnostic; the brutalist poster aesthetic survives the script switch as long as the weight stays at 900.\n\n### Known CJK Gap\n\nThe negative letter-spacing (-0.005 to -0.05em) scales with display size in this system and is part of the \"brutalist compressed\" signature. **Removing it for Chinese characters breaks visual parity with Latin slides in a mixed deck.** Accept this: pure-CJK slides will read as slightly less compressed than pure-Latin slides. Don't try to compensate by tightening Chinese — glyph collision is a worse failure than tonal mismatch.\n\n## Iteration Guide\n\n1. Every new slide composes its layout on the 12×8 grid via `grid-column` and `grid-row` span declarations. Never break the grid with absolute positioning except for the page-number tag, corner-mark, and copyright stamp.\n2. Every new panel uses one of three fill colors: paper (default), ink (inverted), or accent-lemon (signal). Don't introduce a fourth panel color.\n3. Every new display headline is Space Grotesk weight 700 uppercase with negative letter-spacing scaled to the headline size (-0.005em at 30px, up to -0.05em at 320px).\n4. Every new body element is Space Grotesk weight 400 mixed case at one of the three body sizes (28px, 24px, 22px).\n5. Every new label or metadata tag is JetBrains Mono uppercase with at least 0.08em tracking.\n6. Every new chart-series color is either `{colors.ink}` (series A) or `{colors.accent-lemon}` with an ink border (series B). Don't add a third series color.\n7. Every new card uses 0 border-radius. Square corners are non-negotiable.\n8. To emphasize a word inside a headline, wrap it in `<mark>` for a yellow swatch or `<em>` for a yellow color switch. Don't use bold, italic, or underline.\n9. Every new comparison cell uses the three-state pill system: yellow fill (yes), paper with ink border (partial), ink fill (no).\n10. Densely populate the grid. If a composition leaves more than two cells empty in a row, reconsider whether a card is missing.\n\n## Known Gaps\n\n- The system relies on a `<deck-stage>` web component loaded via `deck-stage.js`. Without this script, the 1920×1080 canvas will not scale to the viewport and slides will render at native pixel size.\n- Photo regions use stylized CSS-generated noise textures (radial + diagonal stripe gradients) as placeholders. Real photography must be inserted by replacing the `.photo` cell contents with an `<img>` and ensuring the surrounding panel colors complement the photo's negative space.\n- The QR-pattern tile is decorative — the 5×5 grid of squares does not encode a real scannable code. Real QR codes would need a separate SVG generated externally.\n- Bar chart heights are set via inline `style=\"height: XX%\"` declarations on each bar fill. There is no data-binding layer.\n- The arrow SVG used between process steps is hand-pathed inside each slide template; if a slide adds or removes process nodes, the arrow positions must be recomputed manually.\n- The `<deck-stage>` component is not loaded directly by this template's script tag — it's expected to be globally available via `deck-stage.js`. Missing the script will silently render slides as flat absolute-positioned divs.\n- The system uses fixed pixel sizes throughout (no `vw`/`vh`). At unusual viewport aspect ratios, the deck-stage proportional scaling may letterbox the canvas with putty bars.\n- The `{colors.muted}` (#8A8A85) token is defined but used only in low-opacity overlays on photo region tags — it has no role in the main type or panel system.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/neo-grid-bold/preview.md":"# Neo-Grid Bold Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/neo-grid-bold/design.md`\n- Preview card: `bold-template-pack/templates/neo-grid-bold/preview.md`\n\n## Selection Metadata\n\n- Slug: `neo-grid-bold`\n- Tagline: Editorial neo-brutalism with a single neon yellow accent on off-white paper.\n- Mood: confident, punchy, editorial, modern\n- Tone: bold, minimal, design-led, graphic\n- Formality: medium\n- Density: high\n- Scheme: light\n- Best for: Anything that should feel confident and editorial-graphic: design-led pitches, brand work, founder talks, conference keynotes. Excellent for stat-heavy slides, comparisons, and process flows. Just as strong for tech, research, or finance when the speaker wants to read as design-led rather than corporate.\n- Avoid for: Contexts that need to feel quiet, traditional, or warm — the neon-yellow accent and uppercase display commit to a confident editorial voice.\n\n## Visual Snapshot\n\nA heavy editorial poster system built on a strict 12-column × 8-row block grid with neon-yellow accents on putty-ecru. Space Grotesk at weight 700 in strict uppercase carries every display moment; JetBrains Mono carries every label and metadata tag. Each slide reads as a magazine spread divided into colored panels — paper-ecru, ink-black, and electric lemon-yellow trading roles across cells. The aesthetic borrows from contemporary editorial print, brutalist annual reports, and the populist-poster end of design week showcases.\n\nNeo-Grid Bold is a heavy editorial poster system built on a single structural premise: every slide is a 12-column × 8-row CSS grid inset 40px from the slide edges, with 12px gaps between cells. Composition happens by assigning colored panels to grid spans — grid-column: 4 / span 5 and grid-row: 1 / span 5 is how layout is described. The grid is rigid; the visual variety comes from how panels of {colors.paper}, {colors.ink}, and {colors.accent-lemon} are arranged across cells.\n\n## Preview Ingredients\n\n- Palette: paper #F5F4EF; bg #ECECE8; ink #0A0A0A; accent-lemon #E6FF3D; muted #8A8A85; stage-bg #1A1A1A\n- Typography: Space Grotesk; JetBrains Mono\n- Signature move: Universal 12-column × 8-row CSS grid ({components.frame}) inset 40px from each slide edge, with 12px gaps between cells.\n- Signature move: Three-color panel system: paper ecru ({colors.paper}) as default, ink black ({colors.ink}) for inverted blocks, accent lemon ({colors.accent-lemon}) for signal blocks.\n- Signature move: Space Grotesk weight 700 uppercase with negative letter-spacing for every display element.\n- Signature move: JetBrains Mono uppercase with 0.08–0.12em tracking for every label, page number, axis tag.\n- Signature move: A signature corner-mark and blockmark — small 2×2 block stamps that act as decorative identity tags.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/peoples-platform/design.md":"---\nversion: alpha\nname: People's Platform\ndescription: \"A WPA-poster-meets-political-campaign presentation system built on three typefaces and a five-color palette that reduces to three functional roles. Alfa Slab One — a compressed slab serif — does all the heavy lifting at extreme sizes in pure uppercase. Caveat Brush drops in as a handwritten human interrupt: lowercase, slightly rotated, emotionally warm. DM Mono carries all metadata at tight uppercase tracking. The palette is electric cobalt blue, amber orange, and hot red — with red functioning exclusively as a shadow/depth color, never as a surface fill. Every slide gets a paper grain overlay that makes the whole deck feel screen-printed. The aesthetic is loud, confident, and populist — the kind of visual language that belongs on a protest placard, a union newsletter, or a campaign bus.\"\n\ncolors:\n  blue: \"#2C2CDC\"\n  blue-deep: \"#1B1BB0\"\n  orange: \"#F2A03A\"\n  orange-deep: \"#E89321\"\n  red: \"#E83A2A\"\n  red-deep: \"#B7281C\"\n  cream: \"#F4E9D6\"\n  paper: \"#F5F2EA\"\n  ink: \"#0E0E14\"\n\ntypography:\n  display-jumbo:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 540px\n    fontWeight: 400\n    lineHeight: 0.82\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  display-hero:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 260px\n    fontWeight: 400\n    lineHeight: 0.86\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-title:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 240px\n    fontWeight: 400\n    lineHeight: 0.86\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-xl:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 180px\n    fontWeight: 400\n    lineHeight: 0.88\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-lg:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 0.88\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-md:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 120px\n    fontWeight: 400\n    lineHeight: 0.88\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-sm:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 108px\n    fontWeight: 400\n    lineHeight: 1.04\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  stat-unit:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 130px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  section-num:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 54px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  card-title:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 54px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  kpi-value:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 88px\n    fontWeight: 400\n    lineHeight: 0.9\n    textTransform: uppercase\n  quote-mark:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 300px\n    fontWeight: 400\n    lineHeight: 0.7\n    textTransform: uppercase\n  quote-body:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 78px\n    fontWeight: 400\n    lineHeight: 1.08\n    textTransform: uppercase\n  item-title:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 38px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  item-title-sm:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 30px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  toc-entry:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 36px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  subtitle:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 72px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.01em\n    textTransform: uppercase\n  cta:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 48px\n    fontWeight: 400\n    letterSpacing: 0.02em\n    textTransform: uppercase\n  stamp:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 28px\n    fontWeight: 400\n    letterSpacing: 0.04em\n    textTransform: uppercase\n  url:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 46px\n    fontWeight: 400\n    letterSpacing: 0.02em\n    textTransform: uppercase\n  script-lg:\n    fontFamily: \"Caveat Brush, cursive\"\n    fontSize: 96px\n    fontWeight: 400\n    textTransform: lowercase\n  script-md:\n    fontFamily: \"Caveat Brush, cursive\"\n    fontSize: 64px\n    fontWeight: 400\n    textTransform: lowercase\n  body-lg:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 30px\n    fontWeight: 500\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-md:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 28px\n    fontWeight: 500\n    lineHeight: 1.35\n    letterSpacing: 0\n  body-sm:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 26px\n    fontWeight: 500\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-xs:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0\n  label:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-wide:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.22em\n    textTransform: uppercase\n  label-accent:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 32px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: 0.16em\n    textTransform: uppercase\n  signoff:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 26px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0.20em\n    textTransform: uppercase\n\nspacing:\n  slide-gutter: 90px\n  content-gutter: 120px\n  topbar-height: 90px\n  section-border: 6px\n  inner-border: 3px\n  grid-gap-lg: 90px\n  grid-gap-md: 30px\n  frame-inset: 48px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  inset-frame:\n    border: \"6px solid {colors.cream}\"\n    position: absolute\n    inset: 48px\n  topbar:\n    position: absolute\n    top: 0\n    left: 0\n    right: 0\n    height: 90px\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n    padding: 0 90px\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.18em\n    borderBottom: \"6px solid {colors.cream}\"\n  section-divider:\n    borderBottom: \"6px solid {colors.ink}\"\n    height: 6px\n  toc-row:\n    display: grid\n    gridTemplateColumns: \"90px 1fr 100px\"\n    gap: 24px\n    padding: \"20px 0\"\n    borderBottom: \"3px solid {colors.ink}\"\n  toc-num:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 54px\n    color: \"{colors.orange}\"\n    textShadow: \"3px 3px 0 {colors.red}\"\n  pillar-col:\n    padding: \"60px 50px\"\n    borderRight: \"6px solid {colors.ink}\"\n    background: \"{colors.paper}\"\n  pillar-col-alt:\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n  pillar-tag:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.18em\n    borderTop: \"3px solid {colors.ink}\"\n    paddingTop: 18px\n    marginTop: 14px\n    alignSelf: flex-start\n  kpi-card:\n    border: \"5px solid {colors.ink}\"\n    padding: \"28px 30px\"\n    background: \"{colors.paper}\"\n  kpi-card-alt:\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n  timeline-dot:\n    width: 60px\n    height: 60px\n    borderRadius: 50%\n    background: \"{colors.orange}\"\n    border: \"6px solid {colors.ink}\"\n    boxShadow: \"6px 6px 0 {colors.red}\"\n  timeline-dot-alt:\n    background: \"{colors.blue}\"\n  timeline-track:\n    height: 14px\n    background: \"{colors.ink}\"\n  compare-side-left:\n    background: \"{colors.paper}\"\n    borderRight: \"6px solid {colors.ink}\"\n    padding: \"60px 70px\"\n  compare-side-right:\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n    padding: \"60px 70px\"\n  compare-label:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.22em\n    paddingBottom: 14px\n    borderBottom: \"4px solid {colors.ink}\"\n    alignSelf: flex-start\n  diamond-bullet:\n    width: 24px\n    height: 24px\n    background: \"{colors.red}\"\n    borderRadius: 4px\n    transform: rotate(45deg)\n  diamond-bullet-alt:\n    background: \"{colors.orange}\"\n  avatar:\n    width: 120px\n    height: 120px\n    borderRadius: 50%\n    background: \"{colors.blue}\"\n    border: \"6px solid {colors.blue}\"\n    boxShadow: \"6px 6px 0 {colors.red}\"\n  quote-stamp:\n    background: \"{colors.blue}\"\n    color: \"{colors.orange}\"\n    padding: \"18px 32px\"\n    transform: rotate(-3deg)\n    border: \"5px solid {colors.cream}\"\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 28px\n    letterSpacing: 0.04em\n    boxShadow: \"6px 6px 0 {colors.red}\"\n    textTransform: uppercase\n  circular-stamp:\n    width: 200px\n    height: 200px\n    borderRadius: 50%\n    background: \"{colors.cream}\"\n    color: \"{colors.blue}\"\n    border: \"6px solid {colors.orange}\"\n    transform: rotate(-9deg)\n    boxShadow: \"8px 8px 0 {colors.red}\"\n  meta-pill:\n    border: \"3px solid {colors.cream}\"\n    padding: \"8px 20px\"\n    borderRadius: 999px\n  ribbon:\n    position: absolute\n    bottom: 0\n    left: 0\n    right: 0\n    height: 60px\n    background: \"{colors.orange}\"\n    color: \"{colors.blue}\"\n    borderTop: \"6px solid {colors.ink}\"\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.22em\n    fontWeight: 600\n  lede-block:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontWeight: 500\n    fontSize: 28px\n    lineHeight: 1.35\n    borderLeft: \"4px solid {colors.ink}\"\n    paddingLeft: 50px\n  lede-block-top:\n    borderTop: \"6px solid {colors.ink}\"\n    paddingTop: 24px\n  underline-rule:\n    height: 14px\n    background: \"{colors.ink}\"\n    width: \"30%\"\n    marginTop: 60px\n  kicker:\n    fontFamily: \"DM Mono, monospace\"\n    letterSpacing: 0.22em\n    fontSize: 26px\n    color: \"{colors.red}\"\n    marginBottom: 48px\n  grain-overlay:\n    position: absolute\n    inset: 0\n    pointerEvents: none\n    backgroundImage: \"radial-gradient(rgba(0,0,0,.06) 1px, transparent 1px), radial-gradient(rgba(255,255,255,.05) 1px, transparent 1px)\"\n    backgroundSize: \"3px 3px, 5px 5px\"\n    backgroundPosition: \"0 0, 1px 2px\"\n    mixBlendMode: multiply\n    opacity: 0.5\n  orange-dot:\n    width: 10px\n    height: 10px\n    borderRadius: 50%\n    background: \"{colors.orange}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPeople's Platform is a **WPA-poster-meets-political-campaign slide system** — the visual language of conviction, the graphic register of public address. The canvas is warm paper (`{colors.paper}` — #F5F2EA), a hair warmer than white, and every slide gets a grain texture applied via a CSS pseudo-element that makes the whole deck feel screen-printed rather than rendered.\n\nThe typeface stack is a three-way class system. **Alfa Slab One** owns the stage at extreme sizes — compressed, slab-heavy, all caps, intrinsically authoritative. It is the voice that shouts. **Caveat Brush** is the human interrupt — handwritten, lowercase, slightly rotated, emotionally present. It is the voice that whispers. **DM Mono** is the bureaucratic record-keeper — monospace, wide-tracked uppercase, 24px, always — the voice that accounts for things. Archivo Narrow is the workhorse body face: never used at display sizes, always condensed, weight 500 for readability.\n\nThe palette has five named colors but three functional roles. **Blue** (`{colors.blue}` — #2C2CDC) is the primary structural color: backgrounds for high-emphasis surfaces, borders for content dividers, text color on non-blue backgrounds. **Orange** (`{colors.orange}` — #F2A03A) is the energy color: stat figures, column numerals, accent text within blue surfaces. **Red** (`{colors.red}` — #E83A2A) is the depth color — it never appears as a surface fill, only as the first layer of a stacked text-shadow or box-shadow. Blue-deep and red-deep are the outer shadow layers in the double-stacked shadow system.\n\nThe signature depth technique is the **stacked offset text-shadow**: orange text casts a red shadow at 6–12px, which casts a red-deep shadow at 12–24px. This creates a three-layer quasi-3D letterpress effect that is the system's most recognisable trait. Box-shadows on interactive elements mirror the same treatment: `6px 6px 0 {colors.red}`.\n\n**Key Characteristics:**\n- Paper canvas (`{colors.paper}` — #F5F2EA) with grain overlay via CSS pseudo-element on every slide.\n- Stacked double text-shadow: `Npx Npx 0 {colors.red}, 2Npx 2Npx 0 {colors.red-deep}`. Shadow size scales with font size.\n- Alfa Slab One for all display and structural type — uppercase, line-height 0.82–1.04, letter-spacing 0.005em.\n- Red (`{colors.red}`) functions exclusively as a shadow color — never a surface background.\n- Heavy 6px ink borders for all major structural divisions (topbars, section headers, column separators, inset frames).\n- DM Mono labels at exactly 24px with 0.18–0.22em tracking across all slides.\n- Caveat Brush appears at 64–96px, always lowercase, always rotated 2–5 degrees — a deliberate roughness signal.\n- Orange bottom ribbon: a horizontal marquee strip anchored to the bottom of data-heavy slides.\n- Inset decorative frame (6px solid cream at `inset: 48px`) used on blue-background slides.\n\n## Colors\n\n### Primary Palette\n- **Blue** (`{colors.blue}` — #2C2CDC): Electric cobalt. The dominant surface color for high-emphasis slides and structural elements. Used as full-slide background, column fills, topbar backgrounds, text on cream/paper surfaces, avatar fills, and compare-panel dark side.\n- **Blue Deep** (`{colors.blue-deep}` — #1B1BB0): A darker blue. Used exclusively as the outermost layer of stacked text-shadows. Never a surface fill.\n- **Orange** (`{colors.orange}` — #F2A03A): Warm amber. The energy accent. Used for oversized stat numerals, column ordinals, CTA button fill, ribbon background, accent text within blue surfaces, and text-shadow inner layer on stamp elements.\n- **Orange Deep** (`{colors.orange-deep}` — #E89321): Darker amber. Reserved for the deepest shadow layer on orange elements. Not used as a surface fill.\n- **Red** (`{colors.red}` — #E83A2A): Hot red. The depth color. Used exclusively in text-shadows and box-shadows — the first offset layer on most display text and buttons. Never appears as a background or primary text color.\n- **Red Deep** (`{colors.red-deep}` — #B7281C): Dark red. The outermost layer of the double text-shadow on the largest display elements. Never a surface fill.\n\n### Surface Palette\n- **Cream** (`{colors.cream}` — #F4E9D6): Warm cream. Used as text/border color on blue surfaces (inverted mode), as the inset frame border, and as the full background on cream-tone slides.\n- **Paper** (`{colors.paper}` — #F5F2EA): Off-white with a warm cast. The default slide background — slightly warmer and less stark than #fff. Most content slides use this.\n- **Ink** (`{colors.ink}` — #0E0E14): Near-black with a barely-perceptible blue undertone. Used for all structural borders, body text, column dividers, timeline tracks, and KPI card borders.\n\n### Color Roles Summary\n- **Blue surfaces** = high-emphasis, conclusive, authoritative moments\n- **Paper/cream surfaces** = content-first, readable, subordinate moments\n- **Orange** = the number, the energy, the thing that matters most on a given slide\n- **Red** = never a color you see directly — only a shadow you feel\n\n## Typography\n\n### Font Families\nThree typefaces; each occupies a completely non-overlapping register:\n\n**Alfa Slab One** is the primary voice. A compressed, heavy slab serif with strong verticals and blocky serifs. Used at weight 400 (the only weight available, which is intrinsically bold) in strict uppercase for every display moment from 28px stamps to 540px stat figures. Its compressed letterform means even massive sizes don't feel wide — they feel tall and column-like. The slight positive letter-spacing (0.005em) keeps glyphs from touching at large sizes.\n\n**Caveat Brush** is the human voice. A rough handwritten script face used only at large sizes (64–96px), always lowercase, always with a small rotation (-2 to -5 degrees). It appears at moments of warmth, transition, or informality — a script annotation in an otherwise rigidly structured deck. It is never used for body copy or labels.\n\n**DM Mono** is the accounting voice. Monospace, 24px, wide letter-spacing (0.18–0.22em), uppercase. It appears on topbars, footers, kicker labels, metadata rows, source citations, and ribbon text. It is always a supporting element — the technical spec printed at the bottom of a poster, not the headline.\n\n**Archivo Narrow** is the body voice. A condensed sans used for all running body copy: pillar descriptions, list item paragraphs, compare list items, stat annotations. Weight 500 for most body text; 400 for smaller captions. Never used at display sizes.\n\n### Display Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-jumbo}` | 540px | Alfa Slab One | 400 | Full-bleed oversized stat numeral |\n| `{typography.display-hero}` | 260px | Alfa Slab One | 400 | Dominant closing or opening headline |\n| `{typography.display-title}` | 240px | Alfa Slab One | 400 | Primary deck title |\n| `{typography.display-xl}` | 180px | Alfa Slab One | 400 | Large column ordinal numeral |\n| `{typography.display-lg}` | 140px | Alfa Slab One | 400 | Section headline, primary |\n| `{typography.display-md}` | 120px | Alfa Slab One | 400 | Section headline, secondary |\n| `{typography.display-sm}` | 108px | Alfa Slab One | 400 | Body-adjacent manifesto headline |\n| `{typography.stat-unit}` | 130px | Alfa Slab One | 400 | Superscript unit symbol alongside stat |\n| `{typography.quote-mark}` | 300px | Alfa Slab One | 400 | Decorative oversized quotation mark |\n| `{typography.quote-body}` | 78px | Alfa Slab One | 400 | Pull quote body text |\n| `{typography.kpi-value}` | 88px | Alfa Slab One | 400 | KPI or metric card value |\n| `{typography.subtitle}` | 72px | Alfa Slab One | 400 | Subtitle or secondary title alongside a primary headline |\n| `{typography.card-title}` | 54px | Alfa Slab One | 400 | Card or column heading |\n| `{typography.section-num}` | 54px | Alfa Slab One | 400 | Section or item ordinal numeral |\n| `{typography.cta}` | 48px | Alfa Slab One | 400 | CTA button label |\n| `{typography.url}` | 46px | Alfa Slab One | 400 | URL or contact address |\n| `{typography.item-title}` | 38px | Alfa Slab One | 400 | List item or node heading |\n| `{typography.toc-entry}` | 36px | Alfa Slab One | 400 | Table of contents entry title |\n| `{typography.item-title-sm}` | 30px | Alfa Slab One | 400 | Dense list item heading |\n| `{typography.stamp}` | 28px | Alfa Slab One | 400 | Stamp or badge label |\n\n### Script Scale\n\n| Token | Size | Use |\n|---|---|---|\n| `{typography.script-lg}` | 96px | Prominent handwritten accent — transition word, emotional opener |\n| `{typography.script-md}` | 64px | Smaller handwritten annotation — subtitle callout, sub-label |\n\nBoth script tokens are always lowercase and always applied with a rotation between -2deg and -5deg. Never use Caveat Brush without rotation.\n\n### Body and Label Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.body-lg}` | 30px | Archivo Narrow | 500 | Stat annotation, primary body paragraph |\n| `{typography.body-md}` | 28px | Archivo Narrow | 500 | Column body, lede paragraph, compare list |\n| `{typography.body-sm}` | 26px | Archivo Narrow | 500 | Supporting body paragraphs |\n| `{typography.body-xs}` | 24px | Archivo Narrow | 400 | Dense list items, captions |\n| `{typography.label}` | 24px | DM Mono | 400 | Standard metadata label (0.18em tracking) |\n| `{typography.label-wide}` | 24px | DM Mono | 400 | Footline and ribbon text (0.22em tracking) |\n| `{typography.label-accent}` | 32px | DM Mono | 600 | Highlighted metadata (e.g. section count) |\n| `{typography.signoff}` | 26px | DM Mono | 400 | Footer sign-off block (0.20em tracking) |\n\n### Typography Principles\nAlfa Slab One is always uppercase — never use it in sentence case or lowercase. Line-height at display sizes is tight: 0.82–0.88 for large headlines, 1.04 only for multi-line body-adjacent text where line collision would occur. The 0.005em letter-spacing is nearly invisible but prevents glyph collision at 100px+ sizes.\n\nThe stacked text-shadow is the inline styling rule for display text: orange display type always casts `{colors.red}` as its first shadow. At sizes above 200px, add a second `{colors.red-deep}` layer at double the offset. At sizes below 100px, a single 3px–6px offset in `{colors.red}` is sufficient.\n\nDM Mono labels are always 24px regardless of context. The tracking varies by placement: 0.18em for topbar/footer, 0.22em for ribbon and footline, 0.16em for side labels in split panels. Never reduce tracking on DM Mono — at 24px without tracking, it reads as utilitarian rather than editorial.\n\nArchivo Narrow is always weight 400 or 500. Never use it at display sizes. It is a supporting voice, not a headline voice.\n\n## Layout\n\n### Canvas System\nEvery slide is 1920×1080px. The `deck-stage` custom element handles scaling. All content is absolutely positioned or uses CSS grid — no scrolling.\n\n### Gutter System\n- **Slide gutter** (90px left/right): The standard edge padding for most content sections.\n- **Content gutter** (120px left/right): Used for body content within slides that already have a structural header — provides extra breathing room for reading text.\n- **Topbar height** (90px): The fixed-height blue topbar band that sits at the absolute top of a slide.\n- **Frame inset** (48px): The distance from the slide edge to the decorative inset frame border used on blue-background slides.\n\n### Universal Chrome\nThe system does not enforce a universal topbar on every slide. Two chrome patterns exist:\n\n**Topbar pattern** — A full-width 90px blue bar anchored to the top (`position:absolute; top:0; left:0; right:0`). Contains DM Mono 24px label text at 0.18em tracking. Carries a 6px solid cream bottom border. Used on high-emphasis blue-background slides.\n\n**Section-divider pattern** — A 6px solid ink horizontal rule between a header block and the content area below. The header block uses 90px left/right padding; the content below uses 90px padding. No topbar — the rule is the dividing element.\n\nBoth patterns can coexist on a single slide or be used independently.\n\n## Depth and Elevation\n\n### Stacked Text-Shadow (Primary Technique)\nThe system's signature. Display text casts layered offset shadows in the same direction (bottom-right), creating a quasi-3D letterpress effect. Three tiers by element size:\n\n| Tier | Offset layer 1 | Offset layer 2 | Use |\n|---|---|---|---|\n| Small | `3px 3px 0 {colors.red}` | — | Items below 72px |\n| Medium | `5px–6px 5px–6px 0 {colors.red}` | — | 72px–140px display |\n| Large | `10px 10px 0 {colors.red}, 20px 20px 0 {colors.red-deep}` | | 140px–260px display |\n| Jumbo | `12px 12px 0 {colors.red}, 24px 24px 0 {colors.red-deep}` | | 260px+ stat figures |\n\nThe orange display text is the \"face\" layer; red is the \"body\"; red-deep is the \"foot.\" The illusion is of a letterform with physical thickness.\n\n### Box-Shadow (Secondary Technique)\nInteractive and decorative elements (stamps, avatars, CTA buttons, KPI cards) use the same offset logic in box-shadow form: `6px 6px 0 {colors.red}` or `8px 8px 0 {colors.red}`. This unifies the depth system: all elements in the deck cast shadows in the same direction at the same apparent light angle.\n\n### Grain Texture (Atmospheric Depth)\nEvery slide carries a `.grain::before` pseudo-element: two overlapping radial-gradient dot grids at 3px and 5px pitch, with `mix-blend-mode: multiply` and 50% opacity. This simulates screen-print halftone texture, giving the flat digital surfaces a physical, printed quality. It is not elevation but atmosphere — the entire deck reads as produced rather than rendered.\n\n### Flat Elements\nDM Mono labels, ink section rules, body text, and grid lines are completely flat. No shadows on structural dividers.\n\n## Shapes and Treatment\n\n### Border Radius Scale\n| Value | Use |\n|---|---|\n| 999px (pill) | Meta label pills in topbar/header areas |\n| 50% (circle) | Avatar elements, timeline milestone dots, circular stamp |\n| 4px | Diamond bullet pseudo-elements (rotated 45deg to form a diamond) |\n| 0px | All structural elements: columns, cards, topbars, frames, ribbons, KPI cards, stamps |\n\nThe system is almost entirely square. The only soft shapes are the pill (for metadata chips), the circle (for avatars, dots, the closing stamp), and the diamond bullet. The squareness of structural elements reinforces the printed/constructed aesthetic.\n\n### Border Weights\n- **6px solid `{colors.ink}`** — Primary structural borders: section dividers, column separators, topbar bottom edges, inset frames, KPI card borders, CTA button border.\n- **6px solid `{colors.cream}`** — Inverted structural borders on blue surfaces: inset frame, topbar divider in cream-on-blue mode.\n- **5px solid** — Secondary structural borders: quote stamp, compare list item treatment.\n- **4px solid** — Tertiary dividers: side labels in compare panels, lede left-border.\n- **3px solid `{colors.ink}`** — Fine structural lines: TOC row separators, column tags, stat source dividers, inner timeline lines.\n\n### Decorative Elements\n\n**Inset frame** — A 6px solid cream border at `inset: 48px` creates a second inner rectangle on blue-background slides. It reinforces the poster/placard aesthetic — the design within a design.\n\n**Orange ribbon** — A 60px bottom-anchored strip in `{colors.orange}` with 6px ink top border and repeating DM Mono text at 0.22em tracking. Functions as a marquee footer on data slides.\n\n**Diamond bullet** — List item marker using a `::before` pseudo-element: 24px × 24px, `background: {colors.red}`, `border-radius: 4px`, `transform: rotate(45deg)`. On blue-background lists, uses `{colors.orange}` instead. The shape sits 48px left of the text (positioned absolutely).\n\n**Circular stamp** — A 200px circle (`{components.circular-stamp}`) rotated -9deg with 6px orange border and an 8px red box-shadow. Functions as a seal — the physical-world approval mark on a bureaucratic document.\n\n**Rotated rectangular stamp** — A rectangular block rotated -3deg with 5px cream border and 6px red box-shadow. Contains Alfa Slab One 28px text at 0.04em tracking. Lighter rotation than the circular stamp — feels like an address label placed at a slight angle.\n\n**Script annotation** — Caveat Brush 64–96px, lowercase, rotated 2–5 degrees. Always appears adjacent to an Alfa Slab One headline it qualifies or interrupts — never alone.\n\n**Column ordinal** — 180px Alfa Slab One orange numeral with a 5px red text-shadow, followed by a 3px ink top-border DM Mono tag label below it. This pairing (large orange numeral + small mono tag) is the system's standard way of labelling columns or sections.\n\n**Underline rule** — A 14px tall solid ink rectangle, width 30% of its container, used as a full-stop after a manifesto headline. It is heavier than a hairline rule — closer to a redaction bar.\n\n**Grain overlay** — The `.grain` class adds `::before` pseudo-element texture to every slide. It cannot be removed from a slide in this system — it is structural to the aesthetic.\n\n## Do's and Don'ts\n\n### Do\n- Apply the grain overlay (`.grain::before`) to every slide. It is not decorative — it is the surface that everything else is printed on.\n- Use the stacked text-shadow on all orange and cream display text. Shadowless Alfa Slab One reads flat and loses the letterpress character.\n- Scale shadow offset proportionally to font size: small offset for small type, jumbo offset for jumbo type.\n- Keep red exclusively as a shadow color. The moment red appears as a text color or background fill, the depth system collapses.\n- Use Caveat Brush only at large sizes (64px+), always lowercase, always slightly rotated. Never for body text.\n- Keep DM Mono labels at exactly 24px with at least 0.16em letter-spacing. The monospace face at body size with normal tracking reads as code, not editorial.\n- Use the 6px border weight for major structural divisions. Thinner reads as SaaS; thicker looks like a design mistake.\n- When a slide uses a blue background, use the inset frame — it distinguishes blue-background slides as \"framed\" rather than merely filled.\n- Apply `{colors.orange}` as the numerals, values, and accent text on blue surfaces. Blue-on-orange or cream-on-blue are the only other permitted text combinations on dark surfaces.\n\n### Don't\n- Don't use red as a background or primary text color. It is a shadow material, not a surface material.\n- Don't use Caveat Brush at body sizes or without rotation. Flat, small handwriting reads as untidy, not intentional.\n- Don't apply Alfa Slab One in mixed case. The uppercase lock is essential to the slab's authority.\n- Don't soften the border weights. 1px or 2px borders on structural elements break the printed-matter aesthetic.\n- Don't round card or container corners. The inset frame and KPI cards are strictly square.\n- Don't use Archivo Narrow for headlines. It is a body and lede face only — it lacks the visual weight for display use.\n- Don't use blue-deep or red-deep as surface colors. They are shadow-only values — their role is depth, not fill.\n- Don't omit the diamond bullet rotation on list items. A 45deg-rotated square is a diamond; an upright square is a box — the shape signals hand-crafted, not generic.\n- Don't vary the DM Mono font size. 24px is the single fixed size for all monospace label text — increasing it for emphasis breaks the system; use `{typography.label-accent}` (32px, weight 600) as the sole exception.\n\n## Responsive Behavior\n\nThis template is designed exclusively for 1920×1080 presentation display. The `deck-stage` custom element handles viewport scaling via CSS transforms — the 1920×1080 canvas scales proportionally to any screen size without layout changes.\n\nSlides advance via keyboard or presentation clicker through `deck-stage.js`. No hover states, no interactive form elements, no responsive breakpoints.\n\nFor print and PDF export: at 96dpi, the 1920×1080 canvas maps to a 20×11.25 inch frame. The grain overlay uses `mix-blend-mode: multiply` — in PDF export, blend modes may flatten; test print output and consider disabling the grain for printed formats.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / title / quote (Alfa Slab One UPPERCASE) | Alfa Slab One | Noto Serif SC (思源宋体) | 900 |\n| Script interrupt (Caveat Brush lowercase rotated) | Caveat Brush | — (no good equivalent; see Aesthetic Notes) | — |\n| Body (Archivo Narrow 500) | Archivo Narrow | Noto Sans SC (思源黑体) | 500 |\n| Label / mono (DM Mono UPPERCASE tracked) | DM Mono | Noto Sans SC | 400 (do not force monospace on CJK) |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. Alfa Slab tokens become `\"Alfa Slab One, Noto Serif SC, serif\"`; Archivo Narrow tokens become `\"Archivo Narrow, Noto Sans SC, sans-serif\"`; DM Mono tokens become `\"DM Mono, Noto Sans SC, monospace\"`. Latin glyphs render in their original face; CJK falls through to the SC fallback automatically.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Alfa+Slab+One&family=Caveat+Brush&family=Archivo+Narrow:wght@400;500;600;700&family=DM+Mono:wght@300;400;500&family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPeople's Platform is a WPA-poster system built on three load-bearing typefaces, and **none of the three has a clean Chinese transfer**.\n\n**Alfa Slab One** is a compressed slab serif at extreme sizes (up to 540px) in uppercase. There is no Chinese slab serif of equivalent weight and authority available on CDN. **Noto Serif SC at weight 900** is the closest match — it carries the slab-like heaviness and the structural authority — but it reads as more \"literary monument\" than \"protest placard.\" Accept this register shift: Chinese versions of this system feel closer to a heritage-era public-notice board (think 大字报 or museum signage) than to a 1930s WPA poster. The stacked red text-shadow still applies and still carries the system's letterpress depth signature.\n\n**Caveat Brush** is the \"human interrupt\" voice — lowercase, rotated, emotionally warm. **This does not transfer to Chinese.** Chinese brush calligraphy (Ma Shan Zheng / 马善政) carries cultural and traditional weight — it reads as ceremonial, formal, even bureaucratic, NOT the casual personal voice of Latin Caveat. **Recommended approach: leave the brush moment out entirely on pure-CJK slides.** A second option: use a short Latin word in Caveat Brush as the interrupt even within Chinese content (e.g., a script `yes!` annotation beside a Chinese headline) — this preserves the casual interrupt energy and signals \"voice break\" without invoking Chinese calligraphic tradition.\n\n**DM Mono** uppercase tracked labels do not transfer to CJK. Set Chinese metadata in **Noto Sans SC 400** with letter-spacing reset to 0 and no uppercase. Pure-Latin tags (URLs, dates, edition numbers) keep DM Mono.\n\n**Archivo Narrow** is condensed at weight 500. **Noto Sans SC has no condensed variant.** Use Noto Sans SC 500 at the original Archivo size and accept that Chinese body type sits slightly wider than Latin body type. The single-color paper canvas and the grain overlay absorb the width difference.\n\nThe stacked text-shadow (orange → red → red-deep) is the system's most recognizable trait. **It transfers perfectly to Chinese.** Apply it to every Chinese display headline in orange and the letterpress depth survives the script switch. The blue-and-orange-and-red palette is also fully script-agnostic.\n\nThe diamond bullet marker, the rotated rubber stamp, the inset cream frame, the 6px ink borders — all work unchanged in Chinese.\n\n### Known CJK Gap\n\n**Caveat Brush has no acceptable Chinese equivalent.** The \"human interrupt\" voice is structurally absent in a pure-CJK People's Platform deck. The two workarounds (drop the interrupt entirely; use Latin-in-Chinese for the script moments) are both visible aesthetic compromises — the populist-poster system loses one of its three voices when forced into pure Chinese. Mixed-content decks (English-led with Chinese accents, or vice versa) are the strongest fit for this template.\n\n## Iteration Guide\n\n1. The stacked shadow is a hard invariant — any new display element in orange or cream must carry it. Determine the offset by dividing the font size by approximately 20 to get the first shadow distance, double it for the second.\n2. Any new slide with a blue background gets an inset frame (6px cream, `inset: 48px`) and, if it has a header bar, that bar uses the topbar pattern with a 6px cream bottom border.\n3. New columns or side-by-side panels follow the 6px ink separator convention. Asymmetric layouts (e.g. 60/40 split) are fine as long as the separator border remains 6px.\n4. New KPI or data cards use the `{components.kpi-card}` pattern: 5px ink border, paper background, optional alt variant in blue. The number inside uses Alfa Slab One with the standard text-shadow.\n5. New list items always use the diamond bullet (24px × 24px, 4px radius, rotate 45deg). Use red for ink-background items, orange for blue-background items.\n6. If a new decorative stamp or badge is needed, use Alfa Slab One with `letter-spacing: 0.04em`, a box-shadow of `6px 6px 0 {colors.red}`, and a slight rotation (–3 to –9deg). Circular stamps get 50% border-radius; rectangular ones stay square.\n7. The grain overlay is a CSS pseudo-element on the `section` element — it must be present on every new slide via the `.grain` class.\n8. Script (Caveat Brush) text is an interrupt, not a default. Use it once per slide maximum, and only at 64px+.\n\n## Known Gaps\n\n- `deck-stage.js` is an external script dependency not documented here. Slide navigation and scaling are handled by it entirely.\n- The orange ribbon on data slides is implemented with static repeated text — there is no JavaScript marquee animation. At 1920px width, the text wraps naturally; for longer strings, manually duplicate the text.\n- The grain overlay uses `mix-blend-mode: multiply`. This requires a semi-transparent background or a parent with a visible fill to produce the texture effect — on pure white or pure black surfaces the effect may be invisible.\n- Speaker notes are embedded as a `<script type=\"application/json\">` block in the template — this data is presentational, not part of the design system, and is not captured in these tokens.\n- Archivo Narrow is loaded as a web font. It has broad system fallback (`system-ui, sans-serif`) but the condensed width of the system font stack fallback will differ significantly from Archivo Narrow and may break layouts at tight grid configurations.\n- The `text-wrap: pretty` property on quote text is a modern CSS feature with limited browser support — it may not apply in older export environments.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/peoples-platform/preview.md":"# People's Platform (Block & Bold) Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/peoples-platform/design.md`\n- Preview card: `bold-template-pack/templates/peoples-platform/preview.md`\n\n## Selection Metadata\n\n- Slug: `peoples-platform`\n- Tagline: Activist poster energy: blue, orange, red on cream, with Alfa Slab + Caveat Brush.\n- Mood: activist, loud, graphic, honest\n- Tone: punchy, direct, expressive, warm-bold\n- Formality: medium-low\n- Density: medium-high\n- Scheme: light\n- Best for: Anything that should feel honest, loud, and graphic: cultural commentary, manifestos, civic and community decks, design talks, campaign pitches. Excellent for founder-vision moments, mission statements, or any deck — including across industries — that wants protest-poster energy instead of corporate polish.\n- Avoid for: Contexts where institutional restraint is the actual goal — the saturated political-poster palette commits hard to expressive energy.\n\n## Visual Snapshot\n\nA WPA-poster-meets-political-campaign presentation system built on three typefaces and a five-color palette that reduces to three functional roles. Alfa Slab One — a compressed slab serif — does all the heavy lifting at extreme sizes in pure uppercase. Caveat Brush drops in as a handwritten human interrupt: lowercase, slightly rotated, emotionally warm. DM Mono carries all metadata at tight uppercase tracking. The palette is electric cobalt blue, amber orange, and hot red — with red functioning exclusively as a shadow/depth color, never as a surface fill. Every slide gets a paper grain overlay that makes the whole deck feel screen-printed. The aesthetic is loud, confident, and populist — the kind of visual language that belongs on a protest placard, a union newsletter, or a campaign bus.\n\nPeople's Platform is a WPA-poster-meets-political-campaign slide system — the visual language of conviction, the graphic register of public address. The canvas is warm paper ({colors.paper} — #F5F2EA), a hair warmer than white, and every slide gets a grain texture applied via a CSS pseudo-element that makes the whole deck feel screen-printed rather than rendered.\n\n## Preview Ingredients\n\n- Palette: blue #2C2CDC; blue-deep #1B1BB0; orange #F2A03A; orange-deep #E89321; red #E83A2A; red-deep #B7281C; cream #F4E9D6; paper #F5F2EA\n- Typography: Alfa Slab One; Caveat Brush; Archivo Narrow; DM Mono\n- Signature move: Paper canvas ({colors.paper} — #F5F2EA) with grain overlay via CSS pseudo-element on every slide.\n- Signature move: Stacked double text-shadow: Npx Npx 0 {colors.red}, 2Npx 2Npx 0 {colors.red-deep}. Shadow size scales with font size.\n- Signature move: Alfa Slab One for all display and structural type — uppercase, line-height 0.82–1.04, letter-spacing 0.005em.\n- Signature move: Red ({colors.red}) functions exclusively as a shadow color — never a surface background.\n- Signature move: Heavy 6px ink borders for all major structural divisions (topbars, section headers, column separators, inset frames).\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pin-and-paper/design.md":"---\nversion: alpha\nname: Pin & Paper\ndescription: A field-notebook editorial system rendered as yellow legal-pad paper with deep cobalt-blue ink. Every slide carries a fractalnoise paper-grain overlay, hand-drawn safety-pin SVG illustrations that \"pin\" cards to the page, and a hand-script Caveat face for personal annotations. Space Grotesk at heavy weights carries the printed headlines; DM Mono handles archival labels. The aesthetic borrows from analog field reports, vintage public-notice boards, and the diary pages of scientific notebooks — closer to a lab journal pinned to a corkboard than a polished deck.\n\ncolors:\n  paper: \"#EFE56A\"\n  paper-2: \"#F5ECA0\"\n  paper-3: \"#E8D85A\"\n  paper-extra: \"#FBE6A4\"\n  cream: \"#F8F1D6\"\n  kraft: \"#C9A66B\"\n  ink: \"#1F3A8A\"\n  ink-soft: \"#2D4FB8\"\n  ink-line: \"#3457C4\"\n  ink-deep: \"#0E1430\"\n  red: \"#C2342B\"\n  olive: \"#6B7A2E\"\n  orange: \"#D8702A\"\n\ncolor-aliases:\n  c-bg: paper\n  c-text: ink\n  c-card: cream\n  c-stamp: red\n\ntypography:\n  display-mega:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 196px\n    fontWeight: 700\n    lineHeight: 1.08\n    letterSpacing: -0.04em\n  display-section:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 168px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.04em\n  display-stat:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 168px\n    fontWeight: 700\n    lineHeight: 0.85\n    letterSpacing: -0.04em\n  h1-cta:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 130px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.035em\n  h1-chart:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 110px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.035em\n  h2:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 96px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.03em\n  h2-md:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 84px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.03em\n  h2-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 50px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.02em\n  quote-text:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 50px\n    fontWeight: 500\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  card-row:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 44px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  card-h3:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 38px\n    fontWeight: 700\n    lineHeight: 1.02\n    letterSpacing: -0.02em\n  card-h3-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 28px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.015em\n  body:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 22px\n    fontWeight: 400\n    lineHeight: 1.45\n  body-md:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 21px\n    fontWeight: 400\n    lineHeight: 1.35\n  body-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 19px\n    fontWeight: 400\n    lineHeight: 1.45\n  body-list:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 18px\n    fontWeight: 400\n    lineHeight: 1.4\n  scribble-mega:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 360px\n    fontWeight: 700\n    lineHeight: 0.8\n  scribble-lg:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 70px\n    fontWeight: 700\n    lineHeight: 0.9\n  scribble-md:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 60px\n    fontWeight: 700\n    lineHeight: 0.9\n  scribble-sm:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 38px\n    fontWeight: 600\n    lineHeight: 1.05\n  scribble-xs:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 32px\n    fontWeight: 600\n    lineHeight: 1.05\n  label-top:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 18px\n    fontWeight: 500\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  label-meta:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 16px\n    fontWeight: 500\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-footer:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 15px\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  stamp:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 16px\n    fontWeight: 500\n    letterSpacing: 0.18em\n    textTransform: uppercase\n\nspacing:\n  pad-edge: 64px\n  pad-top: 110px\n  pad-bottom: 90px\n  card-pad-md: \"28px 28px 24px\"\n  card-pad-lg: \"32px 22px 22px\"\n  card-pad-xl: \"36px 28px 28px\"\n  card-pad-quote: \"60px 80px\"\n  grid-gap-sm: 22px\n  grid-gap-md: 28px\n  grid-gap-lg: 32px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  paper-surface:\n    background: \"radial-gradient(120% 90% at 20% 10%, rgba(255,255,255,.18), transparent 60%), radial-gradient(140% 100% at 80% 95%, rgba(0,0,0,.05), transparent 55%), {colors.paper}\"\n    description: \"Default slide surface — yellow paper with a soft upper-left highlight gradient and a soft lower-right shadow gradient layered over the base paper color.\"\n  paper-grain-overlay:\n    selector: \".slide::before\"\n    background: \"fractalNoise SVG via data URI, baseFrequency=1.4, octaves=2\"\n    opacity: 0.35\n    mixBlendMode: multiply\n    description: \"Non-optional fractal-noise paper grain overlay on every slide. Lives on the ::before pseudo-element; opacity 0.35, multiply blend. On ink slides, opacity drops to 0.25 with screen blend.\"\n  pinned-card:\n    background: \"{colors.cream}\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: 4px\n    boxShadow: \"5px 6px 0 0 {colors.ink}\"\n    padding: \"{spacing.card-pad-md}\"\n    description: \"Cream paper card with a 1.5px ink border, 4px micro-radius, and a hard 5px-6px ink-blue offset shadow. The system's universal card pattern — every card looks like a piece of paper pinned to the surface.\"\n  pinned-card-alt:\n    background: \"{colors.paper-2}\"\n    description: \"Card variant using the lighter paper-2 tone. Used to break up adjacent same-tone cards.\"\n  pinned-card-alt2:\n    background: \"{colors.paper-extra}\"\n    transform: \"rotate(0.6deg)\"\n    description: \"Card variant with the deepest paper tone and a slight rotation (0.6 to 1.5 degrees) — gives the impression of being pinned slightly askew.\"\n  pin-illustration:\n    width: \"varies (110–640px)\"\n    color: \"currentColor\"\n    transform: \"rotate(-14deg to +20deg)\"\n    description: \"Hand-drawn safety-pin SVG illustration in ink-blue or paper (when on ink surface). Multiple variants: closed pin (#pin), open pin (#pin-open). Always rotated slightly off-axis. Acts as both decoration and the visual signal that a card is 'pinned' to the page.\"\n  scribble:\n    fontFamily: \"Caveat, cursive\"\n    color: \"{colors.ink}\"\n    lineHeight: 1.05\n    description: \"Caveat hand-script face used for handwritten notes, marginalia, and 'me' voice annotations. May be rotated slightly (-3 to -1.5 degrees) and underlined via 2px solid ink for emphasis.\"\n  stamp:\n    border: \"3px solid {colors.red}\"\n    color: \"{colors.red}\"\n    padding: \"6px 16px\"\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.18em\n    textTransform: uppercase\n    transform: \"rotate(-4deg)\"\n    description: \"Cinnabar-red rubber stamp — 3px solid red border, red mono text, rotated -4 degrees. Used for status marks like CONFIDENTIAL or RECEIVED.\"\n  top-chrome:\n    position: \"absolute; top: 44px; left: 64px; right: 64px\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 18px\n    fontWeight: 500\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    description: \"Top metadata band — brand lockup on left (with inline #mark SVG glyph), meta tags on right. Mono uppercase, line-height 1.\"\n  footer-chrome:\n    position: \"absolute; left: 64px; right: 64px; bottom: 36px\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 15px\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    opacity: 0.65\n    description: \"Bottom metadata band — typically left-source + right-page-position pair at 65% opacity.\"\n  pin-glyph-closed:\n    svgId: \"#pin\"\n    viewBox: \"0 0 360 110\"\n    description: \"Closed safety-pin SVG glyph — coiled spring on the right, shaft sweeping left, oval clasp cap on the left.\"\n  pin-glyph-open:\n    svgId: \"#pin-open\"\n    viewBox: \"0 0 360 130\"\n    description: \"Open safety-pin SVG glyph — clasp lifted, sharp point exposed pointing left.\"\n  mark-glyph:\n    svgId: \"#mark\"\n    viewBox: \"0 0 32 16\"\n    description: \"Small inline mark glyph for the top-chrome brand lockup — circle on the right, arrow shaft pointing left.\"\n  table-cell:\n    padding: \"18px 22px\"\n    borderBottom: \"1.5px solid rgba(31,58,138,.5)\"\n    borderRight: \"1.5px solid rgba(31,58,138,.5)\"\n    fontSize: 21px\n    lineHeight: 1.35\n    description: \"Comparison table cell with semi-transparent ink-blue dividers. Sits inside the same cream + ink-border + offset-shadow card pattern.\"\n  pill-yes:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: 999px\n    padding: \"4px 14px\"\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 28px\n    fontWeight: 600\n    description: \"Affirmative pill — solid ink fill with paper text, rounded 999px, Caveat script face. Unusual treatment: handwritten letterforms inside a UI pill shape.\"\n  pill-no:\n    background: transparent\n    color: \"{colors.red}\"\n    border: \"1.5px solid {colors.red}\"\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    description: \"Negative pill — red mono uppercase text in a red-bordered transparent pill. The only place red appears in regular use (outside the stamp component).\"\n  pill-part:\n    background: \"{colors.paper-2}\"\n    color: \"{colors.ink}\"\n    fontFamily: \"Caveat, cursive\"\n    description: \"Partial-state pill — light paper fill with Caveat script ink text.\"\n  number-script:\n    fontFamily: \"Caveat, cursive\"\n    fontWeight: 700\n    fontSize: \"60–70px\"\n    color: \"{colors.ink}\"\n    description: \"Hand-script numeral used as step numbers in process diagrams and ordered CTA steps. The script face makes ordering feel hand-counted, not algorithmic.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPin & Paper is a **field-notebook editorial system** built on a single material premise: every slide is yellow legal-pad paper. The paper is rendered through a base color (`{colors.paper}` — saturated cadmium yellow), two soft radial-gradient highlights (upper-left light, lower-right shadow), and a non-optional fractal-noise grain overlay on a `::before` pseudo-element with multiply blend. This stack creates a surface that reads as physical paper under raking light. Without the grain, the system collapses into flat cartoon-yellow; the texture is foundational, not decorative.\n\nThe typeface stack is a deliberate three-voice editorial pairing. **Space Grotesk** at weight 600–700 carries every printed headline and display moment — its tight geometric character at heavy weights reads as a poster or notice-board printout. **Caveat** (a hand-script face) carries every handwritten moment: marginalia, \"me\" voice annotations, step numerals, pill labels, oversized script ordinals. Caveat is the system's personal-voice mechanism — wherever script appears, the tone shifts from \"official notice\" to \"handwritten note in the margin.\" **DM Mono** at weight 500 carries every archival metadata tag: top-chrome brand lockup, footer meta, source attribution, axis labels. The three voices — print headline, handwritten note, archival catalog tag — are non-overlapping, and the system's editorial rhythm depends on them staying in their lanes.\n\nThe palette is anchored to a yellow-and-blue complementary pair. **Paper yellow** (`{colors.paper}` and its three close variants) is every surface. **Ink blue** (`{colors.ink}` — a deep cobalt #1F3A8A) is every text moment, every border, every divider, every pin illustration. **Cream** (`{colors.cream}`) is the card background — a calmer off-white-ivory tone that lets cards visually recede from the loud yellow page. **Cinnabar red** (`{colors.red}` — #C2342B) is used in two specific roles only: the rotated rubber-stamp component and the negative-state pill. Red is never used as text, fill, or border outside these two roles. Tertiary colors (olive, orange, kraft) exist in the token list but are not actively deployed in the source.\n\nDepth is created through a single signature mechanism: **the hard offset shadow**. Every card carries a `5px 6px 0 0 {colors.ink}` (or `4px 5px 0 0`, or `8px 9px 0 0` for the largest quote panel) — a solid ink-blue rectangle offset down and to the right with zero blur. This shadow plus the 4px micro-radius corner plus the 1.5px ink border defines the universal card pattern. Cards look pinned and slightly lifted from the page; the hard offset is the system's only depth language.\n\n**Density philosophy: medium-dense, populated.** Pin & Paper reads as authoritative when its cards are pinned across the page in a clear arrangement — typically 3 to 6 cards per slide, each carrying a heading, a body block, and often a handwritten marginal annotation. A slide with one centered headline and otherwise empty space reads as broken — the system was designed as a populated field-notebook page, and a notebook page that's mostly blank reads as incomplete. Cards should be filled; pins should appear; the handwritten layer should add a marginal note in at least half the slides. The exception is the cover and section-divider slides, which are sparser by convention but compensate with oversized display type (196px) and large pin illustrations.\n\n**Key Characteristics:**\n- Yellow paper background (`{components.paper-surface}`) with two layered radial gradients and a non-optional fractal-noise grain overlay (`{components.paper-grain-overlay}`) on every slide.\n- Deep cobalt-blue ink (`{colors.ink}`) as the universal text, border, divider, and pin-illustration color.\n- Cream card surfaces (`{colors.cream}`) with 1.5px ink borders, 4px micro-radius, and **a hard ink-blue offset shadow** (5px–6px, zero blur).\n- Hand-drawn safety-pin SVG illustrations (`{components.pin-illustration}`) — closed and open variants — pinned to cards at slight rotation angles.\n- Three-voice typography: Space Grotesk for print headlines, Caveat hand-script for personal voice, DM Mono for archival labels.\n- A signature cinnabar-red rotated rubber stamp (`{components.stamp}`) for status marks (CONFIDENTIAL, RECEIVED, etc.).\n- 4px micro-radius on every card; pills go full 999px.\n- Slight panel rotation (0.6 to 1.5 degrees) on alternating cards for the \"pinned-askew\" effect.\n\n## Colors\n\n### Palette\n\n- **Paper Yellow** (`{colors.paper}` — #EFE56A): The dominant surface color. Saturated cadmium yellow. Combined with the layered radial gradients and grain overlay, this is what makes the slide read as physical paper.\n- **Paper Light** (`{colors.paper-2}` — #F5ECA0): Lighter, less saturated yellow. Used as an alternate card fill to break adjacent same-tone cards.\n- **Paper Deep** (`{colors.paper-3}` — #E8D85A): Deeper, more saturated yellow. Used on the `.deep` slide variant for higher-contrast moments.\n- **Paper Extra** (`{colors.paper-extra}` — #FBE6A4): Warm yellow with a hint of cream, used as the most differentiated card variant — often paired with a slight rotation.\n- **Cream** (`{colors.cream}` — #F8F1D6): The card background. A soft off-white ivory that lets cards recede from the loud yellow page. Used on every standard card surface.\n- **Kraft** (`{colors.kraft}` — #C9A66B): A warm tan/kraft tone. Defined in the token system but not actively used in the source.\n- **Ink Blue** (`{colors.ink}` — #1F3A8A): Deep cobalt navy. The universal text, border, divider, pin illustration, and shadow color. The system's structural identity.\n- **Ink Soft** (`{colors.ink-soft}` — #2D4FB8): A slightly lighter cobalt variant; available but rarely used.\n- **Ink Line** (`{colors.ink-line}` — #3457C4): A slightly brighter cobalt for line decorations; rarely used.\n- **Ink Deep** (`{colors.ink-deep}` — #0E1430): Near-black with a slight blue cast. Used for the `.ink` slide variant background.\n- **Cinnabar Red** (`{colors.red}` — #C2342B): The stamp color and the negative-pill border/text color. Used only in two roles — never as a general accent.\n- **Olive** (`{colors.olive}`) and **Orange** (`{colors.orange}`): Defined but inactive. Available as reserved tertiary tones.\n\n### Defaults\n\n- **Default slide surface**: `{components.paper-surface}` — yellow paper with layered gradients. Always.\n- **Default surface grain**: `{components.paper-grain-overlay}` at opacity 0.35 with multiply blend. Non-optional.\n- **Default primary headline color**: `{colors.ink}` on yellow surfaces; `{colors.paper}` on ink surfaces.\n- **Default body text color**: `{colors.ink}` on yellow/cream; `{colors.paper}` on ink (with `opacity: 0.85` for muted lead).\n- **Default card surface**: `{colors.cream}`. Reach for `{colors.paper-2}` or `{colors.paper-extra}` to break up adjacent same-tone cards.\n- **Default border color**: `{colors.ink}` at 1.5px. Always.\n- **Default shadow**: `5px 6px 0 0 {colors.ink}` (hard offset, zero blur). Smaller cards may use `4px 5px 0 0`; the largest quote panel uses `8px 9px 0 0`.\n- **Default label / metadata color**: `{colors.ink}` at opacity 0.65–0.75 for chrome and footer.\n- **Default scribble / handwritten color**: `{colors.ink}`. Caveat is always ink-blue on yellow.\n- **Default stamp color**: `{colors.red}` — the only routine use of red.\n\nCream is the card fill; yellow is the page fill. Mixing these breaks the visual hierarchy: a yellow card on a yellow page disappears; a cream card on a cream page collapses the layered-paper reading.\n\n## Typography\n\n### Font Family\n\nThe system loads three web fonts: **Space Grotesk** (weights 400, 500, 600, 700) carries all printed display and body type; **Caveat** (weights 500, 600, 700) carries all handwritten / personal-voice moments; **DM Mono** (weights 400, 500) carries all archival metadata.\n\nThe emotional register of each face is distinct and load-bearing:\n- Space Grotesk reads as **printed, official, typeset** — the voice of the document itself.\n- Caveat reads as **handwritten, personal, a note in the margin** — the voice of the person reading the document.\n- DM Mono reads as **archival, catalog-card, indexical** — the voice of the system filing the document.\n\nA key inline mixing rule: **a `<small>` element nested inside a Caveat number switches to a smaller Caveat at 60px** for unit suffixes (like `M`, `×`, `%`). The handwritten suffix preserves the hand-counted feeling of the parent numeral.\n\nA second inline mixing rule: **a `.underline` span inside Caveat scribble text gets a 2px solid ink-blue underline** — used to mimic an underline drawn by hand for emphasis.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.scribble-mega}` | 360px | Caveat | 700 | Decorative oversized quote-mark glyph |\n| `{typography.display-mega}` | 196px | Space Grotesk | 700 | Cover headline |\n| `{typography.display-section}` | 168px | Space Grotesk | 700 | Section-divider headline (on ink slide) |\n| `{typography.display-stat}` | 168px | Space Grotesk | 700 | Hero stat figure |\n| `{typography.h1-cta}` | 130px | Space Grotesk | 700 | Closing CTA headline |\n| `{typography.h1-chart}` | 110px | Space Grotesk | 700 | Chart-slide headline |\n| `{typography.h2}` | 96px | Space Grotesk | 700 | Standard agenda or stats headline |\n| `{typography.h2-md}` | 84px | Space Grotesk | 700 | Section heading inside dense slides |\n| `{typography.scribble-lg}` | 70px | Caveat | 700 | Process step numerals |\n| `{typography.scribble-md}` | 60px | Caveat | 700 | CTA step numerals, large script accents |\n| `{typography.quote-text}` | 50px | Space Grotesk | 500 | Pull-quote body |\n| `{typography.h2-sm}` | 50px | Space Grotesk | 700 | Notice-slide headline |\n| `{typography.card-row}` | 44px | Space Grotesk | 600 | Agenda row label |\n| `{typography.card-h3}` | 38px | Space Grotesk | 700 | Card title |\n| `{typography.scribble-sm}` | 38px | Caveat | 600 | Handwritten marginal note on cover, notice-card meta |\n| `{typography.scribble-xs}` | 32px | Caveat | 600 | Small in-card handwritten annotation |\n| `{typography.card-h3-sm}` | 28px | Space Grotesk | 700 | Sub-card heading |\n| `{typography.body}` | 22px | Space Grotesk | 400 | Standard body paragraph |\n| `{typography.body-md}` | 21px | Space Grotesk | 400 | Body inside tables |\n| `{typography.body-sm}` | 19px | Space Grotesk | 400 | Compact body inside dense cards |\n| `{typography.body-list}` | 18px | Space Grotesk | 400 | List item inside a card |\n| `{typography.label-top}` | 18px | DM Mono | 500 | Top-chrome brand lockup and meta |\n| `{typography.label-meta}` | 16px | DM Mono | 500 | Date strip, attribution |\n| `{typography.stamp}` | 16px | DM Mono | 500 | Stamp text |\n| `{typography.label-footer}` | 15px | DM Mono | 500 | Footer chrome |\n\n### Defaults\n\n- **Default primary content headline**: `{typography.h2}` (96px Space Grotesk 700).\n- **Default cover / opening headline**: `{typography.display-mega}` (196px).\n- **Default section-break headline**: `{typography.display-section}` (168px), used on the ink-blue slide variant.\n- **Default body paragraph size**: `{typography.body}` (22px). For dense multi-card slides, drop to `{typography.body-sm}` (19px).\n- **Default card heading**: `{typography.card-h3}` (38px) for standard cards; `{typography.card-h3-sm}` (28px) for sub-cards.\n- **Default stat figure**: `{typography.display-stat}` (168px) — with a Caveat `<small>` suffix for unit (M, %, ×).\n- **Default label / chrome size**: `{typography.label-top}` (18px) for the top chrome; `{typography.label-footer}` (15px) for the bottom.\n- **Default handwritten annotation size**: `{typography.scribble-sm}` (38px) for marginal notes; `{typography.scribble-lg}` (70px) for step numerals.\n- **Default weight for any display element**: 700.\n- **Default weight for body**: 400.\n\nWhen unsure, the canonical card composition is: a 38px Space Grotesk card heading + a 22px Space Grotesk body paragraph + a 32px Caveat handwritten note at the bottom. That three-layer typography rhythm (print headline, print body, handwritten margin note) is the system's most recognizable internal pattern.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every slide carries the paper-grain overlay (`{components.paper-grain-overlay}`).** Without it, the paper aesthetic collapses. The grain is part of the surface, not a decorative flourish.\n- **Every card carries a 1.5px solid ink border, 4px border-radius, AND a hard ink-blue offset shadow (5–8px offset, zero blur).** All three together — missing the shadow makes the card feel un-pinned; missing the border makes it feel un-printed.\n- **Caveat is always ink-blue** (`{colors.ink}`) on yellow/cream surfaces, and always paper-yellow on ink surfaces. Caveat in any other color does not exist.\n- **Pin illustrations (`{components.pin-illustration}`) are always rotated off-axis** (typical range: -14° to +20°). A pin rendered at 0° rotation breaks the hand-pinned aesthetic.\n- **The stamp component (`{components.stamp}`) is always rotated -4°** with a 3px solid red border, red mono text, and zero radius. Stamp text is always DM Mono uppercase.\n- **Every Space Grotesk display headline uses negative letter-spacing** in the -0.02 to -0.04em range. Tighter for larger sizes.\n- **Hand-script numerals (Caveat at 60–70px) are the only step-numbering mechanism** in process diagrams and ordered CTA lists. Don't substitute Space Grotesk numerals.\n- **The top-chrome lockup includes the inline `#mark` SVG glyph** alongside the brand text. The glyph is part of the brand identity, not optional.\n\n### Typography Principles\n\nThe rhythm of Pin & Paper is **printed headline + printed body + handwritten margin note + mono archival tag** — four voices, each in its assigned face. Switching any voice (e.g., setting a marginal note in Space Grotesk, or a body paragraph in Caveat) collapses the system's editorial register.\n\nItalic letterforms are not used. Underline is used only on `.underline` spans inside Caveat scribble text (2px solid ink). Bold inside body is rare; emphasis is achieved either by switching to a heavier Space Grotesk weight at a larger size, or by adding a Caveat handwritten annotation below.\n\n## Layout\n\n### Canvas System\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component. All sizes are pixel-fixed; the stage handles proportional scaling to the browser viewport.\n\nMost slides use **absolute positioning** with edge-anchored elements (`left: 64px`, `right: 64px`, `top: 110px`, `bottom: 100px`) for the content stage, plus targeted grid layouts for card rows. Pin illustrations are absolutely-positioned overlays on top of card stacks.\n\n### Padding and Anchoring\n\n| Anchor | Value | Use |\n|---|---|---|\n| `pad-edge` | 64px | Left and right edge insets on every slide |\n| `pad-top` | 110px | Top inset for content (below the 44px top chrome) |\n| `pad-bottom` | 90px | Bottom inset for content (above the 36px footer chrome) |\n| `grid-gap-sm` | 22px | Process card gap |\n| `grid-gap-md` | 28px | Notice / stats card gap |\n| `grid-gap-lg` | 32px | Notecard grid gap |\n\nCards typically use `28px–36px` internal padding on the top and `22px–28px` on the sides, with `22px–28px` on the bottom.\n\n### Chrome Frame\n\nEvery slide carries a **top chrome band** at 44px top / 64px sides — a brand lockup on the left (with inline #mark SVG glyph) and a meta-tag pair on the right. The chrome is DM Mono uppercase at 18px with 0.12em tracking.\n\nEvery slide also carries a **footer chrome** at 36px bottom / 64px sides — typically a source attribution on the left and a page-position marker on the right. The footer is DM Mono uppercase at 15px with 0.14em tracking at 65% opacity.\n\nOn ink-blue slides, both chromes flip color to `{colors.paper}` and the grain overlay shifts to opacity 0.25 with screen blend mode.\n\n## Depth and Elevation\n\n### Hard Offset Shadow (Primary Depth)\n\nThe system's only depth treatment is the **hard ink-blue offset shadow** on every card: `5px 6px 0 0 {colors.ink}` (standard), `4px 5px 0 0` (compact), `6px 7px 0 0 rgba(239,229,106,.25)` (chart-card with yellow-tinted shadow), or `8px 9px 0 0` (the largest quote panel). The shadow is always solid, always offset down-right, always zero blur. There are no blurred drop shadows anywhere in the system.\n\n### Paper Texture Depth\n\nThe fractal-noise grain (`{components.paper-grain-overlay}`) at opacity 0.35 with multiply blend adds a subtle perceived depth — the texture creates micro-variation that reads as paper fiber. This is depth at the surface level, not at the element level.\n\n### Pin Illustrations as Depth Signal\n\nThe hand-drawn safety-pin SVGs positioned at the top edge of cards (typically `position: absolute; top: -14 to -22px; left: 28–90px; transform: rotate(-6 to -12deg)`) create the visual illusion that the card has been pinned to the page. The pin is the depth narrative: a pin appearing at the top of a card explains why the card has a shadow and a rotation.\n\n### Slight Rotation on Alternate Cards\n\nSome card variants (`{components.pinned-card-alt2}`) carry a slight rotation (`transform: rotate(0.6deg)` to `rotate(1.5deg)`) that reads as a sheet of paper pinned slightly askew. This is a deliberate imperfection — used sparingly (one or two cards per slide), not on every card.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Stamp, pin glyphs, page numbers |\n| 4px | Cards, panels, table containers, image wrappers — the system's micro-radius |\n| 999px | Pills only |\n\nThe system uses a **4px micro-radius** on every card — small enough to read as \"printed corner with slight bleed\" rather than rounded UI. Pills are the only round shape; pills with the unusual treatment of Caveat handwritten letterforms inside.\n\n### Border Weights\n\n- **1.5px solid `{colors.ink}`** — the universal card border. Used on every cream card, every table container, every panel.\n- **1.5px dashed rgba(31,58,138,.45)** — used as a dotted separator between agenda rows, between CTA steps, and at the top of source notes inside cards. Adds the \"graph-paper line break\" feel.\n- **3px solid `{colors.red}`** — used only on the stamp component (`{components.stamp}`).\n- **2px solid `{colors.ink}`** — used only on the Caveat `.underline` span treatment.\n\n### Decorative Element Types\n\n**Pin illustration (`{components.pin-illustration}`)** — The defining visual signature. A hand-drawn safety-pin SVG (two variants: closed and open) rendered in `currentColor` and rotated at a slight angle. Pins appear at the top of cards, as decorative overlays on the cover, as oversized accent illustrations on section dividers (up to 640px wide), and pinned to agenda rows. The pin is the system's voice — wherever a pin appears, the page reads as a pinned document.\n\n**Stamp (`{components.stamp}`)** — A cinnabar-red rotated rubber-stamp tag with 3px solid red border, red mono uppercase text, and -4° rotation. Used for status marks (CONFIDENTIAL, RECEIVED). The stamp is one of the two roles where red is used in this system.\n\n**Scribble (`{components.scribble}`)** — A Caveat hand-script text block, often rotated -1.5° to -3° for the \"handwritten\" feel. Used for marginal notes, \"me\" voice annotations, large script accents. May include `.underline` spans for handwritten emphasis.\n\n**Pinned card (`{components.pinned-card}`)** — The universal card pattern: cream fill, 1.5px ink border, 4px micro-radius, 5–6px hard ink offset shadow. Often carries a pin illustration overlapping its top edge. Three alternate fill colors break up adjacent same-tone cards.\n\n**Top chrome lockup** — The brand text accompanied by an inline #mark SVG glyph (a circle on the right with an arrow shaft pointing left). The glyph is part of the brand's identity.\n\n**Dashed border separators** — Used as inter-row dividers in agenda lists, CTA step lists, and inside cards as source-attribution separators. Always `1.5px dashed rgba(31,58,138,.45)`.\n\n**Caveat pills (`{components.pill-yes}`, `{components.pill-part}`)** — Pills with hand-script letterforms inside (Caveat 28px) on solid or paper-tone fills. The mismatch between rounded UI shape and handwritten text is intentional.\n\n**Process / CTA script numerals** — Caveat 60–70px ordinals inside cards or list rows. The hand-script number signals \"step counted by hand, not by an algorithm.\"\n\n**Oversized script quote-mark** — A Caveat at 360px rendered as the opening glyph on the quote slide. The script size pushes into the realm of decoration; the glyph is so large that it functions as composition, not punctuation.\n\n## Do's and Don'ts\n\n### Do\n- Apply the paper-grain overlay (`{components.paper-grain-overlay}`) to every slide. The texture is foundational to the paper reading.\n- Set every card with the universal pattern: 1.5px ink border + 4px radius + hard ink offset shadow. The three together define the card.\n- Use Space Grotesk weight 700 in mixed case (with negative letter-spacing) for every printed headline.\n- Use Caveat for every handwritten or personal-voice moment — marginal notes, step numerals, pill text. The script is the system's \"me\" voice.\n- Use DM Mono uppercase at 0.12–0.18em tracking for every archival tag, chrome label, and footer string.\n- Rotate every pin illustration off-axis (typical range -14° to +20°). A pin at 0° rotation breaks the hand-pinned aesthetic.\n- Populate cards. The system reads as authoritative when 3–6 cards are pinned across the page, each with heading + body + marginal note.\n- Use the rotated stamp component (`{components.stamp}`) for status marks. The -4° rotation is its identity.\n- Pair a Caveat step numeral with a Space Grotesk card heading inside process and CTA lists. The script numeral is the system's ordering voice.\n- Use a slight rotation (0.6° to 1.5°) on one card per slide for the \"pinned-askew\" effect. Don't rotate every card.\n\n### Don't\n- Don't omit the paper-grain overlay. Without it, the surface collapses into flat cartoon-yellow.\n- Don't substitute a different list marker for the Caveat hand-script numeral. Step numbers are always hand-script.\n- Don't use red outside the stamp and the negative pill. Red is a two-role accent only.\n- Don't render pin illustrations at 0° rotation. The off-axis tilt is what makes them read as physical pins.\n- Don't use blurred shadows. Cards use hard ink-blue offset shadows only.\n- Don't fill a card with yellow on the yellow page surface. Cards are cream; the contrast between cream cards and yellow page is the layered-paper signal.\n- Don't put body copy in Caveat. The hand-script is for marginal notes and accents, never paragraphs.\n- Don't put headline copy in DM Mono. Mono is the archival voice, not the editorial voice.\n- Don't use radius larger than 4px on cards. The micro-radius is the printed-corner signal; larger radius collapses into generic UI.\n- Don't compose a near-empty slide. The system was designed as a populated notebook page; sparseness reads as broken.\n\n## Responsive Behavior\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component (loaded via `deck-stage.js`). The stage handles proportional scaling to the browser viewport — all pixel-fixed sizes inside the canvas scale uniformly.\n\n### Presenter Behavior\n- The `<deck-stage>` component manages navigation, scaling, and presenter chrome.\n- Keyboard, touch, and mouse-wheel navigation are handled by the stage component.\n- The slide canvas is constant 1920×1080 regardless of viewport size.\n\n### Print Behavior\nPrint export depends on the deck-stage component's print handling. The fractal-noise grain overlay may not render in all PDF exports — test before assuming texture transfers.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / headline (Space Grotesk 700) | Space Grotesk | 龙藏体 Long Cang | 400 (only weight available) |\n| Body (Space Grotesk 400) | Space Grotesk | 霞鹜文楷 LXGW WenKai | 400 |\n| Handwritten / scribble (Caveat) | Caveat | 龙藏体 Long Cang | 400 |\n| Label / mono (DM Mono UPPERCASE tracked) | DM Mono | 霞鹜文楷 LXGW WenKai | 400 (do not force monospace on CJK) |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. Space Grotesk display tokens become `\"Space Grotesk, Long Cang, Helvetica Neue, Arial, sans-serif\"`; Space Grotesk body tokens become `\"Space Grotesk, LXGW WenKai, Helvetica Neue, Arial, sans-serif\"`; Caveat tokens become `\"Caveat, Long Cang, cursive\"`. Latin glyphs render in the original face; CJK falls through automatically.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Caveat:wght@500;600;700&family=DM+Mono:wght@400;500&family=Long+Cang&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-lxgw-wen-kai-regular/font.css\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPin & Paper is the strongest fit for Chinese in this entire library. The yellow legal-pad surface, the cobalt ink, the safety-pin illustrations, and the field-notebook register all translate naturally into Chinese — the system reads as a 笔记本 / 手账 page in either script.\n\n**龙藏体 Long Cang** is a hard-pen handwritten Chinese face — the brushless, ballpoint-on-paper equivalent of Chinese handwriting. It is the perfect Chinese substitute for the Space Grotesk + Caveat dual-role headline-and-scribble voices in this system. Long Cang at large sizes (96–168px) reads as a confident handwritten field-note headline — exactly what Pin & Paper is trying to evoke. Use it for both display headlines and the Caveat-equivalent scribble layer. Layering two visually-distinct hand-script faces in pure Chinese is unnecessary; Long Cang carries both roles.\n\n**霞鹜文楷 LXGW WenKai** is a kaishu-derived body face designed for screen reading — it carries the warmth and slight irregularity of handwritten 楷书 but stays legible at body sizes (18–22px). It is the strongest counterweight to Long Cang's handwritten display and matches the system's \"field-notebook personal voice\" register exactly. Set every Chinese body paragraph in LXGW WenKai 400.\n\nThe pin illustrations, the rotated red stamp, the cream cards with hard ink offset shadows — all transfer unchanged. The Caveat pill component (handwritten letters inside a rounded pill) translates to Long Cang inside the same pill shape and reads as charmingly hand-counted in Chinese.\n\nThe system's most recognizable rhythm (printed headline + printed body + handwritten margin note) becomes (Long Cang headline + LXGW WenKai body + Long Cang margin note in a slightly different size). The voice distinction in pure Chinese comes from size, rotation, and color rather than from face swap — Long Cang at 38px rotated -3° in the margin reads clearly as \"marginal annotation\" against Long Cang at 96px upright in the headline.\n\nDM Mono uppercase tracked labels do not transfer to CJK. Chinese metadata in the top chrome should use LXGW WenKai 400 mixed case with letter-spacing 0. Pure Latin metadata (date strings, source URLs) stays in DM Mono.\n\n### Known CJK Gap\n\nLong Cang and LXGW WenKai are visually adjacent — both carry handwritten kaishu DNA. The three-voice editorial pairing (print / handwritten / archival) collapses into a two-voice pairing in pure Chinese (handwritten-display / handwritten-body / archival-Latin-only). This is not a bug — pure-Chinese decks in Pin & Paper read as more uniformly hand-touched than their Latin counterparts, which is actually closer to the field-notebook aesthetic the system aims for.\n\n## Iteration Guide\n\n1. Every new slide background is the paper-surface (`{components.paper-surface}`) with the grain overlay on `::before`. Don't skip the texture.\n2. Every new card uses the universal pattern: cream fill, 1.5px ink border, 4px radius, hard ink offset shadow. Don't customize.\n3. Every new headline is Space Grotesk weight 700 mixed case with negative letter-spacing. Don't reach for a different weight.\n4. Every new step numeral or ordered-list marker is Caveat hand-script at 60–70px. Don't substitute a numeric font.\n5. Every new label or metadata tag is DM Mono uppercase with 0.12–0.18em tracking.\n6. Every new pin illustration is rotated off-axis. Choose closed (#pin) for a \"secured\" feel; open (#pin-open) for a \"lifted\" feel.\n7. To add personal voice to a card, append a Caveat marginal note at the bottom — usually with a `.underline` span for handwritten emphasis.\n8. To mark a card with status, place the stamp component (`{components.stamp}`) at a slight rotation in the upper area of the card.\n9. To break up adjacent same-tone cards, alternate between cream, paper-2, and paper-extra fills. Add a slight rotation on one card for variety.\n10. To use the ink-blue surface variant (e.g., a section divider), flip text color to `{colors.paper}` and reduce grain opacity to 0.25 with screen blend mode.\n\n## Known Gaps\n\n- The system depends on a `<deck-stage>` web component loaded via `deck-stage.js`. Without it, the 1920×1080 canvas will not scale and slides will render at native pixel size.\n- The pin illustrations are embedded as inline SVG symbol definitions at the top of the document. New slides that need pin illustrations must reference them via `<use href=\"#pin\">` or `<use href=\"#pin-open\">` — and the symbol definitions must be present in the document.\n- The fractal-noise grain overlay uses a data-URI SVG with `feTurbulence`. Some browsers (especially older Safari versions) may render the noise inconsistently or skip it during PDF export.\n- The Caveat font carries hand-script ligatures and may render inconsistently between operating systems. Default fallback is `cursive` which varies wildly across systems.\n- The `kraft`, `olive`, and `orange` color tokens are defined but inactive in the source. They are reserved for future extension but have no current role.\n- The pill-yes component uses Caveat letterforms inside a rounded pill shape — this is intentionally unusual but may read as a UI bug to viewers unfamiliar with the system.\n- The paper-grain overlay uses `mix-blend-mode: multiply` on standard slides and `mix-blend-mode: screen` on ink slides. The blend mode flip is essential — using multiply on the dark ink slide turns the slide muddy.\n- The bar chart and line chart components use SVG with manually-positioned points. There is no data-binding layer.\n- The hand-drawn pin SVG is a fixed-path illustration. Re-coloring works via `currentColor`, but the pin proportions cannot be adjusted without editing the SVG path data.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pin-and-paper/preview.md":"# Pin & Paper Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/pin-and-paper/design.md`\n- Preview card: `bold-template-pack/templates/pin-and-paper/preview.md`\n\n## Selection Metadata\n\n- Slug: `pin-and-paper`\n- Tagline: Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture.\n- Mood: crafted, handmade, warm, thoughtful, literary\n- Tone: literary, intimate, warm, grounded\n- Formality: medium\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel hand-crafted, warm, and literary: qualitative research findings, founder reflections, longform brand stories, workshop debriefs. The signature safety-pin illustrations and paper-grain texture make it especially good for any deck — including tech or business — that wants personality and warmth over polish.\n- Avoid for: Decks that need to feel digital-native polished or rigorously data-driven — handwritten Caveat is intentionally informal.\n\n## Visual Snapshot\n\nA field-notebook editorial system rendered as yellow legal-pad paper with deep cobalt-blue ink. Every slide carries a fractalnoise paper-grain overlay, hand-drawn safety-pin SVG illustrations that \"pin\" cards to the page, and a hand-script Caveat face for personal annotations. Space Grotesk at heavy weights carries the printed headlines; DM Mono handles archival labels. The aesthetic borrows from analog field reports, vintage public-notice boards, and the diary pages of scientific notebooks — closer to a lab journal pinned to a corkboard than a polished deck.\n\nPin & Paper is a field-notebook editorial system built on a single material premise: every slide is yellow legal-pad paper. The paper is rendered through a base color ({colors.paper} — saturated cadmium yellow), two soft radial-gradient highlights (upper-left light, lower-right shadow), and a non-optional fractal-noise grain overlay on a ::before pseudo-element with multiply blend. This stack creates a surface that reads as physical paper under raking light. Without the grain, the system collapses into flat cartoon-yellow; the texture is foundational, not decorative.\n\n## Preview Ingredients\n\n- Palette: paper #EFE56A; paper-2 #F5ECA0; paper-3 #E8D85A; paper-extra #FBE6A4; cream #F8F1D6; kraft #C9A66B; ink #1F3A8A; ink-soft #2D4FB8\n- Typography: Space Grotesk; Caveat; DM Mono\n- Signature move: Yellow paper background ({components.paper-surface}) with two layered radial gradients and a non-optional fractal-noise grain overlay ({components.paper-grain-overlay}) on every slide.\n- Signature move: Deep cobalt-blue ink ({colors.ink}) as the universal text, border, divider, and pin-illustration color.\n- Signature move: Cream card surfaces ({colors.cream}) with 1.5px ink borders, 4px micro-radius, and a hard ink-blue offset shadow (5px–6px, zero blur).\n- Signature move: Hand-drawn safety-pin SVG illustrations ({components.pin-illustration}) — closed and open variants — pinned to cards at slight rotation angles.\n- Signature move: Three-voice typography: Space Grotesk for print headlines, Caveat hand-script for personal voice, DM Mono for archival labels.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pink-script/design.md":"---\nversion: alpha\nname: Pink Script (After Hours)\ndescription: A nocturnal couture editorial system rendered in hot fuchsia ink on dim warm-black paper, with a soft film-grain overlay and a hairline interior frame. DM Serif Display carries every script and editorial moment at sizes up to 600px; Inter at weight 300 carries the body voice; JetBrains Mono carries the boutique-catalog metadata. The aesthetic borrows from glossy fashion magazine spreads, late-night perfume advertising, and the editorial pages of high-end zines — closer to a Maison's seasonal lookbook than a startup deck.\n\ncolors:\n  ink-deep: \"#060507\"\n  ink-violet: \"#0F0D11\"\n  paper-blush: \"#F5EDF1\"\n  pink: \"#ED3D8C\"\n  pink-light: \"#FF66A8\"\n  pink-deep: \"#B81D67\"\n  line-pink: \"rgba(237, 61, 140, 0.32)\"\n  mute-paper: \"rgba(245, 237, 241, 0.55)\"\n  hair-paper: \"rgba(245, 237, 241, 0.14)\"\n\ncolor-aliases:\n  c-bg: ink-deep\n  c-fg: paper-blush\n  c-accent: pink\n  c-line: line-pink\n\ntypography:\n  script-huge:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 540px\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.01em\n    color: \"{colors.pink}\"\n  script-section:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 600px\n    fontWeight: 400\n    lineHeight: 0.82\n    letterSpacing: -0.02em\n    color: \"{colors.pink}\"\n  script-giant:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 360px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.pink}\"\n  script-cover:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 280px\n    fontWeight: 400\n    lineHeight: 1.02\n    letterSpacing: -0.015em\n    color: \"{colors.pink}\"\n  script-large:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 220px\n    fontWeight: 400\n    lineHeight: 1.04\n    color: \"{colors.pink}\"\n  script-med:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 156px\n    fontWeight: 400\n    lineHeight: 1.04\n    color: \"{colors.pink}\"\n  script-sm:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 132px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.pink}\"\n  serif-cta:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 1.04\n    letterSpacing: -0.015em\n    color: \"{colors.paper-blush}\"\n  serif-h2:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 132px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.paper-blush}\"\n  serif-quote:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 92px\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n    color: \"{colors.paper-blush}\"\n  serif-chart-h:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 90px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.paper-blush}\"\n  serif-section-h:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 88px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.paper-blush}\"\n  serif-stat:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 116px\n    fontWeight: 400\n    lineHeight: 0.9\n    color: \"{colors.pink}\"\n  serif-toc-num:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 64px\n    fontWeight: 400\n    lineHeight: 1.0\n    color: \"{colors.pink}\"\n  serif-toc-title:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 56px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.paper-blush}\"\n  serif-quote-attr:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 48px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.paper-blush}\"\n  serif-process-h:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 38px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.paper-blush}\"\n  serif-matrix-label:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 32px\n    fontWeight: 400\n    lineHeight: 1.2\n    color: \"{colors.paper-blush}\"\n  body:\n    fontFamily: \"Inter, system-ui, sans-serif\"\n    fontSize: 24px\n    fontWeight: 300\n    lineHeight: 1.55\n    color: \"{colors.paper-blush}\"\n  body-muted:\n    fontFamily: \"Inter, system-ui, sans-serif\"\n    fontSize: 22px\n    fontWeight: 300\n    lineHeight: 1.5\n    color: \"{colors.mute-paper}\"\n  body-toc-desc:\n    fontFamily: \"Inter, system-ui, sans-serif\"\n    fontSize: 24px\n    fontWeight: 300\n    lineHeight: 1.4\n    color: \"{colors.mute-paper}\"\n  mono-runner:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  mono-kicker:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 22px\n    fontWeight: 400\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.pink}\"\n  mono-label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 22px\n    fontWeight: 400\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.paper-blush}\"\n  mono-cover-pre:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 28px\n    fontWeight: 400\n    letterSpacing: 0.42em\n    textTransform: uppercase\n    color: \"{colors.paper-blush}\"\n  mono-pill:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    fontWeight: 400\n    letterSpacing: 0.08em\n    textTransform: uppercase\n\nspacing:\n  edge-x: 60px\n  edge-top-chrome: 60px\n  edge-bottom-chrome: 60px\n  content-top: 140px\n  content-bottom: 140px\n  inner-frame-inset: 36px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  slide-surface:\n    background: \"radial-gradient(ellipse 90% 70% at 30% 30%, #1A1218 0%, #0A0709 55%, #050306 100%)\"\n    description: \"Universal dark surface — radial ellipse from a slightly warmer #1A1218 in the upper-left fading to near-black in the lower-right. The off-center light source is part of the system's identity.\"\n  film-grain:\n    selector: \".slide::before\"\n    background: \"fractalNoise SVG via data URI, baseFrequency=0.9, octaves=2\"\n    opacity: 0.08\n    mixBlendMode: screen\n    description: \"Subtle film grain overlay on every slide via ::before. Opacity 0.08 with screen blend — barely visible but reads as photographic grain rather than digital flatness.\"\n  hairline-frame:\n    selector: \".slide::after\"\n    position: \"absolute; inset: 36px\"\n    border: \"1px solid {colors.hair-paper}\"\n    description: \"1px paper-blush-at-14%-opacity interior frame inset 36px from each slide edge. Always present. Functions as the editorial border of the magazine page.\"\n  runner:\n    position: \"absolute; top: 60px; left: 60px; right: 60px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    description: \"Top metadata runner — brand name on left (colored pink), section / chapter tag on right (muted paper-blush).\"\n  footer:\n    position: \"absolute; bottom: 60px; left: 60px; right: 60px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    description: \"Bottom metadata runner — source / confidentiality on left, page-position (e.g. '03 / 09') on right. Page-position has paper-blush base text with a pink ::em for the current number.\"\n  pink-rule:\n    height: 1px\n    background: \"{colors.pink}\"\n    opacity: 0.45\n    description: \"Hairline pink rule for soft section separators.\"\n  hair-rule:\n    height: 1px\n    background: \"{colors.paper-blush}\"\n    opacity: 0.25\n    description: \"Hairline paper rule for muted section separators.\"\n  pink-glow:\n    textShadow: \"0 0 80px rgba(237, 61, 140, 0.18)\"\n    description: \"Soft pink halo behind large script titles. Applied via text-shadow on hero serif text only.\"\n  pink-glow-mega:\n    textShadow: \"0 0 120px rgba(237, 61, 140, 0.22)\"\n    description: \"Stronger pink halo for section-divider mega numerals.\"\n  callout-rail:\n    borderLeft: \"1px solid {colors.pink}\"\n    paddingLeft: 24px\n    description: \"Pink left rule with right-aligned content — used as a callout container beside a chart, beside a chapter explanation.\"\n  matrix-cell:\n    padding: \"16px 24px\"\n    borderBottom: \"1px solid {colors.line-pink}\"\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: 22px\n    fontWeight: 300\n    color: \"{colors.paper-blush}\"\n    description: \"Comparison matrix cell. Rows are separated by hairline pink-at-32% rules; columns are gap-separated, no vertical borders.\"\n  matrix-cell-us:\n    background: \"rgba(237, 61, 140, 0.08)\"\n    description: \"Highlighted matrix row variant — soft pink wash to mark the 'our' column.\"\n  pill-outline:\n    border: \"1px solid {colors.pink}\"\n    color: \"{colors.pink}\"\n    padding: \"6px 14px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    description: \"Hollow pink pill — 1px pink border with pink mono text. The default pill state.\"\n  pill-solid:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink-deep}\"\n    border: \"1px solid {colors.pink}\"\n    fontWeight: 500\n    description: \"Solid pink pill — pink fill, deep-ink text. Affirmative / featured state.\"\n  pill-dim:\n    borderColor: \"{colors.hair-paper}\"\n    color: \"{colors.mute-paper}\"\n    description: \"Dim pill — muted paper border, muted paper text. The de-emphasized state.\"\n  qr-tile:\n    width: 180px\n    height: 180px\n    background: \"{colors.paper-blush}\"\n    padding: 12px\n    description: \"QR-code container — solid paper-blush square with 12px white padding around the SVG QR. The only large light-surface element in the system.\"\n  stat-row:\n    display: \"grid; columns: 240px 1fr\"\n    borderBottom: \"1px solid {colors.hair-paper}\"\n    paddingBottom: 16px\n    description: \"Stat row pattern — large pink serif figure on the left (with a paper-blush superscript unit) paired with a mono label and Inter description on the right. Rows are separated by 1px paper hairline.\"\n  callout-num:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 120px\n    lineHeight: 0.9\n    color: \"{colors.pink}\"\n    description: \"Chart callout number — large pink serif numeral with smaller paper-colored unit suffix.\"\n  arrow-glyph:\n    width: 24px\n    height: 24px\n    color: \"{colors.pink}\"\n    description: \"Small pink right-arrow SVG used between process steps.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPink Script is a **nocturnal couture editorial system** built on a single atmospheric premise: a deep warm-black surface lit from the upper-left by a slightly warmer #1A1218 ellipse that fades to near-black across the lower-right. The off-center light source reads as a studio softbox catching one corner of a magazine spread. Over this, a subtle film-grain overlay at 8% opacity with screen blend adds the photographic graininess of late-night editorial photography. Inside this surface sits a 1px hairline interior frame (paper-blush at 14% opacity, inset 36px from each edge) — the editorial border of every page. Without the lit gradient, the film grain, and the interior frame, the system collapses into flat dark UI.\n\nThe typeface stack is a deliberate three-voice editorial pairing. **DM Serif Display** carries every editorial moment — script titles (treated as the system's \"pink script\"), serif headlines, stat figures, quote text. It runs at weight 400 only; the face has just one weight and that's the system's display voice. The serif scales freely from 32px (table labels) all the way up to 600px (section-divider numerals). **Inter** at weight 300 carries every body paragraph, lead, description, and caption — the ultra-light geometric sans is the system's calm prose voice. **JetBrains Mono** at weight 400 carries every label, kicker, page number, axis tag, runner, and footer string — always uppercase with at least 0.08em positive tracking.\n\nThe palette is anchored to a single signature: **hot pink fuchsia** (`{colors.pink}` — #ED3D8C) against deep warm-black (`{colors.ink-deep}` — #060507). The pink is the entire editorial accent system; it appears as script title color, as kicker color, as chart line color, as pill border, as inline `<em>` switch inside paper-blush headlines, as callout numerals, as rule color, and as the soft halo (text-shadow glow) behind hero script titles. **Paper-blush** (`{colors.paper-blush}` — #F5EDF1) is the secondary text color — used for editorial sans-serif headlines, paragraph copy, and any moment that should read as ink rather than highlight. Muted paper at 55% opacity handles secondary text; hairline paper at 14% handles separators and the interior frame.\n\nDepth is created through three layered mechanisms: the **off-center radial gradient surface** (lit from the upper-left), the **subtle film-grain overlay** (8% opacity, screen blend, adds photographic texture), and the **pink halo text-shadow** on hero script titles (a soft 80–120px glow that simulates the light bleed of large neon-saturated type on photographic paper). There are no drop shadows on any element; the depth is atmospheric and photographic, not structural.\n\n**Density philosophy: sparse-medium with one hero moment.** Pink Script reads as elegant when a single oversized script anchors the slide and the rest is generous negative space punctuated by 2–4 small editorial fragments (a runner, a kicker, a paragraph, a footer). A slide with the hero script taking up 60–70% of the canvas and the supporting copy quietly orbiting the remaining margin is correct. Cramming the canvas with multiple equally-weighted regions breaks the late-night magazine feeling. The exception is the stats slide (5 stat rows side-by-side), the comparison matrix (full-grid table), and the system slide (multiple panels) — these slides are denser by design because the editorial purpose is reference, not poetry. Process and TOC slides are populated but always hierarchical: a giant script header dominates, with smaller card rows orbiting beneath.\n\n**Key Characteristics:**\n- Deep warm-black surface (`{components.slide-surface}`) lit from the upper-left by a radial gradient ellipse.\n- A subtle film-grain overlay (`{components.film-grain}`) on every slide — opacity 0.08, screen blend.\n- A 1px paper-blush interior frame (`{components.hairline-frame}`) inset 36px from each edge, present on every slide.\n- Hot fuchsia pink (`{colors.pink}`) is the single chromatic accent — used as script color, kicker color, line color, pill outline, inline emphasis, and the soft halo behind hero scripts.\n- DM Serif Display carries every editorial moment, scaling from 32px to 600px. There is no second display face.\n- Inter at weight 300 carries every body paragraph — ultra-light sans is the system's prose voice.\n- JetBrains Mono uppercase at 0.08em+ tracking carries every label, page number, and runner string.\n- Top runner and bottom footer chromes appear on every slide; the runner brand text is pink, everything else in chrome is muted paper-blush.\n- The inline `<em>` element switches paper-blush serif headlines to pink — the system's editorial emphasis mechanism.\n\n## Colors\n\n### Palette\n\n- **Ink Deep** (`{colors.ink-deep}` — #060507): The base surface color. A near-black with a faint warm shift. Combined with the radial gradient, this anchors the dark editorial surface.\n- **Ink Violet** (`{colors.ink-violet}` — #0F0D11): A slightly lifted dark with a violet cast. Reserved alternate dark — available but rarely used in current slide types.\n- **Paper Blush** (`{colors.paper-blush}` — #F5EDF1): A warm off-white with a faint pink undertone. The primary editorial text color, the QR-tile background, and the secondary highlight surface. Reads as paper rather than pure white.\n- **Pink** (`{colors.pink}` — #ED3D8C): Hot fuchsia. The system's single chromatic accent. Used as the script title color, kicker color, inline `<em>` color, callout numeral color, rule color, chart line color, pill outline color, and the source color for the halo text-shadow.\n- **Pink Light** (`{colors.pink-light}` — #FF66A8): A brighter pink. Defined but not used in current slide types.\n- **Pink Deep** (`{colors.pink-deep}` — #B81D67): A darker pink. Defined but not used in current slide types.\n- **Line Pink** (`{colors.line-pink}` — rgba(237,61,140,0.32)): Pink at 32% opacity for table row dividers and chart axis lines.\n- **Mute Paper** (`{colors.mute-paper}` — rgba(245,237,241,0.55)): Paper-blush at 55% for muted body text and metadata.\n- **Hair Paper** (`{colors.hair-paper}` — rgba(245,237,241,0.14)): Paper-blush at 14% for the interior hairline frame, dim pill borders, and toc-row dividers.\n\n### Defaults\n\n- **Default slide surface**: `{components.slide-surface}` — the lit warm-black radial gradient. Always.\n- **Default film grain**: `{components.film-grain}` at opacity 0.08 with screen blend. Non-optional.\n- **Default interior frame**: `{components.hairline-frame}` at 1px paper-blush 14%. Non-optional.\n- **Default primary headline color**: For a hero script moment, `{colors.pink}`. For an editorial headline that should read as ink (not highlight), `{colors.paper-blush}`.\n- **Default body text color**: `{colors.paper-blush}` for primary copy; `{colors.mute-paper}` for muted lead and description.\n- **Default kicker color**: `{colors.pink}`. The eyebrow label is always pink.\n- **Default label / metadata color**: `{colors.mute-paper}` for runner, footer, and metadata.\n- **Default line / divider color**: `{colors.pink}` at 45% opacity for soft pink rules; `{colors.hair-paper}` for muted hairlines.\n- **Default emphasis mechanism inside a paper-blush headline**: wrap in `<em>` to switch that word to `{colors.pink}` (font-style stays upright).\n- **Default pill state**: outline (`{components.pill-outline}`) — pink border, pink text.\n- **Default chart series**: pink line for primary; muted paper-blush dashed for secondary.\n\nThe pink is the only chromatic color in regular use; the other pink variants (Pink Light, Pink Deep) are reserved. Don't introduce a second chromatic accent — Pink Script's identity is that it is monochromatically pink.\n\n## Typography\n\n### Font Family\n\nThe system loads three web fonts: **DM Serif Display** (weight 400, italic 0 only) carries every editorial / display moment from 32px up to 600px; **Inter** (weights 300, 400, 500, 600) carries every body paragraph and lead; **JetBrains Mono** (weights 400, 500) carries every label, runner, footer, and metadata string.\n\nThe emotional register of each face is distinct:\n- DM Serif Display reads as **editorial, perfume-magazine, late-night couture** — the face has elegant high-contrast strokes and the system uses it for every moment that should feel literary or magazine-typeset.\n- Inter at weight 300 reads as **calm, contemporary, neutrally elegant** — the ultra-light weight matches the editorial tone without competing with the serif.\n- JetBrains Mono reads as **archival, boutique-catalog, edition-numbered** — the mono uppercase voice handles edition numbers, page positions, runner brand text, and section tags.\n\nA key inline mixing rule: **the `<em>` element inside a DM Serif Display headline switches color to `{colors.pink}`** (font-style normalized to upright). This is the system's primary headline emphasis — pink ink inside paper-blush serif text.\n\nA second inline mixing rule: **a `<sup>` element inside a stat figure renders at ~36px in `{colors.paper-blush}`** with a slight top-padding offset — used for unit suffixes (%, ×, M).\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.script-section}` | 600px | DM Serif Display | 400 | Section-divider mega numeral |\n| `{typography.script-huge}` | 540px | DM Serif Display | 400 | Hero script in a feature display position |\n| `{typography.script-giant}` | 360px | DM Serif Display | 400 | Large editorial script title |\n| `{typography.script-cover}` | 280px | DM Serif Display | 400 | Cover script title |\n| `{typography.script-large}` | 220px | DM Serif Display | 400 | TOC primary script |\n| `{typography.script-med}` | 156px | DM Serif Display | 400 | Process slide primary headline |\n| `{typography.serif-cta}` | 140px | DM Serif Display | 400 | Closing CTA headline (paper-blush color) |\n| `{typography.script-sm}` | 132px | DM Serif Display | 400 | Stat-slide headline, matrix headline |\n| `{typography.serif-stat}` | 116px | DM Serif Display | 400 | Stat row figure |\n| `{typography.callout-num}` | 120px | DM Serif Display | 400 | Chart callout numeral |\n| `{typography.serif-quote}` | 92px | DM Serif Display | 400 | Quote-slide body text |\n| `{typography.serif-chart-h}` | 90px | DM Serif Display | 400 | Chart-slide headline |\n| `{typography.serif-section-h}` | 88px | DM Serif Display | 400 | Section divider supporting headline |\n| `{typography.serif-toc-num}` | 64px | DM Serif Display | 400 | TOC row numeral |\n| `{typography.serif-toc-title}` | 56px | DM Serif Display | 400 | TOC row title |\n| `{typography.serif-quote-attr}` | 48px | DM Serif Display | 400 | Quote attribution name |\n| `{typography.serif-process-h}` | 38px | DM Serif Display | 400 | Process step heading |\n| `{typography.serif-matrix-label}` | 32px | DM Serif Display | 400 | Matrix row label |\n| `{typography.body}` | 24px | Inter | 300 | Standard body paragraph |\n| `{typography.body-muted}` | 22px | Inter | 300 | Muted lead and description |\n| `{typography.body-toc-desc}` | 24px | Inter | 300 | TOC row description |\n| `{typography.mono-runner}` | 24px | JetBrains Mono | 400 | Top runner and bottom footer |\n| `{typography.mono-kicker}` | 22px | JetBrains Mono | 400 | Pink kicker eyebrow |\n| `{typography.mono-label}` | 22px | JetBrains Mono | 400 | Standard paper-blush label |\n| `{typography.mono-cover-pre}` | 28px | JetBrains Mono | 400 | Cover preamble line (with 0.42em wide tracking) |\n| `{typography.mono-pill}` | 16px | JetBrains Mono | 400 | Pill text |\n\n### Defaults\n\n- **Default primary content headline**: `{typography.script-sm}` (132px) — when the slide is a content moment with a strong headline.\n- **Default cover / opening headline**: `{typography.script-cover}` (280px) — the cover script lockup.\n- **Default section-divider mega numeral**: `{typography.script-section}` (600px).\n- **Default body paragraph**: `{typography.body}` (24px Inter 300).\n- **Default muted lead / description**: `{typography.body-muted}` (22px Inter 300, mute-paper color).\n- **Default label / kicker**: `{typography.mono-kicker}` (22px JetBrains Mono, pink).\n- **Default footer / runner**: `{typography.mono-runner}` (24px JetBrains Mono).\n- **Default stat figure**: `{typography.serif-stat}` (116px) with a 36px paper-blush `<sup>` for unit.\n- **Default weight for any display element**: 400 (DM Serif Display has only one weight).\n- **Default weight for body**: 300.\n\nWhen unsure, the canonical pattern is: a 22px pink kicker + a 132–156px DM Serif Display headline (with one `<em>`-wrapped word in pink if extra emphasis is needed) + a 22–24px Inter 300 paragraph in muted paper-blush. That three-element pattern is the system's most reliable rhythm.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every slide carries the radial-gradient surface, the film-grain overlay, AND the 1px paper-blush interior frame.** All three together. Removing any one collapses the editorial-magazine reading.\n- **Every hero script element (sizes 280px and larger) carries the pink halo text-shadow.** `{components.pink-glow}` for hero scripts (80px blur); `{components.pink-glow-mega}` for section-divider mega numerals (120px blur). The halo simulates the light bleed of neon-saturated print.\n- **Every script color is `{colors.pink}`.** DM Serif Display in any other color is not \"script\" — it becomes \"serif headline.\" The pink color is what defines script vs. headline in this system.\n- **Paper-blush serif headlines may switch one word to pink via `<em>`** — this is the system's headline emphasis mechanism. The `<em>` stays upright (font-style: normal).\n- **DM Serif Display headlines always have `padding-bottom: .1em` (or `.12em` for the largest script).** This compensates for the serif descenders so the visual baseline reads correctly aligned.\n- **All JetBrains Mono is uppercase with at least 0.08em positive tracking** (most chrome and labels use 0.12–0.18em; the cover preamble uses 0.42em).\n- **Body text is always Inter at weight 300.** Inter at any other weight is not body — switching to 400 reads as a different tone.\n- **The kicker is always pink** in `{colors.pink}`. The eyebrow color is non-negotiable.\n- **Runner brand text on the left is always pink; the right-side meta is always muted paper-blush.** The pink brand text is the system's persistent identity signal.\n- **The page-position footer uses paper-blush base text with a pink `<em>` for the current number.** Format: `<span>03 / 09</span>` where `03` is wrapped in `<em>` to render pink.\n\n### Typography Principles\n\nThe rhythm of Pink Script is **oversized pink script + paper-blush serif paragraph headline + muted Inter prose + small mono editorial tag**. Switching any voice (e.g., setting a script in Inter, or body in DM Serif) collapses the system's editorial register. The serif scales freely from 32px to 600px; choose the size based on the slide's hero moment, not on a fixed scale.\n\nItalic letterforms are not used (DM Serif Display does have an italic, but it's not loaded by the template). The `<em>` tag is repurposed as a pink color switch. Underline is not used. Bold weight is not available in DM Serif Display, and using bold Inter for body breaks the calm prose voice.\n\n## Layout\n\n### Canvas System\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component. All sizes are pixel-fixed; the stage handles proportional scaling.\n\nMost slides use **absolute positioning** with edge-anchored elements. The standard content area is `inset: 140px 60px 140px 60px` — a 140px top reserve for the runner + headline area, 140px bottom reserve for the footer, and 60px left/right edge margins.\n\n### Padding and Anchoring\n\n| Anchor | Value | Use |\n|---|---|---|\n| `edge-x` | 60px | Left and right edge margins for content |\n| `edge-top-chrome` | 60px | Top inset for the runner chrome |\n| `edge-bottom-chrome` | 60px | Bottom inset for the footer chrome |\n| `content-top` | 140px | Top inset for slide body content (below runner) |\n| `content-bottom` | 140px | Bottom inset for slide body content (above footer) |\n| `inner-frame-inset` | 36px | The hairline interior frame inset |\n\n### Chrome Frame\n\nEvery slide carries a **top runner** at 60px top / 60px sides — a brand name on the left (always pink) and a section / chapter tag on the right (muted paper-blush). The runner is JetBrains Mono uppercase at 24px with 0.14em tracking.\n\nEvery slide also carries a **bottom footer** at 60px bottom / 60px sides — typically a source or confidentiality string on the left and a page-position marker on the right. The page-position uses paper-blush base with a pink `<em>` for the current number (e.g., `01 / 09`).\n\nThe **hairline interior frame** at 1px paper-blush 14% sits at `inset: 36px` on every slide. It is the editorial border of the magazine page and present unconditionally.\n\n## Depth and Elevation\n\n### No Box Shadows, Atmospheric Depth Only\n\nThe system uses **zero box-shadow declarations** on any structural element. Depth comes from three atmospheric layers:\n\n1. **The radial-gradient surface** (`{components.slide-surface}`) — lit from the upper-left by a warm dark ellipse fading to near-black across the lower-right. This creates the impression of a studio softbox catching one corner of the page.\n2. **The film-grain overlay** (`{components.film-grain}`) — 8% opacity, screen blend, adds photographic graininess to the surface.\n3. **The pink halo text-shadow** on hero script titles — a soft 80–120px blur in pink at low alpha that simulates the light bleed of large neon-saturated type on photographic paper.\n\n### No Drop Shadows on Cards or Panels\n\nCards, tables, and panels do not carry shadows. The system's \"card\" pattern is structural rather than elevated: a region defined by a border or a left-rule, sitting flat on the surface.\n\n### Hairline Rules as Structural Depth\n\nWhere the system needs to separate regions, it uses:\n- 1px pink at 45% opacity (`{components.pink-rule}`) for soft pink rules.\n- 1px paper-blush at 14% (`{components.hair-paper}`) for muted hairline separators.\n- 1px pink at 32% (`{colors.line-pink}`) for table row dividers and chart axis lines.\n\nNever a 2px or thicker rule. Never a colored rule outside pink and paper.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Cards, panels, table cells, QR tiles, runner / footer text |\n| 999px | None — pills here are explicitly rectangular |\n\nThe system has **zero border-radius** on any structural element. Pills are 0-radius rectangles (despite the \"pill\" naming convention). The only round element is the small chart-callout circle marker (an SVG `<circle>` element marking an inflection point).\n\n### Border Weights\n\n- **1px solid paper-blush at 14%** — the universal interior hairline frame.\n- **1px solid pink** (`{colors.pink}`) — pill outlines.\n- **1px solid pink at 32%** (`{colors.line-pink}`) — table dividers, chart axes.\n- **1px solid paper-blush at 14%** — TOC row dividers, footer separators.\n- **1px solid pink** at full opacity — left callout-rail border, top-of-step border in process slides.\n- **1px dashed pink at 18%** — chart grid lines.\n\nNo other border weights exist. There is no 2px, 3px, or thicker border anywhere in the system.\n\n### Decorative Element Types\n\n**Hero script title** — A DM Serif Display headline at 220–600px in pink with the halo text-shadow. The defining moment of any slide that uses it. Always pink, always with the glow, always carries `padding-bottom: .1em` to compensate for descenders.\n\n**Paper-blush serif headline** — A DM Serif Display headline at 88–140px in paper-blush. Used when the moment should read as ink rather than highlight. May contain `<em>` to switch one word to pink.\n\n**Pink kicker** — A 22px JetBrains Mono uppercase eyebrow in `{colors.pink}` placed above a headline. The system's most consistent appearance of pink alongside the hero script.\n\n**Mono runner / footer** — Standard JetBrains Mono chrome at 24px / 0.14em tracking. The brand on the runner is always pink; the rest is muted paper-blush.\n\n**Pink rule (`{components.pink-rule}`)** — 1px pink at 45% opacity. Used as a soft separator.\n\n**Hairline rule (`{components.hair-rule}`)** — 1px paper-blush at 14% opacity. Used as a muted separator and as the TOC row divider.\n\n**Callout rail (`{components.callout-rail}`)** — A 1px pink left border with right-aligned content padding-left 24px. Used as a vertical callout container beside charts or beside a chapter explanation.\n\n**Stat row (`{components.stat-row}`)** — A 240px serif figure paired with a mono label + Inter description, separated from the next row by a 1px paper hairline. Stat figures are pink; descriptions are muted paper-blush.\n\n**Pills (`{components.pill-outline}`, `{components.pill-solid}`, `{components.pill-dim}`)** — Three pill states: hollow pink (default), solid pink with deep-ink text (affirmative / featured), and dim hairline (de-emphasized). All are 0-radius rectangles.\n\n**QR tile (`{components.qr-tile}`)** — A 180×180 paper-blush square with 12px white padding and an SVG QR inside. The only large light-surface element in the system; it functions as a \"ticket\" object on the CTA slide.\n\n**Chart callout** — A 120px pink serif numeral with a 0.5em paper-colored unit suffix, plus a small mono label and a 22px muted Inter description, anchored to the right of a chart by a 1px pink callout rail.\n\n**Chart line** — A 3px solid pink line for the primary series; a 2px paper-blush dashed line for the secondary series. The inflection point on the primary line carries a 9px solid pink circle with an 18px hollow ring at 50% opacity and a vertical dashed line dropping to the axis.\n\n**Process step** — A vertical column anchored by a 1px solid pink top border with a 96px pink serif numeral, a 38px paper-blush serif heading, and an Inter description. Steps are separated by a 24px gap and connected by a small pink arrow glyph.\n\n**Matrix table** — A 4-column grid with the first column being a 32px paper-blush serif label, the column header row colored pink, and the \"our column\" row tinted with `rgba(237, 61, 140, 0.08)` to mark it.\n\n## Do's and Don'ts\n\n### Do\n- Apply the radial-gradient surface, the film-grain overlay, and the 1px paper-blush interior frame to every slide. All three are non-optional.\n- Set hero script titles in `{colors.pink}` with the halo text-shadow. The glow is part of the script's identity.\n- Use DM Serif Display for every editorial / display moment. The serif is the system's only editorial face — don't substitute a second face.\n- Set body paragraphs in Inter at weight 300. The ultra-light weight is the system's calm prose voice.\n- Use JetBrains Mono uppercase with at least 0.08em tracking for every label, page number, runner, and footer string.\n- Use `<em>` inside a paper-blush serif headline to switch one word to pink — the system's primary headline emphasis.\n- Place a pink kicker above every primary headline. The pink eyebrow is the system's editorial signal.\n- Use the pink left-rule callout (`{components.callout-rail}`) to anchor a stat, a callout, or a chapter explanation to the right of a chart or content region.\n- Add `padding-bottom: .1em` to every DM Serif Display headline. The serif descenders need compensation.\n- Use the page-position footer pattern with pink `<em>` for the current number: `<em>03</em> / 09`.\n\n### Don't\n- Don't omit the film grain or the interior hairline frame. The system's editorial atmosphere depends on both.\n- Don't use box-shadow on any panel or card. Depth is atmospheric, not structural.\n- Don't introduce a second chromatic accent. Pink is the only accent. Adding red, blue, or green breaks the system.\n- Don't render the pink fuchsia as text on the paper-blush surface — the contrast inverts and looks like a typo.\n- Don't put body copy in DM Serif Display. The serif is for editorial moments, not paragraphs.\n- Don't put display headlines in Inter. The sans is the body voice, not the headline voice.\n- Don't round any element. Cards, pills, tables, QR tiles — all strict rectangles.\n- Don't use blurred shadows on any element. The only \"shadow\" in the system is the pink halo text-shadow on hero scripts, and that's a glow, not a drop shadow.\n- Don't use italic letterforms. The `<em>` tag is repurposed as a pink color switch.\n- Don't crowd a slide with multiple equally-weighted regions. The system reads as elegant when one hero moment dominates.\n\n## Responsive Behavior\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component. The stage handles proportional scaling to the browser viewport — all pixel-fixed sizes inside the canvas scale uniformly.\n\n### Presenter Behavior\n- Navigation, scaling, and presenter chrome are handled by the `<deck-stage>` component.\n- Keyboard, touch, and mouse-wheel navigation are managed by the stage.\n- The canvas is constant 1920×1080 regardless of viewport.\n\n### Print Behavior\nPrint export depends on the deck-stage component's print handling. The pink halo text-shadow and the film-grain overlay may render inconsistently in PDF export — test before assuming visual parity.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face (recommended) | Weight | Notes |\n|---|---|---|---|---|\n| Script / display (DM Serif Display) | DM Serif Display | **思源宋体 Noto Serif SC** | **900** | Heavy serif that holds visual mass on dark backgrounds. The default choice. |\n| Display alternate (delicate moments) | DM Serif Display | 站酷小薇体 ZCOOL XiaoWei | 400 | Couture-thin display face — use only at very large sizes (400px+) where delicacy reads as intentional. Too thin on dark backgrounds at typical headline sizes (40–200px). |\n| Body (Inter 300) | Inter | Noto Serif SC (思源宋体) | 400 | Serif body keeps the editorial register cohesive with the heavy display. |\n| Label / runner (JetBrains Mono UPPERCASE tracked) | JetBrains Mono | Noto Sans SC | 400 (do not force monospace on CJK) | |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. DM Serif Display tokens become `\"DM Serif Display, 'Noto Serif SC', serif\"` with `font-weight: 900` on the Chinese run; Inter body tokens become `\"Inter, 'Noto Serif SC', system-ui, sans-serif\"`; JetBrains Mono tokens become `\"JetBrains Mono, 'Noto Sans SC', monospace\"`. Latin glyphs render in their original face; CJK falls through automatically.\n\n**Critical**: when Chinese text uses the display role, set `font-weight: 900` explicitly. DM Serif Display's \"single weight\" is already visually heavy because it's a high-contrast display serif — the equivalent CJK heaviness lives at weight 900 in Noto Serif SC, not weight 400.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=Inter:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500;700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPink Script (After Hours) is a nocturnal couture system whose entire editorial identity rests on DM Serif Display in hot fuchsia pink at sizes up to 600px against dim warm-black paper. The visual weight of DM Serif Display at any size is substantial — high-contrast strokes, serif terminals, and a typographic mass that holds against the dark background.\n\nThe recommended Chinese equivalent is **思源宋体 Noto Serif SC at weight 900**. This carries the same visual mass as DM Serif Display: bold serif terminals, sufficient stroke density to read clearly against the dark surface, and the editorial register that defines the system. Weight 900 is non-negotiable for display moments — anything lighter (400, 500, even 700) will visually disappear against the pink-glow + dark-paper combination and break the entire couture register.\n\n**站酷小薇体 ZCOOL XiaoWei** is a viable secondary option for moments where extreme delicacy reads as intentional — a single 400-px+ pull-quote, a hairline section divider title, a brand wordmark at the very top of a cover slide. Its single-weight 400 with extreme stroke contrast carries a different feeling: dressier, more whisper-thin, more vintage-Vogue than modern-fashion-editorial. For most display work, choose Noto Serif SC 900; reach for XiaoWei only when the moment is genuinely a delicate accent at extreme size.\n\nThe pink halo text-shadow (`{components.pink-glow}` at 80–120px blur) transfers perfectly to Chinese characters regardless of which display face you choose. **Apply the same glow to every Chinese display moment in pink** — the neon bleed effect is script-agnostic and the late-night magazine atmosphere survives the script switch fully.\n\nThe pink color (`{colors.pink}` — #ED3D8C) as the only chromatic accent works unchanged. The inline `<em>` color switch (paper-blush headline with one word in pink) is a clean transfer to Chinese — wrap one CJK character or one phrase in `<em>` and the pink ink switch reads exactly the same.\n\n**Inter at weight 300 for body** does not transfer directly. Noto Serif SC at weight 400 is the recommended body face — its high-contrast serif stroke matches the couture register of the system's overall feel. Body color stays paper-blush (`{colors.paper-blush}`); the ultra-light register is achieved through size, paper-blush color, and the muted 55%-opacity lead, not through font weight.\n\nJetBrains Mono uppercase tracked labels (runner brand, page numbers, footer chrome) do not transfer to CJK. Pure Latin chrome strings (the brand name itself, edition numbers like `01 / 09`) keep JetBrains Mono. For Chinese chrome text (a section / chapter tag in the upper-right), use Noto Sans SC 400 at the same 24px size with letter-spacing reset to 0 and no uppercase.\n\nThe radial-gradient surface, the film-grain overlay, the 1px paper-blush interior frame — all script-agnostic. The pink halo, the kicker, the callout rail, the stat-row pattern, the matrix-cell — all transfer unchanged.\n\n### Known CJK Gap\n\nDM Serif Display's \"single weight\" is misleading: it's a high-contrast display serif that reads as visually heavy at any size. The Chinese equivalent heaviness lives at Noto Serif SC **weight 900**, not weight 400 — using weight 400 for display will make Chinese headlines look limp and disconnected from the bold pink callouts. The system's reliance on size for hierarchy still works in Chinese, but you must lock display weight at 900 to preserve the visual mass.\n\nZCOOL XiaoWei is the only CDN-loadable Chinese face that captures the \"high-contrast couture serif\" character in its proportions, but its single-weight 400 is too thin for most display sizes on this template's dark surface. Treat XiaoWei as a niche option, not the default.\n\n## Iteration Guide\n\n1. Every new slide background is the lit radial gradient (`{components.slide-surface}`) with film grain and the interior hairline frame. Don't skip any of the three layers.\n2. Every new hero script title is DM Serif Display in `{colors.pink}` with the halo text-shadow at 80–120px blur.\n3. Every new editorial headline that should read as ink (not highlight) is DM Serif Display in `{colors.paper-blush}`. Use `<em>` inside to switch a word to pink.\n4. Every new body paragraph is Inter at weight 300 in paper-blush (full) or mute-paper (muted).\n5. Every new label, runner, footer, or metadata tag is JetBrains Mono uppercase at 0.08em+ tracking.\n6. Every new kicker eyebrow is pink. Don't render a kicker in any other color.\n7. Every new pill is a 0-radius rectangle. Choose outline (default), solid (affirmative), or dim (de-emphasized) state.\n8. Every new table or matrix uses 1px pink-at-32% row dividers and no vertical borders.\n9. Every chart uses a 3px solid pink line for primary and a 2px paper-blush dashed line for secondary. Don't introduce a third color.\n10. The runner brand text is always pink; the right-side meta is always muted paper-blush. Don't swap.\n\n## Known Gaps\n\n- The system depends on a `<deck-stage>` web component loaded via `deck-stage.js`. Without it, the 1920×1080 canvas will not scale and slides will render at native pixel size.\n- The film-grain overlay uses a data-URI SVG with `feTurbulence`. Some browsers (older Safari) render the noise inconsistently or skip it in PDF export.\n- DM Serif Display has only weight 400. There is no bold or italic variant available — the system has no fallback weight scale and depends on size alone for hierarchy.\n- The pink halo text-shadow uses fixed 80px and 120px blur values. At very small viewport scales, the glow may dominate the type; at very large scales, the glow may appear weak.\n- The `{colors.pink-light}`, `{colors.pink-deep}`, and `{colors.ink-violet}` tokens are defined but inactive in current slide types. They are reserved for future variation.\n- The QR-tile SVG inside the CTA slide is a hand-coded pattern of `<rect>` elements that does not encode a real scannable code. Real QR codes need to be generated externally.\n- Chart line points and inflection markers are SVG `<polyline>` coordinates that must be computed manually. There is no data-binding layer.\n- The cover script lockup uses `padding-left: 180px` on the second line for an indented hanging effect. This is a hardcoded layout decision and doesn't generalize to other word lengths — long second lines may break the centering.\n- The runner and footer rely on `white-space: nowrap` to prevent line-wrap. Extremely long brand names or page-position strings may overflow the 60px edge margin.\n- The matrix `cell.us` column highlight is a hardcoded `rgba(237, 61, 140, 0.08)` wash. Tinting other columns requires per-column class additions.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pink-script/preview.md":"# Pink Script — After Hours Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/pink-script/design.md`\n- Preview card: `bold-template-pack/templates/pink-script/preview.md`\n\n## Selection Metadata\n\n- Slug: `pink-script`\n- Tagline: Black canvas, hot pink accent, pearl-cream paper, Instrument Serif headlines: late-night editorial luxury.\n- Mood: nocturnal, moody, intentional, luxe, expressive\n- Tone: literary, sultry, considered, magazine\n- Formality: medium-high\n- Density: low\n- Scheme: dark\n- Best for: Anything that should feel nocturnal, intentional, and a little luxe: fashion brand decks, creator personal brands, after-hours / nightlife / spirits launches, luxury product reveals, editorial features. Also a striking unexpected pick for a tech keynote, research synthesis, or business pitch that wants to land with magnetic confidence.\n- Avoid for: Daytime corporate-professional and traditional B2B contexts where the dark canvas with hot-pink accent reads as too styled or too expressive.\n\n## Visual Snapshot\n\nA nocturnal couture editorial system rendered in hot fuchsia ink on dim warm-black paper, with a soft film-grain overlay and a hairline interior frame. DM Serif Display carries every script and editorial moment at sizes up to 600px; Inter at weight 300 carries the body voice; JetBrains Mono carries the boutique-catalog metadata. The aesthetic borrows from glossy fashion magazine spreads, late-night perfume advertising, and the editorial pages of high-end zines — closer to a Maison's seasonal lookbook than a startup deck.\n\nPink Script is a nocturnal couture editorial system built on a single atmospheric premise: a deep warm-black surface lit from the upper-left by a slightly warmer #1A1218 ellipse that fades to near-black across the lower-right. The off-center light source reads as a studio softbox catching one corner of a magazine spread. Over this, a subtle film-grain overlay at 8% opacity with screen blend adds the photographic graininess of late-night editorial photography. Inside this surface sits a 1px hairline interior frame (paper-blush at 14% opacity, inset 36px from each edge) — the editorial border of every page. Without the lit gradient, the film grain, and the interior frame, the system collapses...\n\n## Preview Ingredients\n\n- Palette: ink-deep #060507; ink-violet #0F0D11; paper-blush #F5EDF1; pink #ED3D8C; pink-light #FF66A8; pink-deep #B81D67\n- Typography: DM Serif Display; Inter; JetBrains Mono\n- Signature move: Deep warm-black surface ({components.slide-surface}) lit from the upper-left by a radial gradient ellipse.\n- Signature move: A subtle film-grain overlay ({components.film-grain}) on every slide — opacity 0.08, screen blend.\n- Signature move: A 1px paper-blush interior frame ({components.hairline-frame}) inset 36px from each edge, present on every slide.\n- Signature move: Hot fuchsia pink ({colors.pink}) is the single chromatic accent — used as script color, kicker color, line color, pill outline, inline emphasis, and the soft halo behind hero scripts.\n- Signature move: DM Serif Display carries every editorial moment, scaling from 32px to 600px. There is no second display face.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/playful/design.md":"---\nversion: alpha\nname: Playful\ndescription: \"A warm, hand-crafted editorial system built on a peach-clay canvas with charcoal ink as the only \\\"color.\\\" Display type runs in Syne (weight 700–800, tight negative tracking); body type runs in Space Grotesk at weight 400–500. The aesthetic borrows from independent studio decks, risograph zines, and sketchbook spreads: organic blob frames, scribbled SVG doodles, slightly rotated cards, and double-stroke offset borders give every slide a hand-touched, unpolished warmth. The effect is creative-studio editorial, not corporate pitch — confident but human, structured but loose.\"\n\ncolors:\n  bg: \"#F0C8A0\"\n  bg-alt: \"#E8B88E\"\n  light: \"#F7DEC6\"\n  text: \"#1A1A1A\"\n\ncolor-aliases:\n  accent: text\n\ntypography:\n  display-hero:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(4rem, 10vw, 9rem)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  display:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(3rem, 8vw, 7rem)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.02em\n  headline:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(2.5rem, 6vw, 5rem)\"\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.01em\n  statement:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(2.5rem, 5vw, 4.5rem)\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  title:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(2rem, 4vw, 3.5rem)\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  title-sm:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"1.3rem\"\n    fontWeight: 700\n    lineHeight: 1.2\n  number-hero:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(4rem, 8vw, 7rem)\"\n    fontWeight: 800\n    lineHeight: 1.0\n  number-md:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"2.5rem\"\n    fontWeight: 800\n    lineHeight: 1.0\n  number-sm:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"2rem\"\n    fontWeight: 800\n    lineHeight: 1.0\n  body:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"clamp(1rem, 1.2vw, 1.1rem)\"\n    fontWeight: 400\n    lineHeight: 1.7\n  body-md:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"1.2rem\"\n    fontWeight: 500\n    lineHeight: 1.6\n  label-eyebrow:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 600\n    lineHeight: 1.2\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  caption:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 500\n    lineHeight: 1.4\n  tag:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 600\n    lineHeight: 1.2\n\nspacing:\n  pad-slide-lg: \"4rem 5rem\"\n  pad-slide-md: \"3rem 4rem\"\n  pad-card-lg: \"2rem 3rem\"\n  pad-card-md: \"1.5rem\"\n  gap-lg: \"3rem\"\n  gap-md: \"2rem\"\n  gap-sm: \"1.5rem\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  rough-box:\n    border: \"3px solid {colors.text}\"\n    background: \"{colors.bg}\"\n    padding: \"1.5rem\"\n    offsetShadowOffset: \"6px 6px\"\n    offsetShadowBorder: \"2–3px solid {colors.text}\"\n    description: \"Generic content card with a double-stroke effect — the inner box has a 3px solid border, and an absolutely-positioned ::before pseudo-element offsets a second 2–3px border down-and-right by 6–8px to simulate a hand-drawn double outline. No fill on the offset; the canvas shows through.\"\n  filled-block:\n    background: \"{colors.text}\"\n    color: \"{colors.bg}\"\n    padding: \"1.5rem\"\n    description: \"Inverted card: dark charcoal background with peach text. Used as the visual counterpoint to outlined cards in a collage of mixed treatments.\"\n  blob-frame-organic:\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"40% 60% 70% 30% / 40% 50% 60% 50%\"\n    description: \"Organic outlined blob, asymmetric border-radius. Decorative wrapper that holds a smaller solid filled-blob inside it.\"\n  blob-frame-pebble:\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"255px 15px 225px 15px / 15px 225px 15px 255px\"\n    description: \"Pebble-shaped frame with extreme alternating border-radius — two opposing corners pulled long, the other two pinched short. Reads as a hand-drawn lozenge.\"\n  blob-fill:\n    background: \"{colors.text}\"\n    borderRadius: \"60% 40% 30% 70% / 60% 30% 70% 40%\"\n    description: \"Solid dark blob with asymmetric organic radius. Used inside an outlined blob-frame or floating on its own as decorative mass.\"\n  scribble-svg:\n    stroke: \"{colors.text}\"\n    strokeWidth: 2\n    fill: none\n    strokeLinecap: round\n    description: \"Inline SVG path drawn as a single hand-drawn line — wavy stub, scribbled circle, star outline, squiggle, arrow. Always 2px stroke, rounded caps. Placed absolutely in corners and edges as decorative breath.\"\n  doodle-circle:\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"50%\"\n    description: \"Plain round outlined circle used as a decorative anchor in slide corners.\"\n  doodle-rect:\n    border: \"3px solid {colors.text}\"\n    rotation: \"5–10deg\"\n    description: \"Plain outlined rectangle, slightly rotated, used as a decorative anchor in slide corners.\"\n  card-rotated:\n    transform: \"rotate(-3deg to 3deg)\"\n    description: \"Any card or block can carry a small ±3deg rotation. Rotations stagger so adjacent cards rotate in opposite directions — never all in the same direction, never more than 3deg.\"\n  step-node-circle:\n    width: 64px\n    height: 64px\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"50%\"\n    background: \"{colors.bg}\"\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: 1.5rem\n    fontWeight: 800\n    description: \"Round outlined node containing a single numeric digit at display weight. Used as a timeline or process marker; alternates between outlined (bg fill) and filled (charcoal fill, bg text).\"\n  avatar-placeholder:\n    width: 60px\n    height: 60px\n    background: \"{colors.text}\"\n    borderRadius: \"50%\"\n    description: \"Solid dark circle used as a portrait stand-in inside a team or people card.\"\n  tag-pill:\n    background: \"{colors.text}\"\n    color: \"{colors.bg}\"\n    padding: \"0.4rem 0.8rem\"\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 600\n    description: \"Small charcoal pill with peach text, anchored to the bottom-left of an image frame as a category label.\"\n  bar-chart:\n    barFillSolid: \"{colors.text}\"\n    barFillOutlined: \"3px solid {colors.text} + transparent\"\n    axisStroke: \"3px solid {colors.text}\"\n    description: \"Custom HTML bar chart. Bars are either solid charcoal (primary series) or outlined transparent (secondary series). Axes are 3px solid charcoal lines, no grid.\"\n  vertical-text:\n    fontFamily: \"Syne, sans-serif\"\n    fontWeight: 700\n    letterSpacing: 0.1em\n    transform: \"rotate(90deg)\"\n    description: \"Display-weight text rotated 90deg, anchored to a slide edge as a magazine-style spine label.\"\n  ghost-blob:\n    background: \"{colors.text}\"\n    borderRadius: \"40% 60% 70% 30% / 40% 50% 60% 50%\"\n    opacity: 0.08\n    description: \"Oversized organic blob at very low opacity placed behind content as atmospheric wallpaper. Functions like a watermark cloud.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPlayful is a **hand-crafted editorial system** anchored by a single warm canvas — a peach-clay `{colors.bg}` (#F0C8A0) — with charcoal `{colors.text}` (#1A1A1A) as the only meaningful \"color.\" Everything reads as ink-on-clay-paper. There are no secondary brand colors, no gradients, no chromatic accents. The system commits fully to a one-color discipline and finds its expressiveness in shape, weight, rotation, and hand-drawn marks rather than in palette variety.\n\nThe typeface stack is **Syne for display, Space Grotesk for body**. Syne is the personality — a high-contrast display sans with quirky humanist proportions that reads as a contemporary independent studio voice, not a corporate sans. It is used at weights 700 and 800 with tight negative letter-spacing (-0.01em to -0.03em) for every headline, statement, statistic, and number. Space Grotesk is the workhorse — a steady, neutral geometric sans at weight 400–500 for body and 500–600 for labels. The pairing reads as \"expressive editorial built on a reliable grid.\"\n\nThe color philosophy is **monochrome warmth**: a single ink color on a single warm surface, plus two tonal siblings of the canvas (`{colors.bg-alt}` slightly darker for image placeholders, `{colors.light}` slightly lighter for gentle layering). The peach is saturated enough to read as a deliberate aesthetic choice, not a neutral. The ink is slightly softened from pure black (#1A1A1A) to sit comfortably on the warm paper. The system's emotional register is \"studio sketchbook\" — confident but warm, structured but unpolished.\n\nDepth is **double-stroke offset borders** and **hand-drawn marks**, not blurred shadows. The signature treatment: a 3px charcoal border on a card, plus a `::before` pseudo-element offset down-and-right by 6–8px carrying a second 2–3px border — the visual effect is a hand-drawn double outline that suggests imperfect tracing. Combined with small rotations (±0.5deg to ±3deg on cards) and scribbled SVG paths placed in slide corners, the system reads as crafted-by-hand rather than rendered-by-software.\n\n**Density philosophy: medium-low.** Each slide is anchored by a single dominant element — a statement, a chart, a roster — surrounded by deliberate breathing room and one or two decorative scribbles. Crowding the canvas with simultaneous cards, doodles, and copy collapses the hand-touched feeling into clutter. The correct density is one substantive moment per slide with one or two SVG scribbles or organic blobs serving as visual punctuation in the negative space.\n\n**Key Characteristics:**\n- Peach-clay canvas (`{colors.bg}`) with charcoal ink (`{colors.text}`) as the only color. No secondary brand palette.\n- Syne at weight 700–800 with negative letter-spacing for every display and numeric moment; Space Grotesk at 400–500 for body.\n- Double-stroke offset borders on cards — a 3px outline plus a 6–8px offset ghost border via `::before`.\n- Small ±0.5deg to ±3deg rotations on cards, blocks, and statistics for a hand-placed feel.\n- Organic blob shapes with asymmetric border-radius act as decorative frames and fills.\n- Inline 2px-stroke SVG scribbles (squiggles, stars, circles, arrows) live in slide corners as hand-drawn punctuation.\n- No web shadows. Depth comes from double borders, rotation, and ink-density contrast.\n- One dominant element per slide with generous negative space — never wall-to-wall content.\n\n## Colors\n\n### Palette\n- **Background** (`{colors.bg}` — #F0C8A0): The peach-clay canvas. The default surface for every slide. Saturated enough to be the system's signature; warm enough that charcoal ink reads softly rather than starkly.\n- **Background Alt** (`{colors.bg-alt}` — #E8B88E): A slightly darker tonal sibling of the canvas. Used as a fill for image placeholder regions and for subtle surface differentiation when one card needs to read as \"behind\" another without committing to a new color.\n- **Light** (`{colors.light}` — #F7DEC6): A slightly lighter tonal sibling of the canvas. Available for gentle layering when a region needs to lift off the background by a single tonal step without introducing white.\n- **Text/Ink** (`{colors.text}` — #1A1A1A): Charcoal ink — the single non-canvas color in the system. Softened from pure black so it sits as warm ink on warm paper. Used for all body text, all display text, all borders, all SVG strokes, all filled blocks, all dark fills.\n\nThe `accent` alias resolves to `{colors.text}` — the system has no separate accent color. The \"accent\" in Playful is contrast against the canvas, not a third hue.\n\n### Defaults\n- **Default surface background**: `{colors.bg}` — every slide opens on peach-clay.\n- **Default headline color**: `{colors.text}` — always. Headlines are never tinted or recolored.\n- **Default body text color**: `{colors.text}` — sometimes at opacity 0.7–0.9 for de-emphasis, but the underlying color remains charcoal.\n- **Default border color**: `{colors.text}` — every outlined card, blob, doodle, and chart axis is charcoal.\n- **Default text color on filled charcoal blocks**: `{colors.bg}` — peach text on dark surfaces is the only color inversion.\n- **Default image-placeholder fill**: `{colors.bg-alt}` — slightly darker than the canvas so the placeholder reads as a distinct region without using white.\n- **Default decorative-blob fill**: `{colors.text}` at full opacity (foreground) or at 0.08 opacity (atmospheric ghost-blob behind content).\n\nThe system has no concept of \"primary vs secondary color.\" Every visual decision is a binary between canvas (peach) and ink (charcoal), modulated by opacity, scale, and shape.\n\n## Typography\n\n### Font Family\nThe system pairs two carefully chosen Google Fonts:\n\n- **Syne** (display): A contemporary humanist display sans with quirky letterforms, narrow apertures, and slightly compressed proportions. Used at weight 700 and 800 for every display moment — headlines, statements, titles, numerals, vertical labels. Its character is what distinguishes Playful from a generic warm-toned deck: Syne reads as an independent studio voice, not a corporate header.\n- **Space Grotesk** (body): A clean, slightly geometric sans-serif with a friendly humanist warmth. Used at weight 400–500 for body paragraphs, 500–600 for labels and captions. Provides a steady, legible counterweight to Syne's expressiveness.\n\nThere is no third face. Italic and underline are not used. Emphasis comes from weight (700 → 800), size, and the Syne-vs-Space-Grotesk contrast itself.\n\n### Type Scale\n\n| Token | Size (clamp) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-hero}` | 4–9rem | Syne | 800 | Oversized cover or opening date/title |\n| `{typography.display}` | 3–7rem | Syne | 800 | Closing or major declarative headline |\n| `{typography.headline}` | 2.5–5rem | Syne | 700 | Primary section headline |\n| `{typography.statement}` | 2.5–4.5rem | Syne | 700 | Long-form quoted statement or manifesto line |\n| `{typography.title}` | 2–3.5rem | Syne | 700 | Region or section title |\n| `{typography.number-hero}` | 4–7rem | Syne | 800 | Hero statistic numeral |\n| `{typography.number-md}` | 2.5rem | Syne | 800 | Mid-scale ordinal or stat numeral |\n| `{typography.number-sm}` | 2rem | Syne | 800 | Inline ordinal or step numeral |\n| `{typography.title-sm}` | 1.3rem | Syne | 700 | Card title within a small block |\n| `{typography.body-md}` | 1.2rem | Space Grotesk | 500 | Subtitle or emphasized body |\n| `{typography.body}` | 1–1.1rem | Space Grotesk | 400 | Paragraph body |\n| `{typography.label-eyebrow}` | 0.85rem | Space Grotesk | 600 | Section eyebrow above a headline, uppercase tracked |\n| `{typography.caption}` | 0.85rem | Space Grotesk | 500 | Subtitle, fine print, footnote |\n| `{typography.tag}` | 0.75rem | Space Grotesk | 600 | Pill tag text inside a charcoal label |\n\n### Defaults\n- **Default size for a primary section headline**: `{typography.headline}` (2.5–5rem clamp).\n- **Default size for a cover or major opening moment**: `{typography.display-hero}` (4–9rem clamp).\n- **Default size for paragraph body**: `{typography.body}` (1–1.1rem clamp).\n- **Default size for a subtitle or emphasized lead body**: `{typography.body-md}` (1.2rem).\n- **Default size for any inline caption, footnote, or fine print**: `{typography.caption}` (0.85rem).\n- **Default size for a hero numerical figure**: `{typography.number-hero}` (4–7rem clamp).\n- **Default size for a stat tile or ordinal numeral**: `{typography.number-md}` (2.5rem).\n- **Default weight for any display element (headline, statement, title, numeral)**: 700 or 800 — never lower.\n- **Default weight for any body element**: 400 or 500.\n\nWhen unsure between `{typography.title}` and `{typography.headline}` for the primary text on a slide, reach for `{typography.headline}` — `{typography.title}` is for sub-regions within a slide.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every display element is set in Syne.** Headlines, statements, titles, numerals, vertical labels, decorative single-character marks — all Syne. Using Space Grotesk at large sizes is the wrong system signal.\n- **Every Syne element uses negative letter-spacing**: -0.01em to -0.03em depending on size. Syne at default tracking reads as untreated; the negative tracking is what gives display type its tight, compressed personality.\n- **Every body and label element is set in Space Grotesk.** Syne for body paragraphs reads as overwrought.\n- **Eyebrow labels are uppercase with 0.15em letter-spacing.** A label without uppercase + tracked spacing reads as a body fragment, not a label.\n- **Statistics and numerals are always weight 800.** Even mid-scale numerals (2rem) follow the display-weight convention. A weight-500 numeral reads as inventory, not a brag.\n- **Numerals and statistics may carry a small rotation (±0.5deg to ±1deg)** when they sit as standalone stat-items rather than inside a chart or table. The rotation reinforces the hand-placed feeling.\n\n### Typography Principles\nThe system's typographic rhythm comes from the **Syne-vs-Space-Grotesk contrast**, not from mixing weights within a face. A slide that uses only Syne at varying weights reads as monotonous; a slide that uses only Space Grotesk reads as understated to the point of corporate. The correct rhythm is Syne headline + Space Grotesk body, repeated with discipline.\n\nLine-height: tight on display (0.85–1.1), generous on body (1.5–1.7). Never use tight line-height on body or generous line-height on display — both inversions break the rhythm.\n\nItalic does not exist in this system. Underline does not exist. Emphasis is achieved by switching face (body → display) or weight (400 → 700), never by italicizing.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` — full viewport. Every `.slide` is absolutely positioned to fill the viewport, and only the `.active` slide is visible (opacity 1, others at opacity 0). Slide navigation is JS-driven via arrow keys, space, click on next/prev buttons, and touch swipe. A 4px-tall charcoal progress bar runs along the bottom of the viewport, growing to indicate slide position. All sizes use `clamp()` so the layout fluidly scales without breakpoints down to a mobile reflow at 768px.\n\n### Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide-lg}` | 4rem 5rem | Cover, statement, and closing slides — generous outer padding |\n| `{spacing.pad-slide-md}` | 3rem 4rem | Standard content slides — outer padding |\n| `{spacing.pad-card-lg}` | 2rem 3rem | Large card or contact block interior padding |\n| `{spacing.pad-card-md}` | 1.5rem | Standard card interior padding |\n| `{spacing.gap-lg}` | 3rem | Large grid/flex gaps between major regions |\n| `{spacing.gap-md}` | 2rem | Standard grid/flex gaps between cells |\n| `{spacing.gap-sm}` | 1.5rem | Tight inline gaps |\n\n### Chrome\nA fixed 48px×48px navigation cluster sits at bottom-right (prev arrow, slide counter, next arrow — all outlined in 2px charcoal). A 4px-tall charcoal progress bar runs flush along the bottom edge of the viewport. Neither is part of the slide composition; they exist as the deck's persistent presenter chrome and should not be styled against.\n\nThe progress bar and nav buttons are the only persistent UI elements. Slides themselves carry no top bar, no footer chrome, no slide numbers within the canvas.\n\n## Depth and Elevation\n\n### Double-Stroke Offset Border (Primary Technique)\nThe signature depth treatment is a **double-stroke offset border**. A card carries a 3px solid charcoal border, and a `::before` pseudo-element absolutely positioned over the card carries a second 2–3px border offset 6–8px down-and-right. The offset border has no fill — the canvas shows through. The visual effect is a hand-drawn double outline that suggests imperfect tracing, like a pen pulled twice along an edge. This is the system's elevation device; it replaces what most systems would do with a `box-shadow`.\n\n### Rotation (Secondary Technique)\nSmall rotations (±0.5deg to ±3deg) on cards, blocks, statistics, and decorative shapes provide a hand-placed feeling. Rotation directions alternate across adjacent elements — never two cards rotated the same direction next to each other — to suggest someone laid each piece down by hand rather than via a snapped grid.\n\n### Atmospheric Ghost-Blob\nA signature treatment: an oversized organic blob (`{components.ghost-blob}`) filled with charcoal at 0.08 opacity, placed absolutely in a slide corner as atmospheric wallpaper. The blob reads as a soft watermark cloud behind the content. Use sparingly — at most one ghost-blob per slide, anchored to a corner the primary content does not occupy.\n\n### No Web Shadows\nThe system uses **no `box-shadow` blur values, no `drop-shadow`, no rgba shadows**. All apparent depth comes from the double-stroke offset border, rotation, and ink-density contrast. A blurred shadow on any element breaks the hand-crafted aesthetic — the marks should look drawn, not rendered.\n\n## Shapes and Treatment\n\n### Border Radius Scale\n| Value | Use |\n|---|---|\n| 0px | Cards, blocks, tags, image frames, table cells |\n| 50% | Round avatar placeholders, step-node circles, doodle circles |\n| Asymmetric organic (e.g. `40% 60% 70% 30% / 40% 50% 60% 50%`) | Blob frames and blob fills only |\n| Pebble-asymmetric (e.g. `255px 15px 225px 15px / 15px 225px 15px 255px`) | Pebble-shaped frames only |\n\nThe system avoids smooth medium radii (4px, 8px, 12px) — corners are either sharp, perfectly round, or organically blob-shaped. The middle ground reads as a generic web app, which is the wrong signal.\n\n### Border Weights\n- **3px solid `{colors.text}`** — the standard outlined-card and blob-frame border weight.\n- **2–3px solid `{colors.text}`** — the offset ghost-border weight on the `::before` pseudo-element (slightly thinner than the primary).\n- **3px solid `{colors.text}`** — the chart axis weight (X and Y axes on bar charts).\n- **2px solid `{colors.text}`** — the nav-button border weight and the timeline-track horizontal line.\n- **2px stroke** — the standard SVG scribble stroke weight with rounded line-caps.\n\n### Decorative Element Types\n\n**Rough-box card** — A rectangular content card with the signature double-stroke offset border. Background can be canvas peach (default), or solid charcoal (inverted card). Padding from the `{spacing.pad-card-*}` scale. Optional small rotation (±0.5–3deg).\n\n**Organic blob frame** — A decorative outlined wrapper with asymmetric border-radius. Used as a portrait frame or decorative anchor; often holds a smaller solid blob-fill inside. Two characteristic shapes: the wavy organic blob (`{components.blob-frame-organic}`) and the pebble shape (`{components.blob-frame-pebble}`).\n\n**Solid blob fill** — A charcoal organic shape with asymmetric border-radius. Used either inside an outlined blob-frame (creating a frame-and-mass pairing) or floating alone as a decorative mass.\n\n**Scribble SVG** — Inline SVG path drawn as a single 2px-stroke charcoal line with round caps. The vocabulary: wavy stub, star outline, scribbled circle, squiggle waveform, arrow, concentric circles. Placed absolutely in slide corners or edges as decorative breath. Every slide gets at least one scribble; the most populated slides carry two or three.\n\n**Doodle circle / doodle rect** — Plain outlined circle or rectangle, slightly rotated, placed absolutely in slide corners as a minimal decorative anchor. The simpler counterpart to the blob shapes — when a slide needs visual punctuation but a blob would feel too organic.\n\n**Step-node circle** — A 64px round outlined node containing a single digit in Syne 800. Alternates between outlined (canvas fill, charcoal digit) and filled (charcoal fill, canvas digit) in sequence — odd steps filled, even steps outlined, or any consistent pattern.\n\n**Tag pill** — A small charcoal rectangle with peach text at 0.75rem weight 600. Anchored to the bottom-left of an image frame as a category label. The only inverted text-on-charcoal element that is not a full card.\n\n**Vertical spine label** — Syne 700 text at 1.5rem rotated 90deg, anchored to a slide's right edge with 0.1em letter-spacing. Reads as a magazine-spine wayfinder.\n\n**Ghost-blob wallpaper** — Oversized organic blob at 0.08 opacity, placed absolutely in a slide corner as atmospheric wallpaper.\n\n**Connector arrow doodle** — A small SVG sketched arrow (single 2px line with chevron head) used to suggest \"next\" or \"see also\" in the negative space of a slide.\n\n## Do's and Don'ts\n\n### Do\n- Use Syne for every display moment (headline, statement, title, number, vertical label) and Space Grotesk for every body and label. The two-face contrast is the system's typographic rhythm.\n- Apply negative letter-spacing (-0.01em to -0.03em) to every Syne element. Default tracking on Syne reads as untreated.\n- Apply the double-stroke offset border to every primary content card — 3px main outline plus a 6–8px offset ghost border via `::before`. This is the system's signature elevation device.\n- Place a scribbled SVG mark (squiggle, star, circle, arrow) in at least one corner of every slide as hand-drawn breath. The marks are punctuation, not content.\n- Give cards, blocks, and statistics a small ±0.5–3deg rotation. Alternate rotation direction across adjacent elements so nothing reads as snapped to a grid.\n- Use `{colors.text}` (charcoal) as the only ink color. Headlines, body, borders, scribbles, fills — all the same color.\n- Reach for `{colors.bg-alt}` when a region needs to read as a distinct surface without introducing white or a new color.\n- Let negative space breathe. One dominant element per slide plus one or two scribbles is the correct density.\n- Pair an outlined blob frame with a smaller solid blob fill inside it when you need a portrait-like decorative anchor.\n- Place an oversized ghost-blob (charcoal at 0.08 opacity) in a slide corner when the negative space feels empty but a scribble would be too small.\n\n### Don't\n- Don't introduce a third color. The system is peach-canvas + charcoal-ink only. No blues, no reds, no chart-segment palettes — chart bars are solid charcoal or outlined charcoal, never colored.\n- Don't use blurred `box-shadow`. All depth comes from double borders and rotation. A blurred shadow breaks the hand-drawn aesthetic immediately.\n- Don't apply medium border-radius values (4px, 8px, 12px). Corners are sharp, fully round, or organically blob-shaped — nothing between.\n- Don't use Space Grotesk for headlines or display moments. Syne is the personality face; substituting Space Grotesk loses the studio voice.\n- Don't use Syne for body paragraphs. It reads as overwrought at small sizes and at low weights.\n- Don't rotate elements more than 3deg. Beyond ±3deg the hand-placed feeling tips into wonky and amateur.\n- Don't rotate every element in the same direction. Alternate ±directions across adjacent elements; uniformity reads as a tilted canvas, not as hand-placement.\n- Don't crowd a slide with simultaneous cards, statistics, and doodles. The system reads as expensive when sparse and broken when dense.\n- Don't use italic or underline for emphasis. Switch face or weight instead.\n- Don't put display-weight text at default tracking. Always tighten Syne with negative letter-spacing.\n\n## Responsive Behavior\n\nThe system targets `100vw × 100vh` and uses `clamp()` throughout, so type and padding scale fluidly between viewport sizes without media queries. A single media query at `max-width: 768px` reflows multi-column grids to single-column, collapses the horizontal timeline track to vertical, and reduces slide padding to 2rem.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `Space`, or `Enter`.\n- Slides reverse via `ArrowLeft`.\n- The active slide carries the `.active` class; inactive slides are visibility-hidden at opacity 0.\n- Slide transitions use a 0.6s opacity fade.\n- A 4px-tall charcoal progress bar runs along the bottom of the viewport, growing as the deck advances.\n- A bottom-right nav cluster shows prev/next buttons (48px outlined squares) and the current/total slide counter.\n- Touch swipe horizontal on mobile advances/reverses.\n\n### Print Behavior\nNo `@media print` rule is defined. The deck is web/viewport-first; printing will not render correctly without custom print styles.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / headline / numeral (Syne 700–800) | Syne | 站酷快乐体 ZCOOL KuaiLe | 400 (only weight available) |\n| Body / label (Space Grotesk 400–600) | Space Grotesk | 悠哉字体 Yozai | 400 |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. Syne tokens become `\"Syne, ZCOOL KuaiLe, sans-serif\"`; Space Grotesk tokens become `\"Space Grotesk, Yozai, sans-serif\"`. Latin glyphs render in the original face; CJK characters fall through automatically.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Syne:wght@700;800&family=Space+Grotesk:wght@400;500;600;700&family=ZCOOL+KuaiLe&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPlayful is a hand-crafted editorial system built on Syne (quirky humanist display) plus Space Grotesk (warm geometric body) on a peach-clay canvas. The Chinese transfer is exceptionally strong because both Chinese faces selected here carry the same \"warm, hand-touched, independent studio\" register as the Latin pairing.\n\n**站酷快乐体 ZCOOL KuaiLe** is a rounded, friendly Chinese display face with quirky humanist proportions — the closest CDN-available equivalent to Syne's expressive studio voice. At display weights (4–9rem), KuaiLe reads as a contemporary independent Chinese studio voice, not a corporate or formal one. It pairs naturally with the peach canvas and charcoal ink. **Drop the negative letter-spacing (-0.01em to -0.03em) for Chinese display** — KuaiLe is designed on a square em-box and tightening causes glyph collision. The face's intrinsic warmth replaces what negative tracking does for Syne.\n\n**悠哉字体 Yozai** is a Chinese sans-serif designed for relaxed body reading — slightly rounded terminals, friendly humanist proportions, designed to match the warmth that Space Grotesk brings to Latin. Set every Chinese body paragraph and label in Yozai 400. The eyebrow label treatment (0.15em letter-spacing + uppercase in Latin) does not transfer to CJK; for Chinese eyebrows, use Yozai at the same 0.85rem size with letter-spacing 0 and no uppercase — small size alone reads as label.\n\nThe double-stroke offset border, the small ±3deg rotations, the organic blob shapes, the SVG scribbles, the ghost-blob wallpaper — all script-agnostic. The single-color discipline (peach + charcoal) and the hand-crafted aesthetic survive the script switch fully.\n\nThe system's typographic rhythm (Syne-vs-Space-Grotesk contrast) becomes (KuaiLe-vs-Yozai contrast) in pure Chinese — both pairs carry the same \"expressive editorial built on a reliable grid\" rhythm. Statistics and numerals are pure digits and transfer unchanged in Syne 800; only when a stat carries a Chinese unit suffix (`亿`, `万`) does the suffix glyph fall through to KuaiLe.\n\n### Known CJK Gap\n\nZCOOL KuaiLe and Yozai are both single-weight faces (400). The system's reliance on weight contrast (Syne 700 vs 800 for sub-display hierarchy; Space Grotesk 400 vs 500 vs 600 for label hierarchy) collapses to size-only hierarchy in pure Chinese. This is not a meaningful loss — Playful's hierarchy is primarily size-driven anyway, and the missing weight steps don't change the visual rhythm enough to matter. The rotation, scribble, and double-border treatments carry the system's character regardless of weight availability.\n\n## Iteration Guide\n\n1. Any new card uses the rough-box pattern: 3px charcoal border, peach background (or charcoal if inverted), padding from `{spacing.pad-card-*}`, and a `::before` ghost-border offset 6–8px down-and-right at 2–3px weight.\n2. Any new card carries a small rotation (±0.5–3deg). Alternate rotation direction with neighboring cards; never align all cards to the same angle.\n3. Any new headline uses Syne at weight 700–800 with negative letter-spacing. If the headline is the primary slide moment, reach for `{typography.headline}` or `{typography.display}` — not `{typography.title}` (which is sub-region scale).\n4. Any new body or label uses Space Grotesk at weight 400–600. Use `{typography.label-eyebrow}` (0.85rem, weight 600, uppercase, 0.15em tracking) for the small label above a headline.\n5. Any new statistic or numeral uses Syne at weight 800 with negative letter-spacing. Even small numerals (2rem) follow the display-weight convention.\n6. Any new slide gets at least one scribbled SVG mark in a corner — squiggle, star, circle, arrow. Stroke 2px with rounded line-caps in `{colors.text}`.\n7. Any decorative shape uses asymmetric organic border-radius (blob) or sharp 0px (rectangle) or 50% (round). Avoid medium radii.\n8. If the slide negative space feels heavy, add a ghost-blob (charcoal at 0.08 opacity, oversized organic shape) anchored to a corner the content does not occupy.\n9. Charts (bar, donut, line) use only `{colors.text}` and `{colors.bg-alt}` as fills. Do not introduce chromatic chart palettes.\n10. Cards may be either outlined (default — canvas fill, charcoal border, charcoal text) or inverted (charcoal fill, peach text). Inverted cards are the system's emphasis device; reserve them for the cell you want to anchor the slide's attention.\n\n## Known Gaps\n\n- The system loads two Google Fonts (Syne, Space Grotesk) over the network. If fonts fail to load, the fallback sans-serif will render but the system's voice will be lost. Self-hosting is recommended for production.\n- The double-stroke offset border (`::before` with 6–8px offset) requires the parent card to have `position: relative` and the pseudo-element to be visually inside the card's bounding box plus the offset. Cards near a slide edge may have their offset border clipped.\n- The mobile responsive breakpoint at 768px reflows grids but does not adjust the absolutely-positioned decorative SVGs and blobs — they remain at desktop coordinates and may overlap or fall off-screen on small viewports. Treat the responsive behavior as basic, not polished.\n- The peach canvas (#F0C8A0) has a strong cultural register (earthy, warm, slightly rustic). It does not pair well with cool-toned brand palettes and is not interchangeable with a neutral cream or white — the warmth is foundational.\n- Image placeholders (`{colors.bg-alt}` fills with a centered \"IMG 01\" label) are stubs only. Production decks need real images that respect the warm palette; cool-toned photos will fight the canvas.\n- There is no defined dark-mode variant. The system is single-mode (warm peach canvas only).\n- The hover states on nav buttons (background fills to charcoal, text inverts to peach) are interactive presenter-chrome behaviors and are not part of the deck's slide composition.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/playful/preview.md":"# Playful Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/playful/design.md`\n- Preview card: `bold-template-pack/templates/playful/preview.md`\n\n## Selection Metadata\n\n- Slug: `playful`\n- Tagline: Sun-warm peach background with Syne display: a friendly indie launch deck.\n- Mood: warm, approachable, indie, friendly\n- Tone: upbeat, informal, welcoming\n- Formality: low\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel warm, indie, and approachable: creator portfolios, indie product launches, lifestyle brands, small-business pitches, newsletter / community decks. Also welcoming for any deck — including tech or research — that wants to feel friendly and human rather than corporate.\n- Avoid for: Contexts where institutional credibility matters more than warmth — the peach palette is intentionally informal.\n\n## Visual Snapshot\n\nA warm, hand-crafted editorial system built on a peach-clay canvas with charcoal ink as the only \"color.\" Display type runs in Syne (weight 700–800, tight negative tracking); body type runs in Space Grotesk at weight 400–500. The aesthetic borrows from independent studio decks, risograph zines, and sketchbook spreads: organic blob frames, scribbled SVG doodles, slightly rotated cards, and double-stroke offset borders give every slide a hand-touched, unpolished warmth. The effect is creative-studio editorial, not corporate pitch — confident but human, structured but loose.\n\nPlayful is a hand-crafted editorial system anchored by a single warm canvas — a peach-clay {colors.bg} (#F0C8A0) — with charcoal {colors.text} (#1A1A1A) as the only meaningful \"color.\" Everything reads as ink-on-clay-paper. There are no secondary brand colors, no gradients, no chromatic accents. The system commits fully to a one-color discipline and finds its expressiveness in shape, weight, rotation, and hand-drawn marks rather than in palette variety.\n\n## Preview Ingredients\n\n- Palette: bg #F0C8A0; bg-alt #E8B88E; light #F7DEC6; text #1A1A1A\n- Typography: Syne; Space Grotesk\n- Signature move: Peach-clay canvas ({colors.bg}) with charcoal ink ({colors.text}) as the only color. No secondary brand palette.\n- Signature move: Syne at weight 700–800 with negative letter-spacing for every display and numeric moment; Space Grotesk at 400–500 for body.\n- Signature move: Double-stroke offset borders on cards — a 3px outline plus a 6–8px offset ghost border via ::before.\n- Signature move: Small ±0.5deg to ±3deg rotations on cards, blocks, and statistics for a hand-placed feel.\n- Signature move: Organic blob shapes with asymmetric border-radius act as decorative frames and fills.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/raw-grid/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fraw-grid%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/raw-grid/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fraw-grid%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-windows/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-windows%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-windows/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-windows%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-zine/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-zine%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-zine/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-zine%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/sakura-chroma/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsakura-chroma%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/sakura-chroma/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsakura-chroma%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/scatterbrain/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fscatterbrain%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/scatterbrain/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fscatterbrain%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/signal/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsignal%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/signal/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsignal%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/soft-editorial/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsoft-editorial%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/soft-editorial/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsoft-editorial%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/stencil-tablet/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstencil-tablet%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/stencil-tablet/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstencil-tablet%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/studio/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstudio%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/studio/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstudio%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/vellum/design.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fvellum%2Fdesign.md -->","plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/vellum/preview.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fvellum%2Fpreview.md -->","plugins/frontend-slides/skills/frontend-slides/html-template.md":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fhtml-template.md -->"},"items":[{"name":"animation-patterns.md","path":"plugins/frontend-slides/skills/frontend-slides/animation-patterns.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/animation-patterns.md","title":"Frontend-slides Skill","category":"anthropic-skill","format":"markdown","content":"# Animation Patterns Reference\n\nUse this reference when generating presentations. Match animations to the intended feeling.\n\n## Effect-to-Feeling Guide\n\n| Feeling | Animations | Visual Cues |\n|---------|-----------|-------------|\n| **Dramatic / Cinematic** | Slow fade-ins (1-1.5s), large scale transitions (0.9 to 1), parallax scrolling | Dark backgrounds, spotlight effects, full-bleed images |\n| **Techy / Futuristic** | Neon glow (box-shadow), glitch/scramble text, grid reveals | Particle systems (canvas), grid patterns, monospace accents, cyan/magenta/electric blue |\n| **Playful / Friendly** | Bouncy easing (spring physics), floating/bobbing | Rounded corners, pastel/bright colors, hand-drawn elements |\n| **Professional / Corporate** | Subtle fast animations (200-300ms), clean slides | Navy/slate/charcoal, precise spacing, data visualization focus |\n| **Calm / Minimal** | Very slow subtle motion, gentle fades | High whitespace, muted palette, serif typography, generous padding |\n| **Editorial / Magazine** | Staggered text reveals, image-text interplay | Strong type hierarchy, pull quotes, grid-breaking layouts, serif headlines + sans body |\n\n## Entrance Animations\n\n```css\n/* Fade + Slide Up (most versatile) */\n.reveal {\n    opacity: 0;\n    transform: translateY(30px);\n    transition: opacity 0.6s var(--ease-out-expo),\n                transform 0.6s var(--ease-out-expo);\n}\n.visible .reveal {\n    opacity: 1;\n    transform: translateY(0);\n}\n\n/* Scale In */\n.reveal-scale {\n    opacity: 0;\n    transform: scale(0.9);\n    transition: opacity 0.6s, transform 0.6s var(--ease-out-expo);\n}\n\n/* Slide from Left */\n.reveal-left {\n    opacity: 0;\n    transform: translateX(-50px);\n    transition: opacity 0.6s, transform 0.6s var(--ease-out-expo);\n}\n\n/* Blur In */\n.reveal-blur {\n    opacity: 0;\n    filter: blur(10px);\n    transition: opacity 0.8s, filter 0.8s var(--ease-out-expo);\n}\n```\n\n## Background Effects\n\n```css\n/* Gradient Mesh — layered radial gradients for depth */\n.gradient-bg {\n    background:\n        radial-gradient(ellipse at 20% 80%, rgba(120, 0, 255, 0.3) 0%, transparent 50%),\n        radial-gradient(ellipse at 80% 20%, rgba(0, 255, 200, 0.2) 0%, transparent 50%),\n        var(--bg-primary);\n}\n\n/* Noise Texture — inline SVG for grain */\n.noise-bg {\n    background-image: url(\"data:image/svg+xml,...\"); /* Inline SVG noise */\n}\n\n/* Grid Pattern — subtle structural lines */\n.grid-bg {\n    background-image:\n        linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px),\n        linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px);\n    background-size: 50px 50px;\n}\n```\n\n## Interactive Effects\n\n```javascript\n/* 3D Tilt on Hover — adds depth to cards/panels */\nclass TiltEffect {\n    constructor(element) {\n        this.element = element;\n        this.element.style.transformStyle = 'preserve-3d';\n        this.element.style.perspective = '1000px';\n\n        this.element.addEventListener('mousemove', (e) => {\n            const rect = this.element.getBoundingClientRect();\n            const x = (e.clientX - rect.left) / rect.width - 0.5;\n            const y = (e.clientY - rect.top) / rect.height - 0.5;\n            this.element.style.transform = `rotateY(${x * 10}deg) rotateX(${-y * 10}deg)`;\n        });\n\n        this.element.addEventListener('mouseleave', () => {\n            this.element.style.transform = 'rotateY(0) rotateX(0)';\n        });\n    }\n}\n```\n\n## Troubleshooting\n\n| Problem | Fix |\n|---------|-----|\n| Fonts not loading | Check Fontshare/Google Fonts URL; ensure font names match in CSS |\n| Animations not triggering | Verify Intersection Observer is running; check `.visible` class is being added |\n| Scroll snap not working | Ensure `scroll-snap-type: y mandatory` on html; each slide needs `scroll-snap-align: start` |\n| Mobile issues | Disable heavy effects at 768px breakpoint; test touch events; reduce particle count |\n| Performance issues | Use `will-change` sparingly; prefer `transform`/`opacity` animations; throttle scroll handlers |\n","isInternal":false,"tokens":1031,"sizeBytes":4030},{"name":"selection-index.json","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/selection-index.json","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/selection-index.json","title":"Bold-template-pack Skill","category":"anthropic-skill","format":"json","content":"{\n  \"schema_version\": 1,\n  \"pack_name\": \"Beautiful HTML Templates - Bold Design Pack\",\n  \"source_repo\": \"zarazhangrui/beautiful-html-templates\",\n  \"template_count\": 34,\n  \"usage\": {\n    \"selection\": \"Read this compact index first to shortlist bold templates from metadata.\",\n    \"previews\": \"For title-slide previews, read only the preview_md files for the shortlisted bold candidates.\",\n    \"final_generation\": \"After the user chooses a bold template, read exactly that template design_md before generating the full deck.\",\n    \"never\": \"Do not bulk-read templates/*/design.md and do not read template.html unless the selected design.md is missing a critical implementation detail.\"\n  },\n  \"frontend_slides_policy\": {\n    \"layout_model\": \"fixed-stage\",\n    \"canvas_width\": 1920,\n    \"canvas_height\": 1080,\n    \"scaling\": \"scale-stage-to-viewport\",\n    \"mobile_behavior\": \"preserve 16:9 stage; letterbox or pillarbox instead of reflowing slide content\"\n  },\n  \"templates\": [\n    {\n      \"slug\": \"8-bit-orbit\",\n      \"name\": \"8-Bit Orbit\",\n      \"tagline\": \"Pixel-art neon arcade aesthetic on a deep navy void.\",\n      \"mood\": [\n        \"retro-tech\",\n        \"playful\",\n        \"cyberpunk\",\n        \"energetic\"\n      ],\n      \"tone\": [\n        \"geeky\",\n        \"neon\",\n        \"rebellious\",\n        \"sci-fi\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos. Just as good for a tech talk that wants to lean into nostalgic-digital craft, a synthwave brand deck, or a creative review that wants to feel like a console.\",\n      \"avoid_for\": \"Contexts where the dark neon palette would actively work against the message — quiet institutional finance disclosures, healthcare patient-facing materials, traditional luxury.\",\n      \"preview_md\": \"bold-template-pack/templates/8-bit-orbit/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/8-bit-orbit/design.md\"\n    },\n    {\n      \"slug\": \"biennale-yellow\",\n      \"name\": \"Biennale Yellow\",\n      \"tagline\": \"Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients.\",\n      \"mood\": [\n        \"editorial\",\n        \"atmospheric\",\n        \"warm\",\n        \"cultural-institution\",\n        \"poster-like\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"contemplative\",\n        \"warm-modern\",\n        \"Dutch-editorial\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, studio retrospectives. Equally good for any deck wanting Dutch-editorial atmosphere with an unmistakable single-color signature.\",\n      \"avoid_for\": \"Decks that need visual punch or saturated multi-color energy — the warm-paper canvas and one-yellow palette are intentionally quiet and atmospheric.\",\n      \"preview_md\": \"bold-template-pack/templates/biennale-yellow/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/biennale-yellow/design.md\"\n    },\n    {\n      \"slug\": \"block-frame\",\n      \"name\": \"BlockFrame\",\n      \"tagline\": \"Neobrutalist deck with pastel-neon color blocks and chunky black borders.\",\n      \"mood\": [\n        \"bold\",\n        \"playful\",\n        \"graphic\",\n        \"fresh\"\n      ],\n      \"tone\": [\n        \"confident\",\n        \"graphic\",\n        \"pop\",\n        \"design-led\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns. Also a strong unexpected pick for tech, finance, or research when the speaker wants to land as confident and contemporary rather than buttoned-up.\",\n      \"avoid_for\": \"Contexts that require quiet institutional restraint or traditional weight (regulated disclosures, formal legal briefs).\",\n      \"preview_md\": \"bold-template-pack/templates/block-frame/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/block-frame/design.md\"\n    },\n    {\n      \"slug\": \"blue-professional\",\n      \"name\": \"Blue Professional\",\n      \"tagline\": \"Cream paper background with electric cobalt blue accents; clean modern professional.\",\n      \"mood\": [\n        \"professional\",\n        \"modern\",\n        \"calm\",\n        \"trustworthy\"\n      ],\n      \"tone\": [\n        \"clean\",\n        \"considered\",\n        \"polished\",\n        \"neutral\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports. Also a clean, tasteful choice whenever you want to read as professional without going stiff — research synthesis, internal reviews, brand work for service businesses.\",\n      \"avoid_for\": \"Contexts where the deck should feel hot, playful, or intentionally informal — the cool electric-blue restraint will read as overly polished.\",\n      \"preview_md\": \"bold-template-pack/templates/blue-professional/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/blue-professional/design.md\"\n    },\n    {\n      \"slug\": \"bold-poster\",\n      \"name\": \"Bold Poster\",\n      \"tagline\": \"Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent.\",\n      \"mood\": [\n        \"bold\",\n        \"editorial\",\n        \"loud\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"dramatic\",\n        \"graphic\",\n        \"sharp\",\n        \"intentional\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews. Excellent any time you want a few words to feel like a poster — including unexpected fits like a tech keynote or a finance manifesto that wants to be quotable.\",\n      \"avoid_for\": \"Decks that need to communicate dense information per slide — the layout is built around a few large statements, not paragraphs of detail.\",\n      \"preview_md\": \"bold-template-pack/templates/bold-poster/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/bold-poster/design.md\"\n    },\n    {\n      \"slug\": \"broadside\",\n      \"name\": \"Broadside\",\n      \"tagline\": \"Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack.\",\n      \"mood\": [\n        \"editorial\",\n        \"dramatic\",\n        \"loud\",\n        \"newspaper\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"punchy\",\n        \"literary\",\n        \"considered\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements. Also a striking pick for tech, research, or business decks that want a dramatic single-accent editorial feel.\",\n      \"avoid_for\": \"Decks that need to feel quiet, warm, or institutionally traditional — the dark canvas with fire-orange accent commits to drama.\",\n      \"preview_md\": \"bold-template-pack/templates/broadside/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/broadside/design.md\"\n    },\n    {\n      \"slug\": \"capsule\",\n      \"name\": \"Capsule\",\n      \"tagline\": \"Modular pill-shaped cards on warm bone with a full pastel-pop palette.\",\n      \"mood\": [\n        \"playful\",\n        \"modern\",\n        \"warm\",\n        \"fresh\",\n        \"fun\"\n      ],\n      \"tone\": [\n        \"upbeat\",\n        \"graphic\",\n        \"approachable\",\n        \"cool\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials. Also fun for a playful tech demo or a research deck that wants pop-art clarity instead of gravitas.\",\n      \"avoid_for\": \"Contexts that require traditional institutional weight — the capsule shapes and pastel pops actively soften authority.\",\n      \"preview_md\": \"bold-template-pack/templates/capsule/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/capsule/design.md\"\n    },\n    {\n      \"slug\": \"cartesian\",\n      \"name\": \"Cartesian\",\n      \"tagline\": \"Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried.\",\n      \"mood\": [\n        \"quiet\",\n        \"considered\",\n        \"elegant\",\n        \"warm-minimal\"\n      ],\n      \"tone\": [\n        \"classical\",\n        \"literary\",\n        \"restrained\",\n        \"confident-quiet\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks. Also a strong choice for editorial features, founder reflections, or any deck where restraint is the message — including across tech and finance.\",\n      \"avoid_for\": \"Decks that need visual heat, multiple accents, or a sense of urgency — the warm-neutral palette is intentionally low-energy.\",\n      \"preview_md\": \"bold-template-pack/templates/cartesian/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/cartesian/design.md\"\n    },\n    {\n      \"slug\": \"cobalt-grid\",\n      \"name\": \"Cobalt Grid\",\n      \"tagline\": \"Electric cobalt serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules.\",\n      \"mood\": [\n        \"editorial\",\n        \"design-research\",\n        \"studious\",\n        \"modernist\",\n        \"tech-print\",\n        \"monochrome\"\n      ],\n      \"tone\": [\n        \"considered\",\n        \"literary\",\n        \"studious\",\n        \"quietly-modern\",\n        \"editorial\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report. Strong for studio annuals, agency capabilities decks, design-research publications, architecture / art / academic decks, and any deck wanting one strict accent colour and a printed-ledger calmness rather than corporate polish.\",\n      \"avoid_for\": \"Decks that need warmth, multi-colour energy, or a casual / playful voice — the strict cobalt + cream + grid palette is intentionally austere.\",\n      \"preview_md\": \"bold-template-pack/templates/cobalt-grid/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/cobalt-grid/design.md\"\n    },\n    {\n      \"slug\": \"coral\",\n      \"name\": \"Coral\",\n      \"tagline\": \"Cream and coral on near-black, set in oversized Bebas Neue.\",\n      \"mood\": [\n        \"bold\",\n        \"warm\",\n        \"modern\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"punchy\",\n        \"magazine\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials. Just as strong for a creator portfolio, a manifesto, or a tech / research deck that wants warmth and a single bold accent instead of corporate cool.\",\n      \"avoid_for\": \"Contexts that should feel quiet or institutional — the coral accent and oversized Bebas Neue commit hard to a confident magazine voice.\",\n      \"preview_md\": \"bold-template-pack/templates/coral/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/coral/design.md\"\n    },\n    {\n      \"slug\": \"creative-mode\",\n      \"name\": \"Creative Mode\",\n      \"tagline\": \"Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display.\",\n      \"mood\": [\n        \"creative\",\n        \"confident\",\n        \"playful\",\n        \"design-led\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"expressive\",\n        \"modern\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium-high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews. Also a great unexpected pick for a tech talk, research findings, or finance review when the speaker wants to lead with taste rather than convention.\",\n      \"avoid_for\": \"Contexts that demand institutional restraint and a quiet authority — the saturated multi-accent palette will read as expressive, not formal.\",\n      \"preview_md\": \"bold-template-pack/templates/creative-mode/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/creative-mode/design.md\"\n    },\n    {\n      \"slug\": \"daisy-days\",\n      \"name\": \"Daisy Days\",\n      \"tagline\": \"Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm.\",\n      \"mood\": [\n        \"cheerful\",\n        \"playful\",\n        \"warm\",\n        \"sunny\",\n        \"wholesome\"\n      ],\n      \"tone\": [\n        \"friendly\",\n        \"soft\",\n        \"encouraging\",\n        \"approachable\",\n        \"lighthearted\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration. Also lovely for an unexpected playful internal kickoff, a wedding planning deck, or any moment where warmth is the message — including across tech or business contexts.\",\n      \"avoid_for\": \"Contexts where the audience explicitly expects authority and precision — the hand-drawn pastel SVG decorations are the opposite of buttoned-up.\",\n      \"preview_md\": \"bold-template-pack/templates/daisy-days/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/daisy-days/design.md\"\n    },\n    {\n      \"slug\": \"editorial-forest\",\n      \"name\": \"Editorial Forest\",\n      \"tagline\": \"Forest green, dusty pink, and warm cream meet Source Serif 4 in a quiet, intentional quarterly-review deck.\",\n      \"mood\": [\n        \"editorial\",\n        \"quiet\",\n        \"considered\",\n        \"warm\",\n        \"intentional\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"thoughtful\",\n        \"warm\",\n        \"low-pressure\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like a considered editorial — quarterly reviews, internal readouts, studio updates, creative-agency presentations. Equally good for any deck that wants to feel warm and unhurried rather than corporate, including research recaps, book or program announcements, and team retrospectives.\",\n      \"avoid_for\": \"Contexts that need to feel urgent, punchy, or sales-driven — the palette and rhythm are intentionally quiet.\",\n      \"preview_md\": \"bold-template-pack/templates/editorial-forest/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/editorial-forest/design.md\"\n    },\n    {\n      \"slug\": \"editorial-tri-tone\",\n      \"name\": \"Editorial Tri-Tone\",\n      \"tagline\": \"Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif.\",\n      \"mood\": [\n        \"editorial\",\n        \"warm\",\n        \"intentional\",\n        \"moody\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"warm\",\n        \"considered\",\n        \"stylish\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews. Equally good for any deck — including tech, research, or business — that wants tri-tone discipline and serif/sans contrast instead of the usual neutrals.\",\n      \"avoid_for\": \"Decks that need to read as soft or comforting — the burgundy/pink/cream tri-tone is intentionally high-contrast and styled.\",\n      \"preview_md\": \"bold-template-pack/templates/editorial-tri-tone/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/editorial-tri-tone/design.md\"\n    },\n    {\n      \"slug\": \"emerald-editorial\",\n      \"name\": \"Emerald Editorial\",\n      \"tagline\": \"A magazine-cover business deck: emerald + navy + paper, double-rule masthead ornaments, and a bold Bodoni-style display serif.\",\n      \"mood\": [\n        \"editorial\",\n        \"considered\",\n        \"confident\",\n        \"magazine-cover\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"authoritative\",\n        \"warm\",\n        \"designed\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like the front of a serious magazine, including but not limited to leadership readouts, planning-office reviews, and strategy briefings. The double-rule masthead ornament gives it editorial gravitas without making it stiff — also a great unexpected pick for product launches or research recaps that want to feel considered rather than corporate.\",\n      \"avoid_for\": \"Contexts that need to read as quiet, neutral, or institutionally restrained — the emerald field is too saturated to disappear into the background.\",\n      \"preview_md\": \"bold-template-pack/templates/emerald-editorial/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/emerald-editorial/design.md\"\n    },\n    {\n      \"slug\": \"grove\",\n      \"name\": \"Grove\",\n      \"tagline\": \"Forest-green canvas with cream type, classical Playfair serifs, and a single rust accent.\",\n      \"mood\": [\n        \"organic\",\n        \"considered\",\n        \"warm\",\n        \"literary\",\n        \"natural\"\n      ],\n      \"tone\": [\n        \"classical\",\n        \"warm\",\n        \"considered\",\n        \"patient\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel organic, considered, and grown-up: sustainability and wellness brands, outdoor / nature products, wineries and restaurants, literary or arts decks, advisory deliverables, bilingual EN/CN reports. Also a calm, distinctive choice for tech, research, or business decks that want patience over urgency.\",\n      \"avoid_for\": \"Decks that need neon energy or rapid-fire pop — the forest-green canvas and Playfair serif commit to a slow, classical voice.\",\n      \"preview_md\": \"bold-template-pack/templates/grove/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/grove/design.md\"\n    },\n    {\n      \"slug\": \"long-table\",\n      \"name\": \"Long Table\",\n      \"tagline\": \"Warm cream and rust-red supper-club aesthetic with bold uppercase grotesk headlines, Fraunces serifs, and pill-shaped outlined buttons.\",\n      \"mood\": [\n        \"warm\",\n        \"intimate\",\n        \"modern\",\n        \"friendly\",\n        \"small-batch\",\n        \"social\",\n        \"hospitality\"\n      ],\n      \"tone\": [\n        \"warm\",\n        \"playful\",\n        \"considered\",\n        \"social\",\n        \"magazine-friendly\",\n        \"modern-editorial\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a warm, intimate, modern hospitality / community brand: supper clubs, dinner series, small restaurants, creative-studio events, membership pitches, lifestyle and wine brands. Equally good for any deck wanting a single warm accent colour, mixed-weight typography, and a social-media-aware modern-editorial voice.\",\n      \"avoid_for\": \"Decks that need corporate polish, technical density, or a cold / minimalist register — the rust-red palette and bold serif mix are intentionally warm and people-facing.\",\n      \"preview_md\": \"bold-template-pack/templates/long-table/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/long-table/design.md\"\n    },\n    {\n      \"slug\": \"mat\",\n      \"name\": \"Mat\",\n      \"tagline\": \"Dark sage canvas with bone paper and burnt-orange accent; mid-century modern with wood undertones.\",\n      \"mood\": [\n        \"warm-modern\",\n        \"considered\",\n        \"tactile\",\n        \"mid-century\"\n      ],\n      \"tone\": [\n        \"warm\",\n        \"design-led\",\n        \"intentional\",\n        \"considered\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel mid-century, tactile, and intentional: design studio credentials, architecture / interior brands, ceramics / craft / furniture, advisory decks. Also a warm, distinctive choice for tech, research, or business decks that want a considered analog feel instead of digital-cool.\",\n      \"avoid_for\": \"Contexts that need fast tech energy or institutional restraint — the muted sage and burnt-orange palette is intentionally warm and slow.\",\n      \"preview_md\": \"bold-template-pack/templates/mat/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/mat/design.md\"\n    },\n    {\n      \"slug\": \"monochrome\",\n      \"name\": \"Monochrome\",\n      \"tagline\": \"Ivory ledger paper with all-black type; Lora serif headlines, Jost body, no color at all.\",\n      \"mood\": [\n        \"restrained\",\n        \"literary\",\n        \"archival\",\n        \"ledger\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"neutral\",\n        \"honest\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a hand-typeset ledger: user research synthesis, white papers, longform reports, academic and policy briefs, advisory deliverables, bilingual EN/CN reports. Equally good for tech, design, or brand decks that want their words to be the only thing on the page.\",\n      \"avoid_for\": \"Decks that need visual personality or color-led storytelling — the all-ink palette is intentionally austere.\",\n      \"preview_md\": \"bold-template-pack/templates/monochrome/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/monochrome/design.md\"\n    },\n    {\n      \"slug\": \"neo-grid-bold\",\n      \"name\": \"Neo-Grid Bold\",\n      \"tagline\": \"Editorial neo-brutalism with a single neon yellow accent on off-white paper.\",\n      \"mood\": [\n        \"confident\",\n        \"punchy\",\n        \"editorial\",\n        \"modern\"\n      ],\n      \"tone\": [\n        \"bold\",\n        \"minimal\",\n        \"design-led\",\n        \"graphic\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel confident and editorial-graphic: design-led pitches, brand work, founder talks, conference keynotes. Excellent for stat-heavy slides, comparisons, and process flows. Just as strong for tech, research, or finance when the speaker wants to read as design-led rather than corporate.\",\n      \"avoid_for\": \"Contexts that need to feel quiet, traditional, or warm — the neon-yellow accent and uppercase display commit to a confident editorial voice.\",\n      \"preview_md\": \"bold-template-pack/templates/neo-grid-bold/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/neo-grid-bold/design.md\"\n    },\n    {\n      \"slug\": \"peoples-platform\",\n      \"name\": \"People's Platform (Block & Bold)\",\n      \"tagline\": \"Activist poster energy: blue, orange, red on cream, with Alfa Slab + Caveat Brush.\",\n      \"mood\": [\n        \"activist\",\n        \"loud\",\n        \"graphic\",\n        \"honest\"\n      ],\n      \"tone\": [\n        \"punchy\",\n        \"direct\",\n        \"expressive\",\n        \"warm-bold\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium-high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel honest, loud, and graphic: cultural commentary, manifestos, civic and community decks, design talks, campaign pitches. Excellent for founder-vision moments, mission statements, or any deck — including across industries — that wants protest-poster energy instead of corporate polish.\",\n      \"avoid_for\": \"Contexts where institutional restraint is the actual goal — the saturated political-poster palette commits hard to expressive energy.\",\n      \"preview_md\": \"bold-template-pack/templates/peoples-platform/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/peoples-platform/design.md\"\n    },\n    {\n      \"slug\": \"pin-and-paper\",\n      \"name\": \"Pin & Paper\",\n      \"tagline\": \"Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture.\",\n      \"mood\": [\n        \"crafted\",\n        \"handmade\",\n        \"warm\",\n        \"thoughtful\",\n        \"literary\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"intimate\",\n        \"warm\",\n        \"grounded\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel hand-crafted, warm, and literary: qualitative research findings, founder reflections, longform brand stories, workshop debriefs. The signature safety-pin illustrations and paper-grain texture make it especially good for any deck — including tech or business — that wants personality and warmth over polish.\",\n      \"avoid_for\": \"Decks that need to feel digital-native polished or rigorously data-driven — handwritten Caveat is intentionally informal.\",\n      \"preview_md\": \"bold-template-pack/templates/pin-and-paper/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/pin-and-paper/design.md\"\n    },\n    {\n      \"slug\": \"pink-script\",\n      \"name\": \"Pink Script — After Hours\",\n      \"tagline\": \"Black canvas, hot pink accent, pearl-cream paper, Instrument Serif headlines: late-night editorial luxury.\",\n      \"mood\": [\n        \"nocturnal\",\n        \"moody\",\n        \"intentional\",\n        \"luxe\",\n        \"expressive\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"sultry\",\n        \"considered\",\n        \"magazine\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"low\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel nocturnal, intentional, and a little luxe: fashion brand decks, creator personal brands, after-hours / nightlife / spirits launches, luxury product reveals, editorial features. Also a striking unexpected pick for a tech keynote, research synthesis, or business pitch that wants to land with magnetic confidence.\",\n      \"avoid_for\": \"Daytime corporate-professional and traditional B2B contexts where the dark canvas with hot-pink accent reads as too styled or too expressive.\",\n      \"preview_md\": \"bold-template-pack/templates/pink-script/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/pink-script/design.md\"\n    },\n    {\n      \"slug\": \"playful\",\n      \"name\": \"Playful\",\n      \"tagline\": \"Sun-warm peach background with Syne display: a friendly indie launch deck.\",\n      \"mood\": [\n        \"warm\",\n        \"approachable\",\n        \"indie\",\n        \"friendly\"\n      ],\n      \"tone\": [\n        \"upbeat\",\n        \"informal\",\n        \"welcoming\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel warm, indie, and approachable: creator portfolios, indie product launches, lifestyle brands, small-business pitches, newsletter / community decks. Also welcoming for any deck — including tech or research — that wants to feel friendly and human rather than corporate.\",\n      \"avoid_for\": \"Contexts where institutional credibility matters more than warmth — the peach palette is intentionally informal.\",\n      \"preview_md\": \"bold-template-pack/templates/playful/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/playful/design.md\"\n    },\n    {\n      \"slug\": \"raw-grid\",\n      \"name\": \"Raw Grid\",\n      \"tagline\": \"Neo-brutalist deck with thick borders, offset shadows, and a pink/sage/ink palette.\",\n      \"mood\": [\n        \"raw\",\n        \"punchy\",\n        \"energetic\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"direct\",\n        \"modern\",\n        \"no-nonsense\",\n        \"graphic\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel direct and graphic-confident: founder pitches, accelerator demos, brand decks, indie launches, creator portfolios. Strong for stat slides, comparison tables, and process flows. Equally good for tech, research, or finance when the speaker wants the deck to feel scrappy-confident rather than buttoned-up.\",\n      \"avoid_for\": \"Contexts that need to feel soft, warm, or intentionally quiet — the brutalist borders and offset shadows commit to a graphic voice.\",\n      \"preview_md\": \"bold-template-pack/templates/raw-grid/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/raw-grid/design.md\"\n    },\n    {\n      \"slug\": \"retro-windows\",\n      \"name\": \"Retro Windows\",\n      \"tagline\": \"Windows 95 chrome: gray title bars, MS Sans Serif, pixel typography, full nostalgia.\",\n      \"mood\": [\n        \"nostalgic\",\n        \"retro\",\n        \"geeky\",\n        \"playful\"\n      ],\n      \"tone\": [\n        \"winking\",\n        \"nostalgic\",\n        \"geeky\",\n        \"fun\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel knowingly nostalgic: retro gaming, Y2K-aesthetic brands, creator portfolios with a 90s vibe, tech-history talks, deliberately tongue-in-cheek decks. A great choice anywhere a playful retro reference is the entire point.\",\n      \"avoid_for\": \"Decks that need to read as modern, elegant, or institutionally credible — the Win95 chrome will always read as a costume.\",\n      \"preview_md\": \"bold-template-pack/templates/retro-windows/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/retro-windows/design.md\"\n    },\n    {\n      \"slug\": \"retro-zine\",\n      \"name\": \"Retro Zine\",\n      \"tagline\": \"Beige paper with green accent and Bebas Neue + Caveat: a riso-printed zine in HTML form.\",\n      \"mood\": [\n        \"crafted\",\n        \"lo-fi\",\n        \"underground\",\n        \"warm-retro\"\n      ],\n      \"tone\": [\n        \"scrappy\",\n        \"warm\",\n        \"intentional\",\n        \"DIY\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel printed, lo-fi, and crafted: indie zines and publications, music / arts brands, creator portfolios, small-batch craft launches, community decks. Also a great underdog choice for tech, research, or business decks that want a riso-print warmth instead of digital polish.\",\n      \"avoid_for\": \"Contexts that demand digital-native polish or fast modern-tech energy — the layered zine aesthetic intentionally feels handmade.\",\n      \"preview_md\": \"bold-template-pack/templates/retro-zine/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/retro-zine/design.md\"\n    },\n    {\n      \"slug\": \"sakura-chroma\",\n      \"name\": \"Sakura Chroma\",\n      \"tagline\": \"Vintage Japanese cassette-package aesthetic: cream paper, diagonal rainbow ribbons, condensed bold type, JIS-style spec checkboxes.\",\n      \"mood\": [\n        \"retro\",\n        \"playful\",\n        \"kawaii-tech\",\n        \"warm\",\n        \"tactile\",\n        \"product-catalogue\"\n      ],\n      \"tone\": [\n        \"playful\",\n        \"confident\",\n        \"warm\",\n        \"tactile\",\n        \"80s-Japanese-tech\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a vintage Japanese cassette package or a TDK / Sony / Sakura Color product catalogue: indie hardware brand decks, music-label release schedules, analog studio retrospectives, zine and magazine pitches, kawaii-tech product launches, creative-studio annual reports. Equally good for any deck wanting bold colour, condensed display type, and a tactile printed-product personality.\",\n      \"avoid_for\": \"Decks that need restrained, corporate, or quiet typography — the bold condensed lockups, ribbon stripes, and primary-colour palette are intentionally loud and product-page-y.\",\n      \"preview_md\": \"bold-template-pack/templates/sakura-chroma/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/sakura-chroma/design.md\"\n    },\n    {\n      \"slug\": \"scatterbrain\",\n      \"name\": \"Scatterbrain\",\n      \"tagline\": \"Post-it inspired: pastel sticky notes, Caveat handwriting, Shrikhand and Zilla Slab type stack.\",\n      \"mood\": [\n        \"playful\",\n        \"creative\",\n        \"warm\",\n        \"messy-on-purpose\",\n        \"workshop\"\n      ],\n      \"tone\": [\n        \"informal\",\n        \"warm\",\n        \"expressive\",\n        \"human\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a designer's whiteboard: brainstorms, workshops, creative-agency credentials, design-thinking sessions, ideation pitches, art-direction reviews. Equally fun for any deck — including tech, research, or business — that wants to read as in-progress thinking rather than polished conclusions.\",\n      \"avoid_for\": \"Contexts that demand precision and institutional weight — the post-it sticky-note aesthetic intentionally reads as warm and unfinished.\",\n      \"preview_md\": \"bold-template-pack/templates/scatterbrain/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/scatterbrain/design.md\"\n    },\n    {\n      \"slug\": \"signal\",\n      \"name\": \"Signal\",\n      \"tagline\": \"Deep navy canvas with bone paper and a single muted-gold accent; institutional with quiet weight.\",\n      \"mood\": [\n        \"institutional\",\n        \"trustworthy\",\n        \"considered\",\n        \"weighty\"\n      ],\n      \"tone\": [\n        \"sober\",\n        \"polished\",\n        \"established\",\n        \"literary\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"high\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel weighty, considered, and credibly institutional: investor decks, board presentations, consulting deliverables, legal / policy briefs, advisory pitches. Also a strong choice for tech, research, or brand work that wants to read as quietly authoritative rather than loud.\",\n      \"avoid_for\": \"Contexts that should feel hot, fast, or intentionally playful — the navy + gold restraint commits to a sober voice.\",\n      \"preview_md\": \"bold-template-pack/templates/signal/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/signal/design.md\"\n    },\n    {\n      \"slug\": \"soft-editorial\",\n      \"name\": \"Soft Editorial\",\n      \"tagline\": \"Cormorant Garamond serif on warm paper with sage, blush, and lemon accents.\",\n      \"mood\": [\n        \"literary\",\n        \"elegant\",\n        \"quiet\",\n        \"warm-classical\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"warm\",\n        \"magazine\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel literary, elegant, and unhurried: editorial features, longform brand stories, gallery / museum decks, advisory deliverables, wedding / lifestyle media, founder essays. Equally good for tech, research, or business decks that want a Sunday-supplement warmth instead of corporate polish.\",\n      \"avoid_for\": \"Decks that need visual heat or punch — the warm-paper palette and Cormorant serif are intentionally quiet.\",\n      \"preview_md\": \"bold-template-pack/templates/soft-editorial/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/soft-editorial/design.md\"\n    },\n    {\n      \"slug\": \"stencil-tablet\",\n      \"name\": \"Stencil & Tablet\",\n      \"tagline\": \"Bone paper with stencil-cut headlines and a six-color earth palette: archaeology meets brand.\",\n      \"mood\": [\n        \"archival\",\n        \"earthy\",\n        \"tactile\",\n        \"considered\",\n        \"graphic\"\n      ],\n      \"tone\": [\n        \"weighty\",\n        \"considered\",\n        \"tactile\",\n        \"literary\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel archival, tactile, and weighty-graphic: museum and cultural-institution decks, art / architecture brands, longform research, heritage and craft brands, manifestos. A great choice anytime — including across tech and business — when you want the deck to feel like a field manual rather than a slide deck.\",\n      \"avoid_for\": \"Contexts that demand digital-native polish or playful pop — the stencil-cut display and earth-tone palette commit to a deliberate analog feel.\",\n      \"preview_md\": \"bold-template-pack/templates/stencil-tablet/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/stencil-tablet/design.md\"\n    },\n    {\n      \"slug\": \"studio\",\n      \"name\": \"Studio\",\n      \"tagline\": \"Black canvas with electric-yellow type; high-voltage design studio aesthetic.\",\n      \"mood\": [\n        \"electric\",\n        \"bold\",\n        \"graphic\",\n        \"design-led\",\n        \"high-contrast\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"loud\",\n        \"modern\",\n        \"intentional\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel electric and design-led: studio credentials, creative agency pitches, brand showcases, art-direction reviews, fashion / sneaker brand work. Also a striking unexpected choice for tech, research, or business decks where the speaker wants the deck to *be* a brand statement.\",\n      \"avoid_for\": \"Contexts that should feel quiet or institutional — the black-and-electric-yellow palette is the loudest in the library.\",\n      \"preview_md\": \"bold-template-pack/templates/studio/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/studio/design.md\"\n    },\n    {\n      \"slug\": \"vellum\",\n      \"name\": \"Vellum\",\n      \"tagline\": \"Deep navy canvas with warm-yellow Cormorant serifs and a single dusty teal accent. A quiet, scholarly aesthetic.\",\n      \"mood\": [\n        \"scholarly\",\n        \"literary\",\n        \"considered\",\n        \"quiet\",\n        \"intellectual\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"patient\",\n        \"intelligent\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel scholarly, literary, and quietly intelligent: research synthesis, white papers, academic and policy briefs, advisory deliverables, longform editorial pieces, founder reflections. Equally strong for any deck — including tech, business, or creator work — that wants a calm, considered atmosphere instead of energetic visuals.\",\n      \"avoid_for\": \"Contexts that need visual heat or pop — the navy + warm-yellow Cormorant aesthetic is intentionally low-tempo.\",\n      \"preview_md\": \"bold-template-pack/templates/vellum/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/vellum/design.md\"\n    }\n  ]\n}\n","frontmatter":{"schema_version":1,"pack_name":"Beautiful HTML Templates - Bold Design Pack","source_repo":"zarazhangrui/beautiful-html-templates","template_count":34,"usage":{"selection":"Read this compact index first to shortlist bold templates from metadata.","previews":"For title-slide previews, read only the preview_md files for the shortlisted bold candidates.","final_generation":"After the user chooses a bold template, read exactly that template design_md before generating the full deck.","never":"Do not bulk-read templates/*/design.md and do not read template.html unless the selected design.md is missing a critical implementation detail."},"frontend_slides_policy":{"layout_model":"fixed-stage","canvas_width":1920,"canvas_height":1080,"scaling":"scale-stage-to-viewport","mobile_behavior":"preserve 16:9 stage; letterbox or pillarbox instead of reflowing slide content"},"templates":[{"slug":"8-bit-orbit","name":"8-Bit Orbit","tagline":"Pixel-art neon arcade aesthetic on a deep navy void.","mood":["retro-tech","playful","cyberpunk","energetic"],"tone":["geeky","neon","rebellious","sci-fi"],"formality":"low","density":"medium","scheme":"dark","best_for":"Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos. Just as good for a tech talk that wants to lean into nostalgic-digital craft, a synthwave brand deck, or a creative review that wants to feel like a console.","avoid_for":"Contexts where the dark neon palette would actively work against the message — quiet institutional finance disclosures, healthcare patient-facing materials, traditional luxury.","preview_md":"bold-template-pack/templates/8-bit-orbit/preview.md","design_md":"bold-template-pack/templates/8-bit-orbit/design.md"},{"slug":"biennale-yellow","name":"Biennale Yellow","tagline":"Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients.","mood":["editorial","atmospheric","warm","cultural-institution","poster-like"],"tone":["literary","considered","contemplative","warm-modern","Dutch-editorial"],"formality":"high","density":"medium","scheme":"light","best_for":"Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, studio retrospectives. Equally good for any deck wanting Dutch-editorial atmosphere with an unmistakable single-color signature.","avoid_for":"Decks that need visual punch or saturated multi-color energy — the warm-paper canvas and one-yellow palette are intentionally quiet and atmospheric.","preview_md":"bold-template-pack/templates/biennale-yellow/preview.md","design_md":"bold-template-pack/templates/biennale-yellow/design.md"},{"slug":"block-frame","name":"BlockFrame","tagline":"Neobrutalist deck with pastel-neon color blocks and chunky black borders.","mood":["bold","playful","graphic","fresh"],"tone":["confident","graphic","pop","design-led"],"formality":"medium-low","density":"high","scheme":"light","best_for":"Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns. Also a strong unexpected pick for tech, finance, or research when the speaker wants to land as confident and contemporary rather than buttoned-up.","avoid_for":"Contexts that require quiet institutional restraint or traditional weight (regulated disclosures, formal legal briefs).","preview_md":"bold-template-pack/templates/block-frame/preview.md","design_md":"bold-template-pack/templates/block-frame/design.md"},{"slug":"blue-professional","name":"Blue Professional","tagline":"Cream paper background with electric cobalt blue accents; clean modern professional.","mood":["professional","modern","calm","trustworthy"],"tone":["clean","considered","polished","neutral"],"formality":"medium-high","density":"medium","scheme":"light","best_for":"Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports. Also a clean, tasteful choice whenever you want to read as professional without going stiff — research synthesis, internal reviews, brand work for service businesses.","avoid_for":"Contexts where the deck should feel hot, playful, or intentionally informal — the cool electric-blue restraint will read as overly polished.","preview_md":"bold-template-pack/templates/blue-professional/preview.md","design_md":"bold-template-pack/templates/blue-professional/design.md"},{"slug":"bold-poster","name":"Bold Poster","tagline":"Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent.","mood":["bold","editorial","loud","confident"],"tone":["dramatic","graphic","sharp","intentional"],"formality":"medium","density":"low","scheme":"light","best_for":"Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews. Excellent any time you want a few words to feel like a poster — including unexpected fits like a tech keynote or a finance manifesto that wants to be quotable.","avoid_for":"Decks that need to communicate dense information per slide — the layout is built around a few large statements, not paragraphs of detail.","preview_md":"bold-template-pack/templates/bold-poster/preview.md","design_md":"bold-template-pack/templates/bold-poster/design.md"},{"slug":"broadside","name":"Broadside","tagline":"Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack.","mood":["editorial","dramatic","loud","newspaper"],"tone":["graphic","punchy","literary","considered"],"formality":"medium-high","density":"medium","scheme":"dark","best_for":"Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements. Also a striking pick for tech, research, or business decks that want a dramatic single-accent editorial feel.","avoid_for":"Decks that need to feel quiet, warm, or institutionally traditional — the dark canvas with fire-orange accent commits to drama.","preview_md":"bold-template-pack/templates/broadside/preview.md","design_md":"bold-template-pack/templates/broadside/design.md"},{"slug":"capsule","name":"Capsule","tagline":"Modular pill-shaped cards on warm bone with a full pastel-pop palette.","mood":["playful","modern","warm","fresh","fun"],"tone":["upbeat","graphic","approachable","cool"],"formality":"medium-low","density":"medium","scheme":"light","best_for":"Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials. Also fun for a playful tech demo or a research deck that wants pop-art clarity instead of gravitas.","avoid_for":"Contexts that require traditional institutional weight — the capsule shapes and pastel pops actively soften authority.","preview_md":"bold-template-pack/templates/capsule/preview.md","design_md":"bold-template-pack/templates/capsule/design.md"},{"slug":"cartesian","name":"Cartesian","tagline":"Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried.","mood":["quiet","considered","elegant","warm-minimal"],"tone":["classical","literary","restrained","confident-quiet"],"formality":"high","density":"low","scheme":"light","best_for":"Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks. Also a strong choice for editorial features, founder reflections, or any deck where restraint is the message — including across tech and finance.","avoid_for":"Decks that need visual heat, multiple accents, or a sense of urgency — the warm-neutral palette is intentionally low-energy.","preview_md":"bold-template-pack/templates/cartesian/preview.md","design_md":"bold-template-pack/templates/cartesian/design.md"},{"slug":"cobalt-grid","name":"Cobalt Grid","tagline":"Electric cobalt serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules.","mood":["editorial","design-research","studious","modernist","tech-print","monochrome"],"tone":["considered","literary","studious","quietly-modern","editorial"],"formality":"high","density":"medium","scheme":"light","best_for":"Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report. Strong for studio annuals, agency capabilities decks, design-research publications, architecture / art / academic decks, and any deck wanting one strict accent colour and a printed-ledger calmness rather than corporate polish.","avoid_for":"Decks that need warmth, multi-colour energy, or a casual / playful voice — the strict cobalt + cream + grid palette is intentionally austere.","preview_md":"bold-template-pack/templates/cobalt-grid/preview.md","design_md":"bold-template-pack/templates/cobalt-grid/design.md"},{"slug":"coral","name":"Coral","tagline":"Cream and coral on near-black, set in oversized Bebas Neue.","mood":["bold","warm","modern","confident"],"tone":["graphic","punchy","magazine"],"formality":"medium","density":"medium","scheme":"mixed","best_for":"Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials. Just as strong for a creator portfolio, a manifesto, or a tech / research deck that wants warmth and a single bold accent instead of corporate cool.","avoid_for":"Contexts that should feel quiet or institutional — the coral accent and oversized Bebas Neue commit hard to a confident magazine voice.","preview_md":"bold-template-pack/templates/coral/preview.md","design_md":"bold-template-pack/templates/coral/design.md"},{"slug":"creative-mode","name":"Creative Mode","tagline":"Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display.","mood":["creative","confident","playful","design-led"],"tone":["graphic","expressive","modern"],"formality":"medium","density":"medium-high","scheme":"light","best_for":"Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews. Also a great unexpected pick for a tech talk, research findings, or finance review when the speaker wants to lead with taste rather than convention.","avoid_for":"Contexts that demand institutional restraint and a quiet authority — the saturated multi-accent palette will read as expressive, not formal.","preview_md":"bold-template-pack/templates/creative-mode/preview.md","design_md":"bold-template-pack/templates/creative-mode/design.md"},{"slug":"daisy-days","name":"Daisy Days","tagline":"Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm.","mood":["cheerful","playful","warm","sunny","wholesome"],"tone":["friendly","soft","encouraging","approachable","lighthearted"],"formality":"low","density":"medium","scheme":"light","best_for":"Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration. Also lovely for an unexpected playful internal kickoff, a wedding planning deck, or any moment where warmth is the message — including across tech or business contexts.","avoid_for":"Contexts where the audience explicitly expects authority and precision — the hand-drawn pastel SVG decorations are the opposite of buttoned-up.","preview_md":"bold-template-pack/templates/daisy-days/preview.md","design_md":"bold-template-pack/templates/daisy-days/design.md"},{"slug":"editorial-forest","name":"Editorial Forest","tagline":"Forest green, dusty pink, and warm cream meet Source Serif 4 in a quiet, intentional quarterly-review deck.","mood":["editorial","quiet","considered","warm","intentional"],"tone":["literary","thoughtful","warm","low-pressure"],"formality":"medium","density":"medium","scheme":"mixed","best_for":"Anything that should feel like a considered editorial — quarterly reviews, internal readouts, studio updates, creative-agency presentations. Equally good for any deck that wants to feel warm and unhurried rather than corporate, including research recaps, book or program announcements, and team retrospectives.","avoid_for":"Contexts that need to feel urgent, punchy, or sales-driven — the palette and rhythm are intentionally quiet.","preview_md":"bold-template-pack/templates/editorial-forest/preview.md","design_md":"bold-template-pack/templates/editorial-forest/design.md"},{"slug":"editorial-tri-tone","name":"Editorial Tri-Tone","tagline":"Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif.","mood":["editorial","warm","intentional","moody"],"tone":["literary","warm","considered","stylish"],"formality":"medium-high","density":"medium","scheme":"mixed","best_for":"Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews. Equally good for any deck — including tech, research, or business — that wants tri-tone discipline and serif/sans contrast instead of the usual neutrals.","avoid_for":"Decks that need to read as soft or comforting — the burgundy/pink/cream tri-tone is intentionally high-contrast and styled.","preview_md":"bold-template-pack/templates/editorial-tri-tone/preview.md","design_md":"bold-template-pack/templates/editorial-tri-tone/design.md"},{"slug":"emerald-editorial","name":"Emerald Editorial","tagline":"A magazine-cover business deck: emerald + navy + paper, double-rule masthead ornaments, and a bold Bodoni-style display serif.","mood":["editorial","considered","confident","magazine-cover"],"tone":["literary","authoritative","warm","designed"],"formality":"medium-high","density":"medium","scheme":"mixed","best_for":"Anything that should feel like the front of a serious magazine, including but not limited to leadership readouts, planning-office reviews, and strategy briefings. The double-rule masthead ornament gives it editorial gravitas without making it stiff — also a great unexpected pick for product launches or research recaps that want to feel considered rather than corporate.","avoid_for":"Contexts that need to read as quiet, neutral, or institutionally restrained — the emerald field is too saturated to disappear into the background.","preview_md":"bold-template-pack/templates/emerald-editorial/preview.md","design_md":"bold-template-pack/templates/emerald-editorial/design.md"},{"slug":"grove","name":"Grove","tagline":"Forest-green canvas with cream type, classical Playfair serifs, and a single rust accent.","mood":["organic","considered","warm","literary","natural"],"tone":["classical","warm","considered","patient"],"formality":"medium-high","density":"medium","scheme":"mixed","best_for":"Anything that should feel organic, considered, and grown-up: sustainability and wellness brands, outdoor / nature products, wineries and restaurants, literary or arts decks, advisory deliverables, bilingual EN/CN reports. Also a calm, distinctive choice for tech, research, or business decks that want patience over urgency.","avoid_for":"Decks that need neon energy or rapid-fire pop — the forest-green canvas and Playfair serif commit to a slow, classical voice.","preview_md":"bold-template-pack/templates/grove/preview.md","design_md":"bold-template-pack/templates/grove/design.md"},{"slug":"long-table","name":"Long Table","tagline":"Warm cream and rust-red supper-club aesthetic with bold uppercase grotesk headlines, Fraunces serifs, and pill-shaped outlined buttons.","mood":["warm","intimate","modern","friendly","small-batch","social","hospitality"],"tone":["warm","playful","considered","social","magazine-friendly","modern-editorial"],"formality":"medium","density":"medium","scheme":"light","best_for":"Anything that should feel like a warm, intimate, modern hospitality / community brand: supper clubs, dinner series, small restaurants, creative-studio events, membership pitches, lifestyle and wine brands. Equally good for any deck wanting a single warm accent colour, mixed-weight typography, and a social-media-aware modern-editorial voice.","avoid_for":"Decks that need corporate polish, technical density, or a cold / minimalist register — the rust-red palette and bold serif mix are intentionally warm and people-facing.","preview_md":"bold-template-pack/templates/long-table/preview.md","design_md":"bold-template-pack/templates/long-table/design.md"},{"slug":"mat","name":"Mat","tagline":"Dark sage canvas with bone paper and burnt-orange accent; mid-century modern with wood undertones.","mood":["warm-modern","considered","tactile","mid-century"],"tone":["warm","design-led","intentional","considered"],"formality":"medium","density":"medium","scheme":"mixed","best_for":"Anything that should feel mid-century, tactile, and intentional: design studio credentials, architecture / interior brands, ceramics / craft / furniture, advisory decks. Also a warm, distinctive choice for tech, research, or business decks that want a considered analog feel instead of digital-cool.","avoid_for":"Contexts that need fast tech energy or institutional restraint — the muted sage and burnt-orange palette is intentionally warm and slow.","preview_md":"bold-template-pack/templates/mat/preview.md","design_md":"bold-template-pack/templates/mat/design.md"},{"slug":"monochrome","name":"Monochrome","tagline":"Ivory ledger paper with all-black type; Lora serif headlines, Jost body, no color at all.","mood":["restrained","literary","archival","ledger"],"tone":["literary","considered","neutral","honest"],"formality":"high","density":"high","scheme":"light","best_for":"Anything that should feel like a hand-typeset ledger: user research synthesis, white papers, longform reports, academic and policy briefs, advisory deliverables, bilingual EN/CN reports. Equally good for tech, design, or brand decks that want their words to be the only thing on the page.","avoid_for":"Decks that need visual personality or color-led storytelling — the all-ink palette is intentionally austere.","preview_md":"bold-template-pack/templates/monochrome/preview.md","design_md":"bold-template-pack/templates/monochrome/design.md"},{"slug":"neo-grid-bold","name":"Neo-Grid Bold","tagline":"Editorial neo-brutalism with a single neon yellow accent on off-white paper.","mood":["confident","punchy","editorial","modern"],"tone":["bold","minimal","design-led","graphic"],"formality":"medium","density":"high","scheme":"light","best_for":"Anything that should feel confident and editorial-graphic: design-led pitches, brand work, founder talks, conference keynotes. Excellent for stat-heavy slides, comparisons, and process flows. Just as strong for tech, research, or finance when the speaker wants to read as design-led rather than corporate.","avoid_for":"Contexts that need to feel quiet, traditional, or warm — the neon-yellow accent and uppercase display commit to a confident editorial voice.","preview_md":"bold-template-pack/templates/neo-grid-bold/preview.md","design_md":"bold-template-pack/templates/neo-grid-bold/design.md"},{"slug":"peoples-platform","name":"People's Platform (Block & Bold)","tagline":"Activist poster energy: blue, orange, red on cream, with Alfa Slab + Caveat Brush.","mood":["activist","loud","graphic","honest"],"tone":["punchy","direct","expressive","warm-bold"],"formality":"medium-low","density":"medium-high","scheme":"light","best_for":"Anything that should feel honest, loud, and graphic: cultural commentary, manifestos, civic and community decks, design talks, campaign pitches. Excellent for founder-vision moments, mission statements, or any deck — including across industries — that wants protest-poster energy instead of corporate polish.","avoid_for":"Contexts where institutional restraint is the actual goal — the saturated political-poster palette commits hard to expressive energy.","preview_md":"bold-template-pack/templates/peoples-platform/preview.md","design_md":"bold-template-pack/templates/peoples-platform/design.md"},{"slug":"pin-and-paper","name":"Pin & Paper","tagline":"Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture.","mood":["crafted","handmade","warm","thoughtful","literary"],"tone":["literary","intimate","warm","grounded"],"formality":"medium","density":"medium","scheme":"light","best_for":"Anything that should feel hand-crafted, warm, and literary: qualitative research findings, founder reflections, longform brand stories, workshop debriefs. The signature safety-pin illustrations and paper-grain texture make it especially good for any deck — including tech or business — that wants personality and warmth over polish.","avoid_for":"Decks that need to feel digital-native polished or rigorously data-driven — handwritten Caveat is intentionally informal.","preview_md":"bold-template-pack/templates/pin-and-paper/preview.md","design_md":"bold-template-pack/templates/pin-and-paper/design.md"},{"slug":"pink-script","name":"Pink Script — After Hours","tagline":"Black canvas, hot pink accent, pearl-cream paper, Instrument Serif headlines: late-night editorial luxury.","mood":["nocturnal","moody","intentional","luxe","expressive"],"tone":["literary","sultry","considered","magazine"],"formality":"medium-high","density":"low","scheme":"dark","best_for":"Anything that should feel nocturnal, intentional, and a little luxe: fashion brand decks, creator personal brands, after-hours / nightlife / spirits launches, luxury product reveals, editorial features. Also a striking unexpected pick for a tech keynote, research synthesis, or business pitch that wants to land with magnetic confidence.","avoid_for":"Daytime corporate-professional and traditional B2B contexts where the dark canvas with hot-pink accent reads as too styled or too expressive.","preview_md":"bold-template-pack/templates/pink-script/preview.md","design_md":"bold-template-pack/templates/pink-script/design.md"},{"slug":"playful","name":"Playful","tagline":"Sun-warm peach background with Syne display: a friendly indie launch deck.","mood":["warm","approachable","indie","friendly"],"tone":["upbeat","informal","welcoming"],"formality":"low","density":"medium","scheme":"light","best_for":"Anything that should feel warm, indie, and approachable: creator portfolios, indie product launches, lifestyle brands, small-business pitches, newsletter / community decks. Also welcoming for any deck — including tech or research — that wants to feel friendly and human rather than corporate.","avoid_for":"Contexts where institutional credibility matters more than warmth — the peach palette is intentionally informal.","preview_md":"bold-template-pack/templates/playful/preview.md","design_md":"bold-template-pack/templates/playful/design.md"},{"slug":"raw-grid","name":"Raw Grid","tagline":"Neo-brutalist deck with thick borders, offset shadows, and a pink/sage/ink palette.","mood":["raw","punchy","energetic","confident"],"tone":["direct","modern","no-nonsense","graphic"],"formality":"medium-low","density":"high","scheme":"light","best_for":"Anything that should feel direct and graphic-confident: founder pitches, accelerator demos, brand decks, indie launches, creator portfolios. Strong for stat slides, comparison tables, and process flows. Equally good for tech, research, or finance when the speaker wants the deck to feel scrappy-confident rather than buttoned-up.","avoid_for":"Contexts that need to feel soft, warm, or intentionally quiet — the brutalist borders and offset shadows commit to a graphic voice.","preview_md":"bold-template-pack/templates/raw-grid/preview.md","design_md":"bold-template-pack/templates/raw-grid/design.md"},{"slug":"retro-windows","name":"Retro Windows","tagline":"Windows 95 chrome: gray title bars, MS Sans Serif, pixel typography, full nostalgia.","mood":["nostalgic","retro","geeky","playful"],"tone":["winking","nostalgic","geeky","fun"],"formality":"low","density":"medium","scheme":"light","best_for":"Anything that should feel knowingly nostalgic: retro gaming, Y2K-aesthetic brands, creator portfolios with a 90s vibe, tech-history talks, deliberately tongue-in-cheek decks. A great choice anywhere a playful retro reference is the entire point.","avoid_for":"Decks that need to read as modern, elegant, or institutionally credible — the Win95 chrome will always read as a costume.","preview_md":"bold-template-pack/templates/retro-windows/preview.md","design_md":"bold-template-pack/templates/retro-windows/design.md"},{"slug":"retro-zine","name":"Retro Zine","tagline":"Beige paper with green accent and Bebas Neue + Caveat: a riso-printed zine in HTML form.","mood":["crafted","lo-fi","underground","warm-retro"],"tone":["scrappy","warm","intentional","DIY"],"formality":"medium-low","density":"medium","scheme":"light","best_for":"Anything that should feel printed, lo-fi, and crafted: indie zines and publications, music / arts brands, creator portfolios, small-batch craft launches, community decks. Also a great underdog choice for tech, research, or business decks that want a riso-print warmth instead of digital polish.","avoid_for":"Contexts that demand digital-native polish or fast modern-tech energy — the layered zine aesthetic intentionally feels handmade.","preview_md":"bold-template-pack/templates/retro-zine/preview.md","design_md":"bold-template-pack/templates/retro-zine/design.md"},{"slug":"sakura-chroma","name":"Sakura Chroma","tagline":"Vintage Japanese cassette-package aesthetic: cream paper, diagonal rainbow ribbons, condensed bold type, JIS-style spec checkboxes.","mood":["retro","playful","kawaii-tech","warm","tactile","product-catalogue"],"tone":["playful","confident","warm","tactile","80s-Japanese-tech"],"formality":"low","density":"medium","scheme":"light","best_for":"Anything that should feel like a vintage Japanese cassette package or a TDK / Sony / Sakura Color product catalogue: indie hardware brand decks, music-label release schedules, analog studio retrospectives, zine and magazine pitches, kawaii-tech product launches, creative-studio annual reports. Equally good for any deck wanting bold colour, condensed display type, and a tactile printed-product personality.","avoid_for":"Decks that need restrained, corporate, or quiet typography — the bold condensed lockups, ribbon stripes, and primary-colour palette are intentionally loud and product-page-y.","preview_md":"bold-template-pack/templates/sakura-chroma/preview.md","design_md":"bold-template-pack/templates/sakura-chroma/design.md"},{"slug":"scatterbrain","name":"Scatterbrain","tagline":"Post-it inspired: pastel sticky notes, Caveat handwriting, Shrikhand and Zilla Slab type stack.","mood":["playful","creative","warm","messy-on-purpose","workshop"],"tone":["informal","warm","expressive","human"],"formality":"low","density":"high","scheme":"light","best_for":"Anything that should feel like a designer's whiteboard: brainstorms, workshops, creative-agency credentials, design-thinking sessions, ideation pitches, art-direction reviews. Equally fun for any deck — including tech, research, or business — that wants to read as in-progress thinking rather than polished conclusions.","avoid_for":"Contexts that demand precision and institutional weight — the post-it sticky-note aesthetic intentionally reads as warm and unfinished.","preview_md":"bold-template-pack/templates/scatterbrain/preview.md","design_md":"bold-template-pack/templates/scatterbrain/design.md"},{"slug":"signal","name":"Signal","tagline":"Deep navy canvas with bone paper and a single muted-gold accent; institutional with quiet weight.","mood":["institutional","trustworthy","considered","weighty"],"tone":["sober","polished","established","literary"],"formality":"high","density":"high","scheme":"mixed","best_for":"Anything that should feel weighty, considered, and credibly institutional: investor decks, board presentations, consulting deliverables, legal / policy briefs, advisory pitches. Also a strong choice for tech, research, or brand work that wants to read as quietly authoritative rather than loud.","avoid_for":"Contexts that should feel hot, fast, or intentionally playful — the navy + gold restraint commits to a sober voice.","preview_md":"bold-template-pack/templates/signal/preview.md","design_md":"bold-template-pack/templates/signal/design.md"},{"slug":"soft-editorial","name":"Soft Editorial","tagline":"Cormorant Garamond serif on warm paper with sage, blush, and lemon accents.","mood":["literary","elegant","quiet","warm-classical"],"tone":["literary","considered","warm","magazine"],"formality":"high","density":"low","scheme":"light","best_for":"Anything that should feel literary, elegant, and unhurried: editorial features, longform brand stories, gallery / museum decks, advisory deliverables, wedding / lifestyle media, founder essays. Equally good for tech, research, or business decks that want a Sunday-supplement warmth instead of corporate polish.","avoid_for":"Decks that need visual heat or punch — the warm-paper palette and Cormorant serif are intentionally quiet.","preview_md":"bold-template-pack/templates/soft-editorial/preview.md","design_md":"bold-template-pack/templates/soft-editorial/design.md"},{"slug":"stencil-tablet","name":"Stencil & Tablet","tagline":"Bone paper with stencil-cut headlines and a six-color earth palette: archaeology meets brand.","mood":["archival","earthy","tactile","considered","graphic"],"tone":["weighty","considered","tactile","literary"],"formality":"medium-high","density":"medium","scheme":"light","best_for":"Anything that should feel archival, tactile, and weighty-graphic: museum and cultural-institution decks, art / architecture brands, longform research, heritage and craft brands, manifestos. A great choice anytime — including across tech and business — when you want the deck to feel like a field manual rather than a slide deck.","avoid_for":"Contexts that demand digital-native polish or playful pop — the stencil-cut display and earth-tone palette commit to a deliberate analog feel.","preview_md":"bold-template-pack/templates/stencil-tablet/preview.md","design_md":"bold-template-pack/templates/stencil-tablet/design.md"},{"slug":"studio","name":"Studio","tagline":"Black canvas with electric-yellow type; high-voltage design studio aesthetic.","mood":["electric","bold","graphic","design-led","high-contrast"],"tone":["graphic","loud","modern","intentional"],"formality":"medium","density":"medium","scheme":"dark","best_for":"Anything that should feel electric and design-led: studio credentials, creative agency pitches, brand showcases, art-direction reviews, fashion / sneaker brand work. Also a striking unexpected choice for tech, research, or business decks where the speaker wants the deck to *be* a brand statement.","avoid_for":"Contexts that should feel quiet or institutional — the black-and-electric-yellow palette is the loudest in the library.","preview_md":"bold-template-pack/templates/studio/preview.md","design_md":"bold-template-pack/templates/studio/design.md"},{"slug":"vellum","name":"Vellum","tagline":"Deep navy canvas with warm-yellow Cormorant serifs and a single dusty teal accent. A quiet, scholarly aesthetic.","mood":["scholarly","literary","considered","quiet","intellectual"],"tone":["literary","considered","patient","intelligent"],"formality":"high","density":"low","scheme":"dark","best_for":"Anything that should feel scholarly, literary, and quietly intelligent: research synthesis, white papers, academic and policy briefs, advisory deliverables, longform editorial pieces, founder reflections. Equally strong for any deck — including tech, business, or creator work — that wants a calm, considered atmosphere instead of energetic visuals.","avoid_for":"Contexts that need visual heat or pop — the navy + warm-yellow Cormorant aesthetic is intentionally low-tempo.","preview_md":"bold-template-pack/templates/vellum/preview.md","design_md":"bold-template-pack/templates/vellum/design.md"}]},"isInternal":false,"tokens":9019,"sizeBytes":39202},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/design.md","title":"8-Bit Orbit","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: 8-Bit Orbit\ndescription: A retro-futuristic pixel-art presentation system that fuses 16-bit arcade nostalgia with editorial discipline. Display type runs in Tektur (a chunky geometric display face built on pixel-grid logic) paired with Chakra Petch for body and Space Mono for code-flavored labels and tabular data. The palette pivots on a deep cosmic navy (`#0F1B3D` / `#0A0E27`) lit by three saturated neons — cyan, hot pink, and a high-key yellow — with a soft lavender pastel for warm reprieves. Depth is built from stacked hard offset shadows in 4px increments (the pixel unit), CRT scanlines, atmospheric grain, vignettes, and animated starfields. The effect sits between an arcade cabinet and a Tron-era boardroom — unmistakably digital, intentionally lo-fi, and engineered to feel as if it just booted up.\n\ncolors:\n  dark-void: \"#0A0E27\"\n  deep-navy: \"#0F1B3D\"\n  neon-cyan: \"#5EDCF4\"\n  neon-pink: \"#F0A6CA\"\n  neon-yellow: \"#F4D03F\"\n  soft-lavender: \"#E2D5F2\"\n  white: \"#FFFFFF\"\n\nshadows:\n  pixel-stack-cyan-yellow: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}, 8px 4px 0 0 {colors.neon-yellow}, 4px 8px 0 0 {colors.neon-yellow}, 8px 8px 0 0 {colors.neon-yellow}\"\n  pixel-stack-pink-cyan: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}, 8px 4px 0 0 {colors.neon-cyan}, 4px 8px 0 0 {colors.neon-cyan}, 8px 8px 0 0 {colors.neon-cyan}\"\n  pixel-l-shape: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}\"\n  pixel-text-shadow: \"4px 4px 0 {colors.neon-yellow}, 8px 8px 0 {colors.deep-navy}\"\n  pixel-text-shadow-small: \"3px 3px 0 {colors.deep-navy}\"\n  card-offset: \"6px 6px 0 rgba(15, 27, 61, 0.15)\"\n  card-featured: \"8px 8px 0 {colors.neon-yellow}\"\n\ntypography:\n  pixel-hero:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(48px, 10vw, 128px)\"\n    fontWeight: 900\n    lineHeight: 1.05\n    letterSpacing: 0.04em\n  display:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(32px, 5vw, 64px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  headline:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(24px, 3.5vw, 45px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  subhead:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(17.6px, 2vw, 24px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  stat-number:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(32px, 4vw, 56px)\"\n    fontWeight: 900\n    lineHeight: 1\n  body:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(14.4px, 1.2vw, 18.4px)\"\n    fontWeight: 400\n    lineHeight: 1.7\n  hero-tagline:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(14.4px, 1.5vw, 19.2px)\"\n    fontWeight: 400\n    lineHeight: 1.8\n  quote-body:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(17.6px, 2.2vw, 25.6px)\"\n    fontWeight: 500\n    lineHeight: 1.8\n  label-pill:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12px\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 0.2em\n    textTransform: uppercase\n  label-eyebrow:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 13.6px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.3em\n    textTransform: uppercase\n  badge:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  chart-value:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12px\n    fontWeight: 700\n    lineHeight: 1\n  chart-label:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.05em\n  date-chip:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n  counter:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12.8px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.15em\n\nspacing:\n  pixel-unit: 4px\n  pad-slide-y: \"3vh\"\n  pad-slide-x: \"4vw\"\n  pad-card-lg: \"32px 40px\"\n  pad-card-md: \"28px\"\n  pad-card-sm: \"16px 20px\"\n  gap-grid-lg: 32px\n  gap-grid-md: 24px\n  gap-grid-sm: 16px\n  content-max-width: 1200px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  label-pill:\n    background: \"{colors.deep-navy}\"\n    color: \"{colors.neon-yellow}\"\n    padding: \"6px 14px\"\n    fontSize: 12px\n    fontWeight: 700\n    letterSpacing: 0.2em\n    textTransform: uppercase\n    fontFamily: \"'Space Mono', monospace\"\n    description: \"Universal section tag. Default fill is deep-navy with neon-yellow text. Variant fills swap text color so the pill stays legible (e.g., navy bg with cyan text, navy bg with pink text).\"\n  pixel-button:\n    background: \"{colors.neon-cyan}\"\n    color: \"{colors.deep-navy}\"\n    padding: \"16px 36px\"\n    fontFamily: \"'Tektur', cursive\"\n    fontWeight: 700\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    boxShadow: \"{shadows.pixel-stack-cyan-yellow}\"\n    description: \"The signature stacked-shadow CTA. The pink variant swaps cyan body for pink and yellow shadow halo for cyan halo.\"\n  pixel-corner-bracket:\n    width: 24px\n    height: 24px\n    borderWidth: 4px\n    description: \"Two outward-facing L-shapes (top-left + bottom-right) bracketing a region. Default color is neon-cyan; yellow and pink variants exist. Sits 8px outside the bracketed element.\"\n  feature-card:\n    background: \"rgba(255, 255, 255, 0.15)\"\n    backdropFilter: \"blur(8px)\"\n    padding: \"32px 24px\"\n    border: \"2px solid rgba(15, 27, 61, 0.2)\"\n    description: \"Frosted-glass card with inset navy L-brackets (top-left + bottom-right) replacing rounded corners. Used on light-surface slides.\"\n  stat-block:\n    background: \"rgba(94, 220, 244, 0.08)\"\n    border: \"2px solid rgba(94, 220, 244, 0.2)\"\n    padding: \"32px 16px\"\n    description: \"Cyan-tinted glass stat tile with cyan L-bracket accents at opposite corners. Used on dark surfaces. Stat numeral uses the pixel-text-shadow-small treatment.\"\n  bar-track-light:\n    height: 32px\n    background: \"rgba(15, 27, 61, 0.1)\"\n    description: \"Horizontal track for hbar charts on light surfaces. Fill is solid navy/cyan/pink with a yellow offset shadow.\"\n  bar-vertical:\n    background: \"{colors.neon-cyan}\"\n    boxShadow: \"{shadows.pixel-l-shape}\"\n    description: \"Vertical chart bar with three-piece navy L-shadow. Color cycles cyan → pink → yellow.\"\n  timeline-node:\n    width: 24px\n    height: 24px\n    background: \"{colors.neon-cyan}\"\n    border: \"4px solid {colors.deep-navy}\"\n    description: \"Square pixel node on timeline rails. Active state swaps fill to neon-yellow.\"\n  timeline-rail:\n    width: 4px\n    background: \"repeating-linear-gradient(to bottom, {colors.deep-navy} 0px, {colors.deep-navy} 16px, transparent 16px, transparent 24px)\"\n    description: \"Dashed pixel rail running between timeline nodes.\"\n  date-chip:\n    background: \"{colors.deep-navy}\"\n    color: \"{colors.neon-cyan}\"\n    padding: \"2px 10px\"\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    description: \"Small inline date marker on timeline events.\"\n  hero-badge:\n    border: \"2px solid {colors.neon-yellow}\"\n    color: \"{colors.neon-yellow}\"\n    padding: \"8px 16px\"\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    letterSpacing: 0.1em\n    textTransform: uppercase\n    description: \"Outline-only chip used in clusters under hero headlines.\"\n  bg-grid:\n    backgroundColor: \"{colors.dark-void}\"\n    backgroundImage: \"linear-gradient(rgba(94, 220, 244, 0.07) 1px, transparent 1px), linear-gradient(90deg, rgba(94, 220, 244, 0.07) 1px, transparent 1px)\"\n    backgroundSize: \"40px 40px\"\n    description: \"40px cyan-on-navy grid wallpaper for dark surfaces. Pink, cyan, and lavender variants invert the relationship (colored ground with low-opacity navy grid lines).\"\n  scanlines:\n    background: \"repeating-linear-gradient(0deg, transparent 0px, transparent 2px, rgba(10, 14, 39, 0.04) 2px, rgba(10, 14, 39, 0.04) 4px)\"\n    mixBlendMode: multiply\n    description: \"Horizontal CRT scanline overlay applied via ::after at z-index 50. Always present on every slide.\"\n  grain:\n    opacity: 0.035\n    description: \"SVG fractal-noise grain layer applied via ::before at z-index 49. Always present on every slide.\"\n  crt-glow:\n    background: \"radial-gradient(ellipse at center, transparent 50%, rgba(10, 14, 39, 0.25) 100%)\"\n    description: \"Radial vignette that darkens the corners to mimic a CRT bulge. Applied to dark-surface slides via ::after at z-index 51.\"\n  starfield:\n    description: \"Container of small 4-6px colored squares (cyan, yellow, pink) positioned absolutely with a 3s twinkle keyframe. Lives on dark surfaces only.\"\n  pixel-particles:\n    description: \"Floating 8px colored squares with an 8s float keyframe. Decorative ambient layer on hero and CTA-type surfaces.\"\n  nav-dot:\n    width: 12px\n    height: 12px\n    border: \"2px solid {colors.neon-cyan}\"\n    background: transparent\n    description: \"Hollow square pip with a 2px inset cyan fill on active state. Fixed vertical rail at right edge.\"\n  quote-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.neon-yellow}\"\n    boxShadow: \"4px 4px 0 {colors.deep-navy}\"\n    description: \"Short yellow rule with navy offset shadow, used as a separator under quote bodies.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\n8-Bit Orbit is a **retro-futuristic pixel-art presentation system**. Its foundational premise is the **4-pixel unit**: every shadow offset, every border, every corner bracket, every label height resolves to a multiple of 4px. Layouts feel as if they were rasterized on an old CRT and dragged into HTML — and atmospheric overlays (scanlines, grain, vignette glow, animated starfields) reinforce the illusion on every surface.\n\nThe type stack is three faces working in concert. **Tektur** is the display face — a chunky, geometric, semi-pixelated grotesque that carries headlines, hero text, stat numerals, and any text that needs to feel like it was drawn on the pixel grid. **Chakra Petch** is the body face — a humanist sans with subtle geometric cuts that reads cleanly at small sizes and avoids fighting Tektur for attention. **Space Mono** is the system face — used exclusively for labels, captions, badges, chart values, dates, and counters. The mono treatment + wide tracking on these elements makes them feel like HUD readouts, not editorial captions.\n\nThe palette is built around **deep navy as ground** (`{colors.dark-void}` and `{colors.deep-navy}`) lit by **three saturated neons** — cyan, hot pink, yellow — plus a soft lavender pastel. Surfaces alternate: a dark navy surface (cyan grid wallpaper, white text, neon accents glowing in front) followed by a colored surface (pink, cyan, or lavender ground with navy text and navy grid lines etched at low opacity). The neons never appear as body text — they are reserved for headlines, stat numerals, accent rules, and label fills. The result is high contrast without being harsh: the neons feel illuminated rather than printed.\n\nDepth is the system's signature trick: **stacked hard offset shadows in the pixel unit**. The flagship pattern is a six-piece shadow on buttons — three navy offsets stepping down-right at 4px, then three colored halo offsets stepping further at 8px. Hero text gets a two-layer text shadow (yellow at +4/+4, navy at +8/+8). Cards get either a 6px navy box shadow or an 8px yellow box shadow on the featured tier. Every shadow is hard-edged, zero blur, locked to the 4px grid. Atmospheric depth comes from the always-on **scanlines + grain + CRT glow** overlay trio that subtly modulates every surface.\n\n**Density philosophy: moderately dense, atmospherically loaded.** The system reads as broken when surfaces are clean and unaccompanied — without scanlines, grain, vignette, particles, or a colored grid behind, the type loses its arcade context and starts to look like generic web typography. Always layer the atmosphere. Within content regions, however, breathing room matters: cards are widely spaced (24-32px gaps), stat tiles get heavy internal padding, and hero text is allowed to dominate. A typical slide carries one display moment + a small constellation of supporting elements (badges, labels, a chart, or a small grid), all sitting on a fully decorated atmospheric background.\n\n**Key Characteristics:**\n- Three-font stack: Tektur (display), Chakra Petch (body), Space Mono (HUD/labels) — never substitute, never mix outside their roles.\n- Navy ground (`{colors.dark-void}` / `{colors.deep-navy}`) alternates with colored-grid surfaces (pink, cyan, lavender) — both carry the 40px etched grid.\n- Three neons (cyan, pink, yellow) reserved for display, stats, rules, and label fills — never for body text.\n- All measurements snap to the 4px pixel unit: borders 2-4px, shadow offsets 4px / 8px, corner brackets 24×24 with 4px stroke.\n- Stacked hard offset shadows are the system's depth language — never blurred, never colored on text shadows except in the yellow→navy cascade.\n- Every slide carries the persistent scanline + grain + CRT-vignette trio at z-index 49-51.\n- L-shaped corner brackets (`{components.pixel-corner-bracket}`) replace rounded corners and frame regions, cards, and stat tiles.\n- A monospace label pill (`{components.label-pill}`) sits as the universal eyebrow on every region — navy fill, neon text, 0.2em tracking, uppercase.\n- Animated starfields and floating particle squares wallpaper dark surfaces — ambient, not decorative.\n\n## Colors\n\n### Palette\n\n- **Dark Void** (`{colors.dark-void}` — `#0A0E27`): The deepest ground, used on `<body>` and as the base for dark-grid surfaces. Reads as black-with-blue-bias under the CRT vignette.\n- **Deep Navy** (`{colors.deep-navy}` — `#0F1B3D`): The structural color — all shadow stacks, label fills, dark cards, button text on neon surfaces, and chart bar text. Slightly warmer than the void; the two read as ground and figure when stacked.\n- **Neon Cyan** (`{colors.neon-cyan}` — `#5EDCF4`): The system's primary glow. Used for headlines on dark surfaces, primary button fill, stat numerals, primary chart bars, timeline nodes, navigation dots, corner brackets, and grid lines on dark surfaces (at 7% opacity).\n- **Neon Pink** (`{colors.neon-pink}` — `#F0A6CA`): The warm accent. Used as a colored surface ground (40px navy-on-pink grid), secondary button fill, secondary chart bars, mouth detail in pixel avatars, and tertiary corner brackets.\n- **Neon Yellow** (`{colors.neon-yellow}` — `#F4D03F`): The high-key alert color. Used in shadow halos behind buttons and on featured tier cards, as the active timeline-node fill, on hero badges, in label-pill text variants, in the quote-line, and as Tektur text-shadow layer 1.\n- **Soft Lavender** (`{colors.soft-lavender}` — `#E2D5F2`): The calm pastel surface — used as ground for slides that need a softer reprieve from the neon-on-navy intensity. Carries the same etched-navy grid wallpaper as the other colored surfaces.\n- **White** (`{colors.white}` — `#FFFFFF`): Text color on dark/neon surfaces only. Never used as a slide background.\n\n### Defaults\n\n- **Default surface background**: `{colors.dark-void}` with the 40px cyan grid (`{components.bg-grid}`). Always apply scanlines + grain + crt-glow on top.\n- **Default headline color on dark surfaces**: `{colors.neon-cyan}`, with the `{shadows.pixel-text-shadow-small}` or `{shadows.pixel-text-shadow}` treatment for hero-scale text.\n- **Default headline color on colored grids (pink/cyan/lavender)**: `{colors.deep-navy}` — neon text becomes illegible on neon grounds.\n- **Default body text color on dark surfaces**: `rgba(255, 255, 255, 0.7)` — softened white, not pure white.\n- **Default body text color on colored grids**: `rgba(15, 27, 61, 0.75)` — softened navy.\n- **Default label-pill fill**: `{colors.deep-navy}` with `{colors.neon-yellow}` text. On colored grids the text can swap to cyan or pink as long as contrast against navy holds.\n- **Default accent color for callouts and stat numerals**: `{colors.neon-cyan}`.\n- **Default chart palette order**: cyan → pink → yellow (in that order across series).\n- **Default corner bracket color**: `{colors.neon-cyan}`. Yellow and pink variants exist for thematic accents.\n\nWhen a slide needs to feel softer or warmer, switch the colored grid from cyan-on-navy (default) to navy-on-pink, navy-on-cyan, or navy-on-lavender — the structural relationship inverts (grid lines become navy at low opacity) but the typographic rules stay the same.\n\n## Typography\n\n### Font Family\nThe system runs three faces, each locked to its role.\n\n**Tektur** is the display face — a wide-bodied, semi-geometric grotesque with subtle pixel-grid cuts. Used for every hero title, headline, stat numeral, quote mark, and large numeral. Tektur's chunky personality is what makes the system feel arcade-native; replacing it with Inter or Space Grotesk breaks the entire aesthetic.\n\n**Chakra Petch** is the body face — a humanist sans with mild geometric/squared character that reads cleanly at 14-22px and has enough personality to sit next to Tektur without disappearing. Used for paragraphs, hero taglines, quote bodies, and any longer-form prose.\n\n**Space Mono** is the HUD face — a monospace used exclusively for labels, badges, chart values/axes, page counters, date chips, and any element that should feel like a system readout. The mono + wide-tracked uppercase combination is the system's \"interface\" voice.\n\nNever use Tektur for body, never use Chakra Petch for chrome/HUD, never use Space Mono for headlines. The three-role separation is the typographic structure.\n\n### Typography Scale\n\n| Token | Size (clamp) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.pixel-hero}` | 48–128px | Tektur | 900 | Hero or cover display title — always carries the two-layer text shadow |\n| `{typography.display}` | 32–64px | Tektur | 700 | Large section opener |\n| `{typography.headline}` | 24–45px | Tektur | 700 | Primary section headline |\n| `{typography.subhead}` | 17.6–24px | Tektur | 700 | Region-level subheading or card title |\n| `{typography.stat-number}` | 32–56px | Tektur | 900 | Stat tile numeral — pairs with the small text shadow |\n| `{typography.body}` | 14.4–18.4px | Chakra Petch | 400 | Paragraph body |\n| `{typography.hero-tagline}` | 14.4–19.2px | Chakra Petch | 400 | Hero subtitle / lede paragraph below a pixel-hero |\n| `{typography.quote-body}` | 17.6–25.6px | Chakra Petch | 500 | Quote text |\n| `{typography.label-pill}` | 12px | Space Mono | 700 | Text inside the navy label pill |\n| `{typography.label-eyebrow}` | 13.6px | Space Mono | 400 | Standalone uppercase eyebrow above a headline (heavier tracking than the pill) |\n| `{typography.badge}` | 11.2px | Space Mono | 400 | Outline-only hero badge text |\n| `{typography.chart-value}` | 12px | Space Mono | 700 | Chart bar value numerals |\n| `{typography.chart-label}` | 11.2px | Space Mono | 400 | Chart axis or category labels |\n| `{typography.date-chip}` | 11.2px | Space Mono | 400 | Date marker on timeline events |\n| `{typography.counter}` | 12.8px | Space Mono | 400 | Persistent slide counter (NN / NN) |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.pixel-hero}` (48–128px clamp) — always Tektur weight 900 with the two-layer text shadow.\n- **Default size for a primary section headline**: `{typography.headline}` (24–45px clamp) — Tektur weight 700.\n- **Default size for paragraph body**: `{typography.body}` (14.4–18.4px clamp) — Chakra Petch weight 400.\n- **Default size for a stat numeral**: `{typography.stat-number}` (32–56px clamp) — Tektur weight 900, always carries the 3px navy text shadow.\n- **Default size for an eyebrow label**: `{typography.label-pill}` (12px) housed in the navy pill — or `{typography.label-eyebrow}` (13.6px) if the eyebrow sits standalone.\n- **Default tracking for any Space Mono label**: 0.1em (badges) to 0.3em (eyebrow labels). Mono without wide tracking reads as code, not HUD.\n- **Default body weight**: 400 for Chakra Petch, 500 for quote bodies.\n- **Default display weight**: 700 for headlines, 900 for hero scale and stat numerals.\n\nWhen unsure which display token to reach for, default to `{typography.headline}` — it's the section-level workhorse. Reserve `{typography.pixel-hero}` for cover and CTA moments only.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every pixel-hero element carries the stacked text-shadow.** The pattern is `4px 4px 0 {colors.neon-yellow}, 8px 8px 0 {colors.deep-navy}` on cyan text. A pixel-hero element without this two-layer cascade reads as untreated display type and breaks the arcade voice.\n- **Every stat numeral carries the small text-shadow.** The pattern is `3px 3px 0 {colors.deep-navy}` on cyan text. Stat numerals on dark surfaces need this shadow to feel illuminated; without it they read flat.\n- **Every Space Mono element is uppercase with wide tracking** — minimum 0.05em for chart labels, 0.08–0.2em for pills and badges, 0.3em for standalone eyebrow labels. Sentence-case mono does not exist in this system.\n- **Every Tektur display element keeps its native letter-spacing or slight positive (+0.04em on hero scale).** Tektur is wide-bodied by design — adding negative tracking compresses it into something that no longer reads as the same face.\n- **Every Chakra Petch body block uses line-height ≥ 1.6.** The face is dense; tighter line-height on body bleeds into unreadable.\n- **Every label pill uses Space Mono at 12px with 0.2em letter-spacing.** No exceptions — the pill is the system's most recognizable small chrome and any deviation in size or tracking breaks it.\n- **Every chart bar value / axis label uses Space Mono.** Numerical chrome is mono, never Tektur or Chakra Petch.\n\n### Typography Principles\n\nThe voice contrast is **chunky display ↔ humanist body ↔ wide-tracked mono chrome**. Switching any of the three roles to a different face flattens the system into a generic dark-mode aesthetic. Italic is never used in display or body — the only italic that appears anywhere is implicit in the slight tilt on pixel-art decorative elements.\n\nTektur should always feel **planted** — left-aligned, generous line-height, never centered for body-length runs (centering is permitted on hero and CTA titles only). Chakra Petch should always feel **calm** — left-aligned by default, no all-caps treatment, no letter-spacing.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are stacked vertically inside a `slides-container` and translated via `transform: translateY(...)` for navigation. Only one slide occupies the viewport at a time, with cubic-bezier `(0.22, 1, 0.36, 1)` easing on an 800ms transition.\n\nDefault slide padding is `3vh 4vw`. The inner `slide-content` caps at `max-width: 1200px` and centers, so on wide displays content keeps editorial column width while the colored background fills the viewport.\n\n### Pixel Unit\nEvery measurement in the system snaps to a **4px grid**. Border widths are 2px or 4px. Shadow offsets are 4px or 8px. Corner brackets are 24×24 with 4px stroke. The background grid is 40px (10 × pixel-unit). Card padding usually resolves to multiples of 8 (16, 24, 32, 48). This discipline is what makes the system feel rasterized rather than vector.\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Navigation dot rail** — vertical stack of 12×12 cyan-bordered squares, fixed at `right: 24px`, vertically centered. Active state fills the inner 8×8 with cyan.\n- **Slide counter** — Space Mono `01 / 10` format, fixed at `bottom: 24px`, horizontally centered, dark-navy semi-transparent pill background.\n- **Nav hint** — `USE KEYS ↑ ↓`, Space Mono 11px at 50% opacity, fixed at `bottom: 24px right: 24px`.\n\nThe cursor across the entire deck is `crosshair` — an additional arcade signal.\n\n### Atmospheric Overlay Stack\nEvery slide carries (in z-order):\n1. Surface background — either `{components.bg-grid}` (cyan-on-navy) or one of the colored grid variants.\n2. Grain layer at z-index 49, opacity 0.035.\n3. Scanlines at z-index 50, multiply blend mode.\n4. CRT vignette glow at z-index 51 (dark surfaces only).\n5. Optional starfield / pixel particles at z-index 1 inside the surface.\n6. `.slide-content` at z-index 10 above the atmospheric layers.\n\nThis overlay stack is the system's identity. A slide rendered without it looks like a wireframe.\n\n## Depth and Elevation\n\n### Stacked Hard Offset Shadow (Signature)\nThe system uses **stacked, multi-step hard offset shadows** in the 4px pixel unit. Every shadow value is composed in one of three patterns:\n\n- **Three-step navy L-shape** (`{shadows.pixel-l-shape}`) — three offsets at `4px 0`, `0 4px`, `4px 4px` in deep-navy, zero blur. Used on chart bars and small elevated chrome to suggest a single-layer drop.\n- **Six-step button cascade** (`{shadows.pixel-stack-cyan-yellow}` / `{shadows.pixel-stack-pink-cyan}`) — three navy offsets at 4px stepping then three colored halo offsets at 8px stepping behind. Creates a two-layer pixel-bevel effect. Used exclusively on `{components.pixel-button}`.\n- **Two-layer text-shadow** (`{shadows.pixel-text-shadow}` / `{shadows.pixel-text-shadow-small}`) — yellow layer at +4/+4 then navy layer at +8/+8 (or just navy at +3/+3 for stat-scale numerals). Used on every Tektur display element.\n\nAll shadows are zero-blur, hard-edged, locked to the pixel unit. A blurred drop shadow does not exist anywhere in the system.\n\n### Card Shadows\nTwo simpler patterns serve cards:\n- `{shadows.card-offset}` = `6px 6px 0 rgba(15, 27, 61, 0.15)` — soft navy offset for non-featured tier cards on light surfaces.\n- `{shadows.card-featured}` = `8px 8px 0 {colors.neon-yellow}` — neon-yellow offset for featured tier cards, paired with a `-12px` translateY lift.\n\n### Corner Brackets as Depth\nThe L-shaped corner brackets (`{components.pixel-corner-bracket}`) replace traditional border treatments on regions and cards. Two brackets at opposite corners imply a frame without enclosing it — the eye fills in the missing edges. On stat blocks and feature cards, brackets sit inset at `top: -2px / left: -2px` and `bottom: -2px / right: -2px` so they break the cell edge slightly, reinforcing the pixel-bevel feel.\n\n### Atmospheric Depth\nThe scanline + grain + CRT-vignette stack provides ambient depth on every surface without requiring shadow on individual elements. Animated starfields and floating particles layer additional spatial cues behind content. None of these are decorative add-ons — they are core to the depth perception of the system.\n\n## Shapes and Treatment\n\n### Border Radius\nEffectively zero. The only round shape that appears anywhere is the donut-style nav dot inner-fill (which is still a square in this system — the nav dots are square pips, not circles). Rounded buttons, rounded cards, or rounded pill chips break the pixel-art aesthetic immediately.\n\nThe pixel-face avatar zone uses square eyes and a rectangular mouth — anatomy rendered in pixels, not curves.\n\n### Border Weights\n- **2px solid** — used on feature-card outlines, hero badges, nav dots, stat-block frames, chart bars (inline edges).\n- **3px stroke** — used for chart axes inside SVG charts (deep-navy).\n- **4px solid** — used on corner brackets, timeline node borders, the quote-line, and the inner pixel-bevel of buttons.\n\nBorders are always solid, always navy or neon, never dashed except for the timeline rail (`{components.timeline-rail}`) which is intentionally rendered as a 16px-on, 8px-off repeating linear gradient to mimic a pixel-dashed line.\n\n### Decorative Element Types\n\n**Pixel corner bracket** — Two outward L-shapes (top-left + bottom-right) bracketing a region. 24×24 with 4px stroke. Default color is cyan; yellow and pink variants exist. The bracket pattern is the system's most distinctive non-typographic mark.\n\n**Label pill** — Navy rectangle with neon-yellow Space Mono text at 12px / 0.2em. The universal section eyebrow. Variants flip the text color to cyan or pink while keeping the navy fill.\n\n**Hero badge** — Outline-only 2px yellow border with yellow Space Mono text. Appears in clusters under hero titles as feature tags.\n\n**Stat block** — Cyan-tinted glass tile (8% cyan fill, 20% cyan border) with cyan corner brackets at top-left and bottom-right. Holds a large stat numeral over a Space Mono pink label.\n\n**Feature card** — Frosted-glass white card (15% white fill, blur) with navy corner brackets at opposite corners. Used on colored-grid surfaces.\n\n**Pixel button** — Cyan rectangle with the six-step stacked shadow cascade. On hover, the button translates +2/+2 and the shadow collapses to a 4-step cascade — simulating a key-press in pixel art.\n\n**Quote-line** — A 60×4 yellow rectangle with a 4×4 navy offset shadow. Used as a separator beneath quote bodies.\n\n**Timeline node** — 24×24 cyan square with a 4px navy border, positioned on a dashed navy rail. Active state swaps fill to yellow.\n\n**Date chip** — Inline 2px-padded navy pill with cyan Space Mono text, used to mark timeline events.\n\n**Pixel face** — A 120×120 grouping of square \"facial features\" (cyan eyes, pink mouth) rendered as absolutely positioned divs inside a navy avatar zone. Functions as both a friendly mascot and a system-signature decorative module.\n\n**Tier card** — White rectangle, 6px navy offset shadow. Featured tier swaps fill to deep-navy and shadow to 8px yellow, with a `-12px` translateY lift. Tier features use a `+` ::before glyph in cyan instead of standard bullets.\n\n**Pixel landscape** — A row of variable-height navy mountains at the bottom of CTA-class surfaces, opacity 0.3. Pure decoration suggesting an arcade horizon.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply the scanlines + grain + CRT-vignette overlay stack to every slide. The atmosphere is the design system; surfaces without it look like wireframes.\n- Use `{colors.neon-cyan}` as the default headline color on dark surfaces and `{colors.deep-navy}` as the default headline color on colored grids (pink/cyan/lavender).\n- Apply `{shadows.pixel-text-shadow}` to every pixel-hero element and `{shadows.pixel-text-shadow-small}` to every stat numeral. Tektur display type without its text-shadow reads flat.\n- Snap every measurement to the 4px pixel unit — border widths, shadow offsets, padding, corner-bracket dimensions. Off-grid values break the rasterized feel.\n- Use Tektur for display, Chakra Petch for body, Space Mono for chrome — exclusively. Cross-mixing the three voices flattens the system.\n- Wrap eyebrows in the `{components.label-pill}` (navy bg, yellow Space Mono text, 0.2em tracking, uppercase) as the universal section tag.\n- Pair the navy ground with at least one neon glow per region — text, chart bar, corner bracket, or button shadow halo. Pure navy without a neon accent reads as dead screen.\n- Layer animated starfields and pixel-particle floaters on dark hero and CTA surfaces. The motion is part of the atmosphere.\n- Render charts with cyan → pink → yellow series order and Space Mono numerals/labels. The neon trio is the chart palette.\n- Bracket cards and stat tiles with the L-shaped corner brackets at opposite corners instead of fully outlining them. The implied frame is the system's signature card treatment.\n\n### Don't\n\n- Don't substitute fonts. Tektur, Chakra Petch, and Space Mono are the three voices — replacing any of them with Inter, Roboto, or Space Grotesk collapses the system.\n- Don't round any corner. The pixel aesthetic depends on square edges. Border-radius is reserved for SVG donut chart geometry only.\n- Don't blur any shadow. Every shadow is hard-edged at zero blur. `0 4px 12px rgba(0,0,0,0.1)` does not exist here.\n- Don't place neon text on neon surfaces. Cyan headlines on the pink grid become illegible — switch to deep-navy on colored grounds.\n- Don't use Tektur in sentence-case body runs or Chakra Petch in chrome/labels. Each face has a single role.\n- Don't introduce a fourth neon. The palette is cyan + pink + yellow + lavender pastel. Adding green or orange breaks the curated neon trio.\n- Don't omit the atmospheric overlay stack on any slide, even chart-heavy or table-heavy slides. The overlays are non-negotiable.\n- Don't use uppercase Chakra Petch body text. Body always sentence-case; uppercase is reserved for Space Mono and Tektur display.\n- Don't drop the navy label pill in favor of a plain text eyebrow. The pill is the most recognizable small chrome in the system.\n- Don't shadow text or chrome with off-axis offsets. Every shadow steps down-right in 4px increments — left or upward offsets do not exist.\n\n## Responsive Behavior\n\n8-Bit Orbit is a **viewport-fluid system** built around `vw/vh`-based sizing and CSS `clamp()` ranges. There are no hard breakpoints for the deck itself — every font size, padding value, and gap interpolates between a minimum and maximum based on viewport width.\n\n### Scaling Behavior\n- Hero text scales 48px → 128px on viewport width.\n- Stat numerals scale 32px → 56px.\n- Body scales 14.4px → 18.4px.\n- The 4px pixel unit, 40px grid size, scanline 4px stripe, and corner-bracket dimensions are fixed — they do not scale, which means at larger viewports the pixel chrome appears proportionally finer (intentionally — the larger the canvas, the smaller and more refined the pixels read).\n\n### Component Breakpoints\nThree component-level breakpoints exist:\n- `max-width: 1024px` — feature grid collapses 4→2 columns, two-column split layouts stack.\n- `max-width: 900px` — feature grid further collapses, hbar chart label column shrinks.\n- `max-width: 500px` — feature grid becomes single column, stats grid stacks.\n\n### Presenter Behavior\n- Slides advance via `ArrowDown`, `ArrowRight`, or `Space`.\n- Slides reverse via `ArrowUp` or `ArrowLeft`.\n- `Home` jumps to first, `End` to last.\n- Vertical swipe on touch devices advances/reverses with a 50px threshold.\n- Mouse wheel scroll advances/reverses with an 800ms debounce lock.\n- Slide transitions use 800ms cubic-bezier `(0.22, 1, 0.36, 1)` on a translateY transform.\n\n### Animation Triggers\nChart bars and stat counters animate in on slide entry with `setTimeout` staggers (100-150ms between items). When a slide is exited, its bars/counters reset to 0 so re-entry replays the animation. The `prefers-reduced-motion` media query disables transitions and the starfield/particle twinkle keyframes.\n\n### Print Behavior\nThe system has no `@media print` rule. The deck is screen-first; printing produces only the active slide. For static export, screenshots of each slide preserve all atmospheric overlays (scanlines and grain are CSS-rendered, not assets).\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / stat numerals | Tektur 700–900 | 思源黑体 Noto Sans SC 900 |\n| Body / hero tagline / quote body | Chakra Petch 400–500 | 思源黑体 Noto Sans SC 400 |\n| HUD labels / badges / chart values / counter | Space Mono 400–700 (uppercase + wide tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) — see Known CJK Gap below |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family with built-in Latin glyph coverage. Set every text element to `font-family: 'Noto Sans SC', sans-serif`. 思源黑体 ships Latin glyphs that read cleanly alongside Chinese characters, so a sentence like `使用 Tektur 字体` renders in one consistent face rather than font-switching mid-word. This system normally runs three faces (display / body / HUD); collapsing to one CJK face is the right tradeoff because none of the three Latin faces have credible Chinese counterparts, and visual hierarchy still works through weight (900 / 700 / 500 / 400) plus the system's signature shadow stacks.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.7–1.8), display 1.15–1.25 (up from 1.05–1.15). CJK characters are square and visually full — they crowd vertically more than Latin.\n- **Letter-spacing**: set to 0 on every CJK run. The template's positive tracking on Tektur display (+0.04em) and 0.1–0.3em mono tracking on Space Mono labels looks broken on square CJK glyphs — they're already evenly spaced by design.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Space Mono label in this system uses `text-transform: uppercase`; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `8 位赛博 / 1989 模式` not `8位赛博/1989模式`.\n- **One font per sentence**: 思源黑体 covers both CJK and Latin glyphs in a unified style — let it handle mixed sentences. Don't let the browser fall back to Tektur or Space Mono mid-sentence for ASCII characters.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on three voices — Tektur (chunky arcade display), Chakra Petch (humanist body), Space Mono (HUD readouts) — and a CJK build cannot preserve that three-face contrast. Compensate by leaning harder on the **non-typographic** signature elements: the stacked text-shadow (yellow at +4/+4, navy at +8/+8) still works on 思源黑体 900 headlines and is what carries the arcade voice when the face itself is generic. Keep all atmospheric overlays (scanlines, grain, CRT vignette, starfields, grid wallpaper) — they do more identity work in a CJK build than in the Latin original.\n\nThe system's Space Mono label-pill (navy fill, neon-yellow text, 0.2em tracking, uppercase) is the most recognizable small chrome and translates poorly: CJK characters won't accept the wide tracking or uppercase transform. Render Chinese label-pills with 思源黑体 weight 500 at 0 tracking, no transform, and a slightly tighter fontSize (10–11px instead of 12px) to preserve the chip's compact silhouette. The colored pill background and corner-bracket framing carry the recognition load.\n\n### Known CJK Gap\n\n- **No CDN-loadable Chinese pixel font.** The system's arcade aesthetic depends on Tektur's semi-pixel grotesque character — there is no equivalent Chinese face on Google Fonts or major CDNs that reads as \"pixel-art\" while remaining legible. 思源黑体 at weight 900 gives heft but loses the pixel-grid signal entirely. The atmospheric overlays (scanlines, grain, vignette, starfields) and pixel-bevel shadow stacks must carry the arcade voice on their own.\n- **No CDN Chinese monospace face for HUD labels.** Space Mono's \"system readout\" voice depends on monospaced rhythm + uppercase + 0.1–0.3em tracking — none of which transfer to CJK. The label-pill loses its mono character; lean on the navy fill + neon text + corner-bracket framing to keep chrome recognizable.\n\n## Iteration Guide\n\n1. Any new slide gets the full atmospheric overlay trio (scanlines + grain + crt-glow on dark surfaces, scanlines + grain on colored surfaces) and a 40px etched grid surface. Don't skip the overlays.\n2. Any new display element uses Tektur. Any new body element uses Chakra Petch. Any new label, badge, counter, or chart value uses Space Mono. Never cross the role boundaries.\n3. Any new headline gets `{colors.neon-cyan}` on dark surfaces or `{colors.deep-navy}` on colored grids — both with the appropriate Tektur weight and (for hero scale) the stacked text-shadow.\n4. Any new eyebrow uses the `{components.label-pill}` — navy fill, neon-yellow Space Mono text at 12px / 0.2em / uppercase. Don't substitute a plain h-tag.\n5. Any new card or region gets the L-shaped corner brackets at opposite corners (top-left + bottom-right) instead of a full outline. The implied frame is the system's signature.\n6. Any new measurement snaps to the 4px pixel unit. Borders 2-4px, shadow offsets 4px / 8px, corner brackets 24px, grid 40px. Off-grid values feel wrong.\n7. Any new shadow is hard-edged at zero blur. For buttons use the six-step cascade; for cards use 6px navy or 8px yellow; for text use the two-layer cascade.\n8. Any new chart cycles cyan → pink → yellow in series order. Numerical labels and axis labels are always Space Mono.\n9. If a surface needs to feel warmer or softer, switch to the pink, cyan, or lavender etched grid variant — but keep all typographic rules intact (navy headlines, softened-navy body).\n10. Animated elements (starfield, particles, chart bar grow, counter rollup) should respect `prefers-reduced-motion`. Atmospheric overlays (scanlines, grain, vignette) are not animated and stay on always.\n\n## Known Gaps\n\n- **Tektur, Chakra Petch, and Space Mono are Google Fonts** loaded via a preconnect + `<link>`. The system has no fallback strategy beyond `cursive` / `sans-serif` / `monospace` — in environments where Google Fonts fail (offline, restricted networks), the aesthetic collapses to system defaults and loses its character.\n- **Starfield and pixel-particle elements are generated by inline JS** that creates a fixed count of absolutely-positioned divs with random positions and animation delays. The animation keyframes are present in CSS, but the elements are only created if the JS runs successfully.\n- **The chart system is hardcoded**: bar heights, hbar widths, and stat counter targets are stored in `data-*` attributes and animated via `setTimeout` staggers triggered by slide-index matching. There is no data-binding layer — adding a new chart requires copying the HTML pattern and updating the JS slide-index matcher.\n- **The pixel-landscape on CTA surfaces is JS-generated** from a hardcoded heights array `[30, 50, 70, ...]`. Width varies per mountain (60 + (i % 3) * 20px). Replacing the landscape requires editing the JS heights array.\n- **The CRT vignette glow uses a fixed dark-navy radial gradient.** Adjusting it requires editing the CSS gradient stops; there is no tokenized vignette intensity.\n- **The cursor is set to `crosshair` deck-wide** for atmospheric reasons. This may conflict with text-selection expectations in contexts where the deck is embedded.\n- **No keyboard navigation hint exists for the wheel/touch fallback.** The nav-hint reads `USE KEYS ↑ ↓` even though wheel and touch are also wired up.\n- **The slide counter format is fixed at `NN / NN` zero-padded.** Decks with more than 99 slides would render with a layout-shifting counter.\n- **The pixel-corner-bracket sizing is fixed at 24×24 with 4px stroke** and does not scale with viewport. On very large or very small viewports the brackets may feel proportionally off.\n","frontmatter":{"version":"alpha","name":"8-Bit Orbit","description":"A retro-futuristic pixel-art presentation system that fuses 16-bit arcade nostalgia with editorial discipline. Display type runs in Tektur (a chunky geometric display face built on pixel-grid logic) paired with Chakra Petch for body and Space Mono for code-flavored labels and tabular data. The palette pivots on a deep cosmic navy (`#0F1B3D` / `#0A0E27`) lit by three saturated neons — cyan, hot pink, and a high-key yellow — with a soft lavender pastel for warm reprieves. Depth is built from stacked hard offset shadows in 4px increments (the pixel unit), CRT scanlines, atmospheric grain, vignettes, and animated starfields. The effect sits between an arcade cabinet and a Tron-era boardroom — unmistakably digital, intentionally lo-fi, and engineered to feel as if it just booted up.","colors":{"dark-void":"#0A0E27","deep-navy":"#0F1B3D","neon-cyan":"#5EDCF4","neon-pink":"#F0A6CA","neon-yellow":"#F4D03F","soft-lavender":"#E2D5F2","white":"#FFFFFF"},"shadows":{"pixel-stack-cyan-yellow":"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}, 8px 4px 0 0 {colors.neon-yellow}, 4px 8px 0 0 {colors.neon-yellow}, 8px 8px 0 0 {colors.neon-yellow}","pixel-stack-pink-cyan":"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}, 8px 4px 0 0 {colors.neon-cyan}, 4px 8px 0 0 {colors.neon-cyan}, 8px 8px 0 0 {colors.neon-cyan}","pixel-l-shape":"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}","pixel-text-shadow":"4px 4px 0 {colors.neon-yellow}, 8px 8px 0 {colors.deep-navy}","pixel-text-shadow-small":"3px 3px 0 {colors.deep-navy}","card-offset":"6px 6px 0 rgba(15, 27, 61, 0.15)","card-featured":"8px 8px 0 {colors.neon-yellow}"},"typography":{"pixel-hero":{"fontFamily":"'Tektur', cursive","fontSize":"clamp(48px, 10vw, 128px)","fontWeight":900,"lineHeight":1.05,"letterSpacing":"0.04em"},"display":{"fontFamily":"'Tektur', cursive","fontSize":"clamp(32px, 5vw, 64px)","fontWeight":700,"lineHeight":1.15},"headline":{"fontFamily":"'Tektur', cursive","fontSize":"clamp(24px, 3.5vw, 45px)","fontWeight":700,"lineHeight":1.15},"subhead":{"fontFamily":"'Tektur', cursive","fontSize":"clamp(17.6px, 2vw, 24px)","fontWeight":700,"lineHeight":1.15},"stat-number":{"fontFamily":"'Tektur', cursive","fontSize":"clamp(32px, 4vw, 56px)","fontWeight":900,"lineHeight":1},"body":{"fontFamily":"'Chakra Petch', sans-serif","fontSize":"clamp(14.4px, 1.2vw, 18.4px)","fontWeight":400,"lineHeight":1.7},"hero-tagline":{"fontFamily":"'Chakra Petch', sans-serif","fontSize":"clamp(14.4px, 1.5vw, 19.2px)","fontWeight":400,"lineHeight":1.8},"quote-body":{"fontFamily":"'Chakra Petch', sans-serif","fontSize":"clamp(17.6px, 2.2vw, 25.6px)","fontWeight":500,"lineHeight":1.8},"label-pill":{"fontFamily":"'Space Mono', monospace","fontSize":"12px","fontWeight":700,"lineHeight":1,"letterSpacing":"0.2em","textTransform":"uppercase"},"label-eyebrow":{"fontFamily":"'Space Mono', monospace","fontSize":"13.6px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.3em","textTransform":"uppercase"},"badge":{"fontFamily":"'Space Mono', monospace","fontSize":"11.2px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.1em","textTransform":"uppercase"},"chart-value":{"fontFamily":"'Space Mono', monospace","fontSize":"12px","fontWeight":700,"lineHeight":1},"chart-label":{"fontFamily":"'Space Mono', monospace","fontSize":"11.2px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.05em"},"date-chip":{"fontFamily":"'Space Mono', monospace","fontSize":"11.2px","fontWeight":400,"lineHeight":1},"counter":{"fontFamily":"'Space Mono', monospace","fontSize":"12.8px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.15em"}},"spacing":{"pixel-unit":"4px","pad-slide-y":"3vh","pad-slide-x":"4vw","pad-card-lg":"32px 40px","pad-card-md":"28px","pad-card-sm":"16px 20px","gap-grid-lg":"32px","gap-grid-md":"24px","gap-grid-sm":"16px","content-max-width":"1200px"},"canvas":{"width":"100vw","height":"100vh"},"components":{"label-pill":{"background":"{colors.deep-navy}","color":"{colors.neon-yellow}","padding":"6px 14px","fontSize":"12px","fontWeight":700,"letterSpacing":"0.2em","textTransform":"uppercase","fontFamily":"'Space Mono', monospace","description":"Universal section tag. Default fill is deep-navy with neon-yellow text. Variant fills swap text color so the pill stays legible (e.g., navy bg with cyan text, navy bg with pink text)."},"pixel-button":{"background":"{colors.neon-cyan}","color":"{colors.deep-navy}","padding":"16px 36px","fontFamily":"'Tektur', cursive","fontWeight":700,"letterSpacing":"0.08em","textTransform":"uppercase","boxShadow":"{shadows.pixel-stack-cyan-yellow}","description":"The signature stacked-shadow CTA. The pink variant swaps cyan body for pink and yellow shadow halo for cyan halo."},"pixel-corner-bracket":{"width":"24px","height":"24px","borderWidth":"4px","description":"Two outward-facing L-shapes (top-left + bottom-right) bracketing a region. Default color is neon-cyan; yellow and pink variants exist. Sits 8px outside the bracketed element."},"feature-card":{"background":"rgba(255, 255, 255, 0.15)","backdropFilter":"blur(8px)","padding":"32px 24px","border":"2px solid rgba(15, 27, 61, 0.2)","description":"Frosted-glass card with inset navy L-brackets (top-left + bottom-right) replacing rounded corners. Used on light-surface slides."},"stat-block":{"background":"rgba(94, 220, 244, 0.08)","border":"2px solid rgba(94, 220, 244, 0.2)","padding":"32px 16px","description":"Cyan-tinted glass stat tile with cyan L-bracket accents at opposite corners. Used on dark surfaces. Stat numeral uses the pixel-text-shadow-small treatment."},"bar-track-light":{"height":"32px","background":"rgba(15, 27, 61, 0.1)","description":"Horizontal track for hbar charts on light surfaces. Fill is solid navy/cyan/pink with a yellow offset shadow."},"bar-vertical":{"background":"{colors.neon-cyan}","boxShadow":"{shadows.pixel-l-shape}","description":"Vertical chart bar with three-piece navy L-shadow. Color cycles cyan → pink → yellow."},"timeline-node":{"width":"24px","height":"24px","background":"{colors.neon-cyan}","border":"4px solid {colors.deep-navy}","description":"Square pixel node on timeline rails. Active state swaps fill to neon-yellow."},"timeline-rail":{"width":"4px","background":"repeating-linear-gradient(to bottom, {colors.deep-navy} 0px, {colors.deep-navy} 16px, transparent 16px, transparent 24px)","description":"Dashed pixel rail running between timeline nodes."},"date-chip":{"background":"{colors.deep-navy}","color":"{colors.neon-cyan}","padding":"2px 10px","fontFamily":"'Space Mono', monospace","fontSize":"11.2px","description":"Small inline date marker on timeline events."},"hero-badge":{"border":"2px solid {colors.neon-yellow}","color":"{colors.neon-yellow}","padding":"8px 16px","fontFamily":"'Space Mono', monospace","fontSize":"11.2px","letterSpacing":"0.1em","textTransform":"uppercase","description":"Outline-only chip used in clusters under hero headlines."},"bg-grid":{"backgroundColor":"{colors.dark-void}","backgroundImage":"linear-gradient(rgba(94, 220, 244, 0.07) 1px, transparent 1px), linear-gradient(90deg, rgba(94, 220, 244, 0.07) 1px, transparent 1px)","backgroundSize":"40px 40px","description":"40px cyan-on-navy grid wallpaper for dark surfaces. Pink, cyan, and lavender variants invert the relationship (colored ground with low-opacity navy grid lines)."},"scanlines":{"background":"repeating-linear-gradient(0deg, transparent 0px, transparent 2px, rgba(10, 14, 39, 0.04) 2px, rgba(10, 14, 39, 0.04) 4px)","mixBlendMode":"multiply","description":"Horizontal CRT scanline overlay applied via ::after at z-index 50. Always present on every slide."},"grain":{"opacity":0.035,"description":"SVG fractal-noise grain layer applied via ::before at z-index 49. Always present on every slide."},"crt-glow":{"background":"radial-gradient(ellipse at center, transparent 50%, rgba(10, 14, 39, 0.25) 100%)","description":"Radial vignette that darkens the corners to mimic a CRT bulge. Applied to dark-surface slides via ::after at z-index 51."},"starfield":{"description":"Container of small 4-6px colored squares (cyan, yellow, pink) positioned absolutely with a 3s twinkle keyframe. Lives on dark surfaces only."},"pixel-particles":{"description":"Floating 8px colored squares with an 8s float keyframe. Decorative ambient layer on hero and CTA-type surfaces."},"nav-dot":{"width":"12px","height":"12px","border":"2px solid {colors.neon-cyan}","background":"transparent","description":"Hollow square pip with a 2px inset cyan fill on active state. Fixed vertical rail at right edge."},"quote-line":{"width":"60px","height":"4px","background":"{colors.neon-yellow}","boxShadow":"4px 4px 0 {colors.deep-navy}","description":"Short yellow rule with navy offset shadow, used as a separator under quote bodies."}}},"isInternal":false,"tokens":11362,"sizeBytes":44709},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/preview.md","title":"8-bit-orbit Skill","category":"anthropic-skill","format":"markdown","content":"# 8-Bit Orbit Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/8-bit-orbit/design.md`\n- Preview card: `bold-template-pack/templates/8-bit-orbit/preview.md`\n\n## Selection Metadata\n\n- Slug: `8-bit-orbit`\n- Tagline: Pixel-art neon arcade aesthetic on a deep navy void.\n- Mood: retro-tech, playful, cyberpunk, energetic\n- Tone: geeky, neon, rebellious, sci-fi\n- Formality: low\n- Density: medium\n- Scheme: dark\n- Best for: Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos. Just as good for a tech talk that wants to lean into nostalgic-digital craft, a synthwave brand deck, or a creative review that wants to feel like a console.\n- Avoid for: Contexts where the dark neon palette would actively work against the message — quiet institutional finance disclosures, healthcare patient-facing materials, traditional luxury.\n\n## Visual Snapshot\n\nA retro-futuristic pixel-art presentation system that fuses 16-bit arcade nostalgia with editorial discipline. Display type runs in Tektur (a chunky geometric display face built on pixel-grid logic) paired with Chakra Petch for body and Space Mono for code-flavored labels and tabular data. The palette pivots on a deep cosmic navy (#0F1B3D / #0A0E27) lit by three saturated neons — cyan, hot pink, and a high-key yellow — with a soft lavender pastel for warm reprieves. Depth is built from stacked hard offset shadows in 4px increments (the pixel unit), CRT scanlines, atmospheric grain, vignettes, and animated starfields. The effect sits between an arcade cabinet and a Tron-era boardroom — unmistakably digital, intentionally lo-fi, and engineered to feel as if it just booted up.\n\n8-Bit Orbit is a retro-futuristic pixel-art presentation system. Its foundational premise is the 4-pixel unit: every shadow offset, every border, every corner bracket, every label height resolves to a multiple of 4px. Layouts feel as if they were rasterized on an old CRT and dragged into HTML — and atmospheric overlays (scanlines, grain, vignette glow, animated starfields) reinforce the illusion on every surface.\n\n## Preview Ingredients\n\n- Palette: dark-void #0A0E27; deep-navy #0F1B3D; neon-cyan #5EDCF4; neon-pink #F0A6CA; neon-yellow #F4D03F; soft-lavender #E2D5F2; white #FFFFFF\n- Typography: See full design doc after selection.\n- Signature move: Three-font stack: Tektur (display), Chakra Petch (body), Space Mono (HUD/labels) — never substitute, never mix outside their roles.\n- Signature move: Navy ground ({colors.dark-void} / {colors.deep-navy}) alternates with colored-grid surfaces (pink, cyan, lavender) — both carry the 40px etched grid.\n- Signature move: Three neons (cyan, pink, yellow) reserved for display, stats, rules, and label fills — never for body text.\n- Signature move: All measurements snap to the 4px pixel unit: borders 2-4px, shadow offsets 4px / 8px, corner brackets 24×24 with 4px stroke.\n- Signature move: Stacked hard offset shadows are the system's depth language — never blurred, never colored on text shadows except in the yellow→navy cascade.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1115,"sizeBytes":4725},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/design.md","title":"Biennale Yellow","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Biennale Yellow\ndescription: \"A literary-editorial presentation system in the visual register of an art biennale catalogue or quiet exhibition poster. The aesthetic is built on warm parchment grounds (`#E9E5DB`) flooded with soft solar yellow (`#F1EE2E`) radial blooms, set against a single deep indigo navy ink color. Display type is Instrument Serif — a contemporary high-contrast serif with tall ascenders and elegant italics — paired with Archivo for sans-serif chrome and JetBrains Mono for numerical and metadata callouts. No drop shadows, no rounded corners, no bordered cards: the only structural lines are hairline 1px rules in ink. The mood sits between a folded museum brochure, a slow-reading literary quarterly, and a Mediterranean exhibition poster — confident, atmospheric, and deeply restrained.\"\n\ncolors:\n  paper: \"#E9E5DB\"\n  paper-deep: \"#DCD6C4\"\n  sun: \"#F1EE2E\"\n  sun-soft: \"#F8F39B\"\n  haze: \"#F0DA7C\"\n  ink: \"#1B2566\"\n  ember: \"#E26B4A\"\n\ncolor-aliases:\n  line: ink\n\ntypography:\n  display:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, min(14.6vw, 22vh), 240px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-md:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(80px, min(10vw, 16vh), 200px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-sm:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(110px, min(11vw, 18vh), 200px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-it:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontStyle: italic\n    fontSize: \"clamp(56px, min(7vw, 11vh), 120px)\"\n    lineHeight: 1.04\n    letterSpacing: -0.005em\n  numeral-jumbo:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(220px, min(28vw, 64vh), 720px)\"\n    lineHeight: 0.84\n    letterSpacing: -0.04em\n  numeral-lg:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, min(15vw, 22vh), 280px)\"\n    lineHeight: 0.9\n    letterSpacing: -0.04em\n  numeral-md:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(72px, min(7vw, 12vh), 144px)\"\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n  headline:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(40px, min(4.6vw, 7vh), 88px)\"\n    lineHeight: 1.06\n    letterSpacing: -0.005em\n  headline-sm:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, min(3.6vw, 6vh), 56px)\"\n    lineHeight: 1\n  date-rail:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(48px, min(5.2vw, 9vh), 96px)\"\n    lineHeight: 0.96\n    letterSpacing: -0.005em\n  ledger-title:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(20px, 1.6vw, 30px)\"\n    lineHeight: 1.15\n  strand-title:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(22px, 1.7vw, 32px)\"\n    lineHeight: 1.1\n  strand-num:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 2vw, 38px)\"\n    lineHeight: 1\n  body-lede:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(15px, 1.05vw, 18px)\"\n    lineHeight: 1.55\n  body:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    lineHeight: 1.5\n  body-sm:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 0.78vw, 13px)\"\n    lineHeight: 1.5\n  micro-label:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(11px, 0.85vw, 14px)\"\n    lineHeight: 1.2\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  micro-label-tight:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.72vw, 12px)\"\n    lineHeight: 1.2\n    letterSpacing: 0.16em\n    textTransform: uppercase\n  rail-label:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    lineHeight: 1\n    letterSpacing: 0.32em\n    textTransform: uppercase\n  mono-data:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 0.85vw, 14px)\"\n    lineHeight: 1.4\n    letterSpacing: 0.04em\n  mono-date:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 0.95vw, 16px)\"\n    lineHeight: 1.4\n    letterSpacing: 0.02em\n  pagenum:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    lineHeight: 1\n    letterSpacing: 0.08em\n\nspacing:\n  pad-edge: \"clamp(40px, 4vw, 76px)\"\n  pad-region: \"clamp(40px, 4.2vw, 80px)\"\n  pad-foot: \"clamp(56px, 5vh, 88px)\"\n  pad-strand-y: \"clamp(12px, 1.6vh, 22px)\"\n  gap-region: \"clamp(20px, 2.5vw, 48px)\"\n  gap-strand: \"clamp(14px, 1.8vh, 22px)\"\n  gap-footer-col: \"clamp(20px, 2.4vw, 44px)\"\n  pagenum-bottom: \"clamp(22px, 2.4vh, 42px)\"\n  pagenum-right: \"clamp(24px, 2.4vw, 48px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.paper}\"\n\ncomponents:\n  pagenum:\n    position: \"absolute, right + bottom\"\n    color: \"{colors.ink}\"\n    opacity: 0.75\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    letterSpacing: 0.08em\n    description: \"Single mono pagenum NN / NN pinned to bottom-right of every slide at 75% opacity. The only persistent chrome on every surface.\"\n  hairline-rule:\n    border: \"1px solid {colors.ink}\"\n    description: \"1px solid ink horizontal or vertical rule. The system's only border treatment — separates header bands from content, footer columns from each other, ledger rows from each other. No thicker rule exists.\"\n  hairline-rule-soft:\n    border: \"1px solid rgba(27, 37, 102, 0.18-0.2)\"\n    description: \"1px ink at 18-20% opacity. Used for between-row separators inside dense ledger or strand lists where a full-weight rule would feel oppressive.\"\n  sun-bloom:\n    background: \"radial-gradient using {colors.sun} {colors.sun-soft} {colors.haze} blending to transparent on {colors.paper}\"\n    description: \"Large soft radial bloom of solar yellow placed off-center or behind a focal element. The system's primary atmospheric layer. Sized 42-70% of viewport in the larger axis.\"\n  ember-bloom:\n    background: \"radial-gradient using {colors.ember} at 15-22% opacity blending to transparent\"\n    description: \"Small warm peach bloom used as a counter-temperature accent in a corner opposite the sun bloom. Always subordinate; never dominant.\"\n  block-tile:\n    background: \"{colors.sun} at 40-70% opacity\"\n    description: \"Geometric blocks of translucent solar yellow placed on an 8-row × 4-column grid behind cover or colophon surfaces. Suggests a layered poster underprint.\"\n  yellow-panel:\n    background: \"{colors.sun}\"\n    color: \"{colors.ink}\"\n    description: \"Full-bleed yellow panel covering a column or third of the slide. The strongest possible color statement — used when a region needs to read as poster-fill, not paper.\"\n  bar-ink:\n    background: \"{colors.ink}\"\n    height: \"clamp(14px, 1.6vh, 22px)\"\n    description: \"Solid ink horizontal bar for data charts. Width carries the data value.\"\n  bar-lit:\n    background: \"{colors.sun}\"\n    border: \"1px solid {colors.ink}\"\n    height: \"clamp(14px, 1.6vh, 22px)\"\n    description: \"Highlighted variant of bar-ink — yellow fill with 1px ink stroke. Used to mark the current or featured row in a series.\"\n  strand-row:\n    layout: \"grid 56px 1fr, gap clamp(14px, 1.4vw, 24px), border-bottom hairline-soft, padding-bottom clamp(12px, 1.6vh, 22px)\"\n    description: \"Numbered editorial list row — numeral cell + content cell separated by hairline-soft. Used for programmes, agendas, and curated lists.\"\n  ledger-row:\n    layout: \"grid 92px 1.6fr 0.9fr 80px, gap clamp(14px, 1.4vw, 28px), border-bottom hairline-soft, padding clamp(10px, 1.3vh, 18px) 0\"\n    description: \"Four-column tabular row for calendars and itineraries. Date column is mono, title is serif, venue is sans, duration is mono right-aligned.\"\n  footer-band:\n    layout: \"grid 4-column with hairline-rule top border on each cell, gap clamp(20px, 2.4vw, 44px)\"\n    description: \"Four-column metadata strip pinned to the bottom of cover and colophon surfaces. Each cell has a tiny uppercase tag + a brief plain-English statement.\"\n  vertical-rail:\n    transform: \"rotate(-90deg) translateY(-50%) at left edge\"\n    fontFamily: \"'Archivo', sans-serif\"\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    letterSpacing: 0.32em\n    textTransform: uppercase\n    description: \"Rotated vertical text label running up the left edge. Used on chapter/divider surfaces as a section marker.\"\n  date-rail-stack:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontSize: \"clamp(48px, min(5.2vw, 9vh), 96px)\"\n    lineHeight: 0.96\n    textAlign: right\n    description: \"Large serif date or date-range stacked at top-right of cover surfaces. Uses an en-dash to indicate spans.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBiennale Yellow is a **literary-editorial presentation system** modeled on the visual language of European art biennale catalogues, slow exhibition posters, and quarterly literary publications. There are no cards, no buttons, no shadows, no rounded corners. The structural vocabulary is just three things: paper, ink, and yellow.\n\nThe typographic system pivots on **Instrument Serif**, a contemporary high-contrast serif with tall ascenders, elegant italics, and slightly flared terminals. It carries every display moment, every numeral, every quote — at scales ranging from headline-small (40px) to jumbo numerals over 700px. Set tight (line-height 0.86, letter-spacing −0.018em), it reads as confident editorial display; set looser in italic (line-height 1.04, letter-spacing −0.005em), it becomes a slow-reading quotation face. **Archivo** is the sans companion — used for body paragraphs and as small, wide-tracked uppercase labels (the \"micro-label\" treatment). **JetBrains Mono** handles all numerical and metadata callouts: dates, ledger figures, page numbers. The three-face system is rigid and disciplined; the contrast between them is the entire typographic story.\n\nThe color world is built on **warm parchment** (`{colors.paper}` — `#E9E5DB`) as the universal ground, marked by a single **ink** color (`{colors.ink}` — `#1B2566`, a deep indigo navy) used for every line of type and every rule. The system's signature color is **sun** (`{colors.sun}` — `#F1EE2E`), a highly saturated solar yellow used as a flooded panel, as a soft blooming radial gradient, or as a geometric tile underprint. A **soft ember peach** (`{colors.ember}` — `#E26B4A`) appears only as a subordinate counter-temperature accent, always at 15-22% opacity in a corner radial bloom. Inverted color treatments are not used; the system commits to navy ink on a warm ground.\n\nDepth is **atmospheric, not structural**. There are no drop shadows anywhere in the system. Depth comes from layered radial gradients of yellow (the sun-bloom and ember-bloom components) and the optional block-tile underprint on cover-class surfaces. Cards have no borders; regions are separated only by 1px hairline rules in ink. The lack of border weight is itself the aesthetic — the design feels printed, not engineered.\n\n**Density philosophy: editorial-restrained.** This system reads as elegant when sparse and broken when crowded. A typical surface holds one large display moment + a handful of supporting elements (a micro-label, a body paragraph, an ordered list, or a single radial bloom). Crowding the canvas with cards, buttons, panels, or stacked components turns the system into a different aesthetic entirely. Even dense surfaces (a calendar or programme) achieve density through tabular repetition, not visual richness — many quiet rows of hairline-separated metadata, not many bordered cells. Generous edge padding (40-76px) and wide footer/header bands let the canvas breathe.\n\n**Key Characteristics:**\n- Warm parchment ground (`{colors.paper}`) on every surface; never white, never gray.\n- Single ink color (`{colors.ink}`) for all text and all rules — no secondary text colors.\n- Solar yellow (`{colors.sun}`) deployed three ways: as a flooded panel, as a soft radial bloom, as a translucent geometric tile underprint.\n- Instrument Serif handles every display moment at scales from 40px to 720px+.\n- Archivo Bold uppercase + 0.16–0.32em tracking is the universal label voice.\n- JetBrains Mono is reserved exclusively for dates, ledger numerals, and page numbers.\n- 1px hairline rules in `{colors.ink}` are the only border treatment — used for header bands, ledger rows, footer columns, and strand separators.\n- No drop shadows, no rounded corners, no card outlines, no buttons. Decoration is atmospheric (radial blooms) or geometric (translucent tile blocks).\n- Persistent `01 / NN` JetBrains Mono pagenumber at bottom-right of every surface at 75% opacity.\n- Optional vertical rotated rail-label at the left edge of chapter/divider surfaces.\n\n## Colors\n\n### Palette\n\n- **Paper** (`{colors.paper}` — `#E9E5DB`): The warm parchment canvas. The default and near-universal background. Reads as a softened off-white with strong warmth — never neutral, never cold.\n- **Paper-deep** (`{colors.paper-deep}` — `#DCD6C4`): A slightly darker parchment tone, available as a secondary surface or to suggest a shadow band without using actual shadow. Reserved for moments that need surface differentiation while staying within the warm-paper family.\n- **Ink** (`{colors.ink}` — `#1B2566`): The single text and line color across the entire system. A deep indigo navy that reads as confident editorial black-with-blue-bias. Used for headlines, body, micro-labels, monos, hairline rules, and ink-bar fills. The `--line` CSS variable resolves to this same color.\n- **Sun** (`{colors.sun}` — `#F1EE2E`): The system's signature solar yellow. Highly saturated, slightly green-leaning. Used three ways: as a flooded full-bleed or column-bleed panel, as the core of soft radial blooms, and as 40-70% opacity geometric tile blocks.\n- **Sun-soft** (`{colors.sun-soft}` — `#F8F39B`): A paler buttery yellow used in the middle stops of sun-bloom gradients to soften the transition from saturated sun to paper.\n- **Haze** (`{colors.haze}` — `#F0DA7C`): A warmer mustard-leaning yellow used in the outermost stops of sun-bloom gradients to extend the bloom into the paper without a hard edge.\n- **Ember** (`{colors.ember}` — `#E26B4A`): A warm peach-orange used only as a subordinate counter-temperature accent in 15-22% opacity radial blooms. Never used as a fill color, never as a text color. Its job is to balance a sun-bloom on the opposite side of the canvas.\n\n### Defaults\n\n- **Default surface background**: `{colors.paper}`. Every surface starts here.\n- **Default headline color**: `{colors.ink}`. Always. Headlines never appear in yellow, ember, or paper-deep — only ink.\n- **Default body text color**: `{colors.ink}`. Body uses the same color as display; the contrast is achieved through size and weight, not color.\n- **Default rule color**: `{colors.ink}` (1px solid) for primary separators, ink at 18-20% opacity for secondary row separators.\n- **Default accent surface for poster moments**: `{colors.sun}` — a flooded panel of solar yellow with `{colors.ink}` text on top.\n- **Default atmospheric layer**: a single `{components.sun-bloom}` placed off-center on the surface, with an optional `{components.ember-bloom}` in the opposite corner.\n- **Default chart bar color**: `{colors.ink}`. The featured/current bar uses `{components.bar-lit}` (yellow fill, ink stroke).\n- **Default label color**: `{colors.ink}` for the text, no fill. Labels are tracking + uppercase + weight 600, not filled pills.\n\nThe system never inverts: ink text on a sun panel is correct (and a key signature treatment), but yellow text on an ink ground does not exist. Text is always ink; the variability lives in what's behind the text, not in the text color itself.\n\n## Typography\n\n### Font Family Stack\nThe system runs three faces, each with a tightly defined role.\n\n**Instrument Serif** (Google Fonts, italic + roman) is the display and editorial face. Its high contrast, tall ascenders, and slightly flared terminals give it a contemporary literary register — closer to a magazine masthead than a traditional book serif. Roman is used for headlines, numerals, ledger titles, and date rails. Italic is used for manifesto quotes and certain emphasis moments. Set tight (line-height ≤ 1.06, negative letter-spacing −0.005 to −0.04em).\n\n**Archivo** (Google Fonts) is the sans companion. Used at weight 400 for body paragraphs (line-height 1.5) and at weight 600 for the universal micro-label treatment (uppercase, 0.16-0.32em tracking, 10-14px). Never used at intermediate weights, never used for headlines.\n\n**JetBrains Mono** (Google Fonts) is the numerical/metadata face. Used exclusively for dates in ledgers, mono numerical callouts in data slides, page numbers, and the nav-hint. Its slab character gives editorial weight to numerical content without leaning on bold styling.\n\n### Typography Scale\n\n| Token | Size (clamp) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 120–240px | Instrument Serif | 400 | Cover-scale display title |\n| `{typography.display-sm}` | 110–200px | Instrument Serif | 400 | Editorial display in a panel context |\n| `{typography.display-md}` | 80–200px | Instrument Serif | 400 | Closing-statement display |\n| `{typography.display-it}` | 56–120px | Instrument Serif italic | 400 | Manifesto-scale italic quote body |\n| `{typography.numeral-jumbo}` | 220–720px | Instrument Serif | 400 | Chapter-divider ordinal numeral |\n| `{typography.numeral-lg}` | 120–280px | Instrument Serif | 400 | Decorative quotation mark, oversized punctuation |\n| `{typography.numeral-md}` | 72–144px | Instrument Serif | 400 | Hero stat figure |\n| `{typography.headline}` | 40–88px | Instrument Serif | 400 | Primary section headline, large quote body |\n| `{typography.headline-sm}` | 32–56px | Instrument Serif | 400 | Region headline, ledger/calendar topbar |\n| `{typography.date-rail}` | 48–96px | Instrument Serif | 400 | Date or date-range stacked at top of a surface |\n| `{typography.ledger-title}` | 20–30px | Instrument Serif | 400 | Title cell inside a calendar/ledger row |\n| `{typography.strand-title}` | 22–32px | Instrument Serif | 400 | Title inside a numbered strand/list row |\n| `{typography.strand-num}` | 28–38px | Instrument Serif | 400 | Numeral cell inside a strand row |\n| `{typography.body-lede}` | 15–18px | Archivo | 400 | Lede paragraph following a chapter headline |\n| `{typography.body}` | 14–16px | Archivo | 400 | Standard body paragraph |\n| `{typography.body-sm}` | 11–13px | Archivo | 400 | Footer-band body text, dense metadata |\n| `{typography.micro-label}` | 11–14px | Archivo | 600 | Universal uppercase eyebrow label |\n| `{typography.micro-label-tight}` | 10–12px | Archivo | 600 | Smaller uppercase label inside footer cells |\n| `{typography.rail-label}` | 11–13px | Archivo | 600 | Vertical rotated rail label |\n| `{typography.mono-data}` | 12–14px | JetBrains Mono | 400 | Chart year/value labels, mono inline data |\n| `{typography.mono-date}` | 13–16px | JetBrains Mono | 400 | Date column in calendar ledgers |\n| `{typography.pagenum}` | 11–13px | JetBrains Mono | 400 | Persistent page number |\n\n### Defaults\n\n- **Default size for a cover-scale display headline**: `{typography.display}` (120–240px clamp). Anything smaller reads as section-level, not cover-level.\n- **Default size for a primary section headline**: `{typography.headline}` (40–88px clamp).\n- **Default size for a chapter-divider numeral**: `{typography.numeral-jumbo}` (220–720px clamp). Don't shrink — the jumbo numeral is the point of a divider surface.\n- **Default size for a hero statistic**: `{typography.numeral-md}` (72–144px clamp). Stat figures share the same serif as headlines — they are display moments, not data chrome.\n- **Default size for a paragraph body**: `{typography.body}` (14–16px). For a lede after a chapter headline, step up to `{typography.body-lede}` (15–18px).\n- **Default size for any eyebrow label**: `{typography.micro-label}` (11–14px) at weight 600, uppercase, 0.18em tracking.\n- **Default weight for any Archivo body**: 400. Archivo body at any other weight breaks the rhythm.\n- **Default weight for any micro-label**: 600. Labels at weight 400 or 700 read as either timid or oversized.\n- **Default tracking for any uppercase label**: 0.16em minimum, 0.32em maximum. Labels without wide tracking read as code, not editorial.\n\nWhen unsure which display token to reach for, default to `{typography.headline}` (40–88px) for the primary moment, and `{typography.numeral-md}` (72–144px) for a single hero statistic. The display, display-sm, and display-md tokens are reserved for cover/colophon/poster-scale moments.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every display, numeral, headline, and ledger-title element is Instrument Serif at weight 400.** Bold serif display does not exist in this system — the face's contrast is its weight signal. Setting Instrument Serif at weight 700 collapses the entire elegance.\n- **Every Instrument Serif display element uses tight line-height (0.84–1.06).** Generous line-height on display destroys the editorial poster feel — large serif headlines must feel stacked, not aerated.\n- **Every Instrument Serif display element uses negative letter-spacing.** Display, headline, jumbo numerals at −0.018 to −0.04em; italic display at −0.005em. Without negative tracking, the wide-bodied glyphs read as untreated.\n- **Every micro-label is uppercase Archivo weight 600 with tracking ≥ 0.16em.** No exceptions. A label without uppercase + tracking is not a label in this system; it's a stray sans element.\n- **Every numerical metadata element (date, page number, chart value, calendar date) is JetBrains Mono.** Serif numerals are for display moments; mono numerals are for data chrome. Don't cross the line.\n- **Every italic manifesto-scale quote uses `{typography.display-it}`.** Setting an italic quote at headline scale (40–88px) reads as a smaller moment; the italic is meant to dominate.\n- **Every body paragraph is Archivo weight 400 with line-height ≥ 1.45.** Body in Instrument Serif does not exist — Instrument is for display only.\n\n### Typography Principles\n\nThe voice contrast is **slow elegant serif ↔ wide-tracked uppercase sans ↔ tabular mono**. Italic Instrument is the system's \"feeling\" voice (reserved for quotes and manifesto moments); roman Instrument is the \"statement\" voice; Archivo upper-tracked is the \"label\" voice; mono is the \"data\" voice. Each has a single job.\n\nMixing rules are tight: an `<em>` inside an Instrument Serif headline stays in italic Instrument Serif (no face switch). An `<em>` inside an Archivo body paragraph becomes italic Archivo, not a serif. Don't mix faces inline.\n\nColor is locked to ink on every element. There is no \"accent color text\" treatment in this system — accent is delivered through atmospheric blooms and panel fills, not text color.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and crossfade via opacity transition (280ms ease). Only one slide is `.active` at a time. Every measurement uses CSS `clamp()` with both vw and vh terms — typography clamps include `min(...vw, ...vh)` patterns so display type scales by whichever viewport axis is shorter.\n\n### Padding and Margin Scale\n\n| Token | Range | Use |\n|---|---|---|\n| `{spacing.pad-edge}` | 40–76px | Standard edge padding from any slide edge to content |\n| `{spacing.pad-region}` | 40–80px | Internal padding inside a flooded yellow panel or major region |\n| `{spacing.pad-foot}` | 56–88px | Bottom padding when the footer band is present |\n| `{spacing.gap-region}` | 20–48px | Gap between two major content columns/regions |\n| `{spacing.gap-strand}` | 14–22px | Gap between strand rows in a numbered list |\n| `{spacing.gap-footer-col}` | 20–44px | Gap between columns of the footer-band metadata strip |\n| `{spacing.pagenum-bottom}` | 22–42px | Bottom inset of the persistent pagenum |\n| `{spacing.pagenum-right}` | 24–48px | Right inset of the persistent pagenum |\n\n### Persistent Chrome\nThe **pagenum** is the only persistent on-canvas element. It appears at `bottom-right` of every slide in JetBrains Mono at 11–13px, color ink, opacity 0.75. A **nav-hint** (`← / → · space`) appears once, fixed to the bottom-left of the viewport in JetBrains Mono at 10–12px / opacity 0.4. The nav-hint is not part of the slide composition — it lives outside the `.stage`.\n\n### Edge Discipline\nEvery meaningful element respects a minimum 40px (mobile) to 76px (desktop) edge inset. The system's elegance depends on negative space at the edges — pushing content to the bleed (other than full-bleed panels, blooms, and tile blocks) breaks the catalogue feel.\n\n### Atmospheric Layer\nEvery slide may carry one or both atmospheric layers behind content:\n- A **sun-bloom** (`{components.sun-bloom}`) — a large soft radial gradient of solar yellow, sized 42-70% of viewport, placed off-center or behind a focal element.\n- An **ember-bloom** (`{components.ember-bloom}`) — a small warm peach radial gradient at 15-22% opacity, placed in a corner opposite the sun bloom.\n\nThese layers are not optional decoration — they are the system's primary depth mechanism. A surface without a bloom reads as flat parchment.\n\n## Depth and Elevation\n\n### No Drop Shadows\nThe system has **zero drop shadows**. No `box-shadow`, no `text-shadow`, no `filter: drop-shadow(...)`. Depth is delivered atmospherically.\n\n### Atmospheric Depth (Sun Bloom)\nThe primary depth mechanism is the **sun-bloom** — a large soft radial gradient of solar yellow blooming from a point on the canvas. Bloom anatomy is a layered radial gradient with three or four color stops:\n- 0%: `{colors.sun}` at 70-95% opacity (the hot core)\n- ~30-40%: `{colors.sun}` at 40-65% opacity (the bloom)\n- ~55-65%: `{colors.haze}` at 18-22% opacity (the soft extension)\n- 80-90%: `{colors.paper}` at 0% (smooth fade into ground)\n\nBloom size and position varies by surface need: cover surfaces use a centered or slightly-off-center bloom 42% × 38% of viewport; chapter surfaces use a corner-anchored 720px-radius bloom; closing surfaces use a bottom-anchored 55% × 50% bloom rising from below.\n\n### Counter-Temperature Accent (Ember Bloom)\nAn optional **ember-bloom** in a corner opposite the sun-bloom provides warm-cool color tension without raising the saturation of the canvas. Always at 15-22% opacity, always smaller than the sun-bloom, always subordinate.\n\n### Geometric Underprint (Block Tiles)\nOn cover and colophon surfaces, an additional **block-tile** layer can appear behind content — translucent solar yellow rectangles placed on an 8-row × 4-column grid system at 40-70% opacity. This layer suggests a layered poster underprint without committing to a solid panel. The tiles are decorative geometry, not active content regions.\n\n### Yellow Panel (Structural Color)\nFor surfaces that need the strongest possible color statement, a **yellow-panel** flood (`{components.yellow-panel}`) covers a column, half, or third of the canvas in saturated `{colors.sun}`. This is the only \"hard\" color treatment in the system — when a panel is used, ink text sits on top at full opacity. Panels do not have borders or shadows; they meet the paper edge or another panel edge directly.\n\n### Hairline Rules\nInternal structural depth is delivered by **1px solid ink hairline rules** separating header bands from content, ledger rows from each other, and footer columns from each other. Rules are never thicker than 1px. Between secondary list rows (e.g., strand separators), the rule drops to `rgba(27, 37, 102, 0.18-0.2)` — same color, lower opacity.\n\n## Shapes and Treatment\n\n### Border Radius\n**Zero, on everything.** Every shape is a strict rectangle. The radial blooms are technically circles but they have no visible edge — they fade into paper.\n\n### Border Weights\n- **1px solid `{colors.ink}`** — the universal rule. Used for header-band underlines, ledger row separators, footer-column tops, and the bordered chart bar accent on the lit row.\n- **1px solid `rgba(27, 37, 102, 0.18-0.2)`** — soft variant of the same rule. Used for secondary row separators inside dense lists where full-weight ink would feel heavy.\n\nThe system has **no thicker borders**. There are no 2px, 3px, or 4px outlines anywhere. The visual structure depends on the lightness of the hairline.\n\n### Decorative Element Types\n\n**Sun-bloom** — Large soft radial gradient of solar yellow placed off-center or behind a focal element. The system's primary depth mechanism. Always one per surface, sometimes paired with a counter-bloom.\n\n**Ember-bloom** — Small warm peach radial gradient at 15-22% opacity, placed in a corner opposite the sun-bloom. Subordinate atmospheric balance.\n\n**Block-tile underprint** — Translucent solar yellow rectangles placed on an 8×4 grid system. Decorative geometry suggesting a layered poster, used on cover and colophon-type surfaces.\n\n**Yellow panel** — A full-bleed column, half, or third of the canvas flooded with `{colors.sun}`. The system's strongest color statement. Carries ink text on top.\n\n**Hairline rule** — 1px solid ink. Used for header-band underlines, ledger separators, footer column tops. The system's only border.\n\n**Footer band** — A four-column metadata strip at the bottom of cover/colophon surfaces. Each cell has a `{components.hairline-rule}` top border, an Archivo micro-label, and a short body statement.\n\n**Strand row** — Numbered editorial list row with serif numeral cell + serif title + sans body, separated from the next row by a hairline-soft rule.\n\n**Ledger row** — Four-column tabular calendar/itinerary row: mono date + serif title + sans venue + mono duration (right-aligned), separated by hairline-soft rules.\n\n**Vertical rail label** — Rotated Archivo uppercase text running up the left edge of a chapter-divider surface, with 0.32em tracking.\n\n**Date rail** — Large serif date or date-range stacked at top-right of cover surfaces, often using an en-dash to indicate a span across years or months.\n\n**Jumbo numeral** — A single huge Instrument Serif numeral (220-720px) dominating a divider surface. Always serif, always at weight 400, always with tight line-height.\n\n**Chart bar** — A solid ink rectangle whose width carries the data value. The featured/current bar swaps to yellow fill with a 1px ink stroke (`{components.bar-lit}`). Chart layouts use grid-row patterns: mono year label + bar + mono value, separated by gap.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.paper}` as the universal background. Every surface starts on parchment.\n- Set every line of text in `{colors.ink}` — display, body, micro-label, mono, everything. The single text color is non-negotiable.\n- Use Instrument Serif at weight 400 with tight line-height (0.84-1.06) and negative letter-spacing (-0.018 to -0.04em) for every display moment. The serif's elegance lives in this configuration.\n- Add at least one `{components.sun-bloom}` to every surface. Atmospheric depth is the system's depth mechanism; a flat parchment surface reads as broken.\n- Pair a sun-bloom with an `{components.ember-bloom}` in the opposite corner when you want warm-cool tension without raising the overall saturation.\n- Use `{components.hairline-rule}` (1px solid ink) for every structural separator: header-band underline, ledger row, footer column, strand separator.\n- Set every uppercase label in Archivo weight 600 with 0.16-0.32em tracking. Without the wide tracking, labels read as code, not editorial.\n- Use `{components.yellow-panel}` (full-bleed sun column or panel) when a surface needs strongest color commitment — keep ink text on top at full opacity.\n- Place the persistent `{components.pagenum}` (JetBrains Mono, 75% opacity ink) at bottom-right of every surface.\n- Reserve JetBrains Mono exclusively for numerical and metadata callouts: dates, ledger figures, chart values, page numbers, nav-hint. Never use mono for display or body.\n\n### Don't\n\n- Don't add drop shadows. The system has zero box-shadows and zero text-shadows. Adding any blurred or offset shadow breaks the printed-paper feel immediately.\n- Don't round any corner. Every shape is strict rectangle. Border-radius is forbidden.\n- Don't use borders thicker than 1px. The hairline rule is the only border vocabulary; 2px, 3px, or 4px outlines do not exist.\n- Don't set Instrument Serif at weight 700 or any bold weight. The serif's character lives at weight 400; bold serif display flattens the system.\n- Don't introduce a second text color. Yellow text on paper, ember text anywhere, or muted-ink secondary text — none exist. Text is always full-opacity ink.\n- Don't crowd the canvas with cards or panels. The system reads as elegant when sparse. Bordered cards, button stacks, or multi-region grids of containers break the editorial restraint.\n- Don't invert: ink panels with yellow or paper text are not part of the system. Ink ground is reserved for chart bars and small rule elements only.\n- Don't substitute Inter, Helvetica, or system-ui for Archivo, or Times for Instrument Serif. The font selection is the visual identity; substitution collapses the aesthetic.\n- Don't use mono for body or headlines. JetBrains Mono is exclusively for numerical/metadata chrome.\n- Don't omit the bloom layer on a surface. A flat parchment slide reads as a CMS template; the bloom is the atmosphere that signals \"biennale\".\n\n## Responsive Behavior\n\nThis system is built as a **viewport-fluid 100vw × 100vh deck** with no responsive breakpoints. Every font size, padding value, and gap uses CSS `clamp()` with both vw and vh terms — `clamp(40px, min(4.4vw, 7vh), 88px)` is a typical pattern. Display type scales by whichever viewport axis is shorter, so portrait orientations don't blow out the headlines.\n\n### Scaling Behavior\n- Cover-scale display scales 120px → 240px.\n- Chapter-divider jumbo numeral scales 220px → 720px.\n- Headline scales 40px → 88px.\n- Body scales 14px → 16px.\n- Edge padding scales 40px → 76px.\n- Hairline rule (1px) and pagenum sizing (11-13px) are essentially fixed.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `PageDown`, or `Space`.\n- Slides reverse via `ArrowLeft` or `PageUp`.\n- `Home` jumps to first slide, `End` to last.\n- Horizontal touch swipe with a 40px threshold advances/reverses.\n- Slide crossfades at 280ms ease via `opacity` toggle on the `.active` class. Only the active slide is `pointer-events: auto`.\n\n### Print Behavior\nThe system has no `@media print` rule. The crossfade transition is screen-only. For static export, capturing each slide individually via screenshot preserves all atmospheric layers (the radial blooms are pure CSS gradients, not assets).\n\n### Mobile Behavior\nThe `min(vw, vh)` pattern in display clamps means narrow portrait viewports automatically shrink display type to fit. The strand and ledger rows use fixed-px first columns (56px, 92px) that may feel tight on narrow widths — the system is designed for landscape presentation contexts and is functional but not optimized for sub-768px portrait usage.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / numerals / headlines / date rail | Instrument Serif 400 | 得意黑 Smiley Sans (oblique) — display moments; 思源宋体 Noto Serif SC 400 as fallback for long-form serif headlines |\n| Body / lede / micro-label | Archivo 400–600 | 思源宋体 Noto Serif SC 400 for body; 思源黑体 Noto Sans SC 600 for micro-labels |\n| Mono data / dates / page numbers | JetBrains Mono 400 | 思源黑体 Noto Sans SC 500 with tabular-feeling alignment — see Known CJK Gap below |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role, with Latin glyphs handled by the same CJK family. Both 思源宋体 and 思源黑体 ship Latin glyphs that read cleanly alongside Chinese characters, so a mixed sentence renders in a consistent face. 得意黑 is used surgically — only on the biggest display moments where its slight oblique slant matches the Italian-poster register Instrument Serif provides in the Latin original. For everything else (body, micro-label, mono), Noto Serif SC / Noto Sans SC carries both scripts.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=Noto+Serif+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-smiley-sans-oblique/font.min.css\">\n```\n\nAfter loading, reference 得意黑 as `font-family: 'Smiley Sans Oblique', 'Noto Serif SC', serif` on the display tokens that should carry the strongest poster register.\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.5–1.55), display 1.05–1.15 (up from the very tight 0.84–0.96 used on Instrument Serif). The Latin display tokens here use line-height as low as 0.84 — at that compression, CJK characters collide vertically. Open display to a minimum of 1.0 for Chinese, and 1.15+ on multi-line headlines.\n- **Letter-spacing**: set to 0 on every CJK run. The Latin display tokens use negative tracking from −0.005em down to −0.04em; on square CJK glyphs this overlaps strokes and reads as broken. Micro-labels at 0.16–0.32em wide tracking also drop to 0.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every micro-label and rail-label in this system uses `text-transform: uppercase`; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））. Replace the en-dash separator in date ranges with a Chinese 至 or full-width 「—」 hyphen.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 春季双年展` not `2024春季双年展`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style — let it handle mixed editorial sentences. Don't let the browser font-switch to Archivo mid-paragraph.\n\n### Aesthetic Notes for This System\n\nThe system's editorial identity rests on Instrument Serif's high-contrast, tall-ascender personality — a face that signals \"art biennale catalogue\" and \"slow literary quarterly\". The closest Chinese equivalent for register is **思源宋体 Noto Serif SC** for body and editorial display, with **得意黑 Smiley Sans Oblique** reserved for the poster-scale display moments where Instrument Serif at 120–240px does the heaviest identity work in the Latin original. 得意黑's slight italic tilt and slab character matches the Italian-exhibition-poster register; pure Noto Serif SC at jumbo numerals reads as restrained academic Chinese rather than biennale-loud.\n\nThe \"single text color, single accent\" discipline of this system transfers cleanly to CJK — ink-on-paper, sun-bloom atmosphere, hairline rules, no shadows. The micro-label treatment (Archivo weight 600, uppercase, 0.16–0.32em tracking) is the system's most fragile element when translated: CJK micro-labels lose both the uppercase signal and the wide tracking. Compensate by setting Chinese micro-labels in 思源黑体 weight 600 at 0 tracking with the **slightly heavier weight contrast** (drop body to weight 400 of 思源宋体, keep labels at 600 of 思源黑体) and by **always pairing the label with a hairline-soft rule beneath** — the rule does the chrome-recognition work the wide-tracked uppercase did in Latin.\n\n### Known CJK Gap\n\n- **No CDN-loadable Chinese monospace face for tabular data.** JetBrains Mono's role here (calendar ledger dates, chart year/value labels, page numbers) depends on monospaced figure rhythm that CJK doesn't provide. 思源黑体 at weight 500 with `font-feature-settings: \"tnum\"` gives tabular Latin digits but Chinese characters remain proportional. For ledger rows where alignment is structural, keep the date and value columns in Latin digits (Arabic numerals + Latin date abbreviations) and use 思源黑体 only for the title/venue cells.\n- **Instrument Serif italic has no direct Chinese counterpart.** The italic display token (manifesto-scale quote body) loses its slow-reading personality entirely in CJK. Use 思源宋体 400 with looser line-height (1.4) and slightly larger size to compensate; consider 「」 quotation framing to signal \"this is a quoted passage\".\n- **得意黑 may not load on restricted networks.** The cn-fontsource CDN is reliable in mainland China but less proven internationally. Always include `'Noto Serif SC', serif` in the stack as fallback so display headlines remain editorial even when 得意黑 fails.\n\n## Iteration Guide\n\n1. Any new surface starts on `{colors.paper}`, places at least one `{components.sun-bloom}` for atmosphere, and pins the persistent `{components.pagenum}` to bottom-right.\n2. Any new headline uses Instrument Serif weight 400 with tight line-height and negative tracking. Reach for `{typography.headline}` for primary moments and `{typography.display}` only for cover-scale.\n3. Any new body paragraph uses Archivo weight 400 with line-height 1.5. Lede paragraphs following a headline use the slightly larger `{typography.body-lede}` for breathing room.\n4. Any new eyebrow or section tag uses the micro-label treatment: Archivo weight 600, uppercase, 0.16-0.32em tracking, ink color, no fill. Don't substitute a pill or chip.\n5. Any new structural separator is a 1px `{components.hairline-rule}` in ink, or its soft variant for secondary list rows. Never reach for a thicker border.\n6. Any new numerical or metadata content (date, page number, chart value, ledger figure) uses JetBrains Mono. Serif numerals are reserved for display moments only.\n7. Any new \"poster-scale\" color statement uses `{components.yellow-panel}` — a flooded column or fraction of the canvas in `{colors.sun}` with ink text on top.\n8. Any new ordered list of program items uses the `{components.strand-row}` pattern: serif numeral cell + serif title + sans body, separated by hairline-soft rule.\n9. Any new tabular itinerary uses the `{components.ledger-row}` pattern: mono date + serif title + sans venue + mono duration right-aligned, separated by hairline-soft rule.\n10. If a surface feels flat, add an `{components.ember-bloom}` in the opposite corner from the sun-bloom — never add a card border or shadow.\n\n## Known Gaps\n\n- **Instrument Serif, Archivo, and JetBrains Mono are loaded from Google Fonts** via a preconnect + `<link>`. Fallbacks (`Georgia`, `Helvetica Neue`, `ui-monospace`) are defined but render very differently — in environments where Google Fonts fail, the system collapses to generic editorial defaults and loses its identity.\n- **The Instrument Serif italic axis is loaded** but used only for the manifesto-scale quote treatment. Other italic moments (an `<em>` inside a body paragraph, for instance) will not stylistically signal the same as the dedicated italic display.\n- **The system has no chart engine** — the data slide uses inline `style=\"width: XX%\"` on bar divs. Building dynamic charts requires computing widths in JS or templating the markup server-side.\n- **The block-tile underprint uses hardcoded grid positions** (`grid-column: 1 / 3; grid-row: 6 / 9;`) per tile. Tiles are decorative and the placements are tuned per surface; there is no parametric tile placement system.\n- **The vertical rail-label uses a rotated transform** that can produce subtle subpixel rendering artifacts on some browsers. The label is decorative; if rendering looks off, it can safely be dropped.\n- **The slide navigation has no slide indicator beyond the pagenum.** There are no dot-rails, no progress bar, no thumbnail bar. The pagenum text is the only positional cue.\n- **The crossfade transition is screen-only** and doesn't degrade to a sensible print/static state. Capturing slides for PDF export requires manual screenshot per surface.\n- **The cover and colophon footer-band columns use fractional widths** (`1.1fr 1fr 1.4fr 2fr` and `1.2fr 1.1fr 1fr 1.4fr`). These ratios are tuned to the demo content and may need adjusting if footer cells carry significantly different text length.\n- **The system loads Google Fonts with `ital` axis for Instrument Serif** but only `wght` axes for Archivo and JetBrains Mono. Adding italic body or italic mono moments requires updating the font-loading request.\n","frontmatter":{"version":"alpha","name":"Biennale Yellow","description":"A literary-editorial presentation system in the visual register of an art biennale catalogue or quiet exhibition poster. The aesthetic is built on warm parchment grounds (`#E9E5DB`) flooded with soft solar yellow (`#F1EE2E`) radial blooms, set against a single deep indigo navy ink color. Display type is Instrument Serif — a contemporary high-contrast serif with tall ascenders and elegant italics — paired with Archivo for sans-serif chrome and JetBrains Mono for numerical and metadata callouts. No drop shadows, no rounded corners, no bordered cards: the only structural lines are hairline 1px rules in ink. The mood sits between a folded museum brochure, a slow-reading literary quarterly, and a Mediterranean exhibition poster — confident, atmospheric, and deeply restrained.","colors":{"paper":"#E9E5DB","paper-deep":"#DCD6C4","sun":"#F1EE2E","sun-soft":"#F8F39B","haze":"#F0DA7C","ink":"#1B2566","ember":"#E26B4A"},"color-aliases":{"line":"ink"},"typography":{"display":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(120px, min(14.6vw, 22vh), 240px)","lineHeight":0.86,"letterSpacing":"-0.018em"},"display-md":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(80px, min(10vw, 16vh), 200px)","lineHeight":0.86,"letterSpacing":"-0.018em"},"display-sm":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(110px, min(11vw, 18vh), 200px)","lineHeight":0.86,"letterSpacing":"-0.018em"},"display-it":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontStyle":"italic","fontSize":"clamp(56px, min(7vw, 11vh), 120px)","lineHeight":1.04,"letterSpacing":"-0.005em"},"numeral-jumbo":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(220px, min(28vw, 64vh), 720px)","lineHeight":0.84,"letterSpacing":"-0.04em"},"numeral-lg":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(120px, min(15vw, 22vh), 280px)","lineHeight":0.9,"letterSpacing":"-0.04em"},"numeral-md":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(72px, min(7vw, 12vh), 144px)","lineHeight":0.92,"letterSpacing":"-0.01em"},"headline":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(40px, min(4.6vw, 7vh), 88px)","lineHeight":1.06,"letterSpacing":"-0.005em"},"headline-sm":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(32px, min(3.6vw, 6vh), 56px)","lineHeight":1},"date-rail":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(48px, min(5.2vw, 9vh), 96px)","lineHeight":0.96,"letterSpacing":"-0.005em"},"ledger-title":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(20px, 1.6vw, 30px)","lineHeight":1.15},"strand-title":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(22px, 1.7vw, 32px)","lineHeight":1.1},"strand-num":{"fontFamily":"'Instrument Serif', Georgia, serif","fontWeight":400,"fontSize":"clamp(28px, 2vw, 38px)","lineHeight":1},"body-lede":{"fontFamily":"'Archivo', sans-serif","fontWeight":400,"fontSize":"clamp(15px, 1.05vw, 18px)","lineHeight":1.55},"body":{"fontFamily":"'Archivo', sans-serif","fontWeight":400,"fontSize":"clamp(14px, 0.95vw, 16px)","lineHeight":1.5},"body-sm":{"fontFamily":"'Archivo', sans-serif","fontWeight":400,"fontSize":"clamp(11px, 0.78vw, 13px)","lineHeight":1.5},"micro-label":{"fontFamily":"'Archivo', sans-serif","fontWeight":600,"fontSize":"clamp(11px, 0.85vw, 14px)","lineHeight":1.2,"letterSpacing":"0.18em","textTransform":"uppercase"},"micro-label-tight":{"fontFamily":"'Archivo', sans-serif","fontWeight":600,"fontSize":"clamp(10px, 0.72vw, 12px)","lineHeight":1.2,"letterSpacing":"0.16em","textTransform":"uppercase"},"rail-label":{"fontFamily":"'Archivo', sans-serif","fontWeight":600,"fontSize":"clamp(11px, 0.85vw, 13px)","lineHeight":1,"letterSpacing":"0.32em","textTransform":"uppercase"},"mono-data":{"fontFamily":"'JetBrains Mono', ui-monospace, monospace","fontWeight":400,"fontSize":"clamp(12px, 0.85vw, 14px)","lineHeight":1.4,"letterSpacing":"0.04em"},"mono-date":{"fontFamily":"'JetBrains Mono', ui-monospace, monospace","fontWeight":400,"fontSize":"clamp(13px, 0.95vw, 16px)","lineHeight":1.4,"letterSpacing":"0.02em"},"pagenum":{"fontFamily":"'JetBrains Mono', ui-monospace, monospace","fontWeight":400,"fontSize":"clamp(11px, 0.85vw, 13px)","lineHeight":1,"letterSpacing":"0.08em"}},"spacing":{"pad-edge":"clamp(40px, 4vw, 76px)","pad-region":"clamp(40px, 4.2vw, 80px)","pad-foot":"clamp(56px, 5vh, 88px)","pad-strand-y":"clamp(12px, 1.6vh, 22px)","gap-region":"clamp(20px, 2.5vw, 48px)","gap-strand":"clamp(14px, 1.8vh, 22px)","gap-footer-col":"clamp(20px, 2.4vw, 44px)","pagenum-bottom":"clamp(22px, 2.4vh, 42px)","pagenum-right":"clamp(24px, 2.4vw, 48px)"},"canvas":{"width":"100vw","height":"100vh","background":"{colors.paper}"},"components":{"pagenum":{"position":"absolute, right + bottom","color":"{colors.ink}","opacity":0.75,"fontFamily":"'JetBrains Mono', ui-monospace, monospace","fontSize":"clamp(11px, 0.85vw, 13px)","letterSpacing":"0.08em","description":"Single mono pagenum NN / NN pinned to bottom-right of every slide at 75% opacity. The only persistent chrome on every surface."},"hairline-rule":{"border":"1px solid {colors.ink}","description":"1px solid ink horizontal or vertical rule. The system's only border treatment — separates header bands from content, footer columns from each other, ledger rows from each other. No thicker rule exists."},"hairline-rule-soft":{"border":"1px solid rgba(27, 37, 102, 0.18-0.2)","description":"1px ink at 18-20% opacity. Used for between-row separators inside dense ledger or strand lists where a full-weight rule would feel oppressive."},"sun-bloom":{"background":"radial-gradient using {colors.sun} {colors.sun-soft} {colors.haze} blending to transparent on {colors.paper}","description":"Large soft radial bloom of solar yellow placed off-center or behind a focal element. The system's primary atmospheric layer. Sized 42-70% of viewport in the larger axis."},"ember-bloom":{"background":"radial-gradient using {colors.ember} at 15-22% opacity blending to transparent","description":"Small warm peach bloom used as a counter-temperature accent in a corner opposite the sun bloom. Always subordinate; never dominant."},"block-tile":{"background":"{colors.sun} at 40-70% opacity","description":"Geometric blocks of translucent solar yellow placed on an 8-row × 4-column grid behind cover or colophon surfaces. Suggests a layered poster underprint."},"yellow-panel":{"background":"{colors.sun}","color":"{colors.ink}","description":"Full-bleed yellow panel covering a column or third of the slide. The strongest possible color statement — used when a region needs to read as poster-fill, not paper."},"bar-ink":{"background":"{colors.ink}","height":"clamp(14px, 1.6vh, 22px)","description":"Solid ink horizontal bar for data charts. Width carries the data value."},"bar-lit":{"background":"{colors.sun}","border":"1px solid {colors.ink}","height":"clamp(14px, 1.6vh, 22px)","description":"Highlighted variant of bar-ink — yellow fill with 1px ink stroke. Used to mark the current or featured row in a series."},"strand-row":{"layout":"grid 56px 1fr, gap clamp(14px, 1.4vw, 24px), border-bottom hairline-soft, padding-bottom clamp(12px, 1.6vh, 22px)","description":"Numbered editorial list row — numeral cell + content cell separated by hairline-soft. Used for programmes, agendas, and curated lists."},"ledger-row":{"layout":"grid 92px 1.6fr 0.9fr 80px, gap clamp(14px, 1.4vw, 28px), border-bottom hairline-soft, padding clamp(10px, 1.3vh, 18px) 0","description":"Four-column tabular row for calendars and itineraries. Date column is mono, title is serif, venue is sans, duration is mono right-aligned."},"footer-band":{"layout":"grid 4-column with hairline-rule top border on each cell, gap clamp(20px, 2.4vw, 44px)","description":"Four-column metadata strip pinned to the bottom of cover and colophon surfaces. Each cell has a tiny uppercase tag + a brief plain-English statement."},"vertical-rail":{"transform":"rotate(-90deg) translateY(-50%) at left edge","fontFamily":"'Archivo', sans-serif","fontSize":"clamp(11px, 0.85vw, 13px)","letterSpacing":"0.32em","textTransform":"uppercase","description":"Rotated vertical text label running up the left edge. Used on chapter/divider surfaces as a section marker."},"date-rail-stack":{"fontFamily":"'Instrument Serif', Georgia, serif","fontSize":"clamp(48px, min(5.2vw, 9vh), 96px)","lineHeight":0.96,"textAlign":"right","description":"Large serif date or date-range stacked at top-right of cover surfaces. Uses an en-dash to indicate spans."}}},"isInternal":false,"tokens":11624,"sizeBytes":46994},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/preview.md","title":"Biennale-yellow Skill","category":"anthropic-skill","format":"markdown","content":"# Biennale Yellow Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/biennale-yellow/design.md`\n- Preview card: `bold-template-pack/templates/biennale-yellow/preview.md`\n\n## Selection Metadata\n\n- Slug: `biennale-yellow`\n- Tagline: Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients.\n- Mood: editorial, atmospheric, warm, cultural-institution, poster-like\n- Tone: literary, considered, contemplative, warm-modern, Dutch-editorial\n- Formality: high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, studio retrospectives. Equally good for any deck wanting Dutch-editorial atmosphere with an unmistakable single-color signature.\n- Avoid for: Decks that need visual punch or saturated multi-color energy — the warm-paper canvas and one-yellow palette are intentionally quiet and atmospheric.\n\n## Visual Snapshot\n\nA literary-editorial presentation system in the visual register of an art biennale catalogue or quiet exhibition poster. The aesthetic is built on warm parchment grounds (#E9E5DB) flooded with soft solar yellow (#F1EE2E) radial blooms, set against a single deep indigo navy ink color. Display type is Instrument Serif — a contemporary high-contrast serif with tall ascenders and elegant italics — paired with Archivo for sans-serif chrome and JetBrains Mono for numerical and metadata callouts. No drop shadows, no rounded corners, no bordered cards: the only structural lines are hairline 1px rules in ink. The mood sits between a folded museum brochure, a slow-reading literary quarterly, and a Mediterranean exhibition poster — confident, atmospheric, and deeply restrained.\n\nBiennale Yellow is a literary-editorial presentation system modeled on the visual language of European art biennale catalogues, slow exhibition posters, and quarterly literary publications. There are no cards, no buttons, no shadows, no rounded corners. The structural vocabulary is just three things: paper, ink, and yellow.\n\n## Preview Ingredients\n\n- Palette: paper #E9E5DB; paper-deep #DCD6C4; sun #F1EE2E; sun-soft #F8F39B; haze #F0DA7C; ink #1B2566; ember #E26B4A\n- Typography: See full design doc after selection.\n- Signature move: Warm parchment ground ({colors.paper}) on every surface; never white, never gray.\n- Signature move: Single ink color ({colors.ink}) for all text and all rules — no secondary text colors.\n- Signature move: Solar yellow ({colors.sun}) deployed three ways: as a flooded panel, as a soft radial bloom, as a translucent geometric tile underprint.\n- Signature move: Instrument Serif handles every display moment at scales from 40px to 720px+.\n- Signature move: Archivo Bold uppercase + 0.16–0.32em tracking is the universal label voice.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1003,"sizeBytes":4544},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/design.md","title":"BlockFrame","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: BlockFrame\ndescription: \"A maximalist neobrutalist presentation system built on 4px solid black borders, 8px hard offset shadows, and a high-key candy palette of five saturated pastels plus cream and off-white. Display type runs Inter at weight 800-900 in tight uppercase; secondary chrome uses Space Grotesk as a quasi-monospace label face. Tilted decorative shapes (rotated stars, rectangles, badges) puncture the borders and break the grid intentionally. Pastels are paired loudly: pink + blue + green + yellow + cream cycle through every region with deliberate juxtaposition. The aesthetic borrows from zine layout, 1990s-revival sticker books, and contemporary toy packaging — bold, joyful, slightly chaotic, never timid.\"\n\ncolors:\n  black: \"#000000\"\n  white: \"#FFFFFF\"\n  offwhite: \"#FFFDF5\"\n  pink: \"#FE90E8\"\n  blue: \"#C0F7FE\"\n  green: \"#99E885\"\n  yellow: \"#F7CB46\"\n  cream: \"#FFDC8B\"\n\nborders:\n  primary: \"4px solid {colors.black}\"\n  thin: \"3px solid {colors.black}\"\n\nshadows:\n  default: \"8px 8px 0px {colors.black}\"\n  small: \"4px 4px 0px {colors.black}\"\n  hover: \"6px 6px 0px {colors.black}\"\n  close-yellow: \"12px 12px 0px {colors.yellow}\"\n  close-white: \"6px 6px 0px {colors.white}\"\n\ntypography:\n  heading-xl:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(48px, 6vw, 96px)\"\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n    textTransform: uppercase\n  heading-lg:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 800\n    fontSize: \"clamp(32px, 4vw, 64px)\"\n    lineHeight: 1\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  heading-md:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(24px, 2.5vw, 40px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  close-title:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(40px, 5vw, 80px)\"\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n    textTransform: uppercase\n  quote-text:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(28px, 3.5vw, 52px)\"\n    lineHeight: 1.15\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  stat-number:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(36px, 4vw, 64px)\"\n    lineHeight: 1\n  card-title:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: 22px\n    lineHeight: 1.2\n    textTransform: uppercase\n  step-num:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: 48px\n    lineHeight: 1\n  body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(16px, 1.2vw, 20px)\"\n    lineHeight: 1.6\n  body-card:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: 15px\n    lineHeight: 1.6\n  list-body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: 16px\n    lineHeight: 1.5\n  label:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 13px\n    lineHeight: 1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  mono-tag:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 14px\n    lineHeight: 1\n    letterSpacing: 0.05em\n    textTransform: uppercase\n  mono-meta:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 500\n    fontSize: 15px\n    letterSpacing: 0.02em\n  subtitle-mono:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 500\n    fontSize: 18px\n    lineHeight: 1.5\n  counter:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 700\n    fontSize: 14px\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  legend-item:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 13px\n\nspacing:\n  slide-pad: 60px\n  card-pad-lg: 60px\n  card-pad-md: 36px\n  card-pad-sm: 28px\n  card-pad-xs: 22px\n  gap-lg: 48px\n  gap-md: 32px\n  gap-sm: 24px\n  gap-xs: 16px\n  pad-bottom-clearance: 110px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  default-background: \"{colors.offwhite}\"\n\ncomponents:\n  card-elevated:\n    border: \"4px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.default}\"\n    description: \"Primary elevated card. 4px ink border + 8px ink offset shadow. Background is white by default; on darker surfaces background may shift to offwhite or to a colored fill.\"\n  card-flat:\n    border: \"4px solid {colors.black}\"\n    background: \"{colors.white}\"\n    description: \"Bordered card without elevation shadow. Used for secondary content cells inside multi-card grids where the shadow would compound.\"\n  card-small:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Compact card with thinner border + smaller offset shadow. Used for intro-cards, stat-cards, team-cards, and timeline-steps.\"\n  label-pill:\n    border: \"3px solid {colors.black}\"\n    padding: \"6px 16px\"\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontSize: 13px\n    fontWeight: 600\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Universal section eyebrow. White base by default; pink, blue, green, yellow, cream variants swap background. Always sits on a 3px black border with a 4px hard offset shadow.\"\n  button-primary:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    color: \"{colors.black}\"\n    padding: \"14px 32px\"\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: 16px\n    boxShadow: \"{shadows.small}\"\n    description: \"Primary CTA. Yellow fill with black text, 3px black border, 4px offset shadow. Hover lifts the button -2/-2 and grows shadow to 6px.\"\n  corner-bracket:\n    width: 24px\n    height: 24px\n    border: \"3px solid {colors.black}\"\n    description: \"Two L-shaped brackets at opposite corners of a card or frame (tl + br + tr + bl pattern available). Sits inside the card edge as a decorative frame-within-frame.\"\n  icon-square:\n    width: 64px\n    height: 64px\n    border: \"3px solid {colors.black}\"\n    description: \"Solid pastel square (pink/blue/green) holding a single uppercase letter glyph at weight 700 / 28px. Used as feature-card icons.\"\n  feature-deco:\n    width: 48px\n    height: 48px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    position: \"absolute top -12px right 24px\"\n    description: \"Yellow square notch that protrudes from the top edge of a feature card, breaking the card's top border line.\"\n  stat-deco-dot:\n    width: 12px\n    height: 12px\n    borderRadius: 50%\n    border: \"2px solid {colors.black}\"\n    description: \"Small black-bordered colored circle pinned to the top-right of a stat card. The only round shape used on cards. Fill cycles through the pastel palette.\"\n  avatar-square:\n    width: 72px\n    height: 72px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.pink}\"\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: 28px\n    textTransform: uppercase\n    description: \"Square avatar with two-letter initials, used in team grids. Fill cycles through the pastel palette.\"\n  list-number:\n    width: 36px\n    height: 36px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 700\n    fontSize: 14px\n    description: \"Square numerical bullet pinned to the left of each list item. Black border, yellow fill, mono numeral.\"\n  star-burst:\n    clipPath: \"polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)\"\n    border: \"3px solid\"\n    background: \"{colors.pink}\"\n    description: \"10-point star clipped via CSS clip-path with a 3px border. Decorative attention-grabber pinned to corners of close-frames and feature cards.\"\n  stripe-block:\n    background: \"repeating-linear-gradient(45deg, {colors.black}, {colors.black} 4px, {colors.green} 4px, {colors.green} 12px)\"\n    border: \"3px solid {colors.black}\"\n    description: \"Black-and-color diagonal stripe panel used as decorative attention block on poster-class surfaces.\"\n  bg-dot-grid:\n    backgroundImage: \"radial-gradient(circle, {colors.black} 1.2px, transparent 1.2px)\"\n    backgroundSize: \"24px 24px\"\n    description: \"Faint dot-grid background pattern used as an overlay on light surfaces or as decoration in corners of cards.\"\n  tilt-card:\n    transform: \"rotate(±2deg) or rotate(±8deg)\"\n    description: \"Card with intentional tilt. Stat cards alternate -2deg / +2deg; decorative rectangles tilt up to ±12deg. The tilt is the system's playful structural signature.\"\n  nav-btn:\n    width: 48px\n    height: 48px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Square nav arrow button. Hover translates -2/-2 and grows shadow; active translates 2/2 and shrinks shadow.\"\n  slide-counter:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    padding: \"10px 18px\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Persistent slide counter pill at bottom-left. Space Grotesk uppercase NN / NN format.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBlockFrame is a **maximalist neobrutalist presentation system** built on five structural laws: every region has a 4px black border, every elevated element has an 8px hard offset shadow, every corner is square, every accent color is a saturated pastel, and every layout is allowed to be a little bit crooked. The system's joy comes from the deliberate collision of these laws — bordered cards meet bordered cards, shadows stack against shadows, tilted decorations puncture the grid intentionally.\n\nThe type system pivots on **Inter** (weights 400-900) for display, body, and stats — set at weight 800-900 in tight uppercase with negative letter-spacing for headlines, weight 500 sentence case for body, and weight 700 uppercase for card titles. **Space Grotesk** (weights 400-700) is the secondary face, used as a quasi-monospace label voice for eyebrows, slide counters, stat labels, mono tags, and any chrome that should read as \"system\" rather than \"editorial\". The face combination is deliberately ordinary — both are widely-available open sans-serifs — but the treatment (heavy uppercase Inter + wide-tracked Space Grotesk) gives them a distinct neobrutalist register.\n\nThe palette is built around **five saturated pastels** (pink `#FE90E8`, blue `#C0F7FE`, green `#99E885`, yellow `#F7CB46`, cream `#FFDC8B`) plus **pure black** (`#000000`) for borders and text, **white** (`#FFFFFF`) for clean card fills, and **off-white** (`#FFFDF5`) for warm canvas. The pastels are not subtle accents — they are full-bleed surface fills. A typical deck cycles every slide through a different colored ground (offwhite cover → blue intro → offwhite content → green chart → pink quote → yellow split → offwhite timeline → blue stats → cream team → black close). This color cycling is the system's primary rhythm.\n\nDepth is **hard offset shadow at 4px and 8px**, always solid black, always zero blur, always positioned bottom-right. Larger elements get 8px, smaller chrome gets 4px. The close-frame uses a single 12px offset in **yellow** (the only colored shadow in the system) as the system's loudest depth statement, and inverted close-frames pair 6px **white** shadows on black surfaces. Borders are 4px solid black on primary cards, 3px solid black on secondary chrome. Border weight and shadow size are tightly coupled — a 4px border carries an 8px shadow; a 3px border carries a 4px shadow.\n\n**Density philosophy: comfortably dense.** This system reads as authoritative when packed and timid when sparse. A typical surface holds: a label-pill eyebrow + a large headline + a multi-card grid (3-6 cards) + at least one decorative element (tilted rectangle, star burst, stripe block, corner bracket, deco dots). Empty space within a region reads as \"broken\" — every card should be filled, every grid should be complete. The system's joy depends on the visual chatter of many bordered objects existing in the same frame.\n\n**Key Characteristics:**\n- 4px solid black borders on primary cards, 3px on secondary chrome — never thinner.\n- 8px hard offset shadows on primary cards, 4px on secondary chrome — solid black, zero blur.\n- Five-pastel palette (pink, blue, green, yellow, cream) plus black, white, off-white — cycled across surfaces.\n- Inter weight 800-900 uppercase with negative tracking is the display voice; Space Grotesk weight 600 uppercase with 0.08em tracking is the label voice.\n- Square corners everywhere except a single circular accent dot on stat cards.\n- Tilted decorative elements (rotated rectangles, stars, badges) puncture the grid intentionally.\n- Label pills (`{components.label-pill}`) carry a 3px border, 4px offset shadow, and a pastel fill variant — the universal section eyebrow.\n- Colored fills are bold and saturated; pastels are used as panel grounds, not as light accents.\n- Yellow is the default CTA color; black is the default close-surface color.\n- Star bursts, stripe blocks, and dot grids are reusable decorative attention units.\n\n## Colors\n\n### Palette\n\n- **Black** (`{colors.black}` — `#000000`): The structural color. Every border, every primary text moment, every shadow. Pure black, no warm bias. The system's contrast anchor.\n- **White** (`{colors.white}` — `#FFFFFF`): The default card fill. Used on every primary card and as the background of label-pills and nav-buttons. Pure white, no warmth.\n- **Off-white** (`{colors.offwhite}` — `#FFFDF5`): The warm canvas tone. The default body/slide background when no pastel ground is in play. Subtly warmer than pure white so that white cards sitting on top still feel layered.\n- **Pink** (`{colors.pink}` — `#FE90E8`): A high-key candy magenta. Used as a full-surface ground, as label-pill fill, as icon-square fill, as star-burst fill, and as one of the pastel chart series. The most saturated of the five pastels.\n- **Blue** (`{colors.blue}` — `#C0F7FE`): A pale cyan-ice blue. Used as a full-surface ground (the \"intro\" and \"stats\" feel), as label-pill fill, as icon-square fill, and as a chart series.\n- **Green** (`{colors.green}` — `#99E885`): A bright spring green. Used as a full-surface ground, as label-pill fill, as icon-square fill, in the stripe-block diagonal pattern, and as a chart series.\n- **Yellow** (`{colors.yellow}` — `#F7CB46`): The CTA color. Used as the default button fill, as the close-frame shadow color, as list-number squares, as the feature-deco notch, and as label-pill fill. The brightest, most attention-pulling pastel.\n- **Cream** (`{colors.cream}` — `#FFDC8B`): A warm yellow-cream. Softer than yellow, more saturated than offwhite. Used as a full-surface ground (the \"team\" or \"cover\" feel), as label-pill fill, and as a tertiary chart accent.\n\n### Defaults\n\n- **Default surface background**: `{colors.offwhite}` for content-heavy surfaces; cycle through `{colors.cream}`, `{colors.blue}`, `{colors.pink}`, `{colors.green}`, `{colors.yellow}` for surfaces that need a stronger ground. The cycle is the rhythm; staying on one ground for many slides flattens the system.\n- **Default headline color**: `{colors.black}` on all light/pastel surfaces; `{colors.white}` on the black close-surface.\n- **Default body text color**: `{colors.black}` on all light/pastel surfaces; `{colors.white}` or `{colors.cream}` on dark surfaces.\n- **Default border color**: `{colors.black}` — always. There are no colored borders anywhere except the 4px white border on the inverted close-frame.\n- **Default card fill**: `{colors.white}`. Use a pastel fill only when the card is part of a multi-card row where each card needs distinct color identity (e.g., the timeline-step row where each step is a different pastel).\n- **Default button fill**: `{colors.yellow}`. Other pastels work, but yellow is the system's primary \"click here\" signal.\n- **Default label-pill base**: `{colors.white}`; pastel variants (`{colors.pink}`, `{colors.blue}`, `{colors.green}`, `{colors.yellow}`, `{colors.cream}`) signal section type or decorate the eyebrow.\n- **Default decorative accent on stat cards**: a 12px circle (`{components.stat-deco-dot}`) in a pastel fill — cycling pink, blue, green, yellow across cards.\n- **Default chart palette order**: pink → blue → green (three-series), with yellow and cream available for additional series.\n\nThe pastels are interchangeable in role — none of them carry fixed semantic meaning (green isn't \"success\", red doesn't exist in the palette at all). Pair them by visual juxtaposition: pink + blue + green is the most common trio; cream + yellow is the warm pair; blue + pink is the cool-warm contrast.\n\n## Typography\n\n### Font Family Stack\nThe system runs two faces.\n\n**Inter** (weights 400-900) is the display, body, headline, and stat face. Used at weight 900 for hero/close titles and quote text, weight 800 for primary headlines, weight 700 for medium headlines and card titles, weight 500 for body. Display weights are always uppercase with negative letter-spacing (-0.02 to -0.03em); body weights are always sentence case with default tracking. The contrast between heavy uppercase display and weight-500 sentence body is the system's typographic rhythm.\n\n**Space Grotesk** (weights 400-700) is the label and chrome face. Used at weight 600 for label-pills (13px, 0.08em tracking, uppercase) and at weight 500 for monospace meta callouts. The face is technically not monospace, but its slightly geometric character + the wide tracking treatment makes it read as the system's \"code\" voice.\n\nDon't introduce a third face. The Inter + Space Grotesk pairing is the entire typographic palette.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.heading-xl}` | 48–96px clamp | Inter | 900 | Hero or cover-scale headline |\n| `{typography.heading-lg}` | 32–64px clamp | Inter | 800 | Primary section headline |\n| `{typography.heading-md}` | 24–40px clamp | Inter | 700 | Region headline, chart title |\n| `{typography.close-title}` | 40–80px clamp | Inter | 900 | Closing-statement title (inverted surface) |\n| `{typography.quote-text}` | 28–52px clamp | Inter | 900 | Quote body — always uppercase |\n| `{typography.stat-number}` | 36–64px clamp | Inter | 900 | Stat numeral |\n| `{typography.card-title}` | 22px | Inter | 700 | Feature card title — uppercase |\n| `{typography.step-num}` | 48px | Inter | 900 | Numeral inside a timeline-step (opacity 0.6) |\n| `{typography.body}` | 16–20px clamp | Inter | 500 | Standard body paragraph |\n| `{typography.body-card}` | 15px | Inter | 500 | Body inside compact cards |\n| `{typography.list-body}` | 16px | Inter | 500 | Numbered list body |\n| `{typography.label}` | 13px | Space Grotesk | 600 | Text inside label-pill |\n| `{typography.mono-tag}` | 14px | Space Grotesk | 600 | Mono tag/badge, slide-counter |\n| `{typography.mono-meta}` | 15px | Space Grotesk | 500 | Inline mono metadata |\n| `{typography.subtitle-mono}` | 18px | Space Grotesk | 500 | Hero subtitle / close subtitle |\n| `{typography.counter}` | 14px | Space Grotesk | 700 | Persistent slide counter (NN / NN) |\n| `{typography.legend-item}` | 13px | Space Grotesk | 600 | Chart legend label |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.heading-xl}` (48–96px). Always uppercase, always weight 900, always with -0.03em tracking.\n- **Default size for a primary section headline**: `{typography.heading-lg}` (32–64px). Uppercase, weight 800, -0.02em.\n- **Default size for a region or chart title**: `{typography.heading-md}` (24–40px). The only Inter heading not in uppercase by default — though uppercase is permitted.\n- **Default size for a stat numeral**: `{typography.stat-number}` (36–64px). Weight 900, line-height 1.\n- **Default size for body paragraph**: `{typography.body}` (16–20px clamp). Weight 500, sentence case, line-height 1.6.\n- **Default size for an eyebrow label**: `{typography.label}` (13px) inside the `{components.label-pill}`.\n- **Default weight for any Inter display**: 800 or 900. Inter display at weight 700 reads as \"almost there\"; only use 700 for `{typography.heading-md}` or card titles.\n- **Default weight for any Inter body**: 500. Body at 400 reads as too light, body at 700 reads as oversized.\n- **Default tracking for any Space Grotesk label/chrome**: 0.05-0.10em. Wide tracking is the face's \"chrome\" signal.\n- **Default tracking for any Inter display**: -0.01em (heading-md) to -0.03em (heading-xl). Display without negative tracking reads as untreated.\n\nWhen unsure which heading token to reach for, default to `{typography.heading-lg}` (32–64px) for the slide's primary text moment. `{typography.heading-md}` is for region or chart titles within a slide.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Inter display element (heading-xl, heading-lg, quote-text, close-title) is uppercase.** Sentence-case Inter display at weights 800+ does not exist in this system. The uppercase + heavy-weight + negative-tracking combination is the visual identity.\n- **Every Inter display element uses negative letter-spacing** (-0.01 to -0.03em). Display without negative tracking reads as default Inter, which is a fundamentally different aesthetic.\n- **Every label-pill carries the 3px border + 4px shadow + uppercase Space Grotesk text** combination. A label without all three properties is not a label-pill — it's a stray text element.\n- **Every card-title is uppercase Inter weight 700.** Card titles in sentence case break the brutalist rhythm.\n- **Every Space Grotesk label/chrome/counter is uppercase with 0.05-0.1em tracking.** Sentence-case Space Grotesk does not exist in this system except for body-adjacent metadata (mono-meta, mono inline).\n- **Every stat numeral is Inter weight 900 with line-height 1.** Stat numerals are display moments, not data chrome.\n- **Every Inter body block is sentence case with line-height 1.6 (or 1.5 for compact card body).** Body in uppercase or with tight line-height reads as broken.\n- **Step numbers inside timeline-step cards are 48px weight 900 at opacity 0.6.** The reduced opacity is mandatory — full-opacity step numbers overwhelm the step title.\n\n### Typography Principles\n\nThe voice contrast is **bold uppercase display ↔ sentence body ↔ wide-tracked label**. Italic is never used. Underline is never used. The only emphasis mechanism is weight contrast within the Inter ladder and the uppercase/sentence-case switch.\n\nDisplay elements should be allowed to **dominate the canvas**. The system is built for poster-scale typography; reading a heading-xl at small size collapses its character. Lean into the upper bound of every clamp.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and toggled via `display: none` / `display: flex` on the `.active` class. Default slide padding is 60px on all sides. Slides that contain bottom-anchored grids (timeline, team grid, chart with stat column) carry an additional `padding-bottom: 110px` to clear the fixed slide-counter and nav-controls chrome.\n\nThe default slide flex direction is column with `justify-content: center`. For two-column splits (intro slide, split image+text), flex direction switches to row.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.slide-pad}` | 60px | Default slide padding from edge to content |\n| `{spacing.card-pad-lg}` | 60px | Hero-frame and quote-frame internal padding |\n| `{spacing.card-pad-md}` | 36px | Feature-card internal padding |\n| `{spacing.card-pad-sm}` | 28px | Intro-card internal padding |\n| `{spacing.card-pad-xs}` | 22px | Team-card and small-cell padding |\n| `{spacing.gap-lg}` | 48px | Gap between major sections (header-to-grid) |\n| `{spacing.gap-md}` | 32px | Gap between feature cards |\n| `{spacing.gap-sm}` | 24px | Gap between intro cards, stat cards |\n| `{spacing.gap-xs}` | 16px | Gap inside list items, intra-card content |\n| `{spacing.pad-bottom-clearance}` | 110px | Bottom padding reserve to clear fixed nav chrome |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Slide counter** at bottom-left — 3px black border, white fill, 4px shadow, Space Grotesk 14px weight 700 uppercase, NN / NN format.\n- **Nav controls** at bottom-right — two 48px square nav buttons with 3px borders, white fills, 4px shadows.\n- The slide-counter and nav-controls are not part of the slide composition — they live outside `.slides-container` and overlap the bottom edge.\n\n### Card-on-Card Structure\nThe system's primary layout pattern is **cards on grounds on grounds**. A typical slide places a colored-ground surface, on which sits a white card with 4px black border + 8px shadow, which may contain smaller cards or icon-squares. Each level of nesting carries its own border weight: 4px for the outer card, 3px for inner chrome. This nested-bordered structure is what gives the system its dense, packed feel.\n\n### Decorative Disruption\nTilted decorative elements (rotated rectangles, stars, badges, dot grids) are placed absolutely on slide and card surfaces to puncture the grid intentionally. These are not \"background decoration\" — they are part of the composition. A surface without any decorative element reads as too clean.\n\n## Depth and Elevation\n\n### Hard Offset Shadow Stack\nThe system uses three primary shadow values:\n- **`{shadows.default}`** = `8px 8px 0px {colors.black}` — primary card shadow. Used on hero-frame, feature-card, quote-frame, chart-frame, and any elevated card.\n- **`{shadows.small}`** = `4px 4px 0px {colors.black}` — secondary chrome shadow. Used on intro-card, stat-card, team-card, timeline-step, label-pill, button-primary, nav-btn, slide-counter.\n- **`{shadows.hover}`** = `6px 6px 0px {colors.black}` — hover state for buttons and nav. Triggered with a -2/-2 transform.\n\nAll shadows are solid black, zero blur, fixed offset bottom-right. The shadow + transform pairing on hover creates a \"lifting off the page\" interaction signature — the element translates -2/-2 while the shadow grows to 6/6, simulating a peel-up.\n\n### Inverted Shadows\nOn the dark close-surface, shadows invert their color but keep the offset logic:\n- **`{shadows.close-yellow}`** = `12px 12px 0px {colors.yellow}` — the loudest depth statement in the system. Used on close-frame to make the inverted surface read as still \"elevated\" despite its dark ground.\n- **`{shadows.close-white}`** = `6px 6px 0px {colors.white}` — used on the close-btn to maintain elevation on the black ground.\n\nThese colored shadows are the only exceptions to the \"shadows are always black\" rule, and they appear only on the dark surface.\n\n### Border-Based Depth\nMost of the system's apparent layering comes from the 4px or 3px ink borders, not from shadow. A card with a border but no shadow still reads as \"an object on a surface\" — the shadow is what makes it read as \"lifted\". Use shadow for elevated cards; use border-only for secondary cards inside a multi-card grid where stacked shadows would compound into noise.\n\n### Tilted Elements as Depth\nThe system's playful depth signature is **tilt**. Stat cards alternate -2deg / +2deg rotation. Decorative pink rectangles tilt up to ±12deg. The yellow button tab on the hero frame tilts -3deg. These tilts break the grid alignment intentionally and create perceived dimensionality without using actual perspective or shadow.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px** on everything structural — cards, label-pills, buttons, icon-squares, list-numbers, avatars, badges. Square corners are non-negotiable.\n- **50% (circle)** used only for the stat-deco dot (12×12 circular accent pinned to stat cards). This is the only round shape in the system.\n\nThe square-corner discipline is the system's structural identity. Adding rounded corners to any card or chip immediately reads as a different aesthetic.\n\n### Border Weights\n- **4px solid `{colors.black}`** — used on primary cards (hero-frame, feature-card, quote-frame, chart-frame, team-card border, timeline-step border, stat-card border) and the close-frame inverse (4px solid white on black ground).\n- **3px solid `{colors.black}`** — used on secondary chrome (label-pill, button, intro-card, icon-square, list-number, avatar, corner-bracket, nav-btn, slide-counter, stripe-block, star-burst). The 3px weight signals \"secondary structural\" vs. the 4px \"primary structural\".\n- **2px solid `{colors.black}`** — used only on legend swatches (16×16 chart swatches) and stat-deco dots. The thinnest border weight, reserved for atomic chrome.\n- **4px solid `{colors.white}`** — used only on the inverted close-frame, the visual-box, and its ::after offset frame on the dark split-visual surface.\n\nThe border weight ladder (2 / 3 / 4) is fixed. No 1px borders, no 5px+ borders.\n\n### Decorative Element Types\n\n**Label-pill** — Square bordered pill (3px black border, 4px shadow), pastel or white fill, Space Grotesk 13px weight 600 uppercase text with 0.08em tracking. The universal section eyebrow.\n\n**Corner-bracket** — Two L-shaped brackets (or four for full enclosure) at the corners of a card, 3px black border. Creates a frame-within-frame decorative motif.\n\n**Star-burst** — 10-point star clipped via CSS clip-path with a 3px border, pastel fill. Decorative attention-grabber pinned to corners of close-frames and feature cards.\n\n**Stripe-block** — Diagonal 4px-on, 8px-off stripe pattern in black + a pastel color, framed with a 3px black border. Decorative attention block used on poster-class surfaces.\n\n**Dot-grid** — 1.2px radial-gradient dot pattern at 24×24 spacing. Used as a faint decorative overlay in corners of slides, at 30-40% opacity.\n\n**Feature-deco notch** — 48×48 yellow square with 3px black border, positioned absolutely to protrude from the top edge of a feature card. The notch breaks the card's top border, suggesting it's been \"stapled on\".\n\n**Icon-square** — 64×64 pastel square with 3px black border holding a single uppercase letter glyph at Inter weight 700 / 28px. Used as feature-card icons.\n\n**Stat-deco dot** — 12×12 circle with 2px black border, pastel fill, pinned to the top-right of a stat card. The system's only round shape.\n\n**List-number** — 36×36 yellow square with 3px black border holding a Space Grotesk 14px weight 700 numeral. Used as bullets on numbered lists.\n\n**Avatar-square** — 72×72 pastel square with 3px black border holding two uppercase initials at Inter weight 900 / 28px. Used in team grids; fills cycle through pastels.\n\n**Step-connector** — A 28×4 horizontal black bar pinned to the right edge of a timeline-step card, mid-height. Visually links adjacent steps in a horizontal flow.\n\n**Tilted decoration** — Any rectangle, badge, or star with a rotate(±2deg to ±12deg) transform. The tilt is intentional disruption of the grid; without it, the system reads as too uniform.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply 4px solid black borders to primary cards (`{components.card-elevated}`, hero-frame, quote-frame) and 3px to secondary chrome. The border weight ladder is the system's structural backbone.\n- Pair every 4px border with an 8px offset shadow, and every 3px border with a 4px offset shadow. The border/shadow coupling is non-negotiable.\n- Cycle slide backgrounds through the pastel palette — offwhite, cream, blue, pink, green, yellow — to keep the deck visually rhythmic. Staying on one color for many slides flattens the system.\n- Set every Inter display element in uppercase with negative letter-spacing (-0.01 to -0.03em) and weight 800+. The combination is the typographic identity.\n- Use the `{components.label-pill}` (3px border, 4px shadow, pastel fill, Space Grotesk uppercase 0.08em) as the universal section eyebrow on every region.\n- Apply tilt to decorative rectangles, stat cards, stars, and badges (±2deg to ±12deg). The intentional misalignment is the system's playful signature.\n- Use `{colors.yellow}` as the default button color. Yellow with a 3px black border and 4px black shadow is the system's \"click here\" voice.\n- Render shadows as solid black with zero blur, always offset bottom-right. The hard-edge shadow is the depth language.\n- Add a decorative element (star-burst, stripe-block, dot-grid, corner-bracket, tilted rectangle) to every surface. The visual chatter is part of the system's energy.\n- Use pure black `{colors.black}` for the closing surface, with white text and a 12px yellow offset shadow on the close-frame. The inverted dark surface is the system's loudest contrast moment.\n\n### Don't\n\n- Don't round any corner on cards, buttons, label-pills, icon-squares, or avatars. Border-radius is forbidden except on the stat-deco dot (12px circle).\n- Don't blur any shadow. Every shadow is hard-edged at zero blur. `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` does not exist in this system.\n- Don't use colored borders. Borders are always pure black, except for the inverted 4px white border on the close-frame.\n- Don't use Inter display weights in sentence case. Uppercase is mandatory on heading-xl, heading-lg, quote-text, close-title, and card-title.\n- Don't set Inter display without negative letter-spacing. Default-tracked Inter at heavy weights reads as a different system.\n- Don't introduce a sixth pastel color. The palette is locked at pink, blue, green, yellow, cream. Adding purple, orange, or red breaks the curated candy palette.\n- Don't omit the label-pill on a region. Going straight from background to headline without an eyebrow tag breaks the system's editorial rhythm.\n- Don't render label-pills as plain text. The 3px border + 4px shadow + pastel fill combination is what defines the pill.\n- Don't use blurred or colored body text. Body is solid black on light surfaces, solid white or cream on dark surfaces.\n- Don't keep every card perfectly aligned. The tilt on stat cards, decorations, and badges is what gives the system its hand-made energy.\n\n## Responsive Behavior\n\nBlockFrame is designed as a **1920×1080 presentation system** (effective 100vw × 100vh). Sizing uses CSS `clamp()` for type and fixed px for borders, shadows, and structural padding. The system has three component-level breakpoints for narrow viewports.\n\n### Scaling Behavior\n- Heading-xl scales 48px → 96px on viewport width.\n- Heading-lg scales 32px → 64px.\n- Body scales 16px → 20px.\n- Borders (3px, 4px), shadows (4px, 8px), and structural padding (60px slide-pad) are fixed and do not scale.\n\n### Component Breakpoints\n- `max-width: 1024px` — slide padding shrinks 60px → 40px, two-column splits stack vertically, feature card row stacks vertically, timeline track stacks vertically with step-connectors hidden, stats grid collapses to 2 columns, team grid collapses to 2 columns. Split visual loses left border and gains a top border.\n- `max-width: 640px` — stats grid collapses to 1 column, team grid collapses to 1 column, hero-frame padding shrinks to 32px, quote-frame padding shrinks to 32px.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are instant (`display: none` ↔ `display: flex` on the `.active` class), with no crossfade.\n\n### Print Behavior\nThe system has no `@media print` rule. Slides are absolute-positioned and only one is visible at a time — printing produces only the active slide. For static export, screenshots of each slide preserve all borders, shadows, and decorations (all are CSS, not image assets).\n\n### Interactive States\n- Buttons and nav-buttons translate -2/-2 on hover and shadow grows to 6px (`{shadows.hover}`); on active, translate 2/2 and shadow shrinks to 2px. The hover-press behavior is unusual for a presentation system; it reflects BlockFrame's hybrid identity as both deck and interactive product mockup.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / quote / close title / stat numerals | Inter 800–900 (uppercase, negative tracking) | 思源黑体 Noto Sans SC 900 (sentence case, 0 tracking) |\n| Card title | Inter 700 (uppercase) | 思源黑体 Noto Sans SC 700 (no transform) |\n| Body / list body | Inter 500 | 思源黑体 Noto Sans SC 400 |\n| Label / mono tag / counter / legend | Space Grotesk 600–700 (uppercase, 0.05–0.1em tracking) | 思源黑体 Noto Sans SC 600 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family with built-in Latin glyph coverage. Set every text element to `font-family: 'Noto Sans SC', sans-serif`. 思源黑体 ships Latin glyphs that pair cleanly with its Chinese characters, so mixed sentences render in one consistent face. The Inter / Space Grotesk distinction in the Latin original is preserved through weight contrast: weight 900 carries the brutalist display role, weight 600 carries the label role, weight 400–500 carries body. Visual hierarchy survives even though the face contrast is gone.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.15–1.25 (up from 0.95–1). The Latin display compresses to 0.95 line-height; CJK at that compression collides vertically.\n- **Letter-spacing**: set to 0 on every CJK run. The template's negative display tracking (−0.02 to −0.03em on Inter) overlaps CJK strokes and reads as broken; the positive 0.05–0.1em tracking on Space Grotesk labels reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Inter display heading (heading-xl, heading-lg, quote-text, close-title, card-title) uses `text-transform: uppercase` in the Latin original; remove it for CJK runs. Every label-pill, counter, and chrome element also uses uppercase; remove that too.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `BlockFrame 设计系统` not `BlockFrame设计系统`.\n- **One font per sentence**: 思源黑体 covers both CJK and Latin glyphs in a unified style — let it handle mixed sentences. Don't let the browser font-switch to Inter or Space Grotesk mid-word.\n\n### Aesthetic Notes for This System\n\nThe Latin original's typographic identity rests entirely on the **heavy uppercase + negative tracking** combination on Inter display. CJK has no case, so this signal disappears. The system survives because its identity is **80% structural, 20% typographic**: the 4px black borders, 8px hard offset shadows, five-pastel palette, tilted decorations, label-pills, star bursts, stripe blocks, and dot grids do the brutalist work. Set 思源黑体 900 in sentence case at the same large sizes; the chunky black-on-pastel + hard-shadow framing reads as brutalist regardless of whether the type is in caps.\n\nThe label-pill (Space Grotesk 600 uppercase, 0.08em tracking, 3px border + 4px shadow, pastel fill) loses the uppercase + tracked-mono character. Render Chinese label-pills with 思源黑体 weight 600 at 0 tracking and a slightly tighter fontSize (11–12px instead of 13px) — the bordered pill shape and shadow do the chrome-recognition work. Keep the pastel fill rotation (pink / blue / green / yellow / cream) intact; it's the system's most recognizable signal after the borders themselves.\n\n### Known CJK Gap\n\n- **No CDN Chinese monospace face for the \"system readout\" voice.** Space Grotesk's quasi-mono role (label-pills, counters, mono-tags, slide counter NN / NN) depends on its slightly geometric character plus the wide-tracked uppercase treatment. Neither survives the CJK translation. The slide counter and chart legend can keep Latin digits + Latin labels intact; for purely Chinese chrome, lean on the pill border + shadow + pastel fill to signal \"label\" rather than the typographic treatment.\n- **The \"uppercase brutalist\" identity weakens.** The system's most distinctive typographic decision is \"heavy uppercase Inter with negative tracking\" — and that signal is irreplaceable in CJK. Compensate by leaning harder on the structural elements: more decorative disruption (extra tilted rectangles, star bursts, stripe blocks), more saturated pastel-ground rotation across slides, and slightly tighter shadow offsets to compensate for the calmer typographic baseline.\n\n## Iteration Guide\n\n1. Any new card uses a 4px or 3px solid black border + the matched-weight offset shadow (8px or 4px). Never use a card without both.\n2. Any new region begins with a `{components.label-pill}` eyebrow in pastel fill, then the headline in uppercase Inter weight 800+, then content. The label-headline-content sequence is the system's editorial rhythm.\n3. Any new headline uses uppercase Inter with negative letter-spacing and weight 800-900. Reach for `{typography.heading-lg}` (32-64px) for primary moments and `{typography.heading-xl}` (48-96px) for cover/hero scale.\n4. Any new accent or surface fill picks from the 5-pastel palette (pink, blue, green, yellow, cream) — never introduce a sixth pastel.\n5. Any new CTA uses the `{components.button-primary}` pattern: 3px black border, yellow fill, 4px black shadow, Inter weight 700 / 16px. Hover lifts -2/-2 with shadow growing to 6px.\n6. Any new chart cycles through pink → blue → green for series order, with yellow/cream available for additional series. Legend swatches use 2px black border.\n7. Any new stat or metric uses Inter weight 900 + line-height 1 for the numeral, paired with Space Grotesk uppercase label below. Decorate the card with a `{components.stat-deco-dot}` in a pastel color.\n8. Any new slide adds at least one decorative disruption (tilted rectangle, star-burst, stripe-block, dot-grid corner, corner-bracket frame) — empty surfaces feel timid.\n9. Any new closing-style surface uses pure `{colors.black}` ground with white text, a 4px white-bordered close-frame, and a 12px yellow offset shadow. This is the only colored shadow allowed.\n10. If a surface feels too noisy, drop a decoration — don't drop a border or shadow. The borders and shadows are structural; the decorations are tunable.\n\n## Known Gaps\n\n- **Inter and Space Grotesk are loaded from Google Fonts** via inline `@import`. There are no system fallbacks beyond `sans-serif` and `monospace` — in environments where Google Fonts fail, the system collapses to system defaults and loses its identity.\n- **The system uses `@import` inside the `<style>` block** rather than a `<link>` preconnect. This is slower than the standard `<link>` approach and may delay first paint of typography.\n- **The chart is rendered as inline SVG with hardcoded coordinates** (`viewBox=\"0 0 800 360\"`, hardcoded `x/y/width/height` per `<rect>`). Adding new chart slides requires manual coordinate math; there is no data-binding layer.\n- **The hover/active state on buttons assumes a pointing device.** On touch devices the lift-and-press feedback only triggers on tap and may feel inconsistent.\n- **The tilt on stat cards is hardcoded with `:nth-child(odd)` -2deg and `:nth-child(even)` +2deg.** Re-ordering cards changes which tilts which direction — there's no per-card tilt control beyond ordering.\n- **The decorative star uses a CSS clip-path polygon with 10 points.** Browsers without clip-path support (very old IE/Edge) will render the star as a colored rectangle.\n- **The slide-counter and nav-controls overlap the slide content area at the bottom edge.** The 110px bottom padding on certain slides (slide-4, slide-9) reserves space, but other slides may have content that crowds the bottom-left counter pill.\n- **The black close-surface uses pure `#000000` ground with white text** — accessibility-wise this is high-contrast and fine, but the colored decorations on this surface (yellow shadow, white border) don't pass the WCAG color contrast checks at small sizes.\n- **The dot-grid background is a CSS radial-gradient.** At very large viewport sizes the dots may look too small to read as a grid; at very small sizes they may visually merge into solid noise.\n- **There is no transition between slides** other than the binary display toggle. Adding a fade or slide animation requires modifying the JS and adding transition CSS.\n","frontmatter":{"version":"alpha","name":"BlockFrame","description":"A maximalist neobrutalist presentation system built on 4px solid black borders, 8px hard offset shadows, and a high-key candy palette of five saturated pastels plus cream and off-white. Display type runs Inter at weight 800-900 in tight uppercase; secondary chrome uses Space Grotesk as a quasi-monospace label face. Tilted decorative shapes (rotated stars, rectangles, badges) puncture the borders and break the grid intentionally. Pastels are paired loudly: pink + blue + green + yellow + cream cycle through every region with deliberate juxtaposition. The aesthetic borrows from zine layout, 1990s-revival sticker books, and contemporary toy packaging — bold, joyful, slightly chaotic, never timid.","colors":{"black":"#000000","white":"#FFFFFF","offwhite":"#FFFDF5","pink":"#FE90E8","blue":"#C0F7FE","green":"#99E885","yellow":"#F7CB46","cream":"#FFDC8B"},"borders":{"primary":"4px solid {colors.black}","thin":"3px solid {colors.black}"},"shadows":{"default":"8px 8px 0px {colors.black}","small":"4px 4px 0px {colors.black}","hover":"6px 6px 0px {colors.black}","close-yellow":"12px 12px 0px {colors.yellow}","close-white":"6px 6px 0px {colors.white}"},"typography":{"heading-xl":{"fontFamily":"'Inter', sans-serif","fontWeight":900,"fontSize":"clamp(48px, 6vw, 96px)","lineHeight":0.95,"letterSpacing":"-0.03em","textTransform":"uppercase"},"heading-lg":{"fontFamily":"'Inter', sans-serif","fontWeight":800,"fontSize":"clamp(32px, 4vw, 64px)","lineHeight":1,"letterSpacing":"-0.02em","textTransform":"uppercase"},"heading-md":{"fontFamily":"'Inter', sans-serif","fontWeight":700,"fontSize":"clamp(24px, 2.5vw, 40px)","lineHeight":1.1,"letterSpacing":"-0.01em"},"close-title":{"fontFamily":"'Inter', sans-serif","fontWeight":900,"fontSize":"clamp(40px, 5vw, 80px)","lineHeight":0.95,"letterSpacing":"-0.03em","textTransform":"uppercase"},"quote-text":{"fontFamily":"'Inter', sans-serif","fontWeight":900,"fontSize":"clamp(28px, 3.5vw, 52px)","lineHeight":1.15,"letterSpacing":"-0.02em","textTransform":"uppercase"},"stat-number":{"fontFamily":"'Inter', sans-serif","fontWeight":900,"fontSize":"clamp(36px, 4vw, 64px)","lineHeight":1},"card-title":{"fontFamily":"'Inter', sans-serif","fontWeight":700,"fontSize":"22px","lineHeight":1.2,"textTransform":"uppercase"},"step-num":{"fontFamily":"'Inter', sans-serif","fontWeight":900,"fontSize":"48px","lineHeight":1},"body":{"fontFamily":"'Inter', sans-serif","fontWeight":500,"fontSize":"clamp(16px, 1.2vw, 20px)","lineHeight":1.6},"body-card":{"fontFamily":"'Inter', sans-serif","fontWeight":500,"fontSize":"15px","lineHeight":1.6},"list-body":{"fontFamily":"'Inter', sans-serif","fontWeight":500,"fontSize":"16px","lineHeight":1.5},"label":{"fontFamily":"'Space Grotesk', monospace","fontWeight":600,"fontSize":"13px","lineHeight":1,"letterSpacing":"0.08em","textTransform":"uppercase"},"mono-tag":{"fontFamily":"'Space Grotesk', monospace","fontWeight":600,"fontSize":"14px","lineHeight":1,"letterSpacing":"0.05em","textTransform":"uppercase"},"mono-meta":{"fontFamily":"'Space Grotesk', monospace","fontWeight":500,"fontSize":"15px","letterSpacing":"0.02em"},"subtitle-mono":{"fontFamily":"'Space Grotesk', monospace","fontWeight":500,"fontSize":"18px","lineHeight":1.5},"counter":{"fontFamily":"'Space Grotesk', monospace","fontWeight":700,"fontSize":"14px","lineHeight":1,"letterSpacing":"0.1em","textTransform":"uppercase"},"legend-item":{"fontFamily":"'Space Grotesk', monospace","fontWeight":600,"fontSize":"13px"}},"spacing":{"slide-pad":"60px","card-pad-lg":"60px","card-pad-md":"36px","card-pad-sm":"28px","card-pad-xs":"22px","gap-lg":"48px","gap-md":"32px","gap-sm":"24px","gap-xs":"16px","pad-bottom-clearance":"110px"},"canvas":{"width":"100vw","height":"100vh","default-background":"{colors.offwhite}"},"components":{"card-elevated":{"border":"4px solid {colors.black}","background":"{colors.white}","boxShadow":"{shadows.default}","description":"Primary elevated card. 4px ink border + 8px ink offset shadow. Background is white by default; on darker surfaces background may shift to offwhite or to a colored fill."},"card-flat":{"border":"4px solid {colors.black}","background":"{colors.white}","description":"Bordered card without elevation shadow. Used for secondary content cells inside multi-card grids where the shadow would compound."},"card-small":{"border":"3px solid {colors.black}","background":"{colors.white}","boxShadow":"{shadows.small}","description":"Compact card with thinner border + smaller offset shadow. Used for intro-cards, stat-cards, team-cards, and timeline-steps."},"label-pill":{"border":"3px solid {colors.black}","padding":"6px 16px","fontFamily":"'Space Grotesk', monospace","fontSize":"13px","fontWeight":600,"letterSpacing":"0.08em","textTransform":"uppercase","background":"{colors.white}","boxShadow":"{shadows.small}","description":"Universal section eyebrow. White base by default; pink, blue, green, yellow, cream variants swap background. Always sits on a 3px black border with a 4px hard offset shadow."},"button-primary":{"border":"3px solid {colors.black}","background":"{colors.yellow}","color":"{colors.black}","padding":"14px 32px","fontFamily":"'Inter', sans-serif","fontWeight":700,"fontSize":"16px","boxShadow":"{shadows.small}","description":"Primary CTA. Yellow fill with black text, 3px black border, 4px offset shadow. Hover lifts the button -2/-2 and grows shadow to 6px."},"corner-bracket":{"width":"24px","height":"24px","border":"3px solid {colors.black}","description":"Two L-shaped brackets at opposite corners of a card or frame (tl + br + tr + bl pattern available). Sits inside the card edge as a decorative frame-within-frame."},"icon-square":{"width":"64px","height":"64px","border":"3px solid {colors.black}","description":"Solid pastel square (pink/blue/green) holding a single uppercase letter glyph at weight 700 / 28px. Used as feature-card icons."},"feature-deco":{"width":"48px","height":"48px","border":"3px solid {colors.black}","background":"{colors.yellow}","position":"absolute top -12px right 24px","description":"Yellow square notch that protrudes from the top edge of a feature card, breaking the card's top border line."},"stat-deco-dot":{"width":"12px","height":"12px","borderRadius":"50%","border":"2px solid {colors.black}","description":"Small black-bordered colored circle pinned to the top-right of a stat card. The only round shape used on cards. Fill cycles through the pastel palette."},"avatar-square":{"width":"72px","height":"72px","border":"3px solid {colors.black}","background":"{colors.pink}","fontFamily":"'Inter', sans-serif","fontWeight":900,"fontSize":"28px","textTransform":"uppercase","description":"Square avatar with two-letter initials, used in team grids. Fill cycles through the pastel palette."},"list-number":{"width":"36px","height":"36px","border":"3px solid {colors.black}","background":"{colors.yellow}","fontFamily":"'Space Grotesk', monospace","fontWeight":700,"fontSize":"14px","description":"Square numerical bullet pinned to the left of each list item. Black border, yellow fill, mono numeral."},"star-burst":{"clipPath":"polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)","border":"3px solid","background":"{colors.pink}","description":"10-point star clipped via CSS clip-path with a 3px border. Decorative attention-grabber pinned to corners of close-frames and feature cards."},"stripe-block":{"background":"repeating-linear-gradient(45deg, {colors.black}, {colors.black} 4px, {colors.green} 4px, {colors.green} 12px)","border":"3px solid {colors.black}","description":"Black-and-color diagonal stripe panel used as decorative attention block on poster-class surfaces."},"bg-dot-grid":{"backgroundImage":"radial-gradient(circle, {colors.black} 1.2px, transparent 1.2px)","backgroundSize":"24px 24px","description":"Faint dot-grid background pattern used as an overlay on light surfaces or as decoration in corners of cards."},"tilt-card":{"transform":"rotate(±2deg) or rotate(±8deg)","description":"Card with intentional tilt. Stat cards alternate -2deg / +2deg; decorative rectangles tilt up to ±12deg. The tilt is the system's playful structural signature."},"nav-btn":{"width":"48px","height":"48px","border":"3px solid {colors.black}","background":"{colors.white}","boxShadow":"{shadows.small}","description":"Square nav arrow button. Hover translates -2/-2 and grows shadow; active translates 2/2 and shrinks shadow."},"slide-counter":{"border":"3px solid {colors.black}","background":"{colors.white}","padding":"10px 18px","boxShadow":"{shadows.small}","description":"Persistent slide counter pill at bottom-left. Space Grotesk uppercase NN / NN format."}}},"isInternal":false,"tokens":11507,"sizeBytes":46460},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/preview.md","title":"Block-frame Skill","category":"anthropic-skill","format":"markdown","content":"# BlockFrame Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/block-frame/design.md`\n- Preview card: `bold-template-pack/templates/block-frame/preview.md`\n\n## Selection Metadata\n\n- Slug: `block-frame`\n- Tagline: Neobrutalist deck with pastel-neon color blocks and chunky black borders.\n- Mood: bold, playful, graphic, fresh\n- Tone: confident, graphic, pop, design-led\n- Formality: medium-low\n- Density: high\n- Scheme: light\n- Best for: Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns. Also a strong unexpected pick for tech, finance, or research when the speaker wants to land as confident and contemporary rather than buttoned-up.\n- Avoid for: Contexts that require quiet institutional restraint or traditional weight (regulated disclosures, formal legal briefs).\n\n## Visual Snapshot\n\nA maximalist neobrutalist presentation system built on 4px solid black borders, 8px hard offset shadows, and a high-key candy palette of five saturated pastels plus cream and off-white. Display type runs Inter at weight 800-900 in tight uppercase; secondary chrome uses Space Grotesk as a quasi-monospace label face. Tilted decorative shapes (rotated stars, rectangles, badges) puncture the borders and break the grid intentionally. Pastels are paired loudly: pink + blue + green + yellow + cream cycle through every region with deliberate juxtaposition. The aesthetic borrows from zine layout, 1990s-revival sticker books, and contemporary toy packaging — bold, joyful, slightly chaotic, never timid.\n\nBlockFrame is a maximalist neobrutalist presentation system built on five structural laws: every region has a 4px black border, every elevated element has an 8px hard offset shadow, every corner is square, every accent color is a saturated pastel, and every layout is allowed to be a little bit crooked. The system's joy comes from the deliberate collision of these laws — bordered cards meet bordered cards, shadows stack against shadows, tilted decorations puncture the grid intentionally.\n\n## Preview Ingredients\n\n- Palette: black #000000; white #FFFFFF; offwhite #FFFDF5; pink #FE90E8; blue #C0F7FE; green #99E885; yellow #F7CB46; cream #FFDC8B\n- Typography: See full design doc after selection.\n- Signature move: 4px solid black borders on primary cards, 3px on secondary chrome — never thinner.\n- Signature move: 8px hard offset shadows on primary cards, 4px on secondary chrome — solid black, zero blur.\n- Signature move: Five-pastel palette (pink, blue, green, yellow, cream) plus black, white, off-white — cycled across surfaces.\n- Signature move: Inter weight 800-900 uppercase with negative tracking is the display voice; Space Grotesk weight 600 uppercase with 0.08em tracking is the label voice.\n- Signature move: Square corners everywhere except a single circular accent dot on stat cards.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1004,"sizeBytes":4519},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/design.md","title":"Blue Professional","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Blue Professional\ndescription: A restrained, consulting-grade presentation system on a warm cream canvas (#fdfae7) with a single saturated cobalt blue (#1e2bfa) as the only accent color. Display type runs Space Grotesk for headlines and numerical callouts; Inter handles body and chrome. Cards are soft-tinted cobalt at 4% opacity with 1.5px translucent borders and 10-14px rounded corners — quiet, never bordered in solid color. The aesthetic borrows from investment-research reports, McKinsey-grade quarterly briefings, and contemporary financial dashboards — measured, data-dense without feeling crowded, and unmistakably professional. The system is built for executive readability at distance, with strong typographic hierarchy and a single accent color carrying every emphasis moment.\n\ncolors:\n  bg: \"#fdfae7\"\n  primary: \"#1e2bfa\"\n  text: \"#111111\"\n  text-muted: \"#6b6b6b\"\n  text-light: \"#9a9a9a\"\n  accent-light: \"rgba(30, 43, 250, 0.08)\"\n  accent-medium: \"rgba(30, 43, 250, 0.15)\"\n  border: \"rgba(30, 43, 250, 0.2)\"\n  card-bg: \"rgba(30, 43, 250, 0.04)\"\n  positive: \"#059669\"\n  negative: \"#dc2626\"\n\ntypography:\n  h1:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(44.8px, 5vw, 67.2px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h2:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(28.8px, 3vw, 41.6px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h3:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(17.6px, 1.8vw, 24px)\"\n    lineHeight: 1.3\n    letterSpacing: -0.02em\n  h4-eyebrow:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(13.6px, 1.2vw, 16px)\"\n    lineHeight: 1.1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    color: \"{colors.primary}\"\n  body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13.6px, 1.1vw, 16.8px)\"\n    lineHeight: 1.6\n    color: \"{colors.text-muted}\"\n  metric-value:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(35.2px, 3.4vw, 48px)\"\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  metric-label:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(15.2px, 1.3vw, 17.6px)\"\n    lineHeight: 1.3\n    color: \"{colors.text}\"\n  metric-desc:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12.5px, 0.95vw, 14.4px)\"\n    lineHeight: 1.5\n    color: \"{colors.text-muted}\"\n  metric-support:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 0.9vw, 13.6px)\"\n    lineHeight: 1.45\n    color: \"{colors.text-muted}\"\n  stat-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(25.6px, 2.4vw, 33.6px)\"\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  stat-name:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(13.6px, 1vw, 15.2px)\"\n    lineHeight: 1.35\n    color: \"{colors.text}\"\n  stat-context:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: 12px\n    lineHeight: 1.4\n    color: \"{colors.text-light}\"\n  agenda-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: 28.8px\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  insight-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    lineHeight: 1.7\n    letterSpacing: 0.05em\n    color: \"{colors.primary}\"\n  split-highlight:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(18.4px, 1.55vw, 24px)\"\n    lineHeight: 1.4\n    color: \"{colors.text}\"\n  blockquote:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(25.6px, 2.8vw, 38.4px)\"\n    lineHeight: 1.35\n    color: \"{colors.text}\"\n  quote-mark:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"128px\"\n    lineHeight: 0.5\n    color: \"{colors.primary}\"\n    opacity: 0.15\n  step-circle-text:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: 20.8px\n    lineHeight: 1\n  step-title:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(15.2px, 1.4vw, 18.4px)\"\n    lineHeight: 1.2\n  bar-label:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(12.8px, 1.1vw, 16px)\"\n    lineHeight: 1.3\n    color: \"{colors.text}\"\n  bar-pct:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 15.2px\n    color: \"{colors.primary}\"\n  tag:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12px\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  counter:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12.8px\n    lineHeight: 1\n    letterSpacing: 0.05em\n    color: \"{colors.text-muted}\"\n  meta:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: 12.8px\n    lineHeight: 1.4\n    letterSpacing: 0.05em\n    color: \"{colors.text-light}\"\n  cite:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12.5px\n    lineHeight: 1.4\n    letterSpacing: 0.04em\n    textTransform: uppercase\n    color: \"{colors.text-muted}\"\n\nspacing:\n  pad-slide-x: \"4vw\"\n  pad-slide-y-top: \"3.5vw\"\n  pad-slide-y-bottom: \"8.5vh\"\n  pad-card-lg: \"1.5rem 1.6rem\"\n  pad-card-md: \"1.4rem 1.5rem\"\n  pad-card-sm: \"1rem 1.2rem\"\n  pad-mini: \"0.9rem 1rem\"\n  gap-grid-lg: \"3.5rem\"\n  gap-grid-md: \"2rem 3rem\"\n  gap-grid-sm: \"1.5rem\"\n  gap-cards: \"1.2rem\"\n  gap-mini: \"1rem\"\n  header-margin: \"2.5vh\"\n  accent-line-width: \"60px\"\n  accent-line-height: \"4px\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.bg}\"\n\nradii:\n  pill: \"100px\"\n  card-lg: \"14px\"\n  card-md: \"12px\"\n  card-sm: \"10px\"\n  bar: \"6px\"\n  circle: \"50%\"\n\ncomponents:\n  card-tinted:\n    background: \"{colors.card-bg}\"\n    border: \"1.5px solid {colors.border}\"\n    borderRadius: 14px\n    padding: \"1.5rem 1.6rem\"\n    description: \"Primary content card. Cobalt tinted at 4% with a 20% cobalt 1.5px border. Soft 14px radius. Never solid-colored, never outlined in full primary.\"\n  card-tinted-sm:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 12px\n    padding: \"1.4rem 1.5rem\"\n    description: \"Compact tinted card with 1px border. Used for stat cells and small data blocks.\"\n  card-tinted-xs:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 10px\n    padding: \"0.9rem 1rem\"\n    description: \"Mini tinted card used for inline mini-stats.\"\n  detail-block:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 10px\n    padding: \"1rem 1.2rem\"\n    description: \"Detail block holding a small h3 + a bulleted ul. Used in detail-analysis grids.\"\n  tag-pill:\n    background: \"{colors.accent-light}\"\n    color: \"{colors.primary}\"\n    padding: \"0.35rem 0.9rem\"\n    borderRadius: 100px\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12px\n    description: \"Pill-shaped tag sitting in the top-right of the slide-header. Fully rounded, soft cobalt tint background, cobalt text.\"\n  cta-button:\n    background: \"{colors.primary}\"\n    color: \"{colors.bg}\"\n    padding: \"0.9rem 2.2rem\"\n    borderRadius: 100px\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 15.2px\n    description: \"Primary CTA. Fully rounded solid cobalt pill with cream text. Hover lifts -2 with a soft cobalt drop shadow.\"\n  nav-btn:\n    width: 44px\n    height: 44px\n    borderRadius: 50%\n    border: \"1.5px solid {colors.border}\"\n    background: \"{colors.bg}\"\n    color: \"{colors.primary}\"\n    description: \"Circular nav-arrow button. Hover inverts: cobalt fill, cream icon. Disabled state at 30% opacity.\"\n  accent-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.primary}\"\n    borderRadius: 2px\n    description: \"Short horizontal cobalt rule, 60×4px, slightly rounded. Used above cover titles and as eyebrow separators.\"\n  accent-dot:\n    width: 8px\n    height: 8px\n    background: \"{colors.primary}\"\n    borderRadius: 50%\n    description: \"Small inline cobalt dot. Decorative inline marker.\"\n  bar-track:\n    height: 28px\n    background: \"{colors.accent-light}\"\n    borderRadius: 6px\n    description: \"Horizontal bar chart track. Soft cobalt tint with 6px rounded corners.\"\n  bar-fill:\n    height: \"100%\"\n    background: \"{colors.primary}\"\n    borderRadius: 6px\n    description: \"Solid cobalt fill inside bar-track. Width carries the data value. Animates from 0 to value on slide entry.\"\n  step-circle:\n    width: 56px\n    height: 56px\n    borderRadius: 50%\n    background: \"{colors.primary}\"\n    color: \"{colors.bg}\"\n    description: \"Circular numbered step marker in cobalt with cream numeral. Sequential steps reduce opacity (1.0 → 0.85 → 0.7 → 0.55) to suggest fade-into-future.\"\n  metric-change-positive:\n    color: \"{colors.positive}\"\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    description: \"Inline positive-change chip with up-arrow glyph and percentage. Green text inline; no border or fill.\"\n  metric-change-negative:\n    color: \"{colors.negative}\"\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    description: \"Inline negative-change chip with up/down-arrow glyph and percentage. Red text inline; no border or fill.\"\n  insight-list-item:\n    paddingLeft: \"2.6rem\"\n    description: \"Numbered insight list with a Space Grotesk 600 counter (decimal-leading-zero) at position absolute left. Numbers in cobalt, body in default text color.\"\n  split-highlight-block:\n    background: \"{colors.accent-light}\"\n    borderLeft: \"4px solid {colors.primary}\"\n    borderRadius: 12px\n    padding: \"1.3rem 1.5rem\"\n    description: \"Highlighted callout block with cobalt left rule and tinted cobalt fill. Used for inline pull-quotes inside split-column layouts.\"\n  progress-bar:\n    position: \"fixed bottom 0 left 0\"\n    height: 3px\n    background: \"{colors.primary}\"\n    description: \"Thin cobalt progress bar at the bottom edge of the viewport, width grows linearly with slide index.\"\n  cover-decoration:\n    background: \"{colors.accent-light}\"\n    clipPath: \"polygon(30% 0, 100% 0, 100% 100%, 0% 100%)\"\n    description: \"Diagonal accent panel filling the right ~35% of cover surfaces. Soft cobalt tint, clip-path angled cut on the left edge.\"\n  cover-dots:\n    layout: \"3x3 grid of 6px cobalt dots at 12px gap, 25% opacity\"\n    description: \"Small dotted decoration used on cover and other open-space surfaces.\"\n  closing-circles:\n    border: \"1px solid {colors.border}\"\n    borderRadius: \"50%\"\n    description: \"Two concentric centered circles (500px outer, 360px inner) as atmospheric decoration on closing-class surfaces. Opacity 0.3-0.4.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBlue Professional is a **consulting-grade presentation system** designed for executive briefings, research deliverables, and quarterly reviews. Its foundational visual premise is **restraint with one strong commitment**: a warm cream canvas (`{colors.bg}` — `#fdfae7`) and a single saturated cobalt (`{colors.primary}` — `#1e2bfa`) that carries every accent, every metric, every CTA, every eyebrow, every chart fill. There is no secondary brand color, no palette of pastels, no warm/cool pairing — just cream, cobalt, and a tight ladder of muted grays for body text.\n\nThe type system uses two open Google Fonts in tightly defined roles. **Space Grotesk** (weights 300-700) is the display, headline, numerical, and chrome face — used for h1-h3 headings, all metric/stat numerals, eyebrow labels (in uppercase with 0.08em tracking), tag pills, CTAs, slide counters, agenda numbers, and step circles. Its slightly geometric character + soft humanist warmth makes it read as both modern (suitable for AI/tech audiences) and trustworthy (suitable for finance audiences). **Inter** (weights 300-600) is the body face — used for paragraph text, list bodies, metric descriptions, and table-style content. The Space Grotesk / Inter pairing is deliberately ordinary; what makes the system feel distinctive is the discipline of their usage, not the novelty of the faces.\n\nThe color philosophy is **one accent, three text grays**. Cobalt does all the emphasis work: headlines stay in `{colors.text}` (a near-black `#111111`), but every metric value, every eyebrow, every CTA, every chart bar, every callout border, every step circle, every progress indicator is cobalt. Body text uses a three-step gray ladder — `{colors.text}` for primary body, `{colors.text-muted}` (`#6b6b6b`) for paragraph body and metric descriptions, `{colors.text-light}` (`#9a9a9a`) for tertiary metadata. Only two non-cobalt accent colors exist: `{colors.positive}` (a subdued green `#059669`) and `{colors.negative}` (a subdued red `#dc2626`), used only on directional change indicators (arrows and percentages on metric cards) — and these are inline text colors, not fills.\n\nDepth is **soft and tinted**, never offset or shadowed. Cards are 4% cobalt tints (`{colors.card-bg}`) with 1.5px translucent cobalt borders (`{colors.border}` — cobalt at 20% opacity) and 10-14px rounded corners. There are no drop shadows except a single subtle cobalt-tinted shadow on the CTA hover state (`0 8px 24px rgba(30, 43, 250, 0.25)`). The lack of harsh shadows is what gives the system its quiet, premium feel — every elevation is implied by border + tint, not by shadow.\n\n**Density philosophy: balanced and data-dense without crowding.** This system is built to carry information — six-stat dashboards, six-detail-block grids, seven-bar rankings, multi-column splits with callouts and mini-stats. The system reads as authoritative when populated with substantive content and timid when sparse. A typical surface holds: a slide-header (h4 eyebrow + tag pill) + a section h2 headline + a grid or list of 3-6 information cells. Cards have moderate internal padding (1.5rem) and moderate inter-card gap (1.2-1.5rem) — neither tight nor airy. The system can support both quote/cover-class surfaces (one bold statement in space) and dashboard-class surfaces (six cards of dense data) without feeling like two different systems.\n\n**Key Characteristics:**\n- Warm cream ground (`{colors.bg}`) on every surface — never pure white, never gray.\n- Single saturated cobalt (`{colors.primary}`) as the only accent — used for every eyebrow, metric, CTA, chart fill, and progress indicator.\n- Space Grotesk (display + chrome) + Inter (body) — never substitute either.\n- Cards are 4% cobalt tints with 1.5px cobalt-at-20% borders and 10-14px rounded corners.\n- Soft pill-shaped chrome (`{components.tag-pill}`, `{components.cta-button}`) with full `100px` border-radius.\n- Headlines use Space Grotesk weight 600-700 with -0.02em tracking on a near-black text color.\n- Body uses Inter weight 400 at 13.6-16.8px with 1.6 line-height in the muted gray.\n- Every slide carries a slide-header (eyebrow + tag pill), a single h2, and a flexible content region — the structure is rhythmic across the deck.\n- Persistent chrome: cobalt progress bar at bottom edge, slide-counter at bottom-left, circular nav-arrows at bottom-right.\n- Decorative atmospheric elements (concentric circles, dot grids, diagonal accent panels) appear only on cover and closing-class surfaces.\n\n## Colors\n\n### Palette\n\n- **Bg** (`{colors.bg}` — `#fdfae7`): The warm cream canvas. The default and universal surface. Slightly green-cream-leaning warmth that distinguishes the system from corporate-template white. Every slide rests on this ground.\n- **Primary** (`{colors.primary}` — `#1e2bfa`): The signature cobalt. A highly saturated electric blue that carries every emphasis moment. Used for h4 eyebrows, metric values, stat numerals, chart bar fills, CTA fills, step circles, progress bars, accent lines, agenda numbers, and the cite border on highlight blocks. No other accent color exists.\n- **Text** (`{colors.text}` — `#111111`): The primary text color. Near-black, slightly warmer than `#000000`. Used for h1-h3 headlines, primary content text, metric labels, and any text that should carry full weight.\n- **Text-muted** (`{colors.text-muted}` — `#6b6b6b`): Secondary text — body paragraphs, metric descriptions, captions. Reads as comfortably softer than the primary text without disappearing.\n- **Text-light** (`{colors.text-light}` — `#9a9a9a`): Tertiary text — slide meta info, hairline dividers in text, stat context lines. The lightest readable gray; below this, text becomes ambient noise.\n- **Accent-light** (`{colors.accent-light}` — `rgba(30, 43, 250, 0.08)`): The default cobalt tint for tag pills, bar tracks, highlight callouts, and cover-decoration panels.\n- **Accent-medium** (`{colors.accent-medium}` — `rgba(30, 43, 250, 0.15)`): A slightly darker cobalt tint, available but used sparingly.\n- **Border** (`{colors.border}` — `rgba(30, 43, 250, 0.2)`): Cobalt at 20% opacity. The universal soft border color for cards, nav buttons, decorative circles, and structural rules.\n- **Card-bg** (`{colors.card-bg}` — `rgba(30, 43, 250, 0.04)`): Cobalt at 4% opacity. The universal card fill — softer than accent-light, reading as a barely-tinted surface that lifts slightly off the cream ground.\n- **Positive** (`{colors.positive}` — `#059669`): Subdued green. Used only inline as the text color for positive-change indicators (up-arrow + percentage). Never used as a fill or border.\n- **Negative** (`{colors.negative}` — `#dc2626`): Subdued red. Used only inline as the text color for negative-change indicators. Never used as a fill or border.\n\n### Defaults\n\n- **Default surface background**: `{colors.bg}` — every surface starts on cream.\n- **Default headline color**: `{colors.text}` (`#111111`) — headlines are near-black, never cobalt. Cobalt is reserved for accent moments (eyebrows, metrics, CTAs).\n- **Default body text color**: `{colors.text-muted}` (`#6b6b6b`) — body paragraphs default to muted, not full black.\n- **Default eyebrow / h4 color**: `{colors.primary}` — eyebrows are always cobalt, always uppercase, always with 0.08em tracking.\n- **Default card fill**: `{colors.card-bg}` (cobalt at 4%) — the universal soft tint.\n- **Default card border**: `{colors.border}` (cobalt at 20%) at 1px or 1.5px. Never solid full-cobalt borders.\n- **Default card border-radius**: 10-14px depending on card size (`{radii.card-sm}` for stat cells, `{radii.card-md}` for stat cards and detail blocks, `{radii.card-lg}` for metric cards).\n- **Default accent for any numerical value (metric, stat, agenda number, bar percentage)**: `{colors.primary}`.\n- **Default chart bar color**: `{colors.primary}` solid fill on a `{colors.accent-light}` track.\n- **Default CTA**: `{components.cta-button}` — solid cobalt pill with cream text and 100px border-radius.\n- **Default tag pill**: `{components.tag-pill}` — soft cobalt tint with cobalt text and 100px border-radius, paired with an h4 eyebrow in the slide-header.\n\nThe system has **no secondary accent color**. Don't reach for orange, teal, or purple to differentiate categories — the single-cobalt discipline is the system's identity. Categorical differentiation should be done through positioning, sizing, or labeling, not through additional hues.\n\n## Typography\n\n### Font Family Stack\nThe system runs two faces, each with a single role.\n\n**Space Grotesk** (Google Fonts, weights 300-700) is the display + numerical + chrome face. Used for every h1, h2, h3, h4 heading; every numerical callout (metric values, stat numbers, agenda numbers, bar percentages, step circles); every chrome element (tag pills, CTAs, slide counters, hint text); and every uppercase eyebrow with 0.08em tracking. Its slightly geometric character + softly rounded humanist forms read as both contemporary and trustworthy — suitable for both AI/tech and finance audiences.\n\n**Inter** (Google Fonts, weights 300-600) is the body face. Used for paragraph text, list bodies, metric descriptions, agenda descriptions, detail-block body, and any longer-form content. Set at weight 400 with line-height 1.6 in the muted gray, Inter reads as comfortable, generous, and editorial.\n\nThe face roles are non-overlapping: Space Grotesk handles every numeral and every heading; Inter handles every paragraph and list body. Don't cross the boundary — Inter h1 reads as a different brand; Space Grotesk body reads as a tech startup landing page.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.h1}` | 44.8–67.2px clamp | Space Grotesk | 700 | Cover or closing title |\n| `{typography.h2}` | 28.8–41.6px clamp | Space Grotesk | 600 | Primary section headline on each slide |\n| `{typography.h3}` | 17.6–24px clamp | Space Grotesk | 500 | Agenda item / region title |\n| `{typography.h4-eyebrow}` | 13.6–16px clamp | Space Grotesk | 600 | Uppercase eyebrow in the slide-header (always cobalt) |\n| `{typography.body}` | 13.6–16.8px clamp | Inter | 400 | Standard body paragraph |\n| `{typography.metric-value}` | 35.2–48px clamp | Space Grotesk | 700 | Large metric numeral in a callout card |\n| `{typography.metric-label}` | 15.2–17.6px clamp | Inter | 600 | Metric label line under the numeral |\n| `{typography.metric-desc}` | 12.5–14.4px clamp | Inter | 400 | Metric supporting description paragraph |\n| `{typography.metric-support}` | 12–13.6px clamp | Inter | 400 | Metric supporting bullet list |\n| `{typography.stat-num}` | 25.6–33.6px clamp | Space Grotesk | 700 | Stat-cell numeral (smaller than metric-value) |\n| `{typography.stat-name}` | 13.6–15.2px clamp | Inter | 500 | Stat-cell descriptive name line |\n| `{typography.stat-context}` | 12px | Inter | 400 | Stat-cell tertiary context line below a hairline divider |\n| `{typography.agenda-num}` | 28.8px | Space Grotesk | 700 | Agenda item numeral |\n| `{typography.insight-num}` | 12.5px | Space Grotesk | 600 | Counter-style number prefix on insight list items |\n| `{typography.split-highlight}` | 18.4–24px clamp | Space Grotesk | 500 | Inline pull-quote text inside a split-highlight block |\n| `{typography.blockquote}` | 25.6–38.4px clamp | Space Grotesk | 500 | Quote-class headline body |\n| `{typography.quote-mark}` | 128px | Space Grotesk | 700 | Decorative oversized quote glyph at 15% opacity above a blockquote |\n| `{typography.step-circle-text}` | 20.8px | Space Grotesk | 700 | Numeral inside a circular step marker |\n| `{typography.step-title}` | 15.2–18.4px clamp | Space Grotesk | 600 | Step title beneath a step circle |\n| `{typography.bar-label}` | 12.8–16px clamp | Inter | 500 | Bar chart row label |\n| `{typography.bar-pct}` | 15.2px | Space Grotesk | 600 | Bar chart row percentage value |\n| `{typography.tag}` | 12px | Space Grotesk | 500 | Tag pill text in slide-header |\n| `{typography.counter}` | 12.8px | Space Grotesk | 500 | Persistent slide counter |\n| `{typography.meta}` | 12.8px | Space Grotesk | 400 | Cover meta line (e.g., date / confidential marker) |\n| `{typography.cite}` | 12.5px | Space Grotesk | 500 | Cite/attribution under a pull-quote, uppercase with 0.04em tracking |\n\n### Defaults\n\n- **Default size for a cover title**: `{typography.h1}` (44.8–67.2px). Always Space Grotesk weight 700 with -0.02em tracking.\n- **Default size for the primary section headline on each slide**: `{typography.h2}` (28.8–41.6px). Space Grotesk weight 600. The \"section h2\" is the system's structural workhorse — every content slide has one.\n- **Default size for a region or agenda-item title**: `{typography.h3}` (17.6–24px).\n- **Default size for the eyebrow above the h2**: `{typography.h4-eyebrow}` (13.6–16px) in cobalt, uppercase, 0.08em tracking.\n- **Default size for paragraph body**: `{typography.body}` (13.6–16.8px clamp). Inter weight 400 with line-height 1.6.\n- **Default size for a large metric numeral**: `{typography.metric-value}` (35.2–48px). For dashboard stat cells, step down to `{typography.stat-num}` (25.6–33.6px).\n- **Default size for a quote body**: `{typography.blockquote}` (25.6–38.4px). Always Space Grotesk weight 500.\n- **Default weight for Space Grotesk headings**: 500 (h3) → 600 (h2 and eyebrow) → 700 (h1 and numerical callouts). Don't reach for weight 400 or 800; the weight ladder is fixed.\n- **Default weight for Inter body**: 400. Inter body at 500-600 reads as too assertive; at 300 reads as too thin.\n- **Default tracking for h1-h3 headings**: -0.02em. Without negative tracking, Space Grotesk display reads as untreated.\n- **Default tracking for the h4 eyebrow**: 0.08em uppercase. Without the wide tracking + uppercase combination, the eyebrow doesn't read as an eyebrow.\n\nWhen unsure which heading token to reach for, default to `{typography.h2}` (28.8–41.6px) for the slide's primary text moment. `{typography.h3}` is for region or agenda-item titles; `{typography.h1}` is reserved for cover and closing.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every h4 eyebrow is Space Grotesk weight 600 in `{colors.primary}` cobalt, uppercase, with 0.08em letter-spacing.** No exceptions. An eyebrow without uppercase + tracking + cobalt color is not the system's eyebrow — it's a stray sans element.\n- **Every headline (h1, h2, h3) uses negative letter-spacing of -0.02em.** Default-tracked Space Grotesk display reads as untreated and breaks the editorial discipline.\n- **Every headline uses `{colors.text}` (`#111111`), not cobalt.** Cobalt headlines are forbidden — cobalt is reserved for accent moments (eyebrows, metrics, CTAs, chart bars). Reversing this collapses the visual hierarchy.\n- **Every numerical callout (metric value, stat number, agenda number, bar percentage, step circle) is Space Grotesk weight 600-700 in `{colors.primary}` cobalt.** Numerical values are the system's primary accent moment.\n- **Every body paragraph is Inter weight 400 in `{colors.text-muted}` (`#6b6b6b`) with line-height 1.6.** Body in pure black reads as too heavy; body in text-light reads as too faint.\n- **Every CTA is the `{components.cta-button}` pattern: solid cobalt pill with cream text, 100px border-radius, 0.9rem × 2.2rem padding.** CTAs in any other shape or color don't exist.\n- **Every tag pill is the `{components.tag-pill}` pattern: soft cobalt tint with cobalt text, 100px border-radius, 0.35rem × 0.9rem padding.** Tag pills with solid backgrounds or borders break the system.\n- **Every slide-header places the h4 eyebrow on the left and the tag pill on the right.** This is the structural rhythm of every content slide.\n\n### Typography Principles\n\nThe voice contrast is **near-black display headlines ↔ cobalt eyebrows + numerals ↔ muted gray body**. Italic and underline are not used. The only emphasis mechanisms are: switching weight within the Space Grotesk ladder, switching color from text-muted to text or to cobalt, and uppercase + tracking on labels.\n\nNumerical content is **always Space Grotesk**, even small numerical labels (bar percentages, slide counters, mini-stat values). The mono-flavored character of Space Grotesk at numerical sizes mimics tabular figures without requiring an actual monospace face.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and animated in via opacity + translateX (40px → 0px) on 500ms ease. Only the `.active` slide is `opacity: 1`; the previous slide gets a `.prev` class and translates -40px out of view.\n\nDefault slide padding is asymmetric: `3.5vw` left, top, and right; `8.5vh` bottom. The extra bottom space reserves room for the fixed slide-counter (left) and nav-controls (right) which sit at `bottom: 2.5vh` overlapping the viewport bottom.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide-x}` | 4vw | Slide horizontal padding |\n| `{spacing.pad-slide-y-top}` | 3.5vw | Slide top padding |\n| `{spacing.pad-slide-y-bottom}` | 8.5vh | Slide bottom padding (extra to clear nav chrome) |\n| `{spacing.pad-card-lg}` | 1.5rem 1.6rem | Large card internal padding (metric cards) |\n| `{spacing.pad-card-md}` | 1.4rem 1.5rem | Medium card internal padding (stat cells) |\n| `{spacing.pad-card-sm}` | 1rem 1.2rem | Small card internal padding (detail blocks) |\n| `{spacing.pad-mini}` | 0.9rem 1rem | Mini card internal padding (mini-stat cells) |\n| `{spacing.gap-grid-lg}` | 3.5rem | Large gap between split columns |\n| `{spacing.gap-grid-md}` | 2rem 3rem | Medium gap in two-column grids (row × col) |\n| `{spacing.gap-grid-sm}` | 1.5rem | Standard gap in 3-column metric grids |\n| `{spacing.gap-cards}` | 1.2rem | Gap between dashboard stat cells |\n| `{spacing.gap-mini}` | 1rem | Gap between mini-stats |\n| `{spacing.header-margin}` | 2.5vh | Margin below the slide-header |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Slide counter** at bottom-left — Space Grotesk 12.8px weight 500 in text-muted gray, fixed at `bottom: 2.5vh; left: 3vw`.\n- **Nav controls** at bottom-right — two circular 44px nav-buttons with 1.5px cobalt-at-20% borders, fixed at `bottom: 2.5vh; right: 3vw`. Disabled state at 30% opacity (first slide / last slide).\n- **Progress bar** at bottom edge — 3px solid cobalt strip with width = `(currentSlide + 1) / total * 100%`. Animates on slide change.\n\nA **keyboard hint** (\"Use arrow keys to navigate\") appears at bottom center in text-light gray.\n\n### Slide-Header Structure\nEvery content slide carries a `.slide-header` band at the top: an h4 eyebrow on the left, a tag pill on the right. Below the slide-header sits the section h2, then the content region (a grid, list, chart, or split). Cover, quote, and closing slides skip the slide-header in favor of centered content.\n\n### Content Grids\nThe system uses repeated grid patterns for content layout: 2×3 agenda grid, 3-column metric row, 3-column stats grid (becomes 2 rows on dashboards), 1.05fr/1fr split-body, 4-step timeline row, 2-column detail grid. These are content-density containers; the grid choice depends on content volume, not on a fixed layout vocabulary.\n\n## Depth and Elevation\n\n### Tinted Cards (Primary Depth Mechanism)\nThe system uses **soft cobalt-tinted backgrounds + soft cobalt-borders + rounded corners** to create the impression of elevation without using shadows. A card with `background: {colors.card-bg}` (cobalt at 4%) and `border: 1.5px solid {colors.border}` (cobalt at 20%) sits visually above the cream ground without any actual offset. This treatment is the system's depth language.\n\n### No Drop Shadows on Cards\nThere are no `box-shadow` declarations on cards, stat cells, detail blocks, or any content container. The only shadow in the system is a single soft cobalt-tinted hover state on the CTA button: `0 8px 24px rgba(30, 43, 250, 0.25)`, which appears for 200ms on hover and disappears on mouse-out. This is the only colored, blurred shadow in the system.\n\n### Border-Left Accent (Highlight Block)\nThe `{components.split-highlight-block}` uses a 4px solid cobalt left border to signal \"this is a quoted callout, distinct from surrounding body\". This is the system's structural accent mechanism — it's not a shadow, but it carries the same elevation cue (the colored rule pulls the block forward visually).\n\n### Rounded Corners as Softness\nThe 10-14px border-radius on cards is part of the depth language. Without rounded corners, the cobalt-tinted cards would read as flat panels; the soft radius softens them into \"lifted\" surfaces.\n\n### Atmospheric Decorations\nDecorative elements (cover-decoration diagonal panel, concentric closing-circles, cover-dots grid, quote decoration circles) appear only on cover, quote, and closing-class surfaces. They are atmospheric, not structural — used to soften open-space surfaces without filling them with content.\n\n## Shapes and Treatment\n\n### Border Radius\n- **`{radii.pill}` = 100px** — fully rounded. Used on `{components.tag-pill}`, `{components.cta-button}`, and any pill-shaped chrome.\n- **`{radii.card-lg}` = 14px** — used on large metric cards.\n- **`{radii.card-md}` = 12px** — used on standard stat cells, split-highlight blocks.\n- **`{radii.card-sm}` = 10px** — used on detail blocks and mini-stats.\n- **`{radii.bar}` = 6px** — used on bar tracks and bar fills.\n- **`{radii.circle}` = 50%** — used on step circles, nav-button circles, accent dots, closing decoration circles, cover dots, quote decoration circles.\n\nThe radius ladder is graduated: tighter radii on smaller chrome, larger radii on bigger cards, fully rounded on pills, perfect circles on chrome. The system has **no square (0px) corners** anywhere except the progress bar.\n\n### Border Weights\n- **1px solid `{colors.border}`** — universal soft border. Used on stat cells, mini-stats, detail blocks, agenda items (bottom border only), stat-context dividers (top border only).\n- **1.5px solid `{colors.border}`** — slightly heavier soft border. Used on metric cards, nav-buttons.\n- **2px solid `{colors.border}`** — used on the split column divider (border-left on the right column of split layouts).\n- **4px solid `{colors.primary}`** — used only as the left rule on `{components.split-highlight-block}` to signal a quoted callout.\n\nThe borders are **never opaque cobalt** — they are always at 20% opacity (`{colors.border}`). This is what gives the system its quiet, lifted quality.\n\n### Decorative Element Types\n\n**Tinted card** (`{components.card-tinted}`) — Cobalt-at-4% background with 1.5px cobalt-at-20% border, 14px radius. The primary content card.\n\n**Tag pill** (`{components.tag-pill}`) — Fully rounded cobalt-at-8% pill with cobalt text. Sits in the top-right of the slide-header.\n\n**Eyebrow** (`{typography.h4-eyebrow}`) — Uppercase cobalt label with 0.08em tracking. Sits in the top-left of the slide-header.\n\n**CTA button** (`{components.cta-button}`) — Solid cobalt pill with cream text. The system's only solid-color element. Used once per closing surface.\n\n**Accent line** (`{components.accent-line}`) — A short 60×4 horizontal cobalt rule with 2px radius. Used above cover titles and as eyebrow separators on open-space surfaces.\n\n**Step circle** (`{components.step-circle}`) — A 56×56 solid cobalt circle with cream Space Grotesk numeral inside. Sequential timeline steps reduce opacity (1.0 → 0.85 → 0.7 → 0.55) to suggest fade-into-future.\n\n**Bar track + fill** (`{components.bar-track}` + `{components.bar-fill}`) — 28px-tall track in cobalt-at-8% with a solid cobalt fill whose width carries the data. 6px rounded corners on both.\n\n**Insight list item** (`{components.insight-list-item}`) — A counter-numbered list using CSS counter() to render decimal-leading-zero prefixes (\"01\", \"02\") in cobalt Space Grotesk 600 / 12.5px positioned absolute left.\n\n**Split highlight block** (`{components.split-highlight-block}`) — A cobalt-at-8% tinted block with a 4px cobalt left rule and a cite line below. Used for inline pull-quotes inside split-column layouts.\n\n**Cover decoration** (`{components.cover-decoration}`) — A clipped diagonal cobalt-tinted panel filling the right ~35% of cover surfaces. Reads as a printed accent without enclosing the layout.\n\n**Cover dots** (`{components.cover-dots}`) — A 3×3 grid of 6px cobalt dots at 12px gap, 25% opacity. Decorative atmosphere on open-space surfaces.\n\n**Closing circles** (`{components.closing-circles}`) — Two concentric centered circles (500px outer, 360px inner) with 1px cobalt-at-20% borders, opacity 0.3-0.4. Atmospheric decoration on closing-class surfaces.\n\n**Metric change chip** (`{components.metric-change-positive}` / `{components.metric-change-negative}`) — Inline directional indicator: a small arrow glyph + percentage value in `{colors.positive}` or `{colors.negative}`. No fill, no border — pure inline text color.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.bg}` (cream) as the universal canvas. Every surface starts on warm cream, never pure white.\n- Use `{colors.primary}` cobalt as the only accent color across the entire deck — for eyebrows, metrics, CTAs, chart fills, step circles, and progress indicators.\n- Set headlines (h1, h2, h3) in `{colors.text}` (`#111111`) near-black with -0.02em tracking. Cobalt headlines are forbidden; cobalt is for accent moments only.\n- Set every h4 eyebrow in cobalt Space Grotesk weight 600 with uppercase + 0.08em tracking. The eyebrow is the universal section opener.\n- Use `{components.card-tinted}` (cobalt-at-4% fill + cobalt-at-20% 1.5px border + 14px radius) as the universal content card pattern.\n- Pair every slide-header with an h4 eyebrow on the left and a `{components.tag-pill}` on the right. The rhythm is the system's structural identity.\n- Set body in Inter weight 400 at 13.6-16.8px in `{colors.text-muted}` (`#6b6b6b`) with line-height 1.6. The muted gray body is what makes the system feel premium.\n- Render every numerical callout (metric, stat, bar percentage, agenda number) in Space Grotesk weight 600-700 in cobalt. The cobalt numerical accent is the system's data voice.\n- Use full 100px border-radius on all chrome (tag pills, CTAs, nav-buttons). The pill shape is the system's chrome signature.\n- Use directional change chips (`{components.metric-change-positive}` / `{components.metric-change-negative}`) inline with no fill — green for positive, red for negative, both subdued.\n\n### Don't\n\n- Don't introduce a second accent color. Cobalt is the only accent — orange, teal, purple, or any additional brand color breaks the single-accent discipline.\n- Don't set headlines in cobalt. Headlines are near-black; cobalt is reserved for eyebrows, metrics, CTAs, and chart fills.\n- Don't use drop shadows on cards or content. The system has zero box-shadows except a single soft cobalt CTA hover.\n- Don't use square corners (0px radius) anywhere. The system is built around soft rounded corners — square corners immediately read as a different aesthetic.\n- Don't use opaque cobalt borders on cards. Borders are always cobalt-at-20% (`{colors.border}`). Full-opacity borders break the quiet, lifted feel.\n- Don't substitute fonts. Space Grotesk + Inter is the pairing. Substituting Arial, Helvetica, Roboto, or Open Sans collapses the typographic identity.\n- Don't crowd the canvas with bordered hard-edged elements. The system depends on soft tints and gentle borders; adding heavy outlines makes it feel like a different system.\n- Don't omit the slide-header (h4 eyebrow + tag pill) on a content slide. The header is the editorial rhythm.\n- Don't use uppercase body text. Uppercase is reserved for h4 eyebrows and the cite line under highlight blocks.\n- Don't use directional chips for non-directional emphasis. The green/red change chips are reserved for actual positive/negative comparisons (e.g., \"+11 pts vs. prior quarter\"). They are not general accent colors.\n\n## Responsive Behavior\n\nBlue Professional is designed as a **1920×1080 presentation system** (effective 100vw × 100vh). Sizing uses CSS `clamp()` for type and `vw / vh / rem` for spacing. The system has minimal responsive behavior — it's built for landscape presentation contexts.\n\n### Scaling Behavior\n- h1 scales 44.8px → 67.2px on viewport width.\n- h2 scales 28.8px → 41.6px.\n- Body scales 13.6px → 16.8px.\n- Metric values scale 35.2px → 48px.\n- Card padding (rem-based) scales with the user's font-size setting; default cards stay around 24-26px internal padding.\n- Borders (1px, 1.5px, 2px), border-radii (10-14px), and pill radius (100px) are fixed and do not scale.\n\n### Component Adjustments at Low Viewport Heights\nA single `@media (max-height: 700px)` block tightens spacing on dense slides:\n- Slide padding reduces from 3.5vw / 8.5vh to 2.5vh / 3vw.\n- Agenda grid gap reduces.\n- Metric and detail card padding reduces to 1rem.\n- Bar item padding reduces.\n\nThis ensures the system fits on shorter laptop screens without breaking the structural layout.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `Space`, or `PageDown`.\n- Slides reverse via `ArrowLeft` or `PageUp`.\n- `Home` jumps to first, `End` to last.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are 500ms ease with opacity fade + 40px translateX slide-in/out.\n- Nav-buttons disable at first/last slide (opacity 0.3).\n- Progress bar at the bottom edge animates to the current slide percentage with a 400ms ease.\n\n### Print Behavior\nThe system has no `@media print` rule. The slide transition is screen-only; printing produces only the active slide. For static export, screenshots of each slide preserve all atmospheric elements (cover decoration, dots, concentric circles are all CSS).\n\n### Interactive States\n- Nav-buttons invert on hover (cobalt fill, cream icon).\n- Agenda items get a subtle `{colors.card-bg}` background on hover (200ms transition).\n- CTA button lifts -2px on hover with a soft cobalt drop shadow (the only shadow in the system).\n- Bar fills animate from 0 to data value with a 0.8s ease transition — most visible on slide entry.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| h1 / h2 / h3 / h4-eyebrow / metric numerals / chart percentages | Space Grotesk 500–700 (negative tracking, uppercase on h4) | 思源黑体 Noto Sans SC 700 (0 tracking, no transform) |\n| Body / metric description / list body | Inter 400 | 思源宋体 Noto Serif SC 400 |\n| Mono / counter / tag pill / cite | Space Grotesk 500–600 (often uppercase) | 思源黑体 Noto Sans SC 500 (no transform) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use 思源黑体 Noto Sans SC for every Space Grotesk role (display, eyebrow, numerical, chrome) and 思源宋体 Noto Serif SC for the Inter body role. Both faces ship Latin glyphs that read cleanly alongside Chinese characters. The serif body pairing reinforces the consulting-grade editorial register that this template is built for — investor reports and McKinsey-style briefings often pair sans display with serif body in Chinese.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.2–1.3 (up from 1.1). CJK characters are visually full and crowd vertically more than Latin.\n- **Letter-spacing**: set to 0 on every CJK run. The template's −0.02em negative tracking on h1–h3 overlaps CJK strokes; the +0.08em positive tracking on h4 eyebrows reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. The h4-eyebrow and cite tokens use `text-transform: uppercase` in the Latin original; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 Q3 业绩复盘` not `2024Q3业绩复盘`.\n- **One font per sentence**: 思源黑体 / 思源宋体 cover both CJK and Latin glyphs — let one face handle each sentence. Don't let the browser fall back to Space Grotesk or Inter for ASCII characters mid-sentence.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on **restraint with one strong commitment** — cream ground, cobalt accent, soft tinted cards, no shadows. None of that depends on Latin typography; it transfers cleanly to Chinese. The h4-eyebrow loses its \"uppercase + 0.08em tracked + cobalt\" character in CJK because both uppercase and wide tracking drop. Compensate by **always pairing the eyebrow with the cobalt accent-line component above the headline** — the 60×4 cobalt rule does the chrome-recognition work that the tracked-uppercase did in Latin. Keep the eyebrow's cobalt color and weight-600 contrast against the muted-gray body.\n\nThe cobalt color discipline (`#1e2bfa` as the only accent, full-opacity on numerals and CTAs, 20% opacity on borders, 4% opacity on card fills) is the system's actual identity and transfers entirely to a CJK build. Numerical callouts remain Latin Arabic digits in Chinese consulting decks by convention (业绩 $24.3M, 同比 +18%), so the cobalt Space Grotesk → 思源黑体 swap mostly affects labels and headlines, not the headline-grabbing numerical figures. Keep numerals in 思源黑体 weight 700 for the digit rendering.\n\n### Known CJK Gap\n\n- **No CDN Chinese face matches Space Grotesk's \"trustworthy consulting\" register exactly.** 思源黑体 reads as more institutional and slightly less contemporary than Space Grotesk. The template will feel slightly more \"official report\" and slightly less \"AI startup\" than its Latin original. This is generally desirable for executive-briefing contexts in Chinese.\n- **The h4-eyebrow signal weakens.** The \"uppercase Space Grotesk 600 in cobalt with 0.08em tracking\" combination is the system's most recognizable small chrome and loses both the uppercase and tracking signals in CJK. Adding the `{components.accent-line}` above or below the eyebrow is the recommended compensation; without it, eyebrows can blend into body weight contrast.\n- **Body in 思源宋体 changes the register.** Inter body reads as neutral-modern; 思源宋体 reads as editorial-serious. The system's \"premium consulting\" feel becomes slightly more \"policy paper\" — appropriate for state-owned enterprise or government audiences, slightly heavy for startup-pitch audiences. For startup contexts, swap body to 思源黑体 Noto Sans SC 400 instead.\n\n## Iteration Guide\n\n1. Any new slide starts on `{colors.bg}` cream ground. Don't switch the background per slide; the constant ground is the system's identity.\n2. Any new content slide carries a slide-header at the top: h4 eyebrow (cobalt, uppercase, 0.08em) on the left + tag-pill on the right.\n3. Any new headline uses Space Grotesk weight 600-700 in `{colors.text}` near-black with -0.02em tracking. Reach for h2 (28.8-41.6px) for primary moments.\n4. Any new card uses the tinted pattern: `{colors.card-bg}` (cobalt at 4%) + 1-1.5px `{colors.border}` (cobalt at 20%) + 10-14px radius. Never use solid color fills or opaque borders.\n5. Any new numerical callout (metric value, stat number, agenda number, bar percentage, step circle) is Space Grotesk weight 600-700 in `{colors.primary}` cobalt. Numbers are the accent moment.\n6. Any new accent line, divider, or directional rule uses cobalt — solid for the primary rule, soft-cobalt (20% opacity) for borders.\n7. Any new CTA uses the `{components.cta-button}` pattern: solid cobalt pill with cream text, 100px radius, no other CTA shape exists.\n8. Any new chart bar uses `{components.bar-fill}` (solid cobalt) on `{components.bar-track}` (cobalt at 8%) with 6px radius.\n9. Any new step or sequential indicator uses the `{components.step-circle}` with diminishing opacity for future steps (1.0 → 0.85 → 0.7 → 0.55).\n10. If a surface feels too sparse, add information (more stats, more detail blocks) — don't add a second accent color or a heavier border to fill space. The system reads as elegant when populated with substance, not noise.\n\n## Known Gaps\n\n- **Space Grotesk and Inter are loaded from Google Fonts** via a preconnect + `<link>`. There are no system fallbacks beyond `sans-serif` — in environments where Google Fonts fail, the system collapses to system defaults and loses its character.\n- **The directional change colors (`{colors.positive}` and `{colors.negative}`) are inline-only.** There is no token-level support for status fills, success/error badges, or alerts beyond these two inline text colors.\n- **The single-accent discipline limits categorical color encoding.** Multi-series charts must distinguish through positioning or labeling — there is no design-system answer for \"show 4 categorical series in different colors\". This is intentional but limits chart expressiveness.\n- **The agenda-item hover state changes background to `{colors.card-bg}`** — interactive on hover. This may not work as expected in static screen-share contexts.\n- **Bar fills animate from 0 to value on entry** but only the active slide's bars are visible. Re-entering a slide replays the animation; the system does not preserve animation state.\n- **The progress bar reads as decorative on slide 1** (it's at ~10% on a 10-slide deck) and\n\n<!-- [TRUNCATED AT 50KB] -->","frontmatter":{"version":"alpha","name":"Blue Professional","description":"A restrained, consulting-grade presentation system on a warm cream canvas (#fdfae7) with a single saturated cobalt blue (#1e2bfa) as the only accent color. Display type runs Space Grotesk for headlines and numerical callouts; Inter handles body and chrome. Cards are soft-tinted cobalt at 4% opacity with 1.5px translucent borders and 10-14px rounded corners — quiet, never bordered in solid color. The aesthetic borrows from investment-research reports, McKinsey-grade quarterly briefings, and contemporary financial dashboards — measured, data-dense without feeling crowded, and unmistakably professional. The system is built for executive readability at distance, with strong typographic hierarchy and a single accent color carrying every emphasis moment.","colors":{"bg":"#fdfae7","primary":"#1e2bfa","text":"#111111","text-muted":"#6b6b6b","text-light":"#9a9a9a","accent-light":"rgba(30, 43, 250, 0.08)","accent-medium":"rgba(30, 43, 250, 0.15)","border":"rgba(30, 43, 250, 0.2)","card-bg":"rgba(30, 43, 250, 0.04)","positive":"#059669","negative":"#dc2626"},"typography":{"h1":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":700,"fontSize":"clamp(44.8px, 5vw, 67.2px)","lineHeight":1.1,"letterSpacing":"-0.02em"},"h2":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"clamp(28.8px, 3vw, 41.6px)","lineHeight":1.1,"letterSpacing":"-0.02em"},"h3":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":500,"fontSize":"clamp(17.6px, 1.8vw, 24px)","lineHeight":1.3,"letterSpacing":"-0.02em"},"h4-eyebrow":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"clamp(13.6px, 1.2vw, 16px)","lineHeight":1.1,"letterSpacing":"0.08em","textTransform":"uppercase","color":"{colors.primary}"},"body":{"fontFamily":"'Inter', sans-serif","fontWeight":400,"fontSize":"clamp(13.6px, 1.1vw, 16.8px)","lineHeight":1.6,"color":"{colors.text-muted}"},"metric-value":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":700,"fontSize":"clamp(35.2px, 3.4vw, 48px)","lineHeight":1,"color":"{colors.primary}"},"metric-label":{"fontFamily":"'Inter', sans-serif","fontWeight":600,"fontSize":"clamp(15.2px, 1.3vw, 17.6px)","lineHeight":1.3,"color":"{colors.text}"},"metric-desc":{"fontFamily":"'Inter', sans-serif","fontWeight":400,"fontSize":"clamp(12.5px, 0.95vw, 14.4px)","lineHeight":1.5,"color":"{colors.text-muted}"},"metric-support":{"fontFamily":"'Inter', sans-serif","fontWeight":400,"fontSize":"clamp(12px, 0.9vw, 13.6px)","lineHeight":1.45,"color":"{colors.text-muted}"},"stat-num":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":700,"fontSize":"clamp(25.6px, 2.4vw, 33.6px)","lineHeight":1,"color":"{colors.primary}"},"stat-name":{"fontFamily":"'Inter', sans-serif","fontWeight":500,"fontSize":"clamp(13.6px, 1vw, 15.2px)","lineHeight":1.35,"color":"{colors.text}"},"stat-context":{"fontFamily":"'Inter', sans-serif","fontWeight":400,"fontSize":"12px","lineHeight":1.4,"color":"{colors.text-light}"},"agenda-num":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":700,"fontSize":"28.8px","lineHeight":1,"color":"{colors.primary}"},"insight-num":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"12.5px","lineHeight":1.7,"letterSpacing":"0.05em","color":"{colors.primary}"},"split-highlight":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":500,"fontSize":"clamp(18.4px, 1.55vw, 24px)","lineHeight":1.4,"color":"{colors.text}"},"blockquote":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":500,"fontSize":"clamp(25.6px, 2.8vw, 38.4px)","lineHeight":1.35,"color":"{colors.text}"},"quote-mark":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":700,"fontSize":"128px","lineHeight":0.5,"color":"{colors.primary}","opacity":0.15},"step-circle-text":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":700,"fontSize":"20.8px","lineHeight":1},"step-title":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"clamp(15.2px, 1.4vw, 18.4px)","lineHeight":1.2},"bar-label":{"fontFamily":"'Inter', sans-serif","fontWeight":500,"fontSize":"clamp(12.8px, 1.1vw, 16px)","lineHeight":1.3,"color":"{colors.text}"},"bar-pct":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"15.2px","color":"{colors.primary}"},"tag":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":500,"fontSize":"12px","lineHeight":1,"color":"{colors.primary}"},"counter":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":500,"fontSize":"12.8px","lineHeight":1,"letterSpacing":"0.05em","color":"{colors.text-muted}"},"meta":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":400,"fontSize":"12.8px","lineHeight":1.4,"letterSpacing":"0.05em","color":"{colors.text-light}"},"cite":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":500,"fontSize":"12.5px","lineHeight":1.4,"letterSpacing":"0.04em","textTransform":"uppercase","color":"{colors.text-muted}"}},"spacing":{"pad-slide-x":"4vw","pad-slide-y-top":"3.5vw","pad-slide-y-bottom":"8.5vh","pad-card-lg":"1.5rem 1.6rem","pad-card-md":"1.4rem 1.5rem","pad-card-sm":"1rem 1.2rem","pad-mini":"0.9rem 1rem","gap-grid-lg":"3.5rem","gap-grid-md":"2rem 3rem","gap-grid-sm":"1.5rem","gap-cards":"1.2rem","gap-mini":"1rem","header-margin":"2.5vh","accent-line-width":"60px","accent-line-height":"4px"},"canvas":{"width":"100vw","height":"100vh","background":"{colors.bg}"},"radii":{"pill":"100px","card-lg":"14px","card-md":"12px","card-sm":"10px","bar":"6px","circle":"50%"},"components":{"card-tinted":{"background":"{colors.card-bg}","border":"1.5px solid {colors.border}","borderRadius":"14px","padding":"1.5rem 1.6rem","description":"Primary content card. Cobalt tinted at 4% with a 20% cobalt 1.5px border. Soft 14px radius. Never solid-colored, never outlined in full primary."},"card-tinted-sm":{"background":"{colors.card-bg}","border":"1px solid {colors.border}","borderRadius":"12px","padding":"1.4rem 1.5rem","description":"Compact tinted card with 1px border. Used for stat cells and small data blocks."},"card-tinted-xs":{"background":"{colors.card-bg}","border":"1px solid {colors.border}","borderRadius":"10px","padding":"0.9rem 1rem","description":"Mini tinted card used for inline mini-stats."},"detail-block":{"background":"{colors.card-bg}","border":"1px solid {colors.border}","borderRadius":"10px","padding":"1rem 1.2rem","description":"Detail block holding a small h3 + a bulleted ul. Used in detail-analysis grids."},"tag-pill":{"background":"{colors.accent-light}","color":"{colors.primary}","padding":"0.35rem 0.9rem","borderRadius":"100px","fontFamily":"'Space Grotesk', sans-serif","fontWeight":500,"fontSize":"12px","description":"Pill-shaped tag sitting in the top-right of the slide-header. Fully rounded, soft cobalt tint background, cobalt text."},"cta-button":{"background":"{colors.primary}","color":"{colors.bg}","padding":"0.9rem 2.2rem","borderRadius":"100px","fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"15.2px","description":"Primary CTA. Fully rounded solid cobalt pill with cream text. Hover lifts -2 with a soft cobalt drop shadow."},"nav-btn":{"width":"44px","height":"44px","borderRadius":"50%","border":"1.5px solid {colors.border}","background":"{colors.bg}","color":"{colors.primary}","description":"Circular nav-arrow button. Hover inverts: cobalt fill, cream icon. Disabled state at 30% opacity."},"accent-line":{"width":"60px","height":"4px","background":"{colors.primary}","borderRadius":"2px","description":"Short horizontal cobalt rule, 60×4px, slightly rounded. Used above cover titles and as eyebrow separators."},"accent-dot":{"width":"8px","height":"8px","background":"{colors.primary}","borderRadius":"50%","description":"Small inline cobalt dot. Decorative inline marker."},"bar-track":{"height":"28px","background":"{colors.accent-light}","borderRadius":"6px","description":"Horizontal bar chart track. Soft cobalt tint with 6px rounded corners."},"bar-fill":{"height":"100%","background":"{colors.primary}","borderRadius":"6px","description":"Solid cobalt fill inside bar-track. Width carries the data value. Animates from 0 to value on slide entry."},"step-circle":{"width":"56px","height":"56px","borderRadius":"50%","background":"{colors.primary}","color":"{colors.bg}","description":"Circular numbered step marker in cobalt with cream numeral. Sequential steps reduce opacity (1.0 → 0.85 → 0.7 → 0.55) to suggest fade-into-future."},"metric-change-positive":{"color":"{colors.positive}","fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"12.5px","description":"Inline positive-change chip with up-arrow glyph and percentage. Green text inline; no border or fill."},"metric-change-negative":{"color":"{colors.negative}","fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"12.5px","description":"Inline negative-change chip with up/down-arrow glyph and percentage. Red text inline; no border or fill."},"insight-list-item":{"paddingLeft":"2.6rem","description":"Numbered insight list with a Space Grotesk 600 counter (decimal-leading-zero) at position absolute left. Numbers in cobalt, body in default text color."},"split-highlight-block":{"background":"{colors.accent-light}","borderLeft":"4px solid {colors.primary}","borderRadius":"12px","padding":"1.3rem 1.5rem","description":"Highlighted callout block with cobalt left rule and tinted cobalt fill. Used for inline pull-quotes inside split-column layouts."},"progress-bar":{"position":"fixed bottom 0 left 0","height":"3px","background":"{colors.primary}","description":"Thin cobalt progress bar at the bottom edge of the viewport, width grows linearly with slide index."},"cover-decoration":{"background":"{colors.accent-light}","clipPath":"polygon(30% 0, 100% 0, 100% 100%, 0% 100%)","description":"Diagonal accent panel filling the right ~35% of cover surfaces. Soft cobalt tint, clip-path angled cut on the left edge."},"cover-dots":{"layout":"3x3 grid of 6px cobalt dots at 12px gap, 25% opacity","description":"Small dotted decoration used on cover and other open-space surfaces."},"closing-circles":{"border":"1px solid {colors.border}","borderRadius":"50%","description":"Two concentric centered circles (500px outer, 360px inner) as atmospheric decoration on closing-class surfaces. Opacity 0.3-0.4."}}},"isInternal":false,"tokens":13200,"sizeBytes":50493},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/preview.md","title":"Blue-professional Skill","category":"anthropic-skill","format":"markdown","content":"# Blue Professional Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/blue-professional/design.md`\n- Preview card: `bold-template-pack/templates/blue-professional/preview.md`\n\n## Selection Metadata\n\n- Slug: `blue-professional`\n- Tagline: Cream paper background with electric cobalt blue accents; clean modern professional.\n- Mood: professional, modern, calm, trustworthy\n- Tone: clean, considered, polished, neutral\n- Formality: medium-high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports. Also a clean, tasteful choice whenever you want to read as professional without going stiff — research synthesis, internal reviews, brand work for service businesses.\n- Avoid for: Contexts where the deck should feel hot, playful, or intentionally informal — the cool electric-blue restraint will read as overly polished.\n\n## Visual Snapshot\n\nA restrained, consulting-grade presentation system on a warm cream canvas (#fdfae7) with a single saturated cobalt blue (#1e2bfa) as the only accent color. Display type runs Space Grotesk for headlines and numerical callouts; Inter handles body and chrome. Cards are soft-tinted cobalt at 4% opacity with 1.5px translucent borders and 10-14px rounded corners — quiet, never bordered in solid color. The aesthetic borrows from investment-research reports, McKinsey-grade quarterly briefings, and contemporary financial dashboards — measured, data-dense without feeling crowded, and unmistakably professional. The system is built for executive readability at distance, with strong typographic hierarchy and a single accent color carrying every emphasis moment.\n\nBlue Professional is a consulting-grade presentation system designed for executive briefings, research deliverables, and quarterly reviews. Its foundational visual premise is restraint with one strong commitment: a warm cream canvas ({colors.bg} — #fdfae7) and a single saturated cobalt ({colors.primary} — #1e2bfa) that carries every accent, every metric, every CTA, every eyebrow, every chart fill. There is no secondary brand color, no palette of pastels, no warm/cool pairing — just cream, cobalt, and a tight ladder of muted grays for body text.\n\n## Preview Ingredients\n\n- Palette: bg #FDFAE7; primary #1E2BFA; text #111111; text-muted #6B6B6B; text-light #9A9A9A; positive #059669; negative #DC2626\n- Typography: See full design doc after selection.\n- Signature move: Warm cream ground ({colors.bg}) on every surface — never pure white, never gray.\n- Signature move: Single saturated cobalt ({colors.primary}) as the only accent — used for every eyebrow, metric, CTA, chart fill, and progress indicator.\n- Signature move: Space Grotesk (display + chrome) + Inter (body) — never substitute either.\n- Signature move: Cards are 4% cobalt tints with 1.5px cobalt-at-20% borders and 10-14px rounded corners.\n- Signature move: Soft pill-shaped chrome ({components.tag-pill}, {components.cta-button}) with full 100px border-radius.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1041,"sizeBytes":4724},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/design.md","title":"Bold Poster","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Bold Poster\ndescription: \"A populist editorial poster system that mashes vintage Italian sports-magazine display lettering with classical serif body and tight monospace metadata. The display face is Shrikhand — a heavy slab/script hybrid with playful italic personality — rendered at poster scale (often 200-320px) and routinely tilted off-axis. Body runs Libre Baskerville for a literary editorial register; Space Grotesk handles tiny uppercase labels and chrome. The palette is uncompromising: white canvas, deep brown-black ink (#1C1410), single saturated tomato red (#D8000F), and a warm off-white (#F5F2EF) for alternating panels. Borders are bold 1.5-3px ink rules; the only shadow is a single stacked offset behind red display text. The aesthetic is loud, confident, and unmistakably print-poster — closer to a 1970s European brand annual report or a wine merchant's catalogue than a contemporary slide deck.\"\n\ncolors:\n  bg: \"#FFFFFF\"\n  dark: \"#1C1410\"\n  red: \"#D8000F\"\n  light: \"#F5F2EF\"\n\ntypography:\n  hero-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(72px, 16vw, 220px)\"\n    lineHeight: 0.88\n    letterSpacing: 1px\n    color: \"{colors.dark}\"\n  hero-title-red:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(84px, 18vw, 260px)\"\n    lineHeight: 0.85\n    color: \"{colors.red}\"\n    transform: \"rotate(-4deg)\"\n  hero-title-bottom:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(64px, 14vw, 200px)\"\n    lineHeight: 0.9\n    color: \"{colors.dark}\"\n    transform: \"rotate(2deg)\"\n  close-big:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(80px, 18vw, 260px)\"\n    lineHeight: 0.88\n    color: \"{colors.red}\"\n    transform: \"rotate(-5deg)\"\n  stat-big:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, 26vw, 320px)\"\n    lineHeight: 0.82\n    color: \"{colors.red}\"\n    transform: \"rotate(-6deg)\"\n  red-quote:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, 7vw, 90px)\"\n    lineHeight: 1.15\n    color: \"{colors.bg}\"\n    textShadow: \"2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)\"\n  section-header:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, 5vw, 64px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  section-header-lg:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(36px, 6vw, 72px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  cell-number-lg:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 3.5vw, 52px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  cell-number-md:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 3.5vw, 48px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  card-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(22px, 3vw, 36px)\"\n    lineHeight: 1.1\n    color: \"{colors.dark}\"\n  card-title-sm:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(20px, 2.5vw, 32px)\"\n    lineHeight: 1.1\n    color: \"{colors.dark}\"\n  pillar-num:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(36px, 5vw, 64px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  pillar-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2.2vw, 28px)\"\n    lineHeight: 1.15\n    color: \"{colors.dark}\"\n  stat-item-num:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 4vw, 56px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  roadmap-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2.5vw, 32px)\"\n    lineHeight: 1.1\n  inline-stat:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2vw, 28px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  body:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.2vw, 16px)\"\n    lineHeight: 1.75\n    color: \"{colors.dark}\"\n  body-card:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 1.1vw, 14px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  body-cell:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 13px)\"\n    lineHeight: 1.55\n    color: \"{colors.dark}\"\n  body-small:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 13px)\"\n    lineHeight: 1.5\n    color: \"{colors.dark}\"\n  hero-meta:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 14px)\"\n    lineHeight: 1.5\n    color: \"{colors.dark}\"\n  tag-body:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.2vw, 16px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  red-cite:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.3vw, 16px)\"\n    lineHeight: 1.5\n    color: \"{colors.bg}\"\n  close-sub:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(14px, 1.5vw, 18px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 10px\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  label-red:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 10px\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  rm-label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 9px\n    letterSpacing: 3px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  tag-label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    letterSpacing: 3px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  bullet-body:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    lineHeight: 1.45\n    color: \"{colors.dark}\"\n  counter:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 11px\n    lineHeight: 1\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  link:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  fc-micro:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: 10px\n    lineHeight: 1.4\n    color: \"{colors.dark}\"\n\nspacing:\n  pad-slide: \"48px 56px\"\n  pad-cell: \"22px 20px\"\n  pad-cell-sm: \"20px 24px\"\n  pad-pillar: \"32px 24px\"\n  pad-card: \"24px\"\n  pad-roadmap: \"40px 48px\"\n  gap-grid-md: \"24px 32px\"\n  gap-grid-roadmap: \"28px 36px\"\n  gap-grid-stats: \"48px\"\n  gap-stat-row: \"20px\"\n  pad-bottom-clearance: \"40px\"\n  max-width-content: 1100px\n  max-width-services: 1000px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.bg}\"\n\ncomponents:\n  progress-bar:\n    position: \"fixed, bottom 0 left 0\"\n    height: 5px\n    background: \"{colors.red}\"\n    description: \"Persistent thick red progress strip at the bottom of the viewport. Width grows linearly with slide index. The system's most prominent piece of chrome.\"\n  counter:\n    position: \"fixed, bottom 18px right 24px\"\n    color: \"{colors.dark}\"\n    opacity: 0.5\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontSize: 11px\n    letterSpacing: 2px\n    description: \"Persistent slide counter NN / NN at 50% opacity in Space Grotesk uppercase.\"\n  hint-pill:\n    position: \"fixed, bottom 18px center\"\n    background: \"{colors.light}\"\n    padding: \"6px 14px\"\n    borderRadius: 4px\n    fontSize: 10px\n    opacity: 0\n    description: \"Bottom-center hint pill that fades to 50% opacity on body hover. Subtle wayfinding only.\"\n  section-bordered-grid:\n    border: \"3px solid {colors.dark}\"\n    description: \"Heavy 3px ink border enclosing a grid of cells. Each child cell carries a 1.5px ink inner border, producing a hairline-on-heavy double-border tabular grid. Used for financial-figure and summary-highlight grids.\"\n  cell-bordered:\n    border: \"1.5px solid {colors.dark}\"\n    padding: \"22px 20px\"\n    description: \"Tabular cell with 1.5px ink border. Lives inside a 3px-bordered parent grid; the two border weights touch to produce the system's signature grid-with-double-edge.\"\n  red-leftbar-card:\n    borderLeft: \"4px solid {colors.red}\"\n    paddingLeft: 18px\n    description: \"Service or content card marked by a 4px solid red left rule and 18px left padding. The system's editorial card pattern — no outline, just the red rule signaling the start of a block.\"\n  red-leftbar-card-thin:\n    borderLeft: \"3px solid {colors.red}\"\n    paddingLeft: 16px\n    description: \"Thinner variant of the red-leftbar card used on dark surfaces (roadmap phases). Same pattern, scaled-down rule weight.\"\n  bullet-em-dash:\n    glyph: \"—\"\n    color: \"{colors.red}\"\n    fontWeight: 700\n    paddingLeft: 14px\n    description: \"List bullet using a red em-dash (—) glyph in place of a disc. The dash sits at position absolute left and the body text indents to clear it.\"\n  bullet-bullet:\n    glyph: \"•\"\n    color: \"{colors.red}\"\n    paddingLeft: 12px\n    description: \"List bullet using a red round bullet (•) glyph. Same indent pattern as the em-dash variant.\"\n  pillar-panel:\n    flex: 1\n    padding: \"32px 24px\"\n    borderRight: \"3px solid {colors.dark}\"\n    description: \"Vertical column panel inside a multi-pillar layout. Each pillar separated by a 3px ink vertical rule. Alternating panels swap background from {colors.bg} to {colors.light} for striping.\"\n  pillar-bullet-row:\n    padding: \"5px 0\"\n    borderBottom: \"1px solid rgba(28, 20, 16, 0.08)\"\n    description: \"Bullet row inside a pillar with a hairline-soft bottom border (ink at 8%) separating items. The last item drops the border.\"\n  global-card:\n    border: \"2px solid {colors.dark}\"\n    padding: 24px\n    description: \"Bordered information card with 2px ink outline. Used on the global presence layout. Heavier than the leftbar pattern, more contained.\"\n  stacked-text-shadow:\n    textShadow: \"2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)\"\n    description: \"Three-step decreasing-opacity stacked offset shadow in ink. Applied only to large red display text on red panels. The system's only shadow treatment.\"\n  red-panel:\n    background: \"{colors.red}\"\n    color: \"{colors.bg}\"\n    description: \"Full-bleed saturated red panel surface. Carries white text with the stacked-text-shadow treatment on display.\"\n  dark-panel:\n    background: \"{colors.dark}\"\n    color: \"{colors.bg}\"\n    description: \"Full-bleed deep brown-black panel surface. Carries white text and red accents (left bars, mono labels).\"\n  link-underline:\n    color: \"{colors.dark}\"\n    borderBottom: \"2px solid {colors.red}\"\n    paddingBottom: 4px\n    description: \"Footer link style — Space Grotesk uppercase with a 2px red underline. Hover swaps text color to red.\"\n  hero-title-stack:\n    description: \"A three-line stacked title where each line is a Shrikhand display element at a slightly different size. Two of the three lines carry rotation transforms (-4deg, +2deg) and one is set in red. The composition is the system's signature opener.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBold Poster is a **populist editorial poster system** that lifts its visual vocabulary from vintage Italian sports magazines, mid-century European brand annual reports, and wine-merchant catalogues. The premise is that every slide should feel printed — set in heavy display type, locked to one strong red accent, on a white or off-white sheet, with grids ruled in ink and decoration kept to a strict minimum.\n\nThe type system is three faces working in tight roles. **Shrikhand** (Google Fonts) is the display face — a heavy slab/script hybrid with chunky italic terminals, narrow apertures, and a distinctly Italian-sports-script personality. Used at poster scale (often 100-320px) and almost always with playful rotation (-6° to +2°), Shrikhand carries every hero title, every section header, every stat figure, every card title. **Libre Baskerville** (Google Fonts) is the body face — a classical literary serif with strong stroke contrast that anchors the system in editorial register. Used at 11-16px with 1.5-1.75 line-height in deep ink, Libre Baskerville is what makes the system feel printed rather than digital. **Space Grotesk** (Google Fonts) is the chrome face — used exclusively for tiny uppercase labels (9-12px, 2-3px tracking), bullet body inside cards, slide counters, and footer links. The Space Grotesk treatment is the system's \"metadata\" voice.\n\nThe color philosophy is **uncompromising restraint**: white canvas, deep brown-black ink (`{colors.dark}` — `#1C1410`), single saturated tomato red (`{colors.red}` — `#D8000F`), and a warm off-white (`{colors.light}` — `#F5F2EF`) for alternating panels. There are no secondary brand colors, no gradients (except the inside of the stacked text-shadow), no tints, no semantic state colors. Every numerical callout, every active rule, every CTA, every emphasis moment is red — and red is reserved for these moments only (it is never used as body text, never as fill on a card without text on top, never as a tint).\n\nDepth is **structural, not atmospheric**. The system has no drop shadows except a single stacked text-shadow applied to red display text on red panels (three steps at 2/2, 4/4, 6/6 in decreasing-opacity ink). All other depth comes from heavy borders: 3px ink outlines on tabular grids, 1.5-2px ink borders on cells, 4px red left rules on editorial cards, 1px hairline rules between bullet items. The double-border treatment (3px outer + 1.5px inner) is the system's signature tabular pattern — it produces a printed-newsprint quality that defines the look.\n\n**Density philosophy: high — populist and packed.** This system reads as authoritative when slides are dense and timid when sparse. Roadmap, pillar, and financial slides routinely carry 3-6 distinct cells with body paragraphs, bullet lists, and tabular data — and they read as energetic, not crowded. Conversely, hero, closing, and statement slides intentionally drop to one or two huge display elements with massive negative space — the very-low and very-high density polarities are both deliberate. A typical content slide carries a section header + a grid of 3-6 cells, each holding a red numerical/title + a Libre Baskerville body paragraph + 3-6 Space Grotesk mono bullets. A typical statement slide carries one rotated red Shrikhand element occupying half the canvas with a single tagline below.\n\n**Key Characteristics:**\n- White (`{colors.bg}`) canvas alternating with off-white (`{colors.light}`) panels for striping, plus dark (`{colors.dark}`) and red (`{colors.red}`) full-bleed panel surfaces for statement moments.\n- Single tomato red (`{colors.red}`) as the only accent — used for every numerical figure, every section rule, every label, every left-bar marker.\n- Three-face stack: Shrikhand (display + numerical), Libre Baskerville (body), Space Grotesk (mono labels + bullets + chrome).\n- Display Shrikhand is routinely tilted (-6° to +2°) — the rotation is the system's signature movement.\n- Heavy ink borders: 3px on tabular grid containers, 1.5-2px on cells, 4px red on editorial leftbar cards, 1px hairlines between bullet rows.\n- Stacked text-shadow (three steps at 2/2, 4/4, 6/6 in decreasing ink opacity) on red display elements — the only shadow in the system.\n- Persistent red progress bar (5px thick) at the bottom edge of every slide.\n- Em-dash and bullet glyphs in red as list markers — never default disc bullets.\n- Hero compositions stack three Shrikhand lines at varying sizes with at least one in red and at least one tilted.\n- Footer links use Space Grotesk uppercase with a 2px red underline.\n\n## Colors\n\n### Palette\n\n- **Bg** (`{colors.bg}` — `#FFFFFF`): Pure white canvas. The default ground for most surfaces. Reads as fresh newsprint paper.\n- **Dark** (`{colors.dark}` — `#1C1410`): A deep brown-black with warm bias — not pure black. Used for every line of body text, every border, every Space Grotesk label, every Libre Baskerville paragraph, and as a full-bleed panel ground on roadmap-class surfaces. The warmth distinguishes it from generic editorial black.\n- **Red** (`{colors.red}` — `#D8000F`): Saturated tomato red. The system's single accent. Used for every numerical figure (Shrikhand red numerals are the most common element), every section eyebrow label, every leftbar rule on editorial cards, every list bullet glyph, every footer link underline, the persistent progress bar, and as a full-bleed panel ground on statement-class surfaces. Never used as body text color, never as a tint, never as a card fill without overlaid text.\n- **Light** (`{colors.light}` — `#F5F2EF`): Warm off-white. Used for alternating panel backgrounds inside pillar layouts (every other pillar swaps to off-white for vertical striping) and as the background of the hint-pill chrome. Subtly warmer than the white canvas — creates surface differentiation without disrupting the printed-paper register.\n\n### Defaults\n\n- **Default surface background**: `{colors.bg}` (white). For statement moments, switch to `{colors.red}` (full-bleed red panel). For roadmap-class moments, switch to `{colors.dark}`. For striping inside a pillar layout, alternate `{colors.bg}` and `{colors.light}`.\n- **Default headline / display color on white surfaces**: `{colors.dark}` for primary headlines, `{colors.red}` for numerical figures and stat-class display elements.\n- **Default headline color on red panels**: `{colors.bg}` (white) with the stacked text-shadow treatment.\n- **Default headline color on dark panels**: `{colors.bg}` (white). Numerical accents stay `{colors.red}`.\n- **Default body text color**: `{colors.dark}` on white/light surfaces, `{colors.bg}` (white) on dark/red surfaces with opacity 0.5-0.8 for tertiary content.\n- **Default eyebrow / label color**: `{colors.red}` on white surfaces (red Space Grotesk uppercase at 2-3px tracking), `{colors.dark}` for the smaller cell labels inside grids.\n- **Default leftbar rule color**: `{colors.red}`. The 4px (or 3px on dark surfaces) red left rule is the editorial card signature.\n- **Default border color for cells and grids**: `{colors.dark}`. There are no colored cell borders.\n- **Default bullet glyph color**: `{colors.red}`. Default disc bullets do not exist in this system; every list uses red em-dash or red round-bullet glyphs.\n\nThe system commits **hard** to the four-color palette. Don't introduce a fifth color (green for positive, blue for info, yellow for highlight). All emphasis is achieved by red, all body is dark on light, all inversion is white on red or white on dark. Categorical differentiation comes from positioning, label, and tilt — never from color.\n\n## Typography\n\n### Font Family Stack\nThe system runs three faces, each tightly bound to its role.\n\n**Shrikhand** (Google Fonts) is the display + numerical face. It's a single-weight (400) heavy slab-script with playful italic-leaning forms and narrow apertures — a face that reads as both old-world (postcard-script) and contemporary (variable-weight digital display). Used at every scale from 18px (inline stats) to 320px (the hero stat). Always weight 400 (the face has no other weights). Rotation is part of the face's voice — multiple Shrikhand elements per slide carry transforms ranging from -6° to +2°.\n\n**Libre Baskerville** (Google Fonts, 400 / 700 + italic) is the body face. A classical literary serif with high stroke contrast — used for every paragraph, every body cell, every metadata line, every cite, every close-sub. Set at 11-16px with 1.5-1.75 line-height, the face reads as comfortably editorial. The face's italic and bold weights are loaded but used sparingly — italic exists for inline emphasis, bold weight 700 is rarely needed since Shrikhand already handles all the heavy display work.\n\n**Space Grotesk** (Google Fonts, weights 400-700) is the metadata + chrome face. Used at 9-12px in uppercase with 2-3px letter-spacing for labels, eyebrows, slide counters, link text, card bullet bodies (when not using Libre Baskerville), and progress chrome. The wide-tracked uppercase treatment is the system's \"stamped metadata\" voice.\n\nThe roles are non-overlapping: Shrikhand handles every display moment and every numerical figure; Libre Baskerville handles every body paragraph and editorial text; Space Grotesk handles every uppercase label, bullet, and chrome element. Don't cross — Shrikhand body would be illegible; Libre Baskerville labels would look like book footnotes; Space Grotesk headlines would feel like a tech startup.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.stat-big}` | 120–320px clamp | Shrikhand | 400 | Hero-class stat figure (always rotated -6°, always red) |\n| `{typography.hero-title-red}` | 84–260px clamp | Shrikhand | 400 | Red word in a multi-line hero stack (always rotated -4°) |\n| `{typography.close-big}` | 80–260px clamp | Shrikhand | 400 | Closing-statement title (always rotated -5°, always red) |\n| `{typography.hero-title}` | 72–220px clamp | Shrikhand | 400 | Top line of a hero stack (default no rotation) |\n| `{typography.hero-title-bottom}` | 64–200px clamp | Shrikhand | 400 | Bottom line of a hero stack (always rotated +2°) |\n| `{typography.section-header-lg}` | 36–72px clamp | Shrikhand | 400 | Large section header for financial / dense-data slides |\n| `{typography.section-header}` | 32–64px clamp | Shrikhand | 400 | Standard section header (summary, services, global, close) |\n| `{typography.pillar-num}` | 36–64px clamp | Shrikhand | 400 | Numeral atop a pillar panel (red) |\n| `{typography.cell-number-lg}` / `{typography.cell-number-md}` | 28–52px clamp | Shrikhand | 400 | Tabular cell numerical figure (always red) |\n| `{typography.stat-item-num}` | 28–56px clamp | Shrikhand | 400 | Inline supplementary stat numeral (dark color) |\n| `{typography.card-title}` | 22–36px clamp | Shrikhand | 400 | Service card title or global card title |\n| `{typography.card-title-sm}` | 20–32px clamp | Shrikhand | 400 | Smaller card title (global cards) |\n| `{typography.pillar-title}` | 18–28px clamp | Shrikhand | 400 | Pillar panel title |\n| `{typography.roadmap-title}` | 18–32px clamp | Shrikhand | 400 | Roadmap phase title (white on dark surface) |\n| `{typography.red-quote}` | 32–90px clamp | Shrikhand | 400 | Quote body on a red panel (white text + stacked shadow) |\n| `{typography.inline-stat}` | 18–28px clamp | Shrikhand | 400 | Inline mini-stat number (red) inside a body block |\n| `{typography.body}` | 13–16px clamp | Libre Baskerville | 400 | Standard body paragraph |\n| `{typography.body-card}` | 12–14px clamp | Libre Baskerville | 400 | Card body inside service/global cards |\n| `{typography.body-cell}` | 11–13px clamp | Libre Baskerville | 400 | Tabular cell body inside grids |\n| `{typography.body-small}` | 11–13px clamp | Libre Baskerville | 400 | Small body for summary highlights |\n| `{typography.hero-meta}` | 11–14px clamp | Libre Baskerville | 400 | Hero meta line above the title stack |\n| `{typography.red-cite}` | 13–16px clamp | Libre Baskerville | 400 | Citation under a red-panel quote (white text) |\n| `{typography.close-sub}` | 14–18px clamp | Libre Baskerville | 400 | Subtitle / contact line under a closing title |\n| `{typography.label-red}` / `{typography.tag-label}` | 10–12px | Space Grotesk | 600 | Section label (uppercase, 2-3px tracking, red) |\n| `{typography.label}` | 10px | Space Grotesk | 600 | Cell label inside grids (uppercase, 2px tracking, dark) |\n| `{typography.rm-label}` | 9px | Space Grotesk | 600 | Roadmap phase label (uppercase, 3px tracking, red) |\n| `{typography.bullet-body}` | 10–12px clamp | Space Grotesk | 400 | List bullet body inside cards and pillars |\n| `{typography.counter}` | 11px | Space Grotesk | 600 | Persistent slide counter |\n| `{typography.link}` | 10–12px clamp | Space Grotesk | 600 | Footer / closing link text (uppercase, 2px tracking) |\n| `{typography.fc-micro}` | 10px | Space Grotesk | 400 | Tiny micro-context line at the bottom of a tabular cell |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.hero-title}` (72–220px) at the top of a stack, paired with `{typography.hero-title-red}` (84–260px, red, rotated -4°) on a second line and `{typography.hero-title-bottom}` (64–200px, rotated +2°) on a third line. The three-line stacked composition is the system's standard hero pattern.\n- **Default size for a primary section headline**: `{typography.section-header}` (32–64px). Always Shrikhand.\n- **Default size for a hero-class statistic**: `{typography.stat-big}` (120–320px) rotated -6°, always red.\n- **Default size for a tabular cell numeral**: `{typography.cell-number-md}` (28–52px) in red.\n- **Default size for body**: `{typography.body}` (13–16px) Libre Baskerville at line-height 1.75.\n- **Default size for a card body**: `{typography.body-card}` (12–14px) at line-height 1.6.\n- **Default size for a section eyebrow label**: `{typography.tag-label}` (10–12px) Space Grotesk weight 600 in red, uppercase, with 2-3px letter-spacing.\n- **Default size for a list bullet body**: `{typography.bullet-body}` (10–12px) Space Grotesk weight 400.\n- **Default weight for Shrikhand**: 400 — the face has no other weights.\n- **Default weight for Libre Baskerville body**: 400. Bold (700) is used only for inline emphasis inside body paragraphs.\n- **Default weight for Space Grotesk labels**: 600. Wide tracking is the system's label voice; weight 400 is for bullet bodies only.\n\nWhen unsure which display token to reach for, default to `{typography.section-header}` (32–64px) for a primary slide section opener. Reserve `{typography.stat-big}` for hero-stat moments and `{typography.hero-title}` triples for cover-class surfaces.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every hero-class Shrikhand element is part of a multi-line stacked composition with at least one rotated line and at least one red line.** A single-line Shrikhand hero title without rotation or color contrast collapses into a generic display moment.\n- **Every tabular numerical cell figure is Shrikhand at the cell-number scale (28–52px) in `{colors.red}`.** Numerical cells in dark text break the system's hierarchy — red is the data signal.\n- **Every section eyebrow is Space Grotesk weight 600 in `{colors.red}`, uppercase, with 2-3px letter-spacing.** No exceptions. Eyebrows at any other tracking, weight, color, or case are not the system's eyebrow.\n- **Every statement-class Shrikhand element (stat-big, close-big) is rotated -5° to -6° in `{colors.red}`.** Untilted red Shrikhand at hero scale looks like a misplaced word — the tilt is the system's \"movement\" signal.\n- **Every red-panel display element carries the stacked text-shadow** (`2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)`). Without the shadow, white Shrikhand on red reads as floating; with it, the text feels printed-and-pressed into the panel.\n- **Every list bullet uses a `{colors.red}` em-dash (—) or round-bullet (•) glyph** at position absolute left with a 12-14px padding-left on the body. Default disc bullets do not exist; the red marker is the system's list signal.\n- **Every Libre Baskerville body is at line-height ≥ 1.5 (preferably 1.6-1.75).** Tighter line-height collapses the editorial register.\n- **Every body strong (`<strong>`) inside a Libre Baskerville paragraph switches face to Space Grotesk weight 600.** The inline face-switch is the system's primary inline emphasis mechanism — a serif strong tag does not produce the same effect.\n\n### Typography Principles\n\nThe voice contrast is **chunky tilted display Shrikhand ↔ literary serif body ↔ wide-tracked mono labels**. Italic is rare (Libre Baskerville italic exists but is used only for inline emphasis inside body); underline is reserved for the red-underline footer link treatment. Bold within Libre Baskerville body is replaced by an inline face-switch to Space Grotesk weight 600 — the change-of-face is the emphasis signal.\n\nNumerical content (stat figures, financial values, percentage callouts, mini-stats) is always Shrikhand in red. Even small inline stats inside body cells become red Shrikhand. The numerical-as-display pattern is what gives the system its sports-magazine register.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and animate in via opacity + translateY (30px) + scale (0.98 → 1) on 550ms ease. Only one slide is `.active` at a time. Default slide padding is `48px 56px` with major variations:\n- Hero slides: `5vh 7vw` top-padding, alignment shifted to top-left.\n- Roadmap slides: `40px 48px` to accommodate the dense two-column grid.\n- Pillars slides: `0` (the pillar columns provide their own internal padding).\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide}` | 48px 56px | Default slide padding |\n| `{spacing.pad-cell}` | 22px 20px | Tabular cell internal padding (financial grid) |\n| `{spacing.pad-cell-sm}` | 20px 24px | Summary highlight cell padding |\n| `{spacing.pad-pillar}` | 32px 24px | Pillar column padding |\n| `{spacing.pad-card}` | 24px | Global card padding |\n| `{spacing.pad-roadmap}` | 40px 48px | Roadmap surface padding |\n| `{spacing.gap-grid-md}` | 24px 32px | Standard service/global grid gap (row × col) |\n| `{spacing.gap-grid-roadmap}` | 28px 36px | Roadmap two-column grid gap |\n| `{spacing.gap-grid-stats}` | 48px | Big stat row gap |\n| `{spacing.gap-stat-row}` | 20px | Vertical gap within a stat-item stack |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Progress bar** at the bottom edge — a 5px thick `{colors.red}` strip that grows in width with slide index. The thickest, most visible piece of chrome; it functions as both progress indicator and bottom-edge poster trim.\n- **Slide counter** at bottom-right (`bottom: 18px right: 24px`) — Space Grotesk weight 600 uppercase NN / NN at 50% opacity.\n- **Hint pill** at bottom-center — Space Grotesk uppercase text in an off-white pill, opacity 0 by default, fading to 50% on `body:hover`.\n\n### Surface Variations\nThe deck cycles through five surface treatments:\n- **White content surfaces** — default, most slides.\n- **Off-white striped panels** — inside pillar layouts, alternating columns get `{colors.light}` background for vertical striping.\n- **Full-bleed red panel** — statement / quote slides flood the canvas in `{colors.red}` with white display text and the stacked text-shadow.\n- **Full-bleed dark panel** — roadmap-class surfaces use `{colors.dark}` ground with white text and red accents.\n- **Bordered tabular grids** — financial-figure and summary-highlight grids carry a 3px ink outer border + 1.5px ink inner cell borders, producing the system's signature double-border tabular composition.\n\n### Hero Stack Composition\nThe standard cover/hero pattern is a **three-line Shrikhand stack** where each line carries a different size and at least one carries rotation and at least one is in red. The stack reads top-left → bottom-right, with the smallest line at the bottom and the boldest red rotation in the middle. The composition is the system's most distinctive opener.\n\n## Depth and Elevation\n\n### No Cards, No Shadows (Mostly)\nThe system uses **almost no box-shadows**. Cards do not float off the surface via shadow. Depth comes from:\n- **Heavy borders** (3px outer + 1.5px inner double-border on tabular grids; 2px solid borders on global cards; 4px red left rules on editorial leftbar cards).\n- **Surface inversion** (full-bleed red or dark panels switch the entire surface).\n- **Tilted display elements** that break the grid alignment.\n\n### The Single Shadow Pattern (Stacked Text Shadow)\nThe only shadow in the entire system is the **stacked text-shadow on red display text on red panels**: three steps at 2/2, 4/4, 6/6 with decreasing-opacity ink fill (0.25, 0.20, 0.15). The shadow is applied via `text-shadow:` not `box-shadow:`. The effect is a printed-press feel — the text reads as having been stamped slightly off-register, three times. This treatment appears only on the red-quote and certain rotated Shrikhand display moments on red panels.\n\n### Border-as-Depth (Tabular Grid Signature)\nThe financial-grid and summary-highlight-grid patterns use a **3px solid ink outer border** with **1.5px solid ink inner cell borders** — the two border weights touch at every cell intersection, producing a printed-newsprint quality. This is the system's primary structural depth mechanism on data-heavy surfaces.\n\n### Leftbar Rules\nEditorial cards (service cards, roadmap phases, global cards) are marked by a **4px (or 3px on dark surfaces) red solid left border** with 16-18px padding-left. The leftbar rule signals \"this is a card\" without enclosing it — the card reads as cantilevered off the red rule. This is the system's most common card pattern.\n\n### Tilt as Depth\nRotated Shrikhand display elements break the horizontal baseline and create perceived dimensionality without using perspective. The standard rotations are -6° (stat-big), -5° (close-big), -4° (hero-title-red), +2° (hero-title-bottom). These tilts are part of the system's spatial language.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px** on everything except the hint-pill (4px) and the bar-track elements (none in this template, but if used should be 0px). Every card, every cell, every panel, every callout is a strict rectangle.\n- **4px** on the hint-pill only — a minor concession for the floating chrome.\n\nThe square-corner discipline is essential. Rounded cards immediately collapse the printed-poster feel into generic web aesthetic.\n\n### Border Weights\n- **5px solid `{colors.red}`** — used only on the persistent progress bar.\n- **4px solid `{colors.red}`** — used on the editorial leftbar card (service cards on white surfaces).\n- **3px solid `{colors.dark}`** — used on the outer border of tabular grids (financial-grid, summary-highlights) and as the vertical pillar separator.\n- **3px solid `{colors.red}`** — used on the leftbar of roadmap phase cards (on dark surfaces).\n- **2px solid `{colors.red}`** — used as the underline rule on footer links.\n- **2px solid `{colors.dark}`** — used as the outline border on global cards.\n- **1.5px solid `{colors.dark}`** — used on inner cells of tabular grids.\n- **1px solid `rgba(28, 20, 16, 0.08)`** — hairline-soft separator between bullet rows inside pillar panels.\n\nThe border ladder (1px-soft / 1.5px / 2px / 3px / 4px / 5px) is fixed. Every border is solid; dashed and dotted borders do not exist.\n\n### Decorative Element Types\n\n**Hero title stack** — A three-line Shrikhand composition at varying sizes with rotation and color contrast. The system's signature opener.\n\n**Red panel** — Full-bleed `{colors.red}` ground with white display text carrying the stacked text-shadow. Used for statement / quote moments.\n\n**Dark panel** — Full-bleed `{colors.dark}` ground with white text and red accents. Used for roadmap-class dense-data surfaces.\n\n**Tabular bordered grid** — 3px ink outer border + 1.5px ink inner cell borders producing a double-border tabular composition. Each cell holds a Shrikhand red numeral + Space Grotesk uppercase label + Libre Baskerville body paragraph + optional Space Grotesk micro line at bottom.\n\n**Red leftbar card** — A 4px solid red left rule with 18px left padding holding a Shrikhand card title + Libre Baskerville body + Space Grotesk red-bullet list. The system's primary editorial card pattern.\n\n**Pillar panel** — A vertical column inside a multi-pillar layout, separated by 3px ink vertical rules and alternating between white and off-white backgrounds. Each pillar holds a Shrikhand red numeral, Shrikhand title, Libre Baskerville lead, and Space Grotesk bullets separated by 1px hairline-soft rules.\n\n**Global card** — A 2px solid ink-bordered card with 24px padding holding a Space Grotesk red label + Shrikhand title + Libre Baskerville body + inline gc-stats row. Used on the global-presence surface.\n\n**Em-dash bullet** — A red em-dash glyph at position absolute left with 14px padding-left on the body. The system's primary list marker.\n\n**Round bullet** — A red round-bullet glyph at position absolute left with 12px padding-left on the body. Secondary list marker, used in card and pillar bullets.\n\n**Footer link** — Space Grotesk uppercase text with a 2px red underline and 4px padding-bottom. Hover swaps text color to red.\n\n**Stacked text shadow** — Three-step decreasing-opacity ink shadow applied to red display text on red panels. The system's only shadow treatment.\n\n**Tilted display** — Shrikhand elements rotated -6° to +2°. Used on hero-title-red, stat-big, close-big, and hero-title-bottom.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.bg}` (white) as the default canvas on most surfaces. Switch to `{colors.red}` for statement slides, `{colors.dark}` for dense-data slides, and alternate `{colors.bg}` / `{colors.light}` for vertical pillar striping.\n- Set every hero-class title as a multi-line Shrikhand stack with at least one rotated line and at least one red line. The composed-stack is the system's opener signature.\n- Use Shrikhand at every numerical-callout moment in `{colors.red}` — tabular cells, summary highlights, pillar numbers, inline mini-stats. Red Shrikhand numerals are the system's data voice.\n- Set every section eyebrow in Space Grotesk weight 600 uppercase with 2-3px letter-spacing in `{colors.red}`. The wide-tracked red label is the universal section opener.\n- Apply the stacked text-shadow to red display text on red panels. The three-step decreasing-opacity ink shadow is the system's only shadow and creates the printed-press feel.\n- Use the 4px red leftbar pattern (`{components.red-leftbar-card}`) for editorial cards. The cantilevered-off-the-rule treatment is the system's primary card pattern.\n- Build tabular grids with the double-border treatment: 3px ink outer border + 1.5px ink inner cell borders touching at intersections.\n- Render every list bullet with a red em-dash (`{components.bullet-em-dash}`) or red round-bullet (`{components.bullet-bullet}`) at position absolute left. Default disc bullets are forbidden.\n- Tilt Shrikhand statement elements (-5° to -6°) to create the system's signature movement. Untilted red statement display reads as misplaced.\n- Use Libre Baskerville at line-height 1.5-1.75 in `{colors.dark}` for every body paragraph. The literary editorial body is what makes the system feel printed.\n\n### Don't\n\n- Don't introduce a second accent color. Red is the only accent — green for positive, blue for info, yellow for highlight all break the single-accent discipline.\n- Don't round any corner on cards, panels, cells, or callouts. Square corners are non-negotiable; the only exception is the 4px hint-pill chrome.\n- Don't add drop shadows or blurred shadows. The system has zero box-shadows; the only shadow is the stacked text-shadow on red display text.\n- Don't substitute fonts. Shrikhand + Libre Baskerville + Space Grotesk is the trio. Replacing Shrikhand with any other display face collapses the entire identity.\n- Don't use Shrikhand for body or Libre Baskerville for labels. The three-face role discipline is non-negotiable.\n- Don't use default bullet points or disc list markers. Lists always use red em-dash or red round-bullet glyphs at position absolute left.\n- Don't omit the tilt on hero-class red Shrikhand elements. The rotation is the system's signature movement; untilted red display reads as flat.\n- Don't render headlines in red on white surfaces (except for stat-big, close-big, hero-title-red — the rotated statement elements). Most section headers are `{colors.dark}` Shrikhand, not red.\n- Don't tighten Libre Baskerville body line-height below 1.5. Tight body line-height collapses the literary register into something cramped.\n- Don't crowd a statement slide with cards or structural content. Statement surfaces (red panel, stat slide, close slide) deliberately reserve massive negative space around a single rotated red display element.\n\n## Responsive Behavior\n\nBold Poster is designed as a **1920×1080 presentation system**. Sizing uses CSS `clamp()` with `vw`-based mid values for display type, fixed `px` for borders and chrome, and `rem`-adjacent fixed values for cell padding. The system has a single responsive breakpoint at 768px for narrow viewports.\n\n### Scaling Behavior\n- Hero stat scales 120px → 320px on viewport width.\n- Hero titles scale 64px → 260px.\n- Section headers scale 32px → 72px.\n- Body scales 11px → 16px.\n- Borders (1px-soft / 1.5px / 2px / 3px / 4px / 5px) and rotation transforms are fixed and do not scale.\n\n### Mobile Breakpoint (max-width: 768px)\nA single `@media (max-width: 768px)` block restructures dense layouts for narrow viewports:\n- Slide padding shrinks from 48px × 56px to 32px × 24px.\n- Summary columns collapse from 2 → 1.\n- Summary highlights grid collapses from 3 → 1.\n- Financial grid collapses from 3 → 2.\n- Service grid collapses from 2 → 1.\n- Roadmap grid collapses from 2 → 1.\n- Pillars switch from horizontal flex-row to vertical flex-column; vertical separators become horizontal bottom borders.\n- Global grid collapses from 2 → 1.\n- Stat row stacks vertically.\n- Hero tagline shifts from absolute-positioned bottom-right to relative-positioned below the hero title stack.\n\nThe system is functional but not optimized for sub-768px portrait usage — it's designed for landscape presentation contexts.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, `Space`, `Enter`, or `PageDown`.\n- Slides reverse via `ArrowLeft`, `ArrowUp`, or `PageUp`.\n- Click on the right half of the viewport advances; click on the left half reverses.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are 550ms cubic-bezier `(0.22, 1, 0.36, 1)` with combined opacity, translateY (30px), and scale (0.98 → 1).\n- Progress bar at bottom edge animates to current slide percentage with a 500ms cubic-bezier ease.\n\n### Print Behavior\nThe system has no `@media print` rule. The transition is screen-only. For static export, screenshots of each slide preserve all rotation transforms and the stacked text-shadow (both are pure CSS).\n\n### Interactive States\n- Footer links swap text color from `{colors.dark}` to `{colors.red}` on hover.\n- The hint-pill fades from opacity 0 to 0.5 on `body:hover` via a 400ms ease.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / stat / section header / numerical figures / card titles | Shrikhand 400 (heavy slab-script, rotated) | 思源宋体 Noto Serif SC 900 |\n| Body / body-card / body-cell / hero-meta / cite / close-sub | Libre Baskerville 400 (literary serif) | 思源宋体 Noto Serif SC 400 |\n| Label / bullet body / counter / link / micro chrome | Space Grotesk 400–600 (uppercase, 2–3px tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use **思源宋体 Noto Serif SC** for both display and body (weight 900 for display, weight 400 for body — visual hierarchy comes from weight, size, color, and rotation, not face contrast). Use **思源黑体 Noto Sans SC** weight 500 for the small uppercase chrome (labels, bullet bodies, counter, links). 思源宋体 ships Latin glyphs that pair cleanly with Chinese characters; for mixed display moments, 思源宋体 weight 900 will render both 中文 and Latin in the same heavy serif voice.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (already close to Libre Baskerville 1.75; keep at 1.8 for CJK), display 1.1–1.25 (up from the very tight 0.82–0.9 used on Shrikhand). Display at 0.82 collides vertically in CJK; open to 1.0 minimum.\n- **Letter-spacing**: set to 0 on every CJK run. The template's 1px positive tracking on hero-title and the 2–3px tracking on Space Grotesk labels both read as gappy on square CJK glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Space Grotesk label, tag-label, rm-label, counter, and link uses `text-transform: uppercase` in the Latin original; remove for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `1970 米兰式海报` not `1970米兰式海报`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style — let it handle mixed sentences in display and body. Don't let the browser fall back to Shrikhand or Libre Baskerville mid-word for ASCII characters.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on **Shrikhand's chunky slab-script personality + rotation + saturated red**. Shrikhand is the most distinctive single decision in this template — and it has no Chinese equivalent. 思源宋体 weight 900 carries weight and editorial register but loses the playful italic-leaning slab character entirely. Compensate by **leaning harder on the non-typographic signatures**: keep all rotations intact (-6° on stat-big, -5° on close-big, -4° on hero-title-red, +2° on hero-title-bottom), keep the stacked text-shadow on red-panel display, keep the saturated tomato red as the only accent, keep the 3px + 1.5px double-border tabular grids, keep the red leftbar cards, keep the red em-dash bullet markers. The rotation, red, and printed-newsprint structural language survive the face swap.\n\nThe system's three-face role discipline (Shrikhand display / Libre Baskerville body / Space Grotesk chrome) collapses to a two-face system in CJK: 思源宋体 for everything Latin-serif, 思源黑体 for everything Latin-mono. The body-vs-display contrast becomes pure weight (400 vs 900) plus color (dark vs red). For inline `<strong>` emphasis inside body, switch from 思源宋体 400 to 思源黑体 600 — the change-of-face is what signals emphasis in the Latin original, and the serif-to-sans swap preserves the same logic in CJK.\n\n### Known CJK Gap\n\n- **No exact online CJK match for Shrikhand's slab-script personality.** The face is Italian-sports-magazine display script with chunky terminals and playful italic forms — there is no Chinese equivalent on Google Fonts, Adobe Fonts, or cn-fontsource. 思源宋体 weight 900 gives heft and editorial register but reads as serious rather than playful. The rotation transforms and saturated red carry the playful-sports-magazine voice on their own; don't drop the tilts when translating to CJK.\n- **No CDN Chinese monospace face for the chrome voice.** Space Grotesk's role (uppercase tracked labels, slide counter, footer links with red underline) depends on the uppercase + 2–3px tracking treatment. 思源黑体 weight 500–600 at 0 tracking is the closest match but loses the \"stamped metadata\" signal. The red color and 1–2px border treatments on tags/links do most of the chrome-recognition work in a CJK build.\n- **Libre Baskerville's classical literary register has no exact Chinese counterpart.** 思源宋体 reads as institutional-modern rather than 19th-century-literary. For projects that need the literary-quarterly voice specifically (long body paragraphs in essays or manifestos), consider 霞鹜文楷 LXGW WenKai instead of 思源宋体 — it carries a hand-written/calligraphic warmth closer to Baskerville's editorial personality.\n\n## Iteration Guide\n\n1. Any new content slide starts with a Shrikhand section header at `{typography.section-header}` (32–64px) in `{colors.dark}`, optionally preceded by a Space Grotesk red eyebrow label.\n2. Any new nume\n\n<!-- [TRUNCATED AT 50KB] -->","frontmatter":{"version":"alpha","name":"Bold Poster","description":"A populist editorial poster system that mashes vintage Italian sports-magazine display lettering with classical serif body and tight monospace metadata. The display face is Shrikhand — a heavy slab/script hybrid with playful italic personality — rendered at poster scale (often 200-320px) and routinely tilted off-axis. Body runs Libre Baskerville for a literary editorial register; Space Grotesk handles tiny uppercase labels and chrome. The palette is uncompromising: white canvas, deep brown-black ink (#1C1410), single saturated tomato red (#D8000F), and a warm off-white (#F5F2EF) for alternating panels. Borders are bold 1.5-3px ink rules; the only shadow is a single stacked offset behind red display text. The aesthetic is loud, confident, and unmistakably print-poster — closer to a 1970s European brand annual report or a wine merchant's catalogue than a contemporary slide deck.","colors":{"bg":"#FFFFFF","dark":"#1C1410","red":"#D8000F","light":"#F5F2EF"},"typography":{"hero-title":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(72px, 16vw, 220px)","lineHeight":0.88,"letterSpacing":"1px","color":"{colors.dark}"},"hero-title-red":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(84px, 18vw, 260px)","lineHeight":0.85,"color":"{colors.red}","transform":"rotate(-4deg)"},"hero-title-bottom":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(64px, 14vw, 200px)","lineHeight":0.9,"color":"{colors.dark}","transform":"rotate(2deg)"},"close-big":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(80px, 18vw, 260px)","lineHeight":0.88,"color":"{colors.red}","transform":"rotate(-5deg)"},"stat-big":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(120px, 26vw, 320px)","lineHeight":0.82,"color":"{colors.red}","transform":"rotate(-6deg)"},"red-quote":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(32px, 7vw, 90px)","lineHeight":1.15,"color":"{colors.bg}","textShadow":"2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)"},"section-header":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(32px, 5vw, 64px)","lineHeight":1,"color":"{colors.dark}"},"section-header-lg":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(36px, 6vw, 72px)","lineHeight":1,"color":"{colors.dark}"},"cell-number-lg":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(28px, 3.5vw, 52px)","lineHeight":1,"color":"{colors.red}"},"cell-number-md":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(28px, 3.5vw, 48px)","lineHeight":1,"color":"{colors.red}"},"card-title":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(22px, 3vw, 36px)","lineHeight":1.1,"color":"{colors.dark}"},"card-title-sm":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(20px, 2.5vw, 32px)","lineHeight":1.1,"color":"{colors.dark}"},"pillar-num":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(36px, 5vw, 64px)","lineHeight":1,"color":"{colors.red}"},"pillar-title":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(18px, 2.2vw, 28px)","lineHeight":1.15,"color":"{colors.dark}"},"stat-item-num":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(28px, 4vw, 56px)","lineHeight":1,"color":"{colors.dark}"},"roadmap-title":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(18px, 2.5vw, 32px)","lineHeight":1.1},"inline-stat":{"fontFamily":"'Shrikhand', cursive","fontWeight":400,"fontSize":"clamp(18px, 2vw, 28px)","lineHeight":1,"color":"{colors.red}"},"body":{"fontFamily":"'Libre Baskerville', serif","fontWeight":400,"fontSize":"clamp(13px, 1.2vw, 16px)","lineHeight":1.75,"color":"{colors.dark}"},"body-card":{"fontFamily":"'Libre Baskerville', serif","fontWeight":400,"fontSize":"clamp(12px, 1.1vw, 14px)","lineHeight":1.6,"color":"{colors.dark}"},"body-cell":{"fontFamily":"'Libre Baskerville', serif","fontWeight":400,"fontSize":"clamp(11px, 1vw, 13px)","lineHeight":1.55,"color":"{colors.dark}"},"body-small":{"fontFamily":"'Libre Baskerville', serif","fontWeight":400,"fontSize":"clamp(11px, 1vw, 13px)","lineHeight":1.5,"color":"{colors.dark}"},"hero-meta":{"fontFamily":"'Libre Baskerville', serif","fontWeight":400,"fontSize":"clamp(11px, 1vw, 14px)","lineHeight":1.5,"color":"{colors.dark}"},"tag-body":{"fontFamily":"'Libre Baskerville', serif","fontWeight":400,"fontSize":"clamp(13px, 1.2vw, 16px)","lineHeight":1.6,"color":"{colors.dark}"},"red-cite":{"fontFamily":"'Libre Baskerville', serif","fontWeight":400,"fontSize":"clamp(13px, 1.3vw, 16px)","lineHeight":1.5,"color":"{colors.bg}"},"close-sub":{"fontFamily":"'Libre Baskerville', serif","fontWeight":400,"fontSize":"clamp(14px, 1.5vw, 18px)","lineHeight":1.6,"color":"{colors.dark}"},"label":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"10px","letterSpacing":"2px","textTransform":"uppercase","color":"{colors.dark}"},"label-red":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"10px","letterSpacing":"2px","textTransform":"uppercase","color":"{colors.red}"},"rm-label":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"9px","letterSpacing":"3px","textTransform":"uppercase","color":"{colors.red}"},"tag-label":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"clamp(10px, 0.9vw, 12px)","letterSpacing":"3px","textTransform":"uppercase","color":"{colors.red}"},"bullet-body":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":400,"fontSize":"clamp(10px, 0.9vw, 12px)","lineHeight":1.45,"color":"{colors.dark}"},"counter":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"11px","lineHeight":1,"letterSpacing":"2px","textTransform":"uppercase","color":"{colors.dark}"},"link":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":600,"fontSize":"clamp(10px, 0.9vw, 12px)","letterSpacing":"2px","textTransform":"uppercase","color":"{colors.dark}"},"fc-micro":{"fontFamily":"'Space Grotesk', sans-serif","fontWeight":400,"fontSize":"10px","lineHeight":1.4,"color":"{colors.dark}"}},"spacing":{"pad-slide":"48px 56px","pad-cell":"22px 20px","pad-cell-sm":"20px 24px","pad-pillar":"32px 24px","pad-card":"24px","pad-roadmap":"40px 48px","gap-grid-md":"24px 32px","gap-grid-roadmap":"28px 36px","gap-grid-stats":"48px","gap-stat-row":"20px","pad-bottom-clearance":"40px","max-width-content":"1100px","max-width-services":"1000px"},"canvas":{"width":"100vw","height":"100vh","background":"{colors.bg}"},"components":{"progress-bar":{"position":"fixed, bottom 0 left 0","height":"5px","background":"{colors.red}","description":"Persistent thick red progress strip at the bottom of the viewport. Width grows linearly with slide index. The system's most prominent piece of chrome."},"counter":{"position":"fixed, bottom 18px right 24px","color":"{colors.dark}","opacity":0.5,"fontFamily":"'Space Grotesk', sans-serif","fontSize":"11px","letterSpacing":"2px","description":"Persistent slide counter NN / NN at 50% opacity in Space Grotesk uppercase."},"hint-pill":{"position":"fixed, bottom 18px center","background":"{colors.light}","padding":"6px 14px","borderRadius":"4px","fontSize":"10px","opacity":0,"description":"Bottom-center hint pill that fades to 50% opacity on body hover. Subtle wayfinding only."},"section-bordered-grid":{"border":"3px solid {colors.dark}","description":"Heavy 3px ink border enclosing a grid of cells. Each child cell carries a 1.5px ink inner border, producing a hairline-on-heavy double-border tabular grid. Used for financial-figure and summary-highlight grids."},"cell-bordered":{"border":"1.5px solid {colors.dark}","padding":"22px 20px","description":"Tabular cell with 1.5px ink border. Lives inside a 3px-bordered parent grid; the two border weights touch to produce the system's signature grid-with-double-edge."},"red-leftbar-card":{"borderLeft":"4px solid {colors.red}","paddingLeft":"18px","description":"Service or content card marked by a 4px solid red left rule and 18px left padding. The system's editorial card pattern — no outline, just the red rule signaling the start of a block."},"red-leftbar-card-thin":{"borderLeft":"3px solid {colors.red}","paddingLeft":"16px","description":"Thinner variant of the red-leftbar card used on dark surfaces (roadmap phases). Same pattern, scaled-down rule weight."},"bullet-em-dash":{"glyph":"—","color":"{colors.red}","fontWeight":700,"paddingLeft":"14px","description":"List bullet using a red em-dash (—) glyph in place of a disc. The dash sits at position absolute left and the body text indents to clear it."},"bullet-bullet":{"glyph":"•","color":"{colors.red}","paddingLeft":"12px","description":"List bullet using a red round bullet (•) glyph. Same indent pattern as the em-dash variant."},"pillar-panel":{"flex":1,"padding":"32px 24px","borderRight":"3px solid {colors.dark}","description":"Vertical column panel inside a multi-pillar layout. Each pillar separated by a 3px ink vertical rule. Alternating panels swap background from {colors.bg} to {colors.light} for striping."},"pillar-bullet-row":{"padding":"5px 0","borderBottom":"1px solid rgba(28, 20, 16, 0.08)","description":"Bullet row inside a pillar with a hairline-soft bottom border (ink at 8%) separating items. The last item drops the border."},"global-card":{"border":"2px solid {colors.dark}","padding":"24px","description":"Bordered information card with 2px ink outline. Used on the global presence layout. Heavier than the leftbar pattern, more contained."},"stacked-text-shadow":{"textShadow":"2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)","description":"Three-step decreasing-opacity stacked offset shadow in ink. Applied only to large red display text on red panels. The system's only shadow treatment."},"red-panel":{"background":"{colors.red}","color":"{colors.bg}","description":"Full-bleed saturated red panel surface. Carries white text with the stacked-text-shadow treatment on display."},"dark-panel":{"background":"{colors.dark}","color":"{colors.bg}","description":"Full-bleed deep brown-black panel surface. Carries white text and red accents (left bars, mono labels)."},"link-underline":{"color":"{colors.dark}","borderBottom":"2px solid {colors.red}","paddingBottom":"4px","description":"Footer link style — Space Grotesk uppercase with a 2px red underline. Hover swaps text color to red."},"hero-title-stack":{"description":"A three-line stacked title where each line is a Shrikhand display element at a slightly different size. Two of the three lines carry rotation transforms (-4deg, +2deg) and one is set in red. The composition is the system's signature opener."}}},"isInternal":false,"tokens":12899,"sizeBytes":50575},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/preview.md","title":"Bold-poster Skill","category":"anthropic-skill","format":"markdown","content":"# Bold Poster Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/bold-poster/design.md`\n- Preview card: `bold-template-pack/templates/bold-poster/preview.md`\n\n## Selection Metadata\n\n- Slug: `bold-poster`\n- Tagline: Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent.\n- Mood: bold, editorial, loud, confident\n- Tone: dramatic, graphic, sharp, intentional\n- Formality: medium\n- Density: low\n- Scheme: light\n- Best for: Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews. Excellent any time you want a few words to feel like a poster — including unexpected fits like a tech keynote or a finance manifesto that wants to be quotable.\n- Avoid for: Decks that need to communicate dense information per slide — the layout is built around a few large statements, not paragraphs of detail.\n\n## Visual Snapshot\n\nA populist editorial poster system that mashes vintage Italian sports-magazine display lettering with classical serif body and tight monospace metadata. The display face is Shrikhand — a heavy slab/script hybrid with playful italic personality — rendered at poster scale (often 200-320px) and routinely tilted off-axis. Body runs Libre Baskerville for a literary editorial register; Space Grotesk handles tiny uppercase labels and chrome. The palette is uncompromising: white canvas, deep brown-black ink (#1C1410), single saturated tomato red (#D8000F), and a warm off-white (#F5F2EF) for alternating panels. Borders are bold 1.5-3px ink rules; the only shadow is a single stacked offset behind red display text. The aesthetic is loud, confident, and unmistakably print-poster — closer to a 1970s European brand annual report or a wine merchant's catalogue than a contemporary slide deck.\n\nBold Poster is a populist editorial poster system that lifts its visual vocabulary from vintage Italian sports magazines, mid-century European brand annual reports, and wine-merchant catalogues. The premise is that every slide should feel printed — set in heavy display type, locked to one strong red accent, on a white or off-white sheet, with grids ruled in ink and decoration kept to a strict minimum.\n\n## Preview Ingredients\n\n- Palette: bg #FFFFFF; dark #1C1410; red #D8000F; light #F5F2EF\n- Typography: See full design doc after selection.\n- Signature move: White ({colors.bg}) canvas alternating with off-white ({colors.light}) panels for striping, plus dark ({colors.dark}) and red ({colors.red}) full-bleed panel surfaces for statement moments.\n- Signature move: Single tomato red ({colors.red}) as the only accent — used for every numerical figure, every section rule, every label, every left-bar marker.\n- Signature move: Three-face stack: Shrikhand (display + numerical), Libre Baskerville (body), Space Grotesk (mono labels + bullets + chrome).\n- Signature move: Display Shrikhand is routinely tilted (-6° to +2°) — the rotation is the system's signature movement.\n- Signature move: Heavy ink borders: 3px on tabular grid containers, 1.5-2px on cells, 4px red on editorial leftbar cards, 1px hairlines between bullet rows.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1060,"sizeBytes":4806},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/design.md","title":"Broadside","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Broadside\ndescription: A protest-poster editorial system built on massive Barlow type and a single fire-orange environment color. The aesthetic is \"ink on fire\" — dark slides for documentation, orange slides for declaration. Display type is enormous (13vw, roughly 187px at 1440 width) in weight 900 lowercase, treating words as graphic elements rather than reading copy. The cultural reference is broadside printing, SPACE10 reports, and Wim Crouwel grids reinterpreted with one loud color and zero decoration.\n\ncolors:\n  ink-black: \"#111111\"\n  ink-black-alt: \"#1A1A18\"\n  fire-orange: \"#E85D26\"\n  cream: \"#F0ECE5\"\n  cream-muted: \"#888880\"\n  cream-hint: \"#505048\"\n  border-dark: \"#282826\"\n  ink-on-orange-muted: \"rgba(17, 17, 17, 0.75)\"\n  ink-on-orange-hint: \"rgba(17, 17, 17, 0.55)\"\n  ink-on-orange-faint: \"rgba(17, 17, 17, 0.40)\"\n  ink-on-orange-border: \"rgba(17, 17, 17, 0.20)\"\n\ncolor-aliases:\n  c-bg: ink-black\n  c-bg-alt: ink-black-alt\n  c-bg-light: ink-black            # Broadside collapses \"light\" → dark; there are no cream slides\n  c-bg-orange: fire-orange\n  c-fg: cream\n  c-fg-2: cream-muted\n  c-fg-3: cream-hint\n  c-accent: fire-orange\n  c-border: border-dark\n\ntypography:\n  display:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"13vw\"\n    fontWeight: 900\n    lineHeight: 0.88\n    letterSpacing: -0.04em\n  h1:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"7.5vw\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  h2:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"4.5vw\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h3:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"2.8vw\"\n    fontWeight: 600\n    lineHeight: 1.2\n  lead:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"1.6vw\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"1.2vw\"\n    fontWeight: 400\n    lineHeight: 1.6\n  caption:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"0.9vw\"\n    fontWeight: 400\n    lineHeight: 1.5\n  label:\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontSize: \"0.72vw\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  stat-value:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"5.5vw\"\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.04em\n  quote-mark:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"10vw\"\n    fontWeight: 900\n    lineHeight: 0.6\n  quote-text:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"3.8vw\"\n    fontWeight: 700\n    lineHeight: 1.15\n    letterSpacing: -0.02em\n  fadelist-item:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"7.5vw\"\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.03em\n  fadelist-title:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"10.5vw\"\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.04em\n\nspacing:\n  pad-x: \"5.5vw\"\n  pad-y: \"5.5vh\"\n  gap-lg: \"3.5vh\"\n  gap-md: \"2vh\"\n  gap-sm: \"1vh\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\nmotion:\n  ease-slide: \"cubic-bezier(0.77, 0, 0.175, 1)\"\n  dur-slide: \"0.8s\"\n  ease-enter: \"cubic-bezier(0.16, 1, 0.3, 1)\"\n  dur-enter: \"0.5s\"\n\ncomponents:\n  slide-chrome:\n    layout: \"flex row, justify space-between\"\n    paddingBottom: \"{spacing.gap-sm}\"\n    borderBottom: \"1px solid {colors.border-dark}\"\n    marginBottom: \"{spacing.gap-md}\"\n    description: \"Top chrome bar carrying section label on left, slide number/meta on right. Suppressed on cover, chapter, quote, and end slides.\"\n  slide-foot:\n    layout: \"flex row, justify space-between\"\n    paddingTop: \"{spacing.gap-sm}\"\n    borderTop: \"1px solid {colors.border-dark}\"\n    marginTop: \"{spacing.gap-md}\"\n    description: \"Bottom chrome bar, mirrors top chrome. Same suppression rules.\"\n  rule:\n    width: 36px\n    height: 2px\n    background: \"{colors.fire-orange}\"\n    description: \"Stub accent rule. On orange slides this flips to {colors.ink-black}.\"\n  rule-full:\n    width: \"100%\"\n    height: 2px\n    background: \"{colors.border-dark}\"\n  kicker:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.fire-orange}\"\n    description: \"Eyebrow above headlines. Orange on dark; dark-ink-at-55%-opacity on orange.\"\n  tag:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.fire-orange}\"\n    border: \"1px solid {colors.fire-orange}\"\n    padding: \"0.3em 0.8em\"\n    description: \"Bordered mono tag. On orange slides flips to dark ink with 40%-opacity dark border.\"\n  broadside-num:\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontSize: \"1.1vw\"\n    fontWeight: 500\n    letterSpacing: 0.1em\n    color: \"rgba(17, 17, 17, 0.45)\"\n    description: \"Catalogue-style slide number, typically anchored top-left on orange slides. On dark slides, color shifts to {colors.cream-hint}.\"\n  stat-card:\n    borderTop: \"1px solid {colors.border-dark}\"\n    padding: \"{spacing.gap-md} {spacing.gap-md} {spacing.gap-md} 0\"\n    description: \"Top-border-only data card. Big orange numeral above body label above mono note.\"\n  bullet-marker:\n    content: \"/\"\n    color: \"{colors.fire-orange}\"\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontWeight: 700\n    description: \"Slash glyph rendered via ::before on every bullet item. Orange on dark, dark-at-45%-opacity on orange.\"\n  compare-panel-left:\n    paddingRight: \"calc({spacing.pad-x} * 0.55)\"\n    borderRight: \"1px solid {colors.border-dark}\"\n  compare-panel-right:\n    paddingLeft: \"calc({spacing.pad-x} * 0.55)\"\n  compare-panel-orange:\n    background: \"{colors.fire-orange}\"\n    description: \"Right-half panel filled with fire orange — the 'after' or payoff side in compare layouts.\"\n  bar-track:\n    height: \"30vh\"\n    borderLeft: \"1px solid {colors.border-dark}\"\n    description: \"Vertical bar chart container. Bars are cream-hint by default; one bar per chart gets the .accent class for fire orange.\"\n  bar-fill:\n    background: \"{colors.cream-hint}\"\n  bar-fill-accent:\n    background: \"{colors.fire-orange}\"\n  img-placeholder:\n    height: \"55vh\"\n    background: \"rgba(255, 255, 255, 0.04)\"\n    border: \"1px dashed {colors.border-dark}\"\n    textTransform: uppercase\n    letterSpacing: 0.12em\n    description: \"Dashed-border placeholder shown when no image is wired. Same 55vh footprint as a real img.\"\n  fadelist-stack:\n    description: \"Vertical stack of three display-weight words, opacities 1.0 / 0.5 / 0.22 top-to-bottom. The SPACE10 'before/during/after' treatment.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBroadside is a **protest-poster editorial system**. The defining premise: type is so large it stops behaving as text and starts behaving as graphic primitive. Display sizes at `13vw` (`{typography.display}`) put a single word at roughly 187px on a 1440-wide screen — wide enough that the eye scans letterforms before reading. This is the system's primary expressive instrument.\n\nThe typeface stack is monolithic. **Barlow** carries every text role from `{typography.display}` down to `{typography.body}` — there is no serif companion, no script accent, no secondary display face. The expressive range is achieved entirely through weight (400 to 900) and size, not face contrast. **IBM Plex Mono** is the only secondary face and it appears only in chrome: slide numbers, kickers, labels, tags, captions, and the bullet-list slash markers. **Noto Sans SC** sits in every font-family stack as the CJK fallback at matching weights. The voice is uniform, heavy, and lowercase — *Broadside does not use uppercase headlines.* That is a meaningful inversion of the brutalist norm.\n\nThe palette functions in two distinct registers. The **dark register** uses near-black canvas `{colors.ink-black}` with cream text `{colors.cream}` and `{colors.fire-orange}` as the singular accent — the orange is used only for emphasis (kickers, accent stats, bullet markers, the leading bar). The **orange register** flips the relationship entirely: `{colors.fire-orange}` becomes the full slide background, and the same dark `#111111` ink is used for headlines and body. There is no light/cream slide variant — the `.light` class is intentionally aliased to dark in the source. Cover and chapter slides default to the orange register; content slides default to dark.\n\nDepth is **flat**. There are no drop shadows, no elevation tokens, no soft surfaces. Hierarchy is constructed entirely from type weight, type size, and 1px hairline dividers. The `slide-chrome` and `slide-foot` borders, the `stat-card` top borders, and the `compare-panel` divider are the system's only depth signals. Everything sits on a single plane.\n\n**Density philosophy: low to medium.** Broadside is built for negative space. A correctly composed slide pairs one massive display moment with a 1–2 line caption and nothing else. Bullet lists are explicitly capped at three items — the system prizes density of impact over density of information. A slide that feels broken in this system is one where four columns of body copy compete for attention; the correct density is one statement, one rule, breathing room. Cover, chapter, and quote slides take this furthest, suppressing chrome entirely and leaving the type alone in the field.\n\n**Key Characteristics:**\n- Massive Barlow display type at weight 900 in **lowercase** — never uppercase on display elements.\n- Two-register color system: dark slides with cream text, or orange slides with dark ink. No cream/white slides exist.\n- `{colors.fire-orange}` is both accent (on dark) and environment (on orange) — never a secondary color, always *the* color.\n- Single-typeface system on Barlow + IBM Plex Mono for chrome only. No serif, no script, no third face.\n- 1px hairline dividers (`{colors.border-dark}` on dark; `rgba(17,17,17,0.2)` on orange) provide all hierarchy structure.\n- Mono kickers, mono tags, mono catalogue numbers — the chrome voice is always IBM Plex Mono uppercase.\n- Bullet lists use `/` glyph in mono as the marker, capped at three items per list.\n- Flat plane — no shadows, no rounded surfaces, no gradient backgrounds.\n- `{spacing.pad-x}` of 5.5vw + `{spacing.pad-y}` of 5.5vh creates a generous frame; type fills the remaining space.\n\n## Colors\n\n### The Two Registers\nBroadside operates on a binary surface system. Every slide is either **dark** (near-black background, cream text, orange as singular accent) or **orange** (fire-orange background, dark-ink text, dark-ink as the muted-emphasis tone). There is no cream/paper register — the `.light` class is aliased to dark in the source. Choose one register per slide and commit to it.\n\n### Palette\n- **Ink Black** (`{colors.ink-black}` — #111111): The dark register's primary canvas, and the primary text color on orange slides. Slightly softer than pure black but reads as black. This is the universal \"ink\" of the system.\n- **Ink Black Alt** (`{colors.ink-black-alt}` — #1A1A18): A secondary surface for the dark register, used when a region needs to feel slightly raised from the base canvas without breaking the flat plane.\n- **Fire Orange** (`{colors.fire-orange}` — #E85D26): The signature. On dark slides it is the accent — kickers, accent stat values, bullet markers, the leading bar in a chart, the orange opening quote mark. On orange slides it is the entire environment. Saturation is high but the hue is warm rather than electric; it reads as protest poster, not safety vest.\n- **Cream** (`{colors.cream}` — #F0ECE5): Primary text color on dark slides. Warm off-white, never pure white — the warmth softens the dark canvas and signals an editorial register.\n- **Cream Muted** (`{colors.cream-muted}` — #888880): Secondary text on dark slides — supporting body, sub-headings, the muted half of a comparison.\n- **Cream Hint** (`{colors.cream-hint}` — #505048): Tertiary text on dark — chart axis labels, source notes, slide numbers when not in mono context.\n- **Border Dark** (`{colors.border-dark}` — #282826): The 1px divider color on dark slides. Barely visible against the canvas; provides structure without drawing attention.\n- **Ink-on-orange overlays**: Dark ink at four opacities (75% / 55% / 40% / 20%) for body, hint, label, and border treatments on orange slides. These are the orange register's \"muted\" equivalents.\n\n### Defaults\n- **Default surface for content slides**: `{colors.ink-black}` (dark register).\n- **Default surface for cover, chapter, statement-payoff, and section-divider slides**: `{colors.fire-orange}` (orange register).\n- **Default headline color on dark surfaces**: `{colors.cream}`.\n- **Default headline color on orange surfaces**: `{colors.ink-black}`.\n- **Default body text color on dark surfaces**: `{colors.cream}`.\n- **Default body text color on orange surfaces**: `rgba(17, 17, 17, 0.75)`.\n- **Default accent color on dark surfaces**: `{colors.fire-orange}` — used for kickers, accent stat values, bullet markers, the lead bar in a chart, and the opening quote mark.\n- **Default accent color on orange surfaces**: `{colors.ink-black}` — the dark ink itself becomes the contrast pop.\n- **Default chrome border color**: `{colors.border-dark}` on dark; `rgba(17, 17, 17, 0.2)` on orange.\n\nThe orange register has no third color. When emphasis is needed on an orange slide, use weight or opacity contrast on the existing ink, not a new hue. Introducing a second accent color breaks the system.\n\n## Typography\n\n### Font Family\nThe system is monolingual on **Barlow** (with Noto Sans SC as the CJK fallback for identical role coverage). Every display, heading, lead, body, and caption token uses Barlow. The only secondary face is **IBM Plex Mono**, which is reserved entirely for chrome: slide numbers, kickers, tags, labels, captions in chart axes, bullet-list markers, image captions, and source notes. The contrast between Barlow's tight grotesque density and IBM Plex Mono's even monospace is the system's secondary typographic rhythm; the primary rhythm is Barlow's own weight and size axis.\n\nItalic is not used. Underline is not used. The only emphasis mechanisms are weight, size, and color (orange accent on dark, or weight-only on orange).\n\n### Display, Heading, and Body Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 13vw | Barlow | 900 | Cover-scale display — the single dominant element on a slide where type *is* the composition |\n| `{typography.fadelist-title}` | 10.5vw | Barlow | 900 | Oversized side-of-stage display in a fadelist composition |\n| `{typography.quote-mark}` | 10vw | Barlow | 900 | The opening quotation glyph on a pull-quote slide |\n| `{typography.h1}` | 7.5vw | Barlow | 800 | Chapter or section-opener title |\n| `{typography.fadelist-item}` | 7.5vw | Barlow | 900 | Each stacked word in a three-stage fadelist treatment |\n| `{typography.stat-value}` | 5.5vw | Barlow | 900 | Large data figure inside a stat card |\n| `{typography.h2}` | 4.5vw | Barlow | 700 | Primary slide headline |\n| `{typography.quote-text}` | 3.8vw | Barlow | 700 | Pull-quote body |\n| `{typography.h3}` | 2.8vw | Barlow | 600 | Sub-headline or panel title inside a comparison |\n| `{typography.lead}` | 1.6vw | Barlow | 400 | Lead paragraph, list items, prominent supporting copy |\n| `{typography.body}` | 1.2vw | Barlow | 400 | Standard body paragraph |\n| `{typography.caption}` | 0.9vw | Barlow | 400 | Image caption, footnote, source line |\n| `{typography.label}` | 0.72vw | IBM Plex Mono | 500 | Chrome labels, kickers, tags, mono notes |\n\n### Defaults\n- **Default size for a primary content slide headline**: `{typography.h2}` (4.5vw).\n- **Default size for a cover or chapter title**: `{typography.h1}` (7.5vw).\n- **Default size for the single declarative display moment on a statement slide**: `{typography.display}` (13vw).\n- **Default size for paragraph body**: `{typography.body}` (1.2vw); for the lead paragraph immediately following a headline, `{typography.lead}` (1.6vw).\n- **Default size for any inline chrome element (label, kicker, tag, slide number, axis label)**: `{typography.label}` (0.72vw).\n- **Default size for a hero numerical figure inside a stat card**: `{typography.stat-value}` (5.5vw).\n- **Default weight for any Barlow display moment (h2 and above)**: 700+; for the largest display, 900.\n- **Default weight for body**: 400.\n\nWhen unsure, reach for `{typography.h2}` for the slide's primary text moment. `{typography.h1}` is reserved for chapter/section openers; `{typography.display}` for the rare moment where type is the entire composition.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **All Barlow display, heading, lead, and body text is set in sentence case (or true title case for proper nouns).** Uppercase Barlow at display weights does not exist in this system — it reads as a different design language entirely. The lowercase-display choice is the most distinctive single decision in Broadside.\n- **All IBM Plex Mono chrome text is uppercase with at least 0.1em letter-spacing.** Mono labels, kickers, tags, slide numbers, axis labels, source notes, and bullet markers are always uppercase. The uppercase/lowercase split between Barlow body and mono chrome is the system's primary case rhythm.\n- **All display tokens carry negative letter-spacing.** `{typography.display}` and `{typography.stat-value}` at -0.04em; `{typography.h1}` and `{typography.fadelist-title}` at -0.03em or -0.04em; `{typography.h2}` and `{typography.quote-text}` at -0.02em. Barlow at display weight without negative tracking reads as untreated.\n- **All Barlow display elements run at weight 700, 800, or 900 — never lighter.** Lighter Barlow at display sizes loses the broadside density.\n- **On orange slides, every Barlow display/h1/h2/h3 element is forced to `{colors.ink-black}`.** This is the \"ink on fire\" rule — cream-colored headlines on orange do not exist.\n- **Every bulleted list item carries the orange `/` mono marker via `::before`.** Bullet discs, dashes, or numerals do not exist in this system.\n- **Every kicker is uppercase IBM Plex Mono at `{typography.label}` size in `{colors.fire-orange}`** (or dark-ink-at-55%-opacity on orange).\n\n### Typography Principles\nThe weight-900 + lowercase + negative-tracking + Barlow combination is the system's voice. Substituting uppercase, switching to weight 600, or removing the negative tracking each reads as a different system. The chrome's IBM Plex Mono uppercase + 0.14em-tracking is similarly inseparable.\n\nLine-height collapses at scale: `{typography.display}` runs at 0.88, `{typography.h1}` at 0.9, `{typography.h2}` at 1.1, and only by `{typography.lead}` does it open to 1.5+. The compression at the top of the scale is what makes the display feel monolithic.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Slides sit side-by-side in a horizontal `#deck` flexbox; navigation translates the deck container horizontally rather than swapping `display`. All sizes are viewport-relative (`vw` / `vh`) — there is no fixed 1920×1080 grid.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 5.5vw | Outer horizontal padding on every slide |\n| `{spacing.pad-y}` | 5.5vh | Outer vertical padding on every slide |\n| `{spacing.gap-lg}` | 3.5vh | Large vertical spacing between major blocks |\n| `{spacing.gap-md}` | 2vh | Standard spacing between sibling elements |\n| `{spacing.gap-sm}` | 1vh | Tight spacing — kicker to headline, chrome bar inner gap |\n\nThe padding is deliberately tighter than a generic editorial system. Broadside's massive type needs the slide's edge to feel close, not distant — the type is supposed to crowd the frame.\n\n### Chrome Frame\nThe system has an optional chrome frame consisting of two horizontal hairline bars: a top `slide-chrome` bar (label left, slide number right) and a bottom `slide-foot` bar (mirror). Both are 1px solid borders in `{colors.border-dark}` on dark slides, or `rgba(17, 17, 17, 0.2)` on orange. Internal padding/margin uses `{spacing.gap-sm}` and `{spacing.gap-md}`.\n\nThe chrome is **suppressed entirely** on the system's \"declarative\" slide types — cover, chapter, statement, quote, and end. Those slides remove all chrome and let the type occupy the whole field. Content slides (split, stats, list, compare, chart, diagram) keep the chrome.\n\nA separate `broadside-num` element (mono, ~1.1vw, low-opacity) may also be placed independently of the chrome bar as a catalogue-style slide number anchored at the top-left of orange cover/chapter slides.\n\n## Depth and Elevation\n\n### Flat Plane (Only Technique)\nBroadside is entirely flat. There are no drop shadows, no inner shadows, no blurred elevations, no rounded surface gradients. Every element sits on a single plane.\n\nHierarchy is constructed from:\n- **Type weight + size contrast** — the dominant signal.\n- **1px hairline dividers** — `slide-chrome`/`slide-foot` borders, `stat-card` top borders, `compare-panel` dividers, `bar-track` left border, `chart-baseline` baseline.\n- **Color shift** — orange against ink, ink against cream, cream-muted against cream.\n- **Negative space** — generous padding and intentional empty regions.\n\nIntroducing a `box-shadow`, a card with elevation, or a soft gradient breaks the system. The flatness is the editorial signal.\n\n## Shapes and Treatment\n\n### Border Radius\nBorder radius is **0px everywhere** except `nav-dot` (50% — the tiny navigation circles at the bottom). Cards, panels, tags, image placeholders, stat cards, chart bars — all rectangles with sharp corners.\n\n### Border Weights\n- **1px solid** — the only structural weight. Used on `slide-chrome`, `slide-foot`, `stat-card` top, `compare-panel` divider, `bar-track` left edge, `chart-baseline`, image captions, the `rule.full` divider.\n- **1px dashed** — used only on `img-placeholder` to signal \"no image wired\".\n- **2px solid** — used only on the small `rule` accent stub (36px wide) and the `chapter-rule` mark.\n\nAll borders are either `{colors.border-dark}` (dark slides), `rgba(17, 17, 17, 0.2)` (orange slides), or `{colors.fire-orange}` (the tag border on dark slides).\n\n### Decorative Element Types\n\n**Stub accent rule** — A 36×2px solid bar in `{colors.fire-orange}` (on dark) or `{colors.ink-black}` (on orange). Used as a visual \"section break\" mark above a chapter title, above a stat, or beside a kicker. Functions as Broadside's only ornament.\n\n**Mono catalogue number** — A small IBM Plex Mono numeral anchored top-left on cover/chapter slides at low opacity (`rgba(17, 17, 17, 0.45)` on orange, `{colors.cream-hint}` on dark). Reads as a publication catalogue mark.\n\n**Stat card** — A top-border-only data block: 1px solid border on top, no other borders, padded body containing `{typography.stat-value}` (large orange numeral on dark; dark ink on orange) above `{typography.body}` (label) above `{typography.caption}` (mono note in `{colors.cream-hint}` or dark-faint).\n\n**Compare panel pair** — Two equal-width panels divided by a 1px vertical border. The right panel may optionally be filled with `{colors.fire-orange}` (`compare-panel-orange`) as the \"after\" / payoff side; the left panel remains transparent over the dark canvas.\n\n**Vertical bar chart** — A `bar-track` container with `border-left` only (no other axes), bars dropping from the top with `cream-hint` fill, one bar per chart carrying the `.accent` class for fire orange. Axis labels in mono uppercase below the baseline.\n\n**Fadelist** — A SPACE10-style composition: three stacked Barlow-900 words at descending opacity (1.0 / 0.5 / 0.22) paired with one oversized display title on the opposite side of the slide. Used for \"before / during / after\" or \"past / present / future\" narratives.\n\n**Pull quote** — An oversized fire-orange `{typography.quote-mark}` glyph (with line-height 0.6 so it sits on the baseline rather than below), followed by `{typography.quote-text}` capped at ~78% of the column width, followed by a two-line `quote-attr` with name above mono role/affiliation.\n\n**Bordered mono tag** — A small inline pill in IBM Plex Mono uppercase with a 1px solid border, padded 0.3em vertical × 0.8em horizontal. The border and text are both `{colors.fire-orange}` on dark; dark ink at 40% opacity on orange.\n\n## Do's and Don'ts\n\n### Do\n- Set every Barlow display, heading, lead, and body element in sentence case. Lowercase display is Broadside's most distinctive single choice.\n- Use IBM Plex Mono uppercase at 0.1em+ tracking for every chrome element: slide numbers, kickers, labels, tags, axis labels, source notes, bullet markers.\n- Make `{colors.fire-orange}` the singular accent on dark slides — kickers, accent stat values, bullet `/` markers, the leading chart bar, the opening quote mark, the `rule` stub.\n- Make orange the *full background* on cover, chapter, and declarative-payoff slides. Use it as environment, not just accent, on those slide types.\n- Cap bullet lists at three items. Broadside prizes density of impact over density of information.\n- Apply negative letter-spacing on every Barlow display moment — -0.04em on the largest, -0.02em on h2.\n- Use 1px hairline borders (`{colors.border-dark}` on dark, `rgba(17,17,17,0.2)` on orange) for all structural division. They are the system's only hierarchy chrome.\n- Suppress slide-chrome and slide-foot on cover, chapter, statement, quote, and end slides — let the type breathe edge-to-edge.\n- Place the `broadside-num` catalogue number top-left on orange cover/chapter slides as a publication-style mark.\n- Use the `/` mono glyph in fire orange as the bullet marker on every list item.\n\n### Don't\n- Don't uppercase Barlow at display or heading weights. Uppercase Barlow at 13vw reads as a different design system entirely.\n- Don't introduce a second accent color. Orange is *the* color — adding a blue, yellow, or green accent breaks the protest-poster identity.\n- Don't add drop shadows, blurred elevations, or rounded surfaces. Broadside is strictly flat — depth comes from type and 1px lines.\n- Don't use cream-colored text on orange slides. The \"ink on fire\" rule is absolute: orange slides use `{colors.ink-black}` for headlines and body.\n- Don't pair Barlow with a serif companion. The single-typeface monolith is part of the identity.\n- Don't use border-radius on cards, tags, panels, or stat blocks. The only round shapes in the system are the small nav dots.\n- Don't pack more than one display moment into a slide. Broadside is for one statement, one rule, breathing room — not magazine-style layered composition.\n- Don't render chrome elements in Barlow. Chrome is exclusively IBM Plex Mono uppercase.\n- Don't introduce a third surface register. There are two: dark and orange. A cream/paper slide does not exist.\n- Don't use italic or underline. Emphasis is achieved through weight, size, or orange color only.\n\n## Responsive Behavior\n\nThis is a viewport-fluid 1920×1080 presentation system that uses `vw`/`vh` units throughout. There are no fixed pixel breakpoints. Every typography token, padding value, and component dimension scales linearly with the viewport.\n\n### Scaling Behavior\n- Display headline (`{typography.display}`) scales from ~138px at 1066-wide viewports to ~250px at 1920-wide.\n- Body text (`{typography.body}`) scales from ~13px to ~23px across the same range.\n- Outer padding (`{spacing.pad-x}` 5.5vw) scales from ~59px to ~106px.\n- All borders are fixed at 1px or 2px and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, `Space`, or `PageDown`.\n- Slides reverse via `ArrowLeft`, `ArrowUp`, or `PageUp`.\n- Navigation translates the deck container horizontally with a `cubic-bezier(0.77, 0, 0.175, 1)` ease at 0.8s.\n- Per-element entry animations (`data-anim=\"fade-up\"`, `fade-in`, `reveal-right`, `reveal-left`, `scale-in`) replay every time a slide becomes `.is-active`, staggered by `data-delay` (0 through 6).\n- Nav dots at bottom-center, mono slide counter at bottom-right.\n\n### Print / Export\nNot explicitly handled by the source. Each slide is a `100vw × 100vh` block; export workflows should target 1920×1080 PNG/PDF per slide.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / h1 / h2 / h3 / stat-value / quote / fadelist | Barlow 700–900 (lowercase, negative tracking) | 思源宋体 Noto Serif SC 900 |\n| Lead / body / caption | Barlow 400 | 霞鹜文楷 LXGW WenKai 400 |\n| Label / kicker / tag / slide number / bullet marker | IBM Plex Mono 500 (uppercase, 0.14em tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use **思源宋体 Noto Serif SC** weight 900 for every display and heading role; use **霞鹜文楷 LXGW WenKai** weight 400 for body and lead text; use **思源黑体 Noto Sans SC** weight 500 for chrome (kickers, labels, slide numbers, bullet markers). All three faces ship Latin glyphs that pair cleanly with Chinese characters. The serif/handwritten/sans contrast loosely echoes Broadside's display/body/mono distinction even though the source uses Barlow throughout.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500&family=LXGW+WenKai+TC&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.15–1.25 (up from the very tight 0.88–0.9 used on Barlow display). The Latin template compresses display to 0.6 on the quote-mark token; at that compression CJK characters overlap entirely. Open display to 1.0 minimum.\n- **Letter-spacing**: set to 0 on every CJK run. The template's −0.02 to −0.04em negative tracking on Barlow display overlaps CJK strokes; the +0.14em positive tracking on IBM Plex Mono chrome reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every IBM Plex Mono label, kicker, tag, slide number, and bullet marker uses `text-transform: uppercase` in the Latin original; remove for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines. Especially important for Broadside's massive display moments — a trailing 。 at 13vw is visually disruptive.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 大字海报` not `2024大字海报`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style for display; 霞鹜文楷 covers both for body. Don't let the browser fall back to Barlow mid-word for ASCII characters in a Chinese sentence.\n\n### Aesthetic Notes for This System\n\nBroadside's most distinctive single decision is **lowercase Barlow at weight 900 at 13vw display sizes**. The lowercase-display choice is what separates this system from generic brutalist decks. In CJK that signal disappears entirely — Chinese has no case. The system compensates because its identity is **80% structural + color**: the two-register surface system (dark / orange), the singular fire-orange accent, the flat plane, the 1px hairline dividers, the `/` mono bullet markers, the suppressed chrome on declarative slides, and the negative-space-as-composition philosophy all transfer cleanly.\n\nThe closest Chinese face to Barlow's \"monolithic heavy grotesque\" register is **思源宋体 weight 900** — but a serif heavy display rather than a sans heavy display. This is a deliberate register shift: heavy Chinese serif at protest-poster scale reads as \"broadside printed-poster\" (the system's actual cultural reference) more credibly than heavy Chinese sans, which reads more \"corporate signage.\" For the body face, **霞鹜文楷 LXGW WenKai** brings a handwritten/calligraphic warmth that pairs with the editorial-protest register; if a more institutional body is needed, swap to 思源宋体 400.\n\nKeep the chrome's \"stamped metadata\" voice by maintaining the small font size (0.72vw equivalent) and the orange color on kickers/labels. The IBM Plex Mono uppercase + tracked treatment loses both signals in CJK, but the orange color carries enough chrome-recognition on its own. The `/` bullet marker can stay as a Latin slash character even in Chinese contexts — it's a graphic mark, not a language element.\n\n### Known CJK Gap\n\n- **No CDN Chinese face matches Barlow's monolithic grotesque + lowercase identity.** Barlow's distinctive choice in this system is lowercase-display at heavy weights — and CJK has no equivalent expressive lever. The system's \"protest-poster lowercase-shouting\" character softens to \"heavy-serif declarative.\" The two-register color system (dark / orange) and the singular fire-orange accent carry the protest-poster identity on their own.\n- **No CDN Chinese monospace face for the chrome voice.** IBM Plex Mono's role (kickers, labels, slide numbers, `/` bullet markers) depends on monospaced rhythm + uppercase + 0.14em tracking. 思源黑体 weight 500 at 0 tracking is the closest match but loses the \"catalogue mark\" signal. Keep the orange color and the small font size; the color and scale do the chrome-recognition work.\n- **霞鹜文楷 may not load on restricted networks.** The Google Fonts CDN serves the Traditional Chinese variant (LXGW WenKai TC) reliably; the Simplified variant is also available via cn-fontsource. Always include `'Noto Serif SC', serif` in the body stack as fallback.\n- **The quote-mark glyph at 10vw with line-height 0.6 is a Latin-quote convention.** Chinese typography uses 「」 or 『』 framing rather than oversized opening-quote glyphs. For Chinese pull-quotes, consider replacing the oversized fire-orange quote-mark with a full-width 「 character at 8vw, or dropping the decorative quote glyph entirely and relying on the orange color + larger size to signal \"this is a quoted passage.\"\n\n## Iteration Guide\n\n1. Every new content slide opens with a `kicker` in mono uppercase fire orange, followed by `{typography.h2}` headline in Barlow lowercase. Don't skip the kicker — it is the system's content-slide chrome signal.\n2. Every cover, chapter, statement-payoff, or end slide uses the orange register. Don't use orange for content/data slides — orange is for declaration moments.\n3. New stat cards use the `stat-card` top-border-only pattern with `{typography.stat-value}` in orange (on dark) or ink (on orange). Don't bottom-border or fully-border stat cards.\n4. New bullet lists use the `/` mono marker in fire orange. Cap at three items.\n5. New charts use the `bar-track` vertical-bar pattern with one accent bar per chart in fire orange; remaining bars in `{colors.cream-hint}`.\n6. New quotes use the oversized fire-orange `{typography.quote-mark}` opening glyph, followed by `{typography.quote-text}` at max 78% width.\n7. Headlines on orange slides are always `{colors.ink-black}`. There are no cream headlines on orange.\n8. New tags use `tag` styling: 1px fire-orange border + fire-orange mono uppercase text on dark; dark-ink at 40% opacity on orange.\n9. The system has nine canonical layout patterns — cover, chapter, statement, split, stats, quote, list, compare, end — plus fadelist, chart, and diagram extensions. New layouts should respect the chrome/no-chrome rule based on whether the slide is declarative or content-bearing.\n\n## Known Gaps\n\n- Broadside's `.light` slide class is intentionally overridden to dark — the source comments confirm \"there are no cream/white slides.\" Any attempt to use `.light` will fall back to the dark register.\n- Noto Sans SC is in every font stack as the CJK fallback but the system was not designed with mixed Latin/CJK headlines in mind; line-height behavior on CJK display sizes may need per-slide adjustment.\n- The bullet marker glyph (`/`) is set in IBM Plex Mono via `::before` — replacing it with a different glyph requires editing CSS, not markup.\n- The bar chart `bar-fill` heights are inline-styled via `style=\"height: NN%\"` in the source; there is no data-binding layer.\n- The fadelist and bar-chart layouts are not in the canonical \"9 layout patterns\" comment block; they are extensions added beyond the documented system.\n- Image placeholders use a dashed `{colors.border-dark}` border and a mono uppercase label — replace with a real `<img src>` at the same 55vh height to maintain layout.\n- The `c-fg-light` token exists in the palette (`#111111`) for \"light theme primary text\" but since the light theme is suppressed, this token is effectively unused in the rendered output.\n- The system loads three Google Fonts families (Barlow, IBM Plex Mono, Noto Sans SC) with multiple weights — initial render requires successful font load to avoid Times New Roman fallback.\n","frontmatter":{"version":"alpha","name":"Broadside","description":"A protest-poster editorial system built on massive Barlow type and a single fire-orange environment color. The aesthetic is \"ink on fire\" — dark slides for documentation, orange slides for declaration. Display type is enormous (13vw, roughly 187px at 1440 width) in weight 900 lowercase, treating words as graphic elements rather than reading copy. The cultural reference is broadside printing, SPACE10 reports, and Wim Crouwel grids reinterpreted with one loud color and zero decoration.","colors":{"ink-black":"#111111","ink-black-alt":"#1A1A18","fire-orange":"#E85D26","cream":"#F0ECE5","cream-muted":"#888880","cream-hint":"#505048","border-dark":"#282826","ink-on-orange-muted":"rgba(17, 17, 17, 0.75)","ink-on-orange-hint":"rgba(17, 17, 17, 0.55)","ink-on-orange-faint":"rgba(17, 17, 17, 0.40)","ink-on-orange-border":"rgba(17, 17, 17, 0.20)"},"color-aliases":{"c-bg":"ink-black","c-bg-alt":"ink-black-alt","c-bg-light":"ink-black","c-bg-orange":"fire-orange","c-fg":"cream","c-fg-2":"cream-muted","c-fg-3":"cream-hint","c-accent":"fire-orange","c-border":"border-dark"},"typography":{"display":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"13vw","fontWeight":900,"lineHeight":0.88,"letterSpacing":"-0.04em"},"h1":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"7.5vw","fontWeight":800,"lineHeight":0.9,"letterSpacing":"-0.03em"},"h2":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"4.5vw","fontWeight":700,"lineHeight":1.1,"letterSpacing":"-0.02em"},"h3":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"2.8vw","fontWeight":600,"lineHeight":1.2},"lead":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"1.6vw","fontWeight":400,"lineHeight":1.5},"body":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"1.2vw","fontWeight":400,"lineHeight":1.6},"caption":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"0.9vw","fontWeight":400,"lineHeight":1.5},"label":{"fontFamily":"IBM Plex Mono, monospace","fontSize":"0.72vw","fontWeight":500,"lineHeight":1,"letterSpacing":"0.14em","textTransform":"uppercase"},"stat-value":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"5.5vw","fontWeight":900,"lineHeight":1,"letterSpacing":"-0.04em"},"quote-mark":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"10vw","fontWeight":900,"lineHeight":0.6},"quote-text":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"3.8vw","fontWeight":700,"lineHeight":1.15,"letterSpacing":"-0.02em"},"fadelist-item":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"7.5vw","fontWeight":900,"lineHeight":1,"letterSpacing":"-0.03em"},"fadelist-title":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"10.5vw","fontWeight":900,"lineHeight":0.9,"letterSpacing":"-0.04em"}},"spacing":{"pad-x":"5.5vw","pad-y":"5.5vh","gap-lg":"3.5vh","gap-md":"2vh","gap-sm":"1vh"},"canvas":{"width":"100vw","height":"100vh"},"motion":{"ease-slide":"cubic-bezier(0.77, 0, 0.175, 1)","dur-slide":"0.8s","ease-enter":"cubic-bezier(0.16, 1, 0.3, 1)","dur-enter":"0.5s"},"components":{"slide-chrome":{"layout":"flex row, justify space-between","paddingBottom":"{spacing.gap-sm}","borderBottom":"1px solid {colors.border-dark}","marginBottom":"{spacing.gap-md}","description":"Top chrome bar carrying section label on left, slide number/meta on right. Suppressed on cover, chapter, quote, and end slides."},"slide-foot":{"layout":"flex row, justify space-between","paddingTop":"{spacing.gap-sm}","borderTop":"1px solid {colors.border-dark}","marginTop":"{spacing.gap-md}","description":"Bottom chrome bar, mirrors top chrome. Same suppression rules."},"rule":{"width":"36px","height":"2px","background":"{colors.fire-orange}","description":"Stub accent rule. On orange slides this flips to {colors.ink-black}."},"rule-full":{"width":"100%","height":"2px","background":"{colors.border-dark}"},"kicker":{"fontFamily":"{typography.label.fontFamily}","fontSize":"{typography.label.fontSize}","letterSpacing":"0.14em","textTransform":"uppercase","color":"{colors.fire-orange}","description":"Eyebrow above headlines. Orange on dark; dark-ink-at-55%-opacity on orange."},"tag":{"fontFamily":"{typography.label.fontFamily}","fontSize":"{typography.label.fontSize}","letterSpacing":"0.14em","textTransform":"uppercase","color":"{colors.fire-orange}","border":"1px solid {colors.fire-orange}","padding":"0.3em 0.8em","description":"Bordered mono tag. On orange slides flips to dark ink with 40%-opacity dark border."},"broadside-num":{"fontFamily":"IBM Plex Mono, monospace","fontSize":"1.1vw","fontWeight":500,"letterSpacing":"0.1em","color":"rgba(17, 17, 17, 0.45)","description":"Catalogue-style slide number, typically anchored top-left on orange slides. On dark slides, color shifts to {colors.cream-hint}."},"stat-card":{"borderTop":"1px solid {colors.border-dark}","padding":"{spacing.gap-md} {spacing.gap-md} {spacing.gap-md} 0","description":"Top-border-only data card. Big orange numeral above body label above mono note."},"bullet-marker":{"content":"/","color":"{colors.fire-orange}","fontFamily":"IBM Plex Mono, monospace","fontWeight":700,"description":"Slash glyph rendered via ::before on every bullet item. Orange on dark, dark-at-45%-opacity on orange."},"compare-panel-left":{"paddingRight":"calc({spacing.pad-x} * 0.55)","borderRight":"1px solid {colors.border-dark}"},"compare-panel-right":{"paddingLeft":"calc({spacing.pad-x} * 0.55)"},"compare-panel-orange":{"background":"{colors.fire-orange}","description":"Right-half panel filled with fire orange — the 'after' or payoff side in compare layouts."},"bar-track":{"height":"30vh","borderLeft":"1px solid {colors.border-dark}","description":"Vertical bar chart container. Bars are cream-hint by default; one bar per chart gets the .accent class for fire orange."},"bar-fill":{"background":"{colors.cream-hint}"},"bar-fill-accent":{"background":"{colors.fire-orange}"},"img-placeholder":{"height":"55vh","background":"rgba(255, 255, 255, 0.04)","border":"1px dashed {colors.border-dark}","textTransform":"uppercase","letterSpacing":"0.12em","description":"Dashed-border placeholder shown when no image is wired. Same 55vh footprint as a real img."},"fadelist-stack":{"description":"Vertical stack of three display-weight words, opacities 1.0 / 0.5 / 0.22 top-to-bottom. The SPACE10 'before/during/after' treatment."}}},"isInternal":false,"tokens":9742,"sizeBytes":39004},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/preview.md","title":"Broadside Skill","category":"anthropic-skill","format":"markdown","content":"# Broadside Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/broadside/design.md`\n- Preview card: `bold-template-pack/templates/broadside/preview.md`\n\n## Selection Metadata\n\n- Slug: `broadside`\n- Tagline: Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack.\n- Mood: editorial, dramatic, loud, newspaper\n- Tone: graphic, punchy, literary, considered\n- Formality: medium-high\n- Density: medium\n- Scheme: dark\n- Best for: Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements. Also a striking pick for tech, research, or business decks that want a dramatic single-accent editorial feel.\n- Avoid for: Decks that need to feel quiet, warm, or institutionally traditional — the dark canvas with fire-orange accent commits to drama.\n\n## Visual Snapshot\n\nA protest-poster editorial system built on massive Barlow type and a single fire-orange environment color. The aesthetic is \"ink on fire\" — dark slides for documentation, orange slides for declaration. Display type is enormous (13vw, roughly 187px at 1440 width) in weight 900 lowercase, treating words as graphic elements rather than reading copy. The cultural reference is broadside printing, SPACE10 reports, and Wim Crouwel grids reinterpreted with one loud color and zero decoration.\n\nBroadside is a protest-poster editorial system. The defining premise: type is so large it stops behaving as text and starts behaving as graphic primitive. Display sizes at 13vw ({typography.display}) put a single word at roughly 187px on a 1440-wide screen — wide enough that the eye scans letterforms before reading. This is the system's primary expressive instrument.\n\n## Preview Ingredients\n\n- Palette: ink-black #111111; ink-black-alt #1A1A18; fire-orange #E85D26; cream #F0ECE5; cream-muted #888880; cream-hint #505048; border-dark #282826\n- Typography: Barlow; IBM Plex Mono; {typography.label.fontFamily}\n- Signature move: Massive Barlow display type at weight 900 in lowercase — never uppercase on display elements.\n- Signature move: Two-register color system: dark slides with cream text, or orange slides with dark ink. No cream/white slides exist.\n- Signature move: {colors.fire-orange} is both accent (on dark) and environment (on orange) — never a secondary color, always *the* color.\n- Signature move: Single-typeface system on Barlow + IBM Plex Mono for chrome only. No serif, no script, no third face.\n- Signature move: 1px hairline dividers ({colors.border-dark} on dark; rgba(17,17,17,0.2) on orange) provide all hierarchy structure.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":962,"sizeBytes":4296},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/design.md","title":"Capsule","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Capsule\ndescription: A playful editorial system built on pill-shaped containers, a sun-bleached cream canvas, and a nine-color candy palette. Bodoni Moda serif headlines pair with Space Grotesk body to suggest a literary magazine that took a holiday at a 1970s ice-cream parlor. Every container that holds text is a pill (border-radius 9999px) outlined with a 2px ink stroke, casting a soft 6–12px offset shadow. The aesthetic is \"Memphis-meets-editorial\" — confident typography, generous bordered shapes, and decorative floating pills as atmospheric wallpaper.\n\ncolors:\n  cream: \"#F5F5F0\"\n  ink: \"#1A1A1A\"\n  outline: \"#1E1E1E\"\n  white: \"#FFFFFF\"\n  coral: \"#E85D4E\"\n  lime: \"#C4D94E\"\n  lavender: \"#C5B5E0\"\n  sky: \"#8BB4F7\"\n  violet: \"#A06CE8\"\n  yellow: \"#F2D160\"\n  peach: \"#F5B895\"\n  mint: \"#A8E6CF\"\n  shadow: \"rgba(26, 26, 26, 0.08)\"\n\ncolor-aliases:\n  bg: cream\n  fg: ink\n  outline: outline                  # same hue family as ink; reserved for stroke role\n\ntypography:\n  display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(3rem, 8vw, 7rem)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.02em\n  closing-display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2.5rem, 6vw, 5rem)\"\n    fontWeight: 800\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n  headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2rem, 4vw, 3.5rem)\"\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.02em\n  section-headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.01em\n  quote-display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(1.6rem, 3.5vw, 3rem)\"\n    fontWeight: 600\n    lineHeight: 1.35\n    letterSpacing: -0.01em\n  card-headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 700\n    lineHeight: 1.1\n  stat-number:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2rem, 3.5vw, 3rem)\"\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.03em\n  orbit-numeral:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"2.5rem\"\n    fontWeight: 700\n    lineHeight: 1\n  body:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.2vw, 1.15rem)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-sm:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.9rem\"\n    fontWeight: 400\n    lineHeight: 1.55\n  subtitle:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"clamp(0.8rem, 1.5vw, 1.1rem)\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  pill-text-md:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  pill-text-sm:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.7rem\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  label:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  mini-label:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.65rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n\nspacing:\n  pad-lg: \"3rem 4rem\"\n  pad-md: \"2rem\"\n  gap-xl: \"4rem\"\n  gap-lg: \"3rem\"\n  gap-md: \"2rem\"\n  gap-sm: \"1.5rem\"\n  gap-xs: \"0.75rem\"\n  card-pad: \"2.5rem 2rem\"\n  pill-pad-lg: \"1.5rem 3.5rem\"\n  pill-pad-md: \"1rem 2.5rem\"\n  pill-pad-sm: \"0.4rem 1.2rem\"\n  pill-pad-xs: \"0.35rem 1rem\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  pill:\n    borderRadius: 9999px\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontWeight: 500\n    letterSpacing: 0.02em\n    whiteSpace: nowrap\n    description: \"The universal container shape. Any text container — chip, button, label, statement-highlight, stat tile, card, bar — is a pill with 2px outline. Background can be any palette accent or white.\"\n  pill-card:\n    background: \"{colors.white}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: \"2rem\"\n    padding: \"{spacing.card-pad}\"\n    boxShadow: \"8px 8px 0 {colors.shadow}\"\n    description: \"Larger pill-shaped card (slightly squared corners at 2rem rather than full pill) for content blocks. Always white background, always shadowed.\"\n  stat-pill:\n    background: \"{colors.white}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: \"2rem\"\n    padding: \"2rem 1.5rem\"\n    boxShadow: \"6px 6px 0 {colors.shadow}\"\n    description: \"Stat tile — pill-shaped white card containing a colored stat number, label, and a tiny accent bar.\"\n  bar-track:\n    height: 36px\n    background: \"{colors.cream}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: 9999px\n    overflow: hidden\n    description: \"Horizontal bar chart track shaped as a pill. Fills use the candy palette.\"\n  bar-fill:\n    height: \"100%\"\n    borderRadius: 9999px\n    borderRight: \"2px solid {colors.outline}\"\n    description: \"Inner bar pill with the value label printed at right edge inside the fill.\"\n  accent-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.coral}\"\n    borderRadius: 9999px\n    description: \"Pill-shaped 60×4 accent rule. Default color coral; closing-context variant uses 80×4.\"\n  card-icon:\n    width: 60px\n    height: 60px\n    borderRadius: \"50%\"\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 700\n    description: \"Circular pill icon (60px) used as a card mark. Background is an accent color; contains a 1–3 character Roman numeral or letter.\"\n  step-node:\n    width: 56px\n    height: 56px\n    borderRadius: \"50%\"\n    border: \"2px solid {colors.outline}\"\n    background: \"{colors.white}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.3rem\"\n    fontWeight: 700\n    boxShadow: \"4px 4px 0 {colors.shadow}\"\n    description: \"Circular pill node (56px) used as a timeline step or sequence marker. Step accent color appears as filled-pill class on the node.\"\n  orbit-center:\n    width: 160px\n    height: 160px\n    borderRadius: \"50%\"\n    background: \"{colors.lime}\"\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"2.5rem\"\n    fontWeight: 700\n    description: \"Large circular pill (160px) used as the gravitational anchor of an orbit composition. Default fill lime; small satellite pills orbit around it.\"\n  diagram-node:\n    borderRadius: 9999px\n    border: \"2px solid {colors.outline}\"\n    padding: \"1rem 2rem\"\n    boxShadow: \"6px 6px 0 {colors.shadow}\"\n    background: \"{colors.white}\"\n    description: \"Flow-diagram node — pill-shaped container with shadow. Connected by 50×4 ink connectors with triangular arrowheads.\"\n  diagram-connector:\n    width: 50px\n    height: 4px\n    background: \"{colors.outline}\"\n    description: \"Solid 50×4 ink bar with a triangular arrowhead at the right end, connecting two diagram nodes inline.\"\n  visual-frame:\n    borderRadius: \"2rem\"\n    border: \"2px solid {colors.outline}\"\n    boxShadow: \"12px 12px 0 {colors.shadow}\"\n    description: \"Large image/illustration frame — slightly squared pill (2rem radius) with thicker 12px offset shadow. Often filled with a tri-stop linear gradient and a dot-pattern overlay.\"\n  grain-overlay:\n    position: fixed\n    inset: 0\n    pointerEvents: none\n    zIndex: 9999\n    opacity: 0.04\n    mixBlendMode: multiply\n    backgroundImage: \"fractalNoise SVG\"\n    description: \"Subtle film-grain noise overlay applied to the entire viewport at 4% opacity in multiply blend mode. Always present, never absent.\"\n  radial-glow:\n    description: \"Soft radial gradient wash anchored to a corner or center of a slide background. Uses one of the candy palette colors at 6–15% opacity, blended into the cream canvas. Provides atmospheric warmth without changing the surface color.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCapsule is a **playful editorial system** whose defining structural premise is the **pill**: every text container is a pill, every icon is a pill, every bar is a pill, every node in a diagram is a pill. The `border-radius: 9999px` rule applies to virtually all UI elements, with larger panels softening to a 2rem radius. Combined with the 2px ink outline that wraps every shape, the result is a system where containers feel inflated, friendly, and graphically distinct — a nod to Memphis design and late-70s ice-cream-parlor signage without abandoning editorial discipline.\n\nThe typeface stack is a deliberate two-face conversation. **Bodoni Moda** — a high-contrast didone serif — carries every display moment, every section headline, every stat numeral, every card title, every quote. Bodoni's tall capitals and thin-thick stroke contrast give the headlines their editorial weight and a touch of fashion-magazine glamour. **Space Grotesk** — a contemporary geometric sans — carries every body paragraph, every label, every pill text, every subtitle. The serif/grotesk pairing creates the system's primary typographic rhythm: glamorous serif statements + clean grotesk supporting structure.\n\nThe palette runs nine colors plus three neutrals. The canvas is `{colors.cream}` — a warm sun-bleached off-white that signals \"magazine paper\" rather than \"screen white.\" The ink is `{colors.ink}`, used for body text, headlines, and the universal outline. The seven candy accents — `{colors.coral}`, `{colors.lime}`, `{colors.lavender}`, `{colors.sky}`, `{colors.violet}`, `{colors.yellow}`, `{colors.peach}`, plus `{colors.mint}` — are interchangeable. They fill pills, color stat numbers, fill bar charts, and float as decorative atmosphere. There is no semantic mapping: no color means \"warning,\" none means \"success.\" Each accent is chosen for compositional balance, not meaning.\n\nDepth comes from **soft hard-offset shadows** at 4px, 6px, 8px, and 12px in a low-opacity ink color (`{colors.shadow}` = `rgba(26, 26, 26, 0.08)`). Unlike a true brutalist shadow, these are slightly transparent — they read as \"lifted\" rather than \"stamped.\" Combined with the 2px outline, every pill feels like it's floating just above the cream canvas. There is no use of blurred drop shadows; the offset is always solid, always to the bottom-right.\n\n**Density philosophy: medium-high atmospheric.** Capsule slides feel populated. The system is built around the idea that decorative floating pills should orbit the actual content as wallpaper — small colored pills tilted at 5–25° rotations across the slide background, each containing a single uppercase word. These atmospheric pills are non-functional; they are typographic confetti. A correctly composed slide pairs one or two substantive content blocks (a pill-card, a stat grid, a diagram) with 5–8 floating decorative pills around the edges. A slide that feels broken in Capsule is one with empty corners or unrelieved cream space — the candy palette wants to participate even where the content doesn't strictly require it.\n\n**Key Characteristics:**\n- Universal pill geometry — `border-radius: 9999px` for small containers, 2rem for larger cards/frames.\n- 2px solid `{colors.outline}` stroke wraps every pill, icon, and card.\n- Bodoni Moda serif for every display/headline/stat; Space Grotesk sans for every body/label/pill text.\n- Sun-bleached cream canvas `{colors.cream}` with soft radial glows in candy accent colors at 6–15% opacity for background atmosphere.\n- Hard-offset shadows in low-opacity ink (`{colors.shadow}`) at 4/6/8/12px offsets, always solid, always bottom-right.\n- Nine-color candy accent palette used interchangeably — no semantic mapping.\n- Decorative floating pills tilted at 5–25° rotations populate slide backgrounds as atmospheric wallpaper.\n- A persistent fractal-noise grain overlay (4% opacity, multiply blend) sits over the entire viewport at all times.\n- Full-screen vertical nav-dot column at right, mono slide counter at bottom-right.\n\n## Colors\n\n### Canvas & Ink\n- **Cream** (`{colors.cream}` — #F5F5F0): The canvas. Warm sun-bleached off-white. Used as default slide background, default bar-track interior, and any neutral region that wants paper warmth without being pure white.\n- **Ink** (`{colors.ink}` — #1A1A1A): The primary text color. Used for headlines, body, and (under the alias `outline`) the universal stroke.\n- **Outline** (`{colors.outline}` — #1E1E1E): Functionally identical to ink; reserved as the stroke color on every pill, card, icon, and frame for semantic clarity.\n- **White** (`{colors.white}` — #FFFFFF): True white. Used as the default fill for pill-cards, stat-pills, diagram nodes, and any pill that needs the highest contrast against the cream canvas. White pills always carry the 2px ink outline.\n\n### Candy Accents\n- **Coral** (`{colors.coral}` — #E85D4E): Warm orange-red. The most \"voice-y\" of the accents; used as a default accent-line color, default pill-card icon fill on the first card in a sequence, and the most frequent stat-number color.\n- **Lime** (`{colors.lime}` — #C4D94E): Vivid chartreuse-green. Pairs well with coral; default fill for orbit-center anchors and frequent stat-number color.\n- **Lavender** (`{colors.lavender}` — #C5B5E0): Soft lilac-purple. Used as a calming pill fill in headers and as a frequent quote-highlight color.\n- **Sky** (`{colors.sky}` — #8BB4F7): Mid-saturation cornflower blue. The default \"third accent\" — sits comfortably next to coral and lime in a 3-card grid.\n- **Violet** (`{colors.violet}` — #A06CE8): Deeper purple. Used when a slide already has lavender as one accent and needs a second purple-family pop.\n- **Yellow** (`{colors.yellow}` — #F2D160): Warm marigold. The default fill for title pills, closing pills, and any pill that should read as \"important / featured.\"\n- **Peach** (`{colors.peach}` — #F5B895): Pale apricot. The softest accent; used in floating decorative pills and circular decorative spots.\n- **Mint** (`{colors.mint}` — #A8E6CF): Pale aqua-green. Used most often inside the linear-gradient visual frame and in lower-emphasis decorative pills.\n- **Shadow** (`{colors.shadow}` — `rgba(26, 26, 26, 0.08)`): The universal soft hard-offset shadow color. Never use a different shadow color.\n\n### Defaults\n- **Default slide surface**: `{colors.cream}`.\n- **Default headline color**: `{colors.ink}` — Bodoni serif headlines are always ink, never colored. Color appears only on stat numerals and inside accent pills.\n- **Default body text color**: `{colors.ink}` rendered at opacity 0.6–0.7 to soften it against the cream canvas.\n- **Default outline color**: `{colors.outline}` (≈ ink) — 2px on every pill/card/icon, no exceptions.\n- **Default card fill**: `{colors.white}`.\n- **Default accent-line color**: `{colors.coral}`.\n- **Default title-pill fill**: `{colors.yellow}`.\n- **Default closing-pill fill**: `{colors.yellow}`.\n- **Default orbit-center fill**: `{colors.lime}`.\n- **Default first accent in a 3- or 4-accent sequence**: coral → lime → sky → violet (rotated when more colors are needed). The sequence is the system's \"Roy G. Biv\"; it gives the agent a deterministic order to reach for so the candy palette doesn't feel random.\n- **Default decorative pill background opacity**: full saturation (no fading). The floating pills are loud on purpose.\n\nAccent colors have no semantic role. Choose accents based on warm/cool balance and adjacency, not meaning. When three accents appear together, pair a warm (coral/yellow/peach) with a cool (sky/lavender/violet/mint) with a neutral-bright (lime). Avoid placing two same-family accents adjacent (two purples, two greens, two warms).\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face conversation**: `Bodoni Moda` (serif, weights 400–900, opsz axis) carries every display and headline; `Space Grotesk` (sans, weights 300–700) carries every body, label, and pill text. There is no third face. Both families are loaded from Google Fonts at variable-axis weights.\n\nBodoni Moda's high contrast and didone modulation give the system its editorial-glamour register; the thin-thick stroke contrast is most pronounced at large sizes, so display weights should always be 700+ to maintain stroke presence. Space Grotesk's geometric grotesque carries clean, modern body — it never tries to compete with the Bodoni headlines.\n\nAn inline `<em>` inside a Bodoni headline keeps Bodoni and shifts to italic. A `quote-highlight` inside a Bodoni quote body switches the wrapped word to a pill (Space Grotesk uppercase pill text on a candy fill) for visual emphasis.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3rem, 8vw, 7rem) | Bodoni Moda | 800 | Largest cover/title display |\n| `{typography.closing-display}` | clamp(2.5rem, 6vw, 5rem) | Bodoni Moda | 800 | Conclusive declarative headline |\n| `{typography.headline}` | clamp(2rem, 4vw, 3.5rem) | Bodoni Moda | 700 | Primary slide headline on split or two-column layouts |\n| `{typography.section-headline}` | clamp(1.8rem, 3.5vw, 3rem) | Bodoni Moda | 700 | Section-opening or centered headline above cards/charts |\n| `{typography.quote-display}` | clamp(1.6rem, 3.5vw, 3rem) | Bodoni Moda | 600 | Pull-quote body |\n| `{typography.card-headline}` | 1.5rem | Bodoni Moda | 700 | Card or pillar-block title |\n| `{typography.stat-number}` | clamp(2rem, 3.5vw, 3rem) | Bodoni Moda | 800 | Large numerical stat figure |\n| `{typography.orbit-numeral}` | 2.5rem | Bodoni Moda | 700 | Centered ordinal inside the orbit-center circle |\n| `{typography.body}` | clamp(0.95rem, 1.2vw, 1.15rem) | Space Grotesk | 400 | Paragraph body |\n| `{typography.body-sm}` | 0.9rem | Space Grotesk | 400 | Compact body inside a card |\n| `{typography.subtitle}` | clamp(0.8rem, 1.5vw, 1.1rem) | Space Grotesk | 400 | Uppercase tracked subtitle below a display headline |\n| `{typography.pill-text-md}` | 0.85rem | Space Grotesk | 600 | Text inside title/closing pills |\n| `{typography.pill-text-sm}` | 0.7rem | Space Grotesk | 600 | Text inside small floating decorative pills |\n| `{typography.label}` | 0.75rem | Space Grotesk | 500 | Header tag pills, attribution lines |\n| `{typography.mini-label}` | 0.65rem | Space Grotesk | 500 | Mini-pill chips in a tag cluster |\n\n### Defaults\n- **Default size for the primary section headline**: `{typography.section-headline}` (clamp 1.8–3rem). For two-column or split layouts, `{typography.headline}` (clamp 2–3.5rem).\n- **Default size for a cover or opening display moment**: `{typography.display}` (clamp 3–7rem).\n- **Default size for paragraph body**: `{typography.body}` (clamp 0.95–1.15rem).\n- **Default size for any inline label or chip**: `{typography.label}` (0.75rem).\n- **Default weight for any Bodoni display element**: 700 minimum; 800 for the largest display.\n- **Default weight for any Space Grotesk body element**: 400.\n- **Default size for a hero stat figure**: `{typography.stat-number}` (clamp 2–3rem).\n\nWhen unsure, reach for `{typography.section-headline}` for the slide's primary text moment, not `{typography.card-headline}` (which is for block-level titles within a card).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every display, headline, stat-number, card-headline, and quote-display element is set in Bodoni Moda.** Space Grotesk does not appear in any display role.\n- **Every body, subtitle, pill-text, label, and chip element is set in Space Grotesk.** Bodoni does not appear in body or chip roles.\n- **Every Bodoni display element uses negative letter-spacing** (-0.01em to -0.03em). Bodoni at large sizes with default tracking reads loose.\n- **Every Space Grotesk subtitle, label, pill-text, and chip element is uppercase with 0.08em+ tracking.** The uppercase + tracking is the small-text identity signal.\n- **Bodoni headlines are always rendered in `{colors.ink}`, never in a candy color.** Color appears on stat numerals (e.g., `color: {colors.coral}`) but not on serif headlines. The exception is the orbit-center numeral, which sits inside a colored circular pill but the numeral itself remains ink.\n- **Every pill element carries the 2px solid outline.** A pill without its 2px ink stroke breaks the system.\n- **Every container with `border-radius: 9999px` or `2rem` carries either the 2px outline or sits inside an already-outlined parent.** Unoutlined rounded containers do not exist.\n- **Every card or elevated pill carries a hard-offset shadow** at 4/6/8/12px in `{colors.shadow}`. Smaller pills get 4–6px; cards get 8px; visual frames get 12px.\n\n### Typography Principles\nThe Bodoni-headline + Space-Grotesk-body pairing is the primary rhythm; switching either face breaks the system. Italic appears only inside pull-quote bodies via the `<em>` tag (Bodoni italic). Underline is not used. Pill-encapsulation is the system's primary emphasis mechanism: wrapping a phrase in a candy-filled pill is the equivalent of bold-italicizing it in a traditional editorial system.\n\nLine-height tightens at scale: `{typography.display}` at 0.9, `{typography.headline}` at 1.05, body at 1.6. The tight display + open body contrast is what gives the system its editorial breathing rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport, with one slide carrying `.active` (opacity 1) at a time. Transitions are 0.6s opacity fades via `cubic-bezier(0.4, 0, 0.2, 1)`. All sizes use rem units inside CSS `clamp()` so the layout scales fluidly.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-lg}` | 3rem 4rem | Default slide outer padding |\n| `{spacing.gap-xl}` | 4rem | Major two-column gutter |\n| `{spacing.gap-lg}` | 3rem | Section-block spacing |\n| `{spacing.gap-md}` | 2rem | Standard inter-element spacing |\n| `{spacing.gap-sm}` | 1.5rem | Tight card-internal spacing |\n| `{spacing.gap-xs}` | 0.75rem | Inline gap between mini-pills |\n| `{spacing.card-pad}` | 2.5rem 2rem | Default pillar-card padding |\n| `{spacing.pill-pad-lg}` | 1.5rem 3.5rem | Title-pill / closing-pill padding |\n| `{spacing.pill-pad-md}` | 1rem 2.5rem | Featured pill padding |\n| `{spacing.pill-pad-sm}` | 0.4rem 1.2rem | Header-tag pill padding |\n| `{spacing.pill-pad-xs}` | 0.35rem 1rem | Mini-pill chip padding |\n\n### Atmospheric Background Layer\nEvery slide layers two atmospheric treatments on top of the cream canvas:\n1. **Radial glows** — one to three soft `radial-gradient(ellipse at X% Y%, rgba(accent, 0.06–0.15), transparent)` washes anchored to corners or center. These tint the canvas warmly without changing its surface color.\n2. **Grain overlay** — a fractal-noise SVG fixed at `inset: 0`, opacity 0.04, mix-blend-mode multiply, z-index 9999. Always present, always identical, never removed.\n\nThese are not decorative options; they are baseline canvas treatments that should appear on every slide.\n\n### Decorative Pill Wallpaper\nA signature: small decorative pills (60–160px wide, 35–90px tall) tilted at -20° to +25° rotations are placed absolutely on slide backgrounds as atmospheric typographic confetti. Each contains a single uppercase Space-Grotesk word and a candy fill. Some are circular (border-radius 50%) instead of capsule-shaped. They have no informational role — they are visual atmosphere. Typical count: 5–8 per slide on cover/closing/quote layouts; 0 on dense data layouts.\n\n## Depth and Elevation\n\n### Soft Hard-Offset Shadow\nThe system's only depth technique is a **solid hard-offset shadow** in low-opacity ink:\n- **4px 4px 0** — small elevated nodes (step nodes, small pills).\n- **6px 6px 0** — orbit pills, stat-pills, diagram nodes.\n- **8px 8px 0** — pillar-cards, chart container.\n- **12px 12px 0** — large visual frame (the most lifted element in the system).\n\nAll shadows use `{colors.shadow}` (`rgba(26, 26, 26, 0.08)`). The opacity is the key distinction from a brutalist hard shadow: at 8% the shadow reads as a soft lift rather than a stamped offset. The offset direction is always bottom-right.\n\n### Outline-Based Depth\nMost apparent depth comes from the 2px ink outline that wraps every pill against the cream canvas. The outline does much of the elevation work; the shadow adds the lift on cards and elevated pills.\n\n### Flat Decorative Layer\nDecorative floating pills and radial glows are flat — they cast no shadow. The shadow is reserved for content-bearing containers (cards, stat tiles, diagram nodes, visual frames). This visual rule separates \"content\" from \"atmosphere\" at a glance.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 9999px (full pill) | All small pills: title pill, closing pill, decorative pills, header tags, mini chips, bar tracks, bar fills, accent lines, orbit pills, floating pills, quote highlights, diagram nodes |\n| 2rem (32px) | Larger cards: pillar-cards, stat-pills, chart container, visual frame |\n| 1.5rem (24px) | Inner dashed frame inside the visual frame |\n| 50% (circle) | Circular pills: card-icon (60px), step-node (56px), orbit-center (160px), nav dots (10px) |\n| 0 | The grain overlay; the slide itself; the candy-color gradient regions inside a visual frame |\n\nThe system has **no sharp-cornered text containers**. Every container that holds text or icon content is rounded.\n\n### Border Weights\n- **2px solid `{colors.outline}`** — the universal stroke. Used on every pill, card, icon, frame, bar track, nav dot.\n- **2px dashed `{colors.outline}`** — used only on the inner frame inside the visual-frame component (a decorative interior border indicating \"image placeholder\").\n- **4px solid ink** — used only on the timeline-line that connects sequential step nodes horizontally.\n\nAll borders are `{colors.outline}`. Colored borders do not exist in the system.\n\n### Decorative Element Types\n\n**Decorative floating pill** — A small (60–160px wide × 35–90px tall) pill or circle in a candy fill, tilted at -20° to +25° rotation, positioned absolutely on the slide background. Contains a single uppercase Space-Grotesk word at 0.55–0.85rem. Functions as typographic confetti / atmospheric wallpaper. Five to eight per declarative slide.\n\n**Header tag pill** — A small (≈0.7rem text) pill in a candy fill (typically lavender) with `pill-pad-sm` padding, centered above a section headline. The system's section-tag chip.\n\n**Title pill / closing pill** — A medium pill (`pill-pad-lg`) in `{colors.yellow}` carrying uppercase Space-Grotesk text. Placed above the largest display headline on cover and closing slides.\n\n**Pillar-card** — A 2rem-radius white card with 2px outline and 8px offset shadow, containing a circular `card-icon` at the top, a Bodoni `card-headline`, and a Space-Grotesk body paragraph. Used in 3-card and 4-card grids.\n\n**Stat-pill** — A 2rem-radius white card containing a colored Bodoni stat number, a small uppercase label, and a tiny 40×4 accent bar at the bottom. Sits in 3- or 4-column stat grids.\n\n**Bar-track** — A 36px-tall horizontal pill (9999px radius) with 2px outline and cream interior. The fill is a child pill in a candy color with the value label printed at the right edge inside the fill.\n\n**Orbit composition** — A central 160px circular pill in `{colors.lime}` carrying a Bodoni ordinal, surrounded by 4–6 small `orbit-pill` satellites in candy fills, each tilted, positioned at 8–45% / 8–45% offsets, with 6px shadows.\n\n**Diagram-node + connector** — Pill-shaped flow node (`diagram-node`) with 6px shadow, connected to the next node by a 50×4 ink bar with a triangular arrowhead. Nodes may carry candy fills; arrows are always ink.\n\n**Visual-frame** — A 2rem-radius large frame with 12px offset shadow, filled with a tri-stop linear gradient (typically lavender → sky → mint), overlaid with a dot-grid pattern at 0.15 opacity, with an inner dashed border indicating \"image placeholder.\" Used for hero visual moments.\n\n**Quote-highlight** — An inline pill in lime or sky with 2px outline, wrapped around a single phrase inside a Bodoni quote body. The system's primary inline emphasis mechanism.\n\n**Accent line** — A 60×4 (or 80×4 on closing slides) horizontal pill in `{colors.coral}` used as a sub-headline accent rule.\n\n## Do's and Don'ts\n\n### Do\n- Make every text container a pill — 9999px radius for small pills, 2rem radius for larger cards. The pill geometry is the system's most distinctive single trait.\n- Apply the 2px `{colors.outline}` stroke to every pill, card, icon, and frame. The outline is what makes the candy palette read as graphic rather than candy.\n- Set every Bodoni display element in `{colors.ink}`, never in a candy color. Color belongs on stat numerals and pill fills, not on serif headlines.\n- Use Bodoni Moda for every headline/stat/card title; use Space Grotesk for every body/label/pill. The two-face split is non-negotiable.\n- Render shadows as solid hard offsets at 4/6/8/12px in `{colors.shadow}` (`rgba(26,26,26,0.08)`). Never blur; never re-color.\n- Populate slide backgrounds with 5–8 floating decorative pills tilted at -20° to +25° rotations on cover, closing, quote, and other declarative layouts. The wallpaper-pill treatment is a system signature.\n- Layer radial-gradient accent glows (6–15% opacity) into the cream canvas on every slide for atmospheric warmth.\n- Keep the grain overlay (4% opacity, multiply blend) active on every slide — it is a baseline layer, not optional decoration.\n- Wrap inline emphasis phrases in `quote-highlight` pills (lime, sky, or another candy) inside Bodoni quote bodies, rather than bolding or italicizing.\n- Pair warm + cool accents adjacently: coral with sky, yellow with lavender, peach with mint. Avoid two same-family accents next to each other.\n\n### Don't\n- Don't render any text container with sharp corners. Square text containers do not exist in Capsule.\n- Don't render a pill, card, or icon without the 2px ink outline. The stroke is the system's identity.\n- Don't render Bodoni headlines in a candy color. Headlines are always `{colors.ink}`; color lives on stat numerals and pill fills.\n- Don't use blurred drop shadows. The shadow is always solid offset at 4/6/8/12px in `{colors.shadow}`.\n- Don't pair Bodoni with a different sans companion. The Bodoni Moda + Space Grotesk pairing is fixed.\n- Don't use uppercase on Bodoni headlines. Bodoni in this system is sentence case (or true title case for proper nouns).\n- Don't use sentence case on Space Grotesk subtitles, labels, or pill text. Small Space Grotesk text is always uppercase + 0.08em tracking.\n- Don't introduce a tenth accent color. The nine candy accents are the closed palette.\n- Don't apply shadows to decorative floating pills. Shadows are reserved for content-bearing containers.\n- Don't leave a slide's corners empty on declarative layouts. The cream canvas wants atmospheric pills or radial glows; bare corners read as broken.\n\n## Responsive Behavior\n\nCapsule is a viewport-fluid 1920×1080 presentation system using `clamp()` and viewport-relative units throughout. There is a single `@media (max-width: 900px)` breakpoint that collapses grid columns to single-column stacks and hides the nav-dot column; below 600px the stats grid further collapses from 2-col to 1-col. The system is otherwise responsive without breakpoints.\n\n### Scaling Behavior\n- Display headline scales from 3rem at minimum viewport to 7rem at maximum.\n- Body text scales from 0.95rem to 1.15rem.\n- Padding scales via `clamp` inside individual layout selectors.\n- Borders, pill outlines, shadow offsets, and grain overlay are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, or `Space`.\n- Slides reverse via `ArrowLeft` or `ArrowUp`.\n- `Home` jumps to the first slide; `End` to the last.\n- Touch swipe (horizontal): swipe distance >50px advances or reverses.\n- The active slide carries `.active` (opacity 1); non-active slides are opacity 0 + pointer-events none.\n- Nav dots are a vertical column at the right edge; the slide counter is at bottom-right; a keyboard hint is at bottom-left.\n\n### Print / Export\nNot explicitly handled; opacity-toggling means a naïve print captures only the active slide. Export workflows should snapshot each slide individually at 1920×1080.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Bodoni Moda 700–800) | Bodoni Moda | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body / Pill text (Space Grotesk 400–600) | Space Grotesk | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare the CJK font *after* the Latin font in the same `font-family` stack so Latin glyphs render in Bodoni Moda / Space Grotesk and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bodoni+Moda:ital,opsz,wght@0,6..96,400..900;1,6..96,400..900&family=Space+Grotesk:wght@300..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Bodoni Moda\", \"ZCOOL XiaoWei\", serif;\n  --font-body: \"Space Grotesk\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.7 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (negative tracking that flatters Bodoni capitals jams Hanzi strokes together). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any pill/label/subtitle when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei is a high-contrast literary serif-leaning Hanzi face whose thin-thick stroke modulation echoes Bodoni Moda's didone register — it gives display headlines the same editorial-glamour weight as the Latin original. Yozai is a friendly rounded Hanzi sans whose open counters and modest stroke contrast mirror Space Grotesk's geometric grotesque, so pill text, labels, and body paragraphs retain the \"clean modern sans\" feel rather than reverting to a stiff system Hanzi. Both pair cleanly with the candy palette: ZCOOL XiaoWei in `{colors.ink}` keeps the rule \"Bodoni headlines are never colored\" intact, and Yozai sits inside coral / lime / yellow pills without losing legibility against the 2px ink outline. The decorative floating pill wallpaper still works in Chinese — substitute single-character or two-character atmospheric words (愿景, 未来, 下一步) for the English uppercase confetti.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a display face with limited weight axis (single weight) and a smaller glyph set than Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage and a similar friendly humanist register. The ZCOOL XiaoWei italic / heavy moments that Bodoni achieves via the opsz axis have no equivalent in the Chinese face — use scale and color to compensate when Latin would have leaned on italic Bodoni.\n\n## Iteration Guide\n\n1. Any new container that holds text uses the pill geometry — 9999px radius for small, 2rem radius for cards. Don't introduce a sharp-cornered text container.\n2. Any new pill carries the 2px solid `{colors.outline}` stroke. Don't render an unstroked pill.\n3. Any new headline uses Bodoni Moda in `{colors.ink}`. Don't color a serif headline; don't switch to Space Grotesk for display.\n4. Any new card carries a `8px 8px 0 {colors.shadow}` offset shadow (4px for small nodes, 12px for the visual frame). Don't blur; don't re-color.\n5. Any new accent uses the nine-color candy palette in the coral → lime → sky → violet → yellow → lavender → peach → mint default sequence. Don't introduce a tenth color.\n6. Any new declarative slide (cover, closing, quote, statement) gets 5–8 floating decorative pills as atmospheric wallpaper.\n7. Any new data slide gets one or two radial accent glows in the canvas background. Don't leave the cream surface flat.\n8. Any inline emphasis inside a Bodoni quote body uses a `quote-highlight` pill. Don't bold; don't italicize except via the Bodoni italic axis inside `<em>`.\n9. New components inherit the pill geometry + 2px outline + 4–12px shadow pattern. If a new component breaks any of these three rules, redesign it before adding it.\n\n## Known Gaps\n\n- Two Bodoni font axes (italic and opsz 6..96) are loaded but the template only exercises the upright axis at fixed sizes; the optical-size variation across display sizes is not explicitly opted into.\n- Bar-chart values are inline-styled via `style=\"width: NN%\"` — there is no data-binding layer.\n- The decorative floating pill positions and rotations are all hand-tuned via inline style on each instance; there is no generative placement system.\n- The visual-frame's tri-stop gradient (lavender → sky → mint) is a hardcoded \"default\" — alternate gradient combinations are valid but need to be authored per instance.\n- The grain overlay uses an inline SVG data URL; replacing or removing it requires editing the markup, not a CSS variable.\n- The chart-bar-fill border-right at 2px solid outline is what gives bars their pill-end-cap definition; removing it loses the pill aesthetic on bars.\n- The system inherits all 9 candy accent CSS variables but only ~6 are actively used across the source — peach and mint are present in the palette but used sparingly. They are available for new compositions.\n- Decorative floating pills include their text content as part of the visual identity (single uppercase Space-Grotesk words). The words are not informational; new compositions should pick neutral single-word atmospheres (\"VISION\", \"FUTURE\", \"NEXT\", etc.) rather than content-specific text.\n","frontmatter":{"version":"alpha","name":"Capsule","description":"A playful editorial system built on pill-shaped containers, a sun-bleached cream canvas, and a nine-color candy palette. Bodoni Moda serif headlines pair with Space Grotesk body to suggest a literary magazine that took a holiday at a 1970s ice-cream parlor. Every container that holds text is a pill (border-radius 9999px) outlined with a 2px ink stroke, casting a soft 6–12px offset shadow. The aesthetic is \"Memphis-meets-editorial\" — confident typography, generous bordered shapes, and decorative floating pills as atmospheric wallpaper.","colors":{"cream":"#F5F5F0","ink":"#1A1A1A","outline":"#1E1E1E","white":"#FFFFFF","coral":"#E85D4E","lime":"#C4D94E","lavender":"#C5B5E0","sky":"#8BB4F7","violet":"#A06CE8","yellow":"#F2D160","peach":"#F5B895","mint":"#A8E6CF","shadow":"rgba(26, 26, 26, 0.08)"},"color-aliases":{"bg":"cream","fg":"ink","outline":"outline"},"typography":{"display":{"fontFamily":"Bodoni Moda, serif","fontSize":"clamp(3rem, 8vw, 7rem)","fontWeight":800,"lineHeight":0.9,"letterSpacing":"-0.02em"},"closing-display":{"fontFamily":"Bodoni Moda, serif","fontSize":"clamp(2.5rem, 6vw, 5rem)","fontWeight":800,"lineHeight":0.95,"letterSpacing":"-0.03em"},"headline":{"fontFamily":"Bodoni Moda, serif","fontSize":"clamp(2rem, 4vw, 3.5rem)","fontWeight":700,"lineHeight":1.05,"letterSpacing":"-0.02em"},"section-headline":{"fontFamily":"Bodoni Moda, serif","fontSize":"clamp(1.8rem, 3.5vw, 3rem)","fontWeight":700,"lineHeight":1.05,"letterSpacing":"-0.01em"},"quote-display":{"fontFamily":"Bodoni Moda, serif","fontSize":"clamp(1.6rem, 3.5vw, 3rem)","fontWeight":600,"lineHeight":1.35,"letterSpacing":"-0.01em"},"card-headline":{"fontFamily":"Bodoni Moda, serif","fontSize":"1.5rem","fontWeight":700,"lineHeight":1.1},"stat-number":{"fontFamily":"Bodoni Moda, serif","fontSize":"clamp(2rem, 3.5vw, 3rem)","fontWeight":800,"lineHeight":1,"letterSpacing":"-0.03em"},"orbit-numeral":{"fontFamily":"Bodoni Moda, serif","fontSize":"2.5rem","fontWeight":700,"lineHeight":1},"body":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"clamp(0.95rem, 1.2vw, 1.15rem)","fontWeight":400,"lineHeight":1.6},"body-sm":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"0.9rem","fontWeight":400,"lineHeight":1.55},"subtitle":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"clamp(0.8rem, 1.5vw, 1.1rem)","fontWeight":400,"lineHeight":1.4,"letterSpacing":"0.15em","textTransform":"uppercase"},"pill-text-md":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"0.85rem","fontWeight":600,"lineHeight":1,"letterSpacing":"0.12em","textTransform":"uppercase"},"pill-text-sm":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"0.7rem","fontWeight":600,"lineHeight":1,"letterSpacing":"0.1em","textTransform":"uppercase"},"label":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"0.75rem","fontWeight":500,"lineHeight":1,"letterSpacing":"0.1em","textTransform":"uppercase"},"mini-label":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"0.65rem","fontWeight":500,"lineHeight":1,"letterSpacing":"0.08em","textTransform":"uppercase"}},"spacing":{"pad-lg":"3rem 4rem","pad-md":"2rem","gap-xl":"4rem","gap-lg":"3rem","gap-md":"2rem","gap-sm":"1.5rem","gap-xs":"0.75rem","card-pad":"2.5rem 2rem","pill-pad-lg":"1.5rem 3.5rem","pill-pad-md":"1rem 2.5rem","pill-pad-sm":"0.4rem 1.2rem","pill-pad-xs":"0.35rem 1rem"},"canvas":{"width":"100vw","height":"100vh"},"components":{"pill":{"borderRadius":"9999px","border":"2px solid {colors.outline}","fontFamily":"Space Grotesk, sans-serif","fontWeight":500,"letterSpacing":"0.02em","whiteSpace":"nowrap","description":"The universal container shape. Any text container — chip, button, label, statement-highlight, stat tile, card, bar — is a pill with 2px outline. Background can be any palette accent or white."},"pill-card":{"background":"{colors.white}","border":"2px solid {colors.outline}","borderRadius":"2rem","padding":"{spacing.card-pad}","boxShadow":"8px 8px 0 {colors.shadow}","description":"Larger pill-shaped card (slightly squared corners at 2rem rather than full pill) for content blocks. Always white background, always shadowed."},"stat-pill":{"background":"{colors.white}","border":"2px solid {colors.outline}","borderRadius":"2rem","padding":"2rem 1.5rem","boxShadow":"6px 6px 0 {colors.shadow}","description":"Stat tile — pill-shaped white card containing a colored stat number, label, and a tiny accent bar."},"bar-track":{"height":"36px","background":"{colors.cream}","border":"2px solid {colors.outline}","borderRadius":"9999px","overflow":"hidden","description":"Horizontal bar chart track shaped as a pill. Fills use the candy palette."},"bar-fill":{"height":"100%","borderRadius":"9999px","borderRight":"2px solid {colors.outline}","description":"Inner bar pill with the value label printed at right edge inside the fill."},"accent-line":{"width":"60px","height":"4px","background":"{colors.coral}","borderRadius":"9999px","description":"Pill-shaped 60×4 accent rule. Default color coral; closing-context variant uses 80×4."},"card-icon":{"width":"60px","height":"60px","borderRadius":"50%","border":"2px solid {colors.outline}","fontFamily":"Bodoni Moda, serif","fontSize":"1.5rem","fontWeight":700,"description":"Circular pill icon (60px) used as a card mark. Background is an accent color; contains a 1–3 character Roman numeral or letter."},"step-node":{"width":"56px","height":"56px","borderRadius":"50%","border":"2px solid {colors.outline}","background":"{colors.white}","fontFamily":"Bodoni Moda, serif","fontSize":"1.3rem","fontWeight":700,"boxShadow":"4px 4px 0 {colors.shadow}","description":"Circular pill node (56px) used as a timeline step or sequence marker. Step accent color appears as filled-pill class on the node."},"orbit-center":{"width":"160px","height":"160px","borderRadius":"50%","background":"{colors.lime}","border":"2px solid {colors.outline}","fontFamily":"Bodoni Moda, serif","fontSize":"2.5rem","fontWeight":700,"description":"Large circular pill (160px) used as the gravitational anchor of an orbit composition. Default fill lime; small satellite pills orbit around it."},"diagram-node":{"borderRadius":"9999px","border":"2px solid {colors.outline}","padding":"1rem 2rem","boxShadow":"6px 6px 0 {colors.shadow}","background":"{colors.white}","description":"Flow-diagram node — pill-shaped container with shadow. Connected by 50×4 ink connectors with triangular arrowheads."},"diagram-connector":{"width":"50px","height":"4px","background":"{colors.outline}","description":"Solid 50×4 ink bar with a triangular arrowhead at the right end, connecting two diagram nodes inline."},"visual-frame":{"borderRadius":"2rem","border":"2px solid {colors.outline}","boxShadow":"12px 12px 0 {colors.shadow}","description":"Large image/illustration frame — slightly squared pill (2rem radius) with thicker 12px offset shadow. Often filled with a tri-stop linear gradient and a dot-pattern overlay."},"grain-overlay":{"position":"fixed","inset":0,"pointerEvents":"none","zIndex":9999,"opacity":0.04,"mixBlendMode":"multiply","backgroundImage":"fractalNoise SVG","description":"Subtle film-grain noise overlay applied to the entire viewport at 4% opacity in multiply blend mode. Always present, never absent."},"radial-glow":{"description":"Soft radial gradient wash anchored to a corner or center of a slide background. Uses one of the candy palette colors at 6–15% opacity, blended into the cream canvas. Provides atmospheric warmth without changing the surface color."}}},"isInternal":false,"tokens":10335,"sizeBytes":40414},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/preview.md","title":"Capsule Skill","category":"anthropic-skill","format":"markdown","content":"# Capsule Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/capsule/design.md`\n- Preview card: `bold-template-pack/templates/capsule/preview.md`\n\n## Selection Metadata\n\n- Slug: `capsule`\n- Tagline: Modular pill-shaped cards on warm bone with a full pastel-pop palette.\n- Mood: playful, modern, warm, fresh, fun\n- Tone: upbeat, graphic, approachable, cool\n- Formality: medium-low\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials. Also fun for a playful tech demo or a research deck that wants pop-art clarity instead of gravitas.\n- Avoid for: Contexts that require traditional institutional weight — the capsule shapes and pastel pops actively soften authority.\n\n## Visual Snapshot\n\nA playful editorial system built on pill-shaped containers, a sun-bleached cream canvas, and a nine-color candy palette. Bodoni Moda serif headlines pair with Space Grotesk body to suggest a literary magazine that took a holiday at a 1970s ice-cream parlor. Every container that holds text is a pill (border-radius 9999px) outlined with a 2px ink stroke, casting a soft 6–12px offset shadow. The aesthetic is \"Memphis-meets-editorial\" — confident typography, generous bordered shapes, and decorative floating pills as atmospheric wallpaper.\n\nCapsule is a playful editorial system whose defining structural premise is the pill: every text container is a pill, every icon is a pill, every bar is a pill, every node in a diagram is a pill. The border-radius: 9999px rule applies to virtually all UI elements, with larger panels softening to a 2rem radius. Combined with the 2px ink outline that wraps every shape, the result is a system where containers feel inflated, friendly, and graphically distinct — a nod to Memphis design and late-70s ice-cream-parlor signage without abandoning editorial discipline.\n\n## Preview Ingredients\n\n- Palette: cream #F5F5F0; ink #1A1A1A; outline #1E1E1E; white #FFFFFF; coral #E85D4E; lime #C4D94E; lavender #C5B5E0; sky #8BB4F7\n- Typography: Bodoni Moda; Space Grotesk\n- Signature move: Universal pill geometry — border-radius: 9999px for small containers, 2rem for larger cards/frames.\n- Signature move: 2px solid {colors.outline} stroke wraps every pill, icon, and card.\n- Signature move: Bodoni Moda serif for every display/headline/stat; Space Grotesk sans for every body/label/pill text.\n- Signature move: Sun-bleached cream canvas {colors.cream} with soft radial glows in candy accent colors at 6–15% opacity for background atmosphere.\n- Signature move: Hard-offset shadows in low-opacity ink ({colors.shadow}) at 4/6/8/12px offsets, always solid, always bottom-right.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1022,"sizeBytes":4384},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/design.md","title":"Cartesian","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Cartesian\ndescription: A quiet, museum-catalog editorial system built on Playfair Display serif headlines, Inter sans body, and a five-tone warm-stone palette. The aesthetic is \"consulting deck meets architectural monograph\" — minimal geometric line decorations (thin circles, dashed arcs, vertical and horizontal hairlines) drift behind content, suggesting drafting paper and compass work. Every divider is a single 1px line in a muted taupe; nothing is bold, nothing is loud. The cultural reference is Massimo Vignelli's editorial work, the Cooper Hewitt catalog, and pencil-and-tracing-paper urban planning documents.\n\ncolors:\n  bg-primary: \"#EDE8E0\"\n  bg-secondary: \"#E2DBD1\"\n  text-primary: \"#1A1A1A\"\n  text-secondary: \"#5A5A5A\"\n  accent: \"#8A8178\"\n  line: \"#B8B0A4\"\n  white-overlay: \"rgba(255, 255, 255, 0.3)\"\n\ntypography:\n  display:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(3rem, 6vw, 5.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h1:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(2.5rem, 5vw, 4.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h2:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h3:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(1.2rem, 2vw, 1.6rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  stat-figure:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"2rem\"\n    fontWeight: 400\n    lineHeight: 1\n  agenda-numeral:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 400\n    lineHeight: 1\n  team-initial:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"2rem\"\n    fontWeight: 400\n    lineHeight: 1\n  quote-mark:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"5rem\"\n    fontWeight: 400\n    lineHeight: 1\n  card-headline:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.3rem\"\n    fontWeight: 400\n    lineHeight: 1.1\n  timeline-headline:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.2rem\"\n    fontWeight: 400\n    lineHeight: 1.1\n  body:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(0.9rem, 1.2vw, 1.1rem)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-sm:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.9rem\"\n    fontWeight: 400\n    lineHeight: 1.6\n  subtitle:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(1rem, 1.5vw, 1.3rem)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  attribution:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 2px\n    textTransform: uppercase\n  label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  micro:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.7rem\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n    textTransform: uppercase\n\nspacing:\n  pad-y: \"4vh\"\n  pad-x: \"4vw\"\n  gap-xl: \"6vw\"\n  gap-lg: \"5vw\"\n  gap-md: \"3vw\"\n  gap-sm: \"2vh\"\n  card-pad: \"4vh 2vw\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  card:\n    border: \"1px solid {colors.line}\"\n    padding: \"{spacing.card-pad}\"\n    background: \"{colors.white-overlay}\"\n    description: \"Tracing-paper card — 1px taupe outline with semi-transparent white fill that lets the canvas tone bleed through. No radius, no shadow.\"\n  card-icon:\n    width: 40px\n    height: 40px\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    color: \"{colors.accent}\"\n    fontSize: \"1rem\"\n    description: \"Small ringed circle (40px) containing a 1–3 character Roman numeral or letter in accent taupe.\"\n  agenda-row:\n    padding: \"2vh 0\"\n    borderBottom: \"1px solid {colors.line}\"\n    description: \"List row separated only by a 1px taupe hairline. Numeral at left, label at right.\"\n  timeline-rule:\n    height: \"1px\"\n    background: \"{colors.line}\"\n    description: \"Single horizontal 1px taupe line connecting timeline items. No nodes, no markers — just the line.\"\n  vertical-line:\n    width: \"1px\"\n    height: \"100%\"\n    background: \"{colors.line}\"\n    opacity: 0.3\n    description: \"Optional decorative vertical hairline anchored at left edge (default 8vw from edge) at low opacity. Provides drafting-paper grid feel.\"\n  horizontal-accent:\n    width: \"20vw\"\n    height: \"1px\"\n    background: \"{colors.text-primary}\"\n    description: \"Single short ink-black 1px horizontal line used as a strong accent rule. Black, not taupe.\"\n  geo-circle:\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.5\n    description: \"Thin solid taupe ring at low opacity, used as decorative geometry behind content.\"\n  geo-arc:\n    border: \"1px dashed {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.3\n    description: \"Thin dashed taupe ring at very low opacity, paired with geo-circle to suggest compass construction.\"\n  geo-decoration:\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    description: \"Large decorative ring (30–50vw diameter) anchored to a corner or center. Always pairs with a ::before pseudo-element rendering a smaller dashed ring inside it, suggesting concentric drafting.\"\n  geo-ring:\n    width: \"50vw\"\n    height: \"50vw\"\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.3\n    description: \"The largest geometric decoration variant — a 50vw centered ring with an inner ::before dashed ring at 70% diameter.\"\n  image-placeholder:\n    background: \"{colors.bg-secondary}\"\n    border: \"1px solid {colors.line}\"\n    description: \"Solid taupe-tinted block with two crossed 1px diagonal hairlines via ::before/::after at +30° and -30°, suggesting an X over a blank frame. Holds a small uppercase label centered.\"\n  team-photo:\n    width: \"12vw\"\n    height: \"12vw\"\n    borderRadius: \"50%\"\n    border: \"1px solid {colors.line}\"\n    background: \"{colors.bg-secondary}\"\n    description: \"Circular portrait frame (12vw) in slightly darker stone, ringed in taupe, holding a single Playfair initial in accent taupe at center.\"\n  nav-arrow:\n    width: 40px\n    height: 40px\n    border: \"1px solid {colors.line}\"\n    background: \"transparent\"\n    description: \"Square 40px button with 1px taupe border holding an arrow glyph. Hover state inverts to ink fill with cream text.\"\n  nav-dot:\n    width: 8px\n    height: 8px\n    borderRadius: \"50%\"\n    background: \"{colors.line}\"\n    description: \"Small taupe dot at right edge as navigation indicator. Active state shifts to ink and scales 1.3.\"\n  chart-stroke-primary: \"{colors.text-primary}\"\n  chart-stroke-comparison: \"{colors.line}\"\n  chart-comparison-dash: \"5, 5\"\n  chart-grid-color: \"{colors.bg-secondary}\"\n  chart-axis-tick-color: \"{colors.accent}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCartesian is a **quiet museum-catalog editorial system**. Its defining premise is **restraint through 1px lines**. Every structural element — list separators, agenda rules, timeline connectors, card borders, table dividers — is a single 1px line in a muted taupe `{colors.line}`. There are no thick borders, no fills, no shadows, no rounded surfaces. Hierarchy is built through type contrast and negative space; depth does not exist in the conventional sense.\n\nThe typeface stack is a literary-monograph pairing. **Playfair Display** — a high-contrast didone-influenced serif — carries every headline, every stat numeral, every card title, every team initial, every quote mark. Playfair runs at weight 400 (regular) almost exclusively — there is no use of bold or 700-weight Playfair in the system. The thin-stroke didone aesthetic depends on letting the letterforms breathe at modest weights. **Inter** — a clean modern grotesque — carries every body paragraph, every subtitle, every label, every attribution. Inter runs at 400 for body and 500 for labels. The pairing creates the system's editorial voice: serif statements + clean sans supporting structure.\n\nThe palette is **five warm stones plus ink**. The canvas is `{colors.bg-primary}` — a warm sandstone off-cream. A slightly deeper stone `{colors.bg-secondary}` provides subtle region differentiation (image placeholders, team photo frames). Ink `{colors.text-primary}` is the headline color; medium gray `{colors.text-secondary}` is body. A warmer taupe `{colors.accent}` carries labels, attribution, and small numerals. The lightest taupe `{colors.line}` is the universal 1px line color. There are no accent colors in the populist sense — no red, no orange, no blue. The palette is stone, stone, stone, ink, ink. The only \"color\" in the system is type contrast.\n\nDepth is **entirely absent in the conventional sense**. There are no shadows, no elevated cards, no rounded surfaces, no gradients. Atmosphere is created by **geometric line decorations**: thin solid and dashed circles in `{colors.line}` at 20–50% opacity drift behind content as if drawn on tracing paper with a compass. These do not create hierarchy — they create mood. The decorative geometry signals \"drafted, considered, precise.\"\n\n**Density philosophy: sparse and breathing.** Cartesian reads as elegant when sparse and broken when crowded. A correctly composed slide pairs one Playfair headline with one body paragraph, or one chart with one short caption, framed by generous negative space. Most slide composition uses centered or asymmetric two-column layouts with `5–6vw` gutters and significant vertical breathing room. The decorative compass arcs reinforce the sparseness — they are most effective when there is room around them. A slide that feels broken in this system is one packed edge-to-edge with content; the correct density is \"one clear idea, well-framed, on stone paper.\"\n\n**Key Characteristics:**\n- Warm sandstone canvas `{colors.bg-primary}` with single 1px taupe `{colors.line}` dividers as the universal structural element.\n- Playfair Display serif at weight 400 for every headline/numeral/quote-mark; Inter sans for every body/label/attribution.\n- Five-tone monochrome palette: two stones, two grays, one ink. No vivid accent colors anywhere.\n- Decorative geometric rings (thin solid + dashed circles, 20–50% opacity) drift behind content as compass-drafted atmosphere.\n- Every label, attribution, and micro-text is uppercase Inter with 2–3px letter-spacing.\n- All borders are 1px hairlines; no element has a thicker border, a shadow, or a rounded fill.\n- Right-edge vertical nav-dot column, bottom-left square nav-arrow buttons, bottom-right mono slide counter.\n- Image placeholders carry a signature pair of crossed 1px diagonals (an X) over a stone-tinted block.\n\n## Colors\n\n### Stone & Ink Palette\n- **Background Primary** (`{colors.bg-primary}` — #EDE8E0): The canvas. Warm sandstone off-cream — closer to \"manila folder\" than \"white paper.\" This is the default slide background.\n- **Background Secondary** (`{colors.bg-secondary}` — #E2DBD1): A slightly deeper stone, used for image placeholders, team-photo frames, and any region that needs subtle separation from the canvas without a colored fill or a border.\n- **Text Primary** (`{colors.text-primary}` — #1A1A1A): Near-black ink. Used for headlines, stat numerals, and the special `{components.horizontal-accent}` rule. The strongest contrast color in the system.\n- **Text Secondary** (`{colors.text-secondary}` — #5A5A5A): Medium warm gray. Used for all body paragraph text. Softer than ink — readable but recedes.\n- **Accent** (`{colors.accent}` — #8A8178): Warm taupe. Used for labels, attributions, agenda numerals, slide counter, card-icon text, team-member role text. The system's \"small text\" color.\n- **Line** (`{colors.line}` — #B8B0A4): Pale taupe. The universal 1px line color: card borders, agenda rules, timeline connectors, team-photo rings, nav-arrow borders, geo-decoration rings.\n\n### Defaults\n- **Default surface background**: `{colors.bg-primary}`.\n- **Default headline color**: `{colors.text-primary}` — always ink, never colored, never accent-taupe. Playfair headlines are uniformly ink.\n- **Default body text color**: `{colors.text-secondary}` (medium warm gray).\n- **Default label / attribution / micro-text color**: `{colors.accent}` (warm taupe).\n- **Default border color**: `{colors.line}` — every 1px structural border. Never use ink-black for borders except the rare `horizontal-accent` rule.\n- **Default secondary surface fill**: `{colors.bg-secondary}`.\n- **Default chart primary series color**: `{colors.text-primary}` (ink).\n- **Default chart comparison/secondary series color**: `{colors.line}` with 5px dashed stroke.\n- **Default chart grid color**: `{colors.bg-secondary}`.\n- **Default chart axis tick color**: `{colors.accent}`.\n\nCartesian has **no accent color in the populist sense.** A red callout, a blue bar, a green stat — none of these exist. When emphasis is needed, increase type size, switch from sans to serif, or add a single 1px `horizontal-accent` rule in ink. Color is not the emphasis mechanism in this system; restraint is.\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face conversation**: `Playfair Display` (serif, weights 400/600/700, italic available) carries every headline, stat numeral, quote mark, card title, and team initial; `Inter` (sans, weights 300/400/500/600) carries every body, subtitle, label, attribution, and micro-text. There is no third face.\n\nPlayfair Display is used almost exclusively at **weight 400 (regular)**. The system deliberately avoids bold Playfair — the didone aesthetic relies on thin-stroke modulation that disappears at heavier weights. Italic Playfair is available (loaded) but not exercised in the default template; reserve it for inline emphasis inside body copy.\n\nInter runs at weight 400 for body, weight 500 for labels and micro-text, weight 600 for the rare emphasized inline element. The contrast between Playfair's high-modulation serif and Inter's even sans is the system's primary typographic rhythm.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3rem, 6vw, 5.5rem) | Playfair Display | 400 | Cover or large opening title |\n| `{typography.h1}` | clamp(2.5rem, 5vw, 4.5rem) | Playfair Display | 400 | Section-opening or large closing headline |\n| `{typography.h2}` | clamp(1.8rem, 3.5vw, 3rem) | Playfair Display | 400 | Primary slide headline |\n| `{typography.h3}` | clamp(1.2rem, 2vw, 1.6rem) | Playfair Display | 400 | Sub-headline within a region |\n| `{typography.card-headline}` | 1.3rem | Playfair Display | 400 | Card or pillar-block title |\n| `{typography.timeline-headline}` | 1.2rem | Playfair Display | 400 | Timeline-step or phase headline |\n| `{typography.stat-figure}` | 2rem | Playfair Display | 400 | Numerical stat figure (typically inline in a stats cluster) |\n| `{typography.team-initial}` | 2rem | Playfair Display | 400 | Initial letter centered inside a team-photo circle |\n| `{typography.agenda-numeral}` | 1.5rem | Playfair Display | 400 | Ordinal numeral preceding an agenda row |\n| `{typography.quote-mark}` | 5rem | Playfair Display | 400 | Opening quotation glyph for a pull-quote |\n| `{typography.subtitle}` | clamp(1rem, 1.5vw, 1.3rem) | Inter | 400 | Subtitle paragraph below a display headline |\n| `{typography.body}` | clamp(0.9rem, 1.2vw, 1.1rem) | Inter | 400 | Standard paragraph body |\n| `{typography.body-sm}` | 0.9rem | Inter | 400 | Compact body inside cards or timeline items |\n| `{typography.attribution}` | 0.85rem | Inter | 400 | Attribution line below a quote, with 2px tracking + uppercase |\n| `{typography.label}` | 0.75rem | Inter | 500 | Section label / eyebrow above a headline, with 3px tracking + uppercase |\n| `{typography.micro}` | 0.7rem | Inter | 400 | Image label, slide counter, smallest chrome text |\n\n### Defaults\n- **Default size for the primary slide headline**: `{typography.h2}` (clamp 1.8–3rem).\n- **Default size for a cover or large opening headline**: `{typography.h1}` (clamp 2.5–4.5rem); for the most expansive cover, `{typography.display}` (clamp 3–5.5rem).\n- **Default size for paragraph body**: `{typography.body}` (clamp 0.9–1.1rem).\n- **Default size for any inline label or eyebrow**: `{typography.label}` (0.75rem) — always 3px tracking + uppercase.\n- **Default weight for any Playfair headline**: 400. Don't reach for 600 or 700.\n- **Default weight for body**: 400.\n- **Default weight for labels/micro**: 500.\n- **Default size for a stat numeral inside a stats cluster**: `{typography.stat-figure}` (2rem). Cartesian does not have a hero-stat-numeral pattern (no 5–7rem display stat); stats are presented as inline ranks at modest scale.\n\nWhen unsure, reach for `{typography.h2}` for the slide's primary text moment, not `{typography.h3}` (which is a sub-headline within a region).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Playfair headline, stat, quote, card title, and initial is set at weight 400.** Bold Playfair does not exist in this system. The thin-stroke didone aesthetic is the identity.\n- **Every Playfair element is set in sentence case (or true title case for proper nouns).** Uppercase Playfair is not used.\n- **Every Inter label, attribution, and micro-text element is uppercase with 2–3px letter-spacing.** Labels at 3px tracking; attributions and micro at 2px. Without the tracking, Inter caps read as untreated.\n- **Every Playfair element is rendered in `{colors.text-primary}` (ink).** Headlines are never accent-taupe and never gray. The exception is decorative initial letters inside a circular `card-icon` or `team-photo`, where the letterform is rendered in `{colors.accent}`.\n- **Every 1px structural border uses `{colors.line}`.** Other border colors do not exist except for the rare `horizontal-accent` rule in ink.\n- **Every card, image-placeholder, team-photo, and nav-arrow border is 1px solid.** Thicker borders do not exist in this system.\n- **Charts use ink-black for the primary series and dashed taupe (5px, 5px) for the comparison series.** This pair is the only chart-color rule.\n\n### Typography Principles\nThe Playfair-400 + Inter-400 combination is the system's voice. Switching either family or jumping Playfair to weight 700 reads as a different design system. Italic emphasis is permitted via inline `<em>` inside body copy (Inter italic) — italic Playfair is loaded but reserved for rare uses. Underline is not used.\n\nLine-height stays open: headlines at 1.1, body at 1.6. The wide body line-height is part of the breathing-room aesthetic.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, visibility visible) at a time. Transitions are 0.6s opacity + visibility fades.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-y}` | 4vh | Default vertical slide padding |\n| `{spacing.pad-x}` | 4vw | Default horizontal slide padding |\n| `{spacing.gap-xl}` | 6vw | Major two-column gutter (most spacious) |\n| `{spacing.gap-lg}` | 5vw | Standard two-column or grid gutter |\n| `{spacing.gap-md}` | 3vw | Card-grid gutter |\n| `{spacing.gap-sm}` | 2vh | Agenda row vertical padding, attribution spacing |\n| `{spacing.card-pad}` | 4vh 2vw | Internal padding for content cards |\n\nHeadlines typically carry a 2–3vh margin-bottom from labels above and a 2vh margin-bottom from body below. Section headers above 3-card or 4-team grids carry a 6vh margin-bottom from the grid (significant breathing room).\n\n### Decorative Geometry Layer\nCartesian's signature is its **drafting-paper geometric decoration**. Every slide may layer one or more of:\n- A large ringed `geo-decoration` anchored to a corner (typically 30–50vw diameter) with an inner dashed ring at ~80% diameter (the `::before` pseudo).\n- A `vertical-line` at ~8vw from the left edge running floor-to-ceiling at 30% opacity.\n- A `horizontal-accent` (a single short black 1px line) anchored at 15vh from the bottom-left.\n- A centered `geo-ring` (50vw circle) on closing or contemplative slides.\n\nThese elements have **no informational role** — they create atmosphere. Slides without any geometric decoration are valid; over-decoration (more than two geo elements per slide) breaks the restraint.\n\n### Chrome\nThe system's chrome is minimal:\n- Right-edge vertical column of small `nav-dot` indicators (8px circles in taupe).\n- Bottom-left pair of square `nav-arrow` buttons (40×40, 1px taupe border, transparent fill).\n- Bottom-right `slide-counter` text in Inter at 0.75rem with 2px tracking in `{colors.accent}`.\n\nThere is no top chrome bar, no persistent header, no footer rule.\n\n## Depth and Elevation\n\n### Flat Plane (Only Technique)\nCartesian has no shadows, no elevated cards, no rounded surfaces, no gradients. Every element sits on a single plane.\n\nHierarchy is constructed from:\n- **Type contrast** — Playfair serif vs Inter sans; size scale from 5rem down to 0.7rem.\n- **1px hairline dividers** — agenda rows, timeline rule, card outlines, image-placeholder outlines, stats top-border, team-photo rings, nav-arrow borders.\n- **Color tone** — ink vs gray vs taupe.\n- **Negative space** — generous padding around every element.\n- **Geometric atmosphere** — compass-drafted rings behind content suggest depth without creating it.\n\nIntroducing a `box-shadow`, an elevated card, or a soft gradient breaks the restraint that defines the system.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 50% (circle) | Every circular element: `card-icon` (40px), `team-photo` (12vw), `nav-dot` (8px), `geo-circle`, `geo-arc`, `geo-decoration`, `geo-ring` |\n| 0 | Everything else: cards, image-placeholders, nav-arrows, agenda rows, timeline, stat-blocks, chart container |\n\nThe system uses **only two radius values**: 50% (true circle) or 0 (sharp rectangle). Soft-rounded corners do not exist.\n\n### Border Weights\n- **1px solid `{colors.line}`** — the universal structural border. Used on every card, image-placeholder, team-photo ring, nav-arrow, agenda row bottom, timeline rule, stats top, geo-circle, geo-decoration.\n- **1px dashed `{colors.line}`** — used on `geo-arc` and the inner `::before` ring inside `geo-decoration` / `geo-ring`. Dashed signals \"construction line / arc.\"\n- **1px solid `{colors.text-primary}`** — used only on the rare `horizontal-accent` decorative rule. The system's only ink-black line.\n- **Chart bar/line stroke widths** — Chart.js series at 1px (bar borders), 2px (line series). Comparison series at 2px dashed (5px dash, 5px gap).\n\nAll structural borders are `{colors.line}`. Thicker borders, colored borders, and dashed structural borders (other than geo-arcs) do not exist.\n\n### Decorative Element Types\n\n**Geometric ring (geo-circle / geo-decoration / geo-ring)** — Thin 1px taupe circles in various sizes (10vw, 30vw, 50vw) at 20–50% opacity. Typically paired with an inner dashed `::before` ring at 70–80% of the outer diameter, suggesting compass construction with both a primary and an offset arc. Anchored to corners or centers; sits behind content with `z-index: 0` and `pointer-events: none`.\n\n**Vertical line** — A single 1px taupe column anchored at ~8vw from the left slide edge, running floor-to-ceiling at 30% opacity. Suggests a drafting-paper alignment guide. Optional per slide.\n\n**Horizontal accent** — A single 20vw × 1px black line anchored 15vh from the bottom-left of a slide. The system's only ink-black line — used as a strong terminal accent rule on cover or closing layouts. Use sparingly.\n\n**Image placeholder** — A solid `{colors.bg-secondary}` block with two 150% diagonal 1px taupe lines crossed at +30° and -30° via `::before` / `::after`, forming an X. Centers a small uppercase Inter label (\"Visual Reference\" or similar). The X pattern is the signature image-not-yet-wired treatment.\n\n**Team-photo frame** — A 12vw circular block in `{colors.bg-secondary}` with a 1px taupe ring, holding a single Playfair-400 initial at 2rem in `{colors.accent}` centered. Used as portrait placeholder.\n\n**Card** — A 1px taupe-bordered block with a semi-transparent white interior fill (`{colors.white-overlay}`) that lets the canvas tone bleed through subtly. The faint white fill is what differentiates a card from a bare region; remove the fill and the card disappears.\n\n**Agenda row** — A flex row containing a Playfair `{typography.agenda-numeral}` in `{colors.accent}` at left, then a label at right, with 2vh padding and a 1px taupe bottom border. Stacked rows form an agenda list.\n\n**Timeline** — A 1px taupe top-border across a flex row of evenly-distributed timeline items; each item carries a small Inter `year` label in taupe, a Playfair `{typography.timeline-headline}`, and an Inter body paragraph. The hairline is the only timeline structure — there are no nodes, no markers, no dots.\n\n**Stats cluster** — A flex row of stat items separated by `gap-md`, framed by a 1px taupe top border, holding inline `{typography.stat-figure}` Playfair numerals with small uppercase Inter labels in taupe below.\n\n**Quote mark** — A 5rem Playfair quote glyph at 50% opacity in taupe, positioned above a Playfair `{typography.h2}` headline + a small uppercase taupe attribution below.\n\n**Chart** — Chart.js bar or line chart with ink-black primary series and dashed taupe comparison series. Grid lines in `{colors.bg-secondary}`. Axis ticks in `{colors.accent}`. Always rendered without fill on the primary series (or with a 5% ink-tinted fill on line charts).\n\n## Do's and Don'ts\n\n### Do\n- Use a single 1px line in `{colors.line}` for every structural separator — agenda rule, timeline connector, card border, stats top, team-photo ring. The 1px hairline is Cartesian's identity.\n- Set every Playfair headline, stat, quote mark, and card title at weight 400. Don't reach for bold; the thin-stroke didone aesthetic depends on it.\n- Render every headline in `{colors.text-primary}` (ink). Playfair never appears in taupe or color.\n- Render every label, attribution, agenda numeral, and micro-text in `{colors.accent}` (taupe) with uppercase + 2–3px letter-spacing.\n- Layer decorative geometric rings (solid + dashed) at 20–50% opacity behind content for atmosphere. One or two geo elements per slide; never more.\n- Pair Playfair Display (serif headlines) with Inter (sans body). The two-face pairing is fixed.\n- Use the crossed-diagonal X pattern inside image placeholders. It is the system's signature placeholder treatment.\n- Let slides breathe — sparse layouts with generous negative space are the correct density.\n- Use `{colors.bg-secondary}` as the fill for image placeholders and team-photo frames — a subtle stone, not white, not gray.\n- Use a single `horizontal-accent` (20vw × 1px ink line) sparingly as a strong terminal rule on cover or closing compositions.\n\n### Don't\n- Don't introduce a populist accent color. No red, no orange, no blue, no green. The palette is stone-on-stone with ink for headlines.\n- Don't render Playfair headlines in `{colors.accent}` (taupe). Headlines are ink; taupe is reserved for small text.\n- Don't bold any Playfair element. Weight 400 is the standing rule; bold breaks the didone aesthetic.\n- Don't add shadows, elevated cards, or gradient fills. Cartesian is flat; depth comes from geometry and type, not z-axis.\n- Don't use rounded corners on cards or rectangles. The only round shapes are true circles (radius 50%).\n- Don't use thick borders (2px+). Every structural border is 1px.\n- Don't crowd the slide. Sparse breathing layouts read as elegant; packed layouts read as broken.\n- Don't pair Playfair with a different sans companion. The Inter pairing is fixed.\n- Don't render labels or micro-text in sentence case. Small Inter text is always uppercase + 2–3px tracking.\n- Don't add more than two geo decorations per slide — restraint is the rule; over-decoration reads as cluttered.\n\n## Responsive Behavior\n\nCartesian is a viewport-fluid 1920×1080 presentation system using `vw` / `vh` units and `clamp()` throughout. There is a single `@media (max-aspect-ratio: 4/3)` breakpoint that collapses two-column grids to single-column, hides the timeline rule (which would lose meaning when stacked), and stacks team and card grids vertically. The system is otherwise responsive without breakpoints.\n\n### Scaling Behavior\n- Display headlines scale from 2.5rem at minimum viewport to 5.5rem at maximum via `clamp()`.\n- Body text scales from 0.9rem to 1.1rem.\n- Padding uses `vh` / `vw` units that scale linearly with viewport.\n- The 1px borders, 8px nav dots, and 40px nav arrows are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Nav dots at right edge can be clicked to jump to specific slides.\n- Nav arrows at bottom-left are clickable; hover state inverts background to ink and text to cream.\n- Slide counter at bottom-right shows current / total with 2-digit zero-padding.\n\n### Charts\nCharts are rendered with Chart.js (loaded via CDN). The two chart types in the source are bar and line; both follow the ink-primary / dashed-taupe-comparison convention. Custom font settings inject Inter into Chart.js label rendering.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Playfair Display 400) | Playfair Display | 思源宋体 Noto Serif SC 700 | Google Fonts |\n| Body / Label (Inter 400–500) | Inter | 思源宋体 Noto Serif SC 400 | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin font in the same `font-family` stack so Latin glyphs render in Playfair / Inter and CJK glyphs fall through to Noto Serif SC automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400..700;1,400..700&family=Inter:wght@300..600&family=Noto+Serif+SC:wght@400;700&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Playfair Display\", \"Noto Serif SC\", serif;\n  --font-body: \"Inter\", \"Noto Serif SC\", sans-serif;\n}\n/* Headlines use Noto Serif SC 700; body uses Noto Serif SC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.75 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase, and Cartesian already favors generous leading.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs. Keep the 2–3px tracking only on uppercase Latin labels.\n- **Text-transform**: drop `text-transform: uppercase` on any label/attribution/micro when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nNoto Serif SC (思源宋体) is the only mainstream Hanzi serif with the same restrained editorial register Cartesian needs — its modulated horizontal-thin / vertical-thick strokes echo Playfair's didone aesthetic, and its uniformly even cadence matches Cartesian's \"museum-catalog\" voice. Using NSC at weight 700 for headlines preserves the visual mass of the Latin display while NSC 400 carries body with the same quiet warmth Inter provides. The five-stone palette absorbs Hanzi cleanly because every glyph stays in ink or taupe — no candy fills to negotiate. The decorative compass-arc geometry layer is content-agnostic and works identically in any language. Avoid bolding Hanzi (the Chinese-typography equivalent of Cartesian's \"no bold Playfair\" rule); rely on size and the 1px line dividers for hierarchy.\n\n### Known CJK Gap\n\nNoto Serif SC is the only Hanzi serif loaded — there is no italic axis (Chinese type historically has no italic), so the rare italic Playfair `<em>` moment loses its emphasis when the body falls through to NSC. Substitute a single-character span colored in `{colors.accent}` (taupe), or wrap the emphasized phrase in faint brackets 「」, to recover emphasis. NSC's 700 weight is the heaviest available — the system's restraint-through-400-weight rule naturally extends to Chinese, so this is rarely a gap in practice.\n\n## Iteration Guide\n\n1. Every new structural separator uses a 1px solid `{colors.line}` border. No exceptions.\n2. Every new headline uses Playfair Display at weight 400 in `{colors.text-primary}`. Don't bold; don't color.\n3. Every new small text element (label, attribution, micro) uses Inter uppercase with 2–3px letter-spacing in `{colors.accent}`.\n4. Every new body paragraph uses Inter weight 400 in `{colors.text-secondary}`, with line-height 1.6.\n5. Every new card uses 1px taupe border + semi-transparent white overlay fill. No shadow, no radius.\n6. New circular elements (icons, photos, decorative rings) use border-radius 50% with 1px taupe ring.\n7. New geometric decorations stay subtle: 1 or 2 per slide, at 20–50% opacity, behind content (z-index 0, pointer-events none).\n8. New chart series follow the ink-primary / dashed-taupe-comparison convention. Don't introduce colored chart series.\n9. New layouts respect the breathing-room density rule — sparse beats dense in Cartesian.\n10. The `horizontal-accent` 20vw ink line is the system's only \"ink rule\" — use it sparingly as a terminal accent, never as a routine divider.\n\n## Known Gaps\n\n- The Chart.js library is loaded via CDN; new chart types beyond bar and line require manual configuration matching the ink-primary / dashed-taupe-comparison aesthetic.\n- The decorative `geo-decoration` and `geo-ring` `::before` inner-ring pattern is hardcoded in CSS; size variants beyond what the source exercises require new style rules.\n- The team-photo placeholder shows a single Playfair initial in taupe; real portrait insertion requires replacing the initial with an `<img>` and adjusting the circular crop.\n- The chart axis label colors and grid colors are hardcoded inline in the Chart.js options blocks (rather than reading from CSS variables) — restyling requires editing JS, not CSS.\n- The image-placeholder X pattern (crossed +30°/-30° diagonals) is rendered via `::before` / `::after` with fixed 150% widths; resizing the placeholder beyond the source dimensions may require recomputing the rotation angle to maintain edge-touch.\n- Italic Playfair is loaded but not exercised in any default rule; it is available for inline `<em>` emphasis in body copy but the system itself does not author any italic text.\n- The `vertical-line` and `horizontal-accent` decorative elements have hardcoded position values (8vw from left, 15vh from bottom); using them off-default-position requires per-instance style overrides.\n- The slide-counter `currentSlide` / `totalSlides` IDs are referenced in the JS but the system has no internal slide-name registry; new slides simply increment by their DOM order.\n","frontmatter":{"version":"alpha","name":"Cartesian","description":"A quiet, museum-catalog editorial system built on Playfair Display serif headlines, Inter sans body, and a five-tone warm-stone palette. The aesthetic is \"consulting deck meets architectural monograph\" — minimal geometric line decorations (thin circles, dashed arcs, vertical and horizontal hairlines) drift behind content, suggesting drafting paper and compass work. Every divider is a single 1px line in a muted taupe; nothing is bold, nothing is loud. The cultural reference is Massimo Vignelli's editorial work, the Cooper Hewitt catalog, and pencil-and-tracing-paper urban planning documents.","colors":{"bg-primary":"#EDE8E0","bg-secondary":"#E2DBD1","text-primary":"#1A1A1A","text-secondary":"#5A5A5A","accent":"#8A8178","line":"#B8B0A4","white-overlay":"rgba(255, 255, 255, 0.3)"},"typography":{"display":{"fontFamily":"Playfair Display, serif","fontSize":"clamp(3rem, 6vw, 5.5rem)","fontWeight":400,"lineHeight":1.1},"h1":{"fontFamily":"Playfair Display, serif","fontSize":"clamp(2.5rem, 5vw, 4.5rem)","fontWeight":400,"lineHeight":1.1},"h2":{"fontFamily":"Playfair Display, serif","fontSize":"clamp(1.8rem, 3.5vw, 3rem)","fontWeight":400,"lineHeight":1.1},"h3":{"fontFamily":"Playfair Display, serif","fontSize":"clamp(1.2rem, 2vw, 1.6rem)","fontWeight":400,"lineHeight":1.1},"stat-figure":{"fontFamily":"Playfair Display, serif","fontSize":"2rem","fontWeight":400,"lineHeight":1},"agenda-numeral":{"fontFamily":"Playfair Display, serif","fontSize":"1.5rem","fontWeight":400,"lineHeight":1},"team-initial":{"fontFamily":"Playfair Display, serif","fontSize":"2rem","fontWeight":400,"lineHeight":1},"quote-mark":{"fontFamily":"Playfair Display, serif","fontSize":"5rem","fontWeight":400,"lineHeight":1},"card-headline":{"fontFamily":"Playfair Display, serif","fontSize":"1.3rem","fontWeight":400,"lineHeight":1.1},"timeline-headline":{"fontFamily":"Playfair Display, serif","fontSize":"1.2rem","fontWeight":400,"lineHeight":1.1},"body":{"fontFamily":"Inter, sans-serif","fontSize":"clamp(0.9rem, 1.2vw, 1.1rem)","fontWeight":400,"lineHeight":1.6},"body-sm":{"fontFamily":"Inter, sans-serif","fontSize":"0.9rem","fontWeight":400,"lineHeight":1.6},"subtitle":{"fontFamily":"Inter, sans-serif","fontSize":"clamp(1rem, 1.5vw, 1.3rem)","fontWeight":400,"lineHeight":1.5},"attribution":{"fontFamily":"Inter, sans-serif","fontSize":"0.85rem","fontWeight":400,"lineHeight":1.4,"letterSpacing":"2px","textTransform":"uppercase"},"label":{"fontFamily":"Inter, sans-serif","fontSize":"0.75rem","fontWeight":500,"lineHeight":1,"letterSpacing":"3px","textTransform":"uppercase"},"micro":{"fontFamily":"Inter, sans-serif","fontSize":"0.7rem","fontWeight":400,"lineHeight":1,"letterSpacing":"2px","textTransform":"uppercase"}},"spacing":{"pad-y":"4vh","pad-x":"4vw","gap-xl":"6vw","gap-lg":"5vw","gap-md":"3vw","gap-sm":"2vh","card-pad":"4vh 2vw"},"canvas":{"width":"100vw","height":"100vh"},"components":{"card":{"border":"1px solid {colors.line}","padding":"{spacing.card-pad}","background":"{colors.white-overlay}","description":"Tracing-paper card — 1px taupe outline with semi-transparent white fill that lets the canvas tone bleed through. No radius, no shadow."},"card-icon":{"width":"40px","height":"40px","border":"1px solid {colors.line}","borderRadius":"50%","color":"{colors.accent}","fontSize":"1rem","description":"Small ringed circle (40px) containing a 1–3 character Roman numeral or letter in accent taupe."},"agenda-row":{"padding":"2vh 0","borderBottom":"1px solid {colors.line}","description":"List row separated only by a 1px taupe hairline. Numeral at left, label at right."},"timeline-rule":{"height":"1px","background":"{colors.line}","description":"Single horizontal 1px taupe line connecting timeline items. No nodes, no markers — just the line."},"vertical-line":{"width":"1px","height":"100%","background":"{colors.line}","opacity":0.3,"description":"Optional decorative vertical hairline anchored at left edge (default 8vw from edge) at low opacity. Provides drafting-paper grid feel."},"horizontal-accent":{"width":"20vw","height":"1px","background":"{colors.text-primary}","description":"Single short ink-black 1px horizontal line used as a strong accent rule. Black, not taupe."},"geo-circle":{"border":"1px solid {colors.line}","borderRadius":"50%","opacity":0.5,"description":"Thin solid taupe ring at low opacity, used as decorative geometry behind content."},"geo-arc":{"border":"1px dashed {colors.line}","borderRadius":"50%","opacity":0.3,"description":"Thin dashed taupe ring at very low opacity, paired with geo-circle to suggest compass construction."},"geo-decoration":{"border":"1px solid {colors.line}","borderRadius":"50%","description":"Large decorative ring (30–50vw diameter) anchored to a corner or center. Always pairs with a ::before pseudo-element rendering a smaller dashed ring inside it, suggesting concentric drafting."},"geo-ring":{"width":"50vw","height":"50vw","border":"1px solid {colors.line}","borderRadius":"50%","opacity":0.3,"description":"The largest geometric decoration variant — a 50vw centered ring with an inner ::before dashed ring at 70% diameter."},"image-placeholder":{"background":"{colors.bg-secondary}","border":"1px solid {colors.line}","description":"Solid taupe-tinted block with two crossed 1px diagonal hairlines via ::before/::after at +30° and -30°, suggesting an X over a blank frame. Holds a small uppercase label centered."},"team-photo":{"width":"12vw","height":"12vw","borderRadius":"50%","border":"1px solid {colors.line}","background":"{colors.bg-secondary}","description":"Circular portrait frame (12vw) in slightly darker stone, ringed in taupe, holding a single Playfair initial in accent taupe at center."},"nav-arrow":{"width":"40px","height":"40px","border":"1px solid {colors.line}","background":"transparent","description":"Square 40px button with 1px taupe border holding an arrow glyph. Hover state inverts to ink fill with cream text."},"nav-dot":{"width":"8px","height":"8px","borderRadius":"50%","background":"{colors.line}","description":"Small taupe dot at right edge as navigation indicator. Active state shifts to ink and scales 1.3."},"chart-stroke-primary":"{colors.text-primary}","chart-stroke-comparison":"{colors.line}","chart-comparison-dash":"5, 5","chart-grid-color":"{colors.bg-secondary}","chart-axis-tick-color":"{colors.accent}"}},"isInternal":false,"tokens":9138,"sizeBytes":37122},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/preview.md","title":"Cartesian Skill","category":"anthropic-skill","format":"markdown","content":"# Cartesian Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/cartesian/design.md`\n- Preview card: `bold-template-pack/templates/cartesian/preview.md`\n\n## Selection Metadata\n\n- Slug: `cartesian`\n- Tagline: Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried.\n- Mood: quiet, considered, elegant, warm-minimal\n- Tone: classical, literary, restrained, confident-quiet\n- Formality: high\n- Density: low\n- Scheme: light\n- Best for: Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks. Also a strong choice for editorial features, founder reflections, or any deck where restraint is the message — including across tech and finance.\n- Avoid for: Decks that need visual heat, multiple accents, or a sense of urgency — the warm-neutral palette is intentionally low-energy.\n\n## Visual Snapshot\n\nA quiet, museum-catalog editorial system built on Playfair Display serif headlines, Inter sans body, and a five-tone warm-stone palette. The aesthetic is \"consulting deck meets architectural monograph\" — minimal geometric line decorations (thin circles, dashed arcs, vertical and horizontal hairlines) drift behind content, suggesting drafting paper and compass work. Every divider is a single 1px line in a muted taupe; nothing is bold, nothing is loud. The cultural reference is Massimo Vignelli's editorial work, the Cooper Hewitt catalog, and pencil-and-tracing-paper urban planning documents.\n\nCartesian is a quiet museum-catalog editorial system. Its defining premise is restraint through 1px lines. Every structural element — list separators, agenda rules, timeline connectors, card borders, table dividers — is a single 1px line in a muted taupe {colors.line}. There are no thick borders, no fills, no shadows, no rounded surfaces. Hierarchy is built through type contrast and negative space; depth does not exist in the conventional sense.\n\n## Preview Ingredients\n\n- Palette: bg-primary #EDE8E0; bg-secondary #E2DBD1; text-primary #1A1A1A; text-secondary #5A5A5A; accent #8A8178; line #B8B0A4\n- Typography: Playfair Display; Inter\n- Signature move: Warm sandstone canvas {colors.bg-primary} with single 1px taupe {colors.line} dividers as the universal structural element.\n- Signature move: Playfair Display serif at weight 400 for every headline/numeral/quote-mark; Inter sans for every body/label/attribution.\n- Signature move: Five-tone monochrome palette: two stones, two grays, one ink. No vivid accent colors anywhere.\n- Signature move: Decorative geometric rings (thin solid + dashed circles, 20–50% opacity) drift behind content as compass-drafted atmosphere.\n- Signature move: Every label, attribution, and micro-text is uppercase Inter with 2–3px letter-spacing.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":985,"sizeBytes":4443},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/design.md","title":"Cobalt Grid","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Cobalt Grid\ndescription: \"A Japanese-magazine trend-report system built on warm cream paper, electric cobalt ink, and a graph-paper grid that lives permanently behind every slide. Newsreader serif headlines tower at 18vh while DM Mono carries chrome and ticker text. The signature decoration is a pixel-glitch column — vertical scanlines stair-stepped down the right edge of declarative slides — paired with QR-style 8×8 grid patches. The cultural reference is WIRED Japan, Shift magazine, and architectural trend reports printed in two-color risograph: cream + one cobalt.\"\n\ncolors:\n  paper: \"#F0EBDE\"\n  paper-2: \"#E6E0CE\"\n  ink: \"#1F2BE0\"\n  ink-soft: \"#5560E5\"\n  grid: \"rgba(31, 43, 224, 0.10)\"\n  ink-faint: \"rgba(31, 43, 224, 0.18)\"\n\ncolor-aliases:\n  rule: ink\n  bg: paper\n\ntypography:\n  display-hero:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(100px, min(11vw, 18vh), 200px)\"\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.008em\n  display-closing:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(72px, min(8.4vw, 14vh), 180px)\"\n    fontWeight: 400\n    lineHeight: 0.96\n    letterSpacing: -0.005em\n  display-chapter:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(56px, min(6vw, 10vh), 130px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.005em\n  display-quote:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(50px, min(5.6vw, 9vh), 110px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n  display-manifesto:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(56px, min(6.4vw, 11vh), 120px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n  headline:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(46px, min(4.8vw, 8.2vh), 92px)\"\n    fontWeight: 400\n    lineHeight: 0.95\n  headline-index:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(48px, min(5vw, 8.5vh), 100px)\"\n    fontWeight: 400\n    lineHeight: 0.95\n  vbig-numeral:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(110px, min(11vw, 18vh), 240px)\"\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.015em\n  ed-callout:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(28px, min(2.8vw, 4.6vh), 50px)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  row-headline:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(26px, 2vw, 40px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n  table-name:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(20px, 1.6vw, 28px)\"\n    fontWeight: 400\n    lineHeight: 1.15\n  micro:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(12px, 0.9vw, 14px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.16em\n    textTransform: uppercase\n  micro-strong:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(13px, 1vw, 16px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  micro-sm:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(11px, 0.75vw, 12px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  body:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(14px, 0.95vw, 15px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body-lede:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(15px, 1vw, 18px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body-stat:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(15px, 1vw, 17px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  mono-tag:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(13px, 0.9vw, 15px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.04em\n  mono-chrome:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.82vw, 13px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.06em\n  mono-tick:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(12px, 0.85vw, 14px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.04em\n\nspacing:\n  edge: \"clamp(36px, 3.6vw, 80px)\"\n  edge-inner: \"clamp(60px, 8vw, 160px)\"\n  pad-top: \"clamp(76px, 8vh, 130px)\"\n  pad-bottom: \"clamp(100px, 10vh, 150px)\"\n  gap-lg: \"clamp(28px, 3vw, 56px)\"\n  gap-md: \"clamp(20px, 2.2vh, 36px)\"\n  gap-sm: \"clamp(14px, 1.6vh, 24px)\"\n  gap-xs: \"clamp(10px, 1.2vh, 18px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  graph-paper-grid:\n    backgroundImage: \"linear-gradient(to right, {colors.grid} 1px, transparent 1px), linear-gradient(to bottom, {colors.grid} 1px, transparent 1px)\"\n    backgroundSize: \"clamp(28px, 2.2vw, 44px) clamp(28px, 2.2vw, 44px)\"\n    description: \"Permanent ::before pseudo on every stage. 28–44px squared graph paper grid in 10%-opacity cobalt that sits behind every slide at z-index 1. Cannot be turned off — it is the canvas tone.\"\n  hairlines:\n    height: \"1.5px\"\n    background: \"{colors.ink}\"\n    description: \"Two persistent slim cobalt rules — one at the top of every slide (≈2.6vh from top) and one near the bottom (≈2vh from bottom) — both inset from edges by {spacing.edge}. They frame the slide composition.\"\n  pagenum:\n    position: absolute\n    right: \"{spacing.edge}\"\n    bottom: \"clamp(48px, 4.8vh, 76px)\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.82vw, 13px)\"\n    color: \"{colors.ink}\"\n    letterSpacing: 0.06em\n    description: \"Mono cobalt page number anchored bottom-right above the bottom hairline. One per slide.\"\n  nav-hint:\n    position: fixed\n    left: \"{spacing.edge}\"\n    bottom: \"clamp(48px, 4.8vh, 76px)\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(10px, 0.75vw, 12px)\"\n    color: \"{colors.ink}\"\n    letterSpacing: 0.08em\n    opacity: 0.4\n    description: \"Mono cobalt navigation hint anchored bottom-left, mirrors pagenum.\"\n  pixel-glitch:\n    description: \"Stair-stepped column of vertical scanlines, rendered as inline SVG. Each stepped rectangle contains evenly-spaced cobalt vertical lines on cream. Sits absolutely positioned (typically right edge) at z-index 3, decorative only. Size ranges from 16vw × full-height (compact decoration) to 32vw × full-height (signature cover decoration).\"\n  qr-block:\n    display: grid\n    gridTemplateColumns: \"repeat(8, 1fr)\"\n    gridTemplateRows: \"repeat(8, 1fr)\"\n    gap: 1.5px\n    background: \"{colors.paper}\"\n    padding: 4px\n    boxShadow: \"0 0 0 1.5px {colors.paper}\"\n    description: \"8×8 QR-style mosaic of cobalt cells on cream background. Paper-fill ensures it reads as a discrete patch when overlapping the pixel-glitch column. Typical size 58–100px square.\"\n  topbar-rule:\n    borderBottom: \"1.5px solid {colors.ink}\"\n    paddingBottom: \"clamp(12px, 1.4vh, 22px)\"\n    description: \"1.5px cobalt rule under the topbar of an index, data, or table layout. Below the rule sits a Newsreader headline (left) and a mono lab-tag (right).\"\n  row-divider:\n    borderBottom: \"1px solid {colors.ink-faint}\"\n    description: \"Faint 18%-opacity cobalt rule between rows of an index list, table, or ledger.\"\n  attribution-rule:\n    borderTop: \"1px solid {colors.ink}\"\n    paddingTop: \"clamp(10px, 1.2vh, 18px)\"\n    description: \"Solid cobalt rule above a quote attribution or manifesto byline.\"\n  pixel-stack-bars:\n    description: \"Vertical bar chart rendered as a column of stacked 'cells' — flex column-reverse with 3px gaps, each cell a small horizontal block. Cells default to 10%-opacity cobalt (the grid color); .on cells fill solid cobalt to represent the value. Reads as a pixelated bar made of grid units.\"\n  ledger-row:\n    display: grid\n    gridTemplateColumns: \"76px 0.6fr 1.4fr 0.7fr 0.5fr\"\n    gap: \"clamp(14px, 1.4vw, 28px)\"\n    borderBottom: \"1px solid {colors.ink-faint}\"\n    description: \"Dense table row carrying a num-tag, name (Newsreader), description (Hanken Grotesk), mood-tag, and delta-tag (mono with up/down arrow prefix). Header row uses 1.5px solid cobalt bottom border.\"\n  vstack-label:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    writingMode: \"vertical-rl\"\n    textOrientation: \"mixed\"\n    letterSpacing: 0.04em\n    description: \"Vertical-orientation mono label column anchored to the right edge of a slide. Replaces the Korean vertical column of the reference with mono catalogue text rotated 90°.\"\n  delta-up:\n    content: \"↑ \"\n    description: \"Up arrow prefix via ::before on a mono delta tag in the ledger table.\"\n  delta-down:\n    content: \"↓ \"\n    opacity: 0.6\n    description: \"Down arrow prefix via ::before, dimmed 40% to read as decline.\"\n  delta-flat:\n    content: \"— \"\n    opacity: 0.6\n    description: \"Em-dash prefix via ::before, dimmed 40% to read as neutral.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCobalt Grid is a **two-color trend-report editorial system** built on three immovable foundations: a warm cream paper canvas (`{colors.paper}`), an electric cobalt ink (`{colors.ink}`), and a **permanent graph-paper grid** that sits behind every slide. The grid is not optional decoration — it is rendered via a `::before` pseudo on every `.stage` and cannot be turned off. The aesthetic is \"two-color risograph monograph\": cream + cobalt only, with the grid lending the entire deck the feel of architectural tracing paper or a Japanese trend report.\n\nThe typeface stack is a deliberate three-face conversation. **Newsreader** — a contemporary literary serif with low-modulation roman letterforms — carries every display moment, every section headline, every stat numeral. Newsreader is used at weight 400 only; the type relies on size to assert hierarchy, not weight. **Hanken Grotesk** — a humanist sans — carries every body paragraph, every uppercase label, every micro-text. Hanken runs at 400 for body and 600 for labels. **DM Mono** — a monospace — carries every chrome element: page numbers, mono tags, axis ticks, vertical-stack labels, delta arrows in tables. The three-face system creates the system's identity: serif statements + sans bodies + mono chrome.\n\nThe palette is **strictly two-color**: cream and cobalt, with a softer cobalt `{colors.ink-soft}` and two opacity tones (`{colors.grid}` at 10%, `{colors.ink-faint}` at 18%) for atmospheric and structural use. There are no accent colors. Cobalt is the *only* ink color — for headlines, body, borders, page numbers, the graph paper, the pixel-glitch decoration, and the QR patches. The cream paper is the *only* surface. Even the pixel-stack bar chart uses cobalt at two opacities (10% off, 100% on) to render data.\n\nDepth is **flat with structural rules**. There are no drop shadows, no elevated cards, no rounded surfaces. Hierarchy comes from:\n- The 1.5px cobalt **hairline frame** (top and bottom of every slide).\n- 1.5px cobalt **topbar rule** under section headers.\n- 1px faint-cobalt **row dividers** between table or index entries.\n- The 10%-opacity **graph paper grid** behind everything.\n- The pixel-glitch and QR-block **decorative SVG patches** as compositional accents.\n\n**Density philosophy: medium to dense, structured by the grid.** Cobalt Grid is built for editorial density — magazine spreads, trend indices, data ledgers. A correctly composed slide pairs one large Newsreader headline with multiple structured information rows (an index of six trends, a ledger of eight entries, a chart with eight pixel-stack bars). The graph paper underneath actively wants to be filled; sparse slides leave too much grid showing and read as wireframe. The exception is the manifesto, quote, and colophon layouts, which deliberately leave space open and let the graph paper breathe. Choose density by slide type: chapter / manifesto / quote / colophon are sparse; index / data / table are dense.\n\n**Key Characteristics:**\n- Cream paper canvas `{colors.paper}` with electric cobalt `{colors.ink}` as the only ink — strictly two-color.\n- Permanent 28–44px graph-paper grid in 10%-opacity cobalt behind every slide.\n- Top and bottom 1.5px cobalt hairlines frame every slide with `{spacing.edge}` insets.\n- Newsreader serif at weight 400 for every display/headline; Hanken Grotesk sans for body/labels; DM Mono for all chrome.\n- Pixel-glitch vertical scanline columns and QR-style 8×8 mosaics as the system's signature decorative patches.\n- Display type can be enormous — `{typography.display-hero}` up to 18vh (≈194px on a 1080-tall display) and `{typography.vbig-numeral}` to 240px.\n- Hanken labels are uppercase at 0.16–0.18em letter-spacing; mono tags carry 0.04–0.06em tracking.\n- Pixel-stack bar charts render data as stacks of grid-unit cells (cobalt on / cobalt-10% off).\n- Page number bottom-right, mono navigation hint bottom-left, both anchored above the bottom hairline.\n\n## Colors\n\n### Two-Color System\n- **Paper** (`{colors.paper}` — #F0EBDE): The canvas. Warm cream off-white with a clear yellow-warm bias — closer to \"newsprint paper\" than \"blank white.\" Used as the universal slide background and as the fill behind QR-blocks so they read as discrete patches against the pixel-glitch column.\n- **Paper-2** (`{colors.paper-2}` — #E6E0CE): A slightly deeper cream. Defined in the palette but used sparingly — available for subtle region differentiation when needed.\n- **Ink** (`{colors.ink}` — #1F2BE0): Electric cobalt / royal blue. The *only* ink color in the system. Used for all headlines, all body text, all borders, all chrome, the graph paper grid, the pixel-glitch decoration, and the QR patches. The high saturation is intentional — at full strength it reads as risograph-printed cobalt, not navy blue.\n- **Ink Soft** (`{colors.ink-soft}` — #5560E5): A lighter cobalt for secondary marks. Defined in the palette but used sparingly — most softened cobalt in the system comes from opacity-on-ink rather than this dedicated tone.\n- **Grid** (`{colors.grid}` — rgba(31, 43, 224, 0.10)): 10%-opacity cobalt. Used exclusively for the permanent graph-paper grid behind every slide, and for the \"off\" cells in pixel-stack bar charts.\n- **Ink Faint** (`{colors.ink-faint}` — rgba(31, 43, 224, 0.18)): 18%-opacity cobalt. Used exclusively for the faint row dividers in index lists, tables, and ledgers — between rows that share the same dense information layer.\n\n### Defaults\n- **Default slide surface**: `{colors.paper}`.\n- **Default headline color**: `{colors.ink}` — every Newsreader serif headline is cobalt. There is no other headline color.\n- **Default body text color**: `{colors.ink}` — body is also cobalt, just smaller. Cobalt-on-cream is the system's only text relationship.\n- **Default label / mono / micro color**: `{colors.ink}`.\n- **Default border color (structural rules)**: `{colors.ink}` at 1.5px solid.\n- **Default border color (row dividers within dense lists)**: `{colors.ink-faint}` at 1px solid.\n- **Default grid color**: `{colors.grid}` — never visible at full strength; never disabled.\n- **Default chart data color (on)**: `{colors.ink}`.\n- **Default chart data color (off)**: `{colors.grid}`.\n\nThe system has **no accent color** in the populist sense. A second color does not exist — adding a red callout, a green stat, or a yellow highlight breaks the risograph two-color identity. When emphasis is needed, increase type size, switch from Hanken to Newsreader, add a mono delta arrow, or use opacity to dim rather than coloring to highlight.\n\n## Typography\n\n### Font Family\nThe system runs on a **three-face conversation**: `Newsreader` (serif, weight 400 / 500 italic) carries every display and headline; `Hanken Grotesk` (sans, weights 400–700) carries every body, label, and micro-text; `DM Mono` (monospace, 400–500) carries every chrome element. There is no fourth face.\n\nNewsreader's roman letterforms run at weight 400 almost exclusively — the type relies on size to assert hierarchy, not weight. Italic Newsreader is loaded (300/400/500 italic axis) and is used inside the manifesto's `.roman` modifier (which is *non-italic* — the modifier flips the italic body back to roman for an inline pull moment) and is available for inline `<em>` emphasis. Hanken Grotesk carries body at 400 and labels at 600. DM Mono provides chrome at 400.\n\nThe serif/grotesk/mono three-way pairing is the system's primary typographic rhythm. Each face has a strict role: serif = statement, grotesk = supporting copy, mono = catalogue chrome.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.vbig-numeral}` | clamp(110px, min(11vw, 18vh), 240px) | Newsreader | 400 | Largest numerical display — hero stat figure |\n| `{typography.display-hero}` | clamp(100px, min(11vw, 18vh), 200px) | Newsreader | 400 | Largest title — cover or hero display |\n| `{typography.display-closing}` | clamp(72px, min(8.4vw, 14vh), 180px) | Newsreader | 400 | Conclusive headline on a colophon/closing layout |\n| `{typography.display-chapter}` | clamp(56px, min(6vw, 10vh), 130px) | Newsreader | 400 | Section-opening or chapter title |\n| `{typography.display-manifesto}` | clamp(56px, min(6.4vw, 11vh), 120px) | Newsreader | 400 | Manifesto statement display |\n| `{typography.display-quote}` | clamp(50px, min(5.6vw, 9vh), 110px) | Newsreader | 400 | Pull-quote body |\n| `{typography.headline-index}` | clamp(48px, min(5vw, 8.5vh), 100px) | Newsreader | 400 | Index or trend-list section header |\n| `{typography.headline}` | clamp(46px, min(4.8vw, 8.2vh), 92px) | Newsreader | 400 | Data, table, or chart section header |\n| `{typography.ed-callout}` | clamp(28px, min(2.8vw, 4.6vh), 50px) | Newsreader | 400 | Editorial subtitle below a hero title |\n| `{typography.row-headline}` | clamp(26px, 2vw, 40px) | Newsreader | 400 | Per-row headline inside an index list |\n| `{typography.table-name}` | clamp(20px, 1.6vw, 28px) | Newsreader | 400 | Per-row name cell inside a ledger table |\n| `{typography.body-lede}` | clamp(15px, 1vw, 18px) | Hanken Grotesk | 400 | Lead paragraph below a chapter title |\n| `{typography.body-stat}` | clamp(15px, 1vw, 17px) | Hanken Grotesk | 400 | Descriptive paragraph next to a stat figure |\n| `{typography.body}` | clamp(14px, 0.95vw, 15px) | Hanken Grotesk | 400 | Standard paragraph body |\n| `{typography.micro-strong}` | clamp(13px, 1vw, 16px) | Hanken Grotesk | 600 | Largest uppercase label / kicker |\n| `{typography.micro}` | clamp(12px, 0.9vw, 14px) | Hanken Grotesk | 600 | Standard uppercase label / lab-tag |\n| `{typography.micro-sm}` | clamp(11px, 0.75vw, 12px) | Hanken Grotesk | 600 | Smallest uppercase label / table header |\n| `{typography.mono-tag}` | clamp(13px, 0.9vw, 15px) | DM Mono | 400 | Mono catalogue tag, num-tag in an index row |\n| `{typography.mono-tick}` | clamp(12px, 0.85vw, 14px) | DM Mono | 400 | Mono chart tick label, vertical-stack-label entry |\n| `{typography.mono-chrome}` | clamp(11px, 0.82vw, 13px) | DM Mono | 400 | Mono page number, navigation hint, secondary meta |\n\n### Defaults\n- **Default size for the primary section headline (index, data, table)**: `{typography.headline}` (clamp 46–92px) or `{typography.headline-index}` for index layouts.\n- **Default size for a cover or hero display**: `{typography.display-hero}` (clamp 100–200px).\n- **Default size for a chapter or section-opener title**: `{typography.display-chapter}` (clamp 56–130px).\n- **Default size for paragraph body**: `{typography.body}` (clamp 14–15px).\n- **Default size for any inline uppercase label**: `{typography.micro}` (clamp 12–14px) at weight 600 with 0.16em tracking.\n- **Default size for any mono chrome (page number, tag, tick)**: `{typography.mono-tag}` (clamp 13–15px).\n- **Default weight for Newsreader**: 400. Newsreader bold is not used.\n- **Default weight for Hanken body**: 400.\n- **Default weight for Hanken label**: 600.\n\nWhen unsure, reach for `{typography.headline}` (clamp 46–92px) for the slide's primary section header, not `{typography.display-chapter}` (which is for chapter-opening moments only).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Newsreader element is set at weight 400.** Newsreader at 600/700 is not used in this system. The literary-serif aesthetic depends on the open roman letterforms at modest weight.\n- **Every Newsreader element is rendered in `{colors.ink}` (cobalt).** A cream serif headline does not exist.\n- **Every Hanken label, kicker, lab-tag, and micro-text is uppercase with at least 0.16em letter-spacing** at weight 600. Hanken caps without tracking read as untreated.\n- **Every DM Mono element is rendered in `{colors.ink}` with 0.04–0.08em letter-spacing.** Mono with tighter tracking reads as code, not editorial.\n- **Every display element carries negative letter-spacing.** Display-hero at -0.008em, vbig-numeral at -0.015em, chapter / closing / manifesto / quote at -0.005em.\n- **The graph-paper grid is permanent on every slide.** The `.stage::before` rule is not overridable per-slide — every composition sits on top of it.\n- **The top and bottom hairlines frame every slide.** The `.hairlines::before` and `.hairlines::after` rules apply by default; they should not be suppressed.\n- **Page number sits above the bottom hairline with clear vertical space.** The bottom hairline anchors at `bottom: clamp(20px, 2vh, 32px)`; the page number anchors at `bottom: clamp(48px, 4.8vh, 76px)` — they must not collide.\n\n### Typography Principles\nThe Newsreader-400 + Hanken-600-uppercase-tracked + DM-Mono-tracked combination is the system's voice. Switching any of those three face/weight/case rules reads as a different design system. Italic is permitted via Newsreader italic (loaded) for inline `<em>` and for the manifesto's editorial italic-with-`.roman`-flip treatment. Underline is not used.\n\nLine-height collapses at the top: display-hero / vbig-numeral at 0.92, display-chapter at 1.0, body at 1.5. The tight display + open body contrast is what gives the system its trend-report rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, pointer-events auto) at a time. Transitions are 280ms opacity fades.\n\nA `.stage` wrapper sits inside `.deck` (`position: fixed; inset: 0`) and provides the cream background plus the permanent `::before` graph-paper grid.\n\n### Edge and Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.edge}` | clamp(36px, 3.6vw, 80px) | Standard slide edge inset for content, page number, hairlines |\n| `{spacing.edge-inner}` | clamp(60px, 8vw, 160px) | Tighter inset used for manifesto-style centered statements |\n| `{spacing.pad-top}` | clamp(76px, 8vh, 130px) | Top padding inside index/data/table frame, below the top hairline |\n| `{spacing.pad-bottom}` | clamp(100px, 10vh, 150px) | Bottom padding inside index/data/table frame, above the bottom hairline |\n| `{spacing.gap-lg}` | clamp(28px, 3vw, 56px) | Large gap between major regions inside a slide |\n| `{spacing.gap-md}` | clamp(20px, 2.2vh, 36px) | Standard inter-element spacing |\n| `{spacing.gap-sm}` | clamp(14px, 1.6vh, 24px) | Tight spacing — chrome bar inner gap, attribution-to-quote gap |\n| `{spacing.gap-xs}` | clamp(10px, 1.2vh, 18px) | Vertical-stack row gap, smallest inter-element gap |\n\n### Universal Chrome Frame\nEvery slide carries a four-piece chrome frame:\n1. **Top hairline** — 1.5px solid cobalt at ≈2.6vh from top, inset by `{spacing.edge}` left/right.\n2. **Bottom hairline** — 1.5px solid cobalt at ≈2vh from bottom, inset by `{spacing.edge}` left/right.\n3. **Page number** — DM Mono cobalt anchored bottom-right, ≈4.8vh from bottom (above the bottom hairline).\n4. **Nav hint** — DM Mono cobalt at 40% opacity anchored bottom-left, same vertical level as page number.\n\nThis frame is rendered automatically by the `.hairlines` and `.pagenum` / `.nav-hint` rules — every new slide inherits it.\n\nA nested **`.frame` content rectangle** sits inside the chrome on index, data, table, and chapter layouts. It is absolutely positioned with `inset: {spacing.pad-top} {spacing.edge} {spacing.pad-bottom}` and serves as the actual content container.\n\n### Composition Patterns\nWithin the chrome frame, content typically follows one of these compositional moves (not enumerated as available layouts — these are descriptive, not prescriptive):\n- A `topbar` block (Newsreader headline left, mono lab-tag right, 1.5px cobalt rule beneath) above a main content region.\n- A pixel-glitch column anchored to the right edge of the content region (or occasionally the left, as on the colophon).\n- A QR-block patch as a small punctuation mark (typically top-right corner).\n- A vertical-stack mono label column anchored to one edge.\n- A dense ledger or index of equal-flex rows separated by faint cobalt dividers.\n\n## Depth and Elevation\n\n### Flat With Structural Rules\nCobalt Grid has no drop shadows, no elevated cards, no rounded surfaces, no gradients. Every element sits on a single plane.\n\nDepth signals are entirely structural:\n- **1.5px cobalt rules** — top/bottom slide hairlines, topbar rule, attribution rule.\n- **1px faint cobalt dividers** — row separators inside index lists, tables, and ledgers.\n- **Graph-paper grid** — the 10%-opacity cobalt background creates a sense of measured plane.\n- **Pixel-glitch decoration** — vertical scanline columns add visual texture without z-axis elevation.\n- **QR-block patches** — read as discrete graphic objects against the grid+glitch background due to their paper-fill and 1.5px paper-color outset shadow (which is functionally an \"anti-shadow\" — it pushes the grid away so the QR mosaic stays readable).\n\nThe QR-block's 1.5px paper-color outset is the *only* shadow-like effect in the system, and it exists to preserve readability against the pixel-glitch column, not to create elevation. There is no z-axis depth.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 0 | Every structural element — frames, cards, ledger rows, QR cells, pixel-glitch rectangles, charts, tables |\n| 50% (circle) | None — Cobalt Grid has no circular elements |\n\nThe system uses **zero rounded corners**. Every shape is a strict rectangle. This is unusual for editorial systems and is part of the trend-report identity.\n\n### Border Weights\n- **1.5px solid `{colors.ink}`** — primary structural rules: top/bottom slide hairlines, topbar bottom rule, table head row bottom border, chart baseline rule.\n- **1px solid `{colors.ink}`** — attribution rules above quote bylines, manifesto attribution top border.\n- **1px solid `{colors.ink-faint}`** (18% opacity) — faint row dividers between dense list / table / ledger entries.\n- **1px solid `{colors.grid}`** (10% opacity) — the permanent graph-paper grid behind every slide.\n- **1.5px box-shadow in `{colors.paper}`** — QR-block readability outset (functional, not decorative).\n\nAll structural borders are cobalt. Colored borders do not exist (there is no \"colored\" — only cobalt at different opacities).\n\n### Decorative Element Types\n\n**Pixel-glitch column** — A stair-stepped vertical column rendered as inline SVG. Each step is a rectangle filled with evenly-spaced cobalt vertical scanlines on cream. Steps decrease in width as the column descends (or vice versa), creating a \"glitch\" pixelation effect. Anchored to one edge of a slide (typically right), absolutely positioned, z-index 3, pointer-events disabled. Decorative only — sizes range from compact 16vw × full-height secondary use to 32vw × full-height signature cover decoration. Opacity 0.6–1.0 depending on context (lower opacity when used as background, full opacity when used as primary decoration).\n\n**QR-block patch** — An 8×8 grid of cells (some `.on` = solid cobalt, some default = paper) forming a QR-code-like mosaic. Sits over a paper-fill background with 4px internal padding and 1.5px paper-color outset (which preserves readability when overlapping the pixel-glitch column). Typical size 58–100px square. Used as compositional punctuation — typically top-right corner.\n\n**Vertical-stack label column** — A column of DM Mono labels written with `writing-mode: vertical-rl` and `text-orientation: mixed`, rotating Latin text 90° clockwise. Anchored to right edge, vertically centered, evenly spaced. Reads as catalogue-style metadata stacked along the slide edge.\n\n**Topbar (with rule)** — A flex row containing a Newsreader headline left and a small mono lab-tag right, separated from the content below by a 1.5px solid cobalt bottom border. The universal section-header pattern.\n\n**Frame** — An absolutely-positioned content container with `inset: {spacing.pad-top} {spacing.edge} {spacing.pad-bottom}`. Holds the slide's actual content while keeping it clear of the hairline frame, page number, and nav hint.\n\n**Index list** — A 2×3 grid of equal-flex rows, each row a 56px num-tag column + a content column with a Newsreader row-headline and a Hanken body paragraph, separated by 1px faint-cobalt bottom borders.\n\n**Pixel-stack bar chart** — A row of 8 vertical \"stacks,\" each a flex column-reverse of small horizontal cells (default 10%-cobalt off, .on solid cobalt). Cell counts represent values. A 1.5px cobalt top border with mono tick labels sits beneath the bars as the axis. Renders data as pixelated bars made of grid units — directly echoes the pixel-glitch decoration.\n\n**Ledger table** — A flex column of dense rows, each row a 5-column grid (76px num-tag / 0.6fr name / 1.4fr description / 0.7fr mood-tag / 0.5fr delta-tag), separated by 1px faint-cobalt bottom borders. Header row uses 1.5px solid cobalt. Delta tags use `↑` / `↓` / `—` prefixes via `::before`.\n\n**Manifesto** — A centered statement in `{typography.display-manifesto}` Newsreader with an italic `<em>` body containing inline `.roman` (non-italic) emphasis moments. Below: a 1px cobalt top border with a Hanken who-tag and a mono meta-tag side-by-side.\n\n**Quote** — A Hanken kicker above a `{typography.display-quote}` Newsreader pull, with a 1px cobalt top-border attribution row beneath. Paired with a compact pixel-glitch column at the right edge.\n\n**Colophon** — Right-aligned closing layout. A large `{typography.display-closing}` Newsreader title aligned right with a kicker above. Pixel-glitch column anchored to left edge (mirroring the cover). Page footer with 3–4 column grid of paragraph credits.\n\n## Do's and Don'ts\n\n### Do\n- Set every Newsreader element at weight 400 in `{colors.ink}`. The thin roman serif at modest weight is the literary register's identity.\n- Render every label, kicker, and micro-text in Hanken Grotesk weight 600 uppercase with 0.16em+ letter-spacing in `{colors.ink}`.\n- Render every chrome element (page number, mono tag, tick label, vertical-stack) in DM Mono with 0.04–0.08em tracking in `{colors.ink}`.\n- Keep the permanent graph-paper grid behind every slide. The grid is the system — disabling it breaks the identity.\n- Maintain the top and bottom 1.5px cobalt hairlines on every slide, with the page number and nav hint sitting above the bottom hairline.\n- Use the pixel-glitch column as the system's primary decorative move on declarative slides (cover, chapter, quote, colophon).\n- Pair pixel-glitch with a QR-block patch when the composition needs a discrete graphic anchor — the QR's paper-fill keeps it readable against the glitch lines.\n- Use the `topbar + 1.5px cobalt rule` pattern as the standard section-header treatment on index, data, and table layouts.\n- Use 1px faint-cobalt dividers between rows of dense lists, tables, and ledgers.\n- Render charts as pixel-stack columns of grid cells (cobalt on / cobalt-10% off). The pixel-stack bar treatment echoes the decorative glitch and unifies the visual language.\n\n### Don't\n- Don't introduce a second ink color. The system is strictly two-color: cream paper + cobalt ink. A second hue breaks the risograph identity.\n- Don't render a Newsreader headline at weight 600 or 700. The 400-only rule is a signature.\n- Don't disable or hide the graph-paper grid. It is the canvas tone, not optional decoration.\n- Don't suppress the top/bottom hairlines on a slide. They are the frame — every slide carries them.\n- Don't round any corner. Every shape is a strict rectangle; the system has zero circular elements.\n- Don't add drop shadows, elevated cards, or gradient fills. Depth is structural (rules + grid + glitch), not z-axis.\n- Don't use Hanken caps without 0.16em+ tracking. Untracked Hanken caps read as untreated.\n- Don't put the page number directly on the bottom hairline. It sits at `bottom: clamp(48px, 4.8vh, 76px)` with clear space above the hairline.\n- Don't render the QR-block without its paper-fill and 1.5px paper outset. The fill is what preserves QR readability against the pixel-glitch column.\n- Don't crowd the manifesto, quote, or colophon layouts. Those layouts deliberately leave grid showing — over-stuffing them breaks the contemplative register.\n\n## Responsive Behavior\n\nCobalt Grid is a viewport-fluid 1920×1080 presentation system using `clamp()` and viewport-relative units throughout. There are no explicit responsive breakpoints in the source — every dimension scales between a min and max.\n\n### Scaling Behavior\n- Display-hero scales from ~100px at minimum viewport to ~200px at maximum.\n- Body text scales from 14px to 15px (deliberately narrow range — body stays compact).\n- Graph-paper grid scales from 28px cells (smaller viewports) to 44px cells (larger viewports), maintaining roughly 50–80 cells across the slide width.\n- Edge insets scale from 36px to 80px.\n- The 1.5px hairlines and 1px row dividers are fixed and do not scale.\n\n### Presenter Behavior\n- Slides cross-fade via 280ms opacity transitions.\n- Navigation is JS-driven (the source includes a `.deck` / `.slide.active` pattern); typical keyboard arrow / spacebar conventions apply.\n- The nav hint at bottom-left displays interaction guidance in mono cobalt at 40% opacity.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080. The grid and hairline overlays should render correctly in PDF capture (no blend modes or filters).\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Newsreader 400) | Newsreader | 思源宋体 Noto Serif SC 700 | Google Fonts |\n| Body / Label (Hanken Grotesk 400–600) | Hanken Grotesk | 思源宋体 Noto Serif SC 400 | Google Fonts |\n| Chrome / Mono (DM Mono) | DM Mono | DM Mono (Latin/digit only — keep mono chrome in Latin) | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin font in the same `font-family` stack so Latin glyphs render in Newsreader / Hanken Grotesk and CJK glyphs fall through to NSC automatically. Mono chrome stays Latin/digit-only — page numbers, ticks, and vertical-stack tags do not need a CJK fallback (and DM Mono has no CJK glyphs by design).\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,400..500;1,6..72,400..500&family=Hanken+Grotesk:wght@400..700&family=DM+Mono:wght@400..500&family=Noto+Serif+SC:wght@400;700&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Newsreader\", \"Noto Serif SC\", Georgia, serif;\n  --font-body: \"Hanken Grotesk\", \"Noto Serif SC\", sans-serif;\n  --font-mono: \"DM Mono\", ui-monospace, monospace;\n}\n/* Headlines use Noto Serif SC 700; body uses Noto Serif SC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.7 (from 1.5) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 0.16em+ Hanken caps tracking shatters Hanzi cadence). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any micro/label/kicker when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nNoto Serif SC (思源宋体) is the natural Hanzi partner for Newsreader — both are quiet literary serifs with thin-thick modulation that holds at very large display sizes (up to 18vh / 240px on the vbig-numeral). The cobalt-on-cream two-color rule absorbs Chinese without negotiation because there's only one ink color to assign. NSC 700 carries display moments where Newsreader 400 would have at 100–200px; NSC 400 carries body and labels. The DM Mono chrome layer (page numbers, vertical-stack tags, ticks) intentionally stays Latin/digit-only — `编号 001` is rendered as Latin \"001\" in DM Mono with the Hanzi prefix in Hanken/NSC, preserving the mono catalogue chrome's \"technical spec\" voice. The graph-paper grid, pixel-glitch column, and QR-block decoration are content-agnostic and read identically in any language. Vertical-stack labels written with `writing-mode: vertical-rl` work for Hanzi too — Chinese is the original vertical script — but mixing Latin and Hanzi in the same vertical run will rotate the Hanzi to upright while keeping Latin rotated 90°; isolate runs by language.\n\n### Known CJK Gap\n\nNoto Serif SC has no italic axis (Chinese type historically has no italic), so the manifesto layout's italic-Newsreader-with-`.roman`-flip emphasis pattern collapses when content is Hanzi. Substitute a weight contrast (NSC 700 vs NSC 400) or a faint-cobalt tone (`{colors.ink-faint}`) to recover the emphasis register. Newsreader's optical-size axis (6..72) has no NSC equivalent — the literary \"this is a small caption\" optical refinement is unavailable for Hanzi, but at NSC's quality this is rarely noticeable.\n\n## Iteration Guide\n\n1. Every new slide inherits the permanent graph-paper grid, the top and bottom 1.5px cobalt hairlines, the page number bottom-right, and the nav hint bottom-left. Don't author these per-slide — they live on `.stage` and `.hairlines`.\n2. Every new headline uses Newsreader at weight 400 in `{colors.ink}`. Don't bold; don't color.\n3. Every new label uses Hanken Grotesk weight 600 uppercase with 0.16em+ letter-spacing in `{colors.ink}`.\n4. Every new chrome element uses DM Mono in `{colors.ink}` with 0.04–0.08em tracking.\n5. New content slides on index / data / table layouts use a topbar (Newsreader headline left + Hanken lab-tag right) with a 1.5px cobalt bottom rule.\n6. New chart slides use the pixel-stack treatment — cobalt on / cobalt-10% off cells in column-reverse stacks. Don't introduce filled bar charts in a single solid block.\n7. New declarative slides (cover, chapter, quote, colophon) use a pixel-glitch column as the primary decoration. Pair with a QR-block when the composition needs a discrete graphic anchor.\n8. New row dividers in dense lists use 1px solid `{colors.ink-faint}` (18% opacity), not full-strength cobalt. Full-strength cobalt is reserved for major structural rules.\n9. New components inherit the zero-radius, no-shadow, no-gradient flatness. If a component breaks any of these, redesign it before adding.\n10. The system has one ink color (`{colors.ink}`) and one surface (`{colors.paper}`). New compositions should never introduce a third color or a third surface tone (paper-2 is available but rarely needed).\n\n## Known Gaps\n\n- The pixel-glitch column is rendered as inline SVG hand-authored per usage; there is no generative component — adjusting the stair-step pattern requires editing the SVG markup directly.\n- The QR-block 8×8 cell pattern is hand-authored per usage; each instance places `.on` cells manually. There is no QR-code generation logic.\n- The pixel-stack bar chart cell counts are hardcoded in markup; there is no data-binding layer translating numeric values to cell-on counts.\n- The vertical-stack label column uses `writing-mode: vertical-rl`; this works in modern browsers but rendering of mixed Latin/CJK in this orientation may vary across rendering engines.\n- The manifesto layout's italic-with-`.roman`-flip pattern (italic Newsreader body containing inline non-italic `.roman` spans for emphasis) is the inverse of typical italic emphasis — the rule lives in the manifesto-specific CSS and is not generalized.\n- The 1.5px paper-color outset on the QR-block is a `box-shadow` used as an anti-shadow (it extends the paper fill outward to clear the grid behind the QR cells). This is the only `box-shadow` in the system and it should not be repurposed for elevation.\n- The colophon's pixel-glitch column anchors to the left edge (mirroring the cover); other slides anchor to the right edge — the directionality is per-slide and should be considered when authoring new declarative layouts.\n- The graph-paper grid cell size scales between 28–44px via `clamp` — at extreme aspect ratios, the grid count across the slide width may feel uneven.\n- The system loads three Google Fonts families (Newsreader, Hanken Grotesk, DM Mono) with multiple weights — initial render requires successful font load to avoid Georgia/Helvetica fallback shifting the visual rhythm.\n","frontmatter":{"version":"alpha","name":"Cobalt Grid","description":"A Japanese-magazine trend-report system built on warm cream paper, electric cobalt ink, and a graph-paper grid that lives permanently behind every slide. Newsreader serif headlines tower at 18vh while DM Mono carries chrome and ticker text. The signature decoration is a pixel-glitch column — vertical scanlines stair-stepped down the right edge of declarative slides — paired with QR-style 8×8 grid patches. The cultural reference is WIRED Japan, Shift magazine, and architectural trend reports printed in two-color risograph: cream + one cobalt.","colors":{"paper":"#F0EBDE","paper-2":"#E6E0CE","ink":"#1F2BE0","ink-soft":"#5560E5","grid":"rgba(31, 43, 224, 0.10)","ink-faint":"rgba(31, 43, 224, 0.18)"},"color-aliases":{"rule":"ink","bg":"paper"},"typography":{"display-hero":{"fontFamily":"Newsreader, Georgia, serif","fontSize":"clamp(100px, min(11vw, 18vh), 200px)","fontWeight":400,"lineHeight":0.92,"letterSpacing":"-0.008em"},"display-closing":{"fontFamily":"Newsreader, Georgia, serif","fontSize":"clamp(72px, min(8.4vw, 14vh), 180px)","fontWeight":400,"lineHeight":0.96,"letterSpacing":"-0.005em"},"display-chapter":{"fontFamily":"Newsreader, Georgia, serif","fontSize":"clamp(56px, min(6vw, 10vh), 130px)","fontWeight":400,"lineHeight":1,"letterSpacing":"-0.005em"},"display-quote":{"fontFamily":"Newsreader, Georgia, serif","fontSize":"clamp(50px, min(5.6vw, 9vh), 110px)","fontWeight":400,"lineHeight":1.05,"letterSpacing":"-0.005em"},"display-manifesto":{"fontFamily":"Newsreader, Georgia, serif","fontSize":"clamp(56px, min(6.4vw, 11vh), 120px)","fontWeight":400,"lineHeight":1.05,"letterSpacing":"-0.005em"},"headline":{"fontFamily":"Newsreader, Georgia, serif","fontSize":"clamp(46px, min(4.8vw, 8.2vh), 92px)","fontWeight":400,"lineHeight":0.95},"headline-index":{"fontFamily":"Newsreader, Georgia, serif","fontSize":"clamp(48px, min(5vw, 8.5vh), 100px)","fontWeight":400,"lineHeight":0.95},"vbig-numeral":{"fontFamily":"Newsreader, Georgia, serif","fontSize":"clamp(110px, min(11vw, 18vh), 240px)","fontWeight":400,"lineHeight":0.92,"letterSpacing":"-0.015em"},"ed-callout":{"fontFamily":"Newsreader, Georgia, serif","fontSize":"clamp(28px, min(2.8vw, 4.6vh), 50px)","fontWeight":400,"lineHeight":1.1},"row-headline":{"fontFamily":"Newsreader, Georgia, serif","fontSize":"clamp(26px, 2vw, 40px)","fontWeight":400,"lineHeight":1.05},"table-name":{"fontFamily":"Newsreader, Georgia, serif","fontSize":"clamp(20px, 1.6vw, 28px)","fontWeight":400,"lineHeight":1.15},"micro":{"fontFamily":"Hanken Grotesk, sans-serif","fontSize":"clamp(12px, 0.9vw, 14px)","fontWeight":600,"lineHeight":1,"letterSpacing":"0.16em","textTransform":"uppercase"},"micro-strong":{"fontFamily":"Hanken Grotesk, sans-serif","fontSize":"clamp(13px, 1vw, 16px)","fontWeight":600,"lineHeight":1,"letterSpacing":"0.18em","textTransform":"uppercase"},"micro-sm":{"fontFamily":"Hanken Grotesk, sans-serif","fontSize":"clamp(11px, 0.75vw, 12px)","fontWeight":600,"lineHeight":1,"letterSpacing":"0.18em","textTransform":"uppercase"},"body":{"fontFamily":"Hanken Grotesk, sans-serif","fontSize":"clamp(14px, 0.95vw, 15px)","fontWeight":400,"lineHeight":1.5},"body-lede":{"fontFamily":"Hanken Grotesk, sans-serif","fontSize":"clamp(15px, 1vw, 18px)","fontWeight":400,"lineHeight":1.5},"body-stat":{"fontFamily":"Hanken Grotesk, sans-serif","fontSize":"clamp(15px, 1vw, 17px)","fontWeight":400,"lineHeight":1.5},"mono-tag":{"fontFamily":"DM Mono, ui-monospace, monospace","fontSize":"clamp(13px, 0.9vw, 15px)","fontWeight":400,"lineHeight":1,"letterSpacing":"0.04em"},"mono-chrome":{"fontFamily":"DM Mono, ui-monospace, monospace","fontSize":"clamp(11px, 0.82vw, 13px)","fontWeight":400,"lineHeight":1,"letterSpacing":"0.06em"},"mono-tick":{"fontFamily":"DM Mono, ui-monospace, monospace","fontSize":"clamp(12px, 0.85vw, 14px)","fontWeight":400,"lineHeight":1,"letterSpacing":"0.04em"}},"spacing":{"edge":"clamp(36px, 3.6vw, 80px)","edge-inner":"clamp(60px, 8vw, 160px)","pad-top":"clamp(76px, 8vh, 130px)","pad-bottom":"clamp(100px, 10vh, 150px)","gap-lg":"clamp(28px, 3vw, 56px)","gap-md":"clamp(20px, 2.2vh, 36px)","gap-sm":"clamp(14px, 1.6vh, 24px)","gap-xs":"clamp(10px, 1.2vh, 18px)"},"canvas":{"width":"100vw","height":"100vh"},"components":{"graph-paper-grid":{"backgroundImage":"linear-gradient(to right, {colors.grid} 1px, transparent 1px), linear-gradient(to bottom, {colors.grid} 1px, transparent 1px)","backgroundSize":"clamp(28px, 2.2vw, 44px) clamp(28px, 2.2vw, 44px)","description":"Permanent ::before pseudo on every stage. 28–44px squared graph paper grid in 10%-opacity cobalt that sits behind every slide at z-index 1. Cannot be turned off — it is the canvas tone."},"hairlines":{"height":"1.5px","background":"{colors.ink}","description":"Two persistent slim cobalt rules — one at the top of every slide (≈2.6vh from top) and one near the bottom (≈2vh from bottom) — both inset from edges by {spacing.edge}. They frame the slide composition."},"pagenum":{"position":"absolute","right":"{spacing.edge}","bottom":"clamp(48px, 4.8vh, 76px)","fontFamily":"DM Mono, ui-monospace, monospace","fontSize":"clamp(11px, 0.82vw, 13px)","color":"{colors.ink}","letterSpacing":"0.06em","description":"Mono cobalt page number anchored bottom-right above the bottom hairline. One per slide."},"nav-hint":{"position":"fixed","left":"{spacing.edge}","bottom":"clamp(48px, 4.8vh, 76px)","fontFamily":"DM Mono, ui-monospace, monospace","fontSize":"clamp(10px, 0.75vw, 12px)","color":"{colors.ink}","letterSpacing":"0.08em","opacity":0.4,"description":"Mono cobalt navigation hint anchored bottom-left, mirrors pagenum."},"pixel-glitch":{"description":"Stair-stepped column of vertical scanlines, rendered as inline SVG. Each stepped rectangle contains evenly-spaced cobalt vertical lines on cream. Sits absolutely positioned (typically right edge) at z-index 3, decorative only. Size ranges from 16vw × full-height (compact decoration) to 32vw × full-height (signature cover decoration)."},"qr-block":{"display":"grid","gridTemplateColumns":"repeat(8, 1fr)","gridTemplateRows":"repeat(8, 1fr)","gap":"1.5px","background":"{colors.paper}","padding":"4px","boxShadow":"0 0 0 1.5px {colors.paper}","description":"8×8 QR-style mosaic of cobalt cells on cream background. Paper-fill ensures it reads as a discrete patch when overlapping the pixel-glitch column. Typical size 58–100px square."},"topbar-rule":{"borderBottom":"1.5px solid {colors.ink}","paddingBottom":"clamp(12px, 1.4vh, 22px)","description":"1.5px cobalt rule under the topbar of an index, data, or table layout. Below the rule sits a Newsreader headline (left) and a mono lab-tag (right)."},"row-divider":{"borderBottom":"1px solid {colors.ink-faint}","description":"Faint 18%-opacity cobalt rule between rows of an index list, table, or ledger."},"attribution-rule":{"borderTop":"1px solid {colors.ink}","paddingTop":"clamp(10px, 1.2vh, 18px)","description":"Solid cobalt rule above a quote attribution or manifesto byline."},"pixel-stack-bars":{"description":"Vertical bar chart rendered as a column of stacked 'cells' — flex column-reverse with 3px gaps, each cell a small horizontal block. Cells default to 10%-opacity cobalt (the grid color); .on cells fill solid cobalt to represent the value. Reads as a pixelated bar made of grid units."},"ledger-row":{"display":"grid","gridTemplateColumns":"76px 0.6fr 1.4fr 0.7fr 0.5fr","gap":"clamp(14px, 1.4vw, 28px)","borderBottom":"1px solid {colors.ink-faint}","description":"Dense table row carrying a num-tag, name (Newsreader), description (Hanken Grotesk), mood-tag, and delta-tag (mono with up/down arrow prefix). Header row uses 1.5px solid cobalt bottom border."},"vstack-label":{"fontFamily":"DM Mono, ui-monospace, monospace","writingMode":"vertical-rl","textOrientation":"mixed","letterSpacing":"0.04em","description":"Vertical-orientation mono label column anchored to the right edge of a slide. Replaces the Korean vertical column of the reference with mono catalogue text rotated 90°."},"delta-up":{"content":"↑ ","description":"Up arrow prefix via ::before on a mono delta tag in the ledger table."},"delta-down":{"content":"↓ ","opacity":0.6,"description":"Down arrow prefix via ::before, dimmed 40% to read as decline."},"delta-flat":{"content":"— ","opacity":0.6,"description":"Em-dash prefix via ::before, dimmed 40% to read as neutral."}}},"isInternal":false,"tokens":11293,"sizeBytes":43281},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/preview.md","title":"Cobalt-grid Skill","category":"anthropic-skill","format":"markdown","content":"# Cobalt Grid Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/cobalt-grid/design.md`\n- Preview card: `bold-template-pack/templates/cobalt-grid/preview.md`\n\n## Selection Metadata\n\n- Slug: `cobalt-grid`\n- Tagline: Electric cobalt serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules.\n- Mood: editorial, design-research, studious, modernist, tech-print, monochrome\n- Tone: considered, literary, studious, quietly-modern, editorial\n- Formality: high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report. Strong for studio annuals, agency capabilities decks, design-research publications, architecture / art / academic decks, and any deck wanting one strict accent colour and a printed-ledger calmness rather than corporate polish.\n- Avoid for: Decks that need warmth, multi-colour energy, or a casual / playful voice — the strict cobalt + cream + grid palette is intentionally austere.\n\n## Visual Snapshot\n\nA Japanese-magazine trend-report system built on warm cream paper, electric cobalt ink, and a graph-paper grid that lives permanently behind every slide. Newsreader serif headlines tower at 18vh while DM Mono carries chrome and ticker text. The signature decoration is a pixel-glitch column — vertical scanlines stair-stepped down the right edge of declarative slides — paired with QR-style 8×8 grid patches. The cultural reference is WIRED Japan, Shift magazine, and architectural trend reports printed in two-color risograph: cream + one cobalt.\n\nCobalt Grid is a two-color trend-report editorial system built on three immovable foundations: a warm cream paper canvas ({colors.paper}), an electric cobalt ink ({colors.ink}), and a permanent graph-paper grid that sits behind every slide. The grid is not optional decoration — it is rendered via a ::before pseudo on every .stage and cannot be turned off. The aesthetic is \"two-color risograph monograph\": cream + cobalt only, with the grid lending the entire deck the feel of architectural tracing paper or a Japanese trend report.\n\n## Preview Ingredients\n\n- Palette: paper #F0EBDE; paper-2 #E6E0CE; ink #1F2BE0; ink-soft #5560E5\n- Typography: Newsreader; Hanken Grotesk; DM Mono\n- Signature move: The 1.5px cobalt hairline frame (top and bottom of every slide).\n- Signature move: 1.5px cobalt topbar rule under section headers.\n- Signature move: 1px faint-cobalt row dividers between table or index entries.\n- Signature move: The 10%-opacity graph paper grid behind everything.\n- Signature move: The pixel-glitch and QR-block decorative SVG patches as compositional accents.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":968,"sizeBytes":4341},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/design.md","title":"Coral","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Coral\ndescription: \"A bold magazine-poster system that runs on three surface registers — coral fire, ink black, and warm cream — animated by Bebas Neue display caps and a constant 45° diagonal hatch pattern. Inter handles body copy; Bebas Neue handles every headline, stat, title, and meta-figure at heavy letter-spacing. The cultural reference is mid-century travel posters, Saul Bass film titles, and modern editorial sport magazines: solid color planes meeting at hard edges, oversized condensed caps as architectural elements, and a single coral hue used both as accent and as full-slide environment.\"\n\ncolors:\n  coral: \"#E85D5D\"\n  coral-dark: \"#D44A4A\"\n  cream: \"#F5F0E8\"\n  cream-dark: \"#E8E0D4\"\n  black: \"#1A1A1A\"\n  gray: \"#6B6B6B\"\n  light-gray: \"#B0B0B0\"\n  white: \"#FFFFFF\"\n\ncolor-aliases:\n  bg: cream\n  ink: black\n\ntypography:\n  hero-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(120px, 9vw, 13vh)\"\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 4px\n  jumbo-feature:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(80px, 15vw, 200px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 12px\n  display-statement:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(42px, 7vw, 100px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  section-headline:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(40px, 6vw, 80px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  column-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(36px, 5vw, 72px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  stat-numeral:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(48px, 7vw, 96px)\"\n    fontWeight: 400\n    lineHeight: 1\n  card-stat:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(36px, 4vw, 56px)\"\n    fontWeight: 400\n    lineHeight: 1\n  sidebar-value:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(28px, 3vw, 48px)\"\n    fontWeight: 400\n    lineHeight: 1\n  card-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(24px, 2.5vw, 36px)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 1px\n  bar-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(28px, 4vw, 56px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  meta-figure:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(44px, 3.5vw, 5.5vh)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  meta-date:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(38px, 3vw, 4.8vh)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  background-numeral:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(100px, 15vw, 200px)\"\n    fontWeight: 400\n    lineHeight: 1\n    description: \"Decorative oversized numeral placed inside a coral region at rgba(0,0,0,0.12) — wallpaper opacity. Sits behind the actual column title at full opacity.\"\n  giant-mark:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(140px, 20vw, 280px)\"\n    fontWeight: 400\n    lineHeight: 1\n    description: \"Oversized quote mark or single character placed inside a coral region at opacity 0.35 — half-decorative, half-content.\"\n  body:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(15px, 1.4vw, 20px)\"\n    fontWeight: 400\n    lineHeight: 1.7\n  body-sm:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(13px, 1.1vw, 16px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-light:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(20px, 2.5vw, 36px)\"\n    fontWeight: 300\n    lineHeight: 1.5\n    description: \"Lighter-weight Inter for pull quotes — weight 300 to contrast against the Bebas Neue dominant voice.\"\n  item-text:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(14px, 1.2vw, 18px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  card-text:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(13px, 1.1vw, 16px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  bar-meta:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 2px\n    textTransform: uppercase\n  section-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 4px\n    textTransform: uppercase\n  item-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"11px\"\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  meta-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"11px\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  sidebar-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 1px\n  quote-attribution:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"14px\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  quote-role:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 1px\n\nspacing:\n  pad-y: \"clamp(40px, 6vh, 80px)\"\n  pad-x: \"clamp(40px, 8vw, 100px)\"\n  pad-y-tight: \"clamp(28px, 4.5vh, 60px)\"\n  pad-col: \"clamp(32px, 4vw, 60px)\"\n  gap-grid: \"32px\"\n  gap-md: \"40px\"\n  card-pad: \"clamp(24px, 3vh, 40px)\"\n  bar-pad: \"clamp(24px, 4vh, 40px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  diagonal-hatch:\n    background: \"repeating-linear-gradient(45deg, transparent, transparent 20px, rgba(0,0,0,0.06) 20px, rgba(0,0,0,0.06) 40px)\"\n    description: \"Signature 45° diagonal hatch pattern in 6%-opacity black. Applied as a pseudo-element overlay on coral regions to provide texture without changing the surface color. Variant: -45° hatch on coral quote-left, with 30/60px stride. Variant: 90° vertical hatch in 10%-opacity black on coral gradient regions, with 60/62px stride. The hatch is a per-region atmospheric treatment, not a slide-level overlay.\"\n  accent-line:\n    width: \"80px\"\n    height: \"4px\"\n    background: \"{colors.coral}\"\n    description: \"Solid 80×4 coral rectangle used as a sub-headline accent rule. Closing or section-divider variant uses 60×4.\"\n  quote-accent:\n    width: \"60px\"\n    height: \"4px\"\n    background: \"{colors.coral}\"\n    description: \"60×4 coral rectangle placed above a quote attribution as a terminal accent.\"\n  title-rule:\n    width: \"100%\"\n    height: \"3px\"\n    background: \"{colors.black}\"\n    opacity: 0.15\n    description: \"Full-width 3px ink rule at 15% opacity used as a subtle horizontal divider beneath the hero title on the cover composition.\"\n  card:\n    background: \"{colors.white}\"\n    padding: \"{spacing.card-pad}\"\n    borderTop: \"5px solid {colors.coral}\"\n    description: \"Column card — white surface with a 5px solid coral top border as the only border on the element. No shadow, no radius.\"\n  sidebar-item:\n    background: \"{colors.white}\"\n    padding: \"20px 24px\"\n    borderLeft: \"4px solid {colors.coral}\"\n    description: \"Compact data tile — white surface with a 4px solid coral left border. Holds a Bebas value and an Inter label.\"\n  card-icon:\n    width: \"48px\"\n    height: \"48px\"\n    background: \"{colors.coral}\"\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"24px\"\n    color: \"{colors.white}\"\n    description: \"48px solid coral square (no radius) containing a 1-character Bebas Neue glyph in white. Used as a card mark.\"\n  timeline-line:\n    height: \"4px\"\n    background: \"{colors.black}\"\n    description: \"Horizontal 4px solid ink line spanning the timeline width. A ::after pseudo overlays a repeating linear-gradient (20px ink + 10px transparent) to create a dashed effect. The dashed pattern is rendered through the gradient, not the border-style.\"\n  t-point-dot:\n    width: \"20px\"\n    height: \"20px\"\n    borderRadius: \"50%\"\n    background: \"{colors.coral}\"\n    border: \"4px solid {colors.cream}\"\n    description: \"Timeline node — 20px coral circle with a 4px cream halo, sitting on the timeline-line.\"\n  nav-dot:\n    width: \"10px\"\n    height: \"10px\"\n    borderRadius: \"50%\"\n    background: \"rgba(255, 255, 255, 0.3)\"\n    border: \"2px solid rgba(255, 255, 255, 0.5)\"\n    description: \"Small 10px nav indicator. White-translucent default on dark/coral surfaces; ink-translucent .dark variant on cream surfaces. Active state fills with coral.\"\n  nav-arrow:\n    width: \"44px\"\n    height: \"44px\"\n    borderRadius: \"50%\"\n    background: \"rgba(255, 255, 255, 0.1)\"\n    border: \"2px solid rgba(255, 255, 255, 0.3)\"\n    description: \"44px circular nav button with translucent fill and 2px translucent border. .dark variant for cream surfaces. Hover state fills with coral.\"\n  zigzag-layer:\n    description: \"SVG zigzag pattern overlay used decoratively on the cover's coral top-section. Renders as a thin black zigzag line at low opacity behind the title.\"\n  pattern-overlay:\n    description: \"Decorative repeating-pattern overlay applied to feature regions — typically 90° vertical hatch in ink at 10% opacity on coral gradient backgrounds. Separate from the 45° diagonal-hatch which is the system's primary texture.\"\n  bar-fill:\n    description: \"Chart.js horizontal bar fills use solid coral (#E85D5D) as the primary series color, with a darker coral (#D44A4A) for comparison or secondary series.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCoral is a **bold magazine-poster system** built on three surface registers — coral fire, ink black, and warm cream — that meet at hard edges. The defining structural premise is **solid color planes**: a single slide will split into a coral half + a cream half + an ink top-section, with each region a flat solid color holding its own self-contained composition. There are no gradient transitions between regions; the meeting point of two colors is the layout. This is the populist counterpart to a more refined editorial system — closer to a sports magazine cover than a literary catalogue.\n\nThe typeface stack is a **two-face hierarchy**. **Bebas Neue** — a tall narrow condensed sans display face — carries every headline, every stat, every column title, every meta figure, every section name. Bebas runs at its single available weight (400) and is treated as architectural — heavy letter-spacing (2–12px), oversized scale (up to 200px on jumbo features), and always set in its native uppercase. **Inter** — a contemporary humanist sans — carries every body paragraph, every label, every micro-text, every attribution. Inter spans weights 300 to 700: 300 for pull-quote bodies, 400 for paragraph body, 600 for meta labels, 700 for section eyebrows. The Bebas/Inter pair creates the system's voice: Bebas declares, Inter explains.\n\nThe palette is **three surfaces + ink + neutrals**. The coral `{colors.coral}` is both *the* accent (a 4px left border on a sidebar tile, a 5px top border on a card, a 48px solid icon square) and an entire slide environment (a full coral panel, the cover's top-section, a coral gradient feature region). The cream `{colors.cream}` is the warm canvas — the magazine paper. Ink `{colors.black}` is the strongest surface, used as full-slide background on quote and statement layouts. White appears only as card fills against coral or cream regions. Two grays (`{colors.gray}`, `{colors.light-gray}`) carry body and meta text.\n\nDepth is **flat with hard color edges**. There are no drop shadows, no rounded surfaces, no soft elevations. Hierarchy comes from:\n- **Solid color region splits** — coral / ink / cream regions meeting at hard edges.\n- **Accent borders** — 4px coral left, 5px coral top, 3px ink top, 4px ink horizontal.\n- **45° diagonal hatch** — a signature 6%-opacity black diagonal repeating pattern overlaid on coral regions, providing texture.\n- **Oversized decorative typography** — background numerals at 12% opacity, giant quote marks at 35% opacity, sitting behind or beside primary content.\n\n**Density philosophy: medium-high, structured by region.** Coral slides are structured rather than dense — each color region holds a self-contained composition (a single column title with one body block, a single stat tile with one label, a single timeline line with five dots). The aesthetic relies on regions feeling fully populated within their boundary, not on the slide overall being crowded. A correctly composed slide pairs 2–3 substantive regions, each fully expressed. A slide that feels broken is one where a coral region holds only a sparse fragment, or where a cream region attempts to carry too many competing elements. Decorative oversized numerals at 12% opacity behind a region's primary title are the standard \"fill the region\" move when content alone doesn't fully occupy the plane.\n\n**Key Characteristics:**\n- Three-surface system: `{colors.coral}` (fire), `{colors.black}` (ink), `{colors.cream}` (paper) — used as solid regions meeting at hard edges.\n- Bebas Neue uppercase condensed display for every headline/stat/title; Inter sans for every body/label/attribution.\n- 45° diagonal hatch in 6%-opacity black on coral regions as the signature atmospheric texture.\n- Coral as both accent (4–5px borders, 48px icon squares, 4-point timeline dots) and environment (full-region surfaces).\n- Decorative oversized numerals at 12% opacity behind column titles inside coral regions.\n- Oversized quote marks at 35% opacity inside coral regions as half-decorative content.\n- No rounded corners on rectangles; circular shapes only for nav dots, nav arrows, and timeline nodes.\n- Heavy letter-spacing on every Bebas element: 1–4px on most, 12px on the largest feature treatment.\n- Hard-edge color splits (vertical, horizontal, or 40/60 ratios) define slide composition.\n\n## Colors\n\n### Three-Surface System\n- **Coral** (`{colors.coral}` — #E85D5D): The signature color — a warm orange-red, vivid but not neon. Used both as accent (4px sidebar-item left border, 5px card top border, 48px card-icon fill, 80×4 accent line, 60×4 quote accent, timeline-point dot, chart primary series, hover-state fills, section eyebrows, stat-numerals on cream surfaces) and as a full-region surface (cover top-section, two-column left panel, full-width feature region, quote left panel). Defines the system.\n- **Coral Dark** (`{colors.coral-dark}` — #D44A4A): A darker coral variant. Used as the start stop in linear-gradient feature regions (135° from coral-dark to coral), and as the chart secondary/comparison series color.\n- **Cream** (`{colors.cream}` — #F5F0E8): The warm canvas. Used as default slide background, as the cover's bottom-section, as info-bar surfaces, as body text color on ink-black surfaces, and as the timeline-point dot halo.\n- **Cream Dark** (`{colors.cream-dark}` — #E8E0D4): A slightly deeper cream. Available in the palette for subtle region differentiation but sparingly used.\n- **Black** (`{colors.black}` — #1A1A1A): Near-black ink. Used as headline color on cream surfaces, as the full-background ink register for quote and certain feature slides, as timeline-line color, as title-rule color, as decorative background-numeral color (at 12% opacity inside coral regions), and as giant-mark color (at 35% opacity inside coral regions).\n- **Gray** (`{colors.gray}` — #6B6B6B): Mid neutral. Used for body paragraph text on cream surfaces, for meta labels, for sidebar labels, for card body copy, for quote roles.\n- **Light Gray** (`{colors.light-gray}` — #B0B0B0): Pale neutral. Defined in the palette but used sparingly — available for tertiary text where gray is too strong.\n- **White** (`{colors.white}` — #FFFFFF): True white. Used as card fills (sidebar-item, card, column-card), as item-text color on ink surfaces, as nav-dot/nav-arrow translucent fills.\n\n### Defaults\n- **Default slide surface**: `{colors.cream}`. (Cover and feature slides use mixed-surface compositions; statement, quote, and three-column slides default to cream or ink.)\n- **Default headline color on cream surfaces**: `{colors.black}` — Bebas Neue headlines are ink, not coral.\n- **Default headline color on coral surfaces**: `{colors.black}` — ink-on-fire. Bebas on coral is always ink, never white.\n- **Default headline color on ink surfaces**: `{colors.cream}`.\n- **Default body text color on cream surfaces**: `{colors.gray}`.\n- **Default body text color on ink surfaces**: `{colors.cream}`.\n- **Default body text color on coral surfaces**: `{colors.black}` — ink, not white.\n- **Default eyebrow / section-label color**: `{colors.coral}` on cream and ink surfaces; `{colors.black}` on coral surfaces.\n- **Default accent border color**: `{colors.coral}` — 4px left (sidebar tiles), 5px top (cards), 48px solid (icon squares).\n- **Default decorative numeral color inside a coral region**: `rgba(0, 0, 0, 0.12)` (ink at 12% opacity).\n- **Default giant-mark color inside a coral region**: `rgba(0, 0, 0, 0.35)` (ink at 35% opacity).\n- **Default chart primary series color**: `{colors.coral}`.\n- **Default chart comparison series color**: `{colors.coral-dark}`.\n\nThe three surfaces are intermixed by composition: a slide may be split coral/cream, coral/ink, ink/cream, or held to a single surface. There is no semantic mapping between surfaces; each is chosen for compositional balance and contrast.\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face hierarchy**: `Bebas Neue` (display, single weight 400) carries every headline, stat numeral, column title, meta figure, bar title, card stat, sidebar value, and decorative numeral; `Inter` (sans, weights 300 / 400 / 600 / 700) carries every body paragraph, label, eyebrow, meta-label, attribution, role, and chart legend. There is no third face.\n\nBebas Neue is a tall narrow condensed sans display face — its narrow letterforms allow large sizes without overwhelming the slide width, and its single available weight (400) is treated as the system's only weight. Bebas is always set in its native uppercase. The display character of the system comes from heavy letter-spacing (1–4px on standard headlines, 12px on the largest jumbo feature treatment) and oversized scale (up to 200–280px on jumbo / giant-mark moments).\n\nInter carries the supporting voice with weight contrast: 300 for pull-quote bodies (a lighter register against Bebas's dominance), 400 for body paragraphs, 600 for meta labels, 700 for section eyebrows. Italic and underline are not used.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.giant-mark}` | clamp(140px, 20vw, 280px) | Bebas Neue | 400 | Oversized decorative quote mark or feature character inside a coral region |\n| `{typography.jumbo-feature}` | clamp(80px, 15vw, 200px) | Bebas Neue | 400 | Single dominant word filling a feature region |\n| `{typography.background-numeral}` | clamp(100px, 15vw, 200px) | Bebas Neue | 400 | Decorative wallpaper numeral inside a coral region at 12% opacity |\n| `{typography.hero-title}` | min(120px, 9vw, 13vh) | Bebas Neue | 400 | Largest cover title — 3-line title cap-and-line-broken |\n| `{typography.display-statement}` | clamp(42px, 7vw, 100px) | Bebas Neue | 400 | Big declarative statement on a cream surface |\n| `{typography.stat-numeral}` | clamp(48px, 7vw, 96px) | Bebas Neue | 400 | Hero stat figure |\n| `{typography.section-headline}` | clamp(40px, 6vw, 80px) | Bebas Neue | 400 | Primary section headline |\n| `{typography.column-title}` | clamp(36px, 5vw, 72px) | Bebas Neue | 400 | Column or panel title inside a region |\n| `{typography.card-stat}` | clamp(36px, 4vw, 56px) | Bebas Neue | 400 | Per-card stat figure |\n| `{typography.bar-title}` | clamp(28px, 4vw, 56px) | Bebas Neue | 400 | Info-bar title |\n| `{typography.sidebar-value}` | clamp(28px, 3vw, 48px) | Bebas Neue | 400 | Sidebar tile value |\n| `{typography.card-title}` | clamp(24px, 2.5vw, 36px) | Bebas Neue | 400 | Card or column-card title |\n| `{typography.meta-figure}` | min(44px, 3.5vw, 5.5vh) | Bebas Neue | 400 | Cover meta value (location, date, brand) |\n| `{typography.meta-date}` | min(38px, 3vw, 4.8vh) | Bebas Neue | 400 | Cover date variant |\n| `{typography.body-light}` | clamp(20px, 2.5vw, 36px) | Inter | 300 | Pull-quote body (lighter weight against Bebas dominance) |\n| `{typography.body}` | clamp(15px, 1.4vw, 20px) | Inter | 400 | Standard paragraph body |\n| `{typography.item-text}` | clamp(14px, 1.2vw, 18px) | Inter | 400 | Item body on ink surfaces |\n| `{typography.card-text}` | clamp(13px, 1.1vw, 16px) | Inter | 400 | Card body copy |\n| `{typography.body-sm}` | clamp(13px, 1.1vw, 16px) | Inter | 400 | Compact body |\n| `{typography.section-label}` | 12px | Inter | 700 | Section eyebrow above a headline, 4px letter-spacing |\n| `{typography.item-label}` | 11px | Inter | 700 | Item eyebrow in a list, 3px letter-spacing |\n| `{typography.meta-label}` | 11px | Inter | 600 | Cover meta label, 3px letter-spacing |\n| `{typography.quote-attribution}` | 14px | Inter | 600 | Author name below a pull quote, 3px letter-spacing |\n| `{typography.bar-meta}` | 12px | Inter | 400 | Info-bar meta-text, 2px letter-spacing |\n| `{typography.sidebar-label}` | 12px | Inter | 400 | Sidebar tile label, 1px letter-spacing |\n| `{typography.quote-role}` | 12px | Inter | 400 | Author role below quote attribution, 1px letter-spacing |\n\n### Defaults\n- **Default size for the primary section headline**: `{typography.section-headline}` (clamp 40–80px).\n- **Default size for a cover/hero title**: `{typography.hero-title}` (min(120px, 9vw, 13vh)).\n- **Default size for a feature dominant word**: `{typography.jumbo-feature}` (clamp 80–200px) with 12px letter-spacing.\n- **Default size for paragraph body**: `{typography.body}` (clamp 15–20px).\n- **Default size for any uppercase eyebrow / label**: `{typography.section-label}` (12px) at weight 700 with 4px letter-spacing; or `{typography.item-label}` (11px) at weight 700 with 3px letter-spacing for in-list contexts.\n- **Default weight for any Bebas Neue element**: 400 (the only available weight).\n- **Default weight for body**: 400; for pull quotes, 300.\n- **Default weight for labels**: 600 or 700.\n- **Default size for a hero stat figure**: `{typography.stat-numeral}` (clamp 48–96px).\n- **Default size for an in-card stat figure**: `{typography.card-stat}` (clamp 36–56px).\n\nWhen unsure, reach for `{typography.section-headline}` for the slide's primary text moment.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Bebas Neue element is set in its native uppercase.** Bebas Neue in sentence case does not exist — the typeface itself doesn't support it. This is the system's most foundational typographic rule.\n- **Every Bebas Neue element carries letter-spacing of at least 1px.** Standard headlines at 2px, hero-title at 4px, jumbo-feature at 12px. Untracked Bebas reads as untreated.\n- **Every Inter label, eyebrow, and meta-text is uppercase with 1–4px letter-spacing.** Section labels at 4px, item labels at 3px, bar-meta at 2px, sidebar-labels at 1px. Inter caps without tracking break the editorial register.\n- **Every Bebas headline is rendered in `{colors.black}`, `{colors.cream}`, or `{colors.coral}`** based on surface contrast — never gray. Color choice: ink on cream/coral, cream on ink, coral on cream when emphasis is needed.\n- **Every section eyebrow is rendered in `{colors.coral}`** when sitting on cream or ink, or in `{colors.black}` when sitting on coral. Coral-on-coral does not exist.\n- **Every decorative oversized numeral inside a coral region is rendered at `rgba(0, 0, 0, 0.12)`** — the wallpaper-numeral signature. Sits behind primary content at full opacity.\n- **Every giant decorative mark (quote, single character) inside a coral region is rendered at `rgba(0, 0, 0, 0.35)`** — half-decorative, half-content.\n- **Pull-quote bodies use Inter weight 300, not Bebas.** This is the system's primary \"voice break\" — when content needs to feel personal rather than declarative, Inter Light takes over.\n\n### Typography Principles\nThe Bebas-uppercase-tracked + Inter-mixed-weight combination is the system's voice. Switching either face — using a different display sans for headlines, or using Bebas for body — breaks the system entirely. Italic does not appear. Underline does not appear. The only emphasis mechanism is weight (Bebas dominance), case (uppercase always on Bebas + labels), color (coral on cream surfaces), and surface inversion (placing the element in a different region).\n\nLine-height is uniformly tight at the top of the scale: Bebas elements at 0.9–1.0; Inter body at 1.6–1.7. The display compression + open body is what gives the system its magazine-poster rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, visibility visible) at a time. Transitions are 0.6s opacity + visibility fades.\n\nThe system has **no universal chrome bar**. Each slide is its own self-contained composition with its own padding, region structure, and color treatment. Navigation is per-page (nav arrows + nav dots + slide counter) and floats over the active surface with `.dark` variants for cream surfaces.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-y}` | clamp(40px, 6vh, 80px) | Standard vertical slide padding |\n| `{spacing.pad-x}` | clamp(40px, 8vw, 100px) | Standard horizontal slide padding |\n| `{spacing.pad-y-tight}` | clamp(28px, 4.5vh, 60px) | Compact vertical padding (cover bottom-section) |\n| `{spacing.pad-col}` | clamp(32px, 4vw, 60px) | Column padding inside a region |\n| `{spacing.gap-grid}` | 32px | Column-grid gap |\n| `{spacing.gap-md}` | 40px | Chart container internal gap |\n| `{spacing.card-pad}` | clamp(24px, 3vh, 40px) | Card internal padding |\n| `{spacing.bar-pad}` | clamp(24px, 4vh, 40px) | Info-bar internal padding |\n\n### Region Composition\nCoral's primary layout move is **multi-surface composition**. Slides split into regions of solid color, with the boundary between regions defining the layout. Standard splits include:\n- `grid-template-rows: 32% 68%` — top accent strip + main body (cover composition).\n- `grid-template-rows: 1fr auto` — large feature region + bottom info-bar.\n- `grid-template-columns: 1fr 1fr` — equal vertical split (often coral left + ink right).\n- `grid-template-columns: 40% 60%` — narrow accent column + wider content column (quote layout).\n- Single-surface slides — cream or ink as the whole canvas (statement, three-column, timeline layouts).\n\nThe boundary between regions is always a **hard color edge** — no soft transitions, no gradients across the boundary, no rounded corners at the junction. The meeting of two solid colors is the layout structure.\n\n## Depth and Elevation\n\n### Flat With Hard Color Edges\nCoral has no drop shadows, no soft elevations, no rounded surfaces. Every element sits on a single plane.\n\nDepth signals are entirely structural:\n- **Hard color region boundaries** — the primary structural signal.\n- **Accent borders** — 5px coral top on cards, 4px coral left on sidebar tiles, 4px ink horizontal timeline-line, 3px ink at 15% opacity title-rule.\n- **45° diagonal hatch** — 6%-opacity black diagonal repeating-linear-gradient overlay on coral regions creates texture without depth.\n- **Decorative wallpaper typography** — oversized numerals at 12% opacity and giant marks at 35% opacity sit behind primary content as wallpaper, creating a layered effect without z-index trickery.\n\nIntroducing a box-shadow, an elevated card, or a soft gradient breaks the populist-poster aesthetic that defines the system.\n\n### Atmospheric Hatch Variants\nThe 45° diagonal hatch is the system's primary atmospheric treatment, but several stride/angle variants appear:\n- **45° at 20/40px stride** in 6%-opacity black — the standard coral region overlay.\n- **-45° at 30/60px stride** in 6%-opacity black — coral quote-left panel variant.\n- **90° vertical at 60/62px stride** in 10%-opacity black — coral gradient feature-region overlay.\n\nAll hatches are subtle (6–10% opacity black). They provide texture without competing with content.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 50% (circle) | Circular elements only: `nav-dot` (10px), `nav-arrow` (44px), `t-point-dot` (20px timeline node) |\n| 0 | Everything else: every region, every card, every sidebar tile, every icon square, every chart, every accent line, every accent border |\n\nThe system uses **only two radius values**: 50% (true circle) or 0 (sharp rectangle). Soft-rounded corners do not exist. Cards, icon squares, info-bars, and feature regions are all strict rectangles.\n\n### Border Weights\n- **5px solid `{colors.coral}` (top)** — used on card top borders (column-card pattern).\n- **4px solid `{colors.coral}` (left)** — used on sidebar-item left borders.\n- **4px solid `{colors.black}` (horizontal)** — used on timeline-line.\n- **4px solid `{colors.cream}` (ring)** — used as the halo around 20px coral timeline-point dots.\n- **3px solid `{colors.black}` at 15% opacity** — used on title-rule beneath the cover hero title.\n- **2px solid translucent** — used on nav-dot and nav-arrow borders (rgba(255,255,255,0.3–0.5) on dark surfaces; rgba(26,26,26,0.2–0.4) on cream surfaces).\n\nAll borders are either coral, black, cream, or translucent. There is no border-radius on bordered rectangles.\n\n### Decorative Element Types\n\n**45° diagonal hatch** — A `repeating-linear-gradient(45deg, transparent, transparent 20px, rgba(0,0,0,0.06) 20px, rgba(0,0,0,0.06) 40px)` applied as a `::before` pseudo-element overlay on coral regions. The signature atmospheric texture. Variants: -45°, 90° vertical, different stride widths.\n\n**Background numeral** — An oversized Bebas Neue numeral (clamp 100–200px) at `rgba(0, 0, 0, 0.12)` placed inside a coral region. Sits behind the region's primary column-title at full opacity, creating a layered \"ordinal wallpaper\" effect.\n\n**Giant mark** — An oversized Bebas Neue character (clamp 140–280px) at `rgba(0, 0, 0, 0.35)` placed inside a coral region. Used as a half-decorative half-content element, typically a quotation mark on the coral left panel of a quote layout.\n\n**Card (column-card)** — A white-fill rectangle with a 5px coral top border as its only border. Contains a 48px solid coral icon square at top, a Bebas card-title, an Inter card-text body, and a coral card-stat figure at the bottom. The 5px top border is the only chrome — no other border, no shadow, no radius.\n\n**Sidebar item** — A white-fill rectangle with a 4px coral left border as its only border. Contains a Bebas sidebar-value and an Inter sidebar-label. The 4px left border is the only chrome.\n\n**Icon square** — A 48px solid coral rectangle (no radius) containing a 1-character Bebas glyph in white. Used as a card mark.\n\n**Info bar** — A flex row spanning a region's full width, holding a Bebas bar-title left and an uppercase Inter bar-meta right. Cream background; used as a footer band beneath a feature region.\n\n**Timeline** — A 4px solid ink horizontal line spanning the timeline width, with a `::after` repeating-linear-gradient overlay (20px ink + 10px transparent) creating a dashed effect. Timeline points are 20px coral circles with 4px cream halos, distributed evenly along the line.\n\n**Accent line** — An 80×4 solid coral rectangle used as a sub-headline accent rule, or 60×4 for closing/quote contexts. Always coral, always solid, no radius.\n\n**Title rule** — A full-width 3px solid ink line at 15% opacity, used as a subtle horizontal divider beneath the cover hero title.\n\n**Zigzag layer** — An SVG zigzag pattern rendered as a thin ink line at low opacity, overlaid decoratively on the cover's coral top-section.\n\n**Pattern overlay** — A separate repeating-pattern overlay (typically 90° vertical hatch in 10%-opacity ink) applied to coral gradient feature regions. Distinct from the standard 45° diagonal hatch.\n\n## Do's and Don'ts\n\n### Do\n- Compose slides as multi-surface region splits — coral, ink, and cream meeting at hard color edges. The region boundary is the layout structure.\n- Set every Bebas Neue element in its native uppercase with at least 1px letter-spacing — 2px for standard headlines, 4px for hero titles, 12px for jumbo feature treatments.\n- Render every section eyebrow in `{colors.coral}` uppercase Inter weight 700 with 3–4px letter-spacing on cream and ink surfaces.\n- Apply the 45° diagonal hatch (6% opacity black, 20/40px stride) as a `::before` overlay on coral regions for atmospheric texture.\n- Use the 5px coral top border on cards and the 4px coral left border on sidebar tiles as the only chrome on those elements — no other border, no shadow, no radius.\n- Place oversized decorative Bebas numerals at 12% opacity behind column titles inside coral regions when a region needs more visual weight than the title alone provides.\n- Use Inter weight 300 (light) for pull-quote bodies on ink-surface quote layouts — the lighter weight contrasts against Bebas dominance.\n- Render Bebas headlines on coral surfaces in `{colors.black}` (ink-on-fire). White headlines on coral do not exist in this system.\n- Use the coral chart series + coral-dark comparison series convention for any chart data.\n- Use the 48px solid coral icon square (no radius, single white Bebas glyph) as the standard card mark.\n\n### Don't\n- Don't render Bebas Neue in sentence case. The typeface is uppercase only — that is the entire identity.\n- Don't render Bebas without letter-spacing. Untracked Bebas reads as untreated, even at large sizes.\n- Don't introduce a fourth surface color. The three surfaces (coral / ink / cream) are the system — adding a yellow or blue region breaks the magazine-poster identity.\n- Don't render headlines in `{colors.gray}`. Headlines are ink, cream, or coral; gray is reserved for body and meta text only.\n- Don't add drop shadows, elevated cards, or rounded surfaces. The system is flat — depth comes from color region splits and accent borders.\n- Don't round any rectangular element. Cards, sidebar tiles, info bars, icon squares, accent lines — all sharp rectangles.\n- Don't pair Bebas with a different sans body face. The Bebas + Inter pairing is fixed.\n- Don't render Inter labels in sentence case. Small Inter text is always uppercase with 1–4px tracking.\n- Don't soften region boundaries with gradients (except in the rare 135° coral-dark → coral feature gradient). Region edges are hard color meetings.\n- Don't fill a coral region with sparse content. Coral wants weight — either fully populate the region's composition or use a decorative oversized numeral / giant mark as wallpaper.\n\n## Responsive Behavior\n\nCoral is a viewport-fluid 1920×1080 presentation system using `clamp()`, `min()`, and viewport-relative units throughout. There are no explicit responsive breakpoints in the source — every dimension scales between minimum and maximum bounds.\n\n### Scaling Behavior\n- Hero title scales via `min(120px, 9vw, 13vh)` — capped by both width and height so the 3-line title cannot overflow a short laptop screen.\n- Jumbo feature scales from 80px at minimum viewport to 200px at maximum.\n- Body text scales from 15px to 20px.\n- Padding scales via `clamp` per-region.\n- Borders, icon squares (48px), nav dots (10px), nav arrows (44px), and timeline dots (20px) are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Nav-dots float at right edge; nav-arrows at bottom-left; slide counter at bottom-right. All three carry `.dark` variants for cream surfaces (ink-translucent fills) and standard variants for coral/ink surfaces (white-translucent fills).\n- Active nav-dot fills with `{colors.coral}` regardless of surface.\n\n### Charts\nCharts are rendered with Chart.js (loaded via CDN). Primary series uses `{colors.coral}`; comparison series uses `{colors.coral-dark}`. Chart styling is configured inline in the JS; restyling requires editing JS, not CSS.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080. The 45° hatch overlays should render correctly in PDF capture.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Bebas Neue uppercase 400) | Bebas Neue | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body / Label (Inter 300–700) | Inter | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare ZCOOL XiaoWei *after* Bebas Neue and Yozai *after* Inter in the same `font-family` stack so Latin glyphs render in Bebas / Inter and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@300..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Bebas Neue\", \"ZCOOL XiaoWei\", sans-serif;\n  --font-body: \"Inter\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.8 (from 1.7) — Hanzi need more vertical breathing than Latin lowercase, and Coral's body already favors generous leading.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 1–12px Bebas tracking and 1–4px Inter tracking shatter Hanzi cadence). Keep heavy tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any label/eyebrow/meta when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei carries the magazine-poster voice that Bebas Neue provides for Latin — its tall narrow Hanzi forms have a similar architectural-display register, and at the 80–200px sizes Coral uses for jumbo features, ZCOOL XiaoWei holds shape without crumbling the way a system Hanzi face would. Critically, Bebas Neue's \"uppercase only with heavy tracking\" rule is meaningless for Hanzi (no case, no tracking), so the system's most foundational typographic rule simply doesn't apply to CJK — drop the tracking, drop the uppercase, and let ZCOOL XiaoWei stand on size alone. Yozai pairs with Inter for body and labels: its rounded humanist forms match Inter's warmth and stay legible inside coral / cream / ink surfaces. The three-surface region splits, 45° diagonal hatch, decorative oversized numerals (which can stay Latin — 01, 02, 03 work perfectly as wallpaper behind a Chinese column title), and 5px coral top borders are all content-agnostic and work identically in any language.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a single-weight display face with limited glyph coverage compared to Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage. Bebas Neue's narrow condensed proportion has no exact Chinese equivalent — ZCOOL XiaoWei is medium-condensed at best, so Chinese hero titles will occupy ~20% more horizontal space than Latin equivalents. Adjust line-breaks (typically a 2-line Chinese title fills the same area as a 3-line English hero-title) and consider increasing the hero-title `min()` cap when a Chinese title runs long.\n\n## Iteration Guide\n\n1. Every new slide is a composition of one to three surface regions (coral, ink, cream) meeting at hard edges. Choose the surface split based on content emphasis.\n2. Every new headline uses Bebas Neue uppercase with at least 1–2px letter-spacing. Don't sentence-case; don't untracked.\n3. Every new section eyebrow uses Inter weight 700 uppercase 4px-tracked in `{colors.coral}` on cream/ink, or `{colors.black}` on coral.\n4. Every new card uses the 5px coral top border + white fill + no shadow + no radius pattern.\n5. Every new sidebar tile uses the 4px coral left border + white fill + no radius pattern.\n6. Every new coral region carries a 45° diagonal hatch overlay at 6% opacity for texture.\n7. New coral regions that feel underweight get a decorative oversized Bebas numeral at 12% opacity as wallpaper behind the primary title.\n8. New chart series use coral + coral-dark; don't introduce additional series colors.\n9. New quote layouts pair a coral left panel (with a giant mark at 35% opacity) with an ink or cream right panel (carrying the quote body in Inter weight 300).\n10. The system has three surfaces and one accent (coral). Don't introduce a fourth surface color or a second accent.\n\n## Known Gaps\n\n- The Chart.js library is loaded via CDN; chart styling is configured inline in JS rather than reading from CSS variables — restyling requires editing JS.\n- The 45° diagonal hatch stride values (20px/40px standard; 30px/60px variant; 60px/62px vertical) are hardcoded per usage; there is no parameterized hatch component.\n- Decorative oversized numerals are placed as inline content with hardcoded values; there is no generative ordinal system.\n- The cover composition's SVG zigzag-layer is an inline SVG embedded in the source — adjusting the zigzag pattern requires editing SVG markup.\n- The timeline-line's dashed effect is rendered via a `::after` repeating-linear-gradient overlay rather than `border-style: dashed` — this gives precise control over dash dimensions but is unusual.\n- The cover composition uses `min(120px, 9vw, 13vh)` triple-cap sizing to prevent the 3-line title from overflowing on short laptops; new cover variants should follow the same multi-axis cap pattern.\n- The pull-quote layout uses Inter weight 300; Inter weight 300 is loaded explicitly but not used elsewhere — this is the system's only Inter Light deployment.\n- The `cream-dark` and `light-gray` palette tokens are defined but used sparingly across the source; they are available for new compositions that need additional neutral shades.\n- The nav-dot and nav-arrow `.dark` variant must be manually applied on cream-surface slides to maintain visibility — there is no automatic surface detection.\n- Linear-gradient feature regions (135° coral-dark → coral) are the system's only intentional gradient; all other surfaces are flat colors. Using gradients elsewhere breaks the flat-surface aesthetic.\n","frontmatter":{"version":"alpha","name":"Coral","description":"A bold magazine-poster system that runs on three surface registers — coral fire, ink black, and warm cream — animated by Bebas Neue display caps and a constant 45° diagonal hatch pattern. Inter handles body copy; Bebas Neue handles every headline, stat, title, and meta-figure at heavy letter-spacing. The cultural reference is mid-century travel posters, Saul Bass film titles, and modern editorial sport magazines: solid color planes meeting at hard edges, oversized condensed caps as architectural elements, and a single coral hue used both as accent and as full-slide environment.","colors":{"coral":"#E85D5D","coral-dark":"#D44A4A","cream":"#F5F0E8","cream-dark":"#E8E0D4","black":"#1A1A1A","gray":"#6B6B6B","light-gray":"#B0B0B0","white":"#FFFFFF"},"color-aliases":{"bg":"cream","ink":"black"},"typography":{"hero-title":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"min(120px, 9vw, 13vh)","fontWeight":400,"lineHeight":0.9,"letterSpacing":"4px"},"jumbo-feature":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"clamp(80px, 15vw, 200px)","fontWeight":400,"lineHeight":1,"letterSpacing":"12px"},"display-statement":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"clamp(42px, 7vw, 100px)","fontWeight":400,"lineHeight":1,"letterSpacing":"2px"},"section-headline":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"clamp(40px, 6vw, 80px)","fontWeight":400,"lineHeight":1,"letterSpacing":"2px"},"column-title":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"clamp(36px, 5vw, 72px)","fontWeight":400,"lineHeight":1,"letterSpacing":"2px"},"stat-numeral":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"clamp(48px, 7vw, 96px)","fontWeight":400,"lineHeight":1},"card-stat":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"clamp(36px, 4vw, 56px)","fontWeight":400,"lineHeight":1},"sidebar-value":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"clamp(28px, 3vw, 48px)","fontWeight":400,"lineHeight":1},"card-title":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"clamp(24px, 2.5vw, 36px)","fontWeight":400,"lineHeight":1.1,"letterSpacing":"1px"},"bar-title":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"clamp(28px, 4vw, 56px)","fontWeight":400,"lineHeight":1,"letterSpacing":"2px"},"meta-figure":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"min(44px, 3.5vw, 5.5vh)","fontWeight":400,"lineHeight":1,"letterSpacing":"2px"},"meta-date":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"min(38px, 3vw, 4.8vh)","fontWeight":400,"lineHeight":1,"letterSpacing":"2px"},"background-numeral":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"clamp(100px, 15vw, 200px)","fontWeight":400,"lineHeight":1,"description":"Decorative oversized numeral placed inside a coral region at rgba(0,0,0,0.12) — wallpaper opacity. Sits behind the actual column title at full opacity."},"giant-mark":{"fontFamily":"Bebas Neue, sans-serif","fontSize":"clamp(140px, 20vw, 280px)","fontWeight":400,"lineHeight":1,"description":"Oversized quote mark or single character placed inside a coral region at opacity 0.35 — half-decorative, half-content."},"body":{"fontFamily":"Inter, sans-serif","fontSize":"clamp(15px, 1.4vw, 20px)","fontWeight":400,"lineHeight":1.7},"body-sm":{"fontFamily":"Inter, sans-serif","fontSize":"clamp(13px, 1.1vw, 16px)","fontWeight":400,"lineHeight":1.6},"body-light":{"fontFamily":"Inter, sans-serif","fontSize":"clamp(20px, 2.5vw, 36px)","fontWeight":300,"lineHeight":1.5,"description":"Lighter-weight Inter for pull quotes — weight 300 to contrast against the Bebas Neue dominant voice."},"item-text":{"fontFamily":"Inter, sans-serif","fontSize":"clamp(14px, 1.2vw, 18px)","fontWeight":400,"lineHeight":1.6},"card-text":{"fontFamily":"Inter, sans-serif","fontSize":"clamp(13px, 1.1vw, 16px)","fontWeight":400,"lineHeight":1.6},"bar-meta":{"fontFamily":"Inter, sans-serif","fontSize":"12px","fontWeight":400,"lineHeight":1.4,"letterSpacing":"2px","textTransform":"uppercase"},"section-label":{"fontFamily":"Inter, sans-serif","fontSize":"12px","fontWeight":700,"lineHeight":1,"letterSpacing":"4px","textTransform":"uppercase"},"item-label":{"fontFamily":"Inter, sans-serif","fontSize":"11px","fontWeight":700,"lineHeight":1,"letterSpacing":"3px","textTransform":"uppercase"},"meta-label":{"fontFamily":"Inter, sans-serif","fontSize":"11px","fontWeight":600,"lineHeight":1,"letterSpacing":"3px","textTransform":"uppercase"},"sidebar-label":{"fontFamily":"Inter, sans-serif","fontSize":"12px","fontWeight":400,"lineHeight":1.4,"letterSpacing":"1px"},"quote-attribution":{"fontFamily":"Inter, sans-serif","fontSize":"14px","fontWeight":600,"lineHeight":1,"letterSpacing":"3px","textTransform":"uppercase"},"quote-role":{"fontFamily":"Inter, sans-serif","fontSize":"12px","fontWeight":400,"lineHeight":1.4,"letterSpacing":"1px"}},"spacing":{"pad-y":"clamp(40px, 6vh, 80px)","pad-x":"clamp(40px, 8vw, 100px)","pad-y-tight":"clamp(28px, 4.5vh, 60px)","pad-col":"clamp(32px, 4vw, 60px)","gap-grid":"32px","gap-md":"40px","card-pad":"clamp(24px, 3vh, 40px)","bar-pad":"clamp(24px, 4vh, 40px)"},"canvas":{"width":"100vw","height":"100vh"},"components":{"diagonal-hatch":{"background":"repeating-linear-gradient(45deg, transparent, transparent 20px, rgba(0,0,0,0.06) 20px, rgba(0,0,0,0.06) 40px)","description":"Signature 45° diagonal hatch pattern in 6%-opacity black. Applied as a pseudo-element overlay on coral regions to provide texture without changing the surface color. Variant: -45° hatch on coral quote-left, with 30/60px stride. Variant: 90° vertical hatch in 10%-opacity black on coral gradient regions, with 60/62px stride. The hatch is a per-region atmospheric treatment, not a slide-level overlay."},"accent-line":{"width":"80px","height":"4px","background":"{colors.coral}","description":"Solid 80×4 coral rectangle used as a sub-headline accent rule. Closing or section-divider variant uses 60×4."},"quote-accent":{"width":"60px","height":"4px","background":"{colors.coral}","description":"60×4 coral rectangle placed above a quote attribution as a terminal accent."},"title-rule":{"width":"100%","height":"3px","background":"{colors.black}","opacity":0.15,"description":"Full-width 3px ink rule at 15% opacity used as a subtle horizontal divider beneath the hero title on the cover composition."},"card":{"background":"{colors.white}","padding":"{spacing.card-pad}","borderTop":"5px solid {colors.coral}","description":"Column card — white surface with a 5px solid coral top border as the only border on the element. No shadow, no radius."},"sidebar-item":{"background":"{colors.white}","padding":"20px 24px","borderLeft":"4px solid {colors.coral}","description":"Compact data tile — white surface with a 4px solid coral left border. Holds a Bebas value and an Inter label."},"card-icon":{"width":"48px","height":"48px","background":"{colors.coral}","fontFamily":"Bebas Neue, sans-serif","fontSize":"24px","color":"{colors.white}","description":"48px solid coral square (no radius) containing a 1-character Bebas Neue glyph in white. Used as a card mark."},"timeline-line":{"height":"4px","background":"{colors.black}","description":"Horizontal 4px solid ink line spanning the timeline width. A ::after pseudo overlays a repeating linear-gradient (20px ink + 10px transparent) to create a dashed effect. The dashed pattern is rendered through the gradient, not the border-style."},"t-point-dot":{"width":"20px","height":"20px","borderRadius":"50%","background":"{colors.coral}","border":"4px solid {colors.cream}","description":"Timeline node — 20px coral circle with a 4px cream halo, sitting on the timeline-line."},"nav-dot":{"width":"10px","height":"10px","borderRadius":"50%","background":"rgba(255, 255, 255, 0.3)","border":"2px solid rgba(255, 255, 255, 0.5)","description":"Small 10px nav indicator. White-translucent default on dark/coral surfaces; ink-translucent .dark variant on cream surfaces. Active state fills with coral."},"nav-arrow":{"width":"44px","height":"44px","borderRadius":"50%","background":"rgba(255, 255, 255, 0.1)","border":"2px solid rgba(255, 255, 255, 0.3)","description":"44px circular nav button with translucent fill and 2px translucent border. .dark variant for cream surfaces. Hover state fills with coral."},"zigzag-layer":{"description":"SVG zigzag pattern overlay used decoratively on the cover's coral top-section. Renders as a thin black zigzag line at low opacity behind the title."},"pattern-overlay":{"description":"Decorative repeating-pattern overlay applied to feature regions — typically 90° vertical hatch in ink at 10% opacity on coral gradient backgrounds. Separate from the 45° diagonal-hatch which is the system's primary texture."},"bar-fill":{"description":"Chart.js horizontal bar fills use solid coral (#E85D5D) as the primary series color, with a darker coral (#D44A4A) for comparison or secondary series."}}},"isInternal":false,"tokens":11339,"sizeBytes":44750},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/preview.md","title":"Coral Skill","category":"anthropic-skill","format":"markdown","content":"# Coral Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/coral/design.md`\n- Preview card: `bold-template-pack/templates/coral/preview.md`\n\n## Selection Metadata\n\n- Slug: `coral`\n- Tagline: Cream and coral on near-black, set in oversized Bebas Neue.\n- Mood: bold, warm, modern, confident\n- Tone: graphic, punchy, magazine\n- Formality: medium\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials. Just as strong for a creator portfolio, a manifesto, or a tech / research deck that wants warmth and a single bold accent instead of corporate cool.\n- Avoid for: Contexts that should feel quiet or institutional — the coral accent and oversized Bebas Neue commit hard to a confident magazine voice.\n\n## Visual Snapshot\n\nA bold magazine-poster system that runs on three surface registers — coral fire, ink black, and warm cream — animated by Bebas Neue display caps and a constant 45° diagonal hatch pattern. Inter handles body copy; Bebas Neue handles every headline, stat, title, and meta-figure at heavy letter-spacing. The cultural reference is mid-century travel posters, Saul Bass film titles, and modern editorial sport magazines: solid color planes meeting at hard edges, oversized condensed caps as architectural elements, and a single coral hue used both as accent and as full-slide environment.\n\nCoral is a bold magazine-poster system built on three surface registers — coral fire, ink black, and warm cream — that meet at hard edges. The defining structural premise is solid color planes: a single slide will split into a coral half + a cream half + an ink top-section, with each region a flat solid color holding its own self-contained composition. There are no gradient transitions between regions; the meeting point of two colors is the layout. This is the populist counterpart to a more refined editorial system — closer to a sports magazine cover than a literary catalogue.\n\n## Preview Ingredients\n\n- Palette: coral #E85D5D; coral-dark #D44A4A; cream #F5F0E8; cream-dark #E8E0D4; black #1A1A1A; gray #6B6B6B; light-gray #B0B0B0; white #FFFFFF\n- Typography: Bebas Neue; Inter\n- Signature move: Solid color region splits — coral / ink / cream regions meeting at hard edges.\n- Signature move: Accent borders — 4px coral left, 5px coral top, 3px ink top, 4px ink horizontal.\n- Signature move: 45° diagonal hatch — a signature 6%-opacity black diagonal repeating pattern overlaid on coral regions, providing texture.\n- Signature move: Oversized decorative typography — background numerals at 12% opacity, giant quote marks at 35% opacity, sitting behind or beside primary content.\n- Signature move: Three-surface system: {colors.coral} (fire), {colors.black} (ink), {colors.cream} (paper) — used as solid regions meeting at hard edges.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1011,"sizeBytes":4515},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/design.md","title":"Creative Mode","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Creative Mode\ndescription: A neo-brutalist editorial presentation system built for 1920x1080 slides. The deck anchors on a warm cream canvas with heavy 4px ink borders, hard offset drop-shadows, and a bold four-color accent palette (forest green, hot pink, burnt orange, sunshine yellow). Display headlines run Archivo Black in pure uppercase — aggressive, loud, zero letter-spacing softness. Monospace labels in JetBrains Mono echo a typesetting rule-sheet. Body copy sits in Space Grotesk. Every slide uses flat color-blocking with no gradients, no rounded cards, and no subtlety. The aesthetic is part Bauhaus grid, part punk zine, part Swiss editorial.\n\ncolors:\n  cream: \"#EFE9D9\"\n  cream-2: \"#E4DCC4\"\n  ink: \"#0F0F0F\"\n  ink-2: \"#2A2A2A\"\n  green: \"#1F8A4C\"\n  green-dark: \"#136636\"\n  pink: \"#F06CA8\"\n  pink-dark: \"#D14E8B\"\n  orange: \"#E85A1F\"\n  yellow: \"#F5C518\"\n\ntypography:\n  display-jumbo:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 220px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-hero:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 160px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-xl:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-lg:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 100px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-md:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 96px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-sm:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 84px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-xs:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 72px\n    fontWeight: 400\n    lineHeight: 0.95\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  stat-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 96px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  step-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 0.85\n    letterSpacing: 0\n  step-title:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 34px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  stamp-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 64px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  marker-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 46px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  badge-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  table-head:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  table-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  body-lg:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-md:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.3\n    letterSpacing: 0\n  mono-label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.06em\n    textTransform: uppercase\n  mono-kicker:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  mono-tag:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  mono-chart:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.08em\n    textTransform: uppercase\n\nspacing:\n  slide-gutter: 96px\n  chrome-gutter: 64px\n  grid-gap: 28px\n  cell-pad: 32px\n  step-pad: 28px\n  topbar-top: 48px\n  meta-bottom: 40px\n  table-cell-pad: 18px 26px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  slide-chrome:\n    topbar:\n      fontFamily: \"JetBrains Mono, monospace\"\n      fontSize: 24px\n      letterSpacing: 0.08em\n      textTransform: uppercase\n      position: absolute\n      left: 64px\n      right: 64px\n      top: 48px\n    topbar-pill:\n      border: \"2px solid {colors.ink}\"\n      padding: 6px 14px\n      borderRadius: 999px\n    slide-meta:\n      fontFamily: \"JetBrains Mono, monospace\"\n      fontSize: 24px\n      letterSpacing: 0.06em\n      textTransform: uppercase\n      position: absolute\n      left: 64px\n      right: 64px\n      bottom: 40px\n    slide-meta-dot:\n      width: 10px\n      height: 10px\n      background: \"{colors.ink}\"\n      borderRadius: 50%\n  stat-cell:\n    border: \"4px solid {colors.ink}\"\n    padding: 28px 32px\n  stat-cell-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  stat-cell-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  stat-cell-cream:\n    background: \"{colors.cream}\"\n    color: \"{colors.ink}\"\n  stat-cell-orange:\n    background: \"{colors.orange}\"\n    color: \"{colors.cream}\"\n  step-card:\n    border: \"4px solid {colors.ink}\"\n    padding: 28px\n    height: 420px\n  step-card-cream:\n    background: \"{colors.cream}\"\n    color: \"{colors.ink}\"\n  step-card-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  step-card-yellow:\n    background: \"{colors.yellow}\"\n    color: \"{colors.ink}\"\n  step-card-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  step-arrow:\n    borderTop: \"18px solid transparent\"\n    borderBottom: \"18px solid transparent\"\n    borderLeft: \"24px solid {colors.ink}\"\n  table:\n    border: \"4px solid {colors.ink}\"\n    background: \"{colors.cream-2}\"\n    rowBorder: \"3px solid {colors.ink}\"\n    colBorder: \"3px solid {colors.ink}\"\n  table-head-row:\n    background: \"{colors.ink}\"\n    color: \"{colors.cream}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    borderColor: \"{colors.cream}\"\n  table-col-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  table-col-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  table-col-orange:\n    background: \"{colors.orange}\"\n    color: \"{colors.cream}\"\n  marker-block:\n    background: \"{colors.pink}\"\n    border: \"4px solid {colors.ink}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 46px\n    hardShadow: \"24px 24px 0 {colors.orange}, 24px 24px 0 4px {colors.ink}\"\n  iso-panel:\n    background: \"{colors.green}\"\n    border: \"4px solid {colors.ink}\"\n  stacked-block:\n    border: \"4px solid {colors.ink}\"\n    hardShadow: \"18px 18px 0 {colors.ink}\"\n  badge-rotated:\n    background: \"{colors.yellow}\"\n    border: \"4px solid {colors.ink}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    textTransform: uppercase\n    transform: rotate(-4deg)\n  stamp:\n    background: \"{colors.pink}\"\n    border: \"4px solid {colors.cream}\"\n    width: 340px\n    height: 340px\n    transform: rotate(-6deg)\n  stamp-inner:\n    border: \"4px solid {colors.cream}\"\n    borderRadius: 50%\n  kicker-block:\n    background: \"{colors.ink}\"\n    color: \"{colors.cream}\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    padding: 8px 16px\n  bar-chart-bar:\n    border: \"3px solid {colors.ink}\"\n  bar-chart-axis:\n    borderRight: \"3px solid {colors.ink}\"\n    borderBottom: \"3px solid {colors.ink}\"\n  decorative-circle:\n    background: \"{colors.yellow}\"\n    border: \"4px solid {colors.ink}\"\n    borderRadius: 50%\n  closing-slide:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCreative Mode is a **neo-brutalist editorial slide system** for 1920x1080 presentations. The foundational aesthetic choice is restraint of technique paired with aggression of expression: no rounded cards, no gradients, no shadows that suggest light sources — only flat color-blocking and hard offset drop-shadows (the \"Risograph\" or \"screen-print\" kind where the shadow is a sold same-color offset).\n\nThe canvas is warm cream (`{colors.cream}` — #EFE9D9) with near-black ink (`{colors.ink}` — #0F0F0F) for borders, text, and rules. Four accent colors fire at full saturation: forest green, hot pink, burnt orange, and sunshine yellow. These never blend — they collide on the slide and the collision is the design.\n\nHeadlines run **Archivo Black** (weight 400 due to the display face being intrinsically heavy) in strict uppercase with tight line-height (0.92). Font sizes are extreme: 220px for closing slides, 160px for titles. **JetBrains Mono** carries all metadata, labels, topbar text, and axis labels — reinforcing a \"designed artifact\" or \"technical manual\" register. **Space Grotesk** handles all body paragraphs.\n\nEvery slide follows an identical chrome frame: a JetBrains Mono topbar at 48px from top (left text + right pill), and a JetBrains Mono meta footer at 40px from bottom (label left, slide number right with ink dot divider). Content lives inside this frame with 96px side gutters.\n\n**Key Characteristics:**\n- Cream canvas (`{colors.cream}` — #EFE9D9) as the universal background; green (`{colors.green}` — #1F8A4C) used for the closing slide only.\n- 4px solid ink borders on every structural element — cards, panels, table cells, chart axes.\n- Hard offset box-shadows in place of blurred drops: `24px 24px 0 color, 24px 24px 0 4px ink` on featured blocks.\n- Archivo Black display type in uppercase with 0.92 line-height for extreme tightness.\n- Four accent colors used as flat fills; each slide uses two or three of the four, never all simultaneously.\n- Topbar pill badge (JetBrains Mono, 2px ink border, 999px radius) as the only rounded element per slide.\n\n## Colors\n\n### Canvas and Ink\n- **Cream** (`{colors.cream}` — #EFE9D9): The universal slide background. Warm, not white. Distinguishes the deck from sterile white-background slides.\n- **Cream 2** (`{colors.cream-2}` — #E4DCC4): One step darker cream. Used exclusively as the comparison table's background fill, creating a subtle recessed surface inside the ink border.\n- **Ink** (`{colors.ink}` — #0F0F0F): Near-black used for all borders, body text, rules, topbar chrome, and the closing stamp border. Not pure #000000 — slightly softened.\n- **Ink 2** (`{colors.ink-2}` — #2A2A2A): Softer near-black for secondary body text, descriptions inside stat cells, chart footnotes.\n\n### Accent Colors\n- **Green** (`{colors.green}` — #1F8A4C): Forest green. The dominant accent. Works on stat cells, diagram panels, process steps, and as a full-slide background for maximum visual impact.\n- **Green Dark** (`{colors.green-dark}` — #136636): Darker green variant — available for lever/depth decorative effects. Not used as a primary surface fill.\n- **Pink** (`{colors.pink}` — #F06CA8): Hot pink. High energy. Works on toggle switch illustrations, section markers, stat cells, process steps, and stamp elements.\n- **Pink Dark** (`{colors.pink-dark}` — #D14E8B): Darker pink for depth on decorative lever elements. Available for shadow-side accents.\n- **Orange** (`{colors.orange}` — #E85A1F): Burnt orange. The hard drop-shadow color on featured blocks; also works as a stat cell fill, bar chart color, and table column background.\n- **Yellow** (`{colors.yellow}` — #F5C518): Sunshine yellow. Works on decorative circles, process steps, rotated badges, and bar chart bars. A warm punctuation color.\n\n\n## Typography\n\n### Font Families\nThe system uses three typefaces, each in a strict register:\n- **Archivo Black** — display headlines, step numbers, stat numbers, table labels, all uppercase presentation text. Intrinsically heavy, no additional font-weight needed.\n- **JetBrains Mono** — all metadata: topbar labels, meta footer, kicker labels, chart axes, legend rows, layer tags, figure notes. Carries the \"technical spec\" voice.\n- **Space Grotesk** — body copy only: body column text (slide 2), stat cell descriptors, diagram subtext, step descriptions, closing strap.\n\n### Display Scale\nThe slide canvas is 1920x1080px, so font sizes are far larger than web norms.\n\n| Token | Size | Use |\n|---|---|---|\n| `{typography.display-jumbo}` | 220px | Jumbo title or closing headline |\n| `{typography.display-hero}` | 160px | Primary deck title or hero name |\n| `{typography.display-xl}` | 140px | Section-opening display headline |\n| `{typography.display-lg}` | 100px | Section headline alongside a panel |\n| `{typography.display-md}` | 96px | Mid-weight section headline |\n| `{typography.display-sm}` | 84px | Section headline for data-heavy layouts |\n| `{typography.display-xs}` | 72px | Section headline for grid layouts |\n| `{typography.step-num}` | 140px | Large ordinal numerals in stepped layouts |\n| `{typography.stat-num}` | 96px | Large numerals in stat or data cells |\n| `{typography.stamp-num}` | 64px | Stamp or seal numeral |\n| `{typography.marker-label}` | 46px | Featured marker or callout block label |\n| `{typography.step-title}` | 34px | Card or step title |\n| `{typography.table-head}` | 28px | Table header or label row text |\n| `{typography.badge-label}` | 28px | Rotated badge or annotation label |\n\n### Monospace Scale\nAll JetBrains Mono text sits at 24px. Letter-spacing varies by use:\n- Topbar labels: 0.08em\n- Meta footer: 0.06em\n- Kicker labels (inverted): 0.14em\n- Chart axes: 0.08em (via `{typography.mono-chart}`)\n- Legend rows: 0.06em\n- Layer tags: 0.1em\n\n### Body Scale\n- `{typography.body-lg}` (28px): Body copy for wide column layouts or lede paragraphs.\n- `{typography.body-md}` (24px): Body text in stat cells, diagram annotations, step descriptions, footnotes, and strap lines.\n\n### Principles\nArchivo Black has a line-height of 0.92 — headlines overlap their own cap-height, which is intentional. Uppercase lock is non-negotiable for the display face; lowercase Archivo Black breaks the editorial register. The monospace face uses generous letter-spacing (0.06–0.16em) to feel like a typewritten label. Never use letter-spacing on Archivo Black or Space Grotesk.\n\n## Layout\n\n### Canvas System\nEvery slide is exactly 1920×1080px in a fixed, non-scrolling viewport. The `deck-stage` custom element handles centering and scaling.\n\n### Gutter System\n- **Chrome gutter** (64px left/right): Used by topbar and slide-meta only.\n- **Content gutter** (96px left/right): Used by all content — headlines, body, grids.\n- Headlines occasionally push right to within 96px of the right edge, or are constrained by `right: 1000px` / `right: 900px` to coexist with a right-panel diagram.\n\n\n### Chrome Frame (All Slides)\n```\n┌─ topbar @ top:48px, left:64px, right:64px ──────────────────────────────────┐\n│  SECTION LABEL                                       [pill badge]            │\n├─────────────────────────────────────────────────────────────────────────────┤\n│                                                                              │\n│   CONTENT (96px left gutter, 96px right gutter)                            │\n│                                                                              │\n├─ slide-meta @ bottom:40px, left:64px, right:64px ───────────────────────────┤\n│  DESCRIPTOR LABEL                                    01 • 08                 │\n└─────────────────────────────────────────────────────────────────────────────┘\n```\n\n## Depth and Elevation\n\nThe system uses **zero blurred shadows**. Depth is expressed through two techniques:\n\n### Hard Offset Shadow\nThe signature treatment: a second solid shape offset by a fixed amount in both X and Y. Two values are used:\n- **Large offset** (24px 24px): Featured blocks like the marker and poster switch — `box-shadow: 24px 24px 0 {colors.orange}, 24px 24px 0 4px {colors.ink}`. The first shadow is the colored offset; the second is the ink border around it.\n- **Medium offset** (18px 18px): Stacked blocks in the diagram — `box-shadow: 18px 18px 0 {colors.ink}`. Pure ink shadow only.\n\n### Color-Block Contrast\nDepth perception comes from juxtaposing surfaces: cream on cream-2 (table), ink on cream (kicker block), green on cream (diagram panel). No shadow needed when contrast does the work.\n\n### Flat Elements\nTopbar, meta footer, chart axis lines, legend swatches: flat, no shadow, no border-radius.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px (square)**: All structural elements — stat cells, step cards, table cells, chart bars, diagram panels, stacked blocks. No rounding.\n- **50% (circle)**: Decorative circles within diagram (yellow circ), the topbar pill dot (slide meta separator dot).\n- **999px (pill)**: Topbar badge pill only. The one exception to the system's overall squareness, and it reads as a label chip rather than a card.\n- **Rotated elements**: The comparison badge rotates -4deg; the closing stamp rotates -6deg. These are the system's only non-orthogonal placements.\n\n### Borders\n- **4px solid `{colors.ink}`**: All structural borders — stat cells, step cards, diagram panels, table (outer), poster block, marker block, switch block, stamp.\n- **3px solid `{colors.ink}`**: All internal structural lines — table rows, table columns, chart axis, bar chart bars.\n- **2px solid `{colors.ink}`**: Topbar pill badge.\n- **3px dashed `{colors.ink}`**: Dashed horizontal rule separating the process slide's topbar from its flow cards.\n\n### Decorative Elements\n- **Toggle switch**: Pink square with a lever shape (skewed div) and thick/dark underside, offset shadow in orange with ink border.\n- **Stacked blocks**: Four overlapping absolute-positioned rectangles in pink, yellow, orange, cream-2 with 18px ink hard shadows.\n- **Circle overlay**: Yellow circle centered in a green square — shape contrast acting as decorative figure.\n- **Stamp**: Pink rotated square with a cream circular inner border — acts as a seal or approval mark.\n\n## Do's and Don'ts\n\n### Do\n- Use 4px ink borders on every structural element. Thinner looks soft; thicker looks like a web component.\n- Use hard offset shadows in exactly two sizes: 24px for featured hero blocks, 18px for diagram stacked blocks. Don't mix sizes.\n- Stay uppercase on all Archivo Black usage. The font in sentence case reads as a different brand.\n- Use the four accents in groups of two or three per slide. Every accent on one slide is noise.\n- Reserve the green background for a single dominant slide. Its rarity is what gives it impact.\n- Use JetBrains Mono for all labels, metadata, indices, figure notes, and axis text. Never use it for body or headlines.\n- Keep line-height at 0.92 for all display text. Looser leading breaks the tight editorial register.\n- Maintain 96px content gutter and 64px chrome gutter consistently across all slides.\n\n### Don't\n- Don't round card corners (except the topbar pill). Rounding signals \"friendly SaaS\"; sharp corners signal \"editorial precision.\"\n- Don't use gradients, drop shadows with blur, or glow effects. All depth must come from hard offset or color contrast.\n- Don't use Archivo Black in sentence case. Never lowercase the display face.\n- Don't apply letter-spacing to Archivo Black (except at -0.01em which is already encoded). Extra tracking breaks its density.\n- Don't introduce a fifth accent color. The four-color palette is the brand constraint.\n- Don't use pure white (#ffffff) as a background. Cream is the canvas; white reads as blank.\n- Don't use Space Grotesk for labels or metadata. That role belongs to JetBrains Mono.\n- Don't add multiple typefaces. The three-family stack is complete.\n- Don't center-align body text. All body copy is left-aligned; centered text breaks the grid discipline.\n- Don't soften the stamp or badge rotation. The -4deg and -6deg angles are deliberate imperfection signals.\n\n## Responsive Behavior\n\nThis template is designed **exclusively for 1920x1080 presentation display**. It is not a web page and has no mobile breakpoints. The `deck-stage` web component handles viewport scaling via CSS transforms, so the 1920x1080 canvas scales proportionally on any screen size without layout changes.\n\n### Touch / Presenter Behavior\n- Slides advance via keyboard arrow keys or presentation clicker (handled by `deck-stage.js`).\n- No hover states are defined or needed.\n- No interactive form elements exist.\n\n### Print / Export Behavior\n- At 96dpi, the 1920x1080 canvas maps to a standard 20x11.25 inch frame.\n- For PDF export, a 1920x1080 viewport capture or browser print-to-PDF at 100% scale is recommended.\n- At 1pt = 1.333px, the effective print sizes of headlines range from 54pt (72px) to 165pt (220px) — correct for poster/title cards.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Archivo Black uppercase 400) | Archivo Black | 思源宋体 Noto Serif SC 900 | Google Fonts |\n| Body (Space Grotesk 400) | Space Grotesk | 思源宋体 Noto Serif SC 400 | Google Fonts |\n| Mono / Label (JetBrains Mono uppercase) | JetBrains Mono | JetBrains Mono (Latin/digit only — keep mono chrome in Latin) | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin face in the same `font-family` stack so Latin glyphs render in Archivo Black / Space Grotesk and CJK glyphs fall through to NSC automatically. JetBrains Mono chrome stays Latin/digit-only — topbar labels, slide-meta, axis ticks, and figure notes do not need a CJK fallback (and JetBrains Mono has no CJK glyphs by design).\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Archivo+Black&family=Space+Grotesk:wght@300..700&family=JetBrains+Mono:wght@400..500&family=Noto+Serif+SC:wght@400;900&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Archivo Black\", \"Noto Serif SC\", sans-serif;\n  --font-body: \"Space Grotesk\", \"Noto Serif SC\", sans-serif;\n  --font-mono: \"JetBrains Mono\", ui-monospace, monospace;\n}\n/* Display headlines use Noto Serif SC 900; body uses NSC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.55 (from 1.4) — Hanzi need more vertical breathing than Latin lowercase. For display NSC 900 at 100–220px, keep line-height tight at ~1.0 (NSC heavy weight at display size needs less leading than Archivo Black).\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (negative tracking that flatters Archivo Black caps jams Hanzi strokes together). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any display/label/mono when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nCreative Mode's neo-brutalist register depends on Archivo Black's extreme density at 100–220px — there is no Hanzi face that matches this exact mass, so Noto Serif SC at weight 900 is the closest available substitute. NSC 900's modulated serif strokes will read as more literary than the punk-zine Archivo Black voice, but the four-color block palette, 4px ink borders, and hard 24px offset shadows do most of the brutalist work — the typography becomes one component of a louder system rather than the system itself. The \"uppercase always\" rule for Archivo Black is meaningless for Hanzi (no case), so drop both `text-transform: uppercase` and the -0.01em tracking when content switches to Chinese — NSC 900 stands on size and color alone. JetBrains Mono chrome (topbar pill, slide-meta, axis ticks, kicker block) intentionally stays Latin/digit-only: render `04 / 08` slide counters in mono, but render any Chinese descriptor label in NSC 400 inside the meta footer. The four accents (green / pink / orange / yellow), stat-cell color blocks, table treatment, and decorative geometry (stamp, badge, stacked blocks) are all content-agnostic.\n\n### Known CJK Gap\n\n**Heavy Latin display has no exact CJK equivalent.** Archivo Black's brutalist density at 220px is the system's signature — Noto Serif SC 900 is the heaviest commonly available Hanzi weight, but it reads as a literary serif rather than a poster-grotesk. Chinese decks built with Creative Mode will feel ~30% less \"punk-zine\" than the Latin original; compensate by leaning harder on the accent color blocks, the hard offset shadows, and the rotated badge / stamp elements. Avoid the alternative of `Smiley Sans Oblique` for display — its oblique cut conflicts with the system's strict orthogonal rectangle geometry. NSC has no italic axis, but the system doesn't use italic anywhere — no loss. The mono chrome's \"technical spec\" voice is best preserved by keeping all JetBrains Mono content in Latin/digit and reserving NSC for headline and body roles only.\n\n## Iteration Guide\n\n1. New slide layouts must respect the chrome frame: topbar at top:48px left:64px, slide-meta at bottom:40px left:64px.\n2. Content begins at 96px from each side edge.\n3. When adding a data section (chart, table, grid), pair a display headline above with JetBrains Mono labels inside.\n4. Pick two or three accent fills per slide. Never mix all four on a single slide.\n5. Hard shadows go on featured single elements only (marker, featured block). Grid cells do not get individual shadows.\n6. New step/stat cards follow the existing color-sequence pattern: alternate cream with accents, end the sequence on green.\n7. All borders are 4px solid ink. Internal sub-borders within a table or axis are 3px solid ink.\n8. Rotated elements (badge, stamp) use single fixed angles (-4deg, -6deg). Do not introduce other angles.\n9. Icons and illustrations are CSS-only geometric shapes (divs, borders, pseudo-elements). No external images or SVGs needed.\n\n## Known Gaps\n\n- The `deck-stage.js` script (slide advancement, keyboard nav) is an external dependency not documented here.\n- Animation and transition between slides is not in scope for this template; all slides are static.\n- The title slide poster contains a decorative toggle switch illustration built from nested divs; it has no functional state.\n- Chart data (bar heights, values, labels) is hardcoded as inline styles and placeholder content — there is no data-binding layer.\n- Table data is all placeholder; no dynamic population is supported.\n- The `--rule` CSS variable (#0F0F0F, identical to `--ink`) is defined but not used explicitly — it is reserved for horizontal rule elements and can be considered an alias for ink.\n- Font fallback for Archivo Black is `sans-serif` — the font must be loaded from Google Fonts for the design to render correctly.\n","frontmatter":{"version":"alpha","name":"Creative Mode","description":"A neo-brutalist editorial presentation system built for 1920x1080 slides. The deck anchors on a warm cream canvas with heavy 4px ink borders, hard offset drop-shadows, and a bold four-color accent palette (forest green, hot pink, burnt orange, sunshine yellow). Display headlines run Archivo Black in pure uppercase — aggressive, loud, zero letter-spacing softness. Monospace labels in JetBrains Mono echo a typesetting rule-sheet. Body copy sits in Space Grotesk. Every slide uses flat color-blocking with no gradients, no rounded cards, and no subtlety. The aesthetic is part Bauhaus grid, part punk zine, part Swiss editorial.","colors":{"cream":"#EFE9D9","cream-2":"#E4DCC4","ink":"#0F0F0F","ink-2":"#2A2A2A","green":"#1F8A4C","green-dark":"#136636","pink":"#F06CA8","pink-dark":"#D14E8B","orange":"#E85A1F","yellow":"#F5C518"},"typography":{"display-jumbo":{"fontFamily":"Archivo Black, sans-serif","fontSize":"220px","fontWeight":400,"lineHeight":0.92,"letterSpacing":"-0.01em","textTransform":"uppercase"},"display-hero":{"fontFamily":"Archivo Black, sans-serif","fontSize":"160px","fontWeight":400,"lineHeight":0.92,"letterSpacing":"-0.01em","textTransform":"uppercase"},"display-xl":{"fontFamily":"Archivo Black, sans-serif","fontSize":"140px","fontWeight":400,"lineHeight":0.92,"letterSpacing":"-0.01em","textTransform":"uppercase"},"display-lg":{"fontFamily":"Archivo Black, sans-serif","fontSize":"100px","fontWeight":400,"lineHeight":0.92,"letterSpacing":"-0.01em","textTransform":"uppercase"},"display-md":{"fontFamily":"Archivo Black, sans-serif","fontSize":"96px","fontWeight":400,"lineHeight":0.92,"letterSpacing":"-0.01em","textTransform":"uppercase"},"display-sm":{"fontFamily":"Archivo Black, sans-serif","fontSize":"84px","fontWeight":400,"lineHeight":0.92,"letterSpacing":"-0.01em","textTransform":"uppercase"},"display-xs":{"fontFamily":"Archivo Black, sans-serif","fontSize":"72px","fontWeight":400,"lineHeight":0.95,"letterSpacing":"-0.01em","textTransform":"uppercase"},"stat-num":{"fontFamily":"Archivo Black, sans-serif","fontSize":"96px","fontWeight":400,"lineHeight":0.9,"letterSpacing":0},"step-num":{"fontFamily":"Archivo Black, sans-serif","fontSize":"140px","fontWeight":400,"lineHeight":0.85,"letterSpacing":0},"step-title":{"fontFamily":"Archivo Black, sans-serif","fontSize":"34px","fontWeight":400,"lineHeight":1,"letterSpacing":0,"textTransform":"uppercase"},"stamp-num":{"fontFamily":"Archivo Black, sans-serif","fontSize":"64px","fontWeight":400,"lineHeight":0.9,"letterSpacing":0},"marker-label":{"fontFamily":"Archivo Black, sans-serif","fontSize":"46px","fontWeight":400,"lineHeight":1,"letterSpacing":0,"textTransform":"uppercase"},"badge-label":{"fontFamily":"Archivo Black, sans-serif","fontSize":"28px","fontWeight":400,"lineHeight":1,"letterSpacing":0,"textTransform":"uppercase"},"table-head":{"fontFamily":"Archivo Black, sans-serif","fontSize":"28px","fontWeight":400,"lineHeight":1,"letterSpacing":0,"textTransform":"uppercase"},"table-label":{"fontFamily":"Archivo Black, sans-serif","fontSize":"28px","fontWeight":400,"lineHeight":1,"letterSpacing":0,"textTransform":"uppercase"},"body-lg":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"28px","fontWeight":400,"lineHeight":1.4,"letterSpacing":0},"body-md":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"24px","fontWeight":400,"lineHeight":1.3,"letterSpacing":0},"mono-label":{"fontFamily":"JetBrains Mono, monospace","fontSize":"24px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.06em","textTransform":"uppercase"},"mono-kicker":{"fontFamily":"JetBrains Mono, monospace","fontSize":"24px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.14em","textTransform":"uppercase"},"mono-tag":{"fontFamily":"JetBrains Mono, monospace","fontSize":"24px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.1em","textTransform":"uppercase"},"mono-chart":{"fontFamily":"JetBrains Mono, monospace","fontSize":"24px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.08em","textTransform":"uppercase"}},"spacing":{"slide-gutter":"96px","chrome-gutter":"64px","grid-gap":"28px","cell-pad":"32px","step-pad":"28px","topbar-top":"48px","meta-bottom":"40px","table-cell-pad":"18px 26px"},"canvas":{"width":"1920px","height":"1080px"},"components":{"slide-chrome":{"topbar":{"fontFamily":"JetBrains Mono, monospace","fontSize":"24px","letterSpacing":"0.08em","textTransform":"uppercase","position":"absolute","left":"64px","right":"64px","top":"48px"},"topbar-pill":{"border":"2px solid {colors.ink}","padding":"6px 14px","borderRadius":"999px"},"slide-meta":{"fontFamily":"JetBrains Mono, monospace","fontSize":"24px","letterSpacing":"0.06em","textTransform":"uppercase","position":"absolute","left":"64px","right":"64px","bottom":"40px"},"slide-meta-dot":{"width":"10px","height":"10px","background":"{colors.ink}","borderRadius":"50%"}},"stat-cell":{"border":"4px solid {colors.ink}","padding":"28px 32px"},"stat-cell-green":{"background":"{colors.green}","color":"{colors.cream}"},"stat-cell-pink":{"background":"{colors.pink}","color":"{colors.ink}"},"stat-cell-cream":{"background":"{colors.cream}","color":"{colors.ink}"},"stat-cell-orange":{"background":"{colors.orange}","color":"{colors.cream}"},"step-card":{"border":"4px solid {colors.ink}","padding":"28px","height":"420px"},"step-card-cream":{"background":"{colors.cream}","color":"{colors.ink}"},"step-card-pink":{"background":"{colors.pink}","color":"{colors.ink}"},"step-card-yellow":{"background":"{colors.yellow}","color":"{colors.ink}"},"step-card-green":{"background":"{colors.green}","color":"{colors.cream}"},"step-arrow":{"borderTop":"18px solid transparent","borderBottom":"18px solid transparent","borderLeft":"24px solid {colors.ink}"},"table":{"border":"4px solid {colors.ink}","background":"{colors.cream-2}","rowBorder":"3px solid {colors.ink}","colBorder":"3px solid {colors.ink}"},"table-head-row":{"background":"{colors.ink}","color":"{colors.cream}","fontFamily":"Archivo Black, sans-serif","fontSize":"28px","borderColor":"{colors.cream}"},"table-col-pink":{"background":"{colors.pink}","color":"{colors.ink}"},"table-col-green":{"background":"{colors.green}","color":"{colors.cream}"},"table-col-orange":{"background":"{colors.orange}","color":"{colors.cream}"},"marker-block":{"background":"{colors.pink}","border":"4px solid {colors.ink}","fontFamily":"Archivo Black, sans-serif","fontSize":"46px","hardShadow":"24px 24px 0 {colors.orange}, 24px 24px 0 4px {colors.ink}"},"iso-panel":{"background":"{colors.green}","border":"4px solid {colors.ink}"},"stacked-block":{"border":"4px solid {colors.ink}","hardShadow":"18px 18px 0 {colors.ink}"},"badge-rotated":{"background":"{colors.yellow}","border":"4px solid {colors.ink}","fontFamily":"Archivo Black, sans-serif","fontSize":"28px","textTransform":"uppercase","transform":"rotate(-4deg)"},"stamp":{"background":"{colors.pink}","border":"4px solid {colors.cream}","width":"340px","height":"340px","transform":"rotate(-6deg)"},"stamp-inner":{"border":"4px solid {colors.cream}","borderRadius":"50%"},"kicker-block":{"background":"{colors.ink}","color":"{colors.cream}","fontFamily":"JetBrains Mono, monospace","fontSize":"24px","letterSpacing":"0.14em","textTransform":"uppercase","padding":"8px 16px"},"bar-chart-bar":{"border":"3px solid {colors.ink}"},"bar-chart-axis":{"borderRight":"3px solid {colors.ink}","borderBottom":"3px solid {colors.ink}"},"decorative-circle":{"background":"{colors.yellow}","border":"4px solid {colors.ink}","borderRadius":"50%"},"closing-slide":{"background":"{colors.green}","color":"{colors.cream}"}}},"isInternal":false,"tokens":7377,"sizeBytes":29521},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/preview.md","title":"Creative-mode Skill","category":"anthropic-skill","format":"markdown","content":"# Creative Mode Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/creative-mode/design.md`\n- Preview card: `bold-template-pack/templates/creative-mode/preview.md`\n\n## Selection Metadata\n\n- Slug: `creative-mode`\n- Tagline: Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display.\n- Mood: creative, confident, playful, design-led\n- Tone: graphic, expressive, modern\n- Formality: medium\n- Density: medium-high\n- Scheme: light\n- Best for: Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews. Also a great unexpected pick for a tech talk, research findings, or finance review when the speaker wants to lead with taste rather than convention.\n- Avoid for: Contexts that demand institutional restraint and a quiet authority — the saturated multi-accent palette will read as expressive, not formal.\n\n## Visual Snapshot\n\nA neo-brutalist editorial presentation system built for 1920x1080 slides. The deck anchors on a warm cream canvas with heavy 4px ink borders, hard offset drop-shadows, and a bold four-color accent palette (forest green, hot pink, burnt orange, sunshine yellow). Display headlines run Archivo Black in pure uppercase — aggressive, loud, zero letter-spacing softness. Monospace labels in JetBrains Mono echo a typesetting rule-sheet. Body copy sits in Space Grotesk. Every slide uses flat color-blocking with no gradients, no rounded cards, and no subtlety. The aesthetic is part Bauhaus grid, part punk zine, part Swiss editorial.\n\nCreative Mode is a neo-brutalist editorial slide system for 1920x1080 presentations. The foundational aesthetic choice is restraint of technique paired with aggression of expression: no rounded cards, no gradients, no shadows that suggest light sources — only flat color-blocking and hard offset drop-shadows (the \"Risograph\" or \"screen-print\" kind where the shadow is a sold same-color offset).\n\n## Preview Ingredients\n\n- Palette: cream #EFE9D9; cream-2 #E4DCC4; ink #0F0F0F; ink-2 #2A2A2A; green #1F8A4C; green-dark #136636; pink #F06CA8; pink-dark #D14E8B\n- Typography: Archivo Black; Space Grotesk; JetBrains Mono\n- Signature move: Cream canvas ({colors.cream} — #EFE9D9) as the universal background; green ({colors.green} — #1F8A4C) used for the closing slide only.\n- Signature move: 4px solid ink borders on every structural element — cards, panels, table cells, chart axes.\n- Signature move: Hard offset box-shadows in place of blurred drops: 24px 24px 0 color, 24px 24px 0 4px ink on featured blocks.\n- Signature move: Archivo Black display type in uppercase with 0.92 line-height for extreme tightness.\n- Signature move: Four accent colors used as flat fills; each slide uses two or three of the four, never all simultaneously.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1029,"sizeBytes":4493},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/design.md","title":"Daisy Days","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Daisy Days\ndescription: A cheerful, childlike presentation system built around the chunky display face Fredoka One and the rounded humanist sans Quicksand. The palette is a sunny garden — cream canvas, turquoise, soft pink, butter yellow, mint, lavender, peach, sky blue, and a single coral accent — with charcoal-brown 2D outlines wrapping every shape. Hard offset shadows in dark charcoal, generous border-radius, and hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) anchor the aesthetic somewhere between a children's storybook spread and a sticker-sheet kawaii zine.\n\ncolors:\n  cream: \"#F5F0E6\"\n  turquoise: \"#7ECDC0\"\n  soft-pink: \"#F7C8D4\"\n  butter: \"#FDE68A\"\n  mint: \"#A8E6CF\"\n  lavender: \"#D4A5E8\"\n  peach: \"#FFCBA4\"\n  sky: \"#A8D8F0\"\n  coral: \"#F8635F\"\n  text-dark: \"#2D2D2D\"\n  text-muted: \"#6B6B6B\"\n  white: \"#FFFFFF\"\n\nborders:\n  primary: \"3px solid {colors.text-dark}\"\n  thin: \"2px solid {colors.text-dark}\"\n\nshadows:\n  default: \"6px 6px 0 {colors.text-dark}\"\n  small: \"4px 4px 0 {colors.text-dark}\"\n  text-headline: \"3px 3px 0 {colors.text-dark}\"\n  text-headline-soft: \"3px 3px 0 rgba(0,0,0,0.2)\"\n\ntypography:\n  display:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(3.2rem, 7vw, 6.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0.02em\n  headline:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(2.5rem, 5vw, 4.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0.02em\n  title:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 400\n    lineHeight: 1.15\n    letterSpacing: 0.02em\n  subtitle:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.3rem, 2vw, 1.8rem)\"\n    fontWeight: 400\n    lineHeight: 1.2\n    letterSpacing: 0.02em\n  label-display:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1rem, 1.5vw, 1.3rem)\"\n    fontWeight: 400\n    lineHeight: 1.3\n    letterSpacing: 0.02em\n  quote:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.3rem, 2.5vw, 2rem)\"\n    fontWeight: 400\n    lineHeight: 1.35\n  body:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.3vw, 1.15rem)\"\n    fontWeight: 500\n    lineHeight: 1.6\n  body-strong:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.4vw, 1.15rem)\"\n    fontWeight: 600\n    lineHeight: 1.5\n  meta:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.8rem, 1.1vw, 0.95rem)\"\n    fontWeight: 600\n    lineHeight: 1.45\n  badge:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"0.85rem\"\n    fontWeight: 400\n    letterSpacing: 0.02em\n\nspacing:\n  pad-slide: \"40px 60px\"\n  pad-card-lg: \"48px 56px\"\n  pad-card-md: \"32px 40px\"\n  pad-card-sm: \"16px 24px\"\n  gap-grid-lg: \"28px\"\n  gap-grid-md: \"24px\"\n  gap-grid-sm: \"14px\"\n  radius: \"20px\"\n  radius-lg: \"28px\"\n  radius-pill: \"50px\"\n  radius-round: \"50%\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  card:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius}\"\n    boxShadow: \"{shadows.default}\"\n  card-lg:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-lg}\"\n    boxShadow: \"{shadows.default}\"\n  badge-pill:\n    display: \"inline-block\"\n    padding: \"8px 20px\"\n    borderRadius: \"{spacing.radius-pill}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"0.85rem\"\n    background: \"{colors.butter}\"\n  framed-header:\n    description: \"A two-part stacked card: a colored header strip (any accent surface) with rounded top corners and no bottom border, sitting flush above a white body with rounded bottom corners. The pair reads as a single unit with a tonal cap.\"\n    headerBackground: \"any accent surface\"\n    headerBorderRadius: \"{spacing.radius-lg} {spacing.radius-lg} 0 0\"\n    bodyBackground: \"{colors.white}\"\n    bodyBorderRadius: \"0 0 {spacing.radius-lg} {spacing.radius-lg}\"\n    border: \"3px solid {colors.text-dark}\"\n    boxShadow: \"{shadows.default}\"\n  circle-dot:\n    width: \"48px\"\n    height: \"48px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    color: \"{colors.white}\"\n    description: \"Outlined colored disc holding a numeral or single letter. Used as timeline node, step marker, or list bullet anchor.\"\n  circle-icon:\n    width: \"44px\"\n    height: \"44px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    background: \"any accent surface\"\n    description: \"Smaller cousin of circle-dot used as a card icon at the top of an info card.\"\n  step-circle-lg:\n    width: \"90px\"\n    height: \"90px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    color: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Oversized outlined disc used as a process step marker. Carries a hard offset shadow.\"\n  avatar-circle:\n    width: \"100px\"\n    height: \"100px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    overflow: \"hidden\"\n  bullet-dot:\n    width: \"20px\"\n    height: \"20px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"2px solid {colors.text-dark}\"\n    background: \"{colors.butter}\"\n    description: \"Small outlined disc used as a ::before bullet for body list items, anchored 4px from the top of the line.\"\n  list-dash:\n    description: \"A simple muted-text dash character used as a ::before bullet for compact in-card lists (day-card body).\"\n  legend-swatch:\n    width: \"18px\"\n    height: \"18px\"\n    border: \"2px solid {colors.text-dark}\"\n    borderRadius: \"4px\"\n  decoration:\n    position: \"absolute\"\n    pointerEvents: \"none\"\n    zIndex: 1\n    description: \"Hand-drawn SVG sticker (daisy, star, sun, cloud, rainbow) placed at slide corners and edges as atmospheric ornament. Often crops past the slide edge.\"\n  nav-dots:\n    position: \"fixed\"\n    placement: \"right edge, vertically centered\"\n    dotSize: \"12px\"\n    dotBorder: \"2px solid {colors.text-dark}\"\n    activeBackground: \"{colors.butter}\"\n    activeTransform: \"scale(1.2)\"\n  slide-counter:\n    position: \"fixed\"\n    placement: \"bottom center\"\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-pill}\"\n    padding: \"6px 20px\"\n    fontFamily: \"'Fredoka One', cursive\"\n    boxShadow: \"{shadows.small}\"\n  chart-container:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-lg}\"\n    boxShadow: \"{shadows.default}\"\n    padding: \"{spacing.pad-card-md}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nDaisy Days is a **cheerful childlike presentation system** rooted in a single typographic pairing: the chubby rounded display face **Fredoka One** for every headline, and the friendly humanist sans **Quicksand** for every line of body and meta text. The visual language descends from picture-book illustration and sticker-sheet kawaii: every shape carries a charcoal 2D outline, every elevated element casts a solid offset shadow, and every surface is a pastel from a sunny garden palette.\n\nThe color philosophy is **multi-pastel with a single warm pop**. The background canvas alternates between a soft cream (`{colors.cream}`) and the saturated pastels (`{colors.turquoise}`, `{colors.soft-pink}`, `{colors.butter}`, `{colors.mint}`, `{colors.lavender}`, `{colors.peach}`, `{colors.sky}`). The lone high-saturation accent is `{colors.coral}` — used sparingly on small marker dots and headline strokes, never as a full surface. Headlines on top of a colored surface get a 3px charcoal text-shadow, which gives display text the same outlined appearance as the shapes around it; headlines on cream stay flat. Body text never leaves `{colors.text-dark}` or `{colors.text-muted}`.\n\nDepth is **2D and graphic**, not photographic. Every elevated element gets a `{shadows.default}` or `{shadows.small}` — a solid charcoal block offset to the bottom-right, with zero blur. The combination of thick charcoal outline plus hard offset shadow gives the system its sticker-on-paper feel. There are no gradients, no glow, no glass effects.\n\nThe signature treatment is the **hand-drawn SVG decoration layer**. Every region carries 3–7 absolutely-positioned ornaments — yellow-centered daisies, multi-color stars, smiling suns, fluffy clouds, arched rainbows — that cluster at the corners and edges, often cropping past the slide boundary at `top:-30px / right:-20px`. These decorations sit on a `z-index:1` layer behind the content (`z-index:2`) and carry the same 2px-ish charcoal stroke as the rest of the system, unifying ornament with structure.\n\n**Density philosophy: full but not crowded.** This system reads as authoritative when every slide carries one focused content region (a card, a frame, a grid) at the center plus a generous wreath of corner ornaments at the edges. An empty corner with no decoration reads as broken — the ornaments are part of the structural composition, not optional garnish. Conversely, dense overlapping content panels read as anxious; the system wants one main subject, framed and surrounded, not three competing ones. Aim for one bordered/shadowed container per slide, with the corner decorations doing the work of filling the rest of the canvas.\n\n**Key Characteristics:**\n- Cream (`{colors.cream}`) default canvas with rotating pastel surfaces — every slide may pick a different surface color.\n- Fredoka One for all headline / display / quote text; Quicksand 500/600 for all body and meta text.\n- Every shape and card carries a 3px solid charcoal outline (`{colors.text-dark}`) plus a hard offset shadow (`{shadows.default}` or `{shadows.small}`).\n- Generous border-radius: 20px on standard cards, 28px on featured cards, pill (`{spacing.radius-pill}`) on badges, full circle on dots and avatars.\n- Hand-drawn SVG ornaments (daisies, stars, suns, clouds, rainbows) cluster at corners and crop past slide edges as atmospheric layer.\n- Headlines on colored surfaces always carry a 3px solid charcoal text-shadow; headlines on cream sit flat.\n- Bullets are colored outlined dots (`{components.bullet-dot}`), not glyphs. Lists feel hand-set.\n- One main content container per slide, surrounded by 3–7 ornaments. Empty corners are wrong.\n\n## Colors\n\n### Palette\n- **Cream** (`{colors.cream}` — #F5F0E6): The default canvas. A warm off-white that reads as paper-stock rather than digital white. Used as the deck's neutral surface — title openings, info-card slides, anything that wants to feel like a storybook page.\n- **Turquoise** (`{colors.turquoise}` — #7ECDC0): A medium-saturation teal-green. The boldest of the surface pastels; loud enough that headlines on top need the charcoal text-shadow to stay legible.\n- **Soft Pink** (`{colors.soft-pink}` — #F7C8D4): A bubblegum blush. Used as a full surface, a header-strip color, a day-marker fill, and the quote-mark accent inside a quote card.\n- **Butter** (`{colors.butter}` — #FDE68A): A buttery pastel yellow. The active-state color for nav dots, the default badge fill, and the default bullet-dot fill. It is the system's \"highlight\" color when something needs to feel marked.\n- **Mint** (`{colors.mint}` — #A8E6CF): A cool celadon green. A surface color, a header-strip color, a circle-icon fill, and a timeline-dot color.\n- **Lavender** (`{colors.lavender}` — #D4A5E8): A muted purple. Surface, header-strip, marker-dot, day-marker — same role flexibility as mint and soft-pink.\n- **Peach** (`{colors.peach}` — #FFCBA4): A warm pastel orange. Used as a surface (typically on process or sequence slides) and an accent.\n- **Sky** (`{colors.sky}` — #A8D8F0): A pastel blue. Surface and accent color, often paired with cloud decorations.\n- **Coral** (`{colors.coral}` — #F8635F): The single saturated accent. Used only as a marker fill (a numbered dot, a timeline node, a step circle) and a day-header — never as a full slide surface. Coral is the system's \"look here\" color and loses its punch if overused.\n- **Text Dark** (`{colors.text-dark}` — #2D2D2D): The structural color. Every border, every body text run on light surfaces, every shadow, every SVG stroke. Slightly warmer than pure black — reads charcoal, not jet.\n- **Text Muted** (`{colors.text-muted}` — #6B6B6B): The de-emphasized text color. Subtitles, descriptions under headlines, list-dash bullets, role labels.\n- **White** (`{colors.white}` — #FFFFFF): The default card fill — every card, every avatar, every chart-container interior. Cards on a cream canvas still get white interiors so the card edge reads cleanly.\n\n### Defaults\n- **Default slide background**: `{colors.cream}`. Use a saturated pastel surface (turquoise, soft-pink, mint, butter, lavender, peach, sky) when the slide wants a tonal personality; default to cream when it doesn't.\n- **Default card background**: `{colors.white}` — on any surface, including pastel surfaces. White-on-pastel is the standard card treatment.\n- **Default headline color**: `{colors.text-dark}` — always.\n- **Default body color**: `{colors.text-dark}` for primary body, `{colors.text-muted}` for descriptions, role labels, captions, and sublines.\n- **Default border color**: `{colors.text-dark}` — always. There are no colored borders anywhere.\n- **Default shadow color**: `{colors.text-dark}` — always. Shadows are never pastel.\n- **Default badge fill**: `{colors.butter}`.\n- **Default marker / accent fill** when an element needs a single \"attention\" color: `{colors.coral}`. When a sequence of markers is needed, rotate through the full pastel set (coral → mint → sky → lavender → butter) for sequence steps and dots.\n- **Default header-strip color** on a framed-header component: any pastel surface — pick whichever harmonizes with the slide's surface color.\n\nThe pastels are interchangeable at the surface level — they do not carry fixed semantic meaning (mint is not \"success\", coral is not \"warning\"). Pick the surface that best serves the slide's emotional register. The one rule: coral is reserved for small high-contrast accents, not surfaces.\n\n## Typography\n\n### Font Family\nThe system loads exactly two web fonts from Google Fonts: **Fredoka One** (a single-weight rounded display face) and **Quicksand** (a humanist sans available at 400/500/600/700). The pairing is the entire typographic identity.\n\nFredoka One is a chunky single-weight display face — it has no italic, no lighter variants, no condensed cuts. The display weight reads as 400 by spec but visually behaves as a heavy weight because the letterforms are so rounded and full. Every headline, every title, every step number, every quote in the system runs in Fredoka One. There is no exception — using Quicksand for a heading or Fredoka One for a body paragraph breaks the system instantly.\n\nQuicksand carries everything else: paragraphs, list items, role labels, captions, day-card body lists, legend text. Quicksand 500 is the body default; 600 is the \"slightly stronger\" variant used for emphasized body (welcome-list items, info-card descriptions, legend labels); 700 is used sparingly for quote-author attribution.\n\n### Display, Body, and Marker Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3.2rem, 7vw, 6.5rem) | Fredoka One | 400 | Cover / opening hero headline |\n| `{typography.headline}` | clamp(2.5rem, 5vw, 4.5rem) | Fredoka One | 400 | Primary slide headline |\n| `{typography.title}` | clamp(1.8rem, 3.5vw, 3rem) | Fredoka One | 400 | Section title or framed-header title |\n| `{typography.quote}` | clamp(1.3rem, 2.5vw, 2rem) | Fredoka One | 400 | Pull-quote body text |\n| `{typography.subtitle}` | clamp(1.3rem, 2vw, 1.8rem) | Fredoka One | 400 | Sub-headline, in-card title |\n| `{typography.label-display}` | clamp(1rem, 1.5vw, 1.3rem) | Fredoka One | 400 | Small Fredoka labels — day-card header, step title |\n| `{typography.body-strong}` | clamp(0.95rem, 1.4vw, 1.15rem) | Quicksand | 600 | Emphasized body — welcome lists, info-card descriptions |\n| `{typography.body}` | clamp(0.95rem, 1.3vw, 1.15rem) | Quicksand | 500 | Standard paragraph body |\n| `{typography.meta}` | clamp(0.8rem, 1.1vw, 0.95rem) | Quicksand | 600 | Compact secondary text — day-card lists, step descriptions, legend rows |\n| `{typography.badge}` | 0.85rem | Fredoka One | 400 | Text inside a pill badge |\n\n### Defaults\n- **Default size for a primary slide headline**: `{typography.headline}` (clamp 2.5–4.5rem).\n- **Default size for a cover-level title moment**: `{typography.display}` (clamp 3.2–6.5rem).\n- **Default size for a paragraph**: `{typography.body}` (clamp 0.95–1.15rem) in Quicksand 500.\n- **Default size for emphasized list items**: `{typography.body-strong}` (Quicksand 600).\n- **Default size for a description under a card title or a meta caption**: `{typography.meta}` in `{colors.text-muted}`.\n- **Default size for a section / framed-header title**: `{typography.title}`.\n- **Default family for any text larger than ~1.3rem**: Fredoka One. Default family for any text smaller than that: Quicksand. The size threshold roughly tracks the Fredoka / Quicksand role boundary.\n\nWhen unsure, reach for `{typography.headline}` for the slide's main text moment, not `{typography.subtitle}` or `{typography.title}` (which are intra-content titles, not the primary slide voice).\n\n### Signature Treatments\nThese are **non-optional whenever the corresponding element type is used**:\n\n- **Every Fredoka One headline placed on a saturated pastel surface carries a 3px charcoal text-shadow** (`{shadows.text-headline}` on bold surfaces like turquoise / mint, `{shadows.text-headline-soft}` on softer surfaces like pink / lavender). Headlines on cream sit flat without the shadow. The text-shadow is what makes the headline read as \"outlined\" in the same vocabulary as the rest of the system. Skipping it on a colored surface reads as broken.\n- **Headlines placed on saturated surfaces switch text color to `{colors.white}`**; headlines on cream and on light pastel cards stay `{colors.text-dark}`. The pairing is white-on-saturated, dark-on-cream-or-card.\n- **Every body list item uses an outlined colored disc as its bullet, not a glyph.** Default fill is `{colors.butter}`. The bullet is rendered as a `::before` 20px circle with 2px charcoal border, positioned 4px from the top of the first line.\n- **Every quote uses the Fredoka quote-mark treatment**: an oversized `\"` glyph in `{colors.soft-pink}` sits above the quoted text. Quotes never appear without a quote-mark anchor.\n- **Quicksand body text never goes uppercase.** No display-style ALL-CAPS treatments on body. Fredoka has its own personality and doesn't need shouting.\n\n### Typography Principles\nThe size ladder is the rhythm. Fredoka One does not get italicized, underlined, or rendered in alternate weights — Fredoka has one weight, full stop. Quicksand stays inside the 500 / 600 / 700 ladder; do not introduce 400 or 800 even if available. Letter-spacing on Fredoka stays at the spec default of `0.02em`. Letter-spacing on Quicksand stays at 0.\n\nMixing Quicksand into a headline (e.g. for an italicized phrase) is not supported in this system — the headline runs in one face. If a headline needs a different emotional register, the size and color do the work, not the font swap.\n\n## Layout\n\n### Canvas System\nThe system targets full viewport — every `.slide` is `100vw × 100vh` with `padding: 40px 60px` (default slide padding). Slides are stacked vertically inside a `.slides-container` that uses CSS scroll-snap (`scroll-snap-type: y mandatory`) to lock each slide to the viewport. Navigation is handled via fixed right-edge nav dots, a fixed bottom-center counter pill, keyboard arrows / spacebar, and intersection-observer-driven dot state.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide}` | 40px 60px | Outer slide padding |\n| `{spacing.pad-card-lg}` | 48px 56px | Large featured cards (quote box, welcome body) |\n| `{spacing.pad-card-md}` | 32px 40px | Standard cards (chart container, framed-header body) |\n| `{spacing.pad-card-sm}` | 16px 24px | Compact cards (timeline card, day-card body) |\n| `{spacing.gap-grid-lg}` | 28px | Major grid gaps (team grid, info-card grid) |\n| `{spacing.gap-grid-md}` | 24px | Standard grid gaps |\n| `{spacing.gap-grid-sm}` | 14px | Tight grid gaps (weekly day-card grid) |\n\n### Border-Radius Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.radius}` | 20px | Standard cards, day-cards, timeline cards |\n| `{spacing.radius-lg}` | 28px | Featured cards (chart container, welcome frame, quote box) |\n| `{spacing.radius-pill}` | 50px | Badges, slide counter |\n| `{spacing.radius-round}` | 50% | All circles (avatars, bullet dots, marker dots, step circles, icons) |\n\nEvery visible region carries some radius. There are zero square corners in this system besides the SVG decorations themselves.\n\n### Content Centering\nSlide content is flex-centered both vertically and horizontally inside the slide padding. The main content container has a max-width that varies by composition (typically 700–1100px) and never spans the full slide width — there is always margin between content and slide edge for the decorations to occupy.\n\n## Depth and Elevation\n\n### Hard Offset Shadow (Only Technique)\nEvery elevated element uses one of two shadow values:\n- **`{shadows.default}`** = `6px 6px 0 {colors.text-dark}` — standard offset for cards, frames, chart containers, badges, the slide counter.\n- **`{shadows.small}`** = `4px 4px 0 {colors.text-dark}` — lighter offset for smaller elevated elements (day-cards, timeline-cards, info-cards, step circles, avatars).\n\nThe shadow is **solid charcoal, zero blur, fixed bottom-right offset**. There is no rgba shadow, no blur, no soft elevation. An element either casts a hard offset shadow in `{colors.text-dark}` or it casts no shadow.\n\n### Text Shadow for Display Type\nA separate text-shadow treatment lives only on display headlines placed over saturated pastel surfaces:\n- **`{shadows.text-headline}`** = `3px 3px 0 {colors.text-dark}` for bold pastel surfaces (turquoise, butter, peach).\n- **`{shadows.text-headline-soft}`** = `3px 3px 0 rgba(0,0,0,0.2)` for softer pastel surfaces (soft-pink, mint) where the full charcoal would feel too heavy.\n\nHeadlines on cream get no text-shadow.\n\n### Decorative Z-Index Layer\nThe atmospheric SVG decorations live on `z-index: 1` with `pointer-events: none`. Content sits on `z-index: 2`. This means decorations may visually overlap content rectangles, but never block interaction. Decorations frequently crop past the slide edge with negative offsets like `top:-30px / left:-30px`, which gives the layout a \"stickers reaching off the page\" feel.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **3px solid `{colors.text-dark}`** — the universal structural border. Cards, framed headers, badges, marker circles, step circles, avatars, chart containers, the slide counter.\n- **2px solid `{colors.text-dark}`** — the lighter border used only on small elements at the bullet / nav-dot / legend-swatch / day-header divider scale.\n- **~2.1px solid `#232323` or `#000`** — the SVG stroke weight used inside the daisy / star / cloud / sun decorations. This matches the perceived weight of the 3px structural border at the SVG's natural scale.\n\nBorders are never colored. Borders are never dashed. The only line style in the system is solid charcoal.\n\n### Decorative Element Types\n\n**Daisy** — A six-petal white-petal / yellow-center daisy in two paired stem positions. The system's signature ornament. Place at corners (typically `top-left`, `top-right`, `bottom-left`, `bottom-right`), often cropped past the edge at `top:-30px` or `right:-20px`. Two daisies plus 2–3 stars is the most common decoration cluster.\n\n**Star** — A puffy five-pointed sticker star in a solid pastel fill (pink, yellow, mint, lavender, white) with charcoal outline. Used as scattered accents between the larger daisy / sun / cloud ornaments. Vary fill color across instances on the same slide; do not use all-white or all-yellow stars.\n\n**Sun** — A smiling round sun in butter yellow with rays. Used as a single feature ornament, typically at top-left or bottom-right.\n\n**Cloud** — A puffy white-and-blue cloud with optional smaller cloud variant. Used in sequences (two clouds at opposing corners) or as a single ornament on slides that want a sky atmosphere.\n\n**Rainbow** — An arched four-band rainbow (coral / yellow / mint / sky) with the standard charcoal outline. Used as a single feature ornament, typically at top-right or bottom-right.\n\n**Framed Header** (`{components.framed-header}`) — A two-part stacked card: a colored header strip (any pastel) sits flush above a white body. The pair shares one rounded outer corner radius and one continuous 3px border, and the whole unit casts a single offset shadow. Used as a featured info container.\n\n**Badge Pill** (`{components.badge-pill}`) — A short rounded-pill chip with 3px border and butter (default) fill. Used as a section tag or small label. Pill text is Fredoka One at 0.85rem.\n\n**Marker Circle Set** — Three sizes (`{components.bullet-dot}` 20px, `{components.circle-dot}` 48px, `{components.circle-icon}` 44px, `{components.step-circle-lg}` 90px). All are outlined circles in a pastel fill, all carry charcoal border. Numerals or single letters inside larger marker circles are always Fredoka One in white text (except on butter-yellow, where text returns to dark).\n\n**Avatar Circle** — A 100px outlined white circle holding a small character SVG portrait or initial. Carries `{shadows.small}`.\n\n**Quote Mark** — An oversized `\"` glyph in Fredoka One at ~4rem in `{colors.soft-pink}`, placed above the quote body inside a quote card.\n\n**Process Arrow** — A simple `→` glyph in Fredoka One at ~2rem in `{colors.text-dark}`, sat between process steps.\n\n**Legend Swatch** — A 18px square with 4px rounded corners and a 2px border. Holds a fill color matched to a corresponding data series.\n\n## Do's and Don'ts\n\n### Do\n- Pair Fredoka One with Quicksand strictly by role — Fredoka for every headline and display moment, Quicksand for every paragraph and meta line. The two-face contrast is the system's voice.\n- Set the default canvas to `{colors.cream}`. Reach for a saturated pastel surface (turquoise, soft-pink, mint, etc.) when the slide wants a tonal mood, but cream is the safe default for content-heavy moments.\n- Apply a 3px solid charcoal outline plus a `{shadows.default}` or `{shadows.small}` hard offset shadow to every elevated container. The outline + offset shadow combo is the system's signature elevation.\n- Apply the `{shadows.text-headline}` text-shadow to every Fredoka One headline placed over a saturated pastel surface. Skip it only on cream.\n- Cluster 3–7 hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) around every slide's edges, often cropping past the boundary. Empty corners look broken in this system.\n- Use outlined colored discs as list bullets — never bare hyphens or asterisks. The `{components.bullet-dot}` with `{colors.butter}` fill is the default.\n- Reserve `{colors.coral}` for small high-attention markers (step numbers, timeline dots, day-headers). Coral as a full slide surface breaks the warmth-balance and reads aggressive.\n- Center the main content container with a max-width well inside the slide padding. The decorations need room at the edges; full-bleed content blocks the ornament layer.\n- Rotate marker / dot colors through the pastel set (coral → mint → sky → lavender → butter) when a sequence needs distinct steps. Do not use a single color for all steps.\n\n### Don't\n- Don't use any font other than Fredoka One and Quicksand. The system loads only those two faces from Google Fonts. Adding a third face breaks the storybook voice.\n- Don't put Quicksand into a headline or Fredoka One into a paragraph. The role / face mapping is strict.\n- Don't use square corners. Every card, every badge, every marker has some radius — the smallest radius in the system is 4px (legend swatch), and most are 20px or larger.\n- Don't use blurred or rgba shadows. The system uses solid charcoal offsets only. `0 4px 12px rgba(0,0,0,0.1)` does not exist here.\n- Don't use colored borders. All borders are charcoal `{colors.text-dark}`.\n- Don't use coral as a full slide surface. Coral is the system's high-attention spot color; it loses power if it covers a region.\n- Don't render Fredoka One in italic, underline, or stretched weights. Fredoka has one weight — that's the design.\n- Don't omit the text-shadow on Fredoka headlines that sit on a saturated pastel surface. The shadow is what unifies headline weight with the outlined-shape vocabulary.\n- Don't leave a slide's corners empty of decorations. The ornament layer is part of the composition, not optional dressing.\n- Don't pile two cards on top of each other without separation. The system reads as one main content region per slide, surrounded by ornament — not as a stack of competing panels.\n\n## Responsive Behavior\n\nThe system targets a viewport-fluid layout (everything sized in `clamp()` or `vw`), but is tuned for desktop / projector at roughly 1280–1920 width. Two responsive breakpoints adapt the grids:\n\n- **`@media (max-width: 768px)`**: Slide padding tightens to `24px 20px`. Multi-column grids collapse: the 5-column weekly grid drops to 3, the 4-column team grid drops to 2, the 2-column info-card grid drops to 1, the horizontal process flow stacks vertically with rotated arrows, and the horizontal donut layout stacks. The right-edge nav dots hide. Decoration opacity drops to 0.6 so they don't overwhelm the cramped layout.\n- **`@media (max-width: 480px)`**: The 3-column weekly grid drops further to 2. Decoration opacity drops to 0.4.\n\n### Presenter Behavior\n- Scroll-snap-y mandatory locks each slide to the viewport on vertical scroll.\n- Keyboard: ArrowDown / ArrowRight / Space / PageDown advance; ArrowUp / ArrowLeft / PageUp reverse; Home jumps to first; End jumps to last.\n- Right-edge nav dots show current slide and accept click-to-jump.\n- A bottom-center counter pill displays `N / total` and updates via IntersectionObserver.\n\n### Print / Export\nThere is no `@media print` rule defined. Print export will inherit the scroll-container layout, which may not paginate cleanly. Treat this as a screen-first system; a separate print stylesheet would be needed for PDF export.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Fredoka One 400) | Fredoka One | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body (Quicksand 500–600) | Quicksand | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare ZCOOL XiaoWei *after* Fredoka One and Yozai *after* Quicksand in the same `font-family` stack so Latin glyphs render in the Latin face and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Fredoka+One&family=Quicksand:wght@400..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Fredoka One\", \"ZCOOL XiaoWei\", cursive;\n  --font-body: \"Quicksand\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.75 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 0.02em Fredoka tracking jams Hanzi strokes together). Keep Latin tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any badge/label when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei's rounded soft display register is the closest Hanzi analogue to Fredoka One's chubby storybook voice — it carries the same \"friendly children's-book\" mood at headline scale without becoming saccharine. Yozai's open counters and modest stroke contrast match Quicksand's humanist warmth, so body paragraphs and meta lines feel continuous with the pastel-garden aesthetic. The 3px charcoal text-shadow on headlines that sit on saturated pastel surfaces works identically on ZCOOL XiaoWei — apply `{shadows.text-headline}` to Chinese headlines on turquoise / butter / peach surfaces, and `{shadows.text-headline-soft}` on soft-pink / mint, exactly as the Latin rule prescribes. The colored bullet-dots, hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows), framed-header cap-and-body pattern, and pastel marker rotation are all content-agnostic. The single-weight constraint of Fredoka One maps cleanly to ZCOOL XiaoWei's single-weight constraint — neither face supports italic, underline, or weight axis variation, which preserves the system's \"one weight, one face per role\" discipline.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a single-weight display face with limited glyph coverage compared to Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage and a similar friendly humanist register. ZCOOL XiaoWei reads slightly more literary-formal than Fredoka One's chubby chunky personality — Chinese decks built with Daisy Days will feel ~20% more \"calm pastel\" and ~20% less \"sticker-sheet kawaii\" than the Latin original. The hand-drawn SVG ornaments (daisy, star, sun, cloud, rainbow) carry the storybook mood that the typography slightly loses, so on Chinese decks consider clustering 5–7 ornaments per slide (the upper end of the 3–7 range) to recover the playful weight.\n\n## Iteration Guide\n\n1. Any new container is rounded (20px / 28px / pill / circle), bordered in 3px charcoal, and shadowed with `{shadows.default}` or `{shadows.small}`. Never ship a flat rectangle with square corners.\n2. Any new headline is Fredoka One. If it sits on a saturated pastel surface, it gets a 3px charcoal text-shadow and switches color to `{colors.white}`. If it sits on cream or on a white card, it stays `{colors.text-dark}` and skips the shadow.\n3. Any new paragraph is Quicksand 500 by default; Quicksand 600 when the paragraph needs emphasis.\n4. Any new bullet is an outlined colored disc (`{components.bullet-dot}`), not a glyph. The default fill is butter, but circle bullets can rotate through the pastel set.\n5. Any new sequence of markers (steps, timeline nodes, day labels) rotates through the pastel set (`coral → mint → sky → lavender → butter`) rather than reusing one color.\n6. Any new slide needs 3–7 SVG decorations clustered at corners and edges. Draw from the established ornament types (daisy, star, sun, cloud, rainbow) — do not introduce a new ornament style (e.g. line-art arrows, photo cutouts).\n7. Any new accent surface picks one of the eight pastels. Do not introduce a ninth color.\n8. Coral stays a small-marker color only. Do not make a coral surface, a coral card, or a coral headline.\n9. Any list bullet sits 4px from the top of the first text line, vertically aligned with x-height, not the line baseline.\n10. When a new component needs a \"two-part frame\" feel, reach for the `{components.framed-header}` pattern (colored cap + white body) rather than nesting two separate cards.\n\n## Known Gaps\n\n- The two Google Fonts (Fredoka One, Quicksand) are loaded via `<link>` from Google Fonts CDN. Offline rendering will fall back to `cursive` and `sans-serif` system defaults, which collapses the entire typographic identity. Self-hosting the fonts is required for offline / print reliability.\n- The hand-drawn SVG decorations (daisy, star, sun, cloud, rainbow) are inline SVG with their stroke colors hardcoded to `#232323` or `#2D2D2D`. There is no programmatic way to recolor them to match a new palette — extending the decoration library requires authoring new SVG sources.\n- The system uses scroll-snap navigation (not absolute-positioned slides). It does not have a dedicated print stylesheet; PDF export of the deck will not paginate one-slide-per-page out of the box.\n- The nav-dots / slide-counter / keyboard / observer JavaScript is embedded inline and hardcodes the slide count via the `<div class=\"nav-dot\">` array. Adding a new slide requires manually adding a corresponding nav-dot div.\n- The pastel surfaces (turquoise, mint, peach) have varying perceived brightness; the text-shadow treatment for headlines must be tuned per-surface (the system already does this — full charcoal for bold surfaces, 20%-opacity charcoal for soft surfaces). New surface colors will require a similar tuning decision.\n- The `--text-muted` color (#6B6B6B) is used for subtitles and captions but has limited contrast against pastel surfaces. Reserve muted text for use on cream or on white cards, not on pastel surfaces directly.\n- The decoration SVGs include a placeholder comment string `SVG created with Arrow, by QuiverAI (https://quiver.ai)` — this is the original authoring tool credit and can be stripped without affecting rendering.\n","frontmatter":{"version":"alpha","name":"Daisy Days","description":"A cheerful, childlike presentation system built around the chunky display face Fredoka One and the rounded humanist sans Quicksand. The palette is a sunny garden — cream canvas, turquoise, soft pink, butter yellow, mint, lavender, peach, sky blue, and a single coral accent — with charcoal-brown 2D outlines wrapping every shape. Hard offset shadows in dark charcoal, generous border-radius, and hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) anchor the aesthetic somewhere between a children's storybook spread and a sticker-sheet kawaii zine.","colors":{"cream":"#F5F0E6","turquoise":"#7ECDC0","soft-pink":"#F7C8D4","butter":"#FDE68A","mint":"#A8E6CF","lavender":"#D4A5E8","peach":"#FFCBA4","sky":"#A8D8F0","coral":"#F8635F","text-dark":"#2D2D2D","text-muted":"#6B6B6B","white":"#FFFFFF"},"borders":{"primary":"3px solid {colors.text-dark}","thin":"2px solid {colors.text-dark}"},"shadows":{"default":"6px 6px 0 {colors.text-dark}","small":"4px 4px 0 {colors.text-dark}","text-headline":"3px 3px 0 {colors.text-dark}","text-headline-soft":"3px 3px 0 rgba(0,0,0,0.2)"},"typography":{"display":{"fontFamily":"'Fredoka One', cursive","fontSize":"clamp(3.2rem, 7vw, 6.5rem)","fontWeight":400,"lineHeight":1.1,"letterSpacing":"0.02em"},"headline":{"fontFamily":"'Fredoka One', cursive","fontSize":"clamp(2.5rem, 5vw, 4.5rem)","fontWeight":400,"lineHeight":1.1,"letterSpacing":"0.02em"},"title":{"fontFamily":"'Fredoka One', cursive","fontSize":"clamp(1.8rem, 3.5vw, 3rem)","fontWeight":400,"lineHeight":1.15,"letterSpacing":"0.02em"},"subtitle":{"fontFamily":"'Fredoka One', cursive","fontSize":"clamp(1.3rem, 2vw, 1.8rem)","fontWeight":400,"lineHeight":1.2,"letterSpacing":"0.02em"},"label-display":{"fontFamily":"'Fredoka One', cursive","fontSize":"clamp(1rem, 1.5vw, 1.3rem)","fontWeight":400,"lineHeight":1.3,"letterSpacing":"0.02em"},"quote":{"fontFamily":"'Fredoka One', cursive","fontSize":"clamp(1.3rem, 2.5vw, 2rem)","fontWeight":400,"lineHeight":1.35},"body":{"fontFamily":"'Quicksand', sans-serif","fontSize":"clamp(0.95rem, 1.3vw, 1.15rem)","fontWeight":500,"lineHeight":1.6},"body-strong":{"fontFamily":"'Quicksand', sans-serif","fontSize":"clamp(0.95rem, 1.4vw, 1.15rem)","fontWeight":600,"lineHeight":1.5},"meta":{"fontFamily":"'Quicksand', sans-serif","fontSize":"clamp(0.8rem, 1.1vw, 0.95rem)","fontWeight":600,"lineHeight":1.45},"badge":{"fontFamily":"'Fredoka One', cursive","fontSize":"0.85rem","fontWeight":400,"letterSpacing":"0.02em"}},"spacing":{"pad-slide":"40px 60px","pad-card-lg":"48px 56px","pad-card-md":"32px 40px","pad-card-sm":"16px 24px","gap-grid-lg":"28px","gap-grid-md":"24px","gap-grid-sm":"14px","radius":"20px","radius-lg":"28px","radius-pill":"50px","radius-round":"50%"},"canvas":{"width":"100vw","height":"100vh"},"components":{"card":{"background":"{colors.white}","border":"3px solid {colors.text-dark}","borderRadius":"{spacing.radius}","boxShadow":"{shadows.default}"},"card-lg":{"background":"{colors.white}","border":"3px solid {colors.text-dark}","borderRadius":"{spacing.radius-lg}","boxShadow":"{shadows.default}"},"badge-pill":{"display":"inline-block","padding":"8px 20px","borderRadius":"{spacing.radius-pill}","border":"3px solid {colors.text-dark}","fontFamily":"'Fredoka One', cursive","fontSize":"0.85rem","background":"{colors.butter}"},"framed-header":{"description":"A two-part stacked card: a colored header strip (any accent surface) with rounded top corners and no bottom border, sitting flush above a white body with rounded bottom corners. The pair reads as a single unit with a tonal cap.","headerBackground":"any accent surface","headerBorderRadius":"{spacing.radius-lg} {spacing.radius-lg} 0 0","bodyBackground":"{colors.white}","bodyBorderRadius":"0 0 {spacing.radius-lg} {spacing.radius-lg}","border":"3px solid {colors.text-dark}","boxShadow":"{shadows.default}"},"circle-dot":{"width":"48px","height":"48px","borderRadius":"{spacing.radius-round}","border":"3px solid {colors.text-dark}","fontFamily":"'Fredoka One', cursive","color":"{colors.white}","description":"Outlined colored disc holding a numeral or single letter. Used as timeline node, step marker, or list bullet anchor."},"circle-icon":{"width":"44px","height":"44px","borderRadius":"{spacing.radius-round}","border":"3px solid {colors.text-dark}","fontFamily":"'Fredoka One', cursive","background":"any accent surface","description":"Smaller cousin of circle-dot used as a card icon at the top of an info card."},"step-circle-lg":{"width":"90px","height":"90px","borderRadius":"{spacing.radius-round}","border":"3px solid {colors.text-dark}","fontFamily":"'Fredoka One', cursive","color":"{colors.white}","boxShadow":"{shadows.small}","description":"Oversized outlined disc used as a process step marker. Carries a hard offset shadow."},"avatar-circle":{"width":"100px","height":"100px","borderRadius":"{spacing.radius-round}","border":"3px solid {colors.text-dark}","background":"{colors.white}","boxShadow":"{shadows.small}","overflow":"hidden"},"bullet-dot":{"width":"20px","height":"20px","borderRadius":"{spacing.radius-round}","border":"2px solid {colors.text-dark}","background":"{colors.butter}","description":"Small outlined disc used as a ::before bullet for body list items, anchored 4px from the top of the line."},"list-dash":{"description":"A simple muted-text dash character used as a ::before bullet for compact in-card lists (day-card body)."},"legend-swatch":{"width":"18px","height":"18px","border":"2px solid {colors.text-dark}","borderRadius":"4px"},"decoration":{"position":"absolute","pointerEvents":"none","zIndex":1,"description":"Hand-drawn SVG sticker (daisy, star, sun, cloud, rainbow) placed at slide corners and edges as atmospheric ornament. Often crops past the slide edge."},"nav-dots":{"position":"fixed","placement":"right edge, vertically centered","dotSize":"12px","dotBorder":"2px solid {colors.text-dark}","activeBackground":"{colors.butter}","activeTransform":"scale(1.2)"},"slide-counter":{"position":"fixed","placement":"bottom center","background":"{colors.white}","border":"3px solid {colors.text-dark}","borderRadius":"{spacing.radius-pill}","padding":"6px 20px","fontFamily":"'Fredoka One', cursive","boxShadow":"{shadows.small}"},"chart-container":{"background":"{colors.white}","border":"3px solid {colors.text-dark}","borderRadius":"{spacing.radius-lg}","boxShadow":"{shadows.default}","padding":"{spacing.pad-card-md}"}}},"isInternal":false,"tokens":9895,"sizeBytes":39796},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/preview.md","title":"Daisy-days Skill","category":"anthropic-skill","format":"markdown","content":"# Daisy Days Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/daisy-days/design.md`\n- Preview card: `bold-template-pack/templates/daisy-days/preview.md`\n\n## Selection Metadata\n\n- Slug: `daisy-days`\n- Tagline: Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm.\n- Mood: cheerful, playful, warm, sunny, wholesome\n- Tone: friendly, soft, encouraging, approachable, lighthearted\n- Formality: low\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration. Also lovely for an unexpected playful internal kickoff, a wedding planning deck, or any moment where warmth is the message — including across tech or business contexts.\n- Avoid for: Contexts where the audience explicitly expects authority and precision — the hand-drawn pastel SVG decorations are the opposite of buttoned-up.\n\n## Visual Snapshot\n\nA cheerful, childlike presentation system built around the chunky display face Fredoka One and the rounded humanist sans Quicksand. The palette is a sunny garden — cream canvas, turquoise, soft pink, butter yellow, mint, lavender, peach, sky blue, and a single coral accent — with charcoal-brown 2D outlines wrapping every shape. Hard offset shadows in dark charcoal, generous border-radius, and hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) anchor the aesthetic somewhere between a children's storybook spread and a sticker-sheet kawaii zine.\n\nDaisy Days is a cheerful childlike presentation system rooted in a single typographic pairing: the chubby rounded display face Fredoka One for every headline, and the friendly humanist sans Quicksand for every line of body and meta text. The visual language descends from picture-book illustration and sticker-sheet kawaii: every shape carries a charcoal 2D outline, every elevated element casts a solid offset shadow, and every surface is a pastel from a sunny garden palette.\n\n## Preview Ingredients\n\n- Palette: cream #F5F0E6; turquoise #7ECDC0; soft-pink #F7C8D4; butter #FDE68A; mint #A8E6CF; lavender #D4A5E8; peach #FFCBA4; sky #A8D8F0\n- Typography: See full design doc after selection.\n- Signature move: Cream ({colors.cream}) default canvas with rotating pastel surfaces — every slide may pick a different surface color.\n- Signature move: Fredoka One for all headline / display / quote text; Quicksand 500/600 for all body and meta text.\n- Signature move: Every shape and card carries a 3px solid charcoal outline ({colors.text-dark}) plus a hard offset shadow ({shadows.default} or {shadows.small}).\n- Signature move: Generous border-radius: 20px on standard cards, 28px on featured cards, pill ({spacing.radius-pill}) on badges, full circle on dots and avatars.\n- Signature move: Hand-drawn SVG ornaments (daisies, stars, suns, clouds, rainbows) cluster at corners and crop past slide edges as atmospheric layer.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1051,"sizeBytes":4638},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/design.md","title":"Editorial Forest","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Editorial Forest\ndescription: A serif-led editorial presentation system in the register of a literary quarterly or art-book monograph. Display type runs in Source Serif 4 at weight 500 with optical-size axis engaged, scaling up to 220px for cover and stat moments. The palette pairs a deep forest green (#2e4a2a) with a dusty rose pink (#e89cb1) over an oat-cream paper ground (#efe7d4), with JetBrains Mono as the editorial chrome (labels, captions, axis ticks). The aesthetic is closer to a Penguin classic, Apartamento spread, or quiet annual report than a tech keynote — confident, paper-feeling, and committed to a small color vocabulary.\n\ncolors:\n  green: \"#2e4a2a\"\n  green-deep: \"#243a21\"\n  green-lite: \"#3a5a36\"\n  pink: \"#e89cb1\"\n  pink-deep: \"#d27e96\"\n  cream: \"#efe7d4\"\n  cream-2: \"#e6dcc4\"\n  ink: \"#1a1a17\"\n\ntypography:\n  display-hero:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 220\n    fontWeight: 500\n    lineHeight: 0.92\n    letterSpacing: -0.02em\n  display:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 140\n    fontWeight: 500\n    lineHeight: 1.02\n    letterSpacing: -0.02em\n  headline-xl:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 96\n    fontWeight: 500\n    lineHeight: 0.96\n    letterSpacing: -0.02em\n  headline:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 84\n    fontWeight: 500\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  headline-sm:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 80\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.02em\n  title-card-lg:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 84\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.01em\n  title-card:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 68\n    fontWeight: 500\n    lineHeight: 0.96\n    letterSpacing: -0.01em\n  title-card-sm:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 56\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.01em\n  figure-caption-serif:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 56\n    fontWeight: 500\n    lineHeight: 1.05\n  name:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 44\n    fontWeight: 600\n    lineHeight: 1.0\n  meta-value:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 32\n    fontWeight: 500\n  body-lg:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 32\n    fontWeight: 400\n    lineHeight: 1.32\n  body:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 30\n    fontWeight: 400\n    lineHeight: 1.38\n  body-card:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 26\n    fontWeight: 400\n    lineHeight: 1.34\n  label:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-tight:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  caption-mono:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 24\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  axis-mono:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.08em\n  stat-figure:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 220\n    fontWeight: 500\n    lineHeight: 0.92\n    letterSpacing: -0.03em\n  stat-figure-unit:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 110\n    fontWeight: 500\n    lineHeight: 0.92\n\nspacing:\n  slide-pad-default: \"96px 120px\"\n  slide-pad-narrow: \"100px 120px\"\n  slide-pad-wide: \"100px 140px\"\n  slide-pad-statement: \"130px 160px\"\n  grid-gap-cards: 28\n  grid-gap-topics: 24\n  grid-gap-kpi: 60\n  rule-weight: \"2px\"\n  rule-weight-card: \"2.5px\"\n  radius-card: \"6px\"\n  radius-card-step: \"8px\"\n  radius-bar-top: \"3px 3px 0 0\"\n  radius-mark-circle: \"50%\"\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  topic-tile:\n    description: \"Bordered or filled rectangular region holding a mono ordinal, a serif title, optional body, and a mono foot. Background may be green / green-lite / pink / cream-2-with-green-border. Corner radius 6px.\"\n    borderRadius: \"{spacing.radius-card}\"\n    padding: \"40px 40px 36px\"\n  step-tile:\n    description: \"Vertical card carrying a mono ordinal, a serif title, body paragraph, and a mono marker row separated by a top rule. Background fills: cream-with-green-border, solid green, or solid pink.\"\n    borderRadius: \"{spacing.radius-card-step}\"\n    padding: \"40px 32px 32px\"\n    minHeight: \"470px\"\n    border: \"2.5px solid currentColor-region\"\n  monogram-circle:\n    width: \"130px\"\n    height: \"130px\"\n    borderRadius: \"{spacing.radius-mark-circle}\"\n    border: \"2px solid {colors.pink}\"\n    fontFamily: \"JetBrains Mono\"\n    fontSize: 28\n    letterSpacing: 0.1em\n    fontWeight: 500\n    description: \"Outlined round mark holding a short mono monogram. The system's signature identity stamp.\"\n  topbar:\n    placement: \"top edge of slide\"\n    layout: \"flex space-between, baseline-aligned\"\n    content: \"{components.label} on the left, monogram-circle or counter on the right\"\n  footline:\n    position: \"absolute\"\n    placement: \"bottom edge of slide, full-width between slide padding\"\n    layout: \"flex space-between\"\n    typography: \"{typography.caption-mono}\"\n  meta-dl:\n    description: \"Three-column definition list separated by a top rule (2px {colors.green}). Each entry has a mono dt label and a serif dd value.\"\n    columns: 3\n    gap: \"36px\"\n    topBorder: \"2px solid {colors.green}\"\n  bar:\n    width: \"56px\"\n    borderRadius: \"{spacing.radius-bar-top}\"\n    description: \"Vertical chart bar in pink, cream, or green. Value label printed above bar in mono.\"\n  chart-axis:\n    border: \"2px solid currentColor\"\n    description: \"Y-axis and x-axis use a single 2px rule on the inner edges of the plot region; no full axis box.\"\n  rule-thin:\n    description: \"Hairline 2px rule, used as section separator above kpi rows, summary grids, meta dls. Color follows region (green on cream, pink on green).\"\n  legend-swatch:\n    display: \"inline-block\"\n    width: \"26px\"\n    height: \"26px\"\n    borderRadius: \"2px\"\n    description: \"Small filled square preceding a mono legend label. 2px corner radius is the smallest radius in the system.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nEditorial Forest is a **serif-led editorial presentation system** in the tonal register of a Penguin classic, a quiet annual report, or an art-book spread. The system's foundational premise is a single, confident typographic voice — Source Serif 4 — used at extreme scale (up to 220px) for headlines and stat figures, with JetBrains Mono playing the supporting role of editorial chrome (labels, captions, axis ticks, page footlines).\n\nThe serif is run at **weight 500** for nearly every display moment — never the more familiar 400 or 700. The 500 weight is the system's most distinctive typographic choice: heavy enough to feel authored, light enough to keep the page calm. Optical-size axis is engaged (`opsz` 8..60), which means the same Source Serif 4 face renders with subtly different letterforms at 26px caption sizes versus 220px display sizes — the small sizes pick up extra contrast and finer details automatically. JetBrains Mono runs at 500 in uppercase with 0.14em–0.18em letter-spacing, used for every label, tag, caption, axis tick, and footer line. The system never mixes a third typeface.\n\nThe palette is a tight five-color editorial set built around three primary surfaces: a **deep forest green** (`{colors.green}` — #2e4a2a), a **dusty rose pink** (`{colors.pink}` — #e89cb1), and an **oat cream paper** (`{colors.cream}` — #efe7d4). Two near-duplicates round out the set: `{colors.green-deep}` for green-on-pink text contrast, `{colors.green-lite}` for tile fills that need a second green shade, `{colors.pink-deep}` for pink-on-pink borders, and `{colors.cream-2}` for tiles that sit on the main cream surface. Body text everywhere is `{colors.ink}` (#1a1a17) — a warm near-black — except when sat on a green or pink surface, where it switches to the surface's complementary color (cream or pink on green; green-deep or cream on pink).\n\nDepth is **flat and paper-based**. There are no drop shadows, no glows, no gradients, no overlays. Elevation is communicated entirely through color-block contrast, 2px hairline rules, and the difference between a filled region and a bordered region. The 6px and 8px card radii are the only roundness in the system besides the monogram circle. The page feels printed, not glassy.\n\n**Density philosophy: spacious and committed.** Each slide carries one strong subject — a headline, a quote, a chart, a stat row, a card grid — surrounded by deep negative space. The slide padding of 96–140px is generous; the top of the slide carries a mono topbar (label + monogram or counter), the bottom carries a mono footline, and the middle holds the main subject at scale. A slide that crams two competing content blocks reads as broken; a slide with one display headline + supporting cards + breathing room reads as authoritative. Reach for fewer elements at larger sizes rather than more elements at smaller sizes.\n\n**Key Characteristics:**\n- Three-color editorial palette: deep forest green, dusty rose pink, oat cream paper. Two surface tones per slide is typical; three is loud.\n- Source Serif 4 at weight 500 for every headline, body, and display moment. Optical-size axis engaged for size-aware letterforms.\n- JetBrains Mono at weight 500 uppercase with wide tracking (0.14em–0.18em) for every label, caption, axis tick, and footline.\n- Display type scales to 220px for cover and stat-figure moments; 96px for primary headlines; 56–84px for card titles.\n- 2px hairline rules separate stacked sections — never thicker, never colored beyond region context.\n- Card radius is 6px for topic tiles and 8px for step tiles. The monogram circle is the only fully round shape.\n- Every slide carries a topbar (label + monogram or counter) and most carry a footline (mono caption row). The chrome anchors the editorial feel.\n- No shadows, no gradients, no glows. Elevation is color-block + rule.\n\n## Colors\n\n### Palette\n- **Green** (`{colors.green}` — #2e4a2a): The deep forest primary. Used as a slide surface, a tile fill, a card border, a meta-dl rule color, and a primary text color on cream surfaces. The most distinctive surface in the system.\n- **Green Deep** (`{colors.green-deep}` — #243a21): A darker green used almost exclusively as text color on pink surfaces, where pure green would lack contrast. Also used as text color on pink tiles.\n- **Green Lite** (`{colors.green-lite}` — #3a5a36): A lighter green used as a tile fill when two greens need to sit beside each other (e.g., a primary green tile next to a secondary green-lite tile in the same grid). Carries pink text.\n- **Pink** (`{colors.pink}` — #e89cb1): A dusty rose. Used as a slide surface, a tile fill, the on-green text color, a bar-chart series color, and the monogram circle border color. The system's primary accent.\n- **Pink Deep** (`{colors.pink-deep}` — #d27e96): A slightly darker rose used only as a border color on pink-filled tiles where the same-color border needs to differentiate from the fill.\n- **Cream** (`{colors.cream}` — #efe7d4): The oat paper surface. The default slide background on non-cover slides, the on-green body text color, and the cream bar-chart series color.\n- **Cream 2** (`{colors.cream-2}` — #e6dcc4): A subtly darker cream used as a tile fill on the cream slide surface. Pairs with a 2px green border so the tile reads as distinct from the slide ground.\n- **Ink** (`{colors.ink}` — #1a1a17): The body text color on cream surfaces. A warm near-black; never pure #000.\n\n### Defaults\n- **Default slide background**: `{colors.cream}` for content-heavy slides; `{colors.green}` for cover, statement-data, summary, and any moment that needs gravity.\n- **Default headline color on `{colors.cream}` surface**: `{colors.green}`.\n- **Default headline color on `{colors.green}` surface**: `{colors.cream}` for primary headlines, `{colors.pink}` for hero / cover-scale headlines.\n- **Default headline color on `{colors.pink}` surface**: `{colors.green-deep}`.\n- **Default body color on `{colors.cream}` surface**: `{colors.ink}`.\n- **Default body color on `{colors.green}` surface**: `{colors.cream}`.\n- **Default body color on `{colors.pink}` surface**: `{colors.green-deep}`.\n- **Default label / caption color**: matches the region's accent (label is pink on green, green on cream, green-deep on pink).\n- **Default tile fill on a cream slide**: choose from the rotation — solid green (with pink text), solid pink (with green-deep text), green-lite (with pink text), or cream-2 with a 2px green border (with green text). A single grid typically mixes 3 of these 4.\n- **Default rule color**: green on cream, pink on green, green-deep on pink. The 2px hairline always picks up the region's accent.\n\nThe palette is intentionally tight. Introducing a fourth chromatic family (a yellow, a blue, an additional rose) breaks the editorial discipline. Stick to the green / pink / cream triad and let the contrast between filled and bordered tiles do the variation work.\n\n## Typography\n\n### Font Family\nThe system loads exactly two web fonts: **Source Serif 4** (with the full optical-size axis 8..60 and weights 300–800) and **JetBrains Mono** (weights 400, 500, 700). Source Serif 4 carries every editorial moment — headlines, body, captions in serif, names, figures. JetBrains Mono carries every piece of chrome — labels, taglines, axis ticks, footlines, ordinals on tiles.\n\nThe mono / serif pairing is the system's typographic identity. Mono never tries to be the headline; serif never tries to be the caption. The roles are inverted from a typical \"sans for chrome, serif for body\" stack — here it's \"mono for chrome, serif for body and display.\"\n\nSource Serif 4 is run at **weight 500** for nearly every moment. Weight 400 appears only for body paragraphs (where the lighter weight reads better at small scale). Weight 600 appears once, for the attribution name on the statement slide — its slightly heavier set distinguishes a proper name from surrounding mono labels. Weight 700 is not used.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-hero}` | 220px | Source Serif 4 | 500 | Cover-scale or closing-scale headline |\n| `{typography.display}` | 140px | Source Serif 4 | 500 | Pull-quote / big-idea statement |\n| `{typography.headline-xl}` | 96px | Source Serif 4 | 500 | Primary section headline on cream |\n| `{typography.headline}` | 84px | Source Serif 4 | 500 | Primary section headline on green |\n| `{typography.headline-sm}` | 80px | Source Serif 4 | 500 | Stat-row introductory headline |\n| `{typography.title-card-lg}` | 84px | Source Serif 4 | 500 | Title inside a hero topic tile (largest tile in a grid) |\n| `{typography.title-card}` | 68px | Source Serif 4 | 500 | Title inside a step tile |\n| `{typography.title-card-sm}` | 56px | Source Serif 4 | 500 | Title inside a standard topic tile |\n| `{typography.figure-caption-serif}` | 56px | Source Serif 4 | 500 | Centered figure / image-placeholder caption |\n| `{typography.stat-figure}` | 220px | Source Serif 4 | 500 | KPI numeral |\n| `{typography.stat-figure-unit}` | 110px | Source Serif 4 | 500 | Unit suffix on a KPI numeral (e.g. \"%\") |\n| `{typography.name}` | 44px | Source Serif 4 | 600 | Personal name in an attribution row |\n| `{typography.meta-value}` | 32px | Source Serif 4 | 500 | Definition-list value in a meta row |\n| `{typography.body-lg}` | 32px | Source Serif 4 | 400 | Primary body paragraph in a summary or stat description |\n| `{typography.body}` | 30px | Source Serif 4 | 400 | Standard body paragraph |\n| `{typography.body-card}` | 26px | Source Serif 4 | 400 | Body inside a card or tile |\n| `{typography.label}` | 26px | JetBrains Mono | 500 / 0.18em | Eyebrow or section label in topbar |\n| `{typography.label-tight}` | 26px | JetBrains Mono | 500 / 0.14em | Caption row, foot line, attribution row, tile ordinal |\n| `{typography.caption-mono}` | 24px | JetBrains Mono | 500 / 0.12–0.16em | Tile foot, tile marker, kpi tag, meta-dl term |\n| `{typography.axis-mono}` | 26px | JetBrains Mono | 500 / 0.08em | Chart axis ticks and labels |\n\n### Defaults\n- **Default size for a primary section headline**: `{typography.headline-xl}` (96px) on cream surfaces, `{typography.headline}` (84px) on green surfaces.\n- **Default size for a cover-scale or closing-scale moment**: `{typography.display-hero}` (220px).\n- **Default size for a quote / big-idea statement**: `{typography.display}` (140px).\n- **Default size for a body paragraph**: `{typography.body}` (30px) in serif weight 400.\n- **Default size for a body paragraph inside a card / tile**: `{typography.body-card}` (26px).\n- **Default size for a meta dt label or tile ordinal**: `{typography.caption-mono}` (24px) in JetBrains Mono uppercase.\n- **Default size for a topbar label / eyebrow**: `{typography.label}` (26px) in JetBrains Mono uppercase with 0.18em tracking.\n- **Default weight for any serif moment**: 500. (400 is reserved for body paragraphs; 600 only for a proper name in attribution.)\n- **Default weight for any mono moment**: 500.\n\nWhen unsure, reach for `{typography.headline-xl}` (96px) for the slide's primary headline on cream, not the larger display sizes. The 140–220px tier is reserved for statement, stat-figure, and hero/closing moments — using it for routine headlines flattens the system's hierarchy.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every JetBrains Mono element is UPPERCASE with letter-spacing of at least 0.08em.** Mono in sentence case or without tracking reads as code, not editorial chrome. The wide tracking is what makes mono feel like a caption row in a magazine, not a terminal.\n- **Every Source Serif 4 display element uses negative letter-spacing (-0.01em to -0.03em).** Tighter tracking pulls the large serif glyphs into a single mass and is essential for the 96–220px sizes. Display serif at default tracking reads loose and untreated.\n- **Display headlines use line-height between 0.92 and 1.02.** Tight line-height is part of the system's display voice. Larger headlines run tighter (0.92 at 220px); smaller headlines (84–96px) run at 0.96–1.0.\n- **Body paragraphs use serif weight 400, not 500.** The weight drop from headline to body is the system's reading rhythm. Body at 500 reads heavy.\n- **Every slide carries a topbar (mono label + monogram or counter on the opposite edge).** The topbar is the system's universal chrome anchor.\n- **Hairline rules between sections are always 2px solid.** Never 1px (reads as web app), never 3px+ (reads as poster).\n\n### Typography Principles\nThe weight 500 + optical-size + tight tracking combination is the system's display voice — switching any of those three properties (e.g., serif weight 700, or default tracking, or no opsz) reads as a different design system. The serif/mono role split is strict: mono never appears at headline scale, serif never appears at axis-tick scale.\n\nItalics are not used anywhere in the system. Underline is not used. Emphasis is communicated through size and color contrast, not type variants.\n\n## Layout\n\n### Canvas System\nThe system targets a fixed **1920×1080** canvas. Slides are `<section>` elements at exact width/height; rendering relies on `deck-stage.js` to scale the canvas to fit the viewport. The canvas is paper, not a viewport — designed for projector, printer, or PDF export.\n\n### Slide Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.slide-pad-default}` | 96px 120px | Standard slide padding |\n| `{spacing.slide-pad-narrow}` | 100px 120px | Data, framework, stats slides — slightly taller top padding |\n| `{spacing.slide-pad-wide}` | 100px 140px | Cover, summary slides — extra side padding for hero headlines |\n| `{spacing.slide-pad-statement}` | 130px 160px | Statement slide — most generous padding for the display-quote moment |\n\nPick the padding that matches the content gravity. Statement-class moments get the widest padding; everyday content slides use the default 96×120.\n\n### Chrome Anatomy\nEvery slide carries (at minimum) a **topbar** at the top edge — a flex-row with a JetBrains Mono `{typography.label}` on one side and either a `{components.monogram-circle}` or a mono counter / location string on the other. Heavier slides (cover, data, summary) also carry a **footline** absolutely positioned at `bottom: 60–80px` with a mono caption row spanning the slide width between the padding.\n\nThe topbar is the system's spine. Without it, a slide reads as untreated.\n\n### Card Radii\n| Value | Use |\n|---|---|\n| 2px | Legend swatch only (smallest radius in the system) |\n| 3px 3px 0 0 | Top corners of bar-chart bars |\n| 6px | Topic tile (agenda-style grid) |\n| 8px | Step tile (framework-style grid) |\n| 50% | Monogram circle |\n\nCards are subtly rounded — never sharp-cornered, never heavily-rounded. The 6–8px radius gives the system its paper-not-plastic feel.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThere are **no shadows in this system**. Not on cards, not on tiles, not on text, not on the monogram circle. Elevation is communicated entirely through:\n\n1. **Color-block contrast** — a green tile on a cream slide reads as elevated because the dark green block separates from the paper ground.\n2. **2px hairline rules** — section separators (above kpi rows, summary grids, meta dls) sit on a 2px line in the region's accent color.\n3. **Border vs fill** — a cream-2 tile with a 2px green border reads as a different elevation than a solid-fill tile beside it.\n\nThe absence of shadow is itself the elevation language. Adding `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` would shatter the editorial feel.\n\n### Paper-Surface Rule\nEvery surface in the system reads as paper, not as a digital pane. The cream tones (`{colors.cream}`, `{colors.cream-2}`) carry that quality literally. The green and pink surfaces inherit it by association — used at full saturation, surrounded by cream chrome, never with shadow or glow, they read as printed ink on stock.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **2px solid** — the universal hairline. Section separator rules above kpi rows / summary grids / meta dls / chart axes; the border on cream-2 tiles; the border on the monogram circle.\n- **2.5px solid** — step-tile borders. Slightly heavier so the tile reads as a separate object from a hairline rule.\n\nBorders take the region's accent color (`{colors.green}` on cream, `{colors.pink}` on green, `{colors.green-deep}` or `{colors.pink-deep}` on pink).\n\n### Decorative Element Types\n\n**Monogram Circle** (`{components.monogram-circle}`) — A 130px outlined circle with a 2px pink border, holding a 2–3-character JetBrains Mono monogram at 28px. Lives in the top-right of cover and summary slides. The system's identity stamp.\n\n**Topbar** (`{components.topbar}`) — A flex row spanning the top of every slide. A JetBrains Mono label on one side, a monogram or counter or location string on the other. The topbar establishes which surface family the slide belongs to (label color tells you).\n\n**Footline** (`{components.footline}`) — An absolutely positioned flex row at `bottom: 60–80px` spanning the slide between padding. Two mono caption strings (e.g., a section name on the left, a page number on the right). Used on cover, data, summary, and any slide that wants to feel like a printed page.\n\n**Topic Tile** (`{components.topic-tile}`) — A 6px-radius rectangular region holding a mono ordinal, a serif title, optional body, and a mono foot string. Background fills rotate through green, green-lite, pink, or cream-2-with-green-border. A grid of these tiles is the agenda / table-of-contents pattern.\n\n**Step Tile** (`{components.step-tile}`) — An 8px-radius vertical card with 2.5px border, holding a mono ordinal, a serif title (68px), a body paragraph, and a mono marker row separated by a top rule. Background fills: cream-with-green-border, solid green, or solid pink. A row of 3–4 step tiles is the framework / process pattern.\n\n**KPI Block** — A vertical stack: mono tag (24px) on top, oversized serif figure (220px) with optional 110px unit, then a serif description paragraph (30px). Sits inside a row separated above by a 2px pink rule on green surfaces.\n\n**Bar (chart)** — A 56px-wide rectangle with top corners rounded at 3px, filled in pink, cream, or green. The value label is mono 24px, absolutely positioned 38px above the bar.\n\n**Meta Definition List** (`{components.meta-dl}`) — A three-column dt/dd grid with a 2px top border. The dt is mono 24px uppercase tracked, the dd is serif 32px weight 500. Used as a credits / specs / details row at the bottom of a two-column slide.\n\n**Legend Row** — A horizontal flex of mono uppercase items, each preceded by a 26×26px filled swatch with 2px corner radius. Used in chart and data contexts.\n\n## Do's and Don'ts\n\n### Do\n- Run every display headline in Source Serif 4 at weight 500 with negative letter-spacing (-0.01em to -0.03em) and tight line-height (0.92–1.0). The combination is the system's voice.\n- Run every label, caption, tag, axis tick, and footline in JetBrains Mono at weight 500 uppercase with 0.08em–0.18em letter-spacing.\n- Place a topbar (mono label + monogram or counter) on every slide. The topbar is the system's spine.\n- Pick a single dominant surface per slide (green, pink, or cream) and let it carry the whole canvas. Two surface colors per slide is the maximum.\n- Pair tile fills in a grid: rotate through green + pink + green-lite + cream-2-with-green-border rather than reusing one fill across all tiles.\n- Use 2px solid hairline rules to separate stacked sections (kpi rows, summary grids, meta dls). The hairline is the system's separator language.\n- Scale display type aggressively when content allows — 140–220px for statement, hero, and closing moments. The system rewards bigness when there's room.\n- Use generous slide padding (96–160px). Negative space is part of the editorial register; cramped padding reads as broken.\n- Reserve the monogram circle for cover and summary moments. Using it on every slide dilutes its function as an identity stamp.\n\n### Don't\n- Don't add box-shadow to any element. The system is shadow-free; adding shadow shatters the paper feel.\n- Don't introduce a third typeface. Only Source Serif 4 and JetBrains Mono. No Inter, no system stack.\n- Don't run serif text in italic or underline. Emphasis is size and color, not type variant.\n- Don't render JetBrains Mono in sentence case or without letter-spacing. Mono without uppercase + tracking reads as code, not chrome.\n- Don't introduce a fourth chromatic family (yellow, blue, lavender). The green / pink / cream triad is the entire palette.\n- Don't use heavy borders (4px+) or thin hairlines (1px). The system has 2px and 2.5px — pick one.\n- Don't pile two competing content blocks on one slide. One subject per slide; expand or split.\n- Don't use rgba transparency for surface colors. Each surface is solid ink-on-paper.\n- Don't run serif body text at weight 500 — it reads heavy. Body is weight 400; display is weight 500.\n- Don't omit the topbar. A slide without the mono label at the top loses its editorial spine.\n\n## Responsive Behavior\n\nThis is a **fixed 1920×1080 presentation system** rendered through `deck-stage.js`. The canvas is not responsive in the web sense — there are no media queries, no breakpoints, no fluid sizing. Every measurement is in fixed pixels at 1920×1080.\n\n### Scaling Behavior\nThe `deck-stage.js` script wraps each `<section>` and scales the 1920×1080 canvas uniformly to fit the browser viewport, letterboxing as needed. Type, padding, gaps, and rule weights are all in pixels and scale proportionally with the canvas. Borders that read as 2px at 1920px will read as 1px at 960px viewport width — this is acceptable inside the system's tolerance.\n\n### Presenter Behavior\nNavigation is delegated to whatever wrapper `deck-stage.js` provides — there is no inline keyboard handler. Treat each `<section>` as a slide; the runtime handles transitions.\n\n### Print / Export\nBecause every measurement is fixed-pixel inside a 1920×1080 canvas, the system exports cleanly to PDF at the same aspect ratio (16:9). Source Serif 4 with the optical-size axis renders well at print resolution because the small-sized variants pick up the print-appropriate letterform detail automatically.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display headline (220 / 140 / 96 / 84px) | 霞鹜文楷 LXGW WenKai (Noto Serif SC fallback) | 400 | Literary, handwritten-ish brushwork; matches the Penguin-classic register of Source Serif 4 |\n| Body paragraph (26 / 30 / 32px) | 思源宋体 Noto Serif SC | 400 | Reads as the printed body voice of a literary quarterly |\n| Stat figure (220px) | 思源宋体 Noto Serif SC | 700 | Mincho weight 700 gives the numeric mass that Source Serif 4 weight 500 provides in Latin |\n| Mono label / caption / footline (24–26px) | 思源等宽 Noto Sans Mono CJK SC | 500 | JetBrains Mono has no CJK glyphs; Noto Sans Mono CJK SC preserves the typewriter-chrome quality |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Source Serif 4 as the Latin face and fall back to LXGW WenKai (for headlines / display) or Noto Serif SC (for body / stats) for CJK glyphs. This is the right call for Editorial Forest because the Source Serif 4 optical-size axis is a signature of the system; replacing it wholesale with a Mincho would flatten the Penguin-classic register that defines the deck. The font-family stack puts the Latin face first, then the CJK fallback, then the generic serif:\n\n```css\nfont-family: 'Source Serif 4', 'Source Serif Pro', 'LXGW WenKai TC', 'Noto Serif SC', Georgia, serif;\n```\n\nBrowsers per-glyph fall back: Latin characters render in Source Serif 4 at weight 500 with opsz engaged, Chinese characters render in LXGW WenKai (display) or Noto Serif SC (body). The baseline mismatch at display sizes (96–220px) is the main thing to watch — LXGW WenKai sits slightly higher than Source Serif 4 in optical baseline, so a mixed-script line like \"Designed in 北京\" may show a 1–2px vertical wobble. Acceptable for slide content; for printed export, prefer all-CJK or all-Latin lines.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>` (or as a second link tag):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=LXGW+WenKai+TC&family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\nLXGW WenKai TC is the version served on Google Fonts (the Simplified-Chinese build `LXGW+WenKai+SC` is not yet on the Google CDN — TC ships both traditional and simplified glyphs and works for both).\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.92–1.0 on display, 1.32–1.38 on body) read as cramped in Chinese. Bump display to 1.0–1.1 and body to 1.5–1.6.\n- **Remove negative letter-spacing on CJK headlines.** Source Serif 4 display uses -0.01em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Latin portion was meant to be capitalized.\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between LXGW WenKai and Noto Serif SC inside the same sentence — pick the face that matches the size tier (display = LXGW WenKai, body = Noto Serif SC) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nEditorial Forest's whole voice is \"Penguin classic / quiet annual report\" — a serif at weight 500 with the optical-size axis doing the size-aware letterform work. The Chinese equivalent of that register is **LXGW WenKai for display moments** (it has the same hand-set, slightly informal warmth as Source Serif 4 at 500) and **Noto Serif SC at 400 for body** (the calm Mincho voice that reads like a literary journal). Avoid Noto Sans SC for body — the sans face flips the system into \"tech report\" rather than \"monograph spread.\"\n\nThe system's mono / serif role split (JetBrains Mono for chrome, Source Serif 4 for everything else) maps cleanly onto Chinese. Use Noto Sans Mono CJK SC for the topbar label, footline strings, tile ordinals, and axis ticks — keep them uppercase-equivalent (i.e., 0.14em–0.18em letter-spacing on Latin labels, and for Chinese, the Mono CJK face at 500 weight provides the same chrome quality). Do not run Chinese labels in LXGW WenKai or Noto Serif SC; the editorial chrome would lose its typewriter feel.\n\n### Known CJK Gap\n\nLXGW WenKai's brushwork warmth is its strength at large display sizes, but at body scale (26–32px) the same brushwork reads slightly noisy. The system bumps body to Noto Serif SC (a cleaner Mincho) to avoid this, but the visual handoff between a 96px LXGW WenKai headline and a 30px Noto Serif SC paragraph below it is the system's biggest CJK seam — the two faces have different stroke contrast profiles. If the seam reads loud, use Noto Serif SC for both display and body (sacrifices warmth for consistency), or use LXGW WenKai for both (sacrifices body legibility for consistency). The default split is the right trade-off for most decks, but worth a manual check on cover and statement slides.\n\n## Iteration Guide\n\n1. Any new headline is Source Serif 4 weight 500 with negative letter-spacing. Pick the size from the display ladder (220 / 140 / 96 / 84 / 80 / 68 / 56) — do not invent a new size.\n2. Any new label, caption, or tag is JetBrains Mono weight 500 uppercase with 0.08em–0.18em letter-spacing. Pick the size from the mono ladder (26 / 24).\n3. Any new slide carries a topbar at the top. The mono label color follows the surface (pink-on-green, green-on-cream, green-deep-on-pink).\n4. Any new card uses 6px (topic tile) or 8px (step tile) radius. The monogram circle is the only fully round shape; do not introduce a fourth radius.\n5. Any new section separator is a 2px hairline rule in the region's accent color. No 1px rules, no 3px rules.\n6. Any new fill color must come from the existing palette (`{colors.green}`, `{colors.green-lite}`, `{colors.pink}`, `{colors.cream}`, `{colors.cream-2}`). Do not introduce a yellow, blue, or third pink.\n7. Any new body paragraph is serif weight 400 at 26–32px. Do not run body at weight 500.\n8. Any new KPI figure is `{typography.stat-figure}` (220px). Smaller KPI sizes are not in the system — if the layout can't accommodate 220px, restructure the slide.\n9. Any new chart uses the bar treatment (pink / cream / green fills, mono axes, 2px axis rules) on a green surface. The data composition is part of the system identity.\n10. When in doubt, reach for fewer elements at larger sizes. The system's editorial register collapses when crowded.\n\n## Known Gaps\n\n- The system depends on `deck-stage.js` for canvas scaling and slide navigation. The script is not described in this design.md — treat it as a runtime dependency.\n- Source Serif 4 and JetBrains Mono are loaded from Google Fonts via `<link>`. Offline rendering will fall back to Georgia serif and Menlo mono respectively, which will preserve the rough character but lose the optical-size axis and the JetBrains Mono identity. Self-hosting recommended for offline / print reliability.\n- The Source Serif 4 optical-size axis (`opsz` 8..60) is critical to the system's quality — using a non-opsz fallback face flattens the size-aware letterform contrast.\n- The bar chart uses hand-set bar heights (`%` of a fixed 520px plot region). There is no data-binding — extending the chart requires manually computing heights.\n- The monogram circle, footline strings, and tile counters carry hardcoded text in the source. Replacing them with a deck's actual identity is required per-deck.\n- The system has no `@media print` rule and no responsive breakpoints — it is fixed 1920×1080 and relies on `deck-stage.js` for any viewport adaptation.\n- The green-on-pink and pink-on-green text contrast ratios are sufficient at the display sizes used (84px+) but would fail WCAG AA at body-text sizes. Do not put 26px body text in pink-on-green or green-on-pink — keep small text in cream-on-green or ink-on-cream.\n","frontmatter":{"version":"alpha","name":"Editorial Forest","description":"A serif-led editorial presentation system in the register of a literary quarterly or art-book monograph. Display type runs in Source Serif 4 at weight 500 with optical-size axis engaged, scaling up to 220px for cover and stat moments. The palette pairs a deep forest green (#2e4a2a) with a dusty rose pink (#e89cb1) over an oat-cream paper ground (#efe7d4), with JetBrains Mono as the editorial chrome (labels, captions, axis ticks). The aesthetic is closer to a Penguin classic, Apartamento spread, or quiet annual report than a tech keynote — confident, paper-feeling, and committed to a small color vocabulary.","colors":{"green":"#2e4a2a","green-deep":"#243a21","green-lite":"#3a5a36","pink":"#e89cb1","pink-deep":"#d27e96","cream":"#efe7d4","cream-2":"#e6dcc4","ink":"#1a1a17"},"typography":{"display-hero":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":220,"fontWeight":500,"lineHeight":0.92,"letterSpacing":"-0.02em"},"display":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":140,"fontWeight":500,"lineHeight":1.02,"letterSpacing":"-0.02em"},"headline-xl":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":96,"fontWeight":500,"lineHeight":0.96,"letterSpacing":"-0.02em"},"headline":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":84,"fontWeight":500,"lineHeight":1,"letterSpacing":"-0.02em"},"headline-sm":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":80,"fontWeight":500,"lineHeight":0.98,"letterSpacing":"-0.02em"},"title-card-lg":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":84,"fontWeight":500,"lineHeight":0.98,"letterSpacing":"-0.01em"},"title-card":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":68,"fontWeight":500,"lineHeight":0.96,"letterSpacing":"-0.01em"},"title-card-sm":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":56,"fontWeight":500,"lineHeight":0.98,"letterSpacing":"-0.01em"},"figure-caption-serif":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":56,"fontWeight":500,"lineHeight":1.05},"name":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":44,"fontWeight":600,"lineHeight":1},"meta-value":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":32,"fontWeight":500},"body-lg":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":32,"fontWeight":400,"lineHeight":1.32},"body":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":30,"fontWeight":400,"lineHeight":1.38},"body-card":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":26,"fontWeight":400,"lineHeight":1.34},"label":{"fontFamily":"'JetBrains Mono', ui-monospace, Menlo, monospace","fontSize":26,"fontWeight":500,"letterSpacing":"0.18em","textTransform":"uppercase"},"label-tight":{"fontFamily":"'JetBrains Mono', ui-monospace, Menlo, monospace","fontSize":26,"fontWeight":500,"letterSpacing":"0.14em","textTransform":"uppercase"},"caption-mono":{"fontFamily":"'JetBrains Mono', ui-monospace, Menlo, monospace","fontSize":24,"fontWeight":500,"letterSpacing":"0.14em","textTransform":"uppercase"},"axis-mono":{"fontFamily":"'JetBrains Mono', ui-monospace, Menlo, monospace","fontSize":26,"fontWeight":500,"letterSpacing":"0.08em"},"stat-figure":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":220,"fontWeight":500,"lineHeight":0.92,"letterSpacing":"-0.03em"},"stat-figure-unit":{"fontFamily":"'Source Serif 4', 'Source Serif Pro', Georgia, serif","fontSize":110,"fontWeight":500,"lineHeight":0.92}},"spacing":{"slide-pad-default":"96px 120px","slide-pad-narrow":"100px 120px","slide-pad-wide":"100px 140px","slide-pad-statement":"130px 160px","grid-gap-cards":28,"grid-gap-topics":24,"grid-gap-kpi":60,"rule-weight":"2px","rule-weight-card":"2.5px","radius-card":"6px","radius-card-step":"8px","radius-bar-top":"3px 3px 0 0","radius-mark-circle":"50%"},"canvas":{"width":"1920px","height":"1080px"},"components":{"topic-tile":{"description":"Bordered or filled rectangular region holding a mono ordinal, a serif title, optional body, and a mono foot. Background may be green / green-lite / pink / cream-2-with-green-border. Corner radius 6px.","borderRadius":"{spacing.radius-card}","padding":"40px 40px 36px"},"step-tile":{"description":"Vertical card carrying a mono ordinal, a serif title, body paragraph, and a mono marker row separated by a top rule. Background fills: cream-with-green-border, solid green, or solid pink.","borderRadius":"{spacing.radius-card-step}","padding":"40px 32px 32px","minHeight":"470px","border":"2.5px solid currentColor-region"},"monogram-circle":{"width":"130px","height":"130px","borderRadius":"{spacing.radius-mark-circle}","border":"2px solid {colors.pink}","fontFamily":"JetBrains Mono","fontSize":28,"letterSpacing":"0.1em","fontWeight":500,"description":"Outlined round mark holding a short mono monogram. The system's signature identity stamp."},"topbar":{"placement":"top edge of slide","layout":"flex space-between, baseline-aligned","content":"{components.label} on the left, monogram-circle or counter on the right"},"footline":{"position":"absolute","placement":"bottom edge of slide, full-width between slide padding","layout":"flex space-between","typography":"{typography.caption-mono}"},"meta-dl":{"description":"Three-column definition list separated by a top rule (2px {colors.green}). Each entry has a mono dt label and a serif dd value.","columns":3,"gap":"36px","topBorder":"2px solid {colors.green}"},"bar":{"width":"56px","borderRadius":"{spacing.radius-bar-top}","description":"Vertical chart bar in pink, cream, or green. Value label printed above bar in mono."},"chart-axis":{"border":"2px solid currentColor","description":"Y-axis and x-axis use a single 2px rule on the inner edges of the plot region; no full axis box."},"rule-thin":{"description":"Hairline 2px rule, used as section separator above kpi rows, summary grids, meta dls. Color follows region (green on cream, pink on green)."},"legend-swatch":{"display":"inline-block","width":"26px","height":"26px","borderRadius":"2px","description":"Small filled square preceding a mono legend label. 2px corner radius is the smallest radius in the system."}}},"isInternal":false,"tokens":9952,"sizeBytes":39488},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/preview.md","title":"Editorial-forest Skill","category":"anthropic-skill","format":"markdown","content":"# Editorial Forest Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/editorial-forest/design.md`\n- Preview card: `bold-template-pack/templates/editorial-forest/preview.md`\n\n## Selection Metadata\n\n- Slug: `editorial-forest`\n- Tagline: Forest green, dusty pink, and warm cream meet Source Serif 4 in a quiet, intentional quarterly-review deck.\n- Mood: editorial, quiet, considered, warm, intentional\n- Tone: literary, thoughtful, warm, low-pressure\n- Formality: medium\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel like a considered editorial — quarterly reviews, internal readouts, studio updates, creative-agency presentations. Equally good for any deck that wants to feel warm and unhurried rather than corporate, including research recaps, book or program announcements, and team retrospectives.\n- Avoid for: Contexts that need to feel urgent, punchy, or sales-driven — the palette and rhythm are intentionally quiet.\n\n## Visual Snapshot\n\nA serif-led editorial presentation system in the register of a literary quarterly or art-book monograph. Display type runs in Source Serif 4 at weight 500 with optical-size axis engaged, scaling up to 220px for cover and stat moments. The palette pairs a deep forest green (#2e4a2a) with a dusty rose pink (#e89cb1) over an oat-cream paper ground (#efe7d4), with JetBrains Mono as the editorial chrome (labels, captions, axis ticks). The aesthetic is closer to a Penguin classic, Apartamento spread, or quiet annual report than a tech keynote — confident, paper-feeling, and committed to a small color vocabulary.\n\nEditorial Forest is a serif-led editorial presentation system in the tonal register of a Penguin classic, a quiet annual report, or an art-book spread. The system's foundational premise is a single, confident typographic voice — Source Serif 4 — used at extreme scale (up to 220px) for headlines and stat figures, with JetBrains Mono playing the supporting role of editorial chrome (labels, captions, axis ticks, page footlines).\n\n## Preview Ingredients\n\n- Palette: green #2E4A2A; green-deep #243A21; green-lite #3A5A36; pink #E89CB1; pink-deep #D27E96; cream #EFE7D4; cream-2 #E6DCC4; ink #1A1A17\n- Typography: JetBrains Mono\n- Signature move: Three-color editorial palette: deep forest green, dusty rose pink, oat cream paper. Two surface tones per slide is typical; three is loud.\n- Signature move: Source Serif 4 at weight 500 for every headline, body, and display moment. Optical-size axis engaged for size-aware letterforms.\n- Signature move: JetBrains Mono at weight 500 uppercase with wide tracking (0.14em–0.18em) for every label, caption, axis tick, and footline.\n- Signature move: Display type scales to 220px for cover and stat-figure moments; 96px for primary headlines; 56–84px for card titles.\n- Signature move: 2px hairline rules separate stacked sections — never thicker, never colored beyond region context.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1033,"sizeBytes":4558},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/design.md","title":"Editorial Tri-Tone","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Editorial Tri-Tone\ndescription: A literary magazine-meets-annual-report presentation system built on a strict three-color palette — blush pink, golden butter, and deep burgundy wine. Despite having eleven CSS variable names, only three hex values exist in the entire system; every alias is a semantic rename of one of those three. Headlines run Bricolage Grotesque (a variable grotesque with an optical-size axis) at extreme weights and negative letter-spacing. Instrument Serif (italic-cut only) appears as the expressive accent face for chapter numerals, pull-quotes, years, and signatures. JetBrains Mono carries all metadata, labels, and section markers at tight uppercase tracking. The aesthetic is \"independent arts publication\" — the kind with a colophon, hand-numbered editions, and an editorial desk.\n\ncolors:\n  pink: \"#F2B6C6\"\n  butter: \"#F2D86A\"\n  burgundy: \"#7A1F35\"\n\ncolor-aliases:\n  pink-deep: pink\n  sky: pink\n  cream: butter\n  lime: butter\n  terracotta: butter\n  navy: burgundy\n  forest: burgundy\n  ink: burgundy\n\ntypography:\n  display-wordmark:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 300px\n    fontWeight: 800\n    lineHeight: 0.82\n    letterSpacing: -0.04em\n  display-closer:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 320px\n    fontWeight: 700\n    lineHeight: 0.82\n    letterSpacing: -0.05em\n  display-stat:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 540px\n    fontWeight: 700\n    lineHeight: 0.78\n    letterSpacing: -0.06em\n  display-stat-unit:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 220px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  chapter-num:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 240px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  quote-mark:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 200px\n    fontWeight: 400\n    lineHeight: 0.6\n    letterSpacing: 0\n  display-xl:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 84px\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.02em\n  display-lg:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 76px\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.02em\n  signature:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 64px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  endorsement-num:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 56px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    color: pink\n  timeline-year:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 56px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  subhead-serif:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 48px\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0\n  lede:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 56px\n    fontWeight: 500\n    lineHeight: 1.05\n    letterSpacing: -0.02em\n  cover-pill:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 44px\n    fontWeight: 500\n    lineHeight: 1.0\n    letterSpacing: 0\n  chart-title:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 40px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  card-title:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 40px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  quote-heading:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 56px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  body-lg:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.45\n    letterSpacing: 0\n  body-md:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 26px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-sm:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.45\n    letterSpacing: 0\n  label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  label-wide:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-mid:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  label-tight:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.10em\n    textTransform: uppercase\n  footer:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    opacity: 0.75\n\nspacing:\n  slide-pad: 96px\n  chrome-gutter: 64px\n  section-gap: 48px\n  card-pad: 28px 28px 30px\n  chart-pad: 48px 48px 56px\n  footer-bottom: 36px\n  grid-gap: 24px\n  endorsement-pad: 20px 0\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  pill:\n    borderRadius: 999px\n    padding: 0.35em 0.9em\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontWeight: 500\n    lineHeight: 1.0\n  cover-pill:\n    borderRadius: 999px\n    padding: 16px 38px\n    fontSize: 44px\n    fontWeight: 500\n  closer-pill:\n    borderRadius: 999px\n    padding: 12px 28px\n    fontSize: 22px\n  value-card:\n    borderRadius: 28px\n    padding: 28px 28px 30px\n    height: 340px\n  value-card-dark:\n    background: \"{colors.burgundy}\"\n    color: \"{colors.butter}\"\n  value-card-light:\n    background: \"{colors.butter}\"\n    color: \"{colors.burgundy}\"\n  chart-card:\n    background: \"{colors.butter}\"\n    color: \"{colors.burgundy}\"\n    borderRadius: 32px\n    padding: 48px 48px 56px\n  timeline-ribbon:\n    background: \"{colors.burgundy}\"\n    color: \"{colors.butter}\"\n    borderRadius: 999px\n    padding: 24px 44px\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  timeline-ribbon-accent:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 30px\n    fontWeight: 400\n    letterSpacing: 0\n    textTransform: none\n    color: \"{colors.pink}\"\n  footer-chrome:\n    position: absolute\n    left: 64px\n    right: 64px\n    bottom: 36px\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    opacity: 0.75\n  footer-dot:\n    width: 8px\n    height: 8px\n    borderRadius: 999px\n    background: currentColor\n    opacity-inactive: 0.3\n    opacity-active: 1.0\n  swatch-circle:\n    width: 36px\n    height: 36px\n    borderRadius: 999px\n  stat-breakdown-bar:\n    height: 10px\n    borderRadius: 999px\n    background: \"rgba(246,237,220,0.15)\"\n  stat-breakdown-divider:\n    borderTop: \"1px solid rgba(246,237,220,0.25)\"\n  endorsement-divider:\n    borderTop: \"1px solid rgba(246,237,220,0.30)\"\n  avatar:\n    width: 72px\n    height: 72px\n    borderRadius: 999px\n    background: \"{colors.burgundy}\"\n    border: \"3px solid {colors.burgundy}\"\n  timeline-axis:\n    height: 4px\n    background: \"{colors.burgundy}\"\n    opacity: 0.15\n  timeline-dot:\n    width: 28px\n    height: 28px\n    borderRadius: 999px\n    border: \"4px solid {colors.butter}\"\n    background: \"{colors.burgundy}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nEditorial Tri-Tone is a **literary magazine presentation system** built on the strictest possible palette: three hex values, eleven CSS variable names. The naming system reveals editorial intent — `--pink` and `--sky` point at the same blush; `--cream`, `--butter`, `--lime`, and `--terracotta` all resolve to the same golden yellow; `--burgundy`, `--navy`, `--forest`, and `--ink` all collapse to the same deep wine. The aliases exist to communicate the role of the color in context, not to introduce variation.\n\nThe typeface stack is a deliberate three-way conversation:\n1. **Bricolage Grotesque** — a variable grotesque with an optical-size axis. Used at weights 500, 600, 700, and 800 for all display and body sans text.\n2. **Instrument Serif** — used exclusively in weight 400, often in its italic guise. Reserved for chapter numerals, pull-quote marks, timeline years, signatures, endorsement ordinals, and stat percentage symbols.\n3. **JetBrains Mono** — all metadata, labels, section markers, footnotes, footer chrome.\n\nThe editorial voice is that of an independent magazine with a colophon — the deck's last slide is literally called \"Colophon.\" Section markers use the section sign (§) followed by a number and a title. The tone is measured, literary, and warm rather than corporate or high-energy.\n\n**Key Characteristics:**\n- Three-color palette with semantic aliases: blush pink (#F2B6C6), golden butter (#F2D86A), deep burgundy (#7A1F35).\n- Mixed typography: Bricolage Grotesque grotesque for display and body; Instrument Serif for expressive accent numerals, quotes, and years; JetBrains Mono for all labels.\n- The `em` tag within Bricolage Grotesque headlines always triggers a switch to Instrument Serif italic — the system's primary typographic mix.\n- Pills (border-radius 999px) are the universal tag component; used at three different sizes across cover, chart legend, and closer.\n- Value cards have a generous 28px border-radius — soft, rounded, not brutalist.\n- Dividers on dark surfaces use low-opacity rgba (0.25–0.30) rather than solid colors — whispered separators.\n- Footer dot row: a progress indicator using 8px circles at 30% opacity (inactive) and 100% opacity (active).\n- The sole SVG chart combines four series types on a single canvas: filled area, vertical bars, connected circles, dotted line.\n\n## Colors\n\n### The Three Actual Colors\nDespite many CSS variable names, the palette is:\n\n| Name | Hex | Role |\n|---|---|---|\n| Blush Pink | #F2B6C6 | Accent / highlight on dark surfaces; stat figure color; quote mark glow |\n| Golden Butter | #F2D86A | Warm mid-tone; background for light slides; accent text on dark surfaces |\n| Deep Burgundy | #7A1F35 | Primary dark surface; ink color; structural tone |\n\n### Alias Map\nAll aliases resolve to one of the three values above. The alias name signals context:\n\n| Alias | Points to | Context of use |\n|---|---|---|\n| `--pink` | #F2B6C6 | Default accent label |\n| `--pink-deep` | #F2B6C6 | (unused distinct value — same as pink) |\n| `--sky` | #F2B6C6 | Segment D bar in breakdown |\n| `--cream` | #F2D86A | Light surface background |\n| `--butter` | #F2D86A | Accent text on dark; card backgrounds |\n| `--lime` | #F2D86A | Ribbon accent text; kicker label on dark surfaces |\n| `--terracotta` | #F2D86A | Italic em highlights in lede or body |\n| `--navy` | #7A1F35 | Alternate label for dark surface contexts |\n| `--forest` | #7A1F35 | Dark panel or column background |\n| `--burgundy` | #7A1F35 | Structural background color |\n| `--ink` | #7A1F35 | All text color |\n\n\n## Typography\n\n### Font Families\n- **Bricolage Grotesque**: The primary typeface. Variable with optical-size axis (opsz 12..96) and weights from 400 to 800. The weight range is the expressive tool — 400 for body, 500 for lede, 600 for card titles and quote headers, 700 for section headlines, 800 for the wordmark.\n- **Instrument Serif**: Weight 400 only, italic variant loaded. Functions as the expressive counterpoint to Bricolage Grotesque. Never used for body copy; always for large numerals, quotation marks, signatures, years, endorsement ordinals, and the stat percentage symbol. The key insight is that the system never uses Instrument Serif for \"normal\" running text — only for moments of human expressiveness.\n- **JetBrains Mono**: Weights 400 and 500. All labels are uppercase with 0.10–0.18em letter-spacing. Always secondary information: section markers, metadata, footnotes, legend categories, kickers, footer chrome.\n\n### The `em` Rule\nWithin any Bricolage Grotesque headline, an `<em>` tag triggers a switch to Instrument Serif at weight 400. This is the system's primary in-line typographic mix — a grotesque headline interrupted by a serif aside. Example: \"A short trajectory, told in *five stops*.\" The em portion reads as a quieter, more reflective counterpoint.\n\n### The `b` Rule (Quote Slide Only)\nWithin Instrument Serif blockquotes, a `<b>` tag triggers a switch back to Bricolage Grotesque weight 600 in burgundy. The reverse of the em rule — a serif quote punctuated by a grotesk emphasis.\n\n### Display Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-stat}` | 540px | Bricolage Grotesque | 700 | Full-bleed oversized stat or number figure |\n| `{typography.display-closer}` | 320px | Bricolage Grotesque | 700 | Jumbo title or closing wordmark |\n| `{typography.display-wordmark}` | 300px | Bricolage Grotesque | 800 | Primary wordmark or deck title |\n| `{typography.display-stat-unit}` | 220px | Instrument Serif | 400 | Accent symbol alongside a stat figure |\n| `{typography.chapter-num}` | 240px | Instrument Serif | 400 | Large chapter or section numeral |\n| `{typography.quote-mark}` | 200px | Instrument Serif | 400 | Decorative large quotation mark |\n| `{typography.display-xl}` | 84px | Bricolage Grotesque | 700 | Section headline for data or chart layouts |\n| `{typography.display-lg}` | 76px | Bricolage Grotesque | 700 | Section headlines |\n| `{typography.signature}` | 64px | Instrument Serif | 400 | Signature or sign-off element |\n| `{typography.lede}` | 56px | Bricolage Grotesque | 500 | Lede or opening statement |\n| `{typography.quote-heading}` | 56px | Bricolage Grotesque | 600 | Panel heading or editorial subhead |\n| `{typography.endorsement-num}` | 56px | Instrument Serif | 400 | Endorsement or list ordinals |\n| `{typography.timeline-year}` | 56px | Instrument Serif | 400 | Year stamps or large ordinal accents |\n| `{typography.subhead-serif}` | 48px | Instrument Serif | 400 | Secondary subheads on dark surfaces |\n| `{typography.cover-pill}` | 44px | Bricolage Grotesque | 500 | Large tag cloud or keyword pills |\n| `{typography.chart-title}` | 40px | Instrument Serif | 400 | Card or panel title |\n| `{typography.card-title}` | 40px | Bricolage Grotesque | 600 | Card or value title |\n\n### Body and Label Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.body-lg}` | 28px | Bricolage Grotesque | 400 | Manifesto right-column body |\n| `{typography.body-md}` | 26px | Bricolage Grotesque | 600/400 | Attribution name, endorsement body |\n| `{typography.body-sm}` | 24px | Bricolage Grotesque | 400 | Card descriptions, stat annotation, closer index |\n| `{typography.label}` | 24px | JetBrains Mono | 400 | Standard section labels (0.15em tracking) |\n| `{typography.label-wide}` | 24px | JetBrains Mono | 400 | Kickers on dark slides (0.18em tracking) |\n| `{typography.label-mid}` | 24px | JetBrains Mono | 400 | Manifesto bottom meta (0.12em) |\n| `{typography.label-tight}` | 24px | JetBrains Mono | 400 | Legend categories, breakdown labels (0.10em) |\n| `{typography.footer}` | 16px | JetBrains Mono | 400 | Page footer chrome (0.12em, opacity 0.75) |\n\n### Principles\nBricolage Grotesque's optical-size axis makes the face significantly more expressive at large sizes and more legible at small sizes without changing weight. At 540px and 300px (stat and wordmark), the display renders with wide, open letterforms; at 24px (body), it compresses. Both are weight 700 or 800 at display; both are weight 400 at body. The face is never used in intermediate sizes (48–72px) — that zone belongs to Instrument Serif.\n\nLetter-spacing on Bricolage Grotesque is always negative at display: -0.04em at 300px, -0.05em at 320px, -0.06em at 540px. At body sizes (24–28px), no letter-spacing is applied.\n\nJetBrains Mono label tracking is always positive and varies by use: 0.10em for dense data contexts, 0.12em for secondary meta, 0.15em for standard section labels, 0.18em for headline kickers on dark slides.\n\n## Layout\n\n### Canvas System\nEvery slide is exactly 1920×1080px. The `deck-stage` custom element handles centering and scaling.\n\n### Gutter System\n- **Chrome gutter** (64px left/right): Used by footer chrome and most content edges.\n- **Generous slide padding** (96px): Most slides use `padding: 96px 64px` — the top/bottom pad is larger than the sides, giving a portrait-publication feel even on landscape slides.\n- **Wide slide padding** (88px top on chart slide): Slight reduction to accommodate the two-column layout.\n\n\n### Slide Internal Spacing Pattern\nEach slide follows a top-to-bottom reading order:\n1. Section marker (`§ XX — Title`, JetBrains Mono, 24px, label tracking)\n2. Headline or major content\n3. Body / grid content\n4. Footer meta (absolute, bottom 36px)\n\n## Elevation and Depth\n\nThe system uses **no box shadows at all**. Depth comes entirely from:\n\n### Color Surface Contrast\nThe burgundy/butter/pink trio creates its own depth hierarchy:\n- Butter surfaces feel \"forward\" (warm, light)\n- Pink feels \"accented\" (warm, mid)\n- Burgundy feels \"recessed\" (dark, anchoring)\n\nAlternating surface colors within split slides (cream left / burgundy right on manifesto; lime left / burgundy right on quote) creates depth through edge contrast rather than shadow.\n\n### Opacity Dividers\nOn dark (burgundy) surfaces, all dividers and structural lines use rgba rather than solid colors:\n- Row separators in stat breakdown: `rgba(246,237,220,0.25)`\n- Endorsement rows in quote slide: `rgba(246,237,220,0.30)`\n- Timeline axis: `opacity: 0.15` on solid burgundy\n\nThe cream values (246,237,220) in those rgba strings approximate the butter color at full opacity — dividers feel like recessed etchings rather than drawn lines.\n\n### Chart Card Lift\nThe chart card (slide 6) achieves its \"lifted\" feeling through border-radius 32px on a butter card placed over a burgundy background. No shadow — the rounded corner on a contrasting surface signals elevation.\n\n## Shapes and Treatment\n\n### Border Radius Scale\n| Value | Use |\n|---|---|\n| 999px | All pills, timeline ribbon, swatch circles, avatar, breakdown bars, timeline dots, footer dots, chart data circles |\n| 32px | Chart card (slide 6) |\n| 28px | Value cards (slide 3) |\n| 4px | SVG chart bars (rx=\"4\") |\n| 0px | Section headlines, grid cells (no rounding) |\n\nThe system has a strong binary: either fully rounded (pills, circles) or square (content blocks). The exception is the chart card (32px) and value cards (28px) — large enough radius to feel \"soft\" but geometric rather than circular.\n\n### Pill System\nPills are the universal label/tag component. Three size variants:\n- **Cover pills**: 44px font, 16px 38px padding — large enough to read as headline elements in the tag cloud\n- **Standard pills** (section labels, legend items): 22–24px font, 10–12px 24–28px padding\n- **Color assignments** alternate: burgundy-bg/pink-text and butter-bg/burgundy-text on cover; burgundy/cream or lime/ink on closer\n\n### SVG Chart (Slide 6)\nThe inline SVG chart at 720×380 viewBox combines four series types deliberately to demonstrate the range of a single chart surface:\n- **Area series** (Series A): Filled path with pink fill at 0.85 opacity, burgundy stroke at weight 3\n- **Bar series** (Series C): Burgundy rectangles with rx=\"4\"\n- **Connected circle series** (Series B): Butter circles (r=8) with burgundy stroke/fill on a burgundy line at weight 3\n- **Dotted line** (Series D): Burgundy dashed stroke (stroke-dasharray=\"2 10\", stroke-linecap=\"round\") at 60% opacity\n\nY-axis labels are JetBrains Mono 24px at 60% opacity, left-aligned to x=0.\n\n## Do's and Don'ts\n\n### Do\n- Treat the three hex values as a closed system. Every element uses pink, butter, or burgundy — no neutrals, no grays, no white.\n- Use Instrument Serif only for moments of human expressiveness: numerals, years, signatures, quotation marks, endorsement ordinals. Never for running body text.\n- Use the `em` tag in Bricolage Grotesque headlines to trigger the serif switch. This is the system's primary inline mix and its clearest editorial voice.\n- Give all label text (JetBrains Mono) positive letter-spacing between 0.10em and 0.18em. Monospace without tracking reads as code, not editorial.\n- Alternate surface colors across the two-column split slides. One side is always butter, the other always burgundy.\n- Keep body text in Bricolage Grotesque at weights 400 (text) and 500–600 (emphasized labels). The weight axis is the tonal dial.\n- Use pills at multiple sizes — the pill is the universal tag and its size signals context: 44px for headline-level categorization, 22–24px for utility labels.\n- Section markers follow the pattern `§ NN — Title` in JetBrains Mono — every slide opens with this convention.\n\n### Don't\n- Don't introduce a fourth color. The tri-tone constraint is the design premise.\n- Don't use Instrument Serif at small sizes or in body paragraphs. It is purely an accent face.\n- Don't break the em rule — using Bricolage Grotesque italic instead of Instrument Serif for inline emphasis loses the typographic mix.\n- Don't use letter-spacing on Bricolage Grotesque at display sizes — only negative tracking via `letter-spacing: -0.02em` to `-0.06em` depending on size.\n- Don't add solid-color dividers on dark (burgundy) surfaces. All structural lines on dark backgrounds must use low-opacity rgba.\n- Don't apply box shadows. The system has none. Depth comes from surface contrast and border-radius on contrasting backgrounds.\n- Don't round large content containers (section panels, grid backgrounds). Rounding applies only to pill-scale and card-scale elements (value cards, chart card).\n- Don't use Bricolage Grotesque weight 800 except in the wordmark. The weight 800 is reserved for the single largest typographic moment.\n\n## Responsive Behavior\n\nThis template is designed **exclusively for 1920x1080 presentation display**. The `deck-stage` web component handles viewport scaling via CSS transforms; the 1920x1080 canvas scales proportionally to any screen without layout changes.\n\n### Presenter Behavior\n- Slide advancement via keyboard or presentation clicker (handled by `deck-stage.js`).\n- No hover states are defined.\n- No interactive elements.\n\n### Print / Export\n- At 96dpi, 1920x1080 maps to a 20x11.25 inch frame.\n- The stat figure at 540px renders at ~405pt — suitable for large-format print.\n- The three-color palette is print-safe; burgundy is a deep PMS-range wine tone, butter is a warm yellow, pink is a muted blush — all reproduce well in CMYK offset.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display wordmark / closer / stat (300–540px) | 站酷小薇体 ZCOOL XiaoWei | 400 | A literary decorative serif with the same expressive personality as Bricolage Grotesque + Instrument Serif italic at extreme scale |\n| Section headlines (76–84px) | 思源黑体 Noto Sans SC | 700 | The grotesque equivalent in CJK — carries the Bricolage Grotesque structural weight |\n| Chapter numerals / quote marks / years (200–240px) | 霞鹜文楷 LXGW WenKai | 400 | Hand-set warmth that matches Instrument Serif's expressive accent role |\n| Body paragraph (24–28px) | 思源宋体 Noto Serif SC | 400 | Mincho body voice; literary register |\n| Lede / quote-heading (56px) | 思源黑体 Noto Sans SC | 500–600 | Matches Bricolage Grotesque weight 500/600 |\n| Mono label / section marker / footer | 思源等宽 Noto Sans Mono CJK SC | 400–500 | Preserves the JetBrains Mono chrome quality for `§ NN — Title` markers |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Bricolage Grotesque (display, body) and Instrument Serif (italic accents) as the Latin faces and fall back to the Chinese stack only for CJK glyphs. The literary-magazine identity of Editorial Tri-Tone depends on Bricolage Grotesque's optical-size axis and Instrument Serif's italic cut as part of the brand voice; replacing them wholesale with a CJK family would flatten the system into \"generic Chinese editorial.\" Stack:\n\n```css\n/* Bricolage Grotesque roles (display, body) */\nfont-family: 'Bricolage Grotesque', 'Noto Sans SC', sans-serif;\n/* Instrument Serif roles (chapter-num, quote-mark, year, signature) */\nfont-family: 'Instrument Serif', 'LXGW WenKai TC', serif;\n/* JetBrains Mono roles (labels, section markers) */\nfont-family: 'JetBrains Mono', 'Noto Sans Mono CJK SC', monospace;\n```\n\nThe system's signature `<em>` rule (Bricolage Grotesque → Instrument Serif italic inline) is what carries the editorial tone in Latin. The CJK equivalent: an `<em>` inside a 思源黑体 (Noto Sans SC) headline should switch to **站酷小薇体 (ZCOOL XiaoWei)** — a decorative literary serif with the same softness contrast as Instrument Serif italic. Add a CSS rule:\n\n```css\nh1 em, h2 em, .lede em, .quote-heading em {\n  font-family: 'Instrument Serif', 'ZCOOL XiaoWei', 'LXGW WenKai TC', serif;\n  font-style: italic; /* Latin only — CJK ignores font-style */\n}\n```\n\nWatch for baseline mismatch at display sizes (300–540px): Bricolage Grotesque at -0.04em to -0.06em tracking sits visually tighter than Noto Sans SC, so a mixed-script wordmark like `INTO 中国` may feel uneven. For hero / wordmark moments, prefer single-script lines and let the second script live on its own line below.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>` (or as a second link tag):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700&family=Noto+Serif+SC:wght@400;500;700&family=LXGW+WenKai+TC&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n```\n\nZCOOL XiaoWei is the decorative-terminal serif used for the em-switch role; it's hosted on Google Fonts at weight 400 only.\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.78–0.92 on display, 1.4–1.45 on body) read as cramped in Chinese. Bump display to 0.95–1.05 and body to 1.5–1.6.\n- **Remove negative letter-spacing on CJK headlines.** Bricolage Grotesque display uses -0.04em to -0.06em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Latin portion was meant to be capitalized.\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between Noto Sans SC, Noto Serif SC, and ZCOOL XiaoWei inside the same sentence — pick the face that matches the role (headline = Noto Sans SC, body = Noto Serif SC, em-accent = ZCOOL XiaoWei) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nEditorial Tri-Tone's literary-magazine voice depends on the typographic contrast between Bricolage Grotesque (structural) and Instrument Serif italic (expressive). In Chinese, that same contrast lives in the **思源黑体 ↔ 站酷小薇体** pairing — a clean grotesque set against a literary decorative serif. The em-rule inside headlines should switch from 思源黑体 to **站酷小薇体** specifically (not 霞鹜文楷, which is warmer but less \"literary-decorative\"); this preserves the typographic mix that defines the system.\n\nFor the system's signature display moments — the 300px wordmark, the 540px stat figure, the 240px chapter numeral — Chinese is at its loudest. Reach for **站酷小薇体** when the moment is decorative (a chapter ordinal \"第一章\" rendered in literary serif) and **思源黑体 weight 700** when the moment is structural (a section headline like \"我们的方法\"). The 200px quote-mark glyph is harder in Chinese — Chinese quotation marks (「」) don't carry the same decorative weight as Latin 'curly quotes', so consider rendering the entire quote moment in the Latin glyph (using the `Instrument Serif` face on the punctuation character itself) and let the body text below switch to 思源宋体.\n\nThe section marker convention `§ NN — Title` works in Chinese: `§ 02 — 我们的承诺`. Keep the section sign and the numeral in JetBrains Mono / Noto Sans Mono CJK SC; the title text can switch to 思源黑体 weight 400 with 0.05em tracking to preserve the chrome quality.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is the right aesthetic match for the em-switch role, but it ships as **weight 400 only with no italic cut**. Chinese has no italic concept (slanted Han glyphs read as broken, not emphasized), so the lack of italic is fine — but the visual softness contrast that Instrument Serif italic provides in Latin (a slanted, more flowing letterform) cannot be exactly replicated in Chinese. The decorative-terminal serif quality of ZCOOL XiaoWei provides the closest equivalent, but the contrast against 思源黑体 is **face-based, not slant-based**. Decks with heavy reliance on the em-rule should test the visual rhythm in Chinese before committing — if the contrast feels muted, increase the em-portion font-size by 4–8px to compensate.\n\n## Iteration Guide\n\n1. Section labels always use the `§ NN — Title` convention in JetBrains Mono with `{typography.label}` tracking.\n2. Every headline with an em/italic moment uses `<em>` to trigger Instrument Serif. Never use `font-style: italic` on Bricolage Grotesque directly.\n3. Value card alternation: odd-numbered cards (c1, c3, c5, c7) are dark (burgundy/butter); even-numbered (c2, c4, c6, c8) are light (butter/burgundy).\n4. New dark-surface sections use `rgba(246,237,220,0.25)` for dividers — not `{colors.butter}` at full opacity.\n5. New pills follow the existing alternation: burgundy-bg/pink-text and butter-bg/burgundy-text for variety in clusters.\n6. Adding a chart series: use the four established visual encodings (area, bars, circles, dotted line) before inventing a new one.\n7. All section backgrounds must be one of the three palette colors — never mix (no half-pink half-butter).\n8. Footer chrome is shared across all slides: `position:absolute; left:64px; right:64px; bottom:36px; font-family:JetBrains Mono; font-size:16px; opacity:0.75`.\n\n## Known Gaps\n\n- The `deck-stage.js` script is an external dependency not documented here.\n- The footer dot-row progress indicator (`.footer .dotrow`) is rendered in the HTML but the dots are all styled with class \"on\" or left as inactive — a presenter would need to update slide state dynamically.\n- The SVG chart uses hardcoded paths, coordinates, and placeholder values — no data-binding layer exists.\n- The breakdown bars in slide 4 use inline `width: XX%` as a style — percentages must be set manually.\n- The timeline stop dots (`.stop .dot`) have `display: none` — they are styled but not visible. A presenter populating this slide would enable them via CSS.\n- Instrument Serif italic is loaded as a font variant but is not explicitly called with `font-style: italic` in every context — in some cases the browser selects it from the variable font's italic axis automatically based on surrounding context.\n- Color swatch circles on slide 4 reference `--terracotta` and `--sky`, which resolve identically to `--butter` and `--pink` — the visual distinction exists only semantically in the source, not visually.\n","frontmatter":{"version":"alpha","name":"Editorial Tri-Tone","description":"A literary magazine-meets-annual-report presentation system built on a strict three-color palette — blush pink, golden butter, and deep burgundy wine. Despite having eleven CSS variable names, only three hex values exist in the entire system; every alias is a semantic rename of one of those three. Headlines run Bricolage Grotesque (a variable grotesque with an optical-size axis) at extreme weights and negative letter-spacing. Instrument Serif (italic-cut only) appears as the expressive accent face for chapter numerals, pull-quotes, years, and signatures. JetBrains Mono carries all metadata, labels, and section markers at tight uppercase tracking. The aesthetic is \"independent arts publication\" — the kind with a colophon, hand-numbered editions, and an editorial desk.","colors":{"pink":"#F2B6C6","butter":"#F2D86A","burgundy":"#7A1F35"},"color-aliases":{"pink-deep":"pink","sky":"pink","cream":"butter","lime":"butter","terracotta":"butter","navy":"burgundy","forest":"burgundy","ink":"burgundy"},"typography":{"display-wordmark":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"300px","fontWeight":800,"lineHeight":0.82,"letterSpacing":"-0.04em"},"display-closer":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"320px","fontWeight":700,"lineHeight":0.82,"letterSpacing":"-0.05em"},"display-stat":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"540px","fontWeight":700,"lineHeight":0.78,"letterSpacing":"-0.06em"},"display-stat-unit":{"fontFamily":"Instrument Serif, serif","fontSize":"220px","fontWeight":400,"lineHeight":1,"letterSpacing":0},"chapter-num":{"fontFamily":"Instrument Serif, serif","fontSize":"240px","fontWeight":400,"lineHeight":0.9,"letterSpacing":0},"quote-mark":{"fontFamily":"Instrument Serif, serif","fontSize":"200px","fontWeight":400,"lineHeight":0.6,"letterSpacing":0},"display-xl":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"84px","fontWeight":700,"lineHeight":0.95,"letterSpacing":"-0.02em"},"display-lg":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"76px","fontWeight":700,"lineHeight":0.95,"letterSpacing":"-0.02em"},"signature":{"fontFamily":"Instrument Serif, serif","fontSize":"64px","fontWeight":400,"lineHeight":1,"letterSpacing":0},"endorsement-num":{"fontFamily":"Instrument Serif, serif","fontSize":"56px","fontWeight":400,"lineHeight":1,"letterSpacing":0,"color":"pink"},"timeline-year":{"fontFamily":"Instrument Serif, serif","fontSize":"56px","fontWeight":400,"lineHeight":1,"letterSpacing":0},"subhead-serif":{"fontFamily":"Instrument Serif, serif","fontSize":"48px","fontWeight":400,"lineHeight":1.1,"letterSpacing":0},"lede":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"56px","fontWeight":500,"lineHeight":1.05,"letterSpacing":"-0.02em"},"cover-pill":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"44px","fontWeight":500,"lineHeight":1,"letterSpacing":0},"chart-title":{"fontFamily":"Instrument Serif, serif","fontSize":"40px","fontWeight":400,"lineHeight":1,"letterSpacing":0},"card-title":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"40px","fontWeight":600,"lineHeight":1,"letterSpacing":"-0.02em"},"quote-heading":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"56px","fontWeight":600,"lineHeight":1,"letterSpacing":"-0.02em"},"body-lg":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"28px","fontWeight":400,"lineHeight":1.45,"letterSpacing":0},"body-md":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"26px","fontWeight":400,"lineHeight":1.4,"letterSpacing":0},"body-sm":{"fontFamily":"Bricolage Grotesque, sans-serif","fontSize":"24px","fontWeight":400,"lineHeight":1.45,"letterSpacing":0},"label":{"fontFamily":"JetBrains Mono, monospace","fontSize":"24px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.15em","textTransform":"uppercase"},"label-wide":{"fontFamily":"JetBrains Mono, monospace","fontSize":"24px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.18em","textTransform":"uppercase"},"label-mid":{"fontFamily":"JetBrains Mono, monospace","fontSize":"24px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.12em","textTransform":"uppercase"},"label-tight":{"fontFamily":"JetBrains Mono, monospace","fontSize":"24px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.10em","textTransform":"uppercase"},"footer":{"fontFamily":"JetBrains Mono, monospace","fontSize":"16px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.12em","textTransform":"uppercase","opacity":0.75}},"spacing":{"slide-pad":"96px","chrome-gutter":"64px","section-gap":"48px","card-pad":"28px 28px 30px","chart-pad":"48px 48px 56px","footer-bottom":"36px","grid-gap":"24px","endorsement-pad":"20px 0"},"canvas":{"width":"1920px","height":"1080px"},"components":{"pill":{"borderRadius":"999px","padding":"0.35em 0.9em","fontFamily":"Bricolage Grotesque, sans-serif","fontWeight":500,"lineHeight":1},"cover-pill":{"borderRadius":"999px","padding":"16px 38px","fontSize":"44px","fontWeight":500},"closer-pill":{"borderRadius":"999px","padding":"12px 28px","fontSize":"22px"},"value-card":{"borderRadius":"28px","padding":"28px 28px 30px","height":"340px"},"value-card-dark":{"background":"{colors.burgundy}","color":"{colors.butter}"},"value-card-light":{"background":"{colors.butter}","color":"{colors.burgundy}"},"chart-card":{"background":"{colors.butter}","color":"{colors.burgundy}","borderRadius":"32px","padding":"48px 48px 56px"},"timeline-ribbon":{"background":"{colors.burgundy}","color":"{colors.butter}","borderRadius":"999px","padding":"24px 44px","fontFamily":"JetBrains Mono, monospace","fontSize":"24px","letterSpacing":"0.15em","textTransform":"uppercase"},"timeline-ribbon-accent":{"fontFamily":"Instrument Serif, serif","fontSize":"30px","fontWeight":400,"letterSpacing":0,"textTransform":"none","color":"{colors.pink}"},"footer-chrome":{"position":"absolute","left":"64px","right":"64px","bottom":"36px","fontFamily":"JetBrains Mono, monospace","fontSize":"16px","letterSpacing":"0.12em","textTransform":"uppercase","opacity":0.75},"footer-dot":{"width":"8px","height":"8px","borderRadius":"999px","background":"currentColor","opacity-inactive":0.3,"opacity-active":1},"swatch-circle":{"width":"36px","height":"36px","borderRadius":"999px"},"stat-breakdown-bar":{"height":"10px","borderRadius":"999px","background":"rgba(246,237,220,0.15)"},"stat-breakdown-divider":{"borderTop":"1px solid rgba(246,237,220,0.25)"},"endorsement-divider":{"borderTop":"1px solid rgba(246,237,220,0.30)"},"avatar":{"width":"72px","height":"72px","borderRadius":"999px","background":"{colors.burgundy}","border":"3px solid {colors.burgundy}"},"timeline-axis":{"height":"4px","background":"{colors.burgundy}","opacity":0.15},"timeline-dot":{"width":"28px","height":"28px","borderRadius":"999px","border":"4px solid {colors.butter}","background":"{colors.burgundy}"}}},"isInternal":false,"tokens":8851,"sizeBytes":33424},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/preview.md","title":"Editorial-tri-tone Skill","category":"anthropic-skill","format":"markdown","content":"# Editorial Tri-Tone Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/editorial-tri-tone/design.md`\n- Preview card: `bold-template-pack/templates/editorial-tri-tone/preview.md`\n\n## Selection Metadata\n\n- Slug: `editorial-tri-tone`\n- Tagline: Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif.\n- Mood: editorial, warm, intentional, moody\n- Tone: literary, warm, considered, stylish\n- Formality: medium-high\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews. Equally good for any deck — including tech, research, or business — that wants tri-tone discipline and serif/sans contrast instead of the usual neutrals.\n- Avoid for: Decks that need to read as soft or comforting — the burgundy/pink/cream tri-tone is intentionally high-contrast and styled.\n\n## Visual Snapshot\n\nA literary magazine-meets-annual-report presentation system built on a strict three-color palette — blush pink, golden butter, and deep burgundy wine. Despite having eleven CSS variable names, only three hex values exist in the entire system; every alias is a semantic rename of one of those three. Headlines run Bricolage Grotesque (a variable grotesque with an optical-size axis) at extreme weights and negative letter-spacing. Instrument Serif (italic-cut only) appears as the expressive accent face for chapter numerals, pull-quotes, years, and signatures. JetBrains Mono carries all metadata, labels, and section markers at tight uppercase tracking. The aesthetic is \"independent arts publication\" — the kind with a colophon, hand-numbered editions, and an editorial desk.\n\nEditorial Tri-Tone is a literary magazine presentation system built on the strictest possible palette: three hex values, eleven CSS variable names. The naming system reveals editorial intent — --pink and --sky point at the same blush; --cream, --butter, --lime, and --terracotta all resolve to the same golden yellow; --burgundy, --navy, --forest, and --ink all collapse to the same deep wine. The aliases exist to communicate the role of the color in context, not to introduce variation.\n\n## Preview Ingredients\n\n- Palette: pink #F2B6C6; butter #F2D86A; burgundy #7A1F35\n- Typography: Bricolage Grotesque; Instrument Serif; JetBrains Mono\n- Signature move: Three-color palette with semantic aliases: blush pink (#F2B6C6), golden butter (#F2D86A), deep burgundy (#7A1F35).\n- Signature move: Mixed typography: Bricolage Grotesque grotesque for display and body; Instrument Serif for expressive accent numerals, quotes, and years; JetBrains Mono for all labels.\n- Signature move: The em tag within Bricolage Grotesque headlines always triggers a switch to Instrument Serif italic — the system's primary typographic mix.\n- Signature move: Pills (border-radius 999px) are the universal tag component; used at three different sizes across cover, chart legend, and closer.\n- Signature move: Value cards have a generous 28px border-radius — soft, rounded, not brutalist.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1061,"sizeBytes":4757},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/emerald-editorial/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/emerald-editorial/design.md","title":"Emerald Editorial","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Emerald Editorial\ndescription: \"A bold display-serif editorial system in the register of a fashion masthead or vintage magazine cover. Bodoni Moda runs at weight 900 across a wide scale (44–460px), set against a saturated emerald-green canvas with deep navy ink and oat-paper accents. The signature treatment is a stacked double-rule ornament that brackets centered display words like a 19th-century theatrical playbill. The aesthetic borrows from Harper's Bazaar / Vogue / Wallpaper covers: confident, theatrical, paper-and-ink committed, with a tight three-color palette and zero gradients or shadows.\"\n\ncolors:\n  bg: \"#3CD896\"\n  bg-2: \"#2DC684\"\n  bg-3: \"#25B377\"\n  ink: \"#0F1A5C\"\n  ink-2: \"#1B2774\"\n  ink-3: \"#3A4593\"\n  paper: \"#F1E9D6\"\n  rule: \"rgba(15, 26, 92, 0.22)\"\n  rule-strong: \"rgba(15, 26, 92, 0.85)\"\n\ntypography:\n  numeral-jumbo:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 460\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.04em\n  display-section:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 200\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.015em\n  display-cover:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 184\n    fontWeight: 900\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n  display:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 130\n    fontWeight: 900\n    lineHeight: 0.96\n    letterSpacing: -0.015em\n  display-md:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 128\n    fontWeight: 900\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n  display-sm:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 120\n    fontWeight: 900\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n  headline-xl:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 104\n    fontWeight: 900\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n  headline:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 92\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.02em\n  ornament-word-lg:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 84\n    fontWeight: 800\n    lineHeight: 1\n  ornament-word:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 76\n    fontWeight: 800\n    lineHeight: 1\n  ornament-word-sm:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 68\n    fontWeight: 800\n    lineHeight: 1\n  title-card-lg:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 64\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.005em\n  title-card:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 48\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.005em\n  title-card-sm:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 44\n    fontWeight: 800\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n  step-numeral:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 80\n    fontWeight: 900\n    lineHeight: 1\n  step-title:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 40\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.005em\n  kpi-figure:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 144\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  kpi-figure-unit:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 60\n    fontWeight: 800\n  stat-figure:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 92\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.02em\n  stat-figure-unit:\n    fontFamily: \"'Bodoni Moda', serif\"\n    fontSize: 48\n    fontWeight: 900\n  eyebrow:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 28\n    fontWeight: 800\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 26\n    fontWeight: 700\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  label-tight:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 26\n    fontWeight: 700\n    letterSpacing: 0.05em\n    textTransform: uppercase\n  tag:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 24\n    fontWeight: 800\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  caption:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 24\n    fontWeight: 700\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  body-lg:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 28\n    fontWeight: 500\n    lineHeight: 1.5\n  body:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 26\n    fontWeight: 500\n    lineHeight: 1.5\n  body-sm:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 24\n    fontWeight: 500\n    lineHeight: 1.45\n  credit:\n    fontFamily: \"'Manrope', sans-serif\"\n    fontSize: 28\n    fontWeight: 700\n    letterSpacing: 0.18em\n    textTransform: uppercase\n\nspacing:\n  pad-default: \"110px 110px 70px\"\n  pad-cover: \"56px 110px\"\n  pad-closing: \"80px 110px\"\n  pad-statement: \"110px 110px 70px\"\n  masthead-inset: \"56px 80px\"\n  rule-thick: \"4px\"\n  rule-thicker: \"5px\"\n  rule-thin: \"2px\"\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  ornament-double-rule:\n    description: \"The system's signature treatment. A centered serif word framed by two stacked 4px horizontal rules on each side. The rules sit 3px apart on top and 3px apart on bottom, giving a 19th-century playbill / theatrical-poster bracket effect. Configurable via :root[data-ornament] to switch between double (default), single, or none.\"\n    ruleHeight: \"4px\"\n    ruleGap: \"3px\"\n    wordWeight: 800\n    wordFamily: \"'Bodoni Moda', serif\"\n  ornament-vertical:\n    description: \"An inline horizontal pair of stacked rules (each 4px tall, 8px apart) on either side of a small serif word. Used as a side bracket around connector words like prepositions.\"\n    ruleHeight: \"4px\"\n    ruleGap: \"8px\"\n    barWidth: \"64px\"\n  masthead:\n    position: \"absolute\"\n    placement: \"top: 56px, full-width between 80px side padding\"\n    layout: \"flex space-between\"\n    typography: \"{typography.label-tight}\"\n    color: \"{colors.ink}\"\n  footline:\n    position: \"absolute\"\n    placement: \"bottom: 56px, full-width between 80px side padding\"\n    layout: \"flex space-between\"\n    typography: \"{typography.label-tight}\"\n    color: \"{colors.ink}\"\n  rule-h-thick:\n    height: \"4px\"\n    background: \"{colors.ink}\"\n    description: \"Universal 4px horizontal rule used as section separator and tile/row border. The system's standard rule weight.\"\n  agenda-row:\n    description: \"A three-column grid row (130px / 1fr / 320px) with 4px ink top borders. Holds a serif ordinal, serif name, and sans-serif kind label. The last row in a list also carries a 4px bottom border, sealing the list.\"\n    rowPad: \"26px 0\"\n    topBorder: \"4px solid {colors.ink}\"\n  inverse-tile:\n    description: \"A solid {colors.ink} rectangle holding {colors.bg} text. Used for chart-card containers, kpi tiles, process steps, section-opener panels. Carries no corner radius and no shadow.\"\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"32px to 36px\"\n  paper-tile:\n    description: \"A solid {colors.paper} rectangle holding {colors.ink} text. The alt variant of inverse-tile — used in rotation across a row of process steps or kpi tiles to break the monotony of ink fills.\"\n    background: \"{colors.paper}\"\n    color: \"{colors.ink}\"\n  mark-pill:\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"10px 22px\"\n    fontWeight: 700\n    letterSpacing: 0.1em\n    fontSize: 24\n    textTransform: uppercase\n    description: \"A small ink-on-bg pill used as a category mark or section tag. No border-radius — strict rectangle.\"\n  tag-pill:\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"8px 20px\"\n    fontWeight: 700\n    letterSpacing: 0.12em\n    fontSize: 24\n    textTransform: uppercase\n  delta-pill:\n    background: \"{colors.bg}\"\n    color: \"{colors.ink}\"\n    padding: \"6px 16px\"\n    fontWeight: 800\n    letterSpacing: 0.08em\n    fontSize: 24\n    textTransform: uppercase\n    description: \"A small bg-on-ink delta indicator placed inside an inverse kpi tile to show change direction. Inverted to ink-on-bg when inside a paper-tile.\"\n  bar:\n    description: \"A vertical rectangular chart bar in bg (primary), paper (alt). Value label printed above bar in Bodoni 30px. No corner radius.\"\n    background: \"{colors.bg} or {colors.paper}\"\n  chart-card:\n    background: \"{colors.ink}\"\n    color: \"{colors.bg}\"\n    padding: \"36px 50px 30px\"\n    gridLineColor: \"rgba(60, 216, 150, 0.22)\"\n    description: \"An ink container framing a bar chart on bg. Y-axis labels are Bodoni 26px on the left; x-axis labels are Manrope 24px. Grid lines are 2px at 22% bg-on-ink.\"\n  ornament-numeral-panel:\n    description: \"A full-bleed inverse panel (ink background) holding a single oversized Bodoni numeral (~460px weight 900) centered. Used as a section-opener device. Topbar / footline strings sit absolutely positioned in the panel corners.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nEmerald Editorial is a **bold display-serif editorial system** rooted in the visual language of fashion magazines and 19th-century theatrical playbills. The foundational premise is a single typographic face — **Bodoni Moda at weight 900** — used at unapologetic scale: 92px for routine headlines, 130–200px for statements and section openers, and 460px for hero numerals. The serif is loud, theatrical, and confident. Every slide leads with type, not with image.\n\nThe palette is a tight three-color editorial set: a **saturated emerald green** (`{colors.bg}` — #3CD896) as the dominant surface, a **deep navy ink** (`{colors.ink}` — #0F1A5C) as both the primary text color and the inverse-panel surface, and an **oat paper** (`{colors.paper}` — #F1E9D6) as the secondary surface for alternate tiles. The navy / emerald contrast is the system's chromatic identity; every body of text is navy-on-emerald or emerald-on-navy. Two near-duplicates of the emerald (`{colors.bg-2}`, `{colors.bg-3}`) and two of the navy (`{colors.ink-2}`, `{colors.ink-3}`) exist in the token system but are reserved — the published slides commit almost entirely to the three primaries.\n\nThe supporting typeface is **Manrope**, a humanist geometric sans, run at weight 500 for body paragraphs and weight 700–800 in uppercase with wide letter-spacing for every label, tag, eyebrow, caption, and footline. Manrope never crosses into display territory — it stops at 28px and stays in the chrome layer.\n\nThe signature treatment is the **double-rule ornament** — a centered serif word framed by two stacked 4px horizontal rules on each side, with 3px between the rules. This treatment appears as the cover's centerpiece and as a recurring statement bracket. It reads as a 19th-century playbill or vintage program — a \"The [word] of [word]\" framing device. The double-rule ornament is configurable to a single-rule or no-rule variant via a `:root[data-ornament]` attribute, but the double variant is the system's identity.\n\nDepth is **flat and ink-based**. There are no drop shadows, no gradients, no blur, no glow. Every surface is solid emerald, solid navy, or solid paper. Elevation happens through color-block inversion (a navy tile on the emerald canvas is the \"elevated\" element) and 4px ink rules separating sections. The whole system reads as printed ink on paper, not as a digital interface.\n\n**Density philosophy: medium-full and centered.** Most slides carry one display headline at scale (92–200px) plus 3–4 supporting elements (a stat row, a kpi grid, a process flow, a chart card). The slide padding of 110px gives breathing room, and the masthead/footline chrome at top and bottom anchors the page. A slide that crams six small elements reads as broken; a slide with one giant headline plus three supporting tiles reads as authoritative. Reach for fewer, larger elements. The exception: the agenda-list pattern (a vertical list of large-numbered rows separated by 4px ink rules) is naturally dense and fills the canvas vertically — and it should, when used.\n\n**Key Characteristics:**\n- Bodoni Moda at weight 900 for every display moment; Manrope at weight 500/700/800 for every body and label moment.\n- Saturated emerald canvas (`{colors.bg}`) with deep navy ink (`{colors.ink}`) text and inverse panels.\n- Double-rule ornament with centered serif word is the signature decorative device.\n- 4px ink horizontal rules separate every stacked section, every list row, every chart border. The 4px weight is the system's default rule.\n- No corner radius anywhere. Every shape is a strict rectangle, except for the round logo/typographic glyphs themselves.\n- No shadows, no gradients, no blur. Depth is color-block inversion + 4px rules.\n- Display type scales aggressively — 184–460px for hero / section-opener / closing moments.\n- Manrope chrome (labels, tags, captions) is always uppercase with 0.05em–0.18em letter-spacing.\n\n## Colors\n\n### Palette\n- **BG / Emerald** (`{colors.bg}` — #3CD896): The dominant slide canvas. A saturated, slightly cool emerald — saturated enough to feel like printed ink, not like a CSS preset. The default slide background.\n- **BG-2** (`{colors.bg-2}` — #2DC684): A slightly darker emerald reserved for tonal variation; available in the token system but used sparingly. Reach for it only when two emerald surfaces sit adjacent and need separation.\n- **BG-3** (`{colors.bg-3}` — #25B377): The darkest emerald variant; similarly reserved.\n- **Ink / Navy** (`{colors.ink}` — #0F1A5C): The deep navy primary. The text color on emerald and paper surfaces; the inverse-panel background color; the rule color; the border color. The system's structural color.\n- **Ink-2** (`{colors.ink-2}` — #1B2774): A slightly lighter navy variant — available for tonal contrast inside ink-on-ink situations, but rarely used.\n- **Ink-3** (`{colors.ink-3}` — #3A4593): The lightest navy variant; reserved.\n- **Paper** (`{colors.paper}` — #F1E9D6): The oat-cream secondary surface. Used as the alt-tile fill in process / kpi rows, as the alt bar-chart series, and anywhere a third \"warm\" surface is needed to break a row of all-navy inverse tiles. Carries `{colors.ink}` text.\n- **Rule** (`{colors.rule}` — `rgba(15, 26, 92, 0.22)`): A semi-transparent navy used only for subtle internal grid lines (e.g., chart grid lines on a dark ground). Not a structural rule color.\n- **Rule Strong** (`{colors.rule-strong}` — `rgba(15, 26, 92, 0.85)`): An 85%-opacity navy, available as a near-solid rule alternative.\n\n### Defaults\n- **Default slide background**: `{colors.bg}` (emerald). Reach for `{colors.ink}` (navy) as a full slide surface when the moment wants gravity (section opener, closing).\n- **Default headline color on emerald**: `{colors.ink}`.\n- **Default headline color on navy**: `{colors.bg}` — emerald-on-navy is the only color flip the system uses for display type.\n- **Default body color on emerald**: `{colors.ink}`.\n- **Default body color on navy**: `{colors.bg}`.\n- **Default body color on paper**: `{colors.ink}`.\n- **Default label / eyebrow / tag color**: `{colors.ink}` on emerald and paper surfaces, `{colors.bg}` on navy surfaces.\n- **Default rule color**: `{colors.ink}` at 4px solid. Always.\n- **Default inverse tile fill**: `{colors.ink}` with `{colors.bg}` text. The alt tile in a row uses `{colors.paper}` with `{colors.ink}` text.\n- **Default delta / pill fill** inside an ink tile: `{colors.bg}` background with `{colors.ink}` text. Inside a paper tile, invert to `{colors.ink}` background with `{colors.bg}` text.\n\nThe palette is intentionally tight. Introducing a fourth chromatic family (red, yellow, orange, lavender) shatters the editorial commitment. Stay inside emerald / navy / paper. The bg-2/3 and ink-2/3 variants exist for tonal nuance but should rarely be needed.\n\n## Typography\n\n### Font Family\nThe system loads several display serif families from Google Fonts (Bodoni Moda, Playfair Display, DM Serif Display, Rozha One, Yeseva One) plus Manrope as the supporting sans. **In practice, only Bodoni Moda is used for display** — the other serif families are loaded but dormant, reserved as future variants. Bodoni Moda is the canonical display face; the others are not part of the system's voice.\n\nBodoni Moda is run almost exclusively at **weight 900** — the heaviest cut. Weight 800 appears for small ornament words and tile titles (slightly less heavy so they don't compete with the primary headline). Weight 700 appears once or twice for the smallest ornament prepositions. There is no weight-500 Bodoni in the published system. The 900-weight commitment is what gives the system its theatrical-playbill voice.\n\nManrope handles everything else: body paragraphs at weight 500, labels / eyebrows / tags / captions at weight 700 or 800 in uppercase with 0.05em–0.18em letter-spacing. Manrope never appears at display scale; Bodoni never appears at chrome scale.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.numeral-jumbo}` | 460px | Bodoni Moda | 900 | Hero numeral on an inverse section-opener panel |\n| `{typography.display-section}` | 200px | Bodoni Moda | 900 | Agenda / section-title hero |\n| `{typography.display-cover}` | 184px | Bodoni Moda | 900 | Cover masthead title |\n| `{typography.display}` | 130px | Bodoni Moda | 900 | Statement / pull-quote scale |\n| `{typography.display-md}` | 128px | Bodoni Moda | 900 | KPI-row introductory headline |\n| `{typography.display-sm}` | 120px | Bodoni Moda | 900 | Process-flow introductory headline |\n| `{typography.headline-xl}` | 104px | Bodoni Moda | 900 | Chart / data introductory headline |\n| `{typography.headline}` | 92px | Bodoni Moda | 900 | Routine slide headline |\n| `{typography.ornament-word-lg}` | 84px | Bodoni Moda | 800 | Large ornament-bracketed word (statement variant) |\n| `{typography.ornament-word}` | 76px | Bodoni Moda | 800 | Standard ornament-bracketed word (cover variant) |\n| `{typography.ornament-word-sm}` | 68px | Bodoni Moda | 800 | Cover preposition between the double-rule brackets |\n| `{typography.kpi-figure}` | 144px | Bodoni Moda | 900 | KPI-tile numeral |\n| `{typography.kpi-figure-unit}` | 60px | Bodoni Moda | 800 | Unit suffix on a KPI numeral |\n| `{typography.stat-figure}` | 92px | Bodoni Moda | 900 | Secondary stat numeral (in a side panel) |\n| `{typography.stat-figure-unit}` | 48px | Bodoni Moda | 900 | Unit suffix on a secondary stat |\n| `{typography.title-card-lg}` | 64px | Bodoni Moda | 800 | Title inside a large card / agenda-row name |\n| `{typography.title-card}` | 48px | Bodoni Moda | 800 | Chart-card take-away title |\n| `{typography.title-card-sm}` | 44px | Bodoni Moda | 800 | Statement-supporting cell title |\n| `{typography.step-numeral}` | 80px | Bodoni Moda | 900 | Process-step ordinal |\n| `{typography.step-title}` | 40px | Bodoni Moda | 800 | Process-step title (sits below a top rule) |\n| `{typography.body-lg}` | 28px | Manrope | 500 | Lede / subtitle paragraph |\n| `{typography.body}` | 26px | Manrope | 500 | Standard body paragraph |\n| `{typography.body-sm}` | 24px | Manrope | 500 | Compact body in a tile / chart side panel |\n| `{typography.eyebrow}` | 28px | Manrope | 800 / 0.18em | Section eyebrow above a headline |\n| `{typography.label}` | 26px | Manrope | 700 / 0.08em | Masthead / footline label |\n| `{typography.label-tight}` | 26px | Manrope | 700 / 0.05em | Cover top/bottom strings |\n| `{typography.tag}` | 24px | Manrope | 800 / 0.12em | Inverse pill / tag (mark, delta, side-tag) |\n| `{typography.caption}` | 24px | Manrope | 700 / 0.1em | Agenda-row kind label, chart x-axis, kpi label |\n| `{typography.credit}` | 28px | Manrope | 700 / 0.18em | Author / org credit row |\n\n### Defaults\n- **Default size for a routine slide headline**: `{typography.headline}` (92px).\n- **Default size for a hero / cover-scale moment**: `{typography.display-cover}` (184px) or `{typography.display-section}` (200px).\n- **Default size for a body paragraph**: `{typography.body}` (26px) in Manrope weight 500.\n- **Default size for a body paragraph inside a tile**: `{typography.body-sm}` (24px).\n- **Default size for an eyebrow above a headline**: `{typography.eyebrow}` (28px) in Manrope 800 uppercase 0.18em.\n- **Default size for a tag / pill / chip**: `{typography.tag}` (24px) in Manrope 800 uppercase 0.12em.\n- **Default size for a KPI figure**: `{typography.kpi-figure}` (144px) with an optional 60px unit.\n- **Default weight for any Bodoni display moment**: 900. The 800 variant is reserved for ornament words and tile titles, never for primary headlines.\n- **Default weight for any Manrope body line**: 500.\n\nWhen unsure, reach for `{typography.headline}` (92px) for the slide's primary headline. The 120–200px tier is reserved for section openers, statements, and KPI-row headlines — using it for routine headlines flattens the hierarchy.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every primary Bodoni headline runs at weight 900 with negative letter-spacing (-0.01em to -0.03em) and tight line-height (0.9–0.95).** A weight-700 or weight-800 Bodoni headline reads as a sub-headline, not a primary moment.\n- **Every Manrope label, eyebrow, tag, caption, footline, and credit element is UPPERCASE with letter-spacing of at least 0.05em.** Manrope in sentence case or with default tracking reads as web app body, not editorial chrome.\n- **The double-rule ornament, when used, is bilateral — rules on both sides of the centered word.** A one-sided ornament breaks the bracket symmetry. The ornament can be downgraded to a single-rule or no-rule variant via `:root[data-ornament]`, but the default and recommended form is double.\n- **Every section separator and tile divider is a 4px solid `{colors.ink}` rule.** Never 1px, never 2px, never colored beyond ink. The 4px weight is the system's structural rhythm.\n- **Inverse tiles always carry `{colors.ink}` background with `{colors.bg}` text.** The alt paper tile carries `{colors.paper}` background with `{colors.ink}` text. Color combinations outside these pairings break the system's printed-ink discipline.\n- **Bodoni numerals at jumbo scale (200px+) live on inverse navy panels.** Putting a 460px numeral on the emerald canvas is technically possible but visually breaks the panel-anchored playbill voice; the jumbo numerals belong inside ink panels.\n\n### Typography Principles\nThe weight 900 + negative tracking + tight leading combination is the system's display voice. Switching any of those three properties (e.g., weight 700, or default tracking, or 1.2 leading) reads as a different design system. The serif/sans role split is strict: Bodoni never appears at body / label scale, Manrope never appears at display scale.\n\nItalics are loaded in the Bodoni font request but not used in the published system — keep them out unless intentionally introducing a new pattern. Underline is not used. Emphasis is communicated through size, color inversion, and ornamentation.\n\n## Layout\n\n### Canvas System\nThe system targets a fixed **1920×1080** canvas. Slides are `<section class=\"slide\">` elements at exact width/height. Rendering relies on `deck-stage.js` to scale the canvas to fit the viewport. The canvas is paper-stock, not a viewport — designed for projector, printer, or PDF export at 16:9.\n\n### Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-default}` | 110px 110px 70px | Standard content slide (asymmetric — slightly less bottom for footline) |\n| `{spacing.pad-cover}` | 56px 110px | Cover slide (less top padding to give masthead room) |\n| `{spacing.pad-closing}` | 80px 110px | Closing slide |\n| `{spacing.masthead-inset}` | 56px top, 80px sides | Absolute masthead / footline inset on cover and closing |\n\n### Chrome Anatomy\nThe cover and closing carry a **masthead** at top (a Manrope flex row with two label strings on opposite sides) and a **footline** at bottom (a matching row). Content slides typically skip the masthead and footline, leaning on the 110px-top padding to give the headline space. When the masthead is used, it lives at `top: 56px, left/right: 80px`.\n\n### Card and Tile Treatment\nThe system has **no border-radius anywhere**. Cards, tiles, kpi panels, ornament rules, mark pills, tag pills — all strict rectangles. The only round shapes are the natural curves of the Bodoni glyphs themselves. The visual rhythm comes entirely from rectangle composition and 4px ink rules.\n\n### Rule Weights\n| Weight | Use |\n|---|---|\n| 2px | Chart grid lines (subtle, semi-transparent) |\n| 4px | Universal structural rule — section separators, list-row borders, tile top rules |\n| 5px | Cover ornament rules (slightly heavier so they hold weight next to the 184px display headline) |\n| 18px height (with 4px rule top + 4px rule bottom) | Double-rule ornament span |\n\nThe 4px weight is the system's default; reach for it unless the moment specifically needs the cover's heavier 5px rules.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThe system uses **zero shadows**. No box-shadow, no text-shadow, no filter blur, no gradient. Elevation is communicated entirely through:\n\n1. **Color-block inversion** — a navy tile on the emerald canvas is the system's \"elevated\" element. Inversion is the depth language.\n2. **4px ink rules** — sections are separated by 4px solid navy lines that read as paper-fold creases between regions.\n3. **Solid panels with no border-radius** — the strict-rectangle treatment combined with full inverse fill gives tiles the weight of printed ink blocks.\n\nThere is no soft-glow, no glass, no neumorphism. Adding box-shadow shatters the printed-ink discipline.\n\n### Section-Opener Panel\nA signature elevation device: a slide can be split into a full-bleed two-column grid where the left side is a solid `{colors.ink}` panel holding a jumbo Bodoni numeral (`{typography.numeral-jumbo}` at 460px) and the right side is the standard emerald canvas with headline + lede + category marks. The panel reads as a magazine title-page opening — heavy, anchored, ceremonial. Treat this as an opener pattern, not a routine slide layout.\n\n## Shapes and Treatment\n\n### Border Radius\n**Zero.** Every shape is a strict rectangle. Pills, tags, tiles, panels, bars, mastheads, footlines, ornament words — all square corners.\n\n### Border / Rule Style\n- **4px solid `{colors.ink}`** — universal structural rule. Section separators, list-row borders, tile internal rules.\n- **5px solid `{colors.ink}`** — the cover ornament's slightly heavier rule.\n- **4px solid `currentColor`** — used inside tiles where the rule should match the tile's text color (e.g., a paper tile's internal rule is `{colors.ink}`; an ink tile's internal rule is `{colors.bg}`).\n\nRules are never dashed, never dotted, never colored beyond the ink / currentColor pattern.\n\n### Decorative Element Types\n\n**Double-Rule Ornament** (`{components.ornament-double-rule}`) — The system's signature. A centered serif word framed by two stacked 4px horizontal rules on each side (3px between them). Used on the cover (\"The [word] of [word]\" framing), on statement slides (around a small connector word), and anywhere a typographic moment needs theatrical bracketing. Configurable to single-rule or no-rule via `:root[data-ornament]`.\n\n**Vertical Side-Bracket** (`{components.ornament-vertical}`) — A smaller inline variant: a pair of stacked 4px rules on the left and a matching pair on the right of a small serif preposition. Used inline within a sentence rather than as a centered span.\n\n**Masthead / Footline** (`{components.masthead}`, `{components.footline}`) — Absolutely positioned flex rows at top/bottom of cover and closing slides. Two Manrope uppercase strings on opposite sides (e.g., publication name + date; section + page number). Establishes the magazine-page identity.\n\n**Inverse Tile** (`{components.inverse-tile}`) — A solid `{colors.ink}` rectangle holding `{colors.bg}` text. Used as a chart-card container, a kpi tile, a process step, a side panel. No border-radius, no shadow.\n\n**Paper Tile** (`{components.paper-tile}`) — The alt variant: solid `{colors.paper}` with `{colors.ink}` text. Used in rotation across a row of inverse tiles to break monotony (e.g., a four-step process flow alternates ink → paper → ink → paper).\n\n**Mark Pill** (`{components.mark-pill}`) — A small ink-on-bg pill used as a category mark or section tag in the bottom margin of a section opener. Strict rectangle.\n\n**Tag Pill** (`{components.tag-pill}`) — Slightly smaller pill variant used inside chart sides and kpi tiles to mark a takeaway or stat type.\n\n**Delta Pill** (`{components.delta-pill}`) — A bg-on-ink (or inverted ink-on-bg when inside a paper tile) chip showing a directional change indicator (e.g., \"↑ 12% YoY\"). Lives at the corner of a kpi tile.\n\n**Agenda Row** (`{components.agenda-row}`) — A three-column grid row separated above and below by 4px ink rules. Holds a serif ordinal in the left column, a serif name in the middle, and a Manrope kind label in the right. Stacked agenda rows form the system's table-of-contents pattern.\n\n**Chart Card** (`{components.chart-card}`) — A navy inverse panel holding a bar chart on emerald + paper bars. Y-axis labels in Bodoni; x-axis labels in Manrope. Grid lines are 2px at 22% opacity emerald-on-navy. The panel reads as a magazine data-spread.\n\n**Ornament Numeral Panel** (`{components.ornament-numeral-panel}`) — A full-bleed inverse half-slide holding a single Bodoni numeral at 460px. Topbar / footline strings sit in the corners. Used as a section-opener device only.\n\n## Do's and Don'ts\n\n### Do\n- Run every Bodoni display headline at weight 900 with negative letter-spacing (-0.01em to -0.03em) and tight line-height (0.9–0.95). The combination is the system's voice.\n- Run every Manrope label / eyebrow / tag / caption / footline in uppercase with at least 0.05em letter-spacing. Manrope in sentence case loses the editorial register.\n- Default slide background to `{colors.bg}` (emerald). Reach for `{colors.ink}` as a full slide surface only for section openers and closing moments.\n- Use 4px solid `{colors.ink}` rules for every section separator, list border, tile divider. The 4px weight is the system's structural rhythm.\n- Reach for the double-rule ornament when a typographic moment needs theatrical framing — especially around small connector words (\"of\", \"in\", \"for\") between two display headlines.\n- Use inverse tiles (`{colors.ink}` bg with `{colors.bg}` text) as the default elevated element. Rotate in paper tiles to break a row of all-inverse fills.\n- Scale display type aggressively — 130–460px for hero, section-opener, and statement moments. The system rewards scale.\n- Pair ink-on-bg with bg-on-ink for color flips. Do not introduce a third color flip (paper-on-ink, ink-on-paper) without a clear semantic reason.\n- Keep every shape a strict rectangle. The no-radius commitment is the system's signature alongside the double-rule ornament.\n\n### Don't\n- Don't add box-shadow, text-shadow, gradient, or blur to any element. The system is flat printed-ink only.\n- Don't introduce a third typeface beyond Bodoni Moda and Manrope. The other serif families in the Google Fonts request (Playfair, DM Serif, Rozha, Yeseva) are loaded but not part of the published voice — adding them shatters the Bodoni commitment.\n- Don't run Bodoni at weight 500 or lighter. The system commits to 900 (default), 800 (ornament words, tile titles), and 700 (small prepositions only).\n- Don't render Manrope in sentence case or without letter-spacing. Manrope is always uppercase chrome.\n- Don't introduce a fourth chromatic family. The emerald / navy / paper triad is the entire palette.\n- Don't use border-radius on any element. Zero radius is the system's signature.\n- Don't use 1px or 2px structural rules. The 4px weight is the structural default; 2px is reserved for subtle chart grid lines.\n- Don't place a 460px numeral on the emerald canvas without an ink panel anchor. Jumbo numerals live on inverse navy panels.\n- Don't crowd a slide with six small elements. One display headline + 3–4 supporting tiles is the rhythm; more elements need a smaller scale and break the editorial register.\n- Don't omit the masthead / footline on cover and closing slides. The chrome is what makes them read as magazine title pages.\n\n## Responsive Behavior\n\nThis is a **fixed 1920×1080 presentation system** rendered through `deck-stage.js`. The canvas is not responsive in the CSS sense — there are no media queries, no breakpoints, no fluid sizing. Every measurement is in fixed pixels at 1920×1080.\n\n### Scaling Behavior\n`deck-stage.js` wraps each `<section class=\"slide\">` and scales the 1920×1080 canvas uniformly to fit the browser viewport, letterboxing as needed. Type, padding, gaps, and rule weights are all fixed pixels and scale proportionally with the canvas.\n\n### Presenter Behavior\nNavigation is delegated to `deck-stage.js`. Each `<section class=\"slide\">` is one frame; the runtime handles transitions.\n\n### Print / Export\nFixed-pixel measurements inside a 1920×1080 canvas export cleanly to PDF at 16:9. Bodoni Moda renders well at print resolution because the heavy display weight carries the page even at large physical sizes.\n\n### Ornament Variant Switch\nThe `:root[data-ornament]` attribute controls a global ornament style: `\"double\"` (default, two stacked rules), `\"single\"` (one rule centered), or `\"none\"` (no rule, word floats alone). This is a presentation-level decision per deck, not per slide.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display headline (92–460px) | 霞鹜文楷 LXGW WenKai (with Noto Serif SC fallback at 900) | 400 / 900 | LXGW WenKai's hand-lettered warmth is the closest Chinese analog to Bodoni Moda's theatrical-playbill voice; Noto Serif SC at weight 900 carries the structural mass at jumbo sizes |\n| Stat / KPI figure (144px+) | 思源宋体 Noto Serif SC | 900 | Mincho weight 900 provides the printed-ink mass Bodoni Moda achieves at 900 |\n| Body paragraph (24–28px) | 思源宋体 Noto Serif SC | 400 | Mincho body voice for warm magazine-spread reading |\n| Eyebrow / label / tag (24–28px) | 思源黑体 Noto Sans SC | 700–800 | Replaces Manrope for chrome-layer Chinese; geometric humanist quality |\n| Tile mark / pill / caption | 思源黑体 Noto Sans SC | 700 | Maintains the uppercase-tracked chrome feel for inverse pills and tags |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Bodoni Moda as the Latin display face and let CJK glyphs fall through to LXGW WenKai (display) or Noto Serif SC (body). The Bodoni Moda commitment at weight 900 is the entire brand identity of Emerald Editorial; replacing it with a CJK family would break the fashion-magazine / 19th-century playbill register that defines the deck. Stack:\n\n```css\n/* Bodoni Moda roles (every display moment) */\nfont-family: 'Bodoni Moda', 'LXGW WenKai TC', 'Noto Serif SC', Georgia, serif;\n/* Manrope roles (every chrome / body moment) */\nfont-family: 'Manrope', 'Noto Sans SC', system-ui, sans-serif;\n```\n\nThe per-glyph fallback strategy lets Latin words render in Bodoni 900 (with the theatrical compression that gives the system its voice) and Chinese characters render in LXGW WenKai or Noto Serif SC. Baseline mismatch at jumbo sizes (200–460px) is the biggest watchpoint — Bodoni Moda at -0.03em tracking sits visually denser than LXGW WenKai, so a mixed-script numeral panel like `第 3 期` may show wobble. For section-opener panels with jumbo numerals, prefer all-numeric (Bodoni) or all-Chinese (LXGW WenKai) lines.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>` (or as a second link tag):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=LXGW+WenKai+TC&family=Noto+Serif+SC:wght@400;700;900&family=Noto+Sans+SC:wght@500;700;800&display=swap\" rel=\"stylesheet\">\n```\n\nLXGW WenKai TC is the version on Google Fonts (ships both traditional and simplified glyphs).\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.9–0.95 on display, 1.45–1.5 on body) read as cramped in Chinese. Bump display to 1.0–1.1 and body to 1.55–1.65.\n- **Remove negative letter-spacing on CJK headlines.** Bodoni Moda display uses -0.01em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Manrope portion was meant to be capitalized. (This matters here — every Manrope label, eyebrow, tag, caption uses `text-transform: uppercase`.)\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between LXGW WenKai and Noto Serif SC inside the same sentence — pick the face that matches the size tier (display = LXGW WenKai, body = Noto Serif SC) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nEmerald Editorial's whole voice is \"fashion masthead / 19th-century theatrical playbill\" — Bodoni Moda weight 900 at extreme scale with the double-rule ornament bracketing centered words. The Chinese equivalent of that theatrical heaviness is **LXGW WenKai at large display sizes** (its brush-warmth replicates Bodoni's hand-set character) with **Noto Serif SC at weight 900 for jumbo numerals** (where pure mass matters more than warmth). Avoid Noto Sans SC for display — the geometric grotesque flattens the playbill voice into \"modern corporate.\"\n\nThe double-rule ornament works in Chinese — bracket a single Chinese word (e.g., 「春」) between the 4px stacked rules and let LXGW WenKai's warmth carry the theatrical bracket. For the \"The X of Y\" cover convention, Chinese reads naturally as `「X」之「Y」` or `X 与 Y`, with the connector preposition (之 / 与 / 的) replacing the Latin \"of\" inside the small-prep slot. The connector word should use LXGW WenKai at weight 400 (matching the ornament-word-sm role in Latin).\n\nManrope's role as the chrome layer (uppercase + 0.08em–0.18em tracking) translates to **思源黑体 Noto Sans SC weight 700–800 with 0.05em positive tracking** for Chinese. Don't try to fake uppercase — drop the `text-transform: uppercase` rule on CJK runs and let the geometric humanist quality of Noto Sans SC carry the chrome feel through weight and tracking alone.\n\n### Known CJK Gap\n\nThe system's commitment to Bodoni Moda weight 900 at 460px (jumbo numerals on inverse navy panels) is the hardest to translate — there is no Chinese face on the Google Fonts CDN that delivers Bodoni 900's optical heaviness at that scale. Noto Serif SC at weight 900 is the closest, but the contrast profile of Han glyphs at 460px reads visually heavier than Bodoni numerals, which can overwhelm the navy panel. For jumbo-numeral section openers in Chinese, consider: (1) using a Chinese numeral character (一二三四五六七八九十) which sits visually lighter than Western digits, or (2) keeping the numeral in Bodoni (Latin) and letting the panel label below it carry the Chinese context. The pure-Chinese jumbo numeral on this system is the riskiest moment and benefits from per-slide manual review.\n\n## Iteration Guide\n\n1. Any new display headline is Bodoni Moda at weight 900 with negative letter-spacing and tight leading. Pick the size from the display ladder (92 / 104 / 120 / 128 / 130 / 184 / 200) — do not invent a new size.\n2. Any new chrome line (label, eyebrow, tag, caption) is Manrope at weight 700 or 800 uppercase with 0.05em–0.18em letter-spacing. Pick the size from the chrome ladder (24 / 26 / 28).\n3. Any new section separator or list-row border is a 4px solid `{colors.ink}` rule. No 1px / 2px / 3px structural rules.\n4. Any new tile uses the inverse-fill pattern (`{colors.ink}` bg with `{colors.bg}` text) or the paper-fill pattern (`{colors.paper}` bg with `{colors.ink}` text). Mix the two in rotation across a row of tiles.\n5. Any new pill / tag / chip is a strict rectangle (no border-radius) in the inverse-fill or bg-fill color combination from `{components.tag-pill}` / `{components.delta-pill}`.\n6. Any new KPI figure is `{typography.kpi-figure}` (144px) with an optional `{typography.kpi-figure-unit}` (60px) suffix. Smaller KPI sizes are not in the system.\n7. Any new ornament moment uses the double-rule treatment by default. Switch to single or none only via the `:root[data-ornament]` global, not per-element.\n8. Any new section-opener uses the half-bleed inverse panel + jumbo numeral pattern. The numeral lives on the navy panel; the right half holds the eyebrow + headline + lede + marks.\n9. Any new color must come from `{colors.bg}` / `{colors.ink}` / `{colors.paper}` (or the reserved bg-2/3 / ink-2/3 variants if tonal nuance is needed). Do not introduce a yellow, red, or third accent.\n10. When the layout feels crowded, increase the display headline size rather than adding more elements. The system rewards bigger type, not more pieces.\n\n## Known Gaps\n\n- The Google Fonts request loads Bodoni Moda, Playfair Display, DM Serif Display, Rozha One, Yeseva One, and Manrope. **In practice only Bodoni Moda and Manrope are used.** The other four serif families are dormant — loaded but not referenced in the CSS. They are available as alternate display voices but must be wired in explicitly.\n- The system depends on `deck-stage.js` for canvas scaling and slide navigation. The script is not described in this design.md — treat it as a runtime dependency.\n- The `:root[data-ornament]` switch (`double` / `single` / `none`) is a global presentation setting. It cannot be applied per-slide or per-ornament — switching variants applies deck-wide.\n- The ink-2 / ink-3 and bg-2 / bg-3 color tokens are defined but not actively used in the published CSS. They are reserved for tonal variation but currently dormant.\n- The bar chart uses hand-set bar heights (CSS `%`). There is no data-binding layer — extending the chart requires manually computing percentages.\n- Offline rendering will fall back to system serif (likely Georgia) for Bodoni and system sans (likely SF/Segoe) for Manrope. The Bodoni fallback dramatically flattens the display voice; self-hosting recommended for offline / print reliability.\n- The 92px Bodoni headlines maintain WCAG AA contrast at navy-on-emerald and emerald-on-navy, but smaller text (24–28px Manrope) on the same color pairings approaches the contrast floor. Keep small text in navy-on-emerald (the more contrastful direction) when possible.\n- The masthead and footline strings are hardcoded placeholders in the source (publication name, date, page numbers). They must be edited per-deck.\n- The system has no `@media print` rule and no responsive breakpoints. It is fixed 1920×1080 and relies on `deck-stage.js` for any viewport adaptation.\n","frontmatter":{"version":"alpha","name":"Emerald Editorial","description":"A bold display-serif editorial system in the register of a fashion masthead or vintage magazine cover. Bodoni Moda runs at weight 900 across a wide scale (44–460px), set against a saturated emerald-green canvas with deep navy ink and oat-paper accents. The signature treatment is a stacked double-rule ornament that brackets centered display words like a 19th-century theatrical playbill. The aesthetic borrows from Harper's Bazaar / Vogue / Wallpaper covers: confident, theatrical, paper-and-ink committed, with a tight three-color palette and zero gradients or shadows.","colors":{"bg":"#3CD896","bg-2":"#2DC684","bg-3":"#25B377","ink":"#0F1A5C","ink-2":"#1B2774","ink-3":"#3A4593","paper":"#F1E9D6","rule":"rgba(15, 26, 92, 0.22)","rule-strong":"rgba(15, 26, 92, 0.85)"},"typography":{"numeral-jumbo":{"fontFamily":"'Bodoni Moda', serif","fontSize":460,"fontWeight":900,"lineHeight":0.9,"letterSpacing":"-0.04em"},"display-section":{"fontFamily":"'Bodoni Moda', serif","fontSize":200,"fontWeight":900,"lineHeight":0.9,"letterSpacing":"-0.015em"},"display-cover":{"fontFamily":"'Bodoni Moda', serif","fontSize":184,"fontWeight":900,"lineHeight":0.92,"letterSpacing":"-0.01em"},"display":{"fontFamily":"'Bodoni Moda', serif","fontSize":130,"fontWeight":900,"lineHeight":0.96,"letterSpacing":"-0.015em"},"display-md":{"fontFamily":"'Bodoni Moda', serif","fontSize":128,"fontWeight":900,"lineHeight":0.95,"letterSpacing":"-0.015em"},"display-sm":{"fontFamily":"'Bodoni Moda', serif","fontSize":120,"fontWeight":900,"lineHeight":0.95,"letterSpacing":"-0.015em"},"headline-xl":{"fontFamily":"'Bodoni Moda', serif","fontSize":104,"fontWeight":900,"lineHeight":0.95,"letterSpacing":"-0.015em"},"headline":{"fontFamily":"'Bodoni Moda', serif","fontSize":92,"fontWeight":900,"lineHeight":1,"letterSpacing":"-0.02em"},"ornament-word-lg":{"fontFamily":"'Bodoni Moda', serif","fontSize":84,"fontWeight":800,"lineHeight":1},"ornament-word":{"fontFamily":"'Bodoni Moda', serif","fontSize":76,"fontWeight":800,"lineHeight":1},"ornament-word-sm":{"fontFamily":"'Bodoni Moda', serif","fontSize":68,"fontWeight":800,"lineHeight":1},"title-card-lg":{"fontFamily":"'Bodoni Moda', serif","fontSize":64,"fontWeight":800,"lineHeight":1,"letterSpacing":"-0.005em"},"title-card":{"fontFamily":"'Bodoni Moda', serif","fontSize":48,"fontWeight":800,"lineHeight":1,"letterSpacing":"-0.005em"},"title-card-sm":{"fontFamily":"'Bodoni Moda', serif","fontSize":44,"fontWeight":800,"lineHeight":1.05,"letterSpacing":"-0.005em"},"step-numeral":{"fontFamily":"'Bodoni Moda', serif","fontSize":80,"fontWeight":900,"lineHeight":1},"step-title":{"fontFamily":"'Bodoni Moda', serif","fontSize":40,"fontWeight":800,"lineHeight":1,"letterSpacing":"-0.005em"},"kpi-figure":{"fontFamily":"'Bodoni Moda', serif","fontSize":144,"fontWeight":900,"lineHeight":0.9,"letterSpacing":"-0.03em"},"kpi-figure-unit":{"fontFamily":"'Bodoni Moda', serif","fontSize":60,"fontWeight":800},"stat-figure":{"fontFamily":"'Bodoni Moda', serif","fontSize":92,"fontWeight":900,"lineHeight":1,"letterSpacing":"-0.02em"},"stat-figure-unit":{"fontFamily":"'Bodoni Moda', serif","fontSize":48,"fontWeight":900},"eyebrow":{"fontFamily":"'Manrope', sans-serif","fontSize":28,"fontWeight":800,"letterSpacing":"0.18em","textTransform":"uppercase"},"label":{"fontFamily":"'Manrope', sans-serif","fontSize":26,"fontWeight":700,"letterSpacing":"0.08em","textTransform":"uppercase"},"label-tight":{"fontFamily":"'Manrope', sans-serif","fontSize":26,"fontWeight":700,"letterSpacing":"0.05em","textTransform":"uppercase"},"tag":{"fontFamily":"'Manrope', sans-serif","fontSize":24,"fontWeight":800,"letterSpacing":"0.12em","textTransform":"uppercase"},"caption":{"fontFamily":"'Manrope', sans-serif","fontSize":24,"fontWeight":700,"letterSpacing":"0.1em","textTransform":"uppercase"},"body-lg":{"fontFamily":"'Manrope', sans-serif","fontSize":28,"fontWeight":500,"lineHeight":1.5},"body":{"fontFamily":"'Manrope', sans-serif","fontSize":26,"fontWeight":500,"lineHeight":1.5},"body-sm":{"fontFamily":"'Manrope', sans-serif","fontSize":24,"fontWeight":500,"lineHeight":1.45},"credit":{"fontFamily":"'Manrope', sans-serif","fontSize":28,"fontWeight":700,"letterSpacing":"0.18em","textTransform":"uppercase"}},"spacing":{"pad-default":"110px 110px 70px","pad-cover":"56px 110px","pad-closing":"80px 110px","pad-statement":"110px 110px 70px","masthead-inset":"56px 80px","rule-thick":"4px","rule-thicker":"5px","rule-thin":"2px"},"canvas":{"width":"1920px","height":"1080px"},"components":{"ornament-double-rule":{"description":"The system's signature treatment. A centered serif word framed by two stacked 4px horizontal rules on each side. The rules sit 3px apart on top and 3px apart on bottom, giving a 19th-century playbill / theatrical-poster bracket effect. Configurable via :root[data-ornament] to switch between double (default), single, or none.","ruleHeight":"4px","ruleGap":"3px","wordWeight":800,"wordFamily":"'Bodoni Moda', serif"},"ornament-vertical":{"description":"An inline horizontal pair of stacked rules (each 4px tall, 8px apart) on either side of a small serif word. Used as a side bracket around connector words like prepositions.","ruleHeight":"4px","ruleGap":"8px","barWidth":"64px"},"masthead":{"position":"absolute","placement":"top: 56px, full-width between 80px side padding","layout":"flex space-between","typography":"{typography.label-tight}","color":"{colors.ink}"},"footline":{"position":"absolute","placement":"bottom: 56px, full-width between 80px side padding","layout":"flex space-between","typography":"{typography.label-tight}","color":"{colors.ink}"},"rule-h-thick":{"height":"4px","background":"{colors.ink}","description":"Universal 4px horizontal rule used as section separator and tile/row border. The system's standard rule weight."},"agenda-row":{"description":"A three-column grid row (130px / 1fr / 320px) with 4px ink top borders. Holds a serif ordinal, serif name, and sans-serif kind label. The last row in a list also carries a 4px bottom border, sealing the list.","rowPad":"26px 0","topBorder":"4px solid {colors.ink}"},"inverse-tile":{"description":"A solid {colors.ink} rectangle holding {colors.bg} text. Used for chart-card containers, kpi tiles, process steps, section-opener panels. Carries no corner radius and no shadow.","background":"{colors.ink}","color":"{colors.bg}","padding":"32px to 36px"},"paper-tile":{"description":"A solid {colors.paper} rectangle holding {colors.ink} text. The alt variant of inverse-tile — used in rotation across a row of process steps or kpi tiles to break the monotony of ink fills.","background":"{colors.paper}","color":"{colors.ink}"},"mark-pill":{"background":"{colors.ink}","color":"{colors.bg}","padding":"10px 22px","fontWeight":700,"letterSpacing":"0.1em","fontSize":24,"textTransform":"uppercase","description":"A small ink-on-bg pill used as a category mark or section tag. No border-radius — strict rectangle."},"tag-pill":{"background":"{colors.ink}","color":"{colors.bg}","padding":"8px 20px","fontWeight":700,"letterSpacing":"0.12em","fontSize":24,"textTransform":"uppercase"},"delta-pill":{"background":"{colors.bg}","color":"{colors.ink}","padding":"6px 16px","fontWeight":800,"letterSpacing":"0.08em","fontSize":24,"textTransform":"uppercase","description":"A small bg-on-ink delta indicator placed inside an inverse kpi tile to show change direction. Inverted to ink-on-bg when inside a paper-tile."},"bar":{"description":"A vertical rectangular chart bar in bg (primary), paper (alt). Value label printed above bar in Bodoni 30px. No corner radius.","background":"{colors.bg} or {colors.paper}"},"chart-card":{"background":"{colors.ink}","color":"{colors.bg}","padding":"36px 50px 30px","gridLineColor":"rgba(60, 216, 150, 0.22)","description":"An ink container framing a bar chart on bg. Y-axis labels are Bodoni 26px on the left; x-axis labels are Manrope 24px. Grid lines are 2px at 22% bg-on-ink."},"ornament-numeral-panel":{"description":"A full-bleed inverse panel (ink background) holding a single oversized Bodoni numeral (~460px weight 900) centered. Used as a section-opener device. Topbar / footline strings sit absolutely positioned in the panel corners."}}},"isInternal":false,"tokens":11622,"sizeBytes":45075},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/emerald-editorial/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/emerald-editorial/preview.md","title":"Emerald-editorial Skill","category":"anthropic-skill","format":"markdown","content":"# Emerald Editorial Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/emerald-editorial/design.md`\n- Preview card: `bold-template-pack/templates/emerald-editorial/preview.md`\n\n## Selection Metadata\n\n- Slug: `emerald-editorial`\n- Tagline: A magazine-cover business deck: emerald + navy + paper, double-rule masthead ornaments, and a bold Bodoni-style display serif.\n- Mood: editorial, considered, confident, magazine-cover\n- Tone: literary, authoritative, warm, designed\n- Formality: medium-high\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel like the front of a serious magazine, including but not limited to leadership readouts, planning-office reviews, and strategy briefings. The double-rule masthead ornament gives it editorial gravitas without making it stiff — also a great unexpected pick for product launches or research recaps that want to feel considered rather than corporate.\n- Avoid for: Contexts that need to read as quiet, neutral, or institutionally restrained — the emerald field is too saturated to disappear into the background.\n\n## Visual Snapshot\n\nA bold display-serif editorial system in the register of a fashion masthead or vintage magazine cover. Bodoni Moda runs at weight 900 across a wide scale (44–460px), set against a saturated emerald-green canvas with deep navy ink and oat-paper accents. The signature treatment is a stacked double-rule ornament that brackets centered display words like a 19th-century theatrical playbill. The aesthetic borrows from Harper's Bazaar / Vogue / Wallpaper covers: confident, theatrical, paper-and-ink committed, with a tight three-color palette and zero gradients or shadows.\n\nEmerald Editorial is a bold display-serif editorial system rooted in the visual language of fashion magazines and 19th-century theatrical playbills. The foundational premise is a single typographic face — Bodoni Moda at weight 900 — used at unapologetic scale: 92px for routine headlines, 130–200px for statements and section openers, and 460px for hero numerals. The serif is loud, theatrical, and confident. Every slide leads with type, not with image.\n\n## Preview Ingredients\n\n- Palette: bg #3CD896; bg-2 #2DC684; bg-3 #25B377; ink #0F1A5C; ink-2 #1B2774; ink-3 #3A4593; paper #F1E9D6\n- Typography: See full design doc after selection.\n- Signature move: Bodoni Moda at weight 900 for every display moment; Manrope at weight 500/700/800 for every body and label moment.\n- Signature move: Saturated emerald canvas ({colors.bg}) with deep navy ink ({colors.ink}) text and inverse panels.\n- Signature move: Double-rule ornament with centered serif word is the signature decorative device.\n- Signature move: 4px ink horizontal rules separate every stacked section, every list row, every chart border. The 4px weight is the system's default rule.\n- Signature move: No corner radius anywhere. Every shape is a strict rectangle, except for the round logo/typographic glyphs themselves.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1018,"sizeBytes":4594},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/grove/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/grove/design.md","title":"Grove","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Grove\ndescription: A quiet, editorial-serif presentation system in the register of a well-bound monograph or boutique brand book. Playfair Display at weight 400 (never bold) carries every headline, italicized in terracotta coral for accent emphasis as the signature move. Jost weight 300 carries every paragraph as the \"good paper\" body face. JetBrains Mono at weight 300 holds labels, kickers, and the thin chrome bars. The palette pairs a deep forest green canvas (#192b1b) with warm cream text (#d4cfbf) and a single terracotta coral accent (#c8524a). Generous negative space, hairline 1px borders, and a near-invisible serif watermark numeral give it the calm authority of a literary journal.\n\ncolors:\n  bg: \"#192b1b\"\n  bg-alt: \"#1e3221\"\n  bg-light: \"#e8e4d6\"\n  bg-light-alt: \"#dedad0\"\n  fg: \"#d4cfbf\"\n  fg-2: \"rgba(212, 207, 191, 0.6)\"\n  fg-3: \"rgba(212, 207, 191, 0.32)\"\n  fg-light: \"#192b1b\"\n  fg-light-2: \"rgba(25, 43, 27, 0.58)\"\n  fg-light-3: \"rgba(25, 43, 27, 0.33)\"\n  accent: \"#c8524a\"\n  border: \"rgba(212, 207, 191, 0.12)\"\n  border-light: \"rgba(25, 43, 27, 0.14)\"\n  watermark-dark: \"rgba(212, 207, 191, 0.06)\"\n  watermark-light: \"rgba(25, 43, 27, 0.06)\"\n\ncolor-aliases:\n  fg-light: bg\n  fg-light-canonical: \"fg-light shares hex #192b1b with bg — the green is reused as both surface and primary text-on-light\"\n\ntypography:\n  display:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"10vw\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.01em\n  h1:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"5.5vw\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h1-statement:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"min(4.5vw, 7.5vh, 88px)\"\n    fontWeight: 400\n    lineHeight: 1.15\n  h2:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"3.2vw\"\n    fontWeight: 400\n    lineHeight: 1.2\n  h3:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"2vw\"\n    fontWeight: 400\n    lineHeight: 1.3\n  quote-text:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"3.2vw\"\n    fontWeight: 400\n    lineHeight: 1.35\n    letterSpacing: -0.01em\n    fontStyle: italic\n  quote-mark:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"8vw\"\n    fontWeight: 400\n    lineHeight: 0.6\n  stat-value:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"4.5vw\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.02em\n  grove-num:\n    fontFamily: \"'Playfair Display', 'Noto Serif SC', Georgia, serif\"\n    fontSize: \"18vw\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.03em\n  lead:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"1.45vw\"\n    fontWeight: 300\n    lineHeight: 1.65\n  body:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"1.05vw\"\n    fontWeight: 300\n    lineHeight: 1.75\n  body-list-emph:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"max(1.4vw, 17px)\"\n    fontWeight: 300\n    lineHeight: 1.6\n  caption:\n    fontFamily: \"'Jost', 'Noto Sans SC', system-ui, sans-serif\"\n    fontSize: \"0.82vw\"\n    fontWeight: 300\n    lineHeight: 1.55\n  label:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.12em\n  kicker:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  chapter-num:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.2em\n    textTransform: uppercase\n  stat-label:\n    fontFamily: \"'JetBrains Mono', monospace\"\n    fontSize: \"0.7vw\"\n    fontWeight: 300\n    letterSpacing: 0.12em\n    textTransform: uppercase\n\nspacing:\n  pad-x: \"8vw\"\n  pad-y: \"6.5vh\"\n  pad-quote-x: \"calc(8vw * 1.1)\"\n  pad-quote-y: \"calc(6.5vh * 1.2)\"\n  gap-lg: \"4.5vh\"\n  gap-md: \"2.8vh\"\n  gap-sm: \"1.4vh\"\n  rule-short: \"36px\"\n\nmotion:\n  ease-slide: \"cubic-bezier(0.77, 0, 0.175, 1)\"\n  dur-slide: \"0.9s\"\n  ease-enter: \"cubic-bezier(0.16, 1, 0.3, 1)\"\n  dur-enter: \"0.7s\"\n  stagger-delays: \"0 / 0.08s / 0.18s / 0.3s / 0.44s / 0.6s / 0.78s\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  slide-chrome:\n    description: \"Thin top bar separating slide content from the page edge. A flex space-between row holding mono label text on each side, separated below by a 1px hairline in {colors.border} (or {colors.border-light} on light slides). Pads with {spacing.gap-sm} above the rule, then {spacing.gap-md} below before content starts.\"\n    border: \"1px solid {colors.border}\"\n    typography: \"{typography.label}\"\n  slide-foot:\n    description: \"Matching bottom bar. Flex space-between row holding section name and 'NN / TT' counter, with 1px hairline border-top. The chrome and foot together frame every content slide; cover, chapter, quote, and end slides hide both.\"\n    border: \"1px solid {colors.border}\"\n    typography: \"{typography.label}\"\n  grove-num:\n    description: \"Massive serif digit placed in the background at very low opacity (6%) as compositional texture. Sits absolutely at right: {spacing.pad-x}, bottom: -0.15em, with pointer-events disabled. The system's signature wallpaper element on chapter and section moments.\"\n    fontSize: \"18vw\"\n    color: \"{colors.watermark-dark} on dark / {colors.watermark-light} on light\"\n  grove-stat:\n    description: \"Stat card: large Playfair value in {colors.accent}, mono uppercase label beneath, 1px border-bottom hairline. No background fill — the card is defined by the rule and the type ratio alone.\"\n    valueColor: \"{colors.accent}\"\n    valueSize: \"4.5vw\"\n    labelTypography: \"{typography.stat-label}\"\n    borderBottom: \"1px solid {colors.border}\"\n  bullet-list:\n    description: \"Two-column grid list (2em / 1fr) where the bullet is a coral em-dash glyph rendered in JetBrains Mono, not a CSS bullet. The em-dash is the system's bullet language.\"\n    bulletGlyph: \"—\"\n    bulletColor: \"{colors.accent}\"\n    bulletFont: \"'JetBrains Mono', monospace\"\n  rule-coral:\n    width: \"{spacing.rule-short}\"\n    height: \"1px\"\n    background: \"{colors.accent}\"\n    description: \"A 36px-wide 1px-tall terracotta coral rule. The compositional beat between a kicker and the headline that follows.\"\n  rule-full:\n    width: \"100%\"\n    height: \"1px\"\n    background: \"{colors.border} on dark / {colors.border-light} on light\"\n    description: \"Full-width hairline divider. Used between stacked sections inside a slide.\"\n  kicker:\n    typography: \"{typography.kicker}\"\n    color: \"{colors.accent}\"\n    description: \"Mono uppercase eyebrow in coral, placed above an h1/h2 headline.\"\n  chapter-num:\n    typography: \"{typography.chapter-num}\"\n    color: \"{colors.accent}\"\n    marginBottom: \"{spacing.gap-md}\"\n  quote-mark:\n    typography: \"{typography.quote-mark}\"\n    color: \"{colors.accent}\"\n    description: \"Massive Playfair opening-quote glyph in coral, placed above the italic quote body.\"\n  img-placeholder:\n    background: \"{colors.bg-alt} on dark / {colors.border-light} on light\"\n    color: \"{colors.fg-3} on dark / {colors.fg-light-3} on light\"\n    typography: \"{typography.label}\"\n    minHeight: \"30vh\"\n    description: \"Image-region marker — solid darker-than-background fill with a mono caption stating the placeholder text. Use this in place of <img> until a real image is available.\"\n  nav-dots:\n    position: \"fixed\"\n    placement: \"bottom: 24px, horizontally centered\"\n    dotSize: \"5px\"\n    dotBackground: \"rgba(255, 255, 255, 0.22)\"\n    activeBackground: \"rgba(255, 255, 255, 0.8)\"\n    activeTransform: \"scale(1.4)\"\n    description: \"Small white dots at the bottom of the viewport indicating slide position. The fixed counter (#slide-counter) is intentionally disabled — the slide-foot already shows NN / TT.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nGrove is a **quiet, editorial-serif presentation system** in the register of a literary monograph or boutique brand book. The foundational premise is restraint: every slide carries one focused content moment surrounded by deep negative space, anchored by thin 1px chrome bars at top and bottom and supported by a small library of compositional beats (coral kicker, 36px coral rule, italic-coral accent, em-dash bullet, near-invisible watermark numeral).\n\nThe typographic stack runs four faces, each in a single specific weight:\n\n- **Playfair Display at weight 400** carries every headline, every quote, every stat figure, and every watermark numeral. **Bold serif is not permitted** — the no-bold rule is the system's most important typographic commitment. Italicized Playfair in `{colors.accent}` coral is the signature accent move: `<em>` inside any headline switches to italic coral.\n- **Jost at weight 300** carries every paragraph and bullet body. The light weight is the \"good paper\" feel — it sits back and lets the serif lead.\n- **JetBrains Mono at weight 300** carries every label, kicker, footline, slide counter, and stat caption. Always uppercase, always with at least 0.12em letter-spacing.\n- **Noto Serif SC / Noto Sans SC at weight 300–500** are loaded as Chinese fallbacks for every role. The deck is built bilingually-aware — Chinese characters render through the Noto cuts when present in the content.\n\nThe palette is a tight two-surface system with one accent. Dark slides use `{colors.bg}` (a deep forest green) with `{colors.fg}` (warm cream — never pure white) for body text. Light slides flip to `{colors.bg-light}` (warm parchment) with `{colors.fg-light}` (the same forest green now used as text). The single accent is **terracotta coral** (`{colors.accent}` — #c8524a), used only in small, deliberate places: the italic emphasis inside headlines, the 36px rule under a kicker, the em-dash bullet, the stat figure, the chapter ordinal, and the opening quote mark. Coral is the system's accent voice; using it as a surface fill or for body paragraphs shatters the editorial discipline.\n\nDepth is **flat and air-based**. There are no drop shadows, no gradients, no blur, no glow. The only \"depth\" devices are 1px hairline borders (the chrome bars, the stat-card divider, the compare-panel separator) and the watermark numeral at 6% opacity. The whole system reads as printed ink on linen paper, not as a digital surface.\n\nThe system carries a built-in **motion vocabulary**: slide-to-slide transitions use a sharp `cubic-bezier(0.77, 0, 0.175, 1)` pan at 0.9s; element entrances stagger via `[data-anim]` and `[data-delay]` attributes (fade-up / fade-in / reveal-right / reveal-left / scale-in) with a spring-y `cubic-bezier(0.16, 1, 0.3, 1)` curve at 0.7s and delays of 0 / 0.08 / 0.18 / 0.3 / 0.44 / 0.6 / 0.78s. Animation is part of the system identity; new slides should use the animation attribute stack rather than authoring custom transitions.\n\n**Density philosophy: sparse and breathing.** Grove reads as elegant when slides are quiet — one headline, one supporting paragraph, three stats in a row, two columns of text-and-image. The 8vw horizontal and 6.5vh vertical padding is generous by design. A slide that crowds 6 elements into the canvas breaks the system; a slide with one headline, one lede, and one accent rule reads as authoritative. Reach for fewer, larger elements. The system rewards silence around the type, not density of content.\n\n**Key Characteristics:**\n- Playfair Display at weight 400 — never bold — for every serif moment. Italic in `{colors.accent}` is the headline accent.\n- Jost weight 300 for every body paragraph. Lighter weight is the system's \"good paper\" voice.\n- JetBrains Mono weight 300 uppercase with 0.12em–0.2em letter-spacing for every label, kicker, footline, counter, and caption.\n- Dark slides on `{colors.bg}` deep forest green with `{colors.fg}` warm cream text. Light slides on `{colors.bg-light}` parchment with `{colors.fg-light}` green text.\n- One accent color: `{colors.accent}` terracotta coral. Used only for italic headline emphasis, the 36px coral rule, em-dash bullets, stat figures, chapter ordinals, and the quote mark.\n- 1px hairline borders only (`{colors.border}` on dark, `{colors.border-light}` on light). No thick borders, no shadows, no gradients.\n- Em-dash glyph rendered in JetBrains Mono coral is the system's universal bullet.\n- A massive serif watermark numeral (`{components.grove-num}` at 18vw, 6% opacity) sits in the bottom-right corner of chapter and section slides as compositional texture.\n- A staggered fade / reveal animation system (`[data-anim]` + `[data-delay]`) is built-in; new content should use it rather than appearing without entrance.\n\n## Colors\n\n### Palette\n- **BG / Deep Forest** (`{colors.bg}` — #192b1b): The dominant dark canvas. A deep, considered forest green — grounded, editorial, the Grove base. The default slide background.\n- **BG Alt** (`{colors.bg-alt}` — #1e3221): A slightly lighter forest green for secondary dark surfaces. Used as the `{components.img-placeholder}` fill on dark slides, where it reads as a tonal step up from the canvas without leaving the green family.\n- **BG Light / Parchment** (`{colors.bg-light}` — #e8e4d6): The warm parchment surface used on light slides. Reads as good-quality paper stock, not as digital white.\n- **BG Light Alt** (`{colors.bg-light-alt}` — #dedad0): A slightly cooler parchment for secondary light surfaces. Available for tonal separation between adjacent light regions.\n- **FG / Warm Cream** (`{colors.fg}` — #d4cfbf): Primary text color on dark surfaces. Warm cream — never pure white. The off-white temperature is essential to the printed-ink feel.\n- **FG-2** (`{colors.fg-2}` — rgba(212,207,191,0.6)): Secondary / muted text on dark. Used for ledes, captions, and supporting copy that needs to recede from primary.\n- **FG-3** (`{colors.fg-3}` — rgba(212,207,191,0.32)): Tertiary / hint text on dark. Near-invisible — used for image-placeholder captions and the faintest metadata.\n- **FG Light** (`{colors.fg-light}` — #192b1b): Primary text on light surfaces. **Shares its hex with `{colors.bg}`** — the deep forest green is used both as the dark canvas and as the dark text-on-light color. This is the system's primary surface-text inversion device.\n- **FG Light 2** (`{colors.fg-light-2}` — rgba(25,43,27,0.58)): Secondary muted text on light.\n- **FG Light 3** (`{colors.fg-light-3}` — rgba(25,43,27,0.33)): Tertiary text on light.\n- **Accent / Terracotta Coral** (`{colors.accent}` — #c8524a): The single warm note. Used sparingly: italic emphasis inside headlines, the 36px coral rule under a kicker, the em-dash bullet, the stat figure, the chapter ordinal, the opening quote mark, and nav-dot active state. Never used as a surface fill, never used for body paragraphs.\n- **Border** (`{colors.border}` — rgba(212,207,191,0.12)): Hairline divider on dark slides. 12% cream — visible as a structural line but never loud.\n- **Border Light** (`{colors.border-light}` — rgba(25,43,27,0.14)): Hairline divider on light slides. 14% forest green.\n\n### Defaults\n- **Default slide background**: `{colors.bg}` (deep forest green) for the deck's dominant tonal register. Reach for `{colors.bg-light}` (parchment) when the content wants a literal \"page\" feel — typically for quote slides, lighter chapters, or contrast.\n- **Default primary text color on dark surface**: `{colors.fg}` (warm cream).\n- **Default primary text color on light surface**: `{colors.fg-light}` (deep forest green — same hex as the dark surface).\n- **Default secondary / muted text**: `{colors.fg-2}` on dark, `{colors.fg-light-2}` on light. Use the `.muted` utility class.\n- **Default headline color**: matches the surface's primary text color. Headlines never appear in coral except for the italic `<em>` accent inside them.\n- **Default body color**: matches the surface's primary text color.\n- **Default border color**: `{colors.border}` on dark, `{colors.border-light}` on light — both at 1px solid hairline weight.\n- **Default kicker / chapter-num color**: `{colors.accent}` (terracotta coral). The mono uppercase kicker is the only chrome element that takes the accent color.\n- **Default rule color** for the short 36px compositional rule under a kicker: `{colors.accent}`. The full-width section divider rule uses `{colors.border}` instead.\n\nThe palette is intentionally minimal. The dark forest / light parchment / terracotta coral triad is the entire color vocabulary. Introducing a fourth color (a navy, a yellow, a second accent) breaks the system's editorial restraint.\n\n## Typography\n\n### Font Family\nThe system loads four families from Google Fonts:\n\n- **Playfair Display** at weights 400 and 500 (italic and roman). **Only weight 400 is used in published slides.** Weight 500 is loaded but reserved; bold serif (weight 700) is explicitly not permitted by the system rules.\n- **Jost** at weights 200, 300, 400, 500. **Only weight 300 is used.** The light weight is the system's body voice.\n- **JetBrains Mono** at weights 300 and 400. **Only weight 300 is used.** The light mono is the chrome voice.\n- **Noto Serif SC / Noto Sans SC** at weights 300–500, loaded as the Chinese fallback chain for every role.\n\nThe four-family stack is strict by role: Playfair for every serif moment (display, headlines, quotes, stat figures, watermark), Jost for every body paragraph and bullet, JetBrains Mono for every label / kicker / footline / counter / caption.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.grove-num}` | 18vw | Playfair | 400 | Watermark ordinal numeral, 6% opacity, absolute bottom-right |\n| `{typography.display}` | 10vw | Playfair | 400 | Cover hero title |\n| `{typography.quote-mark}` | 8vw | Playfair | 400 | Opening quotation glyph |\n| `{typography.h1}` | 5.5vw | Playfair | 400 | Chapter title, statement headline |\n| `{typography.stat-value}` | 4.5vw | Playfair | 400 / coral | Stat-card numeric value |\n| `{typography.h2}` | 3.2vw | Playfair | 400 | Routine slide headline |\n| `{typography.quote-text}` | 3.2vw | Playfair | 400 italic | Quote body |\n| `{typography.h3}` | 2vw | Playfair | 400 | Sub-headline, compare-panel title |\n| `{typography.lead}` | 1.45vw | Jost | 300 | Lead paragraph |\n| `{typography.body-list-emph}` | max(1.4vw, 17px) | Jost | 300 | List-slide body / bullets — emphasized for legibility |\n| `{typography.body}` | 1.05vw | Jost | 300 | Standard body paragraph |\n| `{typography.caption}` | 0.82vw | Jost | 300 | Captions, footnotes, chart sources |\n| `{typography.label}` | 0.7vw | JetBrains Mono | 300 / 0.12em | Chrome label, mono metadata |\n| `{typography.kicker}` | 0.7vw | JetBrains Mono | 300 / 0.14em / UPPER | Eyebrow above a headline |\n| `{typography.chapter-num}` | 0.7vw | JetBrains Mono | 300 / 0.2em / UPPER | Chapter ordinal label |\n| `{typography.stat-label}` | 0.7vw | JetBrains Mono | 300 / 0.12em / UPPER | Mono label beneath a stat figure |\n\n### Defaults\n- **Default size for a routine slide headline**: `{typography.h2}` (3.2vw).\n- **Default size for a chapter or statement headline**: `{typography.h1}` (5.5vw). For statement-class moments specifically, use `{typography.h1-statement}` which caps at `min(4.5vw, 7.5vh, 88px)` to prevent overflow on short viewports.\n- **Default size for a cover hero title**: `{typography.display}` (10vw).\n- **Default size for a body paragraph**: `{typography.body}` (1.05vw) in Jost weight 300.\n- **Default size for a lede / introductory paragraph**: `{typography.lead}` (1.45vw).\n- **Default size for a kicker / eyebrow**: `{typography.kicker}` (0.7vw) in JetBrains Mono uppercase 0.14em with `{colors.accent}` color.\n- **Default size for a stat-card figure**: `{typography.stat-value}` (4.5vw) in Playfair coral.\n- **Default weight for every serif element**: 400.\n- **Default weight for every body / Jost element**: 300.\n- **Default weight for every mono / JetBrains element**: 300.\n\nWhen the body text on a list-style slide reads too small at 1.05vw on typical laptop viewports, the system bumps it to `{typography.body-list-emph}` (max of 1.4vw or 17px). Reach for the emphasized size whenever a slide's primary content moment is a body paragraph or bulleted list — the default 1.05vw is calibrated for projector viewing, not laptop reading.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Playfair element runs at weight 400.** Bold serif (weight 700) is not used anywhere in the system. This is the system's most important typographic rule.\n- **An `<em>` tag inside any Playfair headline (h1, h2, h3, or quote) renders as italic in `{colors.accent}` coral.** This is the signature Grove accent — the way you add emphasis to a headline is to italicize a word in coral. The em-style switch is automatic via CSS.\n- **The opening quote mark on a quote slide is rendered as a massive Playfair glyph at 8vw in `{colors.accent}` coral.** A quote without the oversized coral quote-mark is broken.\n- **The quote body is always italic.** Roman-style quote text is not in the system.\n- **Every kicker / chapter-num / footline / label / caption is JetBrains Mono uppercase with at least 0.12em letter-spacing.** Mono in sentence case or without tracking reads as code, not chrome.\n- **Bullet glyphs are em-dashes (`—`) rendered in JetBrains Mono `{colors.accent}` coral.** Never bullets (`•`), never hyphens (`-`), never asterisks. The em-dash is the system's bullet language.\n- **Every chrome bar (top and bottom) carries a 1px solid `{colors.border}` rule (or `{colors.border-light}` on light slides).** The hairline rule is what makes the chrome read as a \"frame around the page\" rather than a banner.\n\n### Typography Principles\nThe Playfair-400 / Jost-300 / JetBrains-Mono-300 weight commitment is the system's voice. Switching any of those weights breaks the editorial register. There is no weight ladder — each face has exactly one weight.\n\nItalics are reserved for two specific roles: the coral accent inside headlines (via `<em>`) and the quote body. Italic body paragraphs are not used. Underline is not used. Emphasis in body text is communicated by the `.accent` color utility (changes color to coral), not by italic or bold.\n\n## Layout\n\n### Canvas System\nThe system targets a fluid viewport — each `.slide` is `100vw × 100vh` with `padding: {spacing.pad-y} {spacing.pad-x}` (6.5vh / 8vw). Slides sit side-by-side in a horizontal `#deck` flex strip and translate via `transform: translateX(...)` with the `{motion.dur-slide}` / `{motion.ease-slide}` transition. Only one slide is `is-active` at a time; non-active slides hold their content invisible (`[data-anim]` is `opacity: 0`) until the active class triggers the entrance animations.\n\n### Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 8vw | Horizontal slide padding |\n| `{spacing.pad-y}` | 6.5vh | Vertical slide padding |\n| `{spacing.pad-quote-x}` | 8.8vw | Slightly wider horizontal padding on quote slides |\n| `{spacing.pad-quote-y}` | 7.8vh | Slightly taller vertical padding on quote slides |\n| `{spacing.gap-lg}` | 4.5vh | Between major content sections |\n| `{spacing.gap-md}` | 2.8vh | Between related elements |\n| `{spacing.gap-sm}` | 1.4vh | Between tightly coupled elements |\n\n### Chrome Anatomy\nEvery content slide carries a **slide-chrome** at the top — a thin flex space-between row holding two mono labels separated below by a 1px hairline border — and a **slide-foot** at the bottom — a matching row with section name + \"NN / TT\" counter, separated above by a matching hairline.\n\nThe chrome and foot are hidden on cover, chapter, quote, and end slides — those are the deck's chromeless emotional moments. Every other slide carries the frame.\n\n### Border-Radius\n**Zero structural radius.** No rounded cards, no rounded buttons, no rounded image placeholders. The only round shapes in the system are the 5px nav-dots (50% radius — fully circular) at the bottom of the viewport.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThe system uses **zero box-shadow, zero text-shadow, zero blur, zero gradient**. Depth is communicated entirely through:\n\n1. **1px hairline borders** — the chrome bars at top and bottom, the stat-card divider, the compare-panel separator, the section-divider rule.\n2. **Opacity layers in text color** — primary (`{colors.fg}`), muted (`{colors.fg-2}`), hint (`{colors.fg-3}`). The three-step opacity ladder is the system's text-elevation device.\n3. **The watermark numeral** at 6% opacity — a massive Playfair digit sitting in the bottom-right corner of chapter and section slides as compositional texture, not as UI.\n\nThe absence of shadow is itself the elevation language. Adding `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` shatters the printed-ink feel.\n\n### Watermark Numeral\nThe `{components.grove-num}` element is a Playfair digit at 18vw / 6% opacity, positioned absolutely at `right: {spacing.pad-x}, bottom: -0.15em`. It reads as a faint background texture, never as content. Use it on chapter / section / statement slides where the empty bottom-right would otherwise feel un-anchored. It is part of the depth language even though it appears as a decorative element.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **1px solid `{colors.border}`** — the universal hairline on dark slides. Chrome bar borders, stat-card bottoms, compare-panel separators, full-width section dividers.\n- **1px solid `{colors.border-light}`** — the matching hairline on light slides.\n- **1px solid `{colors.accent}`** — the 36px-wide coral rule (`{components.rule-coral}`) used as the compositional beat between a kicker and the headline that follows.\n\nBorders are never thicker than 1px. Never dashed, never dotted. The 1px hairline is the system's structural rhythm.\n\n### Decorative Element Types\n\n**Slide Chrome Bar** (`{components.slide-chrome}`) — Thin top bar with mono labels on each side, separated below by a 1px hairline. The system's universal \"you are reading a page\" frame.\n\n**Slide Foot Bar** (`{components.slide-foot}`) — Matching bottom bar with section name + counter, separated above by 1px hairline.\n\n**Coral Rule** (`{components.rule-coral}`) — A 36px-wide 1px terracotta coral horizontal rule. The compositional beat that sits between a kicker (above) and a headline (below). Use it once per slide where a kicker leads into a primary headline — do not stack multiple coral rules.\n\n**Full Rule** (`{components.rule-full}`) — Full-width 1px hairline divider in `{colors.border}` / `{colors.border-light}`. Used as a section break inside a slide body.\n\n**Kicker** (`{components.kicker}`) — Mono uppercase eyebrow in coral, placed above an h1 or h2 headline. Often paired with a coral rule below it.\n\n**Chapter Number** — A mono uppercase ordinal in coral (`{typography.chapter-num}`) above the chapter title. Sets the chapter's identity at chapter-opener slides.\n\n**Em-Dash Bullet** (`{components.bullet-list}`) — A two-column grid list (2em / 1fr) where the bullet is a coral em-dash glyph rendered in JetBrains Mono. Never use a true bullet (`•`); always the em-dash.\n\n**Grove Stat** (`{components.grove-stat}`) — A vertical stack: large Playfair coral value (4.5vw) on top, mono uppercase label beneath, 1px border-bottom hairline. No background fill — the card is defined by the rule + the type, not by a containing box.\n\n**Quote Mark** (`{components.quote-mark}`) — Massive Playfair opening-quote glyph at 8vw in coral, placed above the italic quote body. Always present on a quote slide.\n\n**Watermark Numeral** (`{components.grove-num}`) — Playfair digit at 18vw / 6% opacity in the bottom-right corner. Compositional texture only, never UI.\n\n**Image Placeholder** (`{components.img-placeholder}`) — A solid `{colors.bg-alt}` (on dark) or `{colors.border-light}` (on light) fill marking where a real `<img>` will go. Holds a mono caption like \"[ image ]\" in `{colors.fg-3}`.\n\n**Nav Dots** (`{components.nav-dots}`) — Fixed 5px circular dots at the bottom of the viewport indicating slide position. Inactive: 22% white. Active: 80% white at 1.4× scale.\n\n## Do's and Don'ts\n\n### Do\n- Run every serif moment in Playfair Display weight 400. Never bold.\n- Use `<em>` inside any Playfair headline to switch a word to italic terracotta coral — this is the system's signature accent move.\n- Run every paragraph in Jost weight 300. The lighter weight is the system's body voice.\n- Run every label, kicker, chapter-num, footline, counter, and stat-caption in JetBrains Mono weight 300, uppercase, with at least 0.12em letter-spacing.\n- Default slide background to `{colors.bg}` (deep forest green). Use `{colors.bg-light}` (parchment) on quote slides and any moment that wants a literal \"page\" feel.\n- Pair the kicker with the 36px coral rule as a single compositional unit above the slide's primary headline.\n- Use the em-dash glyph (`—`) in coral as the universal bullet. Never use round bullets or hyphens.\n- Apply the `{components.grove-num}` watermark numeral to chapter and section-opener slides — the bottom-right corner needs that anchor.\n- Use the built-in `[data-anim]` + `[data-delay]` animation stack (fade-up / fade-in / reveal-right / reveal-left / scale-in, with delays 0–6) for every new content element. Animation is part of the system identity, not optional polish.\n- Keep slides spacious — one headline + one supporting paragraph + one accent rule is the rhythm. Reach for fewer elements at larger sizes.\n\n### Don't\n- Don't use bold serif. Playfair at weight 700 is not in this system. Bold serif breaks the editorial voice.\n- Don't introduce a fourth typeface beyond Playfair, Jost, JetBrains Mono, and Noto SC. The four-family stack is the entire typographic identity.\n- Don't use coral as a surface fill or for body paragraphs. Coral is the accent voice: italic emphasis, kicker, rule, em-dash bullet, stat figure, quote mark, chapter ordinal. That's the entire coral vocabulary.\n- Don't use box-shadow, gradient, blur, or any rgba shadow. The system is flat.\n- Don't use thick borders (2px+). The 1px hairline is the system's structural rhythm.\n- Don't round any corners. The only round shape is the 5px nav-dot.\n- Don't use round bullets, hyphens, or asterisks for list items. The em-dash in coral is the only bullet glyph.\n- Don't put a kicker without a coral rule below it. The kicker → rule → headline triad is one unit.\n- Don't render mono text in sentence case or without letter-spacing. Mono is always uppercase chrome with 0.12em+ tracking.\n- Don't omit the slide-chrome and slide-foot on content slides. The thin frame at top and bottom is what makes the slide read as a page.\n- Don't crowd the canvas. Grove rewards silence around the type. If a slide feels full, remove a supporting element rather than shrinking type.\n\n## Responsive Behavior\n\nThe system uses **vw / vh units throughout** — every size, padding, gap, and rule is proportional to the viewport. The same composition renders correctly on a 1280×720 laptop, a 1920×1080 monitor, and a 2560×1440 display without breakpoints.\n\n### Scaling Behavior\n- Display headline scales linearly with viewport width (10vw → 192px at 1920, 128px at 1280).\n- Body text scales similarly (1.05vw → 20.16px at 1920, 13.44px at 1280) — except on list-slide body, where the `max(1.4vw, 17px)` floor prevents the text from going unreadable on smaller viewports.\n- Padding, gaps, and grove-num all scale proportionally with vw/vh.\n- The 1px hairline borders are fixed-pixel and do not scale, which means at larger viewports they appear proportionally finer. This is by design.\n\n### Presenter Behavior\n- Slides advance via right/down arrow / space / page-down (handled by the deck JavaScript).\n- Slides reverse via left/up arrow / page-up.\n- The horizontal `#deck` strip translates via `transform: translateX(-N * 100vw)` between slides, with the `{motion.dur-slide}` sharp deceleration curve at 0.9s.\n- Each slide carries an `is-active` class that triggers the staggered entrance animations on its `[data-anim]` elements.\n- Bottom nav-dots reflect current slide position; clicking a dot jumps to that slide.\n\n### Animation\nThe `[data-anim]` + `[data-delay]` system is built-in:\n- `fade-up`: opacity 0 → 1, translateY 28px → 0\n- `fade-in`: opacity 0 → 1\n- `reveal-right`: clip-path inset(0 100% 0 0) → inset(0 0 0 0)\n- `reveal-left`: clip-path inset(0 0 0 100%) → inset(0 0 0 0)\n- `scale-in`: opacity 0 → 1, scale 0.94 → 1\n\nAll entrance animations use `{motion.ease-enter}` at `{motion.dur-enter}` (0.7s). Stagger delays: 0 / 0.08s / 0.18s / 0.3s / 0.44s / 0.6s / 0.78s.\n\n### Print / Export\nThe system has no `@media print` rule. Print export will inherit the horizontal-strip layout and is unlikely to paginate cleanly. Treat Grove as a screen-first system; PDF export requires a dedicated print stylesheet.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display / h1 / h2 / h3 (Playfair roles, 2–10vw) | 霞鹜文楷 LXGW WenKai | 400 | Literary, hand-set warmth that mirrors Playfair Display at weight 400 — never bold, exactly the Grove rule |\n| Quote text / mark (8vw mark, 3.2vw text) | 霞鹜文楷 LXGW WenKai | 400 | The same literary warmth carries the italic-quote moment; Chinese has no italic so the face does the expressive work |\n| Stat figure (4.5vw, coral) | 霞鹜文楷 LXGW WenKai | 400 | Keeps stat figures in the Playfair register; the coral color carries the accent |\n| Watermark numeral (18vw) | 霞鹜文楷 LXGW WenKai | 400 | The 6%-opacity watermark works at this scale with LXGW WenKai's open letterforms |\n| Body / lede (Jost roles, 1.05–1.45vw) | 思源宋体 Noto Serif SC | 300–400 | Mincho body voice — calm, literary, sits back like Jost weight 300 |\n| Label / kicker / chapter-num (JetBrains Mono roles) | 思源等宽 Noto Sans Mono CJK SC | 300–400 | Preserves the typewriter-chrome quality for kickers and footlines |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Playfair Display as the Latin serif and let CJK glyphs fall through to LXGW WenKai. Playfair Display weight 400 (never bold) is the system's most important typographic commitment; replacing it with a CJK serif wholesale would break the monograph / boutique-brand-book register that defines Grove. The system already loads Noto Serif SC / Noto Sans SC as fallbacks per its existing font stack — the change is to add LXGW WenKai as the preferred CJK display face ahead of Noto Serif SC:\n\n```css\n/* Playfair roles (display, h1, h2, h3, quote, stat, watermark) */\nfont-family: 'Playfair Display', 'LXGW WenKai TC', 'Noto Serif SC', Georgia, serif;\n/* Jost roles (lead, body, caption) */\nfont-family: 'Jost', 'Noto Serif SC', system-ui, sans-serif;\n/* JetBrains Mono roles (label, kicker, chapter-num, stat-label) */\nfont-family: 'JetBrains Mono', 'Noto Sans Mono CJK SC', monospace;\n```\n\n(Note: the system currently lists `'Noto Sans SC'` in the Jost stack — for Grove's literary register, swap to `'Noto Serif SC'` instead. The Mincho body voice is closer to Jost weight 300's \"good paper\" feel than the Hei sans face.)\n\nBaseline mismatch at display sizes (5.5–10vw) is mild — LXGW WenKai and Playfair Display both sit at similar optical baselines, so mixed-script headlines like `A Quiet 山林` read cleanly. The `<em>` italic-coral accent rule is the more delicate piece (see Known CJK Gap below).\n\n### Loading\n\nReplace the existing Noto-only fallback with an LXGW WenKai + Noto Serif SC + Noto Sans Mono CJK pair:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=LXGW+WenKai+TC&family=Noto+Serif+SC:wght@300;400;500&family=Noto+Sans+Mono+CJK+SC:wght@300;400&display=swap\" rel=\"stylesheet\">\n```\n\nLXGW WenKai TC is the version hosted on Google Fonts (covers both traditional and simplified glyphs).\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (1.0–1.1 on display, 1.65–1.75 on body) read as cramped in Chinese. Bump display to 1.15–1.25 and body to 1.7–1.85.\n- **Remove negative letter-spacing on CJK headlines.** Playfair Display uses -0.01em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the JetBrains Mono portion was meant to be capitalized.\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between LXGW WenKai and Noto Serif SC inside the same sentence — pick the face that matches the role (display = LXGW WenKai, body = Noto Serif SC) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nGrove's whole voice is \"literary monograph / boutique brand book\" with a single accent of terracotta coral. The Chinese equivalent of that quiet authority is **LXGW WenKai for every serif moment** (its hand-set warmth is the closest Chinese analog to Playfair Display at weight 400) and **Noto Serif SC at weight 300–400 for body** (the Mincho calm that matches Jost weight 300's reticence). Avoid running Chinese body in Noto Sans SC — the geometric sans tips the system from \"good paper\" to \"modern app.\"\n\nThe em-dash bullet glyph in DM Mono coral works in Chinese without modification — the em-dash character itself is the same Unicode glyph (—) and reads as a deliberate mark in front of a Chinese list item. Keep the bullet column in Noto Sans Mono CJK SC at weight 300 coral, exactly mirroring the Latin pattern.\n\nThe watermark numeral (18vw, 6% opacity) is particularly effective in Chinese — render a Chinese ordinal character (e.g., 「三」or 「五」) instead of a Western digit. At 6% opacity it reads as faint compositional texture, and the Han glyph's denser visual weight at that scale balances the slide better than a thin Western numeral would.\n\n### Known CJK Gap\n\nThe system's signature `<em>` italic-coral treatment is the hardest piece to translate: **Chinese has no italic concept** — slanted Han glyphs read as broken, not as emphasis. The current Grove CSS depends on the browser's default `<em>` styling (italic) plus a CSS color rule for the coral. In Chinese, the italic does nothing visually, so the emphasis collapses to \"just coral text inside a headline.\" That's not bad — coral inside an LXGW WenKai headline still reads as a deliberate accent — but the system loses one of its two emphasis dimensions (color + slant) and is left with only color.\n\nTo compensate, two options: (1) accept color-only emphasis on Chinese headlines and let the coral carry the weight, or (2) switch the `<em>` portion to a different face inside Chinese headlines — e.g., **站酷小薇体 (ZCOOL XiaoWei)** — to provide a face-based contrast that approximates the slant contrast of Latin italic. Add to the CSS:\n\n```css\n.h1 em, .h2 em, .h3 em, .quote-text em {\n  color: var(--c-accent);\n  font-family: 'Playfair Display', 'ZCOOL XiaoWei', 'LXGW WenKai TC', serif;\n  font-style: italic; /* Latin renders italic; CJK ignores */\n}\n```\n\nThis gives the Latin portion italic-coral and the CJK portion face-shift-coral. Test on a per-deck basis — for many Grove decks, color-only emphasis is sufficient.\n\n## Iteration Guide\n\n1. Any new headline is Playfair Display weight 400. Pick the size from the headline ladder (10vw display / 5.5vw h1 / 3.2vw h2 / 2vw h3) — do not invent a new size.\n2. Any new emphasis inside a headline uses `<em>` and renders as italic coral automatically. Do not author a manual color/italic style.\n3. Any new body paragraph is Jost weight 300 at 1.05vw (or 1.45vw for lede, or `max(1.4vw, 17px)` on list-style slides).\n4. Any new label / kicker / footline / counter / caption is JetBrains Mono weight 300 uppercase with at least 0.12em letter-spacing.\n5. Any new chrome line (top bar, bottom bar, section divider, stat-card border) is a 1px solid hairline in `{colors.border}` (dark) or `{colors.border-light}` (light). No thicker borders.\n6. Any new bullet list uses the `{components.bullet-list}` pattern (two-column grid, em-dash in coral mono). Do not author a different bullet style.\n7. Any new accent moment uses `{colors.accent}` terracotta coral. The accent is for italic headline emphasis, the 36px rule, em-dashes, stat figures, quote marks, chapter ordinals, and the kicker text. Nothing else.\n8. Any new chapter or section-opener slide carries a `{components.grove-num}` watermark numeral in the bottom-right corner.\n9. Any new content element gets a `[data-anim]` attribute (fade-up, fade-in, reveal-right, reveal-left, or scale-in) plus a `[data-delay]` (0–6) for staggered entrance. Do not author custom transitions.\n10. When in doubt, add space rather than content. Grove's editorial register is silence, not density.\n\n## Known Gaps\n\n- The four Google Fonts (Playfair Display, Jost, JetBrains Mono, Noto Serif SC / Noto Sans SC) are loaded via `<link>`. Offline rendering will fall back to Georgia, system-ui, monospace, and system serif/sans for the Noto roles — which preserves the rough character but loses the typographic identity. Self-hosting recommended for offline / print reliability.\n- The system loads Playfair weight 500 and Jost weights 200/400/500 — these are not used in the published CSS but are available. Using them would break the system's single-weight commitment.\n- The `<em>` italic-coral treatment relies on the CSS rule `.h1 em, .h2 em, .h3 em { color: var(--c-accent); }` — note that the actual italic property is NOT set in the rule (the comment block is empty). The italic comes from the browser's default `<em>` styling. If a stylesheet override removes the default italic, the coral accent will lose its italic character.\n- The grove-num watermark uses 18vw font-size — on extremely wide viewports (3000px+) this becomes very large and may push the slide-foot area. The CSS positions it at `bottom: -0.15em` to absorb some overflow, but very tall numerals at very wide viewports may need adjustment.\n- The vertical sidebar component (`.grove-sidebar`) is loaded in the CSS but explicitly disabled (`display: none !important`). It was a chapter-tab decoration that read as clutter; the slide-chrome bar provides the section name already.\n- The fixed slide-counter (`#slide-counter`) is also disabled — the slide-foot bar already shows \"NN / TT\" so the fixed counter was a duplicate.\n- The CSS has a few empty rule blocks (`.h1 em { }`, `.grove-stat-val em { }`, `.quote-text { ... }`) which appear to be leftover stubs from earlier iterations. They are inert and can be removed without effect.\n- The deck is built bilingually-aware (Chinese fallbacks via Noto Serif SC / Noto Sans SC) but no actual Chinese content is in the published source — the bilingual support is structural, not active.\n- The image-placeholder component is a layout reservation, not a real image. Replacing the placeholder div with an `<img>` requires manually matching the parent's flex behavior and background.\n","frontmatter":{"version":"alpha","name":"Grove","description":"A quiet, editorial-serif presentation system in the register of a well-bound monograph or boutique brand book. Playfair Display at weight 400 (never bold) carries every headline, italicized in terracotta coral for accent emphasis as the signature move. Jost weight 300 carries every paragraph as the \"good paper\" body face. JetBrains Mono at weight 300 holds labels, kickers, and the thin chrome bars. The palette pairs a deep forest green canvas (#192b1b) with warm cream text (#d4cfbf) and a single terracotta coral accent (#c8524a). Generous negative space, hairline 1px borders, and a near-invisible serif watermark numeral give it the calm authority of a literary journal.","colors":{"bg":"#192b1b","bg-alt":"#1e3221","bg-light":"#e8e4d6","bg-light-alt":"#dedad0","fg":"#d4cfbf","fg-2":"rgba(212, 207, 191, 0.6)","fg-3":"rgba(212, 207, 191, 0.32)","fg-light":"#192b1b","fg-light-2":"rgba(25, 43, 27, 0.58)","fg-light-3":"rgba(25, 43, 27, 0.33)","accent":"#c8524a","border":"rgba(212, 207, 191, 0.12)","border-light":"rgba(25, 43, 27, 0.14)","watermark-dark":"rgba(212, 207, 191, 0.06)","watermark-light":"rgba(25, 43, 27, 0.06)"},"color-aliases":{"fg-light":"bg","fg-light-canonical":"fg-light shares hex #192b1b with bg — the green is reused as both surface and primary text-on-light"},"typography":{"display":{"fontFamily":"'Playfair Display', 'Noto Serif SC', Georgia, serif","fontSize":"10vw","fontWeight":400,"lineHeight":1,"letterSpacing":"-0.01em"},"h1":{"fontFamily":"'Playfair Display', 'Noto Serif SC', Georgia, serif","fontSize":"5.5vw","fontWeight":400,"lineHeight":1.1},"h1-statement":{"fontFamily":"'Playfair Display', 'Noto Serif SC', Georgia, serif","fontSize":"min(4.5vw, 7.5vh, 88px)","fontWeight":400,"lineHeight":1.15},"h2":{"fontFamily":"'Playfair Display', 'Noto Serif SC', Georgia, serif","fontSize":"3.2vw","fontWeight":400,"lineHeight":1.2},"h3":{"fontFamily":"'Playfair Display', 'Noto Serif SC', Georgia, serif","fontSize":"2vw","fontWeight":400,"lineHeight":1.3},"quote-text":{"fontFamily":"'Playfair Display', 'Noto Serif SC', Georgia, serif","fontSize":"3.2vw","fontWeight":400,"lineHeight":1.35,"letterSpacing":"-0.01em","fontStyle":"italic"},"quote-mark":{"fontFamily":"'Playfair Display', 'Noto Serif SC', Georgia, serif","fontSize":"8vw","fontWeight":400,"lineHeight":0.6},"stat-value":{"fontFamily":"'Playfair Display', 'Noto Serif SC', Georgia, serif","fontSize":"4.5vw","fontWeight":400,"lineHeight":1,"letterSpacing":"-0.02em"},"grove-num":{"fontFamily":"'Playfair Display', 'Noto Serif SC', Georgia, serif","fontSize":"18vw","fontWeight":400,"lineHeight":1,"letterSpacing":"-0.03em"},"lead":{"fontFamily":"'Jost', 'Noto Sans SC', system-ui, sans-serif","fontSize":"1.45vw","fontWeight":300,"lineHeight":1.65},"body":{"fontFamily":"'Jost', 'Noto Sans SC', system-ui, sans-serif","fontSize":"1.05vw","fontWeight":300,"lineHeight":1.75},"body-list-emph":{"fontFamily":"'Jost', 'Noto Sans SC', system-ui, sans-serif","fontSize":"max(1.4vw, 17px)","fontWeight":300,"lineHeight":1.6},"caption":{"fontFamily":"'Jost', 'Noto Sans SC', system-ui, sans-serif","fontSize":"0.82vw","fontWeight":300,"lineHeight":1.55},"label":{"fontFamily":"'JetBrains Mono', monospace","fontSize":"0.7vw","fontWeight":300,"letterSpacing":"0.12em"},"kicker":{"fontFamily":"'JetBrains Mono', monospace","fontSize":"0.7vw","fontWeight":300,"letterSpacing":"0.14em","textTransform":"uppercase"},"chapter-num":{"fontFamily":"'JetBrains Mono', monospace","fontSize":"0.7vw","fontWeight":300,"letterSpacing":"0.2em","textTransform":"uppercase"},"stat-label":{"fontFamily":"'JetBrains Mono', monospace","fontSize":"0.7vw","fontWeight":300,"letterSpacing":"0.12em","textTransform":"uppercase"}},"spacing":{"pad-x":"8vw","pad-y":"6.5vh","pad-quote-x":"calc(8vw * 1.1)","pad-quote-y":"calc(6.5vh * 1.2)","gap-lg":"4.5vh","gap-md":"2.8vh","gap-sm":"1.4vh","rule-short":"36px"},"motion":{"ease-slide":"cubic-bezier(0.77, 0, 0.175, 1)","dur-slide":"0.9s","ease-enter":"cubic-bezier(0.16, 1, 0.3, 1)","dur-enter":"0.7s","stagger-delays":"0 / 0.08s / 0.18s / 0.3s / 0.44s / 0.6s / 0.78s"},"canvas":{"width":"100vw","height":"100vh"},"components":{"slide-chrome":{"description":"Thin top bar separating slide content from the page edge. A flex space-between row holding mono label text on each side, separated below by a 1px hairline in {colors.border} (or {colors.border-light} on light slides). Pads with {spacing.gap-sm} above the rule, then {spacing.gap-md} below before content starts.","border":"1px solid {colors.border}","typography":"{typography.label}"},"slide-foot":{"description":"Matching bottom bar. Flex space-between row holding section name and 'NN / TT' counter, with 1px hairline border-top. The chrome and foot together frame every content slide; cover, chapter, quote, and end slides hide both.","border":"1px solid {colors.border}","typography":"{typography.label}"},"grove-num":{"description":"Massive serif digit placed in the background at very low opacity (6%) as compositional texture. Sits absolutely at right: {spacing.pad-x}, bottom: -0.15em, with pointer-events disabled. The system's signature wallpaper element on chapter and section moments.","fontSize":"18vw","color":"{colors.watermark-dark} on dark / {colors.watermark-light} on light"},"grove-stat":{"description":"Stat card: large Playfair value in {colors.accent}, mono uppercase label beneath, 1px border-bottom hairline. No background fill — the card is defined by the rule and the type ratio alone.","valueColor":"{colors.accent}","valueSize":"4.5vw","labelTypography":"{typography.stat-label}","borderBottom":"1px solid {colors.border}"},"bullet-list":{"description":"Two-column grid list (2em / 1fr) where the bullet is a coral em-dash glyph rendered in JetBrains Mono, not a CSS bullet. The em-dash is the system's bullet language.","bulletGlyph":"—","bulletColor":"{colors.accent}","bulletFont":"'JetBrains Mono', monospace"},"rule-coral":{"width":"{spacing.rule-short}","height":"1px","background":"{colors.accent}","description":"A 36px-wide 1px-tall terracotta coral rule. The compositional beat between a kicker and the headline that follows."},"rule-full":{"width":"100%","height":"1px","background":"{colors.border} on dark / {colors.border-light} on light","description":"Full-width hairline divider. Used between stacked sections inside a slide."},"kicker":{"typography":"{typography.kicker}","color":"{colors.accent}","description":"Mono uppercase eyebrow in coral, placed above an h1/h2 headline."},"chapter-num":{"typography":"{typography.chapter-num}","color":"{colors.accent}","marginBottom":"{spacing.gap-md}"},"quote-mark":{"typography":"{typography.quote-mark}","color":"{colors.accent}","description":"Massive Playfair opening-quote glyph in coral, placed above the italic quote body."},"img-placeholder":{"background":"{colors.bg-alt} on dark / {colors.border-light} on light","color":"{colors.fg-3} on dark / {colors.fg-light-3} on light","typography":"{typography.label}","minHeight":"30vh","description":"Image-region marker — solid darker-than-background fill with a mono caption stating the placeholder text. Use this in place of <img> until a real image is available."},"nav-dots":{"position":"fixed","placement":"bottom: 24px, horizontally centered","dotSize":"5px","dotBackground":"rgba(255, 255, 255, 0.22)","activeBackground":"rgba(255, 255, 255, 0.8)","activeTransform":"scale(1.4)","description":"Small white dots at the bottom of the viewport indicating slide position. The fixed counter (#slide-counter) is intentionally disabled — the slide-foot already shows NN / TT."}}},"isInternal":false,"tokens":11820,"sizeBytes":45544},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/grove/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/grove/preview.md","title":"Grove Skill","category":"anthropic-skill","format":"markdown","content":"# Grove Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/grove/design.md`\n- Preview card: `bold-template-pack/templates/grove/preview.md`\n\n## Selection Metadata\n\n- Slug: `grove`\n- Tagline: Forest-green canvas with cream type, classical Playfair serifs, and a single rust accent.\n- Mood: organic, considered, warm, literary, natural\n- Tone: classical, warm, considered, patient\n- Formality: medium-high\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel organic, considered, and grown-up: sustainability and wellness brands, outdoor / nature products, wineries and restaurants, literary or arts decks, advisory deliverables, bilingual EN/CN reports. Also a calm, distinctive choice for tech, research, or business decks that want patience over urgency.\n- Avoid for: Decks that need neon energy or rapid-fire pop — the forest-green canvas and Playfair serif commit to a slow, classical voice.\n\n## Visual Snapshot\n\nA quiet, editorial-serif presentation system in the register of a well-bound monograph or boutique brand book. Playfair Display at weight 400 (never bold) carries every headline, italicized in terracotta coral for accent emphasis as the signature move. Jost weight 300 carries every paragraph as the \"good paper\" body face. JetBrains Mono at weight 300 holds labels, kickers, and the thin chrome bars. The palette pairs a deep forest green canvas (#192b1b) with warm cream text (#d4cfbf) and a single terracotta coral accent (#c8524a). Generous negative space, hairline 1px borders, and a near-invisible serif watermark numeral give it the calm authority of a literary journal.\n\nGrove is a quiet, editorial-serif presentation system in the register of a literary monograph or boutique brand book. The foundational premise is restraint: every slide carries one focused content moment surrounded by deep negative space, anchored by thin 1px chrome bars at top and bottom and supported by a small library of compositional beats (coral kicker, 36px coral rule, italic-coral accent, em-dash bullet, near-invisible watermark numeral).\n\n## Preview Ingredients\n\n- Palette: bg #192B1B; bg-alt #1E3221; bg-light #E8E4D6; bg-light-alt #DEDAD0; fg #D4CFBF; fg-light #192B1B; accent #C8524A\n- Typography: See full design doc after selection.\n- Signature move: Playfair Display at weight 400 carries every headline, every quote, every stat figure, and every watermark numeral. Bold serif is not permitted — the no-bold rule is the system's most important typographic commitment. Italicized Playfair in {colors.accent} co...\n- Signature move: Jost at weight 300 carries every paragraph and bullet body. The light weight is the \"good paper\" feel — it sits back and lets the serif lead.\n- Signature move: JetBrains Mono at weight 300 carries every label, kicker, footline, slide counter, and stat caption. Always uppercase, always with at least 0.12em letter-spacing.\n- Signature move: Noto Serif SC / Noto Sans SC at weight 300–500 are loaded as Chinese fallbacks for every role. The deck is built bilingually-aware — Chinese characters render through the Noto cuts when present in the content.\n- Signature move: Playfair Display at weight 400 — never bold — for every serif moment. Italic in {colors.accent} is the headline accent.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1101,"sizeBytes":4899},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/long-table/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/long-table/design.md","title":"Long Table","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Long Table\ndescription: A warm, single-ink editorial system in the register of a supper-club poster, a small-batch zine, or a Risograph-printed program. The entire system runs in one ink color — a warm rust terracotta (#B53D2A) — on a buttery cream paper ground (#FAF1E2), with a subtle 4px radial-dot texture overlay giving the surface its \"printed paper\" quality. Display type runs in Bricolage Grotesque at weight 700–800 in uppercase; body and metadata run in Fraunces serif at weight 400–600 with optical-size axis engaged. Pill buttons, outlined edition badges, italic-edition numerals, and dashed/solid 1.5px borders complete the printed-program vocabulary.\n\ncolors:\n  paper: \"#FAF1E2\"\n  paper-d: \"#F2E5CF\"\n  paper-vd: \"#E8D7B6\"\n  ink: \"#B53D2A\"\n  ink-dp: \"#8E2D1F\"\n  rule: \"#B53D2A\"\n  ink-32: \"rgba(181, 61, 42, 0.32)\"\n  ink-78: \"rgba(181, 61, 42, 0.78)\"\n  ink-50: \"rgba(181, 61, 42, 0.5)\"\n\ncolor-aliases:\n  rule: ink\n  ink-32-canonical: \"Same ink #B53D2A at 32% opacity, used for dashed dividers and subtle internal rules\"\n  ink-78-canonical: \"Same ink #B53D2A at 78% opacity, used for de-emphasized metadata\"\n\ntypography:\n  display-jumbo-numeral:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(180px, min(22vw, 38vh), 480px)\"\n    fontWeight: 400\n    lineHeight: 0.86\n    letterSpacing: -0.02em\n    fontStyle: italic\n  display-cover:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(82px, min(8.8vw, 15vh), 180px)\"\n    fontWeight: 800\n    lineHeight: 0.92\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  display:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(72px, min(7.6vw, 13vh), 160px)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  headline-xl:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(60px, min(6.4vw, 10.5vh), 140px)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  headline:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(56px, min(6vw, 10vh), 120px)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  headline-md:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(48px, min(5vw, 8.4vh), 100px)\"\n    fontWeight: 800\n    lineHeight: 0.92\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  quote:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(40px, min(4.4vw, 7.4vh), 96px)\"\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.012em\n    textTransform: uppercase\n  card-title:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(28px, 2.4vw, 44px)\"\n    fontWeight: 800\n    lineHeight: 0.95\n    letterSpacing: -0.008em\n    textTransform: uppercase\n  course-name:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(20px, 1.5vw, 28px)\"\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  info-value:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(20px, 1.6vw, 28px)\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  edition-label-tracked:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(15px, 1.1vw, 18px)\"\n    fontWeight: 700\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  who-tag:\n    fontFamily: \"'Bricolage Grotesque', sans-serif\"\n    fontSize: \"clamp(15px, 1.05vw, 18px)\"\n    fontWeight: 700\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  body-serif-italic-lg:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(20px, 1.5vw, 28px)\"\n    fontWeight: 400\n    lineHeight: 1.45\n    fontStyle: italic\n  body-serif-italic:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(17px, 1.2vw, 22px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n    fontStyle: italic\n  body-roman:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(15px, 1vw, 17px)\"\n    fontWeight: 400\n    lineHeight: 1.45\n  edition-label:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(20px, 1.6vw, 30px)\"\n    fontWeight: 400\n    lineHeight: 1\n    fontStyle: italic\n  tagline:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(18px, 1.4vw, 26px)\"\n    fontWeight: 400\n    lineHeight: 1.35\n    fontStyle: italic\n  stats:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(17px, 1.2vw, 22px)\"\n    fontWeight: 400\n    lineHeight: 1.4\n    fontStyle: italic\n  pill-text:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(15px, 1.1vw, 20px)\"\n    fontWeight: 400\n    lineHeight: 1\n    fontStyle: italic\n  meta-tag:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    fontWeight: 400\n    lineHeight: 1.4\n    fontStyle: italic\n  info-key:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    fontWeight: 400\n    letterSpacing: 0.16em\n    textTransform: uppercase\n    fontStyle: italic\n  pagenum:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    fontWeight: 400\n    letterSpacing: 0.02em\n    fontStyle: italic\n  nav-hint:\n    fontFamily: \"'Fraunces', Georgia, serif\"\n    fontSize: \"clamp(11px, 0.78vw, 13px)\"\n    fontWeight: 400\n    letterSpacing: 0.02em\n    fontStyle: italic\n\nspacing:\n  slide-pad-h-default: \"clamp(60px, 5vw, 110px)\"\n  slide-pad-h-wide: \"clamp(80px, 7vw, 160px)\"\n  slide-pad-h-narrow: \"clamp(120px, 12vw, 280px)\"\n  slide-pad-top-default: \"clamp(96px, 10vh, 160px)\"\n  slide-pad-top-cover: \"clamp(60px, 6vh, 100px)\"\n  slide-pad-bottom-default: \"clamp(110px, 11vh, 170px)\"\n  slide-pad-bottom-wide: \"clamp(150px, 14vh, 220px)\"\n  gap-section: \"clamp(28px, 3vh, 50px)\"\n  gap-content: \"clamp(18px, 2vh, 32px)\"\n  gap-row: \"clamp(14px, 1.6vh, 24px)\"\n  gap-tight: \"clamp(10px, 1.2vh, 18px)\"\n  border-weight: \"1.5px\"\n  rule-dashed-color: \"{colors.ink-32}\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  pill:\n    description: \"Outlined rounded-rectangle (border-radius 999px → fully pill) holding short italic Fraunces text. The system's CTA / action button. Border is 1.5px solid {colors.ink}; padding is generous (~12px / 28px); text-color is {colors.ink}.\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: \"999px\"\n    padding: \"clamp(8px, 1vh, 14px) clamp(20px, 2vw, 32px)\"\n    typography: \"{typography.pill-text}\"\n  pill-divider:\n    typography: \"{typography.pill-text}\"\n    opacity: 0.7\n    description: \"A small italic Fraunces divider character (typically · or /) used inline between adjacent pills.\"\n  ed-badge:\n    description: \"A small circular outlined badge (~38px) holding a single italic Fraunces digit. The edition / chapter ordinal marker. Border is 1.5px solid {colors.ink}; background is transparent.\"\n    width: \"clamp(34px, 2.6vw, 44px)\"\n    height: \"clamp(34px, 2.6vw, 44px)\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: \"50%\"\n  rect-tag:\n    description: \"Outlined rectangular tag — like the pill but with sharp corners. Holds short italic Fraunces text. Used as a category / status / metadata chip when the pill's roundness isn't appropriate.\"\n    border: \"1.5px solid {colors.ink}\"\n    padding: \"clamp(7px, 0.9vh, 12px) clamp(14px, 1.4vw, 22px)\"\n    typography: \"{typography.pill-text}\"\n  card-outlined:\n    description: \"A 1.5px ink-outlined rectangular content card. Holds a card-top metadata row (separated below by a 1px @ 32%-opacity rule), a Bricolage card-name, a Fraunces body description, and a meta-row at the bottom (separated above by a 1px dashed @ 32%-opacity rule). The system's primary content card pattern.\"\n    border: \"1.5px solid {colors.ink}\"\n    padding: \"clamp(20px, 2vh, 32px) clamp(20px, 1.8vw, 30px)\"\n    internalDivider-solid: \"1px solid {colors.ink-32}\"\n    internalDivider-dashed: \"1px dashed {colors.ink-32}\"\n  paper-texture:\n    description: \"Subtle radial-dot texture overlay on the stage. A 4px-tile background-image of 0.5px radial-gradient dots in {colors.ink-50} at 10% opacity. Sits absolutely on the stage with pointer-events disabled, giving the paper its Risograph / printed-stock quality. This is on every slide.\"\n    backgroundImage: \"radial-gradient(circle at 1px 1px, {colors.ink-50} 0.5px, transparent 1px)\"\n    backgroundSize: \"4px 4px\"\n    opacity: 0.1\n  topbar-divider:\n    description: \"A 1.5px ink solid border-bottom under a slide topbar (where a Bricolage headline sits beside a small Fraunces label). The horizontal rule beneath the topbar is the system's universal page-divider device.\"\n    borderBottom: \"1.5px solid {colors.ink}\"\n  pagenum:\n    position: \"absolute\"\n    placement: \"right: clamp(36px, 3.6vw, 80px); bottom: clamp(40px, 4vh, 64px)\"\n    typography: \"{typography.pagenum}\"\n    color: \"{colors.ink}\"\n    description: \"Italic Fraunces page number at the bottom-right of every slide.\"\n  nav-hint:\n    position: \"fixed\"\n    placement: \"left: clamp(36px, 3.6vw, 80px); bottom: clamp(40px, 4vh, 64px)\"\n    typography: \"{typography.nav-hint}\"\n    color: \"{colors.ink}\"\n    opacity: 0.45\n    description: \"A faint italic Fraunces hint string at the bottom-left of the viewport (e.g. '← → to navigate'). Bonus interactivity affordance.\"\n  ledger-row:\n    description: \"A horizontal ledger-style row in a calendar/schedule context. Multi-column grid (typical: 80px / 130px / 1.6fr / 0.9fr / auto) with a 1px @ 32%-opacity ink border-bottom. Each cell is a tag, label, or pill. Reads as a guestbook / restaurant-reservation log.\"\n    rowPad: \"clamp(11px, 1.3vh, 18px) 0\"\n    borderBottom: \"1px solid {colors.ink-32}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nLong Table is a **single-ink editorial system** in the register of a supper-club poster, a Risograph zine, or a small-press dinner program. The foundational premise is monochromatic: every visible mark in the system — every headline, every paragraph, every border, every rule, every pill, every page number — is rendered in a single warm rust terracotta ink (`{colors.ink}` — #B53D2A) on a buttery cream paper ground (`{colors.paper}` — #FAF1E2). The only chromatic variation is opacity: the same ink at 100% for primary marks, at 78% for de-emphasized metadata, at 32% for dashed internal dividers, at 10% for the paper-texture dots.\n\nThe single-ink constraint is the system's identity. The aesthetic borrows from one-color screen printing, letterpress posters, and Risograph stationery — formats where each additional color is a separate printing pass and therefore a deliberate decision. By committing to one ink, the system achieves the calm authority of a printed object rather than the polish of a digital surface.\n\nA signature **paper-texture overlay** sits on every slide: a 4px-tile radial-dot pattern in 50%-opacity ink at 10% opacity, applied via the `.stage::before` pseudo-element. The dots are invisible at conversational viewing distance but visible up close — they give the cream surface its \"printed paper\" feel and are an essential part of the design system, not optional decoration.\n\nThe typographic stack is a two-face pairing:\n\n- **Bricolage Grotesque** at weights 700 and 800 in **strict uppercase** carries every display moment — covers, headlines, card titles, course names, quote bodies, info values, who-tags. Bricolage is a wide, slightly-condensed grotesque with strong personality; its uppercase set has the impact of a hand-lettered poster. The optical-size axis (`opsz` 12..96) is engaged.\n- **Fraunces** at weight 400–600 carries every body paragraph, every metadata field, every pill, every page number, every edition label. **Italic Fraunces is the default body style** — the slanted serif is the system's body voice, lending warmth and editorial personality. Roman Fraunces appears only for specific tight cases (info keys, the description body inside index cards). The optical-size axis (`opsz` 9..144) is engaged for both styles.\n\nA massive **italic Fraunces edition numeral** at up to 480px is the system's signature display anchor — it replaces the hand-drawn illustration that would traditionally fill the cover/featured slide right-half, giving the slide a typographic centerpiece in the same ink as the rest of the page.\n\nDepth is **flat and printed**. There are no shadows, no gradients, no blur, no glow. Elevation is communicated entirely through 1.5px solid ink borders on cards, badges, pills, and tags; 1px solid or 1px-dashed internal dividers at 32% opacity; and the texture overlay's atmospheric quality. The whole system reads as ink soaked into paper.\n\n**Density philosophy: rich-but-curated.** Long Table reads as authoritative when slides carry substantive content — a cover with a hero title plus a tagline plus action pills plus stats plus a big edition numeral; an index slide with a topbar headline plus three rich cards; a menu slide with five course rows with name + description + pairing. The slides are full but never crowded — each region carries one focused element with breathing room around it. A slide that holds only a headline reads as missing-its-program; a slide that holds 8 competing content blocks reads as broken. Reach for one major typographic moment (Bricolage display) anchored by 2–4 supporting groups (cards, pills, ledger rows, info-value pairs) per slide.\n\n**Key Characteristics:**\n- One ink color (`{colors.ink}` — warm rust terracotta) on cream paper (`{colors.paper}`). Opacity variants are the only color variation.\n- Bricolage Grotesque weight 700–800 uppercase for every display moment; Fraunces 400–600 italic-default for every body and metadata moment.\n- Subtle 4px radial-dot paper texture on every slide via `.stage::before` — invisible at distance, present up close.\n- Pill buttons (border-radius 999px), edition badges (circular), rect-tags (sharp-cornered), and outlined cards (1.5px solid) — all single-weight ink outlines, no fills.\n- A massive italic Fraunces edition numeral (up to 480px) is the system's hero typographic anchor on cover-class slides.\n- 1.5px structural borders, 1px @ 32%-opacity solid or dashed internal dividers. No thicker borders, no shadows.\n- Page number (italic Fraunces) at every slide's bottom-right; nav-hint (italic Fraunces at 45% opacity) at the bottom-left.\n- The system is single-ink by design — adding any second color (a navy, a green, a yellow) shatters the printed-program register.\n\n## Colors\n\n### Palette\n- **Paper / Cream** (`{colors.paper}` — #FAF1E2): The dominant warm buttery cream surface. Reads as good-quality paper stock — not white, not beige, somewhere between. The default slide background, and the only background fill the system uses.\n- **Paper Dark** (`{colors.paper-d}` — #F2E5CF): A slightly darker cream for secondary surfaces or tonal separation. Available in the token system but used sparingly.\n- **Paper Very Dark** (`{colors.paper-vd}` — #E8D7B6): A deeper cream for accent surfaces. Reserved.\n- **Ink / Warm Rust Terracotta** (`{colors.ink}` — #B53D2A): The single ink color. Every text run, every border, every rule, every pill outline, every page number — all in this one color. The system's structural and expressive color.\n- **Ink Deep** (`{colors.ink-dp}` — #8E2D1F): A deeper rust reserved for emphasis. Available in the token system but used sparingly in the published slides.\n- **Rule** (`{colors.rule}` — #B53D2A): An alias for `{colors.ink}` — same hex, used semantically when referring to a rule line.\n- **Ink @ 78%** (`{colors.ink-78}` — rgba(181,61,42,0.78)): The ink at 78% opacity. Used for de-emphasized metadata text where slightly lower contrast is desired (e.g., pairing notes in menu rows, meta-tags under quotes).\n- **Ink @ 50%** (`{colors.ink-50}` — rgba(181,61,42,0.5)): The ink at 50% opacity. Used inside the paper-texture radial-dot gradient.\n- **Ink @ 32%** (`{colors.ink-32}` — rgba(181,61,42,0.32)): The ink at 32% opacity. Used for internal dividers — solid 1px lines and 1px dashed lines inside cards, between ledger rows, between course rows.\n\n### Defaults\n- **Default slide background**: `{colors.paper}`. Every slide. There is no alternate surface in this system.\n- **Default text color**: `{colors.ink}`. Every text run.\n- **Default border color**: `{colors.ink}` at 1.5px solid for structural borders; `{colors.ink-32}` at 1px solid or dashed for internal dividers.\n- **Default headline color**: `{colors.ink}`.\n- **Default body color**: `{colors.ink}`.\n- **Default page-number / nav-hint color**: `{colors.ink}` (full opacity for pagenum; 45% opacity for nav-hint).\n- **Default de-emphasized metadata color**: `{colors.ink-78}` — when a small piece of supporting text needs to recede from a primary line.\n\nThe palette is intentionally single-ink. There is no \"accent color\" to reach for — the design language depends on the one-ink constraint. If a moment needs to stand out, scale up the type (Bricolage 800 at 180px) or reach for the italic Fraunces edition numeral; do not introduce a second color.\n\n## Typography\n\n### Font Family\nThe system loads exactly two web fonts from Google Fonts, both with optical-size axes:\n\n- **Bricolage Grotesque** with `opsz` 12..96 and weights 400, 600, 700, 800. **In the published slides, only 700 and 800 are used.**\n- **Fraunces** with `opsz` 9..144, both roman and italic styles, weights 400, 500, 600. **In the published slides, all three weights of italic and weight 400/600 of roman are used.**\n\nThe two-face role split is strict: **Bricolage uppercase carries every display moment** (covers, headlines, card titles, course names, quote bodies, info values, who-tags, edition labels with tracking). **Fraunces italic carries every body moment** (paragraphs, leads, metadata, taglines, pills, page numbers, info keys, edition labels without tracking). **Fraunces roman** is reserved for specific tight roles (info keys in info-rows where italic tracking would feel out of place, and the description body inside index cards where roman is more readable).\n\nThe optical-size axis is critical: the same Fraunces face renders with subtly different letterforms at 14px metadata sizes versus 480px hero-numeral sizes — small sizes pick up sturdier strokes; large sizes pick up finer detail. Self-hosted fallbacks without `opsz` will lose this quality.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight / Style | Use |\n|---|---|---|---|---|\n| `{typography.display-jumbo-numeral}` | up to 480px | Fraunces | 400 italic | Hero edition numeral (cover-class typographic anchor) |\n| `{typography.display-cover}` | up to 180px | Bricolage | 800 uppercase | Cover-scale Bricolage title |\n| `{typography.display}` | up to 160px | Bricolage | 800 uppercase | Section-opener / manifesto headline |\n| `{typography.headline-xl}` | up to 140px | Bricolage | 800 uppercase | Featured-edition title |\n| `{typography.headline}` | up to 120px | Bricolage | 800 uppercase | Topbar headline on index / calendar slides |\n| `{typography.headline-md}` | up to 100px | Bricolage | 800 uppercase | Menu / programme title |\n| `{typography.quote}` | up to 96px | Bricolage | 700 uppercase | Pull-quote / testimonial body |\n| `{typography.card-title}` | up to 44px | Bricolage | 800 uppercase | Title inside an outlined card |\n| `{typography.course-name}` | up to 28px | Bricolage | 700 uppercase | Course / item name in a ledger row |\n| `{typography.info-value}` | up to 28px | Bricolage | 700 uppercase | Value in a key/value info row |\n| `{typography.edition-label-tracked}` | up to 18px | Bricolage | 700 uppercase / 0.18em | Big-edition label beneath a hero numeral |\n| `{typography.who-tag}` | up to 18px | Bricolage | 700 uppercase | Attribution name in a quote row |\n| `{typography.body-serif-italic-lg}` | up to 28px | Fraunces | 400 italic | Lead paragraph in a manifesto / letter |\n| `{typography.body-serif-italic}` | up to 22px | Fraunces | 400 italic | Standard body paragraph / lede |\n| `{typography.body-roman}` | up to 17px | Fraunces | 400 roman | Card description body (tighter setting for legibility at small size) |\n| `{typography.edition-label}` | up to 30px | Fraunces | 400 italic | \"EDITION N.\" italic label beside an edition badge |\n| `{typography.tagline}` | up to 26px | Fraunces | 400 italic | Tagline / subtitle beneath a cover title |\n| `{typography.stats}` | up to 22px | Fraunces | 400 italic | Stats line (\"N seats · M cities · L hours\") |\n| `{typography.pill-text}` | up to 20px | Fraunces | 400 italic | Text inside a pill button or rect-tag |\n| `{typography.meta-tag}` | up to 16px | Fraunces | 400 italic | Card metadata (city tag, num tag, seats tag, date tag) |\n| `{typography.info-key}` | up to 16px | Fraunces | 400 italic / 0.16em / UPPER | Key in a key/value info row |\n| `{typography.pagenum}` | up to 16px | Fraunces | 400 italic | Page number at the bottom-right of every slide |\n| `{typography.nav-hint}` | up to 13px | Fraunces | 400 italic / 45% opacity | Navigation hint at the bottom-left of the viewport |\n\n### Defaults\n- **Default size for a primary slide headline**: `{typography.headline}` (up to 120px) in Bricolage 800 uppercase.\n- **Default size for a cover-scale title**: `{typography.display-cover}` (up to 180px).\n- **Default size for the hero typographic anchor on cover-class slides**: `{typography.display-jumbo-numeral}` (italic Fraunces up to 480px) — the system's signature hero element.\n- **Default size for a body paragraph**: `{typography.body-serif-italic}` (up to 22px) in italic Fraunces.\n- **Default size for a lede paragraph**: `{typography.body-serif-italic-lg}` (up to 28px).\n- **Default size for body text inside a card**: `{typography.body-roman}` (up to 17px) in **roman** Fraunces — the roman is more readable at small sizes than italic.\n- **Default size for an \"EDITION N.\" label**: `{typography.edition-label}` (up to 30px) in italic Fraunces, paired with an `{components.ed-badge}` circular ordinal.\n- **Default weight for any Bricolage display moment**: 800. (Weight 700 is reserved for the quote body and course/who-tag elements; weight 800 is the primary display weight.)\n- **Default weight for any Fraunces body moment**: 400.\n\nWhen unsure, reach for `{typography.headline}` (up to 120px) for a routine slide headline. The 140–180px tier is for featured-edition titles and covers; the 160px tier is for section openers. Use the jumbo edition numeral when the slide is a cover-class moment and needs a hero anchor.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Bricolage display element is UPPERCASE with negative letter-spacing (-0.005em to -0.012em).** A sentence-case Bricolage headline does not exist in this system. The uppercase + negative-tracking + weight 800 combination is the system's display voice.\n- **Every Fraunces body element is italic by default.** Roman Fraunces appears only for specific tight cases (info-key in info-rows, body inside index cards). When in doubt, italic.\n- **The edition badge (`{components.ed-badge}`) is always paired with an italic edition label** — the circle ordinal and the \"EDITION N.\" text are one unit. Using one without the other reads as broken.\n- **Every card / pill / rect-tag / badge carries a 1.5px solid ink border with no fill.** The single-weight outlined-shape vocabulary is the system's structural language. Filled shapes do not exist.\n- **The paper-texture overlay (`{components.paper-texture}`) is on every slide.** Removing it (or running the system on a pure flat cream without texture) loses the printed-paper quality.\n- **Every slide carries the page-number marker** at bottom-right in italic Fraunces. The page-number is the system's spine — without it, slides feel unanchored.\n- **Internal dividers inside cards alternate between 1px solid @ 32% opacity (above content) and 1px dashed @ 32% opacity (below content).** The solid/dashed pairing is the system's card-rhythm device.\n\n### Typography Principles\nThe weight 800 + uppercase + negative letter-spacing combination is the system's Bricolage voice. Switching any of those three properties (e.g., weight 700 uppercase, or weight 800 sentence case, or default tracking) reads as a different design system. The Fraunces italic-default + opsz-axis combination is the system's body voice — using a non-opsz fallback face flattens the quality at small sizes.\n\nUnderline is not used. Bold within body paragraphs uses Fraunces weight 600 (not 700/800). Color emphasis does not exist because there is only one color. The system's only emphasis mechanisms are: scale (bigger Bricolage), weight shift inside body (Fraunces 400 → 600), italic ↔ roman switch, and opacity (full → 78%).\n\n## Layout\n\n### Canvas System\nThe system targets a fluid viewport — each `.slide` is `100vw × 100vh` with absolute positioning. Slides stack inside a `.stage` container with the paper-texture overlay sitting absolutely on the stage. Only one `.slide.active` is visible at a time; opacity transitions between slides take 280ms.\n\n### Padding Scale (uses `clamp()` ranges)\n| Token | Range | Use |\n|---|---|---|\n| `{spacing.slide-pad-h-default}` | clamp(60px, 5vw, 110px) | Default horizontal slide padding |\n| `{spacing.slide-pad-h-wide}` | clamp(80px, 7vw, 160px) | Wider horizontal padding for featured / calendar slides |\n| `{spacing.slide-pad-h-narrow}` | clamp(120px, 12vw, 280px) | Narrow horizontal padding for menu / quote slides (forces content into a column) |\n| `{spacing.slide-pad-top-default}` | clamp(96px, 10vh, 160px) | Default top padding |\n| `{spacing.slide-pad-top-cover}` | clamp(60px, 6vh, 100px) | Cover top padding (less, to give the title room) |\n| `{spacing.slide-pad-bottom-default}` | clamp(110px, 11vh, 170px) | Default bottom padding (leaves room for page-num chrome) |\n| `{spacing.slide-pad-bottom-wide}` | clamp(150px, 14vh, 220px) | Wider bottom padding for featured / quote slides |\n| `{spacing.gap-section}` | clamp(28px, 3vh, 50px) | Between major content sections |\n| `{spacing.gap-content}` | clamp(18px, 2vh, 32px) | Between related content blocks |\n| `{spacing.gap-row}` | clamp(14px, 1.6vh, 24px) | Between row-level elements (course rows, ledger rows) |\n| `{spacing.gap-tight}` | clamp(10px, 1.2vh, 18px) | Between tightly coupled elements |\n\n### Chrome Anatomy\nEvery slide carries a **page-number marker** at the bottom-right (italic Fraunces, ~16px max). The viewport also carries a **nav-hint** at the bottom-left (italic Fraunces, 45% opacity), suggesting keyboard navigation. These two chrome elements are the system's universal slide anchors.\n\nSlides with a topbar (index, calendar) carry a Bricolage headline on the left + a small italic Fraunces label-tag on the right, separated below by a 1.5px solid ink horizontal rule. The topbar-divider is the system's universal page-divider device.\n\n### Border-Radius\n- **999px** — pill buttons (fully pill-shaped)\n- **50%** — circular edition badges\n- **0** — every other shape (cards, rect-tags, info-cards, ledger rows, internal dividers)\n\nThe system uses sharp corners for content containers and pill/circle for action and ordinal markers. No medium border-radius values (4px, 8px, 12px) exist.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThe system uses **zero shadows**. No box-shadow, no text-shadow, no filter, no gradient. Elevation is communicated entirely through:\n\n1. **1.5px solid ink borders** on cards, pills, badges, rect-tags — the outlined-shape vocabulary is the system's structural depth.\n2. **1px solid or dashed internal dividers at 32% opacity** inside cards and between rows — the subtle horizontal lines give cards their internal rhythm.\n3. **The paper-texture overlay** at 10% opacity on every slide — the dotted texture sits atmospherically beneath all content, giving the page its print-stock quality.\n4. **Opacity layering on text** — primary at 100%, de-emphasized metadata at 78%, near-invisible dividers at 32%.\n\nThe absence of shadow is itself the depth language. Adding `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` shatters the printed-paper feel.\n\n### Paper Texture as Atmospheric Depth\nThe radial-dot texture on `.stage::before` is part of the depth system — it is not optional decoration. The texture gives the cream surface a quality that flat #FAF1E2 lacks: a sense that the surface is paper stock with grain, not a CSS background fill. The 4px tile size with 0.5px radial dots in 50%-opacity ink at 10% overall opacity is calibrated to be invisible at conversational viewing distance and just-visible at close inspection.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **1.5px solid `{colors.ink}`** — the universal structural border. Cards, pills, edition badges, rect-tags, topbar dividers, who-row top borders, info-card outlines.\n- **1px solid `{colors.ink-32}`** — internal solid dividers inside cards (between card-top metadata and the card title), between ledger rows, between course rows.\n- **1px dashed `{colors.ink-32}`** — internal dashed dividers inside cards (between the card body and the meta-row at the bottom), between info-rows in info-cards.\n\nBorders are never thicker than 1.5px. Never colored beyond ink (full or 32%). Never dotted (dotted is reserved for the paper-texture pattern). The solid/dashed pairing inside cards is the system's signature rhythm device.\n\n### Decorative Element Types\n\n**Paper Texture Overlay** (`{components.paper-texture}`) — A 4px-tile radial-dot pattern in 50%-opacity ink at 10% overall opacity on `.stage::before`. The system's atmospheric base; on every slide.\n\n**Pill Button** (`{components.pill}`) — An outlined fully-rounded-rectangle (border-radius 999px) holding short italic Fraunces text. The system's CTA / action button. Pills cluster in action rows (e.g., cover action row).\n\n**Pill Divider** (`{components.pill-divider}`) — A small italic Fraunces character (typically `·` or `/`) at 70% opacity placed between pills in a row.\n\n**Edition Badge** (`{components.ed-badge}`) — A ~38px circular outlined badge holding a single italic Fraunces digit. The system's edition / chapter ordinal marker; always paired with an italic \"EDITION N.\" label.\n\n**Rect Tag** (`{components.rect-tag}`) — An outlined sharp-cornered rectangular tag holding short italic Fraunces text. The sharp-cornered cousin of the pill; used where roundness isn't appropriate.\n\n**Outlined Card** (`{components.card-outlined}`) — A 1.5px ink-outlined rectangular card. Holds a card-top metadata row (separated below by a 1px @ 32% solid divider), a Bricolage card title, a Fraunces body description, and a meta-row at the bottom (separated above by a 1px @ 32% dashed divider). The system's primary content card.\n\n**Topbar with Divider** — A Bricolage headline on the left + a small italic Fraunces label-tag on the right, separated below by a 1.5px solid ink horizontal rule. The system's universal section opener.\n\n**Info-Card** — A wider outlined card with internal info-rows (key / value pairs separated by 1px @ 32% dashed dividers). Used as a featured-edition supporting panel.\n\n**Ledger Row** (`{components.ledger-row}`) — A multi-column grid row with a 1px @ 32% solid border-bottom. Holds tags, labels, and pills aligned in columns. The system's calendar / schedule / index pattern.\n\n**Course Row** — A 64px / 1fr / auto grid row with a 1px @ 32% solid border-bottom. Holds a Fraunces num-tag, an item (Bricolage name + Fraunces description), and a Fraunces pairing tag. The menu / programme pattern.\n\n**Italic Jumbo Edition Numeral** — A massive italic Fraunces digit at up to 480px. The system's signature hero typographic anchor on cover-class slides, paired with a small tracked Bricolage label beneath and an italic Fraunces meta line.\n\n**Page Number** (`{components.pagenum}`) — Italic Fraunces at the bottom-right of every slide.\n\n**Nav Hint** (`{components.nav-hint}`) — Italic Fraunces at 45% opacity at the bottom-left of the viewport, suggesting keyboard navigation.\n\n## Do's and Don'ts\n\n### Do\n- Commit to single-ink rendering. Every text, border, rule, badge, and pill is `{colors.ink}` — the warm rust terracotta. Use opacity (78%, 32%, 10%) for variation, never a different hue.\n- Apply the paper-texture overlay to every slide. The 4px radial-dot pattern at 10% opacity is part of the design system, not optional polish.\n- Run every Bricolage display element at weight 800 (or 700 for quote / course-name / who-tag) in strict uppercase with negative letter-spacing.\n- Run every Fraunces body element in italic by default. Use roman only for info-keys (where italic tracking would feel out of place) and card body descriptions (where italic at small size is less readable).\n- Reach for the italic Fraunces jumbo numeral (up to 480px) as the hero typographic anchor on cover-class slides. It's the system's signature.\n- Pair every edition badge with an italic \"EDITION N.\" Fraunces label — the circle ordinal and the text label are one unit.\n- Use the outlined-card pattern (1.5px ink border + internal 1px @ 32% solid divider above content + 1px @ 32% dashed divider below content) for primary content cards. The solid/dashed pairing is the system's rhythm.\n- Use the pill (border-radius 999px) and the rect-tag (sharp corners) intentionally — pill for actions, rect for metadata / status. Don't conflate them.\n- Place the page-number marker (italic Fraunces, bottom-right) on every slide. The marker is the system's spine.\n- Keep slides rich-but-curated: one major Bricolage display moment + 2–4 supporting groups (cards, pills, ledger rows, info pairs). Single-element slides feel underweight; 8-element slides feel broken.\n\n### Don't\n- Don't introduce a second ink color. The system is single-ink — adding a navy, green, yellow, or any second hue shatters the printed-program register.\n- Don't fill any shape. Cards, pills, badges, rect-tags are outline-only. Filled rectangles in the ink color do not exist.\n- Don't use box-shadow, gradient, blur, or filter on any element. The system is flat printed paper.\n- Don't omit the paper-texture overlay. A flat #FAF1E2 background without the dot pattern reads as digital, not paper.\n- Don't run Bricolage in sentence case. Bricolage is always uppercase with negative tracking and weight 700 or 800.\n- Don't render Fraunces in roman by default. Italic is the body voice; roman is the exception for specific tight cases.\n- Don't use thicker borders (2px+). The 1.5px structural border weight is the system's commitment.\n- Don't use a medium border-radius (4px, 8px, 12px). The system uses 999px (pill), 50% (badge), or 0 (everything else).\n- Don't pair the edition badge with a non-Fraunces label or skip the label entirely. The badge-and-label unit is the system's edition marker.\n- Don't crowd a slide with 8 small elements. Reach for fewer, larger groups with breathing room.\n\n## Responsive Behavior\n\nThe system uses **`clamp()` units throughout** — every size, padding, gap, and rule scales fluidly between minimum and maximum based on viewport width and height. The same composition renders correctly on a 1280×720 laptop, a 1920×1080 monitor, and a 2560×1440 display without media queries.\n\n### Scaling Behavior\n- Bricolage display sizes clamp between a min (e.g. 60px), a vw/vh-based middle value, and a max (e.g. 140px). The `min()` inner function combines width-based and height-based caps so headlines never overflow on short viewports.\n- Fraunces body sizes follow the same pattern but with smaller ranges.\n- Padding and gaps scale linearly with vw/vh.\n- The 1.5px structural border and 1px @ 32% internal dividers are fixed-pixel and do not scale, which means at larger viewports the borders appear proportionally finer. This is by design.\n\n### Presenter Behavior\n- Slides advance via keyboard navigation (handled by deck JavaScript).\n- Only one `.slide.active` is visible at a time; non-active slides are `opacity: 0; pointer-events: none`.\n- Slide-to-slide transition is a 280ms opacity fade.\n- The nav-hint at the bottom-left (\"← → to navigate\") tells the viewer how to advance.\n\n### Print / Export\nThere is no `@media print` rule in the system. Print export will render only the active slide; multi-slide print requires per-slide rendering or a dedicated print stylesheet.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display / cover / headline (Bricolage roles, 96–180px) | 思源宋体 Noto Serif SC | 700 | Mincho heavy weight carries the printed-program mass that Bricolage 800 provides in Latin |\n| Card title / course-name / info-value (28–44px) | 思源宋体 Noto Serif SC | 700 | Same Mincho voice at smaller sizes for consistency |\n| Hero edition numeral (480px italic Fraunces) | 思源宋体 Noto Serif SC | 400 | Use a Chinese ordinal character (一二三 / 春夏秋) for the hero anchor instead of a Western digit |\n| Body / lede / tagline (Fraunces italic roles) | 思源宋体 Noto Serif SC | 400 | Mincho body voice — warmth without italic, since Chinese has no italic |\n| Pill text / meta-tag / pagenum | 思源宋体 Noto Serif SC | 400 | Keep all chrome in Mincho 400; the system's single-ink discipline carries through |\n| Info-key / edition-label-tracked (uppercase tracked roles) | 思源宋体 Noto Serif SC | 400 with 0.16em letter-spacing | Maintains the tracked-chrome feel |\n\n### Mixed-Content Strategy\n\nUse **Strategy A** — switch the entire face stack to Noto Serif SC across all roles, replacing both Bricolage Grotesque (display) and Fraunces (body). Long Table is a minimal single-ink data / program system where the typographic personality is carried more by the **single-ink rust terracotta**, the **outlined-shape vocabulary**, and the **paper-texture overlay** than by the specific Latin faces. Going all-Mincho in Chinese preserves the printed-program register cleanly without the per-glyph baseline wobble that Strategy C would introduce on a system this typographically dense. Stack:\n\n```css\n/* Bricolage roles (display, headline, card-title, course-name, info-value) */\nfont-family: 'Bricolage Grotesque', 'Noto Serif SC', sans-serif;\n/* Fraunces roles (body, lede, tagline, pill, pagenum, edition-label) */\nfont-family: 'Fraunces', 'Noto Serif SC', Georgia, serif;\n```\n\nWhen the deck content is pure Chinese, override both font stacks to lead with Noto Serif SC. Bricolage roles get weight 700 (matches 800 mass in Mincho), Fraunces roles get weight 400.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.86–0.95 on display, 1.45–1.5 on body) read as cramped in Chinese. Bump display to 1.0–1.1 and body to 1.55–1.65.\n- **Remove negative letter-spacing on CJK headlines.** Bricolage display uses -0.005em to -0.012em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Bricolage portion was meant to be capitalized. (This matters here — every Bricolage display element in the source is `text-transform: uppercase`.)\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between Noto Serif SC weight 400 and 700 inside the same sentence — pick the weight that matches the role (headline = 700, body = 400) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nLong Table's whole voice is \"supper-club poster / Risograph zine / small-press dinner program\" — single-ink rust terracotta on cream, outlined shapes, paper-texture overlay. In Chinese, the system's identity does not depend on the specific Latin faces (Bricolage and Fraunces); it depends on the **single-ink commitment**, the **1.5px outlined-shape vocabulary**, the **4px radial-dot paper texture**, and the **rich-but-curated density**. Going all-Noto-Serif-SC preserves every one of those identity markers cleanly.\n\nThe default-italic body rule does not translate to Chinese (Chinese has no italic concept; slanted Han glyphs read as broken, not as a body voice). In Chinese, every Fraunces-italic role simply becomes **Noto Serif SC weight 400 upright** — the warmth comes from the Mincho character itself, not from the slant. This is the right trade-off for this system.\n\nThe hero italic Fraunces jumbo numeral (up to 480px) is the system's signature anchor in Latin — a single italic digit acting as a typographic centerpiece. In Chinese, **use a Chinese ordinal or season character instead of a Western digit**: 「三」、「五」、「春」、「秋」, rendered in Noto Serif SC at weight 400. The Han glyph's denser visual weight at 480px balances the cover slide better than a Western digit would; the cream paper background and warm rust ink carry the printed-program feel through unchanged.\n\nThe system's outlined-shape vocabulary (pills, edition badges, rect-tags, outlined cards) works identically in Chinese — no adjustments needed. The \"EDITION N.\" label paired with the circular badge becomes 「第三期」or 「第 03 期」inside the circle, with the meta-label below in Noto Serif SC 400. The 32%-opacity solid / dashed internal divider rhythm is purely structural and unaffected by language.\n\n### Known CJK Gap\n\nThe Fraunces italic-default body voice is one of Long Table's most distinctive typographic moves in Latin — italic Mincho-style serif body that gives the system its lyrical, hand-written warmth. Chinese has no equivalent: there is no commonly-available \"italic Mincho\" face on the Google Fonts CDN, and slanted Han glyphs read as broken regardless. The Chinese rendering loses the italic-default character — every body line becomes upright Noto Serif SC weight 400. This is a real loss of personality, partially compensated by Noto Serif SC's own warmth at body sizes, but Chinese-content Long Table decks read measurably more \"neutral magazine\" than \"supper-club poster.\" For decks where this matters, lean harder on the **single-ink color** and the **paper-texture overlay** to carry the warmth that the italic body would have carried in Latin.\n\n## Iteration Guide\n\n1. Any new mark on a slide is in `{colors.ink}` — full opacity for primary, 78% for de-emphasized metadata, 32% for internal dividers. No second color.\n2. Any new headline is Bricolage Grotesque weight 800 uppercase with negative letter-spacing. Pick the size from the headline ladder (96 / 100 / 120 / 140 / 160 / 180px max) — do not invent a new size.\n3. Any new body paragraph is Fraunces italic at weight 400. Use roman only for info-keys (tracked uppercase) and card-body descriptions.\n4. Any new edition / ordinal marker uses the `{components.ed-badge}` (circular outline) paired with an italic \"EDITION N.\" Fraunces label.\n5. Any new action button is the `{components.pill}` (border-radius 999px); any new metadata tag is the `{components.rect-tag}` (sharp corners). Don't conflate the two.\n6. Any new card is the `{components.card-outlined}` pattern: 1.5px ink border, internal 1px @ 32% solid divider above content, internal 1px @ 32% dashed divider below content.\n7. Any new ledger / schedule / calendar row uses the multi-column grid + 1px @ 32% solid border-bottom pattern (`{components.ledger-row}`).\n8. Any new section opener uses the topbar pattern: Bricolage headline + small italic Fraunces label on the right + 1.5px solid ink horizontal rule beneath.\n9. Any new cover-class moment reaches for the italic Fraunces jumbo edition numeral as the hero typographic anchor — paired with a small tracked Bricolage label beneath and a italic Fraunces meta line.\n10. Every slide carries the page-number marker. If you skip it, the slide will feel unanchored.\n\n## Known Gaps\n\n- The two Google Fonts (Bricolage Grotesque with `opsz` 12..96, Fraunces with `opsz` 9..144) are loaded via `<link>`. Offline rendering will fall back to system sans (for Bricolage) and Georgia (for Fraunces) — which loses the optical-size axis and the personality of both faces. Self-hosting recommended for offline / print reliability.\n- The `opsz` optical-size axis is critical to quality at large display sizes (480px jumbo numeral) and small metadata sizes (14px page-number). Fallback faces without `opsz` will look noticeably flat at the extremes.\n- The system is single-ink by design. If a deck needs a second emphasis color (a \"callout\" or \"warning\" hue), the system cannot accommodate it without breaking the printed-program register. Use Bricolage scale + opacity + italic/roman switch as the only emphasis mechanisms.\n- The paper-texture overlay uses a `background-image` radial-gradient that may render with subtle compression artifacts on some browsers at high zoom. The texture is essential to the system identity; do not remove it as a \"performance optimization.\"\n- Body paragraphs are italic by default. For deck content where italic at body scale is hard to read (long technical paragraphs, code samples), the system has no clean fallback — italic is the body voice. Keep paragraphs short and lyrical.\n- The CSS has several empty rule blocks (`.body-it { ... }`, `.s-cover .stats .num { font-weight: 600; }` etc.) where the original commented-out italic / weight properties have been stripped. The intended treatment in many places is \"italic Fraunces at weight 400\" — the default style — but the empty blocks make this implicit rather than explicit. Treat italic as the default everywhere the comments hint at it.\n- The system loads Bricolage weights 400 and 600 and Fraunces weights 500 — these are not actively used in the published CSS. Using them would introduce intermediate weights that break the single-weight commitment per face.\n- The fallback `.body-it` and `.body-ro` utility classes are defined but use the explicit class names sparingly in the markup. Most slides set typography per-element rather than via the utility classes — copy the per-element styles when authoring new slides, not the utilities.\n- The hero italic Fraunces jumbo numeral at 480px is a literal numeral character — there is no glyph alternation or kerning fix for specific characters. The \"0\" and \"8\" glyphs may need optical adjustment at extreme sizes; check rendering at the target viewport.\n- The system has no `@media print` rule. Print export will not paginate; treat Long Table as screen-first.\n","frontmatter":{"version":"alpha","name":"Long Table","description":"A warm, single-ink editorial system in the register of a supper-club poster, a small-batch zine, or a Risograph-printed program. The entire system runs in one ink color — a warm rust terracotta (#B53D2A) — on a buttery cream paper ground (#FAF1E2), with a subtle 4px radial-dot texture overlay giving the surface its \"printed paper\" quality. Display type runs in Bricolage Grotesque at weight 700–800 in uppercase; body and metadata run in Fraunces serif at weight 400–600 with optical-size axis engaged. Pill buttons, outlined edition badges, italic-edition numerals, and dashed/solid 1.5px borders complete the printed-program vocabulary.","colors":{"paper":"#FAF1E2","paper-d":"#F2E5CF","paper-vd":"#E8D7B6","ink":"#B53D2A","ink-dp":"#8E2D1F","rule":"#B53D2A","ink-32":"rgba(181, 61, 42, 0.32)","ink-78":"rgba(181, 61, 42, 0.78)","ink-50":"rgba(181, 61, 42, 0.5)"},"color-aliases":{"rule":"ink","ink-32-canonical":"Same ink #B53D2A at 32% opacity, used for dashed dividers and subtle internal rules","ink-78-canonical":"Same ink #B53D2A at 78% opacity, used for de-emphasized metadata"},"typography":{"display-jumbo-numeral":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(180px, min(22vw, 38vh), 480px)","fontWeight":400,"lineHeight":0.86,"letterSpacing":"-0.02em","fontStyle":"italic"},"display-cover":{"fontFamily":"'Bricolage Grotesque', sans-serif","fontSize":"clamp(82px, min(8.8vw, 15vh), 180px)","fontWeight":800,"lineHeight":0.92,"letterSpacing":"-0.012em","textTransform":"uppercase"},"display":{"fontFamily":"'Bricolage Grotesque', sans-serif","fontSize":"clamp(72px, min(7.6vw, 13vh), 160px)","fontWeight":800,"lineHeight":0.9,"letterSpacing":"-0.012em","textTransform":"uppercase"},"headline-xl":{"fontFamily":"'Bricolage Grotesque', sans-serif","fontSize":"clamp(60px, min(6.4vw, 10.5vh), 140px)","fontWeight":800,"lineHeight":0.9,"letterSpacing":"-0.012em","textTransform":"uppercase"},"headline":{"fontFamily":"'Bricolage Grotesque', sans-serif","fontSize":"clamp(56px, min(6vw, 10vh), 120px)","fontWeight":800,"lineHeight":0.9,"letterSpacing":"-0.012em","textTransform":"uppercase"},"headline-md":{"fontFamily":"'Bricolage Grotesque', sans-serif","fontSize":"clamp(48px, min(5vw, 8.4vh), 100px)","fontWeight":800,"lineHeight":0.92,"letterSpacing":"-0.012em","textTransform":"uppercase"},"quote":{"fontFamily":"'Bricolage Grotesque', sans-serif","fontSize":"clamp(40px, min(4.4vw, 7.4vh), 96px)","fontWeight":700,"lineHeight":0.95,"letterSpacing":"-0.012em","textTransform":"uppercase"},"card-title":{"fontFamily":"'Bricolage Grotesque', sans-serif","fontSize":"clamp(28px, 2.4vw, 44px)","fontWeight":800,"lineHeight":0.95,"letterSpacing":"-0.008em","textTransform":"uppercase"},"course-name":{"fontFamily":"'Bricolage Grotesque', sans-serif","fontSize":"clamp(20px, 1.5vw, 28px)","fontWeight":700,"lineHeight":1.05,"letterSpacing":"-0.005em","textTransform":"uppercase"},"info-value":{"fontFamily":"'Bricolage Grotesque', sans-serif","fontSize":"clamp(20px, 1.6vw, 28px)","fontWeight":700,"lineHeight":1.1,"letterSpacing":"-0.005em","textTransform":"uppercase"},"edition-label-tracked":{"fontFamily":"'Bricolage Grotesque', sans-serif","fontSize":"clamp(15px, 1.1vw, 18px)","fontWeight":700,"letterSpacing":"0.18em","textTransform":"uppercase"},"who-tag":{"fontFamily":"'Bricolage Grotesque', sans-serif","fontSize":"clamp(15px, 1.05vw, 18px)","fontWeight":700,"letterSpacing":"-0.005em","textTransform":"uppercase"},"body-serif-italic-lg":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(20px, 1.5vw, 28px)","fontWeight":400,"lineHeight":1.45,"fontStyle":"italic"},"body-serif-italic":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(17px, 1.2vw, 22px)","fontWeight":400,"lineHeight":1.5,"fontStyle":"italic"},"body-roman":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(15px, 1vw, 17px)","fontWeight":400,"lineHeight":1.45},"edition-label":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(20px, 1.6vw, 30px)","fontWeight":400,"lineHeight":1,"fontStyle":"italic"},"tagline":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(18px, 1.4vw, 26px)","fontWeight":400,"lineHeight":1.35,"fontStyle":"italic"},"stats":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(17px, 1.2vw, 22px)","fontWeight":400,"lineHeight":1.4,"fontStyle":"italic"},"pill-text":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(15px, 1.1vw, 20px)","fontWeight":400,"lineHeight":1,"fontStyle":"italic"},"meta-tag":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(14px, 0.95vw, 16px)","fontWeight":400,"lineHeight":1.4,"fontStyle":"italic"},"info-key":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(14px, 0.95vw, 16px)","fontWeight":400,"letterSpacing":"0.16em","textTransform":"uppercase","fontStyle":"italic"},"pagenum":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(14px, 0.95vw, 16px)","fontWeight":400,"letterSpacing":"0.02em","fontStyle":"italic"},"nav-hint":{"fontFamily":"'Fraunces', Georgia, serif","fontSize":"clamp(11px, 0.78vw, 13px)","fontWeight":400,"letterSpacing":"0.02em","fontStyle":"italic"}},"spacing":{"slide-pad-h-default":"clamp(60px, 5vw, 110px)","slide-pad-h-wide":"clamp(80px, 7vw, 160px)","slide-pad-h-narrow":"clamp(120px, 12vw, 280px)","slide-pad-top-default":"clamp(96px, 10vh, 160px)","slide-pad-top-cover":"clamp(60px, 6vh, 100px)","slide-pad-bottom-default":"clamp(110px, 11vh, 170px)","slide-pad-bottom-wide":"clamp(150px, 14vh, 220px)","gap-section":"clamp(28px, 3vh, 50px)","gap-content":"clamp(18px, 2vh, 32px)","gap-row":"clamp(14px, 1.6vh, 24px)","gap-tight":"clamp(10px, 1.2vh, 18px)","border-weight":"1.5px","rule-dashed-color":"{colors.ink-32}"},"canvas":{"width":"100vw","height":"100vh"},"components":{"pill":{"description":"Outlined rounded-rectangle (border-radius 999px → fully pill) holding short italic Fraunces text. The system's CTA / action button. Border is 1.5px solid {colors.ink}; padding is generous (~12px / 28px); text-color is {colors.ink}.","border":"1.5px solid {colors.ink}","borderRadius":"999px","padding":"clamp(8px, 1vh, 14px) clamp(20px, 2vw, 32px)","typography":"{typography.pill-text}"},"pill-divider":{"typography":"{typography.pill-text}","opacity":0.7,"description":"A small italic Fraunces divider character (typically · or /) used inline between adjacent pills."},"ed-badge":{"description":"A small circular outlined badge (~38px) holding a single italic Fraunces digit. The edition / chapter ordinal marker. Border is 1.5px solid {colors.ink}; background is transparent.","width":"clamp(34px, 2.6vw, 44px)","height":"clamp(34px, 2.6vw, 44px)","border":"1.5px solid {colors.ink}","borderRadius":"50%"},"rect-tag":{"description":"Outlined rectangular tag — like the pill but with sharp corners. Holds short italic Fraunces text. Used as a category / status / metadata chip when the pill's roundness isn't appropriate.","border":"1.5px solid {colors.ink}","padding":"clamp(7px, 0.9vh, 12px) clamp(14px, 1.4vw, 22px)","typography":"{typography.pill-text}"},"card-outlined":{"description":"A 1.5px ink-outlined rectangular content card. Holds a card-top metadata row (separated below by a 1px @ 32%-opacity rule), a Bricolage card-name, a Fraunces body description, and a meta-row at the bottom (separated above by a 1px dashed @ 32%-opacity rule). The system's primary content card pattern.","border":"1.5px solid {colors.ink}","padding":"clamp(20px, 2vh, 32px) clamp(20px, 1.8vw, 30px)","internalDivider-solid":"1px solid {colors.ink-32}","internalDivider-dashed":"1px dashed {colors.ink-32}"},"paper-texture":{"description":"Subtle radial-dot texture overlay on the stage. A 4px-tile background-image of 0.5px radial-gradient dots in {colors.ink-50} at 10% opacity. Sits absolutely on the stage with pointer-events disabled, giving the paper its Risograph / printed-stock quality. This is on every slide.","backgroundImage":"radial-gradient(circle at 1px 1px, {colors.ink-50} 0.5px, transparent 1px)","backgroundSize":"4px 4px","opacity":0.1},"topbar-divider":{"description":"A 1.5px ink solid border-bottom under a slide topbar (where a Bricolage headline sits beside a small Fraunces label). The horizontal rule beneath the topbar is the system's universal page-divider device.","borderBottom":"1.5px solid {colors.ink}"},"pagenum":{"position":"absolute","placement":"right: clamp(36px, 3.6vw, 80px); bottom: clamp(40px, 4vh, 64px)","typography":"{typography.pagenum}","color":"{colors.ink}","description":"Italic Fraunces page number at the bottom-right of every slide."},"nav-hint":{"position":"fixed","placement":"left: clamp(36px, 3.6vw, 80px); bottom: clamp(40px, 4vh, 64px)","typography":"{typography.nav-hint}","color":"{colors.ink}","opacity":0.45,"description":"A faint italic Fraunces hint string at the bottom-left of the viewport (e.g. '← → to navigate'). Bonus interactivity affordance."},"ledger-row":{"description":"A horizontal ledger-style row in a calendar/schedule context. Multi-column grid (typical: 80px / 130px / 1.6fr / 0.9fr / auto) with a 1px @ 32%-opacity ink border-bottom. Each cell is a tag, label, or pill. Reads as a guestbook / restaurant-reservation log.","rowPad":"clamp(11px, 1.3vh, 18px) 0","borderBottom":"1px solid {colors.ink-32}"}}},"isInternal":false,"tokens":12811,"sizeBytes":48984},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/long-table/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/long-table/preview.md","title":"Long-table Skill","category":"anthropic-skill","format":"markdown","content":"# Long Table Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/long-table/design.md`\n- Preview card: `bold-template-pack/templates/long-table/preview.md`\n\n## Selection Metadata\n\n- Slug: `long-table`\n- Tagline: Warm cream and rust-red supper-club aesthetic with bold uppercase grotesk headlines, Fraunces serifs, and pill-shaped outlined buttons.\n- Mood: warm, intimate, modern, friendly, small-batch, social, hospitality\n- Tone: warm, playful, considered, social, magazine-friendly, modern-editorial\n- Formality: medium\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel like a warm, intimate, modern hospitality / community brand: supper clubs, dinner series, small restaurants, creative-studio events, membership pitches, lifestyle and wine brands. Equally good for any deck wanting a single warm accent colour, mixed-weight typography, and a social-media-aware modern-editorial voice.\n- Avoid for: Decks that need corporate polish, technical density, or a cold / minimalist register — the rust-red palette and bold serif mix are intentionally warm and people-facing.\n\n## Visual Snapshot\n\nA warm, single-ink editorial system in the register of a supper-club poster, a small-batch zine, or a Risograph-printed program. The entire system runs in one ink color — a warm rust terracotta (#B53D2A) — on a buttery cream paper ground (#FAF1E2), with a subtle 4px radial-dot texture overlay giving the surface its \"printed paper\" quality. Display type runs in Bricolage Grotesque at weight 700–800 in uppercase; body and metadata run in Fraunces serif at weight 400–600 with optical-size axis engaged. Pill buttons, outlined edition badges, italic-edition numerals, and dashed/solid 1.5px borders complete the printed-program vocabulary.\n\nLong Table is a single-ink editorial system in the register of a supper-club poster, a Risograph zine, or a small-press dinner program. The foundational premise is monochromatic: every visible mark in the system — every headline, every paragraph, every border, every rule, every pill, every page number — is rendered in a single warm rust terracotta ink ({colors.ink} — #B53D2A) on a buttery cream paper ground ({colors.paper} — #FAF1E2). The only chromatic variation is opacity: the same ink at 100% for primary marks, at 78% for de-emphasized metadata, at 32% for dashed internal dividers, at 10% for the paper-texture dots.\n\n## Preview Ingredients\n\n- Palette: paper #FAF1E2; paper-d #F2E5CF; paper-vd #E8D7B6; ink #B53D2A; ink-dp #8E2D1F; rule #B53D2A\n- Typography: See full design doc after selection.\n- Signature move: Bricolage Grotesque at weights 700 and 800 in strict uppercase carries every display moment — covers, headlines, card titles, course names, quote bodies, info values, who-tags. Bricolage is a wide, slightly-condensed grotesque with strong personality; its upp...\n- Signature move: Fraunces at weight 400–600 carries every body paragraph, every metadata field, every pill, every page number, every edition label. Italic Fraunces is the default body style — the slanted serif is the system's body voice, lending warmth and editorial personali...\n- Signature move: One ink color ({colors.ink} — warm rust terracotta) on cream paper ({colors.paper}). Opacity variants are the only color variation.\n- Signature move: Bricolage Grotesque weight 700–800 uppercase for every display moment; Fraunces 400–600 italic-default for every body and metadata moment.\n- Signature move: Subtle 4px radial-dot paper texture on every slide via .stage::before — invisible at distance, present up close.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1216,"sizeBytes":5226},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/mat/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/mat/design.md","title":"Mat","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Mat\ndescription: A warm, material-tactile presentation system inspired by a high-end product landing page. Dark forest green is the dominant environment, warmed by a low atmospheric wood-brown glow from the bottom-right corner of every dark slide. Cream type floats directly on the field; warm orange acts as the single accent. The typeface stack pairs Bricolage Grotesque (a heavy, rounded grotesque) for display with DM Sans for body and DM Mono for labels — the result reads as industrial-design portfolio meets boutique product launch, never tech demo.\n\ncolors:\n  bg-dark: \"#232E26\"\n  bg-dark-alt: \"#2E3D30\"\n  bg-cream: \"#EDE6D0\"\n  bg-cream-alt: \"#E4DAC4\"\n  ink-cream: \"#F0E8D2\"\n  ink-cream-2: \"rgba(240, 232, 210, 0.58)\"\n  ink-cream-3: \"rgba(240, 232, 210, 0.3)\"\n  ink-dark: \"#1E2820\"\n  ink-dark-2: \"rgba(30, 40, 32, 0.6)\"\n  ink-dark-3: \"rgba(30, 40, 32, 0.3)\"\n  accent-orange: \"#C07030\"\n  border-on-dark: \"rgba(240, 232, 210, 0.12)\"\n  border-on-cream: \"rgba(30, 40, 32, 0.14)\"\n  wood-glow: \"#7A4E24\"\n\ncolor-aliases:\n  c-fg: ink-cream\n  c-fg-light: ink-dark\n  c-bg: bg-dark\n  c-bg-light: bg-cream\n  c-accent: accent-orange\n\ntypography:\n  display:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 12vw\n    fontWeight: 800\n    lineHeight: 0.88\n    letterSpacing: -0.03em\n  h1:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 7vw\n    fontWeight: 800\n    lineHeight: 0.92\n    letterSpacing: -0.025em\n  h2:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 4vw\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  h3:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 2.4vw\n    fontWeight: 600\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  lead:\n    fontFamily: \"DM Sans, Noto Sans SC, sans-serif\"\n    fontSize: 1.5vw\n    fontWeight: 400\n    lineHeight: 1.55\n  body:\n    fontFamily: \"DM Sans, Noto Sans SC, sans-serif\"\n    fontSize: 1.05vw\n    fontWeight: 400\n    lineHeight: 1.65\n  caption:\n    fontFamily: \"DM Sans, Noto Sans SC, sans-serif\"\n    fontSize: 0.82vw\n    fontWeight: 400\n    lineHeight: 1.5\n  label:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 0.7vw\n    fontWeight: 400\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  stat-value:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 5.5vw\n    fontWeight: 800\n    lineHeight: 1.0\n    letterSpacing: -0.025em\n  quote-text:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 3.4vw\n    fontWeight: 600\n    lineHeight: 1.2\n    letterSpacing: -0.02em\n  quote-mark:\n    fontFamily: \"Bricolage Grotesque, Noto Sans SC, sans-serif\"\n    fontSize: 8vw\n    fontWeight: 800\n    lineHeight: 0.6\n\nspacing:\n  pad-x: 5.5vw\n  pad-y: 5.5vh\n  gap-lg: 4.5vh\n  gap-md: 2.8vh\n  gap-sm: 1.4vh\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  kicker:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    color: \"{colors.accent-orange}\"\n  rule:\n    width: 32px\n    height: 1px\n    background: \"{colors.accent-orange}\"\n  bullet-marker:\n    content: \"—\"\n    color: \"{colors.accent-orange}\"\n    fontFamily: \"{typography.label.fontFamily}\"\n    description: \"Em-dash prefix in warm orange; emerges in mono face. The system's standard list mark; never a bullet, never a checkmark.\"\n  info-card:\n    background: \"{colors.bg-cream}\"\n    color: \"{colors.ink-dark}\"\n    padding: \"{spacing.gap-md} calc({spacing.pad-x} * 0.8)\"\n    maxWidth: 28vw\n    description: \"Cream inset box embedded on a dark green field. The signature material-contrast component; carries a heading and a body block, no border, no shadow.\"\n  chrome-band:\n    borderBottom: \"1px solid {colors.border-on-dark}\"\n    paddingBottom: \"{spacing.gap-sm}\"\n    description: \"Label-pair on top of a 1px rule; suppressed on cover/quote/end slide types.\"\n  foot-band:\n    borderTop: \"1px solid {colors.border-on-dark}\"\n    paddingTop: \"{spacing.gap-sm}\"\n    description: \"Label-pair under a 1px rule; mirrors the chrome band.\"\n  stat-cell:\n    borderRight: \"1px solid {colors.border-on-dark}\"\n    padding: \"{spacing.gap-md} {spacing.pad-x} {spacing.gap-md} 0\"\n    description: \"A vertically-divided cell containing a large numerical value (with optional inline orange-emphasis em-span) and a one-line label. Last cell has no right border.\"\n  bar-fill:\n    width: \"100%\"\n    background: \"{colors.ink-cream-3}\"\n    description: \"Vertical bar in muted cream; gets the orange accent (.accent variant) when it's the highlighted data point.\"\n  compare-divider:\n    width: 1px\n    background: \"{colors.border-on-dark}\"\n    description: \"A 1px-wide vertical column (not a border) used to split a before/after comparison; subtle, not loud.\"\n  image-placeholder:\n    background: \"rgba(240, 232, 210, 0.06)\"\n    border: \"1px solid {colors.border-on-dark}\"\n    color: \"{colors.ink-cream-3}\"\n    description: \"Hairline-bordered void with centered mono label until photography is available.\"\n  atmospheric-glow:\n    selector: \".slide.dark::before\"\n    position: \"bottom-right ellipse, 55% wide × 70% tall\"\n    gradient: \"radial-gradient(ellipse at 70% 80%, rgba(122, 78, 36, 0.28) 0%, rgba(80, 50, 20, 0.14) 40%, transparent 70%)\"\n    description: \"The wood-brown atmospheric glow that lives on every dark slide via ::before. Non-optional on dark surfaces; defines the warmth of the system.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nMat is a **material-tactile presentation system** built around a single environmental premise: a deep forest-green surface warmed from the bottom-right corner by a low wood-brown glow. The atmosphere does the heavy lifting — before any content lands, the slide already feels like a workbench in afternoon light. Cream type floats directly on the green field; there are no cards, no panels, no frames. Where the system needs to break the green, it does so with a single cream inset box (the info-card) that reads as a piece of warm paper laid on the dark surface.\n\nThe typeface stack is a deliberate three-voice pairing. **Bricolage Grotesque** at weights 700 and 800 is the display workhorse — heavy, rounded, with a slightly mechanical character that suits product writing without feeling tech-startup. **DM Sans** at weight 400 is the body voice, neutral enough to let the display type breathe. **DM Mono** at weight 400 handles all labels, kickers, metadata, and chrome — anything structural that needs to read as a tag rather than a sentence. Display type is **always mixed case** in this system, never uppercase; the uppercase work is reserved for mono labels.\n\nThe palette is intentionally narrow. **Dark forest green** is the dominant surface (`{colors.bg-dark}`), with a slightly lighter alternate available for layered regions. **Warm cream** is the primary text color on dark and the secondary surface color when a slide flips light. **Warm orange** (`{colors.accent-orange}`) is the single accent — it appears only as small inline marks: kicker text, bullet em-dashes, the `<em>` inside a stat numeral, the opening quote glyph, the single highlighted bar in a chart. Orange is never a background and never a large headline color; it's the structural emphasis dot of the system.\n\nDepth is minimal and atmospheric, not stacked. There are no drop shadows. There are no rounded corners on any structural element. The only depth signal is the wood-brown radial glow that sits behind every dark slide via a `::before` pseudo-element. Region separation comes from **thin 1px hairline rules** in low-opacity cream — for chrome bands, foot bands, stat cell dividers, compare panel splits, and chart baselines. Nothing about this system is loud.\n\n**Density philosophy: medium-sparse.** Mat reads as elegant when the slide breathes — generous left and right padding (`{spacing.pad-x}` at 5.5vw), one main typographic moment, and one secondary block of supporting copy. Cramming three columns of bullets onto a slide breaks the system; the warm green field needs negative space to do its atmospheric work. The exception is the stats and compare slide types, where a clean three-up or two-up arrangement of restrained cells is correct. A slide with a single headline and one paragraph of lead copy is right in this system's lane. A slide that fills 80% of its area with type is fighting the design.\n\n**Key Characteristics:**\n- Dark forest green canvas (`{colors.bg-dark}`) with a warm wood-brown radial glow (`{components.atmospheric-glow}`) anchored to the bottom-right corner of every dark slide.\n- Cream text (`{colors.ink-cream}`) floats directly on the green field with no card, panel, or frame around it.\n- Bricolage Grotesque display type is **always mixed case** — never uppercase. Uppercase is reserved for DM Mono labels.\n- A single accent color, warm orange (`{colors.accent-orange}`), used only as small inline emphasis (kicker, bullet marker, inline `<em>`, quote glyph, one chart bar).\n- The cream **info-card** (`{components.info-card}`) is the signature material-contrast component — a warm paper rectangle inset on the dark field.\n- Bullet lists use an em-dash prefix in warm orange via DM Mono — never a dot, never a check.\n- Thin 1px hairline rules in low-opacity cream are the only divider language. No heavy borders, no shadows.\n- The system has one light slide variant (cream background with dark green text) used as a tonal inversion within a deck, never as the default.\n\n## Colors\n\n### Palette\n\n- **Dark Forest Green** (`{colors.bg-dark}` — #232E26): The dominant environment. Default background for every slide unless a deliberate light-slide variant is chosen. The green is muted enough that cream type sits on it without vibration.\n- **Slightly Lighter Green** (`{colors.bg-dark-alt}` — #2E3D30): A tonal step-up reserved for layered or recessed surfaces within a dark slide. Available but used sparingly.\n- **Warm Cream** (`{colors.bg-cream}` — #EDE6D0): The light-slide background and the fill color of the info-card inset. Reads as warm paper, not white — the warmth is essential to the system's material identity.\n- **Deeper Cream** (`{colors.bg-cream-alt}` — #E4DAC4): A secondary cream tone for image placeholders on light slides.\n- **Cream Ink** (`{colors.ink-cream}` — #F0E8D2): Primary text color on every dark surface. Slightly warmer than the background cream — chosen so headlines feel like they're carved into the green rather than printed on it.\n- **Cream Ink at 58% / 30%** (`{colors.ink-cream-2}`, `{colors.ink-cream-3}`): Secondary and tertiary text on dark. Used for muted lead copy and barely-there metadata respectively.\n- **Dark Ink** (`{colors.ink-dark}` — #1E2820): Primary text color on cream surfaces (info-card body, light slide). A very dark forest green, never pure black.\n- **Dark Ink at 60% / 30%** (`{colors.ink-dark-2}`, `{colors.ink-dark-3}`): Muted and tertiary text on cream.\n- **Warm Orange** (`{colors.accent-orange}` — #C07030): The single accent. A burnt copper-orange that nods to wood, leather, and oxidized metal. Never a background, never a large headline color.\n- **Wood Glow** (`{colors.wood-glow}` — #7A4E24): The radial atmospheric glow color, applied only at 0.28 and 0.14 alpha inside the bottom-right corner gradient. Never used as a flat fill.\n\n### Defaults\n\n- **Default surface background**: `{colors.bg-dark}` (forest green). The system is dark-default; cream slides are an intentional tonal break, not a routine choice.\n- **Default headline color on dark**: `{colors.ink-cream}`. Headlines never appear in orange.\n- **Default headline color on cream**: `{colors.ink-dark}`.\n- **Default body text color on dark**: `{colors.ink-cream-2}` (the 58% cream — the `.muted` helper).\n- **Default body text color on cream**: `{colors.ink-dark-2}`.\n- **Default border / divider color**: `{colors.border-on-dark}` on dark; `{colors.border-on-cream}` on cream. Always 1px, never thicker.\n- **Default kicker color**: `{colors.accent-orange}`. The kicker is the system's eyebrow label and is the most consistent place orange shows up.\n- **Default inline emphasis color**: `{colors.accent-orange}`. An `<em>` inside a stat value, a quote attribution, or a chart label resolves to orange.\n- **Default atmospheric treatment for dark slides**: the wood-brown radial glow (`{components.atmospheric-glow}`) is always on. It is part of the dark surface itself.\n\nOrange functions as a punctuation color: it tells the eye where the structural emphasis lives without ever competing for surface area. If two orange elements end up adjacent on the same slide, one of them is wrong.\n\n## Typography\n\n### Font Family\n\nThe system runs on three Google Fonts plus CJK fallback. **Bricolage Grotesque** carries every display, h1, h2, h3, stat numeral, and quote text — its rounded, heavy character at weights 700–800 is the defining voice. **DM Sans** at weight 400 carries every paragraph, lead, caption, and bullet item — neutral, readable, lets the display type lead. **DM Mono** at weight 400 carries every label, kicker, chrome tag, footer text, bullet em-dash, and chart label — anything that needs to read as a structural marker rather than prose. **Noto Sans SC** is the CJK fallback for all sans roles; **Noto Serif SC** is not used.\n\nA subtle but load-bearing rule: **the bullet em-dash before each list item renders in DM Mono in warm orange**, not in the body face. The mono shape is what makes the dash feel like a deliberate mark and not a stray punctuation glyph.\n\nItalics are not used for typographic decoration in this system. The `<em>` tag is repurposed as an **orange inline emphasis** — `<em>` inside a stat value or a quote attribution switches to `{colors.accent-orange}` and stays upright (font-style: normal). There is no italicized face anywhere.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 12vw | Bricolage Grotesque | 800 | Cover or opening hero display — massive, line-broken into 1–2 words per line |\n| `{typography.h1}` | 7vw | Bricolage Grotesque | 800 | Chapter-opening or closing headline |\n| `{typography.h2}` | 4vw | Bricolage Grotesque | 700 | Primary content-slide headline |\n| `{typography.stat-value}` | 5.5vw | Bricolage Grotesque | 800 | Large numerical figure inside a stat cell |\n| `{typography.quote-mark}` | 8vw | Bricolage Grotesque | 800 | Decorative opening quotation glyph in warm orange |\n| `{typography.quote-text}` | 3.4vw | Bricolage Grotesque | 600 | Pull-quote body text |\n| `{typography.h3}` | 2.4vw | Bricolage Grotesque | 600 | Sub-headline or region heading |\n| `{typography.lead}` | 1.5vw | DM Sans | 400 | Lead paragraph or large bullet item |\n| `{typography.body}` | 1.05vw | DM Sans | 400 | Body paragraph and info-card body |\n| `{typography.caption}` | 0.82vw | DM Sans | 400 | Image caption, tagline, fine print |\n| `{typography.label}` | 0.7vw | DM Mono | 400 | Kicker, chrome tag, footer label, metadata, chart label |\n\n### Defaults\n\n- **Default primary section headline**: `{typography.h2}` (4vw).\n- **Default opening or cover display**: `{typography.display}` (12vw) on a cover; `{typography.h1}` (7vw) on a chapter or closing moment.\n- **Default body paragraph size**: `{typography.body}` (1.05vw). Reach for `{typography.lead}` (1.5vw) when the paragraph is the single supporting block under a large headline.\n- **Default label / kicker size**: `{typography.label}` (0.7vw).\n- **Default weight for any display element**: 700 (h2) or 800 (display, h1, stat-value).\n- **Default weight for body**: 400.\n- **Default headline letter-spacing**: negative — display at -0.03em, h1 at -0.025em, h2 at -0.02em. The negative tracking is essential.\n\nWhen unsure, default to `{typography.h2}` for the primary text moment paired with one `{typography.lead}` paragraph as supporting copy — that pairing is the system's most reliable rhythm.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **All display, h1, h2, h3 text is mixed case** — never uppercase. Uppercase display type does not exist in this system. If text is in Bricolage Grotesque, it is sentence case.\n- **All labels, kickers, chrome text, footers, and metadata are DM Mono uppercase with 0.12em positive tracking.** Mono in sentence case does not exist here.\n- **The kicker is always warm orange.** When a slide carries a kicker (eyebrow label above a headline), its color is `{colors.accent-orange}` regardless of surface.\n- **Bullet lists use an em-dash prefix in DM Mono colored warm orange.** Never a dot, never a check, never a numeral.\n- **The `<em>` tag inside a stat numeral renders in warm orange and stays upright.** It is the mechanism for highlighting a unit suffix or a key digit inside a number.\n- **Headlines on dark surfaces are cream; headlines on cream surfaces are dark ink.** Headlines are never orange.\n- **All Bricolage display type uses negative letter-spacing.** Default tracking on display reads as untreated; the negative is what gives the type its compressed, premium-product character.\n\n### Typography Principles\n\nThe rhythm of the system is **heavy mixed-case display + light mixed-case body + small uppercase mono label**. Switching any of those three modes (e.g., uppercasing the display, or making the body the same weight as the display) breaks the editorial register. Bricolage at 700–800 sits next to DM Sans at 400 — the weight gap is deliberate and wide. Do not use intermediate Bricolage weights (400, 500) for display moments; they read as undecided.\n\nItalics are not used. Underline is not used. The only emphasis mechanism inside body copy is the orange `<em>` inline. The only structural emphasis is the kicker and the bullet em-dash.\n\n## Layout\n\n### Canvas System\n\nMat is **viewport-fluid by design**. All sizes use `vw` and `vh` units so the layout scales linearly with the viewport. The slide container is `100vw × 100vh` and the deck is a horizontal flex strip that translates left/right by full viewport widths. There is no fixed canvas dimension; the same composition renders correctly on any 16:9-ish viewport.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 5.5vw | Slide horizontal padding; the breathing room on left and right edges |\n| `{spacing.pad-y}` | 5.5vh | Slide vertical padding |\n| `{spacing.gap-lg}` | 4.5vh | Between major content sections |\n| `{spacing.gap-md}` | 2.8vh | Between related elements (headline → lead, stat → label) |\n| `{spacing.gap-sm}` | 1.4vh | Between tightly related elements (label pair in chrome band) |\n\nThe horizontal padding is generous — content occupies roughly the middle 89% of the viewport. Pushing content closer to the edges breaks the system's editorial spaciousness.\n\n### Chrome Frame\n\nMost slide types carry a **chrome band** (`{components.chrome-band}`) at the top and a **foot band** (`{components.foot-band}`) at the bottom. Each is a `flex space-between` row of two DM Mono labels (typically a section name on the left and a slide-position or section number on the right) separated from the body by a 1px hairline rule. Cover, quote, and end-style slides suppress both bands entirely — those moments are chromeless by convention.\n\n### Navigation Chrome\n\nA row of nav-dots is fixed center-bottom (5px circles in low-opacity white) and a slide counter sits bottom-right (10px DM Mono in `rgba(255,255,255,0.25)`, format `01 / 09`). These are presentation chrome, not part of the design language proper — they're consistent across all template families in this library.\n\n## Depth and Elevation\n\n### Atmospheric Glow (Primary Depth Mechanism)\n\nThe system's only depth treatment is the **bottom-right wood-brown radial glow** that lives on every dark slide via `::before`. The pseudo-element occupies 55% width × 70% height anchored to the bottom-right corner, with a radial gradient from `rgba(122,78,36,0.28)` to `rgba(80,50,20,0.14)` to transparent. The glow sits at `z-index: 0`; all slide content sits at `z-index: 1`. This is the depth — there are no drop shadows, no elevation cards, no glow effects on text.\n\n### Hairline Rules (Structural Separation)\n\nWhere the system needs to separate regions, it uses **1px hairline rules in low-opacity cream** (`{colors.border-on-dark}` at 12% opacity) on dark surfaces, or low-opacity dark ink (`{colors.border-on-cream}` at 14% opacity) on cream. These rules appear under chrome bands, above foot bands, between stat cells, between compare panels, and as the chart baseline. Hairlines never go thicker than 1px, never colored.\n\n### No Shadows\n\nThere are no `box-shadow` declarations on any structural element. The info-card sits on the dark field with no shadow — its material contrast is the cream-on-green tonal jump, not elevation. Adding a shadow to any component breaks the system's flat material-photography aesthetic.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Every structural element — info-card, image placeholders, stat cells, compare panels, bars |\n| 50% | Nav-dot circles only |\n\nThe system has **no rounded corners** on any composed content. Cards, panels, and image frames are all strict rectangles. The only round shapes are the navigation UI dots.\n\n### Border Weights\n\n- **1px solid hairline** — the universal structural border. Used for chrome bands, foot bands, stat cell dividers, compare panel splits, chart baselines, and image placeholder outlines. Color is `{colors.border-on-dark}` on dark surfaces and `{colors.border-on-cream}` on cream.\n- No other border weights exist. A 2px border breaks the system; a 3px border belongs to a different design family.\n\n### Decorative Element Types\n\n**Kicker** — A small DM Mono uppercase tag in warm orange with 0.12em positive tracking, placed above a headline as an eyebrow label. The most consistent appearance of orange in the system. Typically 0.7vw size.\n\n**Rule** — A 32px-wide × 1px-tall horizontal accent line in warm orange. Used as a small underline-style separator between a kicker and a headline, or beneath a chapter number. Decorative, not structural.\n\n**Bullet em-dash** — The list marker for every bullet list. Renders as `—` in DM Mono colored warm orange, prepended to the list item via the marker column of a CSS grid (`grid-template-columns: 1.4em 1fr`). The bullet voice of the system.\n\n**Info-card** — A cream inset rectangle (`{components.info-card}`) placed on a dark slide. Carries a heading (h3-scale, dark ink) and a body block (body-scale, muted dark ink). The single most distinctive component in the system — used to puncture the green field with a piece of warm paper. Has no border, no shadow, no rounded corners; the tonal jump alone defines the edge.\n\n**Stat cell** — A vertically-divided cell containing a large numerical value (`{typography.stat-value}`) above a one-line label (`{typography.body}` in muted cream). Cells line up in groups of three with a 1px right border separating each (last cell has no right border). The numerical value supports an inline `<em>` in orange for unit suffixes (e.g., the suffix in `4.7k`).\n\n**Quote mark** — An oversized opening quotation glyph at `{typography.quote-mark}` size in warm orange. Sits above the quote text as a typographic ornament. Used only inside the quote slide type.\n\n**Compare divider** — A 1px-wide vertical CSS column (not a border) between two side-by-side panels. Subtle by design — the contrast between the two panels does the visual work, not the divider.\n\n**Image placeholder** — A void rectangle with a 1px hairline border, 6% cream background, and centered DM Mono label reading the placeholder name. Used until real photography is dropped in. The placeholder color is intentionally close to the background — image regions should not announce themselves.\n\n## Do's and Don'ts\n\n### Do\n- Use the dark forest green (`{colors.bg-dark}`) as your default slide background. The system is dark-first; cream slides are a tonal break, not the default.\n- Apply the wood-brown atmospheric glow to every dark slide. It is part of the surface, not an optional flourish.\n- Pair Bricolage Grotesque display in mixed case with DM Mono labels in uppercase. The case contrast between the two faces is the system's typographic rhythm.\n- Set headlines in cream (`{colors.ink-cream}`) on dark and dark ink (`{colors.ink-dark}`) on cream. Headlines never carry the orange accent.\n- Use warm orange (`{colors.accent-orange}`) as the kicker color, the bullet em-dash color, and the inline `<em>` color. Orange is the punctuation, never the surface.\n- Use the cream info-card (`{components.info-card}`) when a slide needs a piece of warm paper inset on the green field — the system's signature material-contrast move.\n- Keep slides medium-sparse. One primary headline, one supporting paragraph, optionally one list of 3–5 short bullets is the right density.\n- Use 1px hairline rules in low-opacity cream or dark ink for every structural divider. Borders never go thicker.\n- Use the em-dash prefix in DM Mono for every bullet list. Never substitute a dot, check, or numeral.\n- Render the `<em>` inside a numerical value in warm orange, font-style normal — that's how unit suffixes and emphasis digits read in this system.\n\n### Don't\n- Don't uppercase any Bricolage display, h1, h2, or h3 text. Display type is always mixed case. Uppercase is exclusively for DM Mono labels.\n- Don't introduce a second accent color. The system has one accent (warm orange) and it cannot share that role.\n- Don't add drop shadows, blur shadows, or elevation effects on any component. Depth is the atmospheric glow only.\n- Don't round any corner on a structural element. Cards, panels, image frames, bars — all strict rectangles. Only the nav-dot circles are round.\n- Don't fill a slide with three columns of bullets or stack five regions vertically. Mat reads as broken when crowded.\n- Don't use orange as a background fill. Orange is inline-only.\n- Don't use a serif face anywhere. There is no serif in this system; the rounded grotesque carries every editorial moment.\n- Don't add a border around the info-card. The tonal jump between cream and forest green defines the edge — a border breaks the flat material reading.\n- Don't use italic letterforms. The `<em>` tag is repurposed as an orange inline color switch and stays upright.\n- Don't increase border weights above 1px. A 2px border breaks the hairline language of the system.\n\n## Responsive Behavior\n\nMat targets a fluid `100vw × 100vh` viewport and uses `vw`/`vh` units for every typographic size, padding, and gap. The same composition renders correctly across 1280×720, 1920×1080, and 2560×1440 displays without breakpoints. Because all sizes are viewport-relative, content scales linearly — at wider viewports, both text and padding grow proportionally, so the visual density stays constant.\n\n### Presenter Behavior\n- Arrow Right / Arrow Down / Space advance to the next slide.\n- Arrow Left / Arrow Up move back.\n- Home jumps to the first slide; End jumps to the last.\n- Touch swipe (horizontal) advances or reverses on mobile.\n- Mouse wheel advances with a 1000ms debounce to prevent accidental multi-skip.\n- Slides translate horizontally as a single flex strip with a 0s transition (the deck is configured for instant navigation, not animated transitions — the `--dur-slide` token is set to `0s`).\n\n### Print Behavior\nThe template does not declare a `@media print` rule. To produce a PDF, use the browser's screenshot or printing tool; multi-slide PDF export requires manually triggering each slide.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display / h1 / h2 / h3 / stat-value (Bricolage roles, 2.4–12vw) | 思源宋体 Noto Serif SC | 700 | Mincho heavy weight provides the structural mass that Bricolage 700–800 provides in Latin, while preserving the warm material register |\n| Quote text / quote mark (3.4vw / 8vw) | 思源宋体 Noto Serif SC | 600–700 | Same Mincho voice for editorial moments |\n| Lead / body / caption (DM Sans roles, 0.82–1.5vw) | 思源宋体 Noto Serif SC | 400 | Mincho body voice — calm and material; pairs with the wood-glow warmth |\n| Info-card body / heading | 思源宋体 Noto Serif SC | 400 / 600 | Maintains the warm-paper-on-green contrast in Chinese |\n| Label / kicker / chrome / footer (DM Mono roles, 0.7vw) | 思源宋体 Noto Serif SC | 500 with 0.05em letter-spacing | Replaces DM Mono — Chinese has no monospace tradition that reads as editorial chrome |\n\n### Mixed-Content Strategy\n\nUse **Strategy A** — switch the entire face stack to Noto Serif SC across all roles, replacing Bricolage Grotesque (display), DM Sans (body), and DM Mono (labels). Mat's identity does not depend on the specific Latin faces; it depends on the **dark forest green canvas with wood-brown atmospheric glow**, the **single warm orange accent**, the **cream info-card inset**, and the **1px hairline divider language**. Going all-Mincho in Chinese preserves every one of those identity markers cleanly without the baseline wobble that Strategy C would introduce on a viewport-fluid system. Stack:\n\n```css\n/* Bricolage roles (display, h1, h2, h3, stat-value, quote) */\nfont-family: 'Bricolage Grotesque', 'Noto Serif SC', sans-serif;\n/* DM Sans roles (lead, body, caption) */\nfont-family: 'DM Sans', 'Noto Serif SC', sans-serif;\n/* DM Mono roles (label, kicker, chrome, footer) */\nfont-family: 'DM Mono', 'Noto Serif SC', monospace;\n```\n\nThe system's source currently lists `'Noto Sans SC'` as the CJK fallback — for Mat's material-tactile register, **swap to `'Noto Serif SC'`**. The Mincho face's warm letterforms match the wood-glow / forest-green atmosphere better than the geometric Noto Sans SC, which reads as too modern-clinical for this system.\n\n### Loading\n\nReplace the existing Noto Sans SC link with Noto Serif SC:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.88–1.1 on display, 1.5–1.65 on body) read as cramped in Chinese. Bump display to 1.0–1.2 and body to 1.7–1.85.\n- **Remove negative letter-spacing on CJK headlines.** Bricolage display uses -0.025em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the DM Mono label portion was meant to be capitalized. (This matters here — every DM Mono label, kicker, chrome-band, and footer is `text-transform: uppercase`.)\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between Noto Serif SC weight 400, 500, and 700 inside the same sentence — pick the weight that matches the role (headline = 700, body = 400, label = 500) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nMat's whole voice is \"industrial-design portfolio meets boutique product launch\" — dark forest green with a wood-brown glow, cream type floating on the field, warm orange as the single accent. In Chinese, the system's identity does not depend on the Bricolage / DM Sans / DM Mono trio; it depends on the **environmental atmosphere** (the radial wood-glow on every dark slide), the **single-accent discipline** (orange only as kicker, em-dash bullet, inline emphasis), and the **cream info-card** as the signature material-contrast move. All of these translate without modification.\n\nThe bullet em-dash in orange works in Chinese identically — the em-dash character (—) is the same glyph in any script, and the orange Noto Serif SC at weight 500 prepended to a Chinese list item reads as a deliberate mark exactly as it does in Latin. Keep the bullet column in Noto Serif SC at weight 500 (replacing DM Mono); the warmth of the Mincho face matches the system's material-tactile register better than a sans-serif chrome face would.\n\nThe Bricolage rule \"always mixed case, never uppercase\" is interesting in Chinese — since Chinese has no case, the rule is automatically satisfied. But the system's uppercase rule for labels (DM Mono at 0.12em tracking) doesn't translate; in Chinese, labels should be **Noto Serif SC weight 500 with 0.05em positive tracking**, no `text-transform`. The positive tracking carries the chrome quality through weight and spacing alone.\n\nThe `<em>` inline-orange rule (for unit suffixes inside stat numerals) works in Chinese — a Chinese unit character like 「万」or 「亿」 inside `<em>` renders in warm orange and stays upright, exactly mirroring the Latin pattern. Use it the same way: `4.7<em>万</em>` for `4.7 万 (47k)`.\n\n### Known CJK Gap\n\nThe Bricolage Grotesque \"heavy, rounded grotesque with mechanical character\" is one of Mat's most distinctive typographic moves in Latin — it's what gives the system its industrial-product-page voice. Chinese has no exact equivalent: Noto Serif SC at weight 700 provides structural mass but reads as more traditional / literary than Bricolage's rounded modernity. The Chinese rendering loses some of the industrial-design quality, partially compensated by the wood-glow atmosphere and the warm orange accent doing more of the personality work. For decks where the industrial register is critical (e.g., a product launch deck specifically about hardware or material design), consider supplementing Noto Serif SC with **思源黑体 Noto Sans SC at weight 800** for the largest display moments only (cover, hero) — the geometric heaviness of Noto Sans SC at 800 reads closer to Bricolage Grotesque 800 than Noto Serif SC does. Use sparingly to preserve the literary-material register elsewhere.\n\n## Iteration Guide\n\n1. Any new component sits on the dark surface as cream text; no card, panel, or frame wraps it unless it's the info-card move (cream-on-green tonal contrast).\n2. Any new headline uses Bricolage Grotesque in mixed case, weight 700 (h2) or 800 (display/h1). Never reach for weight 500 on display.\n3. Any new structural divider is a 1px hairline rule in low-opacity cream or dark ink. Never use a thicker or colored border.\n4. Any new label, eyebrow, tag, or metadata text uses DM Mono uppercase with 0.12em tracking. Mono in mixed case does not exist here.\n5. Any new bullet list uses the em-dash prefix in DM Mono colored warm orange. The marker face and color are non-negotiable.\n6. Any new accent moment (a highlighted number, an emphasis word, a kicker) uses warm orange. Don't introduce a second accent.\n7. Any new dark slide carries the atmospheric glow on `::before`. If you make a custom slide layout, replicate the pseudo-element or the slide will read flat.\n8. If a slide needs a piece of warm paper to anchor it (a CTA, a summary, an attribution block), use the info-card. Don't invent a parallel card pattern.\n9. Tonal break slides (cream backgrounds) are used once per deck for emphasis, not as a routine alternative to dark. The system reads as dark-default.\n\n## Known Gaps\n\n- The `--c-bg-dark-alt` (#2E3D30) variable is defined for a slightly lighter green surface but is not actively used in any selector. It's reserved for future layered-region work.\n- The atmospheric glow is hardcoded to the bottom-right corner via the `::before` pseudo-element. Repositioning it requires editing the CSS rule directly; there's no token for glow position or intensity.\n- The system loads four Google Fonts (Bricolage Grotesque, DM Sans, DM Mono, Noto Sans SC) — render parity depends on those fonts loading. The CJK fallback stack covers Chinese, but Japanese and Korean glyphs fall back to system serif/sans.\n- The slide-transition duration is set to `0s` (instant). The `--ease-slide` and `--dur-slide` tokens exist for animation but are inert; if a deck needs animated transitions, the duration value must be raised.\n- The vertical bar chart uses inline `style=\"height: XX%\"` declarations on each bar fill. There is no data-binding layer; bar heights must be computed manually.\n- The `.split-center` image region is fixed at 52vh height. Tall portrait imagery may need a layout-level override.\n- Nav dots and slide counter use hardcoded `rgba(255,255,255,...)` values that don't adapt to the cream-slide variant — on cream slides, the white dots read as washed-out.\n","frontmatter":{"version":"alpha","name":"Mat","description":"A warm, material-tactile presentation system inspired by a high-end product landing page. Dark forest green is the dominant environment, warmed by a low atmospheric wood-brown glow from the bottom-right corner of every dark slide. Cream type floats directly on the field; warm orange acts as the single accent. The typeface stack pairs Bricolage Grotesque (a heavy, rounded grotesque) for display with DM Sans for body and DM Mono for labels — the result reads as industrial-design portfolio meets boutique product launch, never tech demo.","colors":{"bg-dark":"#232E26","bg-dark-alt":"#2E3D30","bg-cream":"#EDE6D0","bg-cream-alt":"#E4DAC4","ink-cream":"#F0E8D2","ink-cream-2":"rgba(240, 232, 210, 0.58)","ink-cream-3":"rgba(240, 232, 210, 0.3)","ink-dark":"#1E2820","ink-dark-2":"rgba(30, 40, 32, 0.6)","ink-dark-3":"rgba(30, 40, 32, 0.3)","accent-orange":"#C07030","border-on-dark":"rgba(240, 232, 210, 0.12)","border-on-cream":"rgba(30, 40, 32, 0.14)","wood-glow":"#7A4E24"},"color-aliases":{"c-fg":"ink-cream","c-fg-light":"ink-dark","c-bg":"bg-dark","c-bg-light":"bg-cream","c-accent":"accent-orange"},"typography":{"display":{"fontFamily":"Bricolage Grotesque, Noto Sans SC, sans-serif","fontSize":"12vw","fontWeight":800,"lineHeight":0.88,"letterSpacing":"-0.03em"},"h1":{"fontFamily":"Bricolage Grotesque, Noto Sans SC, sans-serif","fontSize":"7vw","fontWeight":800,"lineHeight":0.92,"letterSpacing":"-0.025em"},"h2":{"fontFamily":"Bricolage Grotesque, Noto Sans SC, sans-serif","fontSize":"4vw","fontWeight":700,"lineHeight":1,"letterSpacing":"-0.02em"},"h3":{"fontFamily":"Bricolage Grotesque, Noto Sans SC, sans-serif","fontSize":"2.4vw","fontWeight":600,"lineHeight":1.1,"letterSpacing":"-0.01em"},"lead":{"fontFamily":"DM Sans, Noto Sans SC, sans-serif","fontSize":"1.5vw","fontWeight":400,"lineHeight":1.55},"body":{"fontFamily":"DM Sans, Noto Sans SC, sans-serif","fontSize":"1.05vw","fontWeight":400,"lineHeight":1.65},"caption":{"fontFamily":"DM Sans, Noto Sans SC, sans-serif","fontSize":"0.82vw","fontWeight":400,"lineHeight":1.5},"label":{"fontFamily":"DM Mono, monospace","fontSize":"0.7vw","fontWeight":400,"letterSpacing":"0.12em","textTransform":"uppercase"},"stat-value":{"fontFamily":"Bricolage Grotesque, Noto Sans SC, sans-serif","fontSize":"5.5vw","fontWeight":800,"lineHeight":1,"letterSpacing":"-0.025em"},"quote-text":{"fontFamily":"Bricolage Grotesque, Noto Sans SC, sans-serif","fontSize":"3.4vw","fontWeight":600,"lineHeight":1.2,"letterSpacing":"-0.02em"},"quote-mark":{"fontFamily":"Bricolage Grotesque, Noto Sans SC, sans-serif","fontSize":"8vw","fontWeight":800,"lineHeight":0.6}},"spacing":{"pad-x":"5.5vw","pad-y":"5.5vh","gap-lg":"4.5vh","gap-md":"2.8vh","gap-sm":"1.4vh"},"canvas":{"width":"100vw","height":"100vh"},"components":{"kicker":{"fontFamily":"{typography.label.fontFamily}","fontSize":"{typography.label.fontSize}","letterSpacing":"0.12em","textTransform":"uppercase","color":"{colors.accent-orange}"},"rule":{"width":"32px","height":"1px","background":"{colors.accent-orange}"},"bullet-marker":{"content":"—","color":"{colors.accent-orange}","fontFamily":"{typography.label.fontFamily}","description":"Em-dash prefix in warm orange; emerges in mono face. The system's standard list mark; never a bullet, never a checkmark."},"info-card":{"background":"{colors.bg-cream}","color":"{colors.ink-dark}","padding":"{spacing.gap-md} calc({spacing.pad-x} * 0.8)","maxWidth":"28vw","description":"Cream inset box embedded on a dark green field. The signature material-contrast component; carries a heading and a body block, no border, no shadow."},"chrome-band":{"borderBottom":"1px solid {colors.border-on-dark}","paddingBottom":"{spacing.gap-sm}","description":"Label-pair on top of a 1px rule; suppressed on cover/quote/end slide types."},"foot-band":{"borderTop":"1px solid {colors.border-on-dark}","paddingTop":"{spacing.gap-sm}","description":"Label-pair under a 1px rule; mirrors the chrome band."},"stat-cell":{"borderRight":"1px solid {colors.border-on-dark}","padding":"{spacing.gap-md} {spacing.pad-x} {spacing.gap-md} 0","description":"A vertically-divided cell containing a large numerical value (with optional inline orange-emphasis em-span) and a one-line label. Last cell has no right border."},"bar-fill":{"width":"100%","background":"{colors.ink-cream-3}","description":"Vertical bar in muted cream; gets the orange accent (.accent variant) when it's the highlighted data point."},"compare-divider":{"width":"1px","background":"{colors.border-on-dark}","description":"A 1px-wide vertical column (not a border) used to split a before/after comparison; subtle, not loud."},"image-placeholder":{"background":"rgba(240, 232, 210, 0.06)","border":"1px solid {colors.border-on-dark}","color":"{colors.ink-cream-3}","description":"Hairline-bordered void with centered mono label until photography is available."},"atmospheric-glow":{"selector":".slide.dark::before","position":"bottom-right ellipse, 55% wide × 70% tall","gradient":"radial-gradient(ellipse at 70% 80%, rgba(122, 78, 36, 0.28) 0%, rgba(80, 50, 20, 0.14) 40%, transparent 70%)","description":"The wood-brown atmospheric glow that lives on every dark slide via ::before. Non-optional on dark surfaces; defines the warmth of the system."}}},"isInternal":false,"tokens":9638,"sizeBytes":38870},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/mat/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/mat/preview.md","title":"Mat Skill","category":"anthropic-skill","format":"markdown","content":"# Mat Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/mat/design.md`\n- Preview card: `bold-template-pack/templates/mat/preview.md`\n\n## Selection Metadata\n\n- Slug: `mat`\n- Tagline: Dark sage canvas with bone paper and burnt-orange accent; mid-century modern with wood undertones.\n- Mood: warm-modern, considered, tactile, mid-century\n- Tone: warm, design-led, intentional, considered\n- Formality: medium\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel mid-century, tactile, and intentional: design studio credentials, architecture / interior brands, ceramics / craft / furniture, advisory decks. Also a warm, distinctive choice for tech, research, or business decks that want a considered analog feel instead of digital-cool.\n- Avoid for: Contexts that need fast tech energy or institutional restraint — the muted sage and burnt-orange palette is intentionally warm and slow.\n\n## Visual Snapshot\n\nA warm, material-tactile presentation system inspired by a high-end product landing page. Dark forest green is the dominant environment, warmed by a low atmospheric wood-brown glow from the bottom-right corner of every dark slide. Cream type floats directly on the field; warm orange acts as the single accent. The typeface stack pairs Bricolage Grotesque (a heavy, rounded grotesque) for display with DM Sans for body and DM Mono for labels — the result reads as industrial-design portfolio meets boutique product launch, never tech demo.\n\nMat is a material-tactile presentation system built around a single environmental premise: a deep forest-green surface warmed from the bottom-right corner by a low wood-brown glow. The atmosphere does the heavy lifting — before any content lands, the slide already feels like a workbench in afternoon light. Cream type floats directly on the green field; there are no cards, no panels, no frames. Where the system needs to break the green, it does so with a single cream inset box (the info-card) that reads as a piece of warm paper laid on the dark surface.\n\n## Preview Ingredients\n\n- Palette: bg-dark #232E26; bg-dark-alt #2E3D30; bg-cream #EDE6D0; bg-cream-alt #E4DAC4; ink-cream #F0E8D2; ink-dark #1E2820; accent-orange #C07030; wood-glow #7A4E24\n- Typography: Bricolage Grotesque; DM Sans; DM Mono; {typography.label.fontFamily}\n- Signature move: Dark forest green canvas ({colors.bg-dark}) with a warm wood-brown radial glow ({components.atmospheric-glow}) anchored to the bottom-right corner of every dark slide.\n- Signature move: Cream text ({colors.ink-cream}) floats directly on the green field with no card, panel, or frame around it.\n- Signature move: Bricolage Grotesque display type is always mixed case — never uppercase. Uppercase is reserved for DM Mono labels.\n- Signature move: A single accent color, warm orange ({colors.accent-orange}), used only as small inline emphasis (kicker, bullet marker, inline <em>, quote glyph, one chart bar).\n- Signature move: The cream info-card ({components.info-card}) is the signature material-contrast component — a warm paper rectangle inset on the dark field.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1054,"sizeBytes":4724},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/monochrome/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/monochrome/design.md","title":"Monochrome (Ivory Ledger)","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Monochrome (Ivory Ledger)\ndescription: A literary editorial system rendered in black ink on cream paper. Ultra-light geometric sans (Jost at weight 200–300) carries every headline; Lora italic serif handles quote text and insight-card titles; JetBrains Mono provides the structural chrome. There are no chromatic accents — every color in the palette is a graphite or cream tone, and \"accent\" simply means \"darker ink.\" The aesthetic borrows from independent research reports, scholarly monographs, and the quietest end of contemporary editorial design — closer to a printed journal than a tech presentation.\n\ncolors:\n  cream-paper: \"#FAFADF\"\n  cream-paper-2: \"#F2F2D2\"\n  cream-paper-3: \"#F0F0D4\"\n  cream-warm: \"#F5F0E4\"\n  ink-black: \"#1A1A16\"\n  ink-graphite: \"#5E5E54\"\n  ink-graphite-light: \"#8A8A80\"\n\ncolor-aliases:\n  c-bg: cream-paper\n  c-bg-light: cream-paper\n  c-bg-cream: cream-warm\n  c-fg: ink-black\n  c-fg-light: ink-black\n  c-fg-2: ink-graphite\n  c-fg-3: ink-graphite-light\n  c-accent: ink-black\n  c-border: ink-black\n  c-border-light: ink-black\n\ntypography:\n  display:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 8.5vw\n    fontWeight: 200\n    lineHeight: 0.96\n    letterSpacing: -0.02em\n  h1:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 5vw\n    fontWeight: 200\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  h2:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 3.2vw\n    fontWeight: 300\n    lineHeight: 1.2\n  h3:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 2vw\n    fontWeight: 400\n    lineHeight: 1.3\n  lead:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 1.5vw\n    fontWeight: 300\n    lineHeight: 1.65\n  body:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 1.1vw\n    fontWeight: 300\n    lineHeight: 1.7\n  caption:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 0.85vw\n    fontWeight: 300\n    lineHeight: 1.55\n  label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 0.72vw\n    fontWeight: 400\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  quote-serif:\n    fontFamily: \"Lora, Noto Serif SC, Georgia, serif\"\n    fontSize: 3.2vw\n    fontWeight: 400\n    lineHeight: 1.35\n  insight-serif:\n    fontFamily: \"Lora, Noto Serif SC, Georgia, serif\"\n    fontSize: 2.8vw\n    fontWeight: 400\n    lineHeight: 1.15\n  stat-value:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 5.5vw\n    fontWeight: 200\n    lineHeight: 1.0\n    letterSpacing: -0.03em\n  flow-num:\n    fontFamily: \"Jost, Noto Sans SC, system-ui, sans-serif\"\n    fontSize: 3.5vw\n    fontWeight: 200\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n\nspacing:\n  pad-x: 8vw\n  pad-y: 6vh\n  gap-lg: 5vh\n  gap-md: 3vh\n  gap-sm: 1.5vh\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  rule:\n    width: 36px\n    height: 1px\n    background: \"{colors.ink-black}\"\n    description: \"A 36-pixel hairline accent rule. The system's signature small punctuation mark — appears under chapter labels, beside kickers, above stat values.\"\n  rule-full:\n    width: \"100%\"\n    height: 1px\n    background: \"{colors.ink-black}\"\n    description: \"Full-width 1px hairline rule for chrome bands, foot bands, and section dividers.\"\n  kicker:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.ink-graphite-light}\"\n    description: \"Muted mono uppercase eyebrow label above a headline.\"\n  tag:\n    border: \"1px solid {colors.ink-black}\"\n    padding: \"0.3em 0.8em\"\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    description: \"Bordered inline tag for version numbers, status labels.\"\n  bullet-marker:\n    content: \"—\"\n    color: \"{colors.ink-graphite-light}\"\n    fontFamily: \"{typography.label.fontFamily}\"\n    description: \"Em-dash in muted graphite via JetBrains Mono. The standard list mark; never a dot, never a check.\"\n  insight-card:\n    background: \"{colors.cream-warm}\"\n    borderRadius: 16px\n    padding: \"3vh 2.5vw\"\n    description: \"Tall rounded-rectangle card in cream tone (one of three near-identical creams). Holds a large Lora serif title and a Jost body block at the bottom.\"\n  stat-cell:\n    borderTop: \"1px solid {colors.ink-black}\"\n    padding: \"{spacing.gap-md} {spacing.gap-md} {spacing.gap-md} 0\"\n    description: \"Rule-topped vertical cell with a 5.5vw weight-200 numeral, a Jost label, and a mono source note.\"\n  timeline-dot:\n    width: 8px\n    height: 8px\n    borderRadius: 50%\n    background: \"{colors.ink-black}\"\n    border: \"2px solid {colors.cream-warm}\"\n    description: \"Solid black dot with a cream border ring that punches through a horizontal connector rule.\"\n  vtimeline-spine:\n    width: 1px\n    background: \"{colors.ink-black}\"\n    description: \"1px vertical rule that anchors a vertical timeline. Carries a 9px solid black dot at the top of each entry.\"\n  pie-donut:\n    width: \"min(26vw, 42vh)\"\n    height: \"min(26vw, 42vh)\"\n    borderRadius: 50%\n    description: \"Donut ring rendered by overlaying a same-color circular ::after pseudo on a conic-gradient or similar. Center cutout is the slide background.\"\n  pyramid-bar:\n    borderLeft: \"2px solid {colors.ink-black}\"\n    background: \"color-mix(in srgb, {colors.ink-black} N%, {colors.cream-paper})\"\n    description: \"Horizontal pyramid level. Width grows down each level (36% → 100%); fill darkens up the pyramid via color-mix at increasing percentages.\"\n  bar-fill:\n    width: \"100%\"\n    background: \"{colors.ink-graphite-light}\"\n    opacity: 0.5\n    description: \"Vertical bar in muted graphite at half opacity. Accented variant uses solid ink-black at full opacity.\"\n  img-placeholder:\n    border: \"1px solid {colors.ink-black}\"\n    background: \"{colors.cream-paper-3}\"\n    color: \"{colors.ink-graphite}\"\n    description: \"Hairline-bordered cream void with a centered mono label. Used until photography is dropped in.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nMonochrome (Ivory Ledger) is a **literary editorial system** built on a single material constraint: black ink on cream paper, and nothing else. The palette has eight tokens, but seven of them are tonal variations of cream or graphite. There is no chromatic accent — the \"accent\" color is just darker ink. The result is a system that reads as a carefully typeset research report or a quiet contemporary monograph, not a presentation.\n\nThe typeface stack is a three-voice editorial pairing. **Jost** at weights 200, 300, and 400 carries every display, headline, body, and label — its geometric sans construction stays calm at ultra-light weights and the contrast between weight 200 (display) and weight 300 (body) is the system's primary typographic rhythm. **Lora** italic serif is reserved for two specific moments: the body text of a pull-quote and the title of an insight card. The serif italic provides the only typographic warmth in the system — wherever it appears, it signals \"this is the human voice.\" **JetBrains Mono** at weight 400 carries every structural marker: chrome labels, sidebar tags, version numbers, footer text, bullet dashes, axis labels, dates. Mono is uppercase and tracked at 0.12em or wider.\n\nThe palette functions in three roles. **Cream paper** (`{colors.cream-paper}` and its three near-identical sibling tones) is the canvas — slides are never white, always a warm off-yellow cream. **Black ink** (`{colors.ink-black}` — actually #1A1A16, a very dark olive-black) is every text moment, every border, every divider, every shape fill that isn't decorative cream. **Graphite** in two tones (`{colors.ink-graphite}` for secondary text, `{colors.ink-graphite-light}` for tertiary) handles muted copy. That's the whole color system.\n\nDepth is achieved entirely through **1px hairline rules** and **generous whitespace**. There are no drop shadows, no gradients, no elevation, no atmospheric effects. When two regions need separation, a 1px black line divides them. When a region needs visual weight, it gets more padding, not a fill change. The insight-card surfaces are nearly indistinguishable from the page itself — the cards are defined by their corner radius and padding, not by a contrast jump.\n\n**Density philosophy: sparse.** Ivory Ledger reads as elegant when generous whitespace dominates and a single typographic moment anchors the slide. The horizontal padding is set to 8vw (the most generous in the library), and content typically uses only the middle 60–70% of the canvas. A slide that fills 80% of its area with type reads as cramped and breaks the editorial reading. The system is asking the agent to leave space — to let a single Jost-200 headline carry an otherwise nearly-empty slide. When density is required (a research timeline, a two-column dense-text spread, a 12-row table), the system holds together only because the type is so light and the rules so thin that even dense content reads as airy.\n\n**Key Characteristics:**\n- Cream paper background (`{colors.cream-paper}`) on every slide — never white, never dark by default. The cream is the surface, not a stylistic choice.\n- Ultra-light Jost (weight 200 for display, weight 300 for body) is the dominant typographic voice.\n- Lora italic serif appears in two specific moments: pull-quote bodies and insight-card titles. Nowhere else.\n- JetBrains Mono uppercase with 0.12em+ tracking handles every structural label, chrome tag, axis, and bullet marker.\n- The system has no chromatic accent. The accent color is `{colors.ink-black}` — slightly darker ink.\n- All structural separation is 1px hairline rules in black, plus the signature 36px short rule (`{components.rule}`) used as a small punctuation mark.\n- The bullet list marker is an em-dash in muted graphite via JetBrains Mono.\n- Generous 8vw horizontal padding — the most spacious in the template library.\n\n## Colors\n\n### Palette\n\n- **Cream Paper** (`{colors.cream-paper}` — #FAFADF): The default surface. Warm off-yellow, never pure white. Every slide background is this color or a near-identical variant.\n- **Cream Paper Alt** (`{colors.cream-paper-2}` — #F2F2D2): A slightly deeper cream for inset surfaces. Used sparingly — the difference from the default cream is barely perceptible.\n- **Cream Paper Deep** (`{colors.cream-paper-3}` — #F0F0D4): The image-placeholder fill. Slightly more saturated cream that distinguishes a void rectangle from the slide surface.\n- **Cream Warm** (`{colors.cream-warm}` — #F5F0E4): The insight / timeline slide background, a warmer tone that signals these slides as related sub-aesthetic moments within the deck.\n- **Ink Black** (`{colors.ink-black}` — #1A1A16): Every text moment, every rule, every divider, every border. A very dark olive-black, not pure black — chosen for warmth against the cream paper.\n- **Ink Graphite** (`{colors.ink-graphite}` — #5E5E54): Secondary text color. Used for muted lead copy, body paragraphs in dense slides, and labels that need to step back from headline weight.\n- **Ink Graphite Light** (`{colors.ink-graphite-light}` — #8A8A80): Tertiary text. Used for kickers, axis labels, source notes, bullet markers, footer chrome — anything that should read as barely-present structural metadata.\n\n### Defaults\n\n- **Default surface background**: `{colors.cream-paper}`. The system is single-surface by default.\n- **Default primary headline color**: `{colors.ink-black}`. Headlines never appear in graphite or any other tone.\n- **Default body text color**: `{colors.ink-black}` for primary copy on light slides; `{colors.ink-graphite}` for muted lead paragraphs.\n- **Default kicker / label color**: `{colors.ink-graphite-light}` — the most muted graphite. Labels should sit back, not lead.\n- **Default border / divider color**: `{colors.ink-black}` — every divider is solid black. There is no muted border tone.\n- **Default rule weight**: 1px. The system never uses thicker rules.\n- **Default \"accent\" color**: `{colors.ink-black}` — the same as the primary text color. Accent in this system means darker emphasis ink, not a chromatic switch.\n- **Default warmer-surface treatment for insight or timeline groups**: `{colors.cream-warm}` — used to tonally identify a group of slides without breaking the monochrome palette.\n\nThe system has no warm/cool pairing, no semantic color (no red for warning, no green for success), no chromatic emphasis. Every emphasis comes from typography (size, weight, italic switch) or from a rule, never from color.\n\n## Colors (continued)\n\nThe three \"insight card surfaces\" (`--c-card-a`, `--c-card-b`, `--c-card-c`) are all near-identical cream tones (#FAFADF, #F5F0E4, #FAFADF). They are intentionally collapsed — the card distinction is meant to come from padding and serif title, not surface color. Treat the three card-surface tokens as effectively one surface.\n\n## Typography\n\n### Font Family\n\nThe system loads five faces: **Jost** (weights 200, 300, 400, 500, 600) carries all sans display and body; **Lora** (italic and roman, weights 400, 500, 600) carries only the pull-quote text and the insight-card title; **JetBrains Mono** (weights 300, 400, 500) carries every structural label; **Noto Serif SC** is the CJK fallback for Lora; **Noto Sans SC** is the CJK fallback for Jost.\n\nThe emotional register is deliberate:\n- Jost reads as **quiet, geometric, almost mathematical** at weight 200. It is the system's editorial voice.\n- Lora italic reads as **literary, personal, hand-set**. It signals \"this is the voice of a human or a quote\" — wherever it appears, the tone shifts from analytical to lyrical.\n- JetBrains Mono reads as **archival, indexical, structural**. It is the system's catalog-card voice — version numbers, dates, axis labels, anything that's metadata rather than message.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 8.5vw | Jost | 200 | Cover or opening hero display — generous and airy |\n| `{typography.h1}` | 5vw | Jost | 200 | Chapter-opening or section-break headline |\n| `{typography.h2}` | 3.2vw | Jost | 300 | Primary content-slide headline |\n| `{typography.stat-value}` | 5.5vw | Jost | 200 | Large numerical figure inside a stat cell |\n| `{typography.quote-serif}` | 3.2vw | Lora italic | 400 | Pull-quote body text |\n| `{typography.insight-serif}` | 2.8vw | Lora | 400 | Insight-card title |\n| `{typography.h3}` | 2vw | Jost | 400 | Sub-headline, region heading, flow-step title |\n| `{typography.lead}` | 1.5vw | Jost | 300 | Lead paragraph or large bullet item |\n| `{typography.body}` | 1.1vw | Jost | 300 | Body paragraph |\n| `{typography.caption}` | 0.85vw | Jost | 300 | Image caption, source note, fine print |\n| `{typography.label}` | 0.72vw | JetBrains Mono | 400 | Kicker, chrome label, axis label, version tag |\n| `{typography.flow-num}` | 3.5vw | Jost | 200 | Large step numeral in a process diagram |\n\n### Defaults\n\n- **Default primary section headline**: `{typography.h2}` (3.2vw at weight 300). Don't reach for `{typography.h1}` for a standard content slide — that size is for chapter breaks.\n- **Default opening or cover display**: `{typography.display}` (8.5vw at weight 200).\n- **Default body paragraph size**: `{typography.body}` (1.1vw at weight 300).\n- **Default lead paragraph size**: `{typography.lead}` (1.5vw at weight 300) when a paragraph is the single supporting block under a headline.\n- **Default label / kicker size**: `{typography.label}` (0.72vw).\n- **Default weight for any display element**: 200. Jost at 200 is the system's display voice.\n- **Default weight for body**: 300.\n\nWhen unsure, the canonical pairing is `{typography.h2}` (weight 300) for the headline + one paragraph at `{typography.lead}` (weight 300) for the supporting block. The narrow weight gap (300 vs. 300, distinguished only by size) is correct — Ivory Ledger does not lean on heavy weight contrast.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Jost display, h1, h2, h3 element is mixed case** — never uppercase. Uppercase is reserved exclusively for JetBrains Mono labels.\n- **Every label, kicker, chrome tag, footer, axis label, and source note uses JetBrains Mono uppercase with at least 0.12em positive tracking** (most are 0.14–0.18em). Mono in sentence case does not exist here.\n- **The pull-quote body is always Lora italic.** A pull-quote in Jost reads as a different design system.\n- **The insight-card title is always Lora roman (not italic).** The serif face is the card's defining visual signal.\n- **The bullet-list marker is always an em-dash in JetBrains Mono colored `{colors.ink-graphite-light}`.** Never a dot, never a check, never a numeral.\n- **Stat values, display headlines, and flow numerals all use Jost weight 200 with negative letter-spacing.** The combination of ultra-light weight and tight tracking is the system's display signature.\n- **Headlines and body text are colored `{colors.ink-black}`; muted lead is `{colors.ink-graphite}`; labels are `{colors.ink-graphite-light}`.** Headlines never carry the graphite tones.\n\n### Typography Principles\n\nThe rhythm of Ivory Ledger is **ultra-light Jost + Lora italic in two specific moments + tracked mono labels**. Switching Jost to a heavier weight (500+) for a headline reads as a different system. Setting body text in Lora reads as a different system. Setting a label in Jost rather than JetBrains Mono reads as a different system. The role of each face is narrow and unmoving.\n\nItalic is used exclusively in Lora (pull-quote body) and not in Jost. Underline is not used anywhere. Bold is not used to emphasize body text — emphasis inside a paragraph is achieved either by Lora italic switch (rare) or by isolation through whitespace.\n\n## Layout\n\n### Canvas System\n\nThe system targets a fluid `100vw × 100vh` viewport with all sizes in `vw`/`vh`. The deck is a horizontal flex strip with slide-to-slide transitions at 0.9s with a smooth easing curve. Animation tokens (`fade-up`, `fade-in`, `reveal-right`, `reveal-left`, `scale-in`) are available with stagger delays via `data-delay` attributes — these run on each slide entrance.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 8vw | Slide horizontal padding (the most generous in the library) |\n| `{spacing.pad-y}` | 6vh | Slide vertical padding |\n| `{spacing.gap-lg}` | 5vh | Between major content sections |\n| `{spacing.gap-md}` | 3vh | Between related elements |\n| `{spacing.gap-sm}` | 1.5vh | Between tightly related elements |\n\nThe slide container reserves an additional 3.5vw on the left for a vertical sidebar element (currently disabled in the source — see Known Gaps), so total left padding is ~11.5vw. Content sits inside this generous gutter system.\n\n### Chrome Frame\n\nMost content slides carry a **chrome header** and **chrome foot**: each is a `flex space-between` row of two JetBrains Mono labels, separated from the slide body by a 1px solid black rule. Cover-style, chapter-break, quote, and closing slide types suppress chrome and foot entirely.\n\n### Disabled Sidebar\n\nThe CSS defines a `.slide-sidebar` element — a thin vertical 1px black line in the left gutter with rotated mono labels reading bottom-to-top. The source explicitly disables this with `display: none !important`, with a comment noting it reads as \"visual noise.\" The styling remains in the CSS as a dormant artifact; do not re-enable without intentional design rationale.\n\n## Depth and Elevation\n\n### No Shadows, Hairline Rules Only\n\nThe system uses **zero box-shadow declarations** on any structural element. Depth is created through three mechanisms:\n\n1. **1px hairline rules in solid `{colors.ink-black}`** — under chrome bands, above foot bands, between compare panels, above stat cells, across timeline tracks, across chart baselines. The rule is the divider, the separator, the structural mark.\n2. **The 36px short rule** (`{components.rule}`) — a small punctuation mark used under chapter labels, beside kickers, or as a delicate accent break.\n3. **Generous whitespace** — the primary depth signal is the 8vw horizontal gutter and the space around each typographic moment.\n\n### No Atmospheric Effects\n\nThere are no gradients, no glows, no textures, no grain overlays. Even the donut chart center cutout is just a same-color circle laid over the conic ring — there is no contrast jump.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Every structural element — image placeholders, stat cells, compare panels, tables, chart areas |\n| 16px | Insight cards only |\n| 50% (circle) | Pie/donut chart shape, timeline-dot small circles, vt-spine dot |\n| 999px (pill) | None — pills are not used |\n\nThe system is dominantly square-cornered. The 16px rounded radius on insight cards is the only structural soft edge and is the visual signal that distinguishes a card from a region.\n\n### Border Weights\n\n- **1px solid `{colors.ink-black}`** — the universal structural rule weight. Used for every divider, every chrome rule, every chart axis, every cell border.\n- **2px solid `{colors.ink-black}`** — used only on the pyramid-bar left edge (`{components.pyramid-bar}`) as a slightly stronger left-anchor for that specific chart type.\n\nThere is no thicker border weight, no dashed border (except a `1px dashed` graphite hint inside dense charts), no colored border.\n\n### Decorative Element Types\n\n**36px short rule** — A small 36px-wide × 1px-tall solid black horizontal accent rule. The system's signature punctuation mark. Used under a chapter number, beside a kicker, or as a delicate section break.\n\n**Kicker / mono eyebrow** — A muted JetBrains Mono uppercase label in `{colors.ink-graphite-light}` placed above a headline. The eyebrow is barely-there by design.\n\n**Bordered tag** — A small inline element with a 1px black border and 0.3em × 0.8em padding, containing a mono uppercase string. Used for version tags or status labels.\n\n**Bullet em-dash** — A `—` glyph in JetBrains Mono colored `{colors.ink-graphite-light}`, prepended to each list item via a CSS grid marker column (`grid-template-columns: 1.2em 1fr`).\n\n**Insight card** — A 16px-rounded rectangle (`{components.insight-card}`) on a slightly warmer cream surface. Carries a Lora roman title (2.8vw weight 400) and a Jost body block (weight 300) pushed to the bottom of the card. The card is identified by its rounded corners and its serif title, not by a color contrast.\n\n**Stat cell** — A vertical region with a 1px solid black top rule (`{components.stat-cell}`), containing a 5.5vw Jost-200 numeral, a Jost label, and a small mono source note. Three stat cells side by side is the canonical arrangement.\n\n**Timeline dot** — An 8px solid black circle with a 2px cream-warm border ring (`{components.timeline-dot}`) that punches through the horizontal connector rule. The ring color matches the warm-cream slide surface so the dot reads as floating on the rule, not crossing it.\n\n**Vertical timeline spine** — A 1px-wide vertical solid black line (`{components.vtimeline-spine}`) with 9px solid black dots at the top of each entry. Used in long chronological lists.\n\n**Pie / donut chart** — A circle (`{components.pie-donut}`) at min(26vw, 42vh) size, with a same-color circular cutout via `::after` to create the donut ring. The chart sits beside a legend column.\n\n**Pyramid bar** — A horizontal bar (`{components.pyramid-bar}`) with a 2px solid black left edge and a tonal cream-to-graphite fill computed via `color-mix(in srgb, ink-black N%, cream-paper)` where N ranges from 4% to 55% across the five levels. Widths step from 36% (top, darkest) to 100% (bottom, lightest).\n\n**Vertical bar chart** — A muted graphite (`{colors.ink-graphite-light}`) bar at 50% opacity for default bars; a solid black bar at full opacity for the highlighted bar. The chart has a 1px black left axis and a 1px black baseline.\n\n**Image placeholder** — A 1px-bordered cream-paper-3 rectangle with centered mono label. Used until photography arrives.\n\n**Process flow with no arrows** — Flow diagrams in this system are explicit about not using arrows between steps. Whitespace between steps implies sequence; the system declares this with a comment in the CSS.\n\n## Do's and Don'ts\n\n### Do\n- Use the cream paper background (`{colors.cream-paper}`) on every slide. The single-surface canvas is the system's foundation.\n- Set every headline in `{colors.ink-black}` and let the weight (Jost 200) and size do the work. Headlines never need a chromatic shift.\n- Use Jost at weight 200 for any display moment. The ultra-light weight is the system's defining typographic voice.\n- Reach for Lora italic only when the text is a pull-quote body; reach for Lora roman only when it's an insight-card title. The serif's two roles are non-overlapping.\n- Use JetBrains Mono uppercase with at least 0.12em tracking for every structural label, axis tag, footer, and bullet marker. Mono is the catalog-card voice.\n- Render every structural divider as a 1px solid black rule. There is no thicker, no muted, no dashed border in the system.\n- Apply the em-dash marker in muted graphite via JetBrains Mono for every bullet list.\n- Leave generous whitespace. Content should sit comfortably in the middle 60–70% of the canvas; cramming content to the edges breaks the editorial reading.\n\n### Don't\n- Don't introduce a chromatic color. Red, blue, green, yellow do not exist in this system. The accent is darker ink.\n- Don't use heavy weights (Jost 500, 600, 700) for headlines. The system reads as broken if display type weighs more than 300.\n- Don't put a pull-quote in Jost. The Lora italic body is the quote's identity — switching to sans collapses the typographic distinction.\n- Don't use box-shadow on any element. The system has no elevation.\n- Don't use a card surface with chromatic contrast. Insight cards are identified by corner radius and serif title; a colored fill breaks the monochrome reading.\n- Don't crowd a slide. The horizontal padding is 8vw for a reason — content needs to breathe.\n- Don't use bold to emphasize body text. Inline emphasis is rare; when used, switch to Lora italic, not weight increase.\n- Don't substitute the em-dash bullet marker with a dot, check, arrow, or numeral. The em-dash is the system's only list mark.\n- Don't enable the disabled sidebar (`.slide-sidebar`). It's hidden intentionally — re-enabling it adds visual noise that the system was tuned to remove.\n- Don't round any element other than insight cards (16px) or true circles (dots, donut). Square corners are the structural default.\n\n## Responsive Behavior\n\nThe system is viewport-fluid by design. All sizes use `vw`/`vh` so the same composition renders correctly across any 16:9 viewport without breakpoints. At smaller viewports, both typography and padding scale linearly so the visual density and the negative-space ratio stay constant.\n\n### Presenter Behavior\n- Standard keyboard navigation: arrows, space, Home, End.\n- Touch swipe for mobile.\n- Mouse wheel with debounce to prevent multi-skip.\n- Slide-to-slide transitions animate over 0.9s with a smooth easing curve.\n- Each slide can declare entrance animations on individual elements via `data-anim` (fade-up, fade-in, reveal-right, reveal-left, scale-in) with stagger delays via `data-delay=\"N\"` where N maps to a discrete delay step (0s, 0.08s, 0.18s, 0.3s, 0.44s, 0.6s, 0.78s, 0.96s).\n- Elements with `[data-anim]` start invisible (opacity:0) and animate on `.is-active` — re-visiting a slide replays the entrance.\n\n### Print Behavior\nThe template does not declare a `@media print` rule. Browser-driven PDF export will capture only the active slide; multi-slide export requires manual navigation per slide.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / headline (Jost 200) | Jost | Noto Sans SC (思源黑体) | 700 (heaviest available; CJK at 200 reads as broken — see Aesthetic Notes) |\n| Body / lead (Jost 300) | Jost | Noto Sans SC (思源黑体) | 400 |\n| Pull quote / insight title (Lora italic / roman) | Lora | Noto Serif SC (思源宋体) | 400 |\n| Label / mono chrome (JetBrains Mono) | JetBrains Mono | Noto Sans SC | 400 (do not force monospace on CJK; see Aesthetic Notes) |\n\n### Mixed-Content Strategy\n\nStrategy A — same `font-family` stack, Latin-first fallback. Each typographic token already lists `\"Jost, Noto Sans SC, system-ui, sans-serif\"` (or the Lora equivalent). Latin glyphs render in Jost / Lora; CJK glyphs automatically fall through to Noto Sans SC / Noto Serif SC. No per-language class needed. Mixed sentences like `使用 Claude 思考` render in one logical run with the correct face per script.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Jost:wght@200;300;400;500;600&family=Lora:ital,wght@0,400;0,500;0,600;1,400;1,500&family=JetBrains+Mono:wght@300;400;500&family=Noto+Sans+SC:wght@300;400;500;700;900&family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nIvory Ledger's defining trait is Jost at weight 200 — paper-thin geometric strokes against cream. **Noto Sans SC does not have a usable weight 200.** Its lightest weight (300) still reads heavier than Jost 200 because Chinese glyphs carry far more strokes per character. Set Chinese display in **Noto Sans SC 700** to match the *visual presence* of Jost 200 on the cream paper (counterintuitive, but Chinese readers perceive lighter weights as anemic at large sizes). For body, Noto Sans SC 400 against Jost 300 is the correct match — the cream-paper-and-graphite ink moment carries across scripts.\n\nLora italic is the system's \"human voice\" in pull-quote bodies. **Noto Serif SC has no italic.** Drop italic entirely for Chinese pull quotes; the serif face itself carries the editorial warmth. Don't try to fake italic with `font-style: italic` — Noto Serif SC will render an auto-slanted glyph that looks broken.\n\nJetBrains Mono's uppercase tracked labels (0.12–0.18em) do not transfer to CJK. **Set Chinese labels in Noto Sans SC 400, mixed case, with letter-spacing reset to 0.** The \"catalog-card\" voice in Chinese is achieved through the small size and the cream-paper-light color, not through monospace + tracking. If a label is pure Latin (a version number, a date), keep it in JetBrains Mono uppercase as originally designed.\n\nThe em-dash bullet marker (`—`) works perfectly in Chinese — the Chinese em-dash is also `—` and renders the same width. Keep the marker as-is.\n\n### Known CJK Gap\n\nThe 8vw horizontal padding (the most generous in the library) was tuned for Latin's narrower glyph widths. Chinese characters are roughly square and consume more horizontal space at the same point size. Long Chinese headlines that would fit on one line in English may wrap to two. Reduce display headline sizes by ~15% (Jost 8.5vw → Noto Sans SC 7.2vw) when the headline is pure Chinese, or accept the wrap as part of the editorial rhythm.\n\n## Iteration Guide\n\n1. Any new slide background is `{colors.cream-paper}` (or `{colors.cream-warm}` for the insight/timeline sub-aesthetic). Never introduce a dark or chromatic background.\n2. Any new headline uses Jost in mixed case at weight 200 (display, h1) or 300 (h2). Never reach for heavier weights.\n3. Any new label, eyebrow, tag, or metadata text uses JetBrains Mono uppercase with at least 0.12em tracking colored `{colors.ink-graphite-light}`.\n4. Any new structural divider is a 1px solid black rule. Use `{components.rule}` (36px short) for decorative accents and `{components.rule-full}` for region separation.\n5. Any new pull-quote uses Lora italic at `{typography.quote-serif}` size. Quotes never appear in sans.\n6. Any new card moment uses 16px rounded corners and a Lora roman title. Don't introduce square cards or sans-titled cards.\n7. Any new bullet list uses the em-dash in muted graphite via JetBrains Mono.\n8. Generous whitespace is a feature, not a missing layout. Don't fill space because it's available.\n9. If you need to emphasize a moment, increase size or wrap a span in Lora italic. Do not introduce color.\n10. Color tokens that look chromatic (e.g. `--c-accent`) are aliased to `{colors.ink-black}` — they exist for token compatibility but resolve to black. Don't add a chromatic value to them.\n\n## Known Gaps\n\n- The CSS defines a `.slide-sidebar` element (rotated mono labels in the left gutter) that is intentionally hidden via `display: none !important`. The dormant styles remain in the source; re-enabling without design review will add visual noise the system was tuned to remove.\n- The three insight-card surface tokens (`--c-card-a`, `--c-card-b`, `--c-card-c`) resolve to two near-identical values (#FAFADF, #F5F0E4). The card \"color variation\" is effectively cosmetic — cards are distinguished by serif title and padding, not surface tone.\n- The pie/donut chart uses a `::after` pseudo cutout that requires the chart background to match the slide surface. Slides with a different background (e.g., the cream-warm variant) need the `--c-bg-light` token adjusted for the cutout to disappear correctly.\n- The pyramid chart uses `color-mix(in srgb, ...)` which requires a modern browser. Older browsers will render the bars as solid `{colors.cream-paper}`.\n- The animation system requires the `.is-active` class to be applied to a slide for entrance animations to play. Without proper navigation engine wiring, `[data-anim]` elements will remain at opacity 0.\n- Lora italic at large sizes (3.2vw quote body) has noticeably wider stroke contrast than the surrounding Jost — this is intentional but creates a perceived weight jump. Don't compensate by making the surrounding text heavier.\n- The bar-chart `bar-fill` uses inline `style=\"height: XX%\"` declarations — there's no data-binding layer. Heights are computed manually.\n- The system was originally named \"Ivory Ledger\" in the source comments. The template is exposed in the library as \"Monochrome\"; both names refer to the same design system.\n","frontmatter":{"version":"alpha","name":"Monochrome (Ivory Ledger)","description":"A literary editorial system rendered in black ink on cream paper. Ultra-light geometric sans (Jost at weight 200–300) carries every headline; Lora italic serif handles quote text and insight-card titles; JetBrains Mono provides the structural chrome. There are no chromatic accents — every color in the palette is a graphite or cream tone, and \"accent\" simply means \"darker ink.\" The aesthetic borrows from independent research reports, scholarly monographs, and the quietest end of contemporary editorial design — closer to a printed journal than a tech presentation.","colors":{"cream-paper":"#FAFADF","cream-paper-2":"#F2F2D2","cream-paper-3":"#F0F0D4","cream-warm":"#F5F0E4","ink-black":"#1A1A16","ink-graphite":"#5E5E54","ink-graphite-light":"#8A8A80"},"color-aliases":{"c-bg":"cream-paper","c-bg-light":"cream-paper","c-bg-cream":"cream-warm","c-fg":"ink-black","c-fg-light":"ink-black","c-fg-2":"ink-graphite","c-fg-3":"ink-graphite-light","c-accent":"ink-black","c-border":"ink-black","c-border-light":"ink-black"},"typography":{"display":{"fontFamily":"Jost, Noto Sans SC, system-ui, sans-serif","fontSize":"8.5vw","fontWeight":200,"lineHeight":0.96,"letterSpacing":"-0.02em"},"h1":{"fontFamily":"Jost, Noto Sans SC, system-ui, sans-serif","fontSize":"5vw","fontWeight":200,"lineHeight":1.1,"letterSpacing":"-0.01em"},"h2":{"fontFamily":"Jost, Noto Sans SC, system-ui, sans-serif","fontSize":"3.2vw","fontWeight":300,"lineHeight":1.2},"h3":{"fontFamily":"Jost, Noto Sans SC, system-ui, sans-serif","fontSize":"2vw","fontWeight":400,"lineHeight":1.3},"lead":{"fontFamily":"Jost, Noto Sans SC, system-ui, sans-serif","fontSize":"1.5vw","fontWeight":300,"lineHeight":1.65},"body":{"fontFamily":"Jost, Noto Sans SC, system-ui, sans-serif","fontSize":"1.1vw","fontWeight":300,"lineHeight":1.7},"caption":{"fontFamily":"Jost, Noto Sans SC, system-ui, sans-serif","fontSize":"0.85vw","fontWeight":300,"lineHeight":1.55},"label":{"fontFamily":"JetBrains Mono, monospace","fontSize":"0.72vw","fontWeight":400,"letterSpacing":"0.12em","textTransform":"uppercase"},"quote-serif":{"fontFamily":"Lora, Noto Serif SC, Georgia, serif","fontSize":"3.2vw","fontWeight":400,"lineHeight":1.35},"insight-serif":{"fontFamily":"Lora, Noto Serif SC, Georgia, serif","fontSize":"2.8vw","fontWeight":400,"lineHeight":1.15},"stat-value":{"fontFamily":"Jost, Noto Sans SC, system-ui, sans-serif","fontSize":"5.5vw","fontWeight":200,"lineHeight":1,"letterSpacing":"-0.03em"},"flow-num":{"fontFamily":"Jost, Noto Sans SC, system-ui, sans-serif","fontSize":"3.5vw","fontWeight":200,"lineHeight":1,"letterSpacing":"-0.02em"}},"spacing":{"pad-x":"8vw","pad-y":"6vh","gap-lg":"5vh","gap-md":"3vh","gap-sm":"1.5vh"},"canvas":{"width":"100vw","height":"100vh"},"components":{"rule":{"width":"36px","height":"1px","background":"{colors.ink-black}","description":"A 36-pixel hairline accent rule. The system's signature small punctuation mark — appears under chapter labels, beside kickers, above stat values."},"rule-full":{"width":"100%","height":"1px","background":"{colors.ink-black}","description":"Full-width 1px hairline rule for chrome bands, foot bands, and section dividers."},"kicker":{"fontFamily":"{typography.label.fontFamily}","fontSize":"{typography.label.fontSize}","letterSpacing":"0.14em","textTransform":"uppercase","color":"{colors.ink-graphite-light}","description":"Muted mono uppercase eyebrow label above a headline."},"tag":{"border":"1px solid {colors.ink-black}","padding":"0.3em 0.8em","fontFamily":"{typography.label.fontFamily}","fontSize":"{typography.label.fontSize}","letterSpacing":"0.12em","textTransform":"uppercase","description":"Bordered inline tag for version numbers, status labels."},"bullet-marker":{"content":"—","color":"{colors.ink-graphite-light}","fontFamily":"{typography.label.fontFamily}","description":"Em-dash in muted graphite via JetBrains Mono. The standard list mark; never a dot, never a check."},"insight-card":{"background":"{colors.cream-warm}","borderRadius":"16px","padding":"3vh 2.5vw","description":"Tall rounded-rectangle card in cream tone (one of three near-identical creams). Holds a large Lora serif title and a Jost body block at the bottom."},"stat-cell":{"borderTop":"1px solid {colors.ink-black}","padding":"{spacing.gap-md} {spacing.gap-md} {spacing.gap-md} 0","description":"Rule-topped vertical cell with a 5.5vw weight-200 numeral, a Jost label, and a mono source note."},"timeline-dot":{"width":"8px","height":"8px","borderRadius":"50%","background":"{colors.ink-black}","border":"2px solid {colors.cream-warm}","description":"Solid black dot with a cream border ring that punches through a horizontal connector rule."},"vtimeline-spine":{"width":"1px","background":"{colors.ink-black}","description":"1px vertical rule that anchors a vertical timeline. Carries a 9px solid black dot at the top of each entry."},"pie-donut":{"width":"min(26vw, 42vh)","height":"min(26vw, 42vh)","borderRadius":"50%","description":"Donut ring rendered by overlaying a same-color circular ::after pseudo on a conic-gradient or similar. Center cutout is the slide background."},"pyramid-bar":{"borderLeft":"2px solid {colors.ink-black}","background":"color-mix(in srgb, {colors.ink-black} N%, {colors.cream-paper})","description":"Horizontal pyramid level. Width grows down each level (36% → 100%); fill darkens up the pyramid via color-mix at increasing percentages."},"bar-fill":{"width":"100%","background":"{colors.ink-graphite-light}","opacity":0.5,"description":"Vertical bar in muted graphite at half opacity. Accented variant uses solid ink-black at full opacity."},"img-placeholder":{"border":"1px solid {colors.ink-black}","background":"{colors.cream-paper-3}","color":"{colors.ink-graphite}","description":"Hairline-bordered cream void with a centered mono label. Used until photography is dropped in."}}},"isInternal":false,"tokens":8975,"sizeBytes":36066},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/monochrome/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/monochrome/preview.md","title":"Monochrome Skill","category":"anthropic-skill","format":"markdown","content":"# Monochrome Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/monochrome/design.md`\n- Preview card: `bold-template-pack/templates/monochrome/preview.md`\n\n## Selection Metadata\n\n- Slug: `monochrome`\n- Tagline: Ivory ledger paper with all-black type; Lora serif headlines, Jost body, no color at all.\n- Mood: restrained, literary, archival, ledger\n- Tone: literary, considered, neutral, honest\n- Formality: high\n- Density: high\n- Scheme: light\n- Best for: Anything that should feel like a hand-typeset ledger: user research synthesis, white papers, longform reports, academic and policy briefs, advisory deliverables, bilingual EN/CN reports. Equally good for tech, design, or brand decks that want their words to be the only thing on the page.\n- Avoid for: Decks that need visual personality or color-led storytelling — the all-ink palette is intentionally austere.\n\n## Visual Snapshot\n\nA literary editorial system rendered in black ink on cream paper. Ultra-light geometric sans (Jost at weight 200–300) carries every headline; Lora italic serif handles quote text and insight-card titles; JetBrains Mono provides the structural chrome. There are no chromatic accents — every color in the palette is a graphite or cream tone, and \"accent\" simply means \"darker ink.\" The aesthetic borrows from independent research reports, scholarly monographs, and the quietest end of contemporary editorial design — closer to a printed journal than a tech presentation.\n\nMonochrome (Ivory Ledger) is a literary editorial system built on a single material constraint: black ink on cream paper, and nothing else. The palette has eight tokens, but seven of them are tonal variations of cream or graphite. There is no chromatic accent — the \"accent\" color is just darker ink. The result is a system that reads as a carefully typeset research report or a quiet contemporary monograph, not a presentation.\n\n## Preview Ingredients\n\n- Palette: cream-paper #FAFADF; cream-paper-2 #F2F2D2; cream-paper-3 #F0F0D4; cream-warm #F5F0E4; ink-black #1A1A16; ink-graphite #5E5E54; ink-graphite-light #8A8A80\n- Typography: Jost; JetBrains Mono; Lora; {typography.label.fontFamily}\n- Signature move: Cream paper background ({colors.cream-paper}) on every slide — never white, never dark by default. The cream is the surface, not a stylistic choice.\n- Signature move: Ultra-light Jost (weight 200 for display, weight 300 for body) is the dominant typographic voice.\n- Signature move: Lora italic serif appears in two specific moments: pull-quote bodies and insight-card titles. Nowhere else.\n- Signature move: JetBrains Mono uppercase with 0.12em+ tracking handles every structural label, chrome tag, axis, and bullet marker.\n- Signature move: The system has no chromatic accent. The accent color is {colors.ink-black} — slightly darker ink.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1006,"sizeBytes":4456},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/neo-grid-bold/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/neo-grid-bold/design.md","title":"Neo-Grid Bold","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Neo-Grid Bold\ndescription: A heavy editorial poster system built on a strict 12-column × 8-row block grid with neon-yellow accents on putty-ecru. Space Grotesk at weight 700 in strict uppercase carries every display moment; JetBrains Mono carries every label and metadata tag. Each slide reads as a magazine spread divided into colored panels — paper-ecru, ink-black, and electric lemon-yellow trading roles across cells. The aesthetic borrows from contemporary editorial print, brutalist annual reports, and the populist-poster end of design week showcases.\n\ncolors:\n  paper: \"#F5F4EF\"\n  bg: \"#ECECE8\"\n  ink: \"#0A0A0A\"\n  accent-lemon: \"#E6FF3D\"\n  muted: \"#8A8A85\"\n  stage-bg: \"#1A1A1A\"\n\ncolor-aliases:\n  line: ink\n  primary-bg: bg\n  card-bg: paper\n\ntypography:\n  display:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 132px\n    fontWeight: 700\n    lineHeight: 0.92\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  title:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 88px\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.015em\n    textTransform: uppercase\n  subtitle:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 56px\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  section-num:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 320px\n    fontWeight: 700\n    lineHeight: 0.85\n    letterSpacing: -0.05em\n  stat-num:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 156px\n    fontWeight: 700\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  stat-num-lg:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 240px\n    fontWeight: 700\n    lineHeight: 0.85\n    letterSpacing: -0.04em\n  stat-num-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 96px\n    fontWeight: 700\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  card-headline:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 44px\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  card-h3:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 30px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n    textTransform: uppercase\n  body:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.35\n  body-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"\n    fontSize: 22px\n    fontWeight: 400\n    lineHeight: 1.45\n  label:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  label-sm:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 16px\n    fontWeight: 400\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  label-xs:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 14px\n    fontWeight: 400\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  pagenum:\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    letterSpacing: 0.04em\n\nspacing:\n  frame-inset: 40px\n  grid-gap: 12px\n  grid-gap-lg: 18px\n  card-pad-sm: \"24px 28px\"\n  card-pad-md: \"28px 32px\"\n  card-pad-lg: \"36px 32px\"\n  card-pad-xl: \"40px 44px\"\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  frame:\n    position: \"absolute; inset: 40px\"\n    display: grid\n    gridTemplateColumns: \"repeat(12, 1fr)\"\n    gridTemplateRows: \"repeat(8, 1fr)\"\n    gap: \"{spacing.grid-gap}\"\n    description: \"The universal slide frame — a 12-column × 8-row CSS grid inset 40px from each slide edge with 12px gaps between cells. Every slide composes its layout by spanning cells inside this frame.\"\n  card:\n    background: \"{colors.paper}\"\n    position: relative\n    overflow: hidden\n    description: \"Generic colored panel. Paper is the default fill; .ink switches to black with paper text; .lemon switches to yellow with ink text; .photo switches to deep-black with white text for image regions.\"\n  card-ink:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    description: \"Inverted card — black background, paper text. Used as a contrast block in any composition.\"\n  card-lemon:\n    background: \"{colors.accent-lemon}\"\n    color: \"{colors.ink}\"\n    description: \"Yellow accent card — full neon-yellow fill with ink text. The system's loudest signal.\"\n  pagenum:\n    position: \"absolute; left: 0; bottom: 0\"\n    background: \"{colors.paper}\"\n    color: \"{colors.ink}\"\n    padding: \"14px 22px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.04em\n    description: \"Bottom-left page-number tag in the format '01 / 12'. Three variants: default (paper bg), .invert (ink bg), .lemon (yellow bg).\"\n  corner-mark:\n    position: \"absolute; top: 22px; right: 22px\"\n    width: 36px\n    height: 36px\n    display: \"grid 2x2\"\n    gap: 4px\n    description: \"Top-right 2x2 block mark — three solid currentColor squares plus one transparent. A small structural identity stamp.\"\n  blockmark:\n    width: 56px\n    height: 56px\n    display: \"grid 2x2\"\n    gap: 4px\n    description: \"Larger 2x2 block stamp with diagonal squares filled — used as a brand mark on covers and dividers. May be sized 56px, 96px, or larger.\"\n  qr-tile:\n    width: 90px\n    height: 90px\n    display: \"grid 5x5\"\n    description: \"Decorative QR-pattern tile composed of a 5x5 grid of black squares with some accent-lemon squares interspersed. Decorative, not a real scannable code.\"\n  table-cell:\n    padding: \"18px 22px\"\n    borderBottom: \"1.5px solid {colors.ink}\"\n    borderRight: \"1.5px solid {colors.ink}\"\n    fontSize: 24px\n    lineHeight: 1.35\n    description: \"Comparison-matrix cell. Solid hairline ink dividers on bottom and right; last column has no right border.\"\n  table-head-row:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 14px\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    description: \"Inverted table header — black row with paper mono uppercase text.\"\n  pill-yes:\n    background: \"{colors.accent-lemon}\"\n    color: \"{colors.ink}\"\n    padding: \"6px 14px\"\n    description: \"Affirmative pill in a comparison cell — yellow fill, ink text, mono uppercase.\"\n  pill-part:\n    background: \"{colors.paper}\"\n    color: \"{colors.ink}\"\n    border: \"1.5px solid {colors.ink}\"\n    description: \"Partial-state pill — paper fill, ink border, ink text.\"\n  pill-no:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    description: \"Negative pill — black fill, paper text.\"\n  arrow:\n    width: 64px\n    height: 64px\n    description: \"Inline SVG arrow glyph (right-pointing) at 64px square. Used as a flow indicator between process steps and as an out-of-cell pointer on stat cards.\"\n  highlight-mark:\n    background: \"{colors.accent-lemon}\"\n    color: \"{colors.ink}\"\n    padding: \"0 6px\"\n    description: \"Inline <mark> element — yellow background swatch wrapping one or more words inside a headline for emphasis.\"\n  bar-fill-ink:\n    background: \"{colors.ink}\"\n    description: \"Solid black vertical bar for chart series A.\"\n  bar-fill-lemon:\n    background: \"{colors.accent-lemon}\"\n    border: \"1.5px solid {colors.ink}\"\n    description: \"Yellow vertical bar with ink border for chart series B.\"\n  copyright:\n    position: \"absolute; left: 22px; bottom: 22px\"\n    fontFamily: \"JetBrains Mono, ui-monospace, monospace\"\n    fontSize: 16px\n    lineHeight: 1.4\n    color: \"{colors.ink}\"\n    opacity: 0.85\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nNeo-Grid Bold is a **heavy editorial poster system** built on a single structural premise: every slide is a 12-column × 8-row CSS grid inset 40px from the slide edges, with 12px gaps between cells. Composition happens by assigning colored panels to grid spans — `grid-column: 4 / span 5` and `grid-row: 1 / span 5` is how layout is described. The grid is rigid; the visual variety comes from how panels of `{colors.paper}`, `{colors.ink}`, and `{colors.accent-lemon}` are arranged across cells.\n\nThe typeface stack is intentionally narrow. **Space Grotesk** at weight 700 carries every display moment in strict uppercase with negative letter-spacing. Body copy runs at weight 400 in mixed case. **JetBrains Mono** at weight 400 carries every label, page number, axis tag, and metadata string — always uppercase with 0.08–0.12em positive tracking. There is no third face. The contrast between heavy Space Grotesk uppercase and JetBrains Mono uppercase is the system's primary typographic rhythm.\n\nThe palette has three working colors plus a putty surface. **Paper** (`{colors.paper}` — a warm ecru off-white) is the default panel fill. **Ink** (`{colors.ink}` — a near-black) is the structural color: text on paper, fills for inverted panels, all dividers, all rules. **Accent Lemon** (`{colors.accent-lemon}` — an electric neon-yellow #E6FF3D) is the loud signal — used as panel fill, as a highlight `<mark>` swatch inside headlines, and as the second series in charts. **Putty BG** (`{colors.bg}`) is the slightly cooler ecru that sits behind the 40px slide inset, framing the composition like a passe-partout. **Muted graphite** is present in the token list but rarely used in practice.\n\nDepth is created entirely through **panel adjacency and color contrast**, not shadows. Cards do not carry box-shadows; cards do not have rounded corners; cards do not have borders (except for table cells and pill outlines, which use 1.5px solid ink). The visual weight of a slide is determined by how many cells are filled with `{colors.ink}` vs. `{colors.accent-lemon}` vs. `{colors.paper}`. A composition with three yellow panels reads as much more aggressive than one with a single yellow panel.\n\n**Density philosophy: dense.** Neo-Grid Bold reads as authoritative when the 12×8 grid is fully populated with panels of varying span and color. A slide with only one or two panels and large empty grid areas reads as broken; the system was designed as an editorial poster, and posters are dense. The expected pattern is 4–8 panels per slide, each occupying a non-trivial cell span, with the grid fully used corner-to-corner. The exception is a section-divider slide where a single 320px section number occupies an entire pane of the grid — but even there, the rest of the canvas is filled with a second panel of contrasting color.\n\n**Key Characteristics:**\n- Universal 12-column × 8-row CSS grid (`{components.frame}`) inset 40px from each slide edge, with 12px gaps between cells.\n- Three-color panel system: paper ecru (`{colors.paper}`) as default, ink black (`{colors.ink}`) for inverted blocks, accent lemon (`{colors.accent-lemon}`) for signal blocks.\n- Space Grotesk weight 700 uppercase with negative letter-spacing for every display element.\n- JetBrains Mono uppercase with 0.08–0.12em tracking for every label, page number, axis tag.\n- A signature corner-mark and blockmark — small 2×2 block stamps that act as decorative identity tags.\n- Inline `<mark>` element that wraps words inside a headline in a neon-yellow swatch — the system's headline emphasis mechanism.\n- A persistent page-number tag (`{components.pagenum}`) anchored bottom-left of every slide.\n- No rounded corners, no drop shadows, no gradients (apart from photo-region stylized noise textures).\n- Stat numerals scale up to 240px and even 320px — type is allowed to dominate entire panels.\n\n## Colors\n\n### Palette\n\n- **Paper** (`{colors.paper}` — #F5F4EF): Warm ecru off-white. The default panel fill, the default text color when inverted, and the canvas of any \"neutral\" card. Slightly creamier than pure white — chosen so the neon-yellow accent doesn't vibrate against it.\n- **BG (Putty)** (`{colors.bg}` — #ECECE8): A cooler ecru that sits behind the 40px slide inset, framing the grid composition like a passe-partout. The 40px border of putty around every slide is the system's universal frame.\n- **Ink** (`{colors.ink}` — #0A0A0A): The structural near-black. Used for all text on paper, all inverted panel fills, all dividers, all table cell borders, all pill outlines. Not pure #000 — slightly softer.\n- **Accent Lemon** (`{colors.accent-lemon}` — #E6FF3D): Electric neon-yellow. The signal color. Used as a panel fill, as the inline `<mark>` highlight swatch inside headlines, as the second chart series, as the affirmative pill fill, and as page-number variant background. Never as a text color (the yellow is too light to read as type against any surface).\n- **Muted** (`{colors.muted}` — #8A8A85): A reserved graphite tone present in the token list but used only at low opacity on photo-region tags. Available for de-emphasized text but rarely deployed.\n- **Stage BG** (`{colors.stage-bg}` — #1A1A1A): The viewport background outside the 1920×1080 slide canvas. This is the deck-stage container color, not part of slide design.\n\n### Defaults\n\n- **Default slide canvas background**: `{colors.bg}` — visible as the 40px putty frame around every grid composition.\n- **Default panel fill**: `{colors.paper}`. When in doubt, a panel is paper.\n- **Default primary headline color**: `{colors.ink}` on paper or lemon panels; `{colors.paper}` on ink panels.\n- **Default body text color**: `{colors.ink}` on paper/lemon; `{colors.paper}` on ink.\n- **Default label / metadata color**: `{colors.ink}` on paper, at opacity 0.7–0.85 to mute; `{colors.paper}` on ink, at opacity 0.7–0.85.\n- **Default chart series color**: `{colors.ink}` for series A; `{colors.accent-lemon}` for series B (with 1.5px ink border).\n- **Default emphasis mechanism inside a headline**: wrap in `<mark>` for a neon-yellow swatch on ink text. This is the system's primary headline-level emphasis.\n- **Default affirmative state**: `{colors.accent-lemon}` fill. Default negative state: `{colors.ink}` fill. Default neutral state: `{colors.paper}` fill with `{colors.ink}` border.\n\nNeon yellow is the system's only chromatic accent — never substitute red, blue, or any third color. Yellow's role is to draw the eye, not to communicate meaning (it is not \"warning\" or \"highlight\" in the semantic sense; it is simply the signal).\n\n## Typography\n\n### Font Family\n\nThe system uses two web fonts: **Space Grotesk** (weights 400, 500, 700) for all display and body, and **JetBrains Mono** (weights 400, 500) for all labels and metadata. There is no third face — no serif, no italic, no display script. The system's character lives in the weight contrast between Space Grotesk 700 uppercase and Space Grotesk 400 mixed case, plus the structural mono labels in JetBrains Mono.\n\nA specific inline mixing rule: **the `<em>` tag inside a Space Grotesk headline switches color to `{colors.accent-lemon}` and stays upright** (font-style is normalized to non-italic). Em is repurposed as a yellow inline color switch, like the `<mark>` swatch but without the background fill.\n\nA second inline mixing rule: **the `<mark>` element wraps words inside a Space Grotesk headline in a neon-yellow swatch with 0 6px padding**, creating the highlighter-pen emphasis that is a recurring signature of the system.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.section-num}` | 320px | Space Grotesk | 700 | Hero section ordinal in a section-divider panel |\n| `{typography.stat-num-lg}` | 240px | Space Grotesk | 700 | Featured large numerical stat |\n| `{typography.stat-num}` | 156px | Space Grotesk | 700 | Standard stat numeral |\n| `{typography.display}` | 132px | Space Grotesk | 700 | Cover, section, or hero display headline |\n| `{typography.stat-num-sm}` | 96px | Space Grotesk | 700 | Compact stat numeral inside a small card |\n| `{typography.title}` | 88px | Space Grotesk | 700 | Primary content-slide headline |\n| `{typography.subtitle}` | 56px | Space Grotesk | 700 | Secondary headline, region heading |\n| `{typography.card-headline}` | 44px | Space Grotesk | 700 | Card title at panel-fill scale |\n| `{typography.card-h3}` | 30px | Space Grotesk | 700 | Sub-headline inside a smaller card |\n| `{typography.body}` | 28px | Space Grotesk | 400 | Body paragraph inside a feature card |\n| `{typography.label}` | 24px | JetBrains Mono | 400 | Standard mono label or kicker |\n| `{typography.body-sm}` | 22px | Space Grotesk | 400 | Compact body inside dense cards |\n| `{typography.pagenum}` | 24px | JetBrains Mono | 400 | Page-number tag (e.g. \"01 / 12\") |\n| `{typography.label-sm}` | 16px | JetBrains Mono | 400 | Secondary metadata label, copyright text |\n| `{typography.label-xs}` | 14px | JetBrains Mono | 400 | Axis labels, table header text, fine print |\n\n### Defaults\n\n- **Default primary section headline**: `{typography.title}` (88px) — the workhorse content-slide headline.\n- **Default cover or section-opening display**: `{typography.display}` (132px) for a cover; `{typography.section-num}` (320px) for a section-divider ordinal.\n- **Default body paragraph size**: `{typography.body}` (28px). For dense multi-card slides, drop to `{typography.body-sm}` (22px).\n- **Default label / metadata size**: `{typography.label}` (24px) for standalone mono tags; `{typography.label-sm}` (16px) for inline metadata.\n- **Default stat numeral**: `{typography.stat-num}` (156px). Reach for `{typography.stat-num-lg}` (240px) only when the stat occupies an entire featured panel.\n- **Default weight for any display element**: 700. Display in any other weight does not exist in this system.\n- **Default weight for body**: 400.\n\nWhen unsure, reach for `{typography.title}` for the slide's primary text moment and pair it with `{typography.body}` for supporting copy.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Space Grotesk display, title, subtitle, card-headline, and stat numeral is uppercase** with negative letter-spacing (-0.005 to -0.05em depending on scale). Mixed-case display does not exist in this system.\n- **Body copy is mixed case at weight 400.** Never uppercase body.\n- **Every JetBrains Mono element is uppercase** with at least 0.08em positive tracking.\n- **The `<mark>` element inside a headline always uses `{colors.accent-lemon}` background with `{colors.ink}` text and 0 6px padding.** The yellow highlighter swatch is the system's headline emphasis signal.\n- **The `<em>` element inside a headline switches to `{colors.accent-lemon}` color and stays upright (font-style: normal).** Italic letterforms are not used.\n- **Negative letter-spacing scales with size**: smaller headlines use -0.005em to -0.015em; larger displays use -0.02 to -0.05em. The tighter the tracking, the more compressed and brutalist the headline reads — at 320px size, -0.05em is correct.\n- **Page numbers are always JetBrains Mono at 24px with 0.04em tracking** in the format `01 / 12` with a single padded zero and slash separator.\n\n### Typography Principles\n\nThe rhythm is **heavy uppercase display + light mixed-case body + small uppercase mono label**. Switching any of those three modes breaks the editorial register. Body in uppercase reads as a shouting paragraph. Display in mixed case reads as a different design system. Mono in mixed case reads as code, not editorial metadata.\n\nItalic letterforms are not used. The `<em>` and `<mark>` tags are repurposed as color/highlight switches, not italic emphasis. Underline is not used. Bold inside body text is not used — emphasis is achieved by isolating the headline in its own cell.\n\n## Layout\n\n### Canvas System\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component that handles scaling to fit the viewport. All sizes are in `px` (not vw/vh) — typography sizes, padding values, grid gaps, and inset values are all pixel-fixed. The composition is designed at 1920×1080 and the stage scales the entire deck proportionally.\n\nThe viewport background outside the deck stage is `{colors.stage-bg}` (#1A1A1A) — a dark gray frame that visually anchors the bright slide against the browser chrome.\n\n### The Universal Frame\n\nEvery slide carries a `.frame` div positioned `absolute; inset: 40px` with `display: grid; grid-template-columns: repeat(12, 1fr); grid-template-rows: repeat(8, 1fr); gap: 12px`. This is the structural constant of the system: a 12-column × 8-row grid with 12px gaps, inset 40px from the slide edges. Some slide variants increase the grid gap to 16–18px for breathing room, but the column/row counts and the 40px inset never change.\n\nComposition happens entirely by spanning cells inside this grid. A panel occupying `grid-column: 1 / span 4; grid-row: 1 / span 3` is a 4-cell-wide × 3-row-tall card in the upper-left. The grid is the only layout language — flexbox is used only for internal alignment inside a single cell.\n\n### Padding Inside Cells\n\nInternal padding inside a cell varies with cell size and purpose:\n- Compact cards (small stat tiles): 24px × 28px\n- Standard cards (feature panels): 28px × 32px\n- Large cards (chapter panels): 36px × 32px\n- Hero cards (section dividers): 40px × 44px\n\nThese are not rigid tokens — they're a practical scale. Choose the padding that gives the card's internal type room to breathe without losing the panel's identity.\n\n### Persistent Chrome\n\nEvery slide carries a `{components.pagenum}` tag bottom-left in the format `01 / 12`. Three variants:\n- Default: paper background, ink text.\n- `.invert`: ink background, paper text.\n- `.lemon`: yellow background, ink text.\n\nSome slides also carry a `{components.corner-mark}` (small 2×2 block) top-right, a `{components.copyright}` bottom-left, or a `{components.blockmark}` (larger 2×2 stamp) as a brand identifier.\n\n## Depth and Elevation\n\n### No Shadows, Color-Block Adjacency Only\n\nThe system uses **zero box-shadow declarations** on any structural panel. Depth is entirely a function of color adjacency: a paper panel next to an ink panel reads as elevated (paper toward viewer); a yellow panel next to an ink panel reads as the loudest signal in the composition. The 12px grid gap between panels reveals the putty `{colors.bg}` between cells, which acts as a unifying frame color.\n\n### No Gradients (Except Photo Regions)\n\nThe only gradients in the system are inside photo-region placeholder textures, where a `radial-gradient` plus a `repeating-linear-gradient` creates a stylized B&W-grain texture as a stand-in for photography. These textures live inside cells classed `.photo` or `.ph`, never on a structural panel.\n\n### Borders on Tables and Pills\n\n- Table cells (`{components.table-cell}`) use 1.5px solid ink dividers on bottom and right edges to create a wireframe grid.\n- Comparison pills (`{components.pill-part}`) use a 1.5px solid ink border as the partial-state outline.\n- Chart axes use 2px solid ink as the bottom-left wireframe.\n- The yellow bar in a bar chart (`{components.bar-fill-lemon}`) carries a 1.5px solid ink border to prevent the bright fill from vibrating against the paper background.\n\nNo other elements carry borders. Cards are borderless and rely on fill contrast.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Every element — cards, pills, tags, page numbers, table cells, chart bars, blockmarks |\n\nThe system has **zero border-radius** on any element. Every shape is a strict rectangle or square. The block-stamp and corner-mark glyphs are composed of right-angle squares.\n\n### Border Weights\n\n- **1.5px solid `{colors.ink}`** — used on table cell dividers, pill outlines, and the yellow bar's border. The most common border weight.\n- **2px solid `{colors.ink}`** — used on chart axes (left and bottom of the plot area) for slightly stronger wireframe.\n\nNo other border weights exist. There are no muted-color borders, no dashed borders (except a very specific `1px dashed rgba(0,0,0,.18)` chart grid line used internally).\n\n### Decorative Element Types\n\n**Block stamp (`{components.blockmark}`)** — A 2×2 grid of small squares with the top-left and bottom-right cells filled (and the other two transparent). A diagonal-fill stamp that acts as a brand identity mark. Sized from 36px (corner-mark) up to 96px (block stamp on quote slides). May render in ink or accent-lemon.\n\n**Corner mark (`{components.corner-mark}`)** — A 36px × 36px version of the block stamp anchored top-right of a panel. Acts as a small structural identity tag.\n\n**QR tile (`{components.qr-tile}`)** — A 5×5 grid of small squares with a checkerboard-like pattern of ink and accent-lemon fills. Decorative QR-pattern visual, not a real scannable code. Used as a cover-slide flourish.\n\n**Arrow (`{components.arrow}`)** — An inline SVG right-pointing arrow at 64px × 64px (or 24px × 24px for small flow indicators). Used as a flow signal between process steps and as an out-pointing indicator on stat panels.\n\n**Highlight mark (`{components.highlight-mark}`)** — A neon-yellow swatch wrapping one or more words inside a headline via the `<mark>` element. The system's headline emphasis mechanism. Padding is `0 6px` (or `0 8px` at larger sizes).\n\n**Page number (`{components.pagenum}`)** — Bottom-left position-tag in the format `01 / 12` with a colored background. The three background variants (paper, ink, lemon) let the page number adapt to whichever color is most visible against the active slide's dominant panels.\n\n**Photo region** — A cell classed `.photo` with a deep-black background (#111) containing a `.ph` child that renders a stylized B&W noise texture (radial + diagonal stripes). A small mono tag inside the cell labels the region (e.g., \"PORTRAIT / B&W\"). Used as a placeholder until real photography arrives.\n\n**Pills (`{components.pill-yes}`, `{components.pill-part}`, `{components.pill-no}`)** — Inline mono uppercase labels in a comparison cell with three color states: yellow fill (affirmative), paper with ink border (partial), ink fill with paper text (negative). All three are 0-radius rectangles, not rounded pills despite the name.\n\n**Section ordinal panel** — A panel containing a 320px Space Grotesk weight-700 numeral as the entire content. Used as the visual identity of a section-divider slide; the rest of the slide carries a complementary headline panel in ink.\n\n**Chart bar pair** — Vertical bars in groups of two (series A in solid ink, series B in yellow with ink border). The bars share equal width inside their column and the column gap is set by the parent grid.\n\n## Do's and Don'ts\n\n### Do\n- Compose every slide on the 12-column × 8-row grid (`{components.frame}`) with 40px inset and 12px (or 18px for breathing room) gaps. The grid is the system's identity.\n- Fill the grid corner to corner. The system reads as authoritative when the grid is densely populated with panels of varying span.\n- Use `{colors.paper}` as your default panel fill, `{colors.ink}` for contrast blocks, and `{colors.accent-lemon}` for one to three signal panels per slide.\n- Set every display, title, subtitle, and stat numeral in Space Grotesk 700 uppercase with negative letter-spacing. The combination is the system's typographic voice.\n- Use `<mark>` inside a headline to wrap one or more words in a yellow highlighter swatch — the system's primary headline emphasis.\n- Use `<em>` inside a headline to switch one word to accent-lemon color (stays upright, no italic).\n- Place a `{components.pagenum}` tag bottom-left of every slide. Choose the background variant (paper / ink / lemon) that contrasts with the lower-left panel.\n- Use JetBrains Mono uppercase with at least 0.08em tracking for every label, page number, axis tag, and metadata string.\n- Render pills (yes / part / no) in their canonical three-color treatment inside comparison tables.\n- Allow stat numerals to scale to 156–320px when they occupy a featured panel. Large numbers are part of the editorial poster identity.\n\n### Don't\n- Don't add box-shadow to any panel. Depth comes from color adjacency only.\n- Don't round any corner on any element. The system is strictly rectangular.\n- Don't put display headlines in mixed case. Space Grotesk display is always uppercase.\n- Don't put body copy in uppercase. Mixed case at weight 400 is the body voice.\n- Don't introduce a second accent color. Neon yellow is the only chromatic accent — adding red, blue, or green breaks the system.\n- Don't use the yellow as a text color. The accent is too light to read as type; it's a fill color only.\n- Don't compose layouts outside the 12×8 grid. Absolutely-positioned elements that break the grid (page number, corner mark, copyright) are explicitly the only exceptions.\n- Don't use italic letterforms. The `<em>` tag is repurposed as a color switch — italic visual style does not exist here.\n- Don't use rounded \"pill\" shapes despite the pill component naming. Pills are 0-radius rectangles.\n- Don't sparsely populate the grid. A slide with one panel and seven empty cells reads as broken — the system needs density to function as an editorial poster.\n\n## Responsive Behavior\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component (loaded via `deck-stage.js`). The stage scales the entire 1920×1080 composition proportionally to fit the browser viewport — type sizes, panel positions, grid gaps, and inset values are all pixel-fixed inside the canvas, and the stage handles the responsive transform.\n\nThis means: every typographic and layout decision in the system is made at 1920×1080 resolution. Sizes do not scale per breakpoint; the entire canvas scales as a single unit. There are no media queries inside slide styles.\n\n### Presenter Behavior\n- The `<deck-stage>` web component manages slide-to-slide navigation, viewport scaling, and presenter chrome.\n- Keyboard navigation, touch swipe, and mouse wheel are handled by the stage component, not by inline scripts.\n- The slide canvas is constant 1920×1080 regardless of browser viewport; the stage proportionally scales it.\n\n### Frontend Slides Integration Note\n\nWhen using this design system inside the `frontend-slides` skill, preserve the\nfixed 1920×1080 canvas model. Do not translate the 12-column × 8-row grid,\nfixed typography, and fixed spacing into independent viewport-responsive\n`clamp()` values. That breaks the relationship between panel size and type\nscale, especially with CJK text, and can create clipping even when the original\ntemplate would have scaled cleanly.\n\nThe safe single-file implementation is:\n\n1. Render each slide as a 1920×1080 `.stage`.\n2. Scale that stage proportionally to fit the current viewport.\n3. Keep the internal `.frame` grid at `inset: 40px`, `12` columns, `8` rows,\n   and `12px` gaps.\n4. Fit content at the 1920×1080 design size first, then scale the whole stage.\n5. Verify both text overflow and panel overlap in the rendered browser. A\n   `scrollHeight` check can pass while one grid panel visually covers another.\n\n### Print Behavior\nThe template uses the deck-stage component for rendering. Print export depends on the component's print handling, which may render slide-per-page or capture the active slide only.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / title / stat (Space Grotesk 700 UPPERCASE) | Space Grotesk | Noto Sans SC (思源黑体) | 900 |\n| Body (Space Grotesk 400) | Space Grotesk | Noto Sans SC | 400 |\n| Label / page number (JetBrains Mono UPPERCASE) | JetBrains Mono | Noto Sans SC | 400 (do not force monospace on CJK) |\n\n### Mixed-Content Strategy\n\nStrategy A — single `font-family` stack with Latin-first fallback. Update each token's `fontFamily` from `\"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif\"` to `\"Space Grotesk, Noto Sans SC, Helvetica Neue, Helvetica, Arial, sans-serif\"`. Latin glyphs render in Space Grotesk 700; CJK characters fall through to Noto Sans SC 900 automatically. Mixed strings like `THE CLAUDE 模型` render correctly inline.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&family=JetBrains+Mono:wght@400;500&family=Noto+Sans+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nNeo-Grid Bold is heavy uppercase Space Grotesk 700 with negative letter-spacing at sizes up to 320px. **Chinese has no concept of uppercase**, so the system's primary typographic signature (uppercase brutalist headlines) must transfer through *weight and density* instead. Set every Chinese display moment in **Noto Sans SC 900** — the heaviest available weight — to match the visual weight of Space Grotesk 700 ALL CAPS at large sizes. Chinese headlines should also drop the negative letter-spacing entirely; CJK glyphs are designed on a square em-box and tightening them causes glyph collision.\n\nThe `<mark>` neon-yellow swatch highlighting one word inside a headline is a perfect transfer to Chinese — wrap one CJK character or one phrase in `<mark>` and the lemon swatch reads the same. **Keep the highlighter mechanism as the system's primary headline emphasis in CJK.** The `<em>` color switch (yellow inline) also transfers cleanly.\n\nJetBrains Mono uppercase labels (page numbers in `01 / 12` format) are pure Latin / numeric — keep them in JetBrains Mono. Don't try to render Chinese in monospace; CJK glyphs are already monospaced by design and forcing JetBrains Mono produces missing glyphs. For mixed mono labels containing CJK, fall through to Noto Sans SC 400 at the same size.\n\nSection numerals (320px Space Grotesk 700) and stat numerals (156–240px) are pure digits — they transfer unchanged. The neon-yellow accent panel system is script-agnostic; the brutalist poster aesthetic survives the script switch as long as the weight stays at 900.\n\n### Known CJK Gap\n\nThe negative letter-spacing (-0.005 to -0.05em) scales with display size in this system and is part of the \"brutalist compressed\" signature. **Removing it for Chinese characters breaks visual parity with Latin slides in a mixed deck.** Accept this: pure-CJK slides will read as slightly less compressed than pure-Latin slides. Don't try to compensate by tightening Chinese — glyph collision is a worse failure than tonal mismatch.\n\n## Iteration Guide\n\n1. Every new slide composes its layout on the 12×8 grid via `grid-column` and `grid-row` span declarations. Never break the grid with absolute positioning except for the page-number tag, corner-mark, and copyright stamp.\n2. Every new panel uses one of three fill colors: paper (default), ink (inverted), or accent-lemon (signal). Don't introduce a fourth panel color.\n3. Every new display headline is Space Grotesk weight 700 uppercase with negative letter-spacing scaled to the headline size (-0.005em at 30px, up to -0.05em at 320px).\n4. Every new body element is Space Grotesk weight 400 mixed case at one of the three body sizes (28px, 24px, 22px).\n5. Every new label or metadata tag is JetBrains Mono uppercase with at least 0.08em tracking.\n6. Every new chart-series color is either `{colors.ink}` (series A) or `{colors.accent-lemon}` with an ink border (series B). Don't add a third series color.\n7. Every new card uses 0 border-radius. Square corners are non-negotiable.\n8. To emphasize a word inside a headline, wrap it in `<mark>` for a yellow swatch or `<em>` for a yellow color switch. Don't use bold, italic, or underline.\n9. Every new comparison cell uses the three-state pill system: yellow fill (yes), paper with ink border (partial), ink fill (no).\n10. Densely populate the grid. If a composition leaves more than two cells empty in a row, reconsider whether a card is missing.\n\n## Known Gaps\n\n- The system relies on a `<deck-stage>` web component loaded via `deck-stage.js`. Without this script, the 1920×1080 canvas will not scale to the viewport and slides will render at native pixel size.\n- Photo regions use stylized CSS-generated noise textures (radial + diagonal stripe gradients) as placeholders. Real photography must be inserted by replacing the `.photo` cell contents with an `<img>` and ensuring the surrounding panel colors complement the photo's negative space.\n- The QR-pattern tile is decorative — the 5×5 grid of squares does not encode a real scannable code. Real QR codes would need a separate SVG generated externally.\n- Bar chart heights are set via inline `style=\"height: XX%\"` declarations on each bar fill. There is no data-binding layer.\n- The arrow SVG used between process steps is hand-pathed inside each slide template; if a slide adds or removes process nodes, the arrow positions must be recomputed manually.\n- The `<deck-stage>` component is not loaded directly by this template's script tag — it's expected to be globally available via `deck-stage.js`. Missing the script will silently render slides as flat absolute-positioned divs.\n- The system uses fixed pixel sizes throughout (no `vw`/`vh`). At unusual viewport aspect ratios, the deck-stage proportional scaling may letterbox the canvas with putty bars.\n- The `{colors.muted}` (#8A8A85) token is defined but used only in low-opacity overlays on photo region tags — it has no role in the main type or panel system.\n","frontmatter":{"version":"alpha","name":"Neo-Grid Bold","description":"A heavy editorial poster system built on a strict 12-column × 8-row block grid with neon-yellow accents on putty-ecru. Space Grotesk at weight 700 in strict uppercase carries every display moment; JetBrains Mono carries every label and metadata tag. Each slide reads as a magazine spread divided into colored panels — paper-ecru, ink-black, and electric lemon-yellow trading roles across cells. The aesthetic borrows from contemporary editorial print, brutalist annual reports, and the populist-poster end of design week showcases.","colors":{"paper":"#F5F4EF","bg":"#ECECE8","ink":"#0A0A0A","accent-lemon":"#E6FF3D","muted":"#8A8A85","stage-bg":"#1A1A1A"},"color-aliases":{"line":"ink","primary-bg":"bg","card-bg":"paper"},"typography":{"display":{"fontFamily":"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif","fontSize":"132px","fontWeight":700,"lineHeight":0.92,"letterSpacing":"-0.02em","textTransform":"uppercase"},"title":{"fontFamily":"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif","fontSize":"88px","fontWeight":700,"lineHeight":0.95,"letterSpacing":"-0.015em","textTransform":"uppercase"},"subtitle":{"fontFamily":"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif","fontSize":"56px","fontWeight":700,"lineHeight":1,"letterSpacing":"-0.01em","textTransform":"uppercase"},"section-num":{"fontFamily":"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif","fontSize":"320px","fontWeight":700,"lineHeight":0.85,"letterSpacing":"-0.05em"},"stat-num":{"fontFamily":"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif","fontSize":"156px","fontWeight":700,"lineHeight":0.9,"letterSpacing":"-0.03em"},"stat-num-lg":{"fontFamily":"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif","fontSize":"240px","fontWeight":700,"lineHeight":0.85,"letterSpacing":"-0.04em"},"stat-num-sm":{"fontFamily":"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif","fontSize":"96px","fontWeight":700,"lineHeight":0.9,"letterSpacing":"-0.03em"},"card-headline":{"fontFamily":"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif","fontSize":"44px","fontWeight":700,"lineHeight":1,"letterSpacing":"-0.01em","textTransform":"uppercase"},"card-h3":{"fontFamily":"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif","fontSize":"30px","fontWeight":700,"lineHeight":1.05,"letterSpacing":"-0.005em","textTransform":"uppercase"},"body":{"fontFamily":"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif","fontSize":"28px","fontWeight":400,"lineHeight":1.35},"body-sm":{"fontFamily":"Space Grotesk, Helvetica Neue, Helvetica, Arial, sans-serif","fontSize":"22px","fontWeight":400,"lineHeight":1.45},"label":{"fontFamily":"JetBrains Mono, ui-monospace, monospace","fontSize":"24px","fontWeight":400,"letterSpacing":"0.08em","textTransform":"uppercase"},"label-sm":{"fontFamily":"JetBrains Mono, ui-monospace, monospace","fontSize":"16px","fontWeight":400,"letterSpacing":"0.08em","textTransform":"uppercase"},"label-xs":{"fontFamily":"JetBrains Mono, ui-monospace, monospace","fontSize":"14px","fontWeight":400,"letterSpacing":"0.12em","textTransform":"uppercase"},"pagenum":{"fontFamily":"JetBrains Mono, ui-monospace, monospace","fontSize":"24px","fontWeight":400,"letterSpacing":"0.04em"}},"spacing":{"frame-inset":"40px","grid-gap":"12px","grid-gap-lg":"18px","card-pad-sm":"24px 28px","card-pad-md":"28px 32px","card-pad-lg":"36px 32px","card-pad-xl":"40px 44px"},"canvas":{"width":"1920px","height":"1080px"},"components":{"frame":{"position":"absolute; inset: 40px","display":"grid","gridTemplateColumns":"repeat(12, 1fr)","gridTemplateRows":"repeat(8, 1fr)","gap":"{spacing.grid-gap}","description":"The universal slide frame — a 12-column × 8-row CSS grid inset 40px from each slide edge with 12px gaps between cells. Every slide composes its layout by spanning cells inside this frame."},"card":{"background":"{colors.paper}","position":"relative","overflow":"hidden","description":"Generic colored panel. Paper is the default fill; .ink switches to black with paper text; .lemon switches to yellow with ink text; .photo switches to deep-black with white text for image regions."},"card-ink":{"background":"{colors.ink}","color":"{colors.paper}","description":"Inverted card — black background, paper text. Used as a contrast block in any composition."},"card-lemon":{"background":"{colors.accent-lemon}","color":"{colors.ink}","description":"Yellow accent card — full neon-yellow fill with ink text. The system's loudest signal."},"pagenum":{"position":"absolute; left: 0; bottom: 0","background":"{colors.paper}","color":"{colors.ink}","padding":"14px 22px","fontFamily":"JetBrains Mono, monospace","fontSize":"24px","letterSpacing":"0.04em","description":"Bottom-left page-number tag in the format '01 / 12'. Three variants: default (paper bg), .invert (ink bg), .lemon (yellow bg)."},"corner-mark":{"position":"absolute; top: 22px; right: 22px","width":"36px","height":"36px","display":"grid 2x2","gap":"4px","description":"Top-right 2x2 block mark — three solid currentColor squares plus one transparent. A small structural identity stamp."},"blockmark":{"width":"56px","height":"56px","display":"grid 2x2","gap":"4px","description":"Larger 2x2 block stamp with diagonal squares filled — used as a brand mark on covers and dividers. May be sized 56px, 96px, or larger."},"qr-tile":{"width":"90px","height":"90px","display":"grid 5x5","description":"Decorative QR-pattern tile composed of a 5x5 grid of black squares with some accent-lemon squares interspersed. Decorative, not a real scannable code."},"table-cell":{"padding":"18px 22px","borderBottom":"1.5px solid {colors.ink}","borderRight":"1.5px solid {colors.ink}","fontSize":"24px","lineHeight":1.35,"description":"Comparison-matrix cell. Solid hairline ink dividers on bottom and right; last column has no right border."},"table-head-row":{"background":"{colors.ink}","color":"{colors.paper}","fontFamily":"JetBrains Mono, monospace","fontSize":"14px","letterSpacing":"0.12em","textTransform":"uppercase","description":"Inverted table header — black row with paper mono uppercase text."},"pill-yes":{"background":"{colors.accent-lemon}","color":"{colors.ink}","padding":"6px 14px","description":"Affirmative pill in a comparison cell — yellow fill, ink text, mono uppercase."},"pill-part":{"background":"{colors.paper}","color":"{colors.ink}","border":"1.5px solid {colors.ink}","description":"Partial-state pill — paper fill, ink border, ink text."},"pill-no":{"background":"{colors.ink}","color":"{colors.paper}","description":"Negative pill — black fill, paper text."},"arrow":{"width":"64px","height":"64px","description":"Inline SVG arrow glyph (right-pointing) at 64px square. Used as a flow indicator between process steps and as an out-of-cell pointer on stat cards."},"highlight-mark":{"background":"{colors.accent-lemon}","color":"{colors.ink}","padding":"0 6px","description":"Inline <mark> element — yellow background swatch wrapping one or more words inside a headline for emphasis."},"bar-fill-ink":{"background":"{colors.ink}","description":"Solid black vertical bar for chart series A."},"bar-fill-lemon":{"background":"{colors.accent-lemon}","border":"1.5px solid {colors.ink}","description":"Yellow vertical bar with ink border for chart series B."},"copyright":{"position":"absolute; left: 22px; bottom: 22px","fontFamily":"JetBrains Mono, ui-monospace, monospace","fontSize":"16px","lineHeight":1.4,"color":"{colors.ink}","opacity":0.85}}},"isInternal":false,"tokens":9661,"sizeBytes":39252},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/neo-grid-bold/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/neo-grid-bold/preview.md","title":"Neo-grid-bold Skill","category":"anthropic-skill","format":"markdown","content":"# Neo-Grid Bold Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/neo-grid-bold/design.md`\n- Preview card: `bold-template-pack/templates/neo-grid-bold/preview.md`\n\n## Selection Metadata\n\n- Slug: `neo-grid-bold`\n- Tagline: Editorial neo-brutalism with a single neon yellow accent on off-white paper.\n- Mood: confident, punchy, editorial, modern\n- Tone: bold, minimal, design-led, graphic\n- Formality: medium\n- Density: high\n- Scheme: light\n- Best for: Anything that should feel confident and editorial-graphic: design-led pitches, brand work, founder talks, conference keynotes. Excellent for stat-heavy slides, comparisons, and process flows. Just as strong for tech, research, or finance when the speaker wants to read as design-led rather than corporate.\n- Avoid for: Contexts that need to feel quiet, traditional, or warm — the neon-yellow accent and uppercase display commit to a confident editorial voice.\n\n## Visual Snapshot\n\nA heavy editorial poster system built on a strict 12-column × 8-row block grid with neon-yellow accents on putty-ecru. Space Grotesk at weight 700 in strict uppercase carries every display moment; JetBrains Mono carries every label and metadata tag. Each slide reads as a magazine spread divided into colored panels — paper-ecru, ink-black, and electric lemon-yellow trading roles across cells. The aesthetic borrows from contemporary editorial print, brutalist annual reports, and the populist-poster end of design week showcases.\n\nNeo-Grid Bold is a heavy editorial poster system built on a single structural premise: every slide is a 12-column × 8-row CSS grid inset 40px from the slide edges, with 12px gaps between cells. Composition happens by assigning colored panels to grid spans — grid-column: 4 / span 5 and grid-row: 1 / span 5 is how layout is described. The grid is rigid; the visual variety comes from how panels of {colors.paper}, {colors.ink}, and {colors.accent-lemon} are arranged across cells.\n\n## Preview Ingredients\n\n- Palette: paper #F5F4EF; bg #ECECE8; ink #0A0A0A; accent-lemon #E6FF3D; muted #8A8A85; stage-bg #1A1A1A\n- Typography: Space Grotesk; JetBrains Mono\n- Signature move: Universal 12-column × 8-row CSS grid ({components.frame}) inset 40px from each slide edge, with 12px gaps between cells.\n- Signature move: Three-color panel system: paper ecru ({colors.paper}) as default, ink black ({colors.ink}) for inverted blocks, accent lemon ({colors.accent-lemon}) for signal blocks.\n- Signature move: Space Grotesk weight 700 uppercase with negative letter-spacing for every display element.\n- Signature move: JetBrains Mono uppercase with 0.08–0.12em tracking for every label, page number, axis tag.\n- Signature move: A signature corner-mark and blockmark — small 2×2 block stamps that act as decorative identity tags.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1011,"sizeBytes":4430},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/peoples-platform/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/peoples-platform/design.md","title":"People's Platform","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: People's Platform\ndescription: \"A WPA-poster-meets-political-campaign presentation system built on three typefaces and a five-color palette that reduces to three functional roles. Alfa Slab One — a compressed slab serif — does all the heavy lifting at extreme sizes in pure uppercase. Caveat Brush drops in as a handwritten human interrupt: lowercase, slightly rotated, emotionally warm. DM Mono carries all metadata at tight uppercase tracking. The palette is electric cobalt blue, amber orange, and hot red — with red functioning exclusively as a shadow/depth color, never as a surface fill. Every slide gets a paper grain overlay that makes the whole deck feel screen-printed. The aesthetic is loud, confident, and populist — the kind of visual language that belongs on a protest placard, a union newsletter, or a campaign bus.\"\n\ncolors:\n  blue: \"#2C2CDC\"\n  blue-deep: \"#1B1BB0\"\n  orange: \"#F2A03A\"\n  orange-deep: \"#E89321\"\n  red: \"#E83A2A\"\n  red-deep: \"#B7281C\"\n  cream: \"#F4E9D6\"\n  paper: \"#F5F2EA\"\n  ink: \"#0E0E14\"\n\ntypography:\n  display-jumbo:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 540px\n    fontWeight: 400\n    lineHeight: 0.82\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  display-hero:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 260px\n    fontWeight: 400\n    lineHeight: 0.86\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-title:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 240px\n    fontWeight: 400\n    lineHeight: 0.86\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-xl:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 180px\n    fontWeight: 400\n    lineHeight: 0.88\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-lg:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 0.88\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-md:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 120px\n    fontWeight: 400\n    lineHeight: 0.88\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  display-sm:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 108px\n    fontWeight: 400\n    lineHeight: 1.04\n    letterSpacing: 0.005em\n    textTransform: uppercase\n  stat-unit:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 130px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  section-num:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 54px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  card-title:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 54px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  kpi-value:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 88px\n    fontWeight: 400\n    lineHeight: 0.9\n    textTransform: uppercase\n  quote-mark:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 300px\n    fontWeight: 400\n    lineHeight: 0.7\n    textTransform: uppercase\n  quote-body:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 78px\n    fontWeight: 400\n    lineHeight: 1.08\n    textTransform: uppercase\n  item-title:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 38px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  item-title-sm:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 30px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  toc-entry:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 36px\n    fontWeight: 400\n    lineHeight: 1.0\n    textTransform: uppercase\n  subtitle:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 72px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.01em\n    textTransform: uppercase\n  cta:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 48px\n    fontWeight: 400\n    letterSpacing: 0.02em\n    textTransform: uppercase\n  stamp:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 28px\n    fontWeight: 400\n    letterSpacing: 0.04em\n    textTransform: uppercase\n  url:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 46px\n    fontWeight: 400\n    letterSpacing: 0.02em\n    textTransform: uppercase\n  script-lg:\n    fontFamily: \"Caveat Brush, cursive\"\n    fontSize: 96px\n    fontWeight: 400\n    textTransform: lowercase\n  script-md:\n    fontFamily: \"Caveat Brush, cursive\"\n    fontSize: 64px\n    fontWeight: 400\n    textTransform: lowercase\n  body-lg:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 30px\n    fontWeight: 500\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-md:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 28px\n    fontWeight: 500\n    lineHeight: 1.35\n    letterSpacing: 0\n  body-sm:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 26px\n    fontWeight: 500\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-xs:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0\n  label:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-wide:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.22em\n    textTransform: uppercase\n  label-accent:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 32px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: 0.16em\n    textTransform: uppercase\n  signoff:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 26px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0.20em\n    textTransform: uppercase\n\nspacing:\n  slide-gutter: 90px\n  content-gutter: 120px\n  topbar-height: 90px\n  section-border: 6px\n  inner-border: 3px\n  grid-gap-lg: 90px\n  grid-gap-md: 30px\n  frame-inset: 48px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  inset-frame:\n    border: \"6px solid {colors.cream}\"\n    position: absolute\n    inset: 48px\n  topbar:\n    position: absolute\n    top: 0\n    left: 0\n    right: 0\n    height: 90px\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n    padding: 0 90px\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.18em\n    borderBottom: \"6px solid {colors.cream}\"\n  section-divider:\n    borderBottom: \"6px solid {colors.ink}\"\n    height: 6px\n  toc-row:\n    display: grid\n    gridTemplateColumns: \"90px 1fr 100px\"\n    gap: 24px\n    padding: \"20px 0\"\n    borderBottom: \"3px solid {colors.ink}\"\n  toc-num:\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 54px\n    color: \"{colors.orange}\"\n    textShadow: \"3px 3px 0 {colors.red}\"\n  pillar-col:\n    padding: \"60px 50px\"\n    borderRight: \"6px solid {colors.ink}\"\n    background: \"{colors.paper}\"\n  pillar-col-alt:\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n  pillar-tag:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.18em\n    borderTop: \"3px solid {colors.ink}\"\n    paddingTop: 18px\n    marginTop: 14px\n    alignSelf: flex-start\n  kpi-card:\n    border: \"5px solid {colors.ink}\"\n    padding: \"28px 30px\"\n    background: \"{colors.paper}\"\n  kpi-card-alt:\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n  timeline-dot:\n    width: 60px\n    height: 60px\n    borderRadius: 50%\n    background: \"{colors.orange}\"\n    border: \"6px solid {colors.ink}\"\n    boxShadow: \"6px 6px 0 {colors.red}\"\n  timeline-dot-alt:\n    background: \"{colors.blue}\"\n  timeline-track:\n    height: 14px\n    background: \"{colors.ink}\"\n  compare-side-left:\n    background: \"{colors.paper}\"\n    borderRight: \"6px solid {colors.ink}\"\n    padding: \"60px 70px\"\n  compare-side-right:\n    background: \"{colors.blue}\"\n    color: \"{colors.cream}\"\n    padding: \"60px 70px\"\n  compare-label:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.22em\n    paddingBottom: 14px\n    borderBottom: \"4px solid {colors.ink}\"\n    alignSelf: flex-start\n  diamond-bullet:\n    width: 24px\n    height: 24px\n    background: \"{colors.red}\"\n    borderRadius: 4px\n    transform: rotate(45deg)\n  diamond-bullet-alt:\n    background: \"{colors.orange}\"\n  avatar:\n    width: 120px\n    height: 120px\n    borderRadius: 50%\n    background: \"{colors.blue}\"\n    border: \"6px solid {colors.blue}\"\n    boxShadow: \"6px 6px 0 {colors.red}\"\n  quote-stamp:\n    background: \"{colors.blue}\"\n    color: \"{colors.orange}\"\n    padding: \"18px 32px\"\n    transform: rotate(-3deg)\n    border: \"5px solid {colors.cream}\"\n    fontFamily: \"Alfa Slab One, serif\"\n    fontSize: 28px\n    letterSpacing: 0.04em\n    boxShadow: \"6px 6px 0 {colors.red}\"\n    textTransform: uppercase\n  circular-stamp:\n    width: 200px\n    height: 200px\n    borderRadius: 50%\n    background: \"{colors.cream}\"\n    color: \"{colors.blue}\"\n    border: \"6px solid {colors.orange}\"\n    transform: rotate(-9deg)\n    boxShadow: \"8px 8px 0 {colors.red}\"\n  meta-pill:\n    border: \"3px solid {colors.cream}\"\n    padding: \"8px 20px\"\n    borderRadius: 999px\n  ribbon:\n    position: absolute\n    bottom: 0\n    left: 0\n    right: 0\n    height: 60px\n    background: \"{colors.orange}\"\n    color: \"{colors.blue}\"\n    borderTop: \"6px solid {colors.ink}\"\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.22em\n    fontWeight: 600\n  lede-block:\n    fontFamily: \"Archivo Narrow, sans-serif\"\n    fontWeight: 500\n    fontSize: 28px\n    lineHeight: 1.35\n    borderLeft: \"4px solid {colors.ink}\"\n    paddingLeft: 50px\n  lede-block-top:\n    borderTop: \"6px solid {colors.ink}\"\n    paddingTop: 24px\n  underline-rule:\n    height: 14px\n    background: \"{colors.ink}\"\n    width: \"30%\"\n    marginTop: 60px\n  kicker:\n    fontFamily: \"DM Mono, monospace\"\n    letterSpacing: 0.22em\n    fontSize: 26px\n    color: \"{colors.red}\"\n    marginBottom: 48px\n  grain-overlay:\n    position: absolute\n    inset: 0\n    pointerEvents: none\n    backgroundImage: \"radial-gradient(rgba(0,0,0,.06) 1px, transparent 1px), radial-gradient(rgba(255,255,255,.05) 1px, transparent 1px)\"\n    backgroundSize: \"3px 3px, 5px 5px\"\n    backgroundPosition: \"0 0, 1px 2px\"\n    mixBlendMode: multiply\n    opacity: 0.5\n  orange-dot:\n    width: 10px\n    height: 10px\n    borderRadius: 50%\n    background: \"{colors.orange}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPeople's Platform is a **WPA-poster-meets-political-campaign slide system** — the visual language of conviction, the graphic register of public address. The canvas is warm paper (`{colors.paper}` — #F5F2EA), a hair warmer than white, and every slide gets a grain texture applied via a CSS pseudo-element that makes the whole deck feel screen-printed rather than rendered.\n\nThe typeface stack is a three-way class system. **Alfa Slab One** owns the stage at extreme sizes — compressed, slab-heavy, all caps, intrinsically authoritative. It is the voice that shouts. **Caveat Brush** is the human interrupt — handwritten, lowercase, slightly rotated, emotionally present. It is the voice that whispers. **DM Mono** is the bureaucratic record-keeper — monospace, wide-tracked uppercase, 24px, always — the voice that accounts for things. Archivo Narrow is the workhorse body face: never used at display sizes, always condensed, weight 500 for readability.\n\nThe palette has five named colors but three functional roles. **Blue** (`{colors.blue}` — #2C2CDC) is the primary structural color: backgrounds for high-emphasis surfaces, borders for content dividers, text color on non-blue backgrounds. **Orange** (`{colors.orange}` — #F2A03A) is the energy color: stat figures, column numerals, accent text within blue surfaces. **Red** (`{colors.red}` — #E83A2A) is the depth color — it never appears as a surface fill, only as the first layer of a stacked text-shadow or box-shadow. Blue-deep and red-deep are the outer shadow layers in the double-stacked shadow system.\n\nThe signature depth technique is the **stacked offset text-shadow**: orange text casts a red shadow at 6–12px, which casts a red-deep shadow at 12–24px. This creates a three-layer quasi-3D letterpress effect that is the system's most recognisable trait. Box-shadows on interactive elements mirror the same treatment: `6px 6px 0 {colors.red}`.\n\n**Key Characteristics:**\n- Paper canvas (`{colors.paper}` — #F5F2EA) with grain overlay via CSS pseudo-element on every slide.\n- Stacked double text-shadow: `Npx Npx 0 {colors.red}, 2Npx 2Npx 0 {colors.red-deep}`. Shadow size scales with font size.\n- Alfa Slab One for all display and structural type — uppercase, line-height 0.82–1.04, letter-spacing 0.005em.\n- Red (`{colors.red}`) functions exclusively as a shadow color — never a surface background.\n- Heavy 6px ink borders for all major structural divisions (topbars, section headers, column separators, inset frames).\n- DM Mono labels at exactly 24px with 0.18–0.22em tracking across all slides.\n- Caveat Brush appears at 64–96px, always lowercase, always rotated 2–5 degrees — a deliberate roughness signal.\n- Orange bottom ribbon: a horizontal marquee strip anchored to the bottom of data-heavy slides.\n- Inset decorative frame (6px solid cream at `inset: 48px`) used on blue-background slides.\n\n## Colors\n\n### Primary Palette\n- **Blue** (`{colors.blue}` — #2C2CDC): Electric cobalt. The dominant surface color for high-emphasis slides and structural elements. Used as full-slide background, column fills, topbar backgrounds, text on cream/paper surfaces, avatar fills, and compare-panel dark side.\n- **Blue Deep** (`{colors.blue-deep}` — #1B1BB0): A darker blue. Used exclusively as the outermost layer of stacked text-shadows. Never a surface fill.\n- **Orange** (`{colors.orange}` — #F2A03A): Warm amber. The energy accent. Used for oversized stat numerals, column ordinals, CTA button fill, ribbon background, accent text within blue surfaces, and text-shadow inner layer on stamp elements.\n- **Orange Deep** (`{colors.orange-deep}` — #E89321): Darker amber. Reserved for the deepest shadow layer on orange elements. Not used as a surface fill.\n- **Red** (`{colors.red}` — #E83A2A): Hot red. The depth color. Used exclusively in text-shadows and box-shadows — the first offset layer on most display text and buttons. Never appears as a background or primary text color.\n- **Red Deep** (`{colors.red-deep}` — #B7281C): Dark red. The outermost layer of the double text-shadow on the largest display elements. Never a surface fill.\n\n### Surface Palette\n- **Cream** (`{colors.cream}` — #F4E9D6): Warm cream. Used as text/border color on blue surfaces (inverted mode), as the inset frame border, and as the full background on cream-tone slides.\n- **Paper** (`{colors.paper}` — #F5F2EA): Off-white with a warm cast. The default slide background — slightly warmer and less stark than #fff. Most content slides use this.\n- **Ink** (`{colors.ink}` — #0E0E14): Near-black with a barely-perceptible blue undertone. Used for all structural borders, body text, column dividers, timeline tracks, and KPI card borders.\n\n### Color Roles Summary\n- **Blue surfaces** = high-emphasis, conclusive, authoritative moments\n- **Paper/cream surfaces** = content-first, readable, subordinate moments\n- **Orange** = the number, the energy, the thing that matters most on a given slide\n- **Red** = never a color you see directly — only a shadow you feel\n\n## Typography\n\n### Font Families\nThree typefaces; each occupies a completely non-overlapping register:\n\n**Alfa Slab One** is the primary voice. A compressed, heavy slab serif with strong verticals and blocky serifs. Used at weight 400 (the only weight available, which is intrinsically bold) in strict uppercase for every display moment from 28px stamps to 540px stat figures. Its compressed letterform means even massive sizes don't feel wide — they feel tall and column-like. The slight positive letter-spacing (0.005em) keeps glyphs from touching at large sizes.\n\n**Caveat Brush** is the human voice. A rough handwritten script face used only at large sizes (64–96px), always lowercase, always with a small rotation (-2 to -5 degrees). It appears at moments of warmth, transition, or informality — a script annotation in an otherwise rigidly structured deck. It is never used for body copy or labels.\n\n**DM Mono** is the accounting voice. Monospace, 24px, wide letter-spacing (0.18–0.22em), uppercase. It appears on topbars, footers, kicker labels, metadata rows, source citations, and ribbon text. It is always a supporting element — the technical spec printed at the bottom of a poster, not the headline.\n\n**Archivo Narrow** is the body voice. A condensed sans used for all running body copy: pillar descriptions, list item paragraphs, compare list items, stat annotations. Weight 500 for most body text; 400 for smaller captions. Never used at display sizes.\n\n### Display Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-jumbo}` | 540px | Alfa Slab One | 400 | Full-bleed oversized stat numeral |\n| `{typography.display-hero}` | 260px | Alfa Slab One | 400 | Dominant closing or opening headline |\n| `{typography.display-title}` | 240px | Alfa Slab One | 400 | Primary deck title |\n| `{typography.display-xl}` | 180px | Alfa Slab One | 400 | Large column ordinal numeral |\n| `{typography.display-lg}` | 140px | Alfa Slab One | 400 | Section headline, primary |\n| `{typography.display-md}` | 120px | Alfa Slab One | 400 | Section headline, secondary |\n| `{typography.display-sm}` | 108px | Alfa Slab One | 400 | Body-adjacent manifesto headline |\n| `{typography.stat-unit}` | 130px | Alfa Slab One | 400 | Superscript unit symbol alongside stat |\n| `{typography.quote-mark}` | 300px | Alfa Slab One | 400 | Decorative oversized quotation mark |\n| `{typography.quote-body}` | 78px | Alfa Slab One | 400 | Pull quote body text |\n| `{typography.kpi-value}` | 88px | Alfa Slab One | 400 | KPI or metric card value |\n| `{typography.subtitle}` | 72px | Alfa Slab One | 400 | Subtitle or secondary title alongside a primary headline |\n| `{typography.card-title}` | 54px | Alfa Slab One | 400 | Card or column heading |\n| `{typography.section-num}` | 54px | Alfa Slab One | 400 | Section or item ordinal numeral |\n| `{typography.cta}` | 48px | Alfa Slab One | 400 | CTA button label |\n| `{typography.url}` | 46px | Alfa Slab One | 400 | URL or contact address |\n| `{typography.item-title}` | 38px | Alfa Slab One | 400 | List item or node heading |\n| `{typography.toc-entry}` | 36px | Alfa Slab One | 400 | Table of contents entry title |\n| `{typography.item-title-sm}` | 30px | Alfa Slab One | 400 | Dense list item heading |\n| `{typography.stamp}` | 28px | Alfa Slab One | 400 | Stamp or badge label |\n\n### Script Scale\n\n| Token | Size | Use |\n|---|---|---|\n| `{typography.script-lg}` | 96px | Prominent handwritten accent — transition word, emotional opener |\n| `{typography.script-md}` | 64px | Smaller handwritten annotation — subtitle callout, sub-label |\n\nBoth script tokens are always lowercase and always applied with a rotation between -2deg and -5deg. Never use Caveat Brush without rotation.\n\n### Body and Label Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.body-lg}` | 30px | Archivo Narrow | 500 | Stat annotation, primary body paragraph |\n| `{typography.body-md}` | 28px | Archivo Narrow | 500 | Column body, lede paragraph, compare list |\n| `{typography.body-sm}` | 26px | Archivo Narrow | 500 | Supporting body paragraphs |\n| `{typography.body-xs}` | 24px | Archivo Narrow | 400 | Dense list items, captions |\n| `{typography.label}` | 24px | DM Mono | 400 | Standard metadata label (0.18em tracking) |\n| `{typography.label-wide}` | 24px | DM Mono | 400 | Footline and ribbon text (0.22em tracking) |\n| `{typography.label-accent}` | 32px | DM Mono | 600 | Highlighted metadata (e.g. section count) |\n| `{typography.signoff}` | 26px | DM Mono | 400 | Footer sign-off block (0.20em tracking) |\n\n### Typography Principles\nAlfa Slab One is always uppercase — never use it in sentence case or lowercase. Line-height at display sizes is tight: 0.82–0.88 for large headlines, 1.04 only for multi-line body-adjacent text where line collision would occur. The 0.005em letter-spacing is nearly invisible but prevents glyph collision at 100px+ sizes.\n\nThe stacked text-shadow is the inline styling rule for display text: orange display type always casts `{colors.red}` as its first shadow. At sizes above 200px, add a second `{colors.red-deep}` layer at double the offset. At sizes below 100px, a single 3px–6px offset in `{colors.red}` is sufficient.\n\nDM Mono labels are always 24px regardless of context. The tracking varies by placement: 0.18em for topbar/footer, 0.22em for ribbon and footline, 0.16em for side labels in split panels. Never reduce tracking on DM Mono — at 24px without tracking, it reads as utilitarian rather than editorial.\n\nArchivo Narrow is always weight 400 or 500. Never use it at display sizes. It is a supporting voice, not a headline voice.\n\n## Layout\n\n### Canvas System\nEvery slide is 1920×1080px. The `deck-stage` custom element handles scaling. All content is absolutely positioned or uses CSS grid — no scrolling.\n\n### Gutter System\n- **Slide gutter** (90px left/right): The standard edge padding for most content sections.\n- **Content gutter** (120px left/right): Used for body content within slides that already have a structural header — provides extra breathing room for reading text.\n- **Topbar height** (90px): The fixed-height blue topbar band that sits at the absolute top of a slide.\n- **Frame inset** (48px): The distance from the slide edge to the decorative inset frame border used on blue-background slides.\n\n### Universal Chrome\nThe system does not enforce a universal topbar on every slide. Two chrome patterns exist:\n\n**Topbar pattern** — A full-width 90px blue bar anchored to the top (`position:absolute; top:0; left:0; right:0`). Contains DM Mono 24px label text at 0.18em tracking. Carries a 6px solid cream bottom border. Used on high-emphasis blue-background slides.\n\n**Section-divider pattern** — A 6px solid ink horizontal rule between a header block and the content area below. The header block uses 90px left/right padding; the content below uses 90px padding. No topbar — the rule is the dividing element.\n\nBoth patterns can coexist on a single slide or be used independently.\n\n## Depth and Elevation\n\n### Stacked Text-Shadow (Primary Technique)\nThe system's signature. Display text casts layered offset shadows in the same direction (bottom-right), creating a quasi-3D letterpress effect. Three tiers by element size:\n\n| Tier | Offset layer 1 | Offset layer 2 | Use |\n|---|---|---|---|\n| Small | `3px 3px 0 {colors.red}` | — | Items below 72px |\n| Medium | `5px–6px 5px–6px 0 {colors.red}` | — | 72px–140px display |\n| Large | `10px 10px 0 {colors.red}, 20px 20px 0 {colors.red-deep}` | | 140px–260px display |\n| Jumbo | `12px 12px 0 {colors.red}, 24px 24px 0 {colors.red-deep}` | | 260px+ stat figures |\n\nThe orange display text is the \"face\" layer; red is the \"body\"; red-deep is the \"foot.\" The illusion is of a letterform with physical thickness.\n\n### Box-Shadow (Secondary Technique)\nInteractive and decorative elements (stamps, avatars, CTA buttons, KPI cards) use the same offset logic in box-shadow form: `6px 6px 0 {colors.red}` or `8px 8px 0 {colors.red}`. This unifies the depth system: all elements in the deck cast shadows in the same direction at the same apparent light angle.\n\n### Grain Texture (Atmospheric Depth)\nEvery slide carries a `.grain::before` pseudo-element: two overlapping radial-gradient dot grids at 3px and 5px pitch, with `mix-blend-mode: multiply` and 50% opacity. This simulates screen-print halftone texture, giving the flat digital surfaces a physical, printed quality. It is not elevation but atmosphere — the entire deck reads as produced rather than rendered.\n\n### Flat Elements\nDM Mono labels, ink section rules, body text, and grid lines are completely flat. No shadows on structural dividers.\n\n## Shapes and Treatment\n\n### Border Radius Scale\n| Value | Use |\n|---|---|\n| 999px (pill) | Meta label pills in topbar/header areas |\n| 50% (circle) | Avatar elements, timeline milestone dots, circular stamp |\n| 4px | Diamond bullet pseudo-elements (rotated 45deg to form a diamond) |\n| 0px | All structural elements: columns, cards, topbars, frames, ribbons, KPI cards, stamps |\n\nThe system is almost entirely square. The only soft shapes are the pill (for metadata chips), the circle (for avatars, dots, the closing stamp), and the diamond bullet. The squareness of structural elements reinforces the printed/constructed aesthetic.\n\n### Border Weights\n- **6px solid `{colors.ink}`** — Primary structural borders: section dividers, column separators, topbar bottom edges, inset frames, KPI card borders, CTA button border.\n- **6px solid `{colors.cream}`** — Inverted structural borders on blue surfaces: inset frame, topbar divider in cream-on-blue mode.\n- **5px solid** — Secondary structural borders: quote stamp, compare list item treatment.\n- **4px solid** — Tertiary dividers: side labels in compare panels, lede left-border.\n- **3px solid `{colors.ink}`** — Fine structural lines: TOC row separators, column tags, stat source dividers, inner timeline lines.\n\n### Decorative Elements\n\n**Inset frame** — A 6px solid cream border at `inset: 48px` creates a second inner rectangle on blue-background slides. It reinforces the poster/placard aesthetic — the design within a design.\n\n**Orange ribbon** — A 60px bottom-anchored strip in `{colors.orange}` with 6px ink top border and repeating DM Mono text at 0.22em tracking. Functions as a marquee footer on data slides.\n\n**Diamond bullet** — List item marker using a `::before` pseudo-element: 24px × 24px, `background: {colors.red}`, `border-radius: 4px`, `transform: rotate(45deg)`. On blue-background lists, uses `{colors.orange}` instead. The shape sits 48px left of the text (positioned absolutely).\n\n**Circular stamp** — A 200px circle (`{components.circular-stamp}`) rotated -9deg with 6px orange border and an 8px red box-shadow. Functions as a seal — the physical-world approval mark on a bureaucratic document.\n\n**Rotated rectangular stamp** — A rectangular block rotated -3deg with 5px cream border and 6px red box-shadow. Contains Alfa Slab One 28px text at 0.04em tracking. Lighter rotation than the circular stamp — feels like an address label placed at a slight angle.\n\n**Script annotation** — Caveat Brush 64–96px, lowercase, rotated 2–5 degrees. Always appears adjacent to an Alfa Slab One headline it qualifies or interrupts — never alone.\n\n**Column ordinal** — 180px Alfa Slab One orange numeral with a 5px red text-shadow, followed by a 3px ink top-border DM Mono tag label below it. This pairing (large orange numeral + small mono tag) is the system's standard way of labelling columns or sections.\n\n**Underline rule** — A 14px tall solid ink rectangle, width 30% of its container, used as a full-stop after a manifesto headline. It is heavier than a hairline rule — closer to a redaction bar.\n\n**Grain overlay** — The `.grain` class adds `::before` pseudo-element texture to every slide. It cannot be removed from a slide in this system — it is structural to the aesthetic.\n\n## Do's and Don'ts\n\n### Do\n- Apply the grain overlay (`.grain::before`) to every slide. It is not decorative — it is the surface that everything else is printed on.\n- Use the stacked text-shadow on all orange and cream display text. Shadowless Alfa Slab One reads flat and loses the letterpress character.\n- Scale shadow offset proportionally to font size: small offset for small type, jumbo offset for jumbo type.\n- Keep red exclusively as a shadow color. The moment red appears as a text color or background fill, the depth system collapses.\n- Use Caveat Brush only at large sizes (64px+), always lowercase, always slightly rotated. Never for body text.\n- Keep DM Mono labels at exactly 24px with at least 0.16em letter-spacing. The monospace face at body size with normal tracking reads as code, not editorial.\n- Use the 6px border weight for major structural divisions. Thinner reads as SaaS; thicker looks like a design mistake.\n- When a slide uses a blue background, use the inset frame — it distinguishes blue-background slides as \"framed\" rather than merely filled.\n- Apply `{colors.orange}` as the numerals, values, and accent text on blue surfaces. Blue-on-orange or cream-on-blue are the only other permitted text combinations on dark surfaces.\n\n### Don't\n- Don't use red as a background or primary text color. It is a shadow material, not a surface material.\n- Don't use Caveat Brush at body sizes or without rotation. Flat, small handwriting reads as untidy, not intentional.\n- Don't apply Alfa Slab One in mixed case. The uppercase lock is essential to the slab's authority.\n- Don't soften the border weights. 1px or 2px borders on structural elements break the printed-matter aesthetic.\n- Don't round card or container corners. The inset frame and KPI cards are strictly square.\n- Don't use Archivo Narrow for headlines. It is a body and lede face only — it lacks the visual weight for display use.\n- Don't use blue-deep or red-deep as surface colors. They are shadow-only values — their role is depth, not fill.\n- Don't omit the diamond bullet rotation on list items. A 45deg-rotated square is a diamond; an upright square is a box — the shape signals hand-crafted, not generic.\n- Don't vary the DM Mono font size. 24px is the single fixed size for all monospace label text — increasing it for emphasis breaks the system; use `{typography.label-accent}` (32px, weight 600) as the sole exception.\n\n## Responsive Behavior\n\nThis template is designed exclusively for 1920×1080 presentation display. The `deck-stage` custom element handles viewport scaling via CSS transforms — the 1920×1080 canvas scales proportionally to any screen size without layout changes.\n\nSlides advance via keyboard or presentation clicker through `deck-stage.js`. No hover states, no interactive form elements, no responsive breakpoints.\n\nFor print and PDF export: at 96dpi, the 1920×1080 canvas maps to a 20×11.25 inch frame. The grain overlay uses `mix-blend-mode: multiply` — in PDF export, blend modes may flatten; test print output and consider disabling the grain for printed formats.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / title / quote (Alfa Slab One UPPERCASE) | Alfa Slab One | Noto Serif SC (思源宋体) | 900 |\n| Script interrupt (Caveat Brush lowercase rotated) | Caveat Brush | — (no good equivalent; see Aesthetic Notes) | — |\n| Body (Archivo Narrow 500) | Archivo Narrow | Noto Sans SC (思源黑体) | 500 |\n| Label / mono (DM Mono UPPERCASE tracked) | DM Mono | Noto Sans SC | 400 (do not force monospace on CJK) |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. Alfa Slab tokens become `\"Alfa Slab One, Noto Serif SC, serif\"`; Archivo Narrow tokens become `\"Archivo Narrow, Noto Sans SC, sans-serif\"`; DM Mono tokens become `\"DM Mono, Noto Sans SC, monospace\"`. Latin glyphs render in their original face; CJK falls through to the SC fallback automatically.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Alfa+Slab+One&family=Caveat+Brush&family=Archivo+Narrow:wght@400;500;600;700&family=DM+Mono:wght@300;400;500&family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPeople's Platform is a WPA-poster system built on three load-bearing typefaces, and **none of the three has a clean Chinese transfer**.\n\n**Alfa Slab One** is a compressed slab serif at extreme sizes (up to 540px) in uppercase. There is no Chinese slab serif of equivalent weight and authority available on CDN. **Noto Serif SC at weight 900** is the closest match — it carries the slab-like heaviness and the structural authority — but it reads as more \"literary monument\" than \"protest placard.\" Accept this register shift: Chinese versions of this system feel closer to a heritage-era public-notice board (think 大字报 or museum signage) than to a 1930s WPA poster. The stacked red text-shadow still applies and still carries the system's letterpress depth signature.\n\n**Caveat Brush** is the \"human interrupt\" voice — lowercase, rotated, emotionally warm. **This does not transfer to Chinese.** Chinese brush calligraphy (Ma Shan Zheng / 马善政) carries cultural and traditional weight — it reads as ceremonial, formal, even bureaucratic, NOT the casual personal voice of Latin Caveat. **Recommended approach: leave the brush moment out entirely on pure-CJK slides.** A second option: use a short Latin word in Caveat Brush as the interrupt even within Chinese content (e.g., a script `yes!` annotation beside a Chinese headline) — this preserves the casual interrupt energy and signals \"voice break\" without invoking Chinese calligraphic tradition.\n\n**DM Mono** uppercase tracked labels do not transfer to CJK. Set Chinese metadata in **Noto Sans SC 400** with letter-spacing reset to 0 and no uppercase. Pure-Latin tags (URLs, dates, edition numbers) keep DM Mono.\n\n**Archivo Narrow** is condensed at weight 500. **Noto Sans SC has no condensed variant.** Use Noto Sans SC 500 at the original Archivo size and accept that Chinese body type sits slightly wider than Latin body type. The single-color paper canvas and the grain overlay absorb the width difference.\n\nThe stacked text-shadow (orange → red → red-deep) is the system's most recognizable trait. **It transfers perfectly to Chinese.** Apply it to every Chinese display headline in orange and the letterpress depth survives the script switch. The blue-and-orange-and-red palette is also fully script-agnostic.\n\nThe diamond bullet marker, the rotated rubber stamp, the inset cream frame, the 6px ink borders — all work unchanged in Chinese.\n\n### Known CJK Gap\n\n**Caveat Brush has no acceptable Chinese equivalent.** The \"human interrupt\" voice is structurally absent in a pure-CJK People's Platform deck. The two workarounds (drop the interrupt entirely; use Latin-in-Chinese for the script moments) are both visible aesthetic compromises — the populist-poster system loses one of its three voices when forced into pure Chinese. Mixed-content decks (English-led with Chinese accents, or vice versa) are the strongest fit for this template.\n\n## Iteration Guide\n\n1. The stacked shadow is a hard invariant — any new display element in orange or cream must carry it. Determine the offset by dividing the font size by approximately 20 to get the first shadow distance, double it for the second.\n2. Any new slide with a blue background gets an inset frame (6px cream, `inset: 48px`) and, if it has a header bar, that bar uses the topbar pattern with a 6px cream bottom border.\n3. New columns or side-by-side panels follow the 6px ink separator convention. Asymmetric layouts (e.g. 60/40 split) are fine as long as the separator border remains 6px.\n4. New KPI or data cards use the `{components.kpi-card}` pattern: 5px ink border, paper background, optional alt variant in blue. The number inside uses Alfa Slab One with the standard text-shadow.\n5. New list items always use the diamond bullet (24px × 24px, 4px radius, rotate 45deg). Use red for ink-background items, orange for blue-background items.\n6. If a new decorative stamp or badge is needed, use Alfa Slab One with `letter-spacing: 0.04em`, a box-shadow of `6px 6px 0 {colors.red}`, and a slight rotation (–3 to –9deg). Circular stamps get 50% border-radius; rectangular ones stay square.\n7. The grain overlay is a CSS pseudo-element on the `section` element — it must be present on every new slide via the `.grain` class.\n8. Script (Caveat Brush) text is an interrupt, not a default. Use it once per slide maximum, and only at 64px+.\n\n## Known Gaps\n\n- `deck-stage.js` is an external script dependency not documented here. Slide navigation and scaling are handled by it entirely.\n- The orange ribbon on data slides is implemented with static repeated text — there is no JavaScript marquee animation. At 1920px width, the text wraps naturally; for longer strings, manually duplicate the text.\n- The grain overlay uses `mix-blend-mode: multiply`. This requires a semi-transparent background or a parent with a visible fill to produce the texture effect — on pure white or pure black surfaces the effect may be invisible.\n- Speaker notes are embedded as a `<script type=\"application/json\">` block in the template — this data is presentational, not part of the design system, and is not captured in these tokens.\n- Archivo Narrow is loaded as a web font. It has broad system fallback (`system-ui, sans-serif`) but the condensed width of the system font stack fallback will differ significantly from Archivo Narrow and may break layouts at tight grid configurations.\n- The `text-wrap: pretty` property on quote text is a modern CSS feature with limited browser support — it may not apply in older export environments.\n","frontmatter":{"version":"alpha","name":"People's Platform","description":"A WPA-poster-meets-political-campaign presentation system built on three typefaces and a five-color palette that reduces to three functional roles. Alfa Slab One — a compressed slab serif — does all the heavy lifting at extreme sizes in pure uppercase. Caveat Brush drops in as a handwritten human interrupt: lowercase, slightly rotated, emotionally warm. DM Mono carries all metadata at tight uppercase tracking. The palette is electric cobalt blue, amber orange, and hot red — with red functioning exclusively as a shadow/depth color, never as a surface fill. Every slide gets a paper grain overlay that makes the whole deck feel screen-printed. The aesthetic is loud, confident, and populist — the kind of visual language that belongs on a protest placard, a union newsletter, or a campaign bus.","colors":{"blue":"#2C2CDC","blue-deep":"#1B1BB0","orange":"#F2A03A","orange-deep":"#E89321","red":"#E83A2A","red-deep":"#B7281C","cream":"#F4E9D6","paper":"#F5F2EA","ink":"#0E0E14"},"typography":{"display-jumbo":{"fontFamily":"Alfa Slab One, serif","fontSize":"540px","fontWeight":400,"lineHeight":0.82,"letterSpacing":"-0.02em","textTransform":"uppercase"},"display-hero":{"fontFamily":"Alfa Slab One, serif","fontSize":"260px","fontWeight":400,"lineHeight":0.86,"letterSpacing":"0.005em","textTransform":"uppercase"},"display-title":{"fontFamily":"Alfa Slab One, serif","fontSize":"240px","fontWeight":400,"lineHeight":0.86,"letterSpacing":"0.005em","textTransform":"uppercase"},"display-xl":{"fontFamily":"Alfa Slab One, serif","fontSize":"180px","fontWeight":400,"lineHeight":0.88,"letterSpacing":"0.005em","textTransform":"uppercase"},"display-lg":{"fontFamily":"Alfa Slab One, serif","fontSize":"140px","fontWeight":400,"lineHeight":0.88,"letterSpacing":"0.005em","textTransform":"uppercase"},"display-md":{"fontFamily":"Alfa Slab One, serif","fontSize":"120px","fontWeight":400,"lineHeight":0.88,"letterSpacing":"0.005em","textTransform":"uppercase"},"display-sm":{"fontFamily":"Alfa Slab One, serif","fontSize":"108px","fontWeight":400,"lineHeight":1.04,"letterSpacing":"0.005em","textTransform":"uppercase"},"stat-unit":{"fontFamily":"Alfa Slab One, serif","fontSize":"130px","fontWeight":400,"lineHeight":1,"letterSpacing":0,"textTransform":"uppercase"},"section-num":{"fontFamily":"Alfa Slab One, serif","fontSize":"54px","fontWeight":400,"lineHeight":1,"textTransform":"uppercase"},"card-title":{"fontFamily":"Alfa Slab One, serif","fontSize":"54px","fontWeight":400,"lineHeight":1,"textTransform":"uppercase"},"kpi-value":{"fontFamily":"Alfa Slab One, serif","fontSize":"88px","fontWeight":400,"lineHeight":0.9,"textTransform":"uppercase"},"quote-mark":{"fontFamily":"Alfa Slab One, serif","fontSize":"300px","fontWeight":400,"lineHeight":0.7,"textTransform":"uppercase"},"quote-body":{"fontFamily":"Alfa Slab One, serif","fontSize":"78px","fontWeight":400,"lineHeight":1.08,"textTransform":"uppercase"},"item-title":{"fontFamily":"Alfa Slab One, serif","fontSize":"38px","fontWeight":400,"lineHeight":1,"textTransform":"uppercase"},"item-title-sm":{"fontFamily":"Alfa Slab One, serif","fontSize":"30px","fontWeight":400,"lineHeight":1,"textTransform":"uppercase"},"toc-entry":{"fontFamily":"Alfa Slab One, serif","fontSize":"36px","fontWeight":400,"lineHeight":1,"textTransform":"uppercase"},"subtitle":{"fontFamily":"Alfa Slab One, serif","fontSize":"72px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.01em","textTransform":"uppercase"},"cta":{"fontFamily":"Alfa Slab One, serif","fontSize":"48px","fontWeight":400,"letterSpacing":"0.02em","textTransform":"uppercase"},"stamp":{"fontFamily":"Alfa Slab One, serif","fontSize":"28px","fontWeight":400,"letterSpacing":"0.04em","textTransform":"uppercase"},"url":{"fontFamily":"Alfa Slab One, serif","fontSize":"46px","fontWeight":400,"letterSpacing":"0.02em","textTransform":"uppercase"},"script-lg":{"fontFamily":"Caveat Brush, cursive","fontSize":"96px","fontWeight":400,"textTransform":"lowercase"},"script-md":{"fontFamily":"Caveat Brush, cursive","fontSize":"64px","fontWeight":400,"textTransform":"lowercase"},"body-lg":{"fontFamily":"Archivo Narrow, sans-serif","fontSize":"30px","fontWeight":500,"lineHeight":1.4,"letterSpacing":0},"body-md":{"fontFamily":"Archivo Narrow, sans-serif","fontSize":"28px","fontWeight":500,"lineHeight":1.35,"letterSpacing":0},"body-sm":{"fontFamily":"Archivo Narrow, sans-serif","fontSize":"26px","fontWeight":500,"lineHeight":1.4,"letterSpacing":0},"body-xs":{"fontFamily":"Archivo Narrow, sans-serif","fontSize":"24px","fontWeight":400,"lineHeight":1.4,"letterSpacing":0},"label":{"fontFamily":"DM Mono, monospace","fontSize":"24px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.18em","textTransform":"uppercase"},"label-wide":{"fontFamily":"DM Mono, monospace","fontSize":"24px","fontWeight":400,"lineHeight":1,"letterSpacing":"0.22em","textTransform":"uppercase"},"label-accent":{"fontFamily":"DM Mono, monospace","fontSize":"32px","fontWeight":600,"lineHeight":1,"letterSpacing":"0.16em","textTransform":"uppercase"},"signoff":{"fontFamily":"DM Mono, monospace","fontSize":"26px","fontWeight":400,"lineHeight":1.4,"letterSpacing":"0.20em","textTransform":"uppercase"}},"spacing":{"slide-gutter":"90px","content-gutter":"120px","topbar-height":"90px","section-border":"6px","inner-border":"3px","grid-gap-lg":"90px","grid-gap-md":"30px","frame-inset":"48px"},"canvas":{"width":"1920px","height":"1080px"},"components":{"inset-frame":{"border":"6px solid {colors.cream}","position":"absolute","inset":"48px"},"topbar":{"position":"absolute","top":0,"left":0,"right":0,"height":"90px","background":"{colors.blue}","color":"{colors.cream}","padding":"0 90px","fontFamily":"DM Mono, monospace","fontSize":"24px","letterSpacing":"0.18em","borderBottom":"6px solid {colors.cream}"},"section-divider":{"borderBottom":"6px solid {colors.ink}","height":"6px"},"toc-row":{"display":"grid","gridTemplateColumns":"90px 1fr 100px","gap":"24px","padding":"20px 0","borderBottom":"3px solid {colors.ink}"},"toc-num":{"fontFamily":"Alfa Slab One, serif","fontSize":"54px","color":"{colors.orange}","textShadow":"3px 3px 0 {colors.red}"},"pillar-col":{"padding":"60px 50px","borderRight":"6px solid {colors.ink}","background":"{colors.paper}"},"pillar-col-alt":{"background":"{colors.blue}","color":"{colors.cream}"},"pillar-tag":{"fontFamily":"DM Mono, monospace","fontSize":"24px","letterSpacing":"0.18em","borderTop":"3px solid {colors.ink}","paddingTop":"18px","marginTop":"14px","alignSelf":"flex-start"},"kpi-card":{"border":"5px solid {colors.ink}","padding":"28px 30px","background":"{colors.paper}"},"kpi-card-alt":{"background":"{colors.blue}","color":"{colors.cream}"},"timeline-dot":{"width":"60px","height":"60px","borderRadius":"50%","background":"{colors.orange}","border":"6px solid {colors.ink}","boxShadow":"6px 6px 0 {colors.red}"},"timeline-dot-alt":{"background":"{colors.blue}"},"timeline-track":{"height":"14px","background":"{colors.ink}"},"compare-side-left":{"background":"{colors.paper}","borderRight":"6px solid {colors.ink}","padding":"60px 70px"},"compare-side-right":{"background":"{colors.blue}","color":"{colors.cream}","padding":"60px 70px"},"compare-label":{"fontFamily":"DM Mono, monospace","fontSize":"24px","letterSpacing":"0.22em","paddingBottom":"14px","borderBottom":"4px solid {colors.ink}","alignSelf":"flex-start"},"diamond-bullet":{"width":"24px","height":"24px","background":"{colors.red}","borderRadius":"4px","transform":"rotate(45deg)"},"diamond-bullet-alt":{"background":"{colors.orange}"},"avatar":{"width":"120px","height":"120px","borderRadius":"50%","background":"{colors.blue}","border":"6px solid {colors.blue}","boxShadow":"6px 6px 0 {colors.red}"},"quote-stamp":{"background":"{colors.blue}","color":"{colors.orange}","padding":"18px 32px","transform":"rotate(-3deg)","border":"5px solid {colors.cream}","fontFamily":"Alfa Slab One, serif","fontSize":"28px","letterSpacing":"0.04em","boxShadow":"6px 6px 0 {colors.red}","textTransform":"uppercase"},"circular-stamp":{"width":"200px","height":"200px","borderRadius":"50%","background":"{colors.cream}","color":"{colors.blue}","border":"6px solid {colors.orange}","transform":"rotate(-9deg)","boxShadow":"8px 8px 0 {colors.red}"},"meta-pill":{"border":"3px solid {colors.cream}","padding":"8px 20px","borderRadius":"999px"},"ribbon":{"position":"absolute","bottom":0,"left":0,"right":0,"height":"60px","background":"{colors.orange}","color":"{colors.blue}","borderTop":"6px solid {colors.ink}","fontFamily":"DM Mono, monospace","fontSize":"24px","letterSpacing":"0.22em","fontWeight":600},"lede-block":{"fontFamily":"Archivo Narrow, sans-serif","fontWeight":500,"fontSize":"28px","lineHeight":1.35,"borderLeft":"4px solid {colors.ink}","paddingLeft":"50px"},"lede-block-top":{"borderTop":"6px solid {colors.ink}","paddingTop":"24px"},"underline-rule":{"height":"14px","background":"{colors.ink}","width":"30%","marginTop":"60px"},"kicker":{"fontFamily":"DM Mono, monospace","letterSpacing":"0.22em","fontSize":"26px","color":"{colors.red}","marginBottom":"48px"},"grain-overlay":{"position":"absolute","inset":0,"pointerEvents":"none","backgroundImage":"radial-gradient(rgba(0,0,0,.06) 1px, transparent 1px), radial-gradient(rgba(255,255,255,.05) 1px, transparent 1px)","backgroundSize":"3px 3px, 5px 5px","backgroundPosition":"0 0, 1px 2px","mixBlendMode":"multiply","opacity":0.5},"orange-dot":{"width":"10px","height":"10px","borderRadius":"50%","background":"{colors.orange}"}}},"isInternal":false,"tokens":10088,"sizeBytes":38908},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/peoples-platform/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/peoples-platform/preview.md","title":"Peoples-platform Skill","category":"anthropic-skill","format":"markdown","content":"# People's Platform (Block & Bold) Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/peoples-platform/design.md`\n- Preview card: `bold-template-pack/templates/peoples-platform/preview.md`\n\n## Selection Metadata\n\n- Slug: `peoples-platform`\n- Tagline: Activist poster energy: blue, orange, red on cream, with Alfa Slab + Caveat Brush.\n- Mood: activist, loud, graphic, honest\n- Tone: punchy, direct, expressive, warm-bold\n- Formality: medium-low\n- Density: medium-high\n- Scheme: light\n- Best for: Anything that should feel honest, loud, and graphic: cultural commentary, manifestos, civic and community decks, design talks, campaign pitches. Excellent for founder-vision moments, mission statements, or any deck — including across industries — that wants protest-poster energy instead of corporate polish.\n- Avoid for: Contexts where institutional restraint is the actual goal — the saturated political-poster palette commits hard to expressive energy.\n\n## Visual Snapshot\n\nA WPA-poster-meets-political-campaign presentation system built on three typefaces and a five-color palette that reduces to three functional roles. Alfa Slab One — a compressed slab serif — does all the heavy lifting at extreme sizes in pure uppercase. Caveat Brush drops in as a handwritten human interrupt: lowercase, slightly rotated, emotionally warm. DM Mono carries all metadata at tight uppercase tracking. The palette is electric cobalt blue, amber orange, and hot red — with red functioning exclusively as a shadow/depth color, never as a surface fill. Every slide gets a paper grain overlay that makes the whole deck feel screen-printed. The aesthetic is loud, confident, and populist — the kind of visual language that belongs on a protest placard, a union newsletter, or a campaign bus.\n\nPeople's Platform is a WPA-poster-meets-political-campaign slide system — the visual language of conviction, the graphic register of public address. The canvas is warm paper ({colors.paper} — #F5F2EA), a hair warmer than white, and every slide gets a grain texture applied via a CSS pseudo-element that makes the whole deck feel screen-printed rather than rendered.\n\n## Preview Ingredients\n\n- Palette: blue #2C2CDC; blue-deep #1B1BB0; orange #F2A03A; orange-deep #E89321; red #E83A2A; red-deep #B7281C; cream #F4E9D6; paper #F5F2EA\n- Typography: Alfa Slab One; Caveat Brush; Archivo Narrow; DM Mono\n- Signature move: Paper canvas ({colors.paper} — #F5F2EA) with grain overlay via CSS pseudo-element on every slide.\n- Signature move: Stacked double text-shadow: Npx Npx 0 {colors.red}, 2Npx 2Npx 0 {colors.red-deep}. Shadow size scales with font size.\n- Signature move: Alfa Slab One for all display and structural type — uppercase, line-height 0.82–1.04, letter-spacing 0.005em.\n- Signature move: Red ({colors.red}) functions exclusively as a shadow color — never a surface background.\n- Signature move: Heavy 6px ink borders for all major structural divisions (topbars, section headers, column separators, inset frames).\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1063,"sizeBytes":4653},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pin-and-paper/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pin-and-paper/design.md","title":"Pin & Paper","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Pin & Paper\ndescription: A field-notebook editorial system rendered as yellow legal-pad paper with deep cobalt-blue ink. Every slide carries a fractalnoise paper-grain overlay, hand-drawn safety-pin SVG illustrations that \"pin\" cards to the page, and a hand-script Caveat face for personal annotations. Space Grotesk at heavy weights carries the printed headlines; DM Mono handles archival labels. The aesthetic borrows from analog field reports, vintage public-notice boards, and the diary pages of scientific notebooks — closer to a lab journal pinned to a corkboard than a polished deck.\n\ncolors:\n  paper: \"#EFE56A\"\n  paper-2: \"#F5ECA0\"\n  paper-3: \"#E8D85A\"\n  paper-extra: \"#FBE6A4\"\n  cream: \"#F8F1D6\"\n  kraft: \"#C9A66B\"\n  ink: \"#1F3A8A\"\n  ink-soft: \"#2D4FB8\"\n  ink-line: \"#3457C4\"\n  ink-deep: \"#0E1430\"\n  red: \"#C2342B\"\n  olive: \"#6B7A2E\"\n  orange: \"#D8702A\"\n\ncolor-aliases:\n  c-bg: paper\n  c-text: ink\n  c-card: cream\n  c-stamp: red\n\ntypography:\n  display-mega:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 196px\n    fontWeight: 700\n    lineHeight: 1.08\n    letterSpacing: -0.04em\n  display-section:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 168px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.04em\n  display-stat:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 168px\n    fontWeight: 700\n    lineHeight: 0.85\n    letterSpacing: -0.04em\n  h1-cta:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 130px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.035em\n  h1-chart:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 110px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.035em\n  h2:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 96px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.03em\n  h2-md:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 84px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.03em\n  h2-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 50px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.02em\n  quote-text:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 50px\n    fontWeight: 500\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  card-row:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 44px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  card-h3:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 38px\n    fontWeight: 700\n    lineHeight: 1.02\n    letterSpacing: -0.02em\n  card-h3-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 28px\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.015em\n  body:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 22px\n    fontWeight: 400\n    lineHeight: 1.45\n  body-md:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 21px\n    fontWeight: 400\n    lineHeight: 1.35\n  body-sm:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 19px\n    fontWeight: 400\n    lineHeight: 1.45\n  body-list:\n    fontFamily: \"Space Grotesk, Helvetica Neue, Arial, sans-serif\"\n    fontSize: 18px\n    fontWeight: 400\n    lineHeight: 1.4\n  scribble-mega:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 360px\n    fontWeight: 700\n    lineHeight: 0.8\n  scribble-lg:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 70px\n    fontWeight: 700\n    lineHeight: 0.9\n  scribble-md:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 60px\n    fontWeight: 700\n    lineHeight: 0.9\n  scribble-sm:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 38px\n    fontWeight: 600\n    lineHeight: 1.05\n  scribble-xs:\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 32px\n    fontWeight: 600\n    lineHeight: 1.05\n  label-top:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 18px\n    fontWeight: 500\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  label-meta:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 16px\n    fontWeight: 500\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-footer:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 15px\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  stamp:\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 16px\n    fontWeight: 500\n    letterSpacing: 0.18em\n    textTransform: uppercase\n\nspacing:\n  pad-edge: 64px\n  pad-top: 110px\n  pad-bottom: 90px\n  card-pad-md: \"28px 28px 24px\"\n  card-pad-lg: \"32px 22px 22px\"\n  card-pad-xl: \"36px 28px 28px\"\n  card-pad-quote: \"60px 80px\"\n  grid-gap-sm: 22px\n  grid-gap-md: 28px\n  grid-gap-lg: 32px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  paper-surface:\n    background: \"radial-gradient(120% 90% at 20% 10%, rgba(255,255,255,.18), transparent 60%), radial-gradient(140% 100% at 80% 95%, rgba(0,0,0,.05), transparent 55%), {colors.paper}\"\n    description: \"Default slide surface — yellow paper with a soft upper-left highlight gradient and a soft lower-right shadow gradient layered over the base paper color.\"\n  paper-grain-overlay:\n    selector: \".slide::before\"\n    background: \"fractalNoise SVG via data URI, baseFrequency=1.4, octaves=2\"\n    opacity: 0.35\n    mixBlendMode: multiply\n    description: \"Non-optional fractal-noise paper grain overlay on every slide. Lives on the ::before pseudo-element; opacity 0.35, multiply blend. On ink slides, opacity drops to 0.25 with screen blend.\"\n  pinned-card:\n    background: \"{colors.cream}\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: 4px\n    boxShadow: \"5px 6px 0 0 {colors.ink}\"\n    padding: \"{spacing.card-pad-md}\"\n    description: \"Cream paper card with a 1.5px ink border, 4px micro-radius, and a hard 5px-6px ink-blue offset shadow. The system's universal card pattern — every card looks like a piece of paper pinned to the surface.\"\n  pinned-card-alt:\n    background: \"{colors.paper-2}\"\n    description: \"Card variant using the lighter paper-2 tone. Used to break up adjacent same-tone cards.\"\n  pinned-card-alt2:\n    background: \"{colors.paper-extra}\"\n    transform: \"rotate(0.6deg)\"\n    description: \"Card variant with the deepest paper tone and a slight rotation (0.6 to 1.5 degrees) — gives the impression of being pinned slightly askew.\"\n  pin-illustration:\n    width: \"varies (110–640px)\"\n    color: \"currentColor\"\n    transform: \"rotate(-14deg to +20deg)\"\n    description: \"Hand-drawn safety-pin SVG illustration in ink-blue or paper (when on ink surface). Multiple variants: closed pin (#pin), open pin (#pin-open). Always rotated slightly off-axis. Acts as both decoration and the visual signal that a card is 'pinned' to the page.\"\n  scribble:\n    fontFamily: \"Caveat, cursive\"\n    color: \"{colors.ink}\"\n    lineHeight: 1.05\n    description: \"Caveat hand-script face used for handwritten notes, marginalia, and 'me' voice annotations. May be rotated slightly (-3 to -1.5 degrees) and underlined via 2px solid ink for emphasis.\"\n  stamp:\n    border: \"3px solid {colors.red}\"\n    color: \"{colors.red}\"\n    padding: \"6px 16px\"\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.18em\n    textTransform: uppercase\n    transform: \"rotate(-4deg)\"\n    description: \"Cinnabar-red rubber stamp — 3px solid red border, red mono text, rotated -4 degrees. Used for status marks like CONFIDENTIAL or RECEIVED.\"\n  top-chrome:\n    position: \"absolute; top: 44px; left: 64px; right: 64px\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 18px\n    fontWeight: 500\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    description: \"Top metadata band — brand lockup on left (with inline #mark SVG glyph), meta tags on right. Mono uppercase, line-height 1.\"\n  footer-chrome:\n    position: \"absolute; left: 64px; right: 64px; bottom: 36px\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: 15px\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    opacity: 0.65\n    description: \"Bottom metadata band — typically left-source + right-page-position pair at 65% opacity.\"\n  pin-glyph-closed:\n    svgId: \"#pin\"\n    viewBox: \"0 0 360 110\"\n    description: \"Closed safety-pin SVG glyph — coiled spring on the right, shaft sweeping left, oval clasp cap on the left.\"\n  pin-glyph-open:\n    svgId: \"#pin-open\"\n    viewBox: \"0 0 360 130\"\n    description: \"Open safety-pin SVG glyph — clasp lifted, sharp point exposed pointing left.\"\n  mark-glyph:\n    svgId: \"#mark\"\n    viewBox: \"0 0 32 16\"\n    description: \"Small inline mark glyph for the top-chrome brand lockup — circle on the right, arrow shaft pointing left.\"\n  table-cell:\n    padding: \"18px 22px\"\n    borderBottom: \"1.5px solid rgba(31,58,138,.5)\"\n    borderRight: \"1.5px solid rgba(31,58,138,.5)\"\n    fontSize: 21px\n    lineHeight: 1.35\n    description: \"Comparison table cell with semi-transparent ink-blue dividers. Sits inside the same cream + ink-border + offset-shadow card pattern.\"\n  pill-yes:\n    background: \"{colors.ink}\"\n    color: \"{colors.paper}\"\n    border: \"1.5px solid {colors.ink}\"\n    borderRadius: 999px\n    padding: \"4px 14px\"\n    fontFamily: \"Caveat, cursive\"\n    fontSize: 28px\n    fontWeight: 600\n    description: \"Affirmative pill — solid ink fill with paper text, rounded 999px, Caveat script face. Unusual treatment: handwritten letterforms inside a UI pill shape.\"\n  pill-no:\n    background: transparent\n    color: \"{colors.red}\"\n    border: \"1.5px solid {colors.red}\"\n    fontFamily: \"DM Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    description: \"Negative pill — red mono uppercase text in a red-bordered transparent pill. The only place red appears in regular use (outside the stamp component).\"\n  pill-part:\n    background: \"{colors.paper-2}\"\n    color: \"{colors.ink}\"\n    fontFamily: \"Caveat, cursive\"\n    description: \"Partial-state pill — light paper fill with Caveat script ink text.\"\n  number-script:\n    fontFamily: \"Caveat, cursive\"\n    fontWeight: 700\n    fontSize: \"60–70px\"\n    color: \"{colors.ink}\"\n    description: \"Hand-script numeral used as step numbers in process diagrams and ordered CTA steps. The script face makes ordering feel hand-counted, not algorithmic.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPin & Paper is a **field-notebook editorial system** built on a single material premise: every slide is yellow legal-pad paper. The paper is rendered through a base color (`{colors.paper}` — saturated cadmium yellow), two soft radial-gradient highlights (upper-left light, lower-right shadow), and a non-optional fractal-noise grain overlay on a `::before` pseudo-element with multiply blend. This stack creates a surface that reads as physical paper under raking light. Without the grain, the system collapses into flat cartoon-yellow; the texture is foundational, not decorative.\n\nThe typeface stack is a deliberate three-voice editorial pairing. **Space Grotesk** at weight 600–700 carries every printed headline and display moment — its tight geometric character at heavy weights reads as a poster or notice-board printout. **Caveat** (a hand-script face) carries every handwritten moment: marginalia, \"me\" voice annotations, step numerals, pill labels, oversized script ordinals. Caveat is the system's personal-voice mechanism — wherever script appears, the tone shifts from \"official notice\" to \"handwritten note in the margin.\" **DM Mono** at weight 500 carries every archival metadata tag: top-chrome brand lockup, footer meta, source attribution, axis labels. The three voices — print headline, handwritten note, archival catalog tag — are non-overlapping, and the system's editorial rhythm depends on them staying in their lanes.\n\nThe palette is anchored to a yellow-and-blue complementary pair. **Paper yellow** (`{colors.paper}` and its three close variants) is every surface. **Ink blue** (`{colors.ink}` — a deep cobalt #1F3A8A) is every text moment, every border, every divider, every pin illustration. **Cream** (`{colors.cream}`) is the card background — a calmer off-white-ivory tone that lets cards visually recede from the loud yellow page. **Cinnabar red** (`{colors.red}` — #C2342B) is used in two specific roles only: the rotated rubber-stamp component and the negative-state pill. Red is never used as text, fill, or border outside these two roles. Tertiary colors (olive, orange, kraft) exist in the token list but are not actively deployed in the source.\n\nDepth is created through a single signature mechanism: **the hard offset shadow**. Every card carries a `5px 6px 0 0 {colors.ink}` (or `4px 5px 0 0`, or `8px 9px 0 0` for the largest quote panel) — a solid ink-blue rectangle offset down and to the right with zero blur. This shadow plus the 4px micro-radius corner plus the 1.5px ink border defines the universal card pattern. Cards look pinned and slightly lifted from the page; the hard offset is the system's only depth language.\n\n**Density philosophy: medium-dense, populated.** Pin & Paper reads as authoritative when its cards are pinned across the page in a clear arrangement — typically 3 to 6 cards per slide, each carrying a heading, a body block, and often a handwritten marginal annotation. A slide with one centered headline and otherwise empty space reads as broken — the system was designed as a populated field-notebook page, and a notebook page that's mostly blank reads as incomplete. Cards should be filled; pins should appear; the handwritten layer should add a marginal note in at least half the slides. The exception is the cover and section-divider slides, which are sparser by convention but compensate with oversized display type (196px) and large pin illustrations.\n\n**Key Characteristics:**\n- Yellow paper background (`{components.paper-surface}`) with two layered radial gradients and a non-optional fractal-noise grain overlay (`{components.paper-grain-overlay}`) on every slide.\n- Deep cobalt-blue ink (`{colors.ink}`) as the universal text, border, divider, and pin-illustration color.\n- Cream card surfaces (`{colors.cream}`) with 1.5px ink borders, 4px micro-radius, and **a hard ink-blue offset shadow** (5px–6px, zero blur).\n- Hand-drawn safety-pin SVG illustrations (`{components.pin-illustration}`) — closed and open variants — pinned to cards at slight rotation angles.\n- Three-voice typography: Space Grotesk for print headlines, Caveat hand-script for personal voice, DM Mono for archival labels.\n- A signature cinnabar-red rotated rubber stamp (`{components.stamp}`) for status marks (CONFIDENTIAL, RECEIVED, etc.).\n- 4px micro-radius on every card; pills go full 999px.\n- Slight panel rotation (0.6 to 1.5 degrees) on alternating cards for the \"pinned-askew\" effect.\n\n## Colors\n\n### Palette\n\n- **Paper Yellow** (`{colors.paper}` — #EFE56A): The dominant surface color. Saturated cadmium yellow. Combined with the layered radial gradients and grain overlay, this is what makes the slide read as physical paper.\n- **Paper Light** (`{colors.paper-2}` — #F5ECA0): Lighter, less saturated yellow. Used as an alternate card fill to break adjacent same-tone cards.\n- **Paper Deep** (`{colors.paper-3}` — #E8D85A): Deeper, more saturated yellow. Used on the `.deep` slide variant for higher-contrast moments.\n- **Paper Extra** (`{colors.paper-extra}` — #FBE6A4): Warm yellow with a hint of cream, used as the most differentiated card variant — often paired with a slight rotation.\n- **Cream** (`{colors.cream}` — #F8F1D6): The card background. A soft off-white ivory that lets cards recede from the loud yellow page. Used on every standard card surface.\n- **Kraft** (`{colors.kraft}` — #C9A66B): A warm tan/kraft tone. Defined in the token system but not actively used in the source.\n- **Ink Blue** (`{colors.ink}` — #1F3A8A): Deep cobalt navy. The universal text, border, divider, pin illustration, and shadow color. The system's structural identity.\n- **Ink Soft** (`{colors.ink-soft}` — #2D4FB8): A slightly lighter cobalt variant; available but rarely used.\n- **Ink Line** (`{colors.ink-line}` — #3457C4): A slightly brighter cobalt for line decorations; rarely used.\n- **Ink Deep** (`{colors.ink-deep}` — #0E1430): Near-black with a slight blue cast. Used for the `.ink` slide variant background.\n- **Cinnabar Red** (`{colors.red}` — #C2342B): The stamp color and the negative-pill border/text color. Used only in two roles — never as a general accent.\n- **Olive** (`{colors.olive}`) and **Orange** (`{colors.orange}`): Defined but inactive. Available as reserved tertiary tones.\n\n### Defaults\n\n- **Default slide surface**: `{components.paper-surface}` — yellow paper with layered gradients. Always.\n- **Default surface grain**: `{components.paper-grain-overlay}` at opacity 0.35 with multiply blend. Non-optional.\n- **Default primary headline color**: `{colors.ink}` on yellow surfaces; `{colors.paper}` on ink surfaces.\n- **Default body text color**: `{colors.ink}` on yellow/cream; `{colors.paper}` on ink (with `opacity: 0.85` for muted lead).\n- **Default card surface**: `{colors.cream}`. Reach for `{colors.paper-2}` or `{colors.paper-extra}` to break up adjacent same-tone cards.\n- **Default border color**: `{colors.ink}` at 1.5px. Always.\n- **Default shadow**: `5px 6px 0 0 {colors.ink}` (hard offset, zero blur). Smaller cards may use `4px 5px 0 0`; the largest quote panel uses `8px 9px 0 0`.\n- **Default label / metadata color**: `{colors.ink}` at opacity 0.65–0.75 for chrome and footer.\n- **Default scribble / handwritten color**: `{colors.ink}`. Caveat is always ink-blue on yellow.\n- **Default stamp color**: `{colors.red}` — the only routine use of red.\n\nCream is the card fill; yellow is the page fill. Mixing these breaks the visual hierarchy: a yellow card on a yellow page disappears; a cream card on a cream page collapses the layered-paper reading.\n\n## Typography\n\n### Font Family\n\nThe system loads three web fonts: **Space Grotesk** (weights 400, 500, 600, 700) carries all printed display and body type; **Caveat** (weights 500, 600, 700) carries all handwritten / personal-voice moments; **DM Mono** (weights 400, 500) carries all archival metadata.\n\nThe emotional register of each face is distinct and load-bearing:\n- Space Grotesk reads as **printed, official, typeset** — the voice of the document itself.\n- Caveat reads as **handwritten, personal, a note in the margin** — the voice of the person reading the document.\n- DM Mono reads as **archival, catalog-card, indexical** — the voice of the system filing the document.\n\nA key inline mixing rule: **a `<small>` element nested inside a Caveat number switches to a smaller Caveat at 60px** for unit suffixes (like `M`, `×`, `%`). The handwritten suffix preserves the hand-counted feeling of the parent numeral.\n\nA second inline mixing rule: **a `.underline` span inside Caveat scribble text gets a 2px solid ink-blue underline** — used to mimic an underline drawn by hand for emphasis.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.scribble-mega}` | 360px | Caveat | 700 | Decorative oversized quote-mark glyph |\n| `{typography.display-mega}` | 196px | Space Grotesk | 700 | Cover headline |\n| `{typography.display-section}` | 168px | Space Grotesk | 700 | Section-divider headline (on ink slide) |\n| `{typography.display-stat}` | 168px | Space Grotesk | 700 | Hero stat figure |\n| `{typography.h1-cta}` | 130px | Space Grotesk | 700 | Closing CTA headline |\n| `{typography.h1-chart}` | 110px | Space Grotesk | 700 | Chart-slide headline |\n| `{typography.h2}` | 96px | Space Grotesk | 700 | Standard agenda or stats headline |\n| `{typography.h2-md}` | 84px | Space Grotesk | 700 | Section heading inside dense slides |\n| `{typography.scribble-lg}` | 70px | Caveat | 700 | Process step numerals |\n| `{typography.scribble-md}` | 60px | Caveat | 700 | CTA step numerals, large script accents |\n| `{typography.quote-text}` | 50px | Space Grotesk | 500 | Pull-quote body |\n| `{typography.h2-sm}` | 50px | Space Grotesk | 700 | Notice-slide headline |\n| `{typography.card-row}` | 44px | Space Grotesk | 600 | Agenda row label |\n| `{typography.card-h3}` | 38px | Space Grotesk | 700 | Card title |\n| `{typography.scribble-sm}` | 38px | Caveat | 600 | Handwritten marginal note on cover, notice-card meta |\n| `{typography.scribble-xs}` | 32px | Caveat | 600 | Small in-card handwritten annotation |\n| `{typography.card-h3-sm}` | 28px | Space Grotesk | 700 | Sub-card heading |\n| `{typography.body}` | 22px | Space Grotesk | 400 | Standard body paragraph |\n| `{typography.body-md}` | 21px | Space Grotesk | 400 | Body inside tables |\n| `{typography.body-sm}` | 19px | Space Grotesk | 400 | Compact body inside dense cards |\n| `{typography.body-list}` | 18px | Space Grotesk | 400 | List item inside a card |\n| `{typography.label-top}` | 18px | DM Mono | 500 | Top-chrome brand lockup and meta |\n| `{typography.label-meta}` | 16px | DM Mono | 500 | Date strip, attribution |\n| `{typography.stamp}` | 16px | DM Mono | 500 | Stamp text |\n| `{typography.label-footer}` | 15px | DM Mono | 500 | Footer chrome |\n\n### Defaults\n\n- **Default primary content headline**: `{typography.h2}` (96px Space Grotesk 700).\n- **Default cover / opening headline**: `{typography.display-mega}` (196px).\n- **Default section-break headline**: `{typography.display-section}` (168px), used on the ink-blue slide variant.\n- **Default body paragraph size**: `{typography.body}` (22px). For dense multi-card slides, drop to `{typography.body-sm}` (19px).\n- **Default card heading**: `{typography.card-h3}` (38px) for standard cards; `{typography.card-h3-sm}` (28px) for sub-cards.\n- **Default stat figure**: `{typography.display-stat}` (168px) — with a Caveat `<small>` suffix for unit (M, %, ×).\n- **Default label / chrome size**: `{typography.label-top}` (18px) for the top chrome; `{typography.label-footer}` (15px) for the bottom.\n- **Default handwritten annotation size**: `{typography.scribble-sm}` (38px) for marginal notes; `{typography.scribble-lg}` (70px) for step numerals.\n- **Default weight for any display element**: 700.\n- **Default weight for body**: 400.\n\nWhen unsure, the canonical card composition is: a 38px Space Grotesk card heading + a 22px Space Grotesk body paragraph + a 32px Caveat handwritten note at the bottom. That three-layer typography rhythm (print headline, print body, handwritten margin note) is the system's most recognizable internal pattern.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every slide carries the paper-grain overlay (`{components.paper-grain-overlay}`).** Without it, the paper aesthetic collapses. The grain is part of the surface, not a decorative flourish.\n- **Every card carries a 1.5px solid ink border, 4px border-radius, AND a hard ink-blue offset shadow (5–8px offset, zero blur).** All three together — missing the shadow makes the card feel un-pinned; missing the border makes it feel un-printed.\n- **Caveat is always ink-blue** (`{colors.ink}`) on yellow/cream surfaces, and always paper-yellow on ink surfaces. Caveat in any other color does not exist.\n- **Pin illustrations (`{components.pin-illustration}`) are always rotated off-axis** (typical range: -14° to +20°). A pin rendered at 0° rotation breaks the hand-pinned aesthetic.\n- **The stamp component (`{components.stamp}`) is always rotated -4°** with a 3px solid red border, red mono text, and zero radius. Stamp text is always DM Mono uppercase.\n- **Every Space Grotesk display headline uses negative letter-spacing** in the -0.02 to -0.04em range. Tighter for larger sizes.\n- **Hand-script numerals (Caveat at 60–70px) are the only step-numbering mechanism** in process diagrams and ordered CTA lists. Don't substitute Space Grotesk numerals.\n- **The top-chrome lockup includes the inline `#mark` SVG glyph** alongside the brand text. The glyph is part of the brand identity, not optional.\n\n### Typography Principles\n\nThe rhythm of Pin & Paper is **printed headline + printed body + handwritten margin note + mono archival tag** — four voices, each in its assigned face. Switching any voice (e.g., setting a marginal note in Space Grotesk, or a body paragraph in Caveat) collapses the system's editorial register.\n\nItalic letterforms are not used. Underline is used only on `.underline` spans inside Caveat scribble text (2px solid ink). Bold inside body is rare; emphasis is achieved either by switching to a heavier Space Grotesk weight at a larger size, or by adding a Caveat handwritten annotation below.\n\n## Layout\n\n### Canvas System\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component. All sizes are pixel-fixed; the stage handles proportional scaling to the browser viewport.\n\nMost slides use **absolute positioning** with edge-anchored elements (`left: 64px`, `right: 64px`, `top: 110px`, `bottom: 100px`) for the content stage, plus targeted grid layouts for card rows. Pin illustrations are absolutely-positioned overlays on top of card stacks.\n\n### Padding and Anchoring\n\n| Anchor | Value | Use |\n|---|---|---|\n| `pad-edge` | 64px | Left and right edge insets on every slide |\n| `pad-top` | 110px | Top inset for content (below the 44px top chrome) |\n| `pad-bottom` | 90px | Bottom inset for content (above the 36px footer chrome) |\n| `grid-gap-sm` | 22px | Process card gap |\n| `grid-gap-md` | 28px | Notice / stats card gap |\n| `grid-gap-lg` | 32px | Notecard grid gap |\n\nCards typically use `28px–36px` internal padding on the top and `22px–28px` on the sides, with `22px–28px` on the bottom.\n\n### Chrome Frame\n\nEvery slide carries a **top chrome band** at 44px top / 64px sides — a brand lockup on the left (with inline #mark SVG glyph) and a meta-tag pair on the right. The chrome is DM Mono uppercase at 18px with 0.12em tracking.\n\nEvery slide also carries a **footer chrome** at 36px bottom / 64px sides — typically a source attribution on the left and a page-position marker on the right. The footer is DM Mono uppercase at 15px with 0.14em tracking at 65% opacity.\n\nOn ink-blue slides, both chromes flip color to `{colors.paper}` and the grain overlay shifts to opacity 0.25 with screen blend mode.\n\n## Depth and Elevation\n\n### Hard Offset Shadow (Primary Depth)\n\nThe system's only depth treatment is the **hard ink-blue offset shadow** on every card: `5px 6px 0 0 {colors.ink}` (standard), `4px 5px 0 0` (compact), `6px 7px 0 0 rgba(239,229,106,.25)` (chart-card with yellow-tinted shadow), or `8px 9px 0 0` (the largest quote panel). The shadow is always solid, always offset down-right, always zero blur. There are no blurred drop shadows anywhere in the system.\n\n### Paper Texture Depth\n\nThe fractal-noise grain (`{components.paper-grain-overlay}`) at opacity 0.35 with multiply blend adds a subtle perceived depth — the texture creates micro-variation that reads as paper fiber. This is depth at the surface level, not at the element level.\n\n### Pin Illustrations as Depth Signal\n\nThe hand-drawn safety-pin SVGs positioned at the top edge of cards (typically `position: absolute; top: -14 to -22px; left: 28–90px; transform: rotate(-6 to -12deg)`) create the visual illusion that the card has been pinned to the page. The pin is the depth narrative: a pin appearing at the top of a card explains why the card has a shadow and a rotation.\n\n### Slight Rotation on Alternate Cards\n\nSome card variants (`{components.pinned-card-alt2}`) carry a slight rotation (`transform: rotate(0.6deg)` to `rotate(1.5deg)`) that reads as a sheet of paper pinned slightly askew. This is a deliberate imperfection — used sparingly (one or two cards per slide), not on every card.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Stamp, pin glyphs, page numbers |\n| 4px | Cards, panels, table containers, image wrappers — the system's micro-radius |\n| 999px | Pills only |\n\nThe system uses a **4px micro-radius** on every card — small enough to read as \"printed corner with slight bleed\" rather than rounded UI. Pills are the only round shape; pills with the unusual treatment of Caveat handwritten letterforms inside.\n\n### Border Weights\n\n- **1.5px solid `{colors.ink}`** — the universal card border. Used on every cream card, every table container, every panel.\n- **1.5px dashed rgba(31,58,138,.45)** — used as a dotted separator between agenda rows, between CTA steps, and at the top of source notes inside cards. Adds the \"graph-paper line break\" feel.\n- **3px solid `{colors.red}`** — used only on the stamp component (`{components.stamp}`).\n- **2px solid `{colors.ink}`** — used only on the Caveat `.underline` span treatment.\n\n### Decorative Element Types\n\n**Pin illustration (`{components.pin-illustration}`)** — The defining visual signature. A hand-drawn safety-pin SVG (two variants: closed and open) rendered in `currentColor` and rotated at a slight angle. Pins appear at the top of cards, as decorative overlays on the cover, as oversized accent illustrations on section dividers (up to 640px wide), and pinned to agenda rows. The pin is the system's voice — wherever a pin appears, the page reads as a pinned document.\n\n**Stamp (`{components.stamp}`)** — A cinnabar-red rotated rubber-stamp tag with 3px solid red border, red mono uppercase text, and -4° rotation. Used for status marks (CONFIDENTIAL, RECEIVED). The stamp is one of the two roles where red is used in this system.\n\n**Scribble (`{components.scribble}`)** — A Caveat hand-script text block, often rotated -1.5° to -3° for the \"handwritten\" feel. Used for marginal notes, \"me\" voice annotations, large script accents. May include `.underline` spans for handwritten emphasis.\n\n**Pinned card (`{components.pinned-card}`)** — The universal card pattern: cream fill, 1.5px ink border, 4px micro-radius, 5–6px hard ink offset shadow. Often carries a pin illustration overlapping its top edge. Three alternate fill colors break up adjacent same-tone cards.\n\n**Top chrome lockup** — The brand text accompanied by an inline #mark SVG glyph (a circle on the right with an arrow shaft pointing left). The glyph is part of the brand's identity.\n\n**Dashed border separators** — Used as inter-row dividers in agenda lists, CTA step lists, and inside cards as source-attribution separators. Always `1.5px dashed rgba(31,58,138,.45)`.\n\n**Caveat pills (`{components.pill-yes}`, `{components.pill-part}`)** — Pills with hand-script letterforms inside (Caveat 28px) on solid or paper-tone fills. The mismatch between rounded UI shape and handwritten text is intentional.\n\n**Process / CTA script numerals** — Caveat 60–70px ordinals inside cards or list rows. The hand-script number signals \"step counted by hand, not by an algorithm.\"\n\n**Oversized script quote-mark** — A Caveat at 360px rendered as the opening glyph on the quote slide. The script size pushes into the realm of decoration; the glyph is so large that it functions as composition, not punctuation.\n\n## Do's and Don'ts\n\n### Do\n- Apply the paper-grain overlay (`{components.paper-grain-overlay}`) to every slide. The texture is foundational to the paper reading.\n- Set every card with the universal pattern: 1.5px ink border + 4px radius + hard ink offset shadow. The three together define the card.\n- Use Space Grotesk weight 700 in mixed case (with negative letter-spacing) for every printed headline.\n- Use Caveat for every handwritten or personal-voice moment — marginal notes, step numerals, pill text. The script is the system's \"me\" voice.\n- Use DM Mono uppercase at 0.12–0.18em tracking for every archival tag, chrome label, and footer string.\n- Rotate every pin illustration off-axis (typical range -14° to +20°). A pin at 0° rotation breaks the hand-pinned aesthetic.\n- Populate cards. The system reads as authoritative when 3–6 cards are pinned across the page, each with heading + body + marginal note.\n- Use the rotated stamp component (`{components.stamp}`) for status marks. The -4° rotation is its identity.\n- Pair a Caveat step numeral with a Space Grotesk card heading inside process and CTA lists. The script numeral is the system's ordering voice.\n- Use a slight rotation (0.6° to 1.5°) on one card per slide for the \"pinned-askew\" effect. Don't rotate every card.\n\n### Don't\n- Don't omit the paper-grain overlay. Without it, the surface collapses into flat cartoon-yellow.\n- Don't substitute a different list marker for the Caveat hand-script numeral. Step numbers are always hand-script.\n- Don't use red outside the stamp and the negative pill. Red is a two-role accent only.\n- Don't render pin illustrations at 0° rotation. The off-axis tilt is what makes them read as physical pins.\n- Don't use blurred shadows. Cards use hard ink-blue offset shadows only.\n- Don't fill a card with yellow on the yellow page surface. Cards are cream; the contrast between cream cards and yellow page is the layered-paper signal.\n- Don't put body copy in Caveat. The hand-script is for marginal notes and accents, never paragraphs.\n- Don't put headline copy in DM Mono. Mono is the archival voice, not the editorial voice.\n- Don't use radius larger than 4px on cards. The micro-radius is the printed-corner signal; larger radius collapses into generic UI.\n- Don't compose a near-empty slide. The system was designed as a populated notebook page; sparseness reads as broken.\n\n## Responsive Behavior\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component (loaded via `deck-stage.js`). The stage handles proportional scaling to the browser viewport — all pixel-fixed sizes inside the canvas scale uniformly.\n\n### Presenter Behavior\n- The `<deck-stage>` component manages navigation, scaling, and presenter chrome.\n- Keyboard, touch, and mouse-wheel navigation are handled by the stage component.\n- The slide canvas is constant 1920×1080 regardless of viewport size.\n\n### Print Behavior\nPrint export depends on the deck-stage component's print handling. The fractal-noise grain overlay may not render in all PDF exports — test before assuming texture transfers.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / headline (Space Grotesk 700) | Space Grotesk | 龙藏体 Long Cang | 400 (only weight available) |\n| Body (Space Grotesk 400) | Space Grotesk | 霞鹜文楷 LXGW WenKai | 400 |\n| Handwritten / scribble (Caveat) | Caveat | 龙藏体 Long Cang | 400 |\n| Label / mono (DM Mono UPPERCASE tracked) | DM Mono | 霞鹜文楷 LXGW WenKai | 400 (do not force monospace on CJK) |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. Space Grotesk display tokens become `\"Space Grotesk, Long Cang, Helvetica Neue, Arial, sans-serif\"`; Space Grotesk body tokens become `\"Space Grotesk, LXGW WenKai, Helvetica Neue, Arial, sans-serif\"`; Caveat tokens become `\"Caveat, Long Cang, cursive\"`. Latin glyphs render in the original face; CJK falls through automatically.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Caveat:wght@500;600;700&family=DM+Mono:wght@400;500&family=Long+Cang&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-lxgw-wen-kai-regular/font.css\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPin & Paper is the strongest fit for Chinese in this entire library. The yellow legal-pad surface, the cobalt ink, the safety-pin illustrations, and the field-notebook register all translate naturally into Chinese — the system reads as a 笔记本 / 手账 page in either script.\n\n**龙藏体 Long Cang** is a hard-pen handwritten Chinese face — the brushless, ballpoint-on-paper equivalent of Chinese handwriting. It is the perfect Chinese substitute for the Space Grotesk + Caveat dual-role headline-and-scribble voices in this system. Long Cang at large sizes (96–168px) reads as a confident handwritten field-note headline — exactly what Pin & Paper is trying to evoke. Use it for both display headlines and the Caveat-equivalent scribble layer. Layering two visually-distinct hand-script faces in pure Chinese is unnecessary; Long Cang carries both roles.\n\n**霞鹜文楷 LXGW WenKai** is a kaishu-derived body face designed for screen reading — it carries the warmth and slight irregularity of handwritten 楷书 but stays legible at body sizes (18–22px). It is the strongest counterweight to Long Cang's handwritten display and matches the system's \"field-notebook personal voice\" register exactly. Set every Chinese body paragraph in LXGW WenKai 400.\n\nThe pin illustrations, the rotated red stamp, the cream cards with hard ink offset shadows — all transfer unchanged. The Caveat pill component (handwritten letters inside a rounded pill) translates to Long Cang inside the same pill shape and reads as charmingly hand-counted in Chinese.\n\nThe system's most recognizable rhythm (printed headline + printed body + handwritten margin note) becomes (Long Cang headline + LXGW WenKai body + Long Cang margin note in a slightly different size). The voice distinction in pure Chinese comes from size, rotation, and color rather than from face swap — Long Cang at 38px rotated -3° in the margin reads clearly as \"marginal annotation\" against Long Cang at 96px upright in the headline.\n\nDM Mono uppercase tracked labels do not transfer to CJK. Chinese metadata in the top chrome should use LXGW WenKai 400 mixed case with letter-spacing 0. Pure Latin metadata (date strings, source URLs) stays in DM Mono.\n\n### Known CJK Gap\n\nLong Cang and LXGW WenKai are visually adjacent — both carry handwritten kaishu DNA. The three-voice editorial pairing (print / handwritten / archival) collapses into a two-voice pairing in pure Chinese (handwritten-display / handwritten-body / archival-Latin-only). This is not a bug — pure-Chinese decks in Pin & Paper read as more uniformly hand-touched than their Latin counterparts, which is actually closer to the field-notebook aesthetic the system aims for.\n\n## Iteration Guide\n\n1. Every new slide background is the paper-surface (`{components.paper-surface}`) with the grain overlay on `::before`. Don't skip the texture.\n2. Every new card uses the universal pattern: cream fill, 1.5px ink border, 4px radius, hard ink offset shadow. Don't customize.\n3. Every new headline is Space Grotesk weight 700 mixed case with negative letter-spacing. Don't reach for a different weight.\n4. Every new step numeral or ordered-list marker is Caveat hand-script at 60–70px. Don't substitute a numeric font.\n5. Every new label or metadata tag is DM Mono uppercase with 0.12–0.18em tracking.\n6. Every new pin illustration is rotated off-axis. Choose closed (#pin) for a \"secured\" feel; open (#pin-open) for a \"lifted\" feel.\n7. To add personal voice to a card, append a Caveat marginal note at the bottom — usually with a `.underline` span for handwritten emphasis.\n8. To mark a card with status, place the stamp component (`{components.stamp}`) at a slight rotation in the upper area of the card.\n9. To break up adjacent same-tone cards, alternate between cream, paper-2, and paper-extra fills. Add a slight rotation on one card for variety.\n10. To use the ink-blue surface variant (e.g., a section divider), flip text color to `{colors.paper}` and reduce grain opacity to 0.25 with screen blend mode.\n\n## Known Gaps\n\n- The system depends on a `<deck-stage>` web component loaded via `deck-stage.js`. Without it, the 1920×1080 canvas will not scale and slides will render at native pixel size.\n- The pin illustrations are embedded as inline SVG symbol definitions at the top of the document. New slides that need pin illustrations must reference them via `<use href=\"#pin\">` or `<use href=\"#pin-open\">` — and the symbol definitions must be present in the document.\n- The fractal-noise grain overlay uses a data-URI SVG with `feTurbulence`. Some browsers (especially older Safari versions) may render the noise inconsistently or skip it during PDF export.\n- The Caveat font carries hand-script ligatures and may render inconsistently between operating systems. Default fallback is `cursive` which varies wildly across systems.\n- The `kraft`, `olive`, and `orange` color tokens are defined but inactive in the source. They are reserved for future extension but have no current role.\n- The pill-yes component uses Caveat letterforms inside a rounded pill shape — this is intentionally unusual but may read as a UI bug to viewers unfamiliar with the system.\n- The paper-grain overlay uses `mix-blend-mode: multiply` on standard slides and `mix-blend-mode: screen` on ink slides. The blend mode flip is essential — using multiply on the dark ink slide turns the slide muddy.\n- The bar chart and line chart components use SVG with manually-positioned points. There is no data-binding layer.\n- The hand-drawn pin SVG is a fixed-path illustration. Re-coloring works via `currentColor`, but the pin proportions cannot be adjusted without editing the SVG path data.\n","frontmatter":{"version":"alpha","name":"Pin & Paper","description":"A field-notebook editorial system rendered as yellow legal-pad paper with deep cobalt-blue ink. Every slide carries a fractalnoise paper-grain overlay, hand-drawn safety-pin SVG illustrations that \"pin\" cards to the page, and a hand-script Caveat face for personal annotations. Space Grotesk at heavy weights carries the printed headlines; DM Mono handles archival labels. The aesthetic borrows from analog field reports, vintage public-notice boards, and the diary pages of scientific notebooks — closer to a lab journal pinned to a corkboard than a polished deck.","colors":{"paper":"#EFE56A","paper-2":"#F5ECA0","paper-3":"#E8D85A","paper-extra":"#FBE6A4","cream":"#F8F1D6","kraft":"#C9A66B","ink":"#1F3A8A","ink-soft":"#2D4FB8","ink-line":"#3457C4","ink-deep":"#0E1430","red":"#C2342B","olive":"#6B7A2E","orange":"#D8702A"},"color-aliases":{"c-bg":"paper","c-text":"ink","c-card":"cream","c-stamp":"red"},"typography":{"display-mega":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"196px","fontWeight":700,"lineHeight":1.08,"letterSpacing":"-0.04em"},"display-section":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"168px","fontWeight":700,"lineHeight":1.05,"letterSpacing":"-0.04em"},"display-stat":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"168px","fontWeight":700,"lineHeight":0.85,"letterSpacing":"-0.04em"},"h1-cta":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"130px","fontWeight":700,"lineHeight":1.05,"letterSpacing":"-0.035em"},"h1-chart":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"110px","fontWeight":700,"lineHeight":1.05,"letterSpacing":"-0.035em"},"h2":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"96px","fontWeight":700,"lineHeight":1.05,"letterSpacing":"-0.03em"},"h2-md":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"84px","fontWeight":700,"lineHeight":1.05,"letterSpacing":"-0.03em"},"h2-sm":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"50px","fontWeight":700,"lineHeight":1.05,"letterSpacing":"-0.02em"},"quote-text":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"50px","fontWeight":500,"lineHeight":1.1,"letterSpacing":"-0.02em"},"card-row":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"44px","fontWeight":600,"lineHeight":1,"letterSpacing":"-0.02em"},"card-h3":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"38px","fontWeight":700,"lineHeight":1.02,"letterSpacing":"-0.02em"},"card-h3-sm":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"28px","fontWeight":700,"lineHeight":1.05,"letterSpacing":"-0.015em"},"body":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"22px","fontWeight":400,"lineHeight":1.45},"body-md":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"21px","fontWeight":400,"lineHeight":1.35},"body-sm":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"19px","fontWeight":400,"lineHeight":1.45},"body-list":{"fontFamily":"Space Grotesk, Helvetica Neue, Arial, sans-serif","fontSize":"18px","fontWeight":400,"lineHeight":1.4},"scribble-mega":{"fontFamily":"Caveat, cursive","fontSize":"360px","fontWeight":700,"lineHeight":0.8},"scribble-lg":{"fontFamily":"Caveat, cursive","fontSize":"70px","fontWeight":700,"lineHeight":0.9},"scribble-md":{"fontFamily":"Caveat, cursive","fontSize":"60px","fontWeight":700,"lineHeight":0.9},"scribble-sm":{"fontFamily":"Caveat, cursive","fontSize":"38px","fontWeight":600,"lineHeight":1.05},"scribble-xs":{"fontFamily":"Caveat, cursive","fontSize":"32px","fontWeight":600,"lineHeight":1.05},"label-top":{"fontFamily":"DM Mono, ui-monospace, monospace","fontSize":"18px","fontWeight":500,"letterSpacing":"0.12em","textTransform":"uppercase"},"label-meta":{"fontFamily":"DM Mono, ui-monospace, monospace","fontSize":"16px","fontWeight":500,"letterSpacing":"0.18em","textTransform":"uppercase"},"label-footer":{"fontFamily":"DM Mono, ui-monospace, monospace","fontSize":"15px","fontWeight":500,"letterSpacing":"0.14em","textTransform":"uppercase"},"stamp":{"fontFamily":"DM Mono, monospace","fontSize":"16px","fontWeight":500,"letterSpacing":"0.18em","textTransform":"uppercase"}},"spacing":{"pad-edge":"64px","pad-top":"110px","pad-bottom":"90px","card-pad-md":"28px 28px 24px","card-pad-lg":"32px 22px 22px","card-pad-xl":"36px 28px 28px","card-pad-quote":"60px 80px","grid-gap-sm":"22px","grid-gap-md":"28px","grid-gap-lg":"32px"},"canvas":{"width":"1920px","height":"1080px"},"components":{"paper-surface":{"background":"radial-gradient(120% 90% at 20% 10%, rgba(255,255,255,.18), transparent 60%), radial-gradient(140% 100% at 80% 95%, rgba(0,0,0,.05), transparent 55%), {colors.paper}","description":"Default slide surface — yellow paper with a soft upper-left highlight gradient and a soft lower-right shadow gradient layered over the base paper color."},"paper-grain-overlay":{"selector":".slide::before","background":"fractalNoise SVG via data URI, baseFrequency=1.4, octaves=2","opacity":0.35,"mixBlendMode":"multiply","description":"Non-optional fractal-noise paper grain overlay on every slide. Lives on the ::before pseudo-element; opacity 0.35, multiply blend. On ink slides, opacity drops to 0.25 with screen blend."},"pinned-card":{"background":"{colors.cream}","border":"1.5px solid {colors.ink}","borderRadius":"4px","boxShadow":"5px 6px 0 0 {colors.ink}","padding":"{spacing.card-pad-md}","description":"Cream paper card with a 1.5px ink border, 4px micro-radius, and a hard 5px-6px ink-blue offset shadow. The system's universal card pattern — every card looks like a piece of paper pinned to the surface."},"pinned-card-alt":{"background":"{colors.paper-2}","description":"Card variant using the lighter paper-2 tone. Used to break up adjacent same-tone cards."},"pinned-card-alt2":{"background":"{colors.paper-extra}","transform":"rotate(0.6deg)","description":"Card variant with the deepest paper tone and a slight rotation (0.6 to 1.5 degrees) — gives the impression of being pinned slightly askew."},"pin-illustration":{"width":"varies (110–640px)","color":"currentColor","transform":"rotate(-14deg to +20deg)","description":"Hand-drawn safety-pin SVG illustration in ink-blue or paper (when on ink surface). Multiple variants: closed pin (#pin), open pin (#pin-open). Always rotated slightly off-axis. Acts as both decoration and the visual signal that a card is 'pinned' to the page."},"scribble":{"fontFamily":"Caveat, cursive","color":"{colors.ink}","lineHeight":1.05,"description":"Caveat hand-script face used for handwritten notes, marginalia, and 'me' voice annotations. May be rotated slightly (-3 to -1.5 degrees) and underlined via 2px solid ink for emphasis."},"stamp":{"border":"3px solid {colors.red}","color":"{colors.red}","padding":"6px 16px","fontFamily":"DM Mono, monospace","fontSize":"16px","letterSpacing":"0.18em","textTransform":"uppercase","transform":"rotate(-4deg)","description":"Cinnabar-red rubber stamp — 3px solid red border, red mono text, rotated -4 degrees. Used for status marks like CONFIDENTIAL or RECEIVED."},"top-chrome":{"position":"absolute; top: 44px; left: 64px; right: 64px","fontFamily":"DM Mono, ui-monospace, monospace","fontSize":"18px","fontWeight":500,"letterSpacing":"0.12em","textTransform":"uppercase","description":"Top metadata band — brand lockup on left (with inline #mark SVG glyph), meta tags on right. Mono uppercase, line-height 1."},"footer-chrome":{"position":"absolute; left: 64px; right: 64px; bottom: 36px","fontFamily":"DM Mono, ui-monospace, monospace","fontSize":"15px","fontWeight":500,"letterSpacing":"0.14em","textTransform":"uppercase","opacity":0.65,"description":"Bottom metadata band — typically left-source + right-page-position pair at 65% opacity."},"pin-glyph-closed":{"svgId":"#pin","viewBox":"0 0 360 110","description":"Closed safety-pin SVG glyph — coiled spring on the right, shaft sweeping left, oval clasp cap on the left."},"pin-glyph-open":{"svgId":"#pin-open","viewBox":"0 0 360 130","description":"Open safety-pin SVG glyph — clasp lifted, sharp point exposed pointing left."},"mark-glyph":{"svgId":"#mark","viewBox":"0 0 32 16","description":"Small inline mark glyph for the top-chrome brand lockup — circle on the right, arrow shaft pointing left."},"table-cell":{"padding":"18px 22px","borderBottom":"1.5px solid rgba(31,58,138,.5)","borderRight":"1.5px solid rgba(31,58,138,.5)","fontSize":"21px","lineHeight":1.35,"description":"Comparison table cell with semi-transparent ink-blue dividers. Sits inside the same cream + ink-border + offset-shadow card pattern."},"pill-yes":{"background":"{colors.ink}","color":"{colors.paper}","border":"1.5px solid {colors.ink}","borderRadius":"999px","padding":"4px 14px","fontFamily":"Caveat, cursive","fontSize":"28px","fontWeight":600,"description":"Affirmative pill — solid ink fill with paper text, rounded 999px, Caveat script face. Unusual treatment: handwritten letterforms inside a UI pill shape."},"pill-no":{"background":"transparent","color":"{colors.red}","border":"1.5px solid {colors.red}","fontFamily":"DM Mono, monospace","fontSize":"16px","letterSpacing":"0.14em","textTransform":"uppercase","description":"Negative pill — red mono uppercase text in a red-bordered transparent pill. The only place red appears in regular use (outside the stamp component)."},"pill-part":{"background":"{colors.paper-2}","color":"{colors.ink}","fontFamily":"Caveat, cursive","description":"Partial-state pill — light paper fill with Caveat script ink text."},"number-script":{"fontFamily":"Caveat, cursive","fontWeight":700,"fontSize":"60–70px","color":"{colors.ink}","description":"Hand-script numeral used as step numbers in process diagrams and ordered CTA steps. The script face makes ordering feel hand-counted, not algorithmic."}}},"isInternal":false,"tokens":11081,"sizeBytes":43220},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pin-and-paper/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pin-and-paper/preview.md","title":"Pin-and-paper Skill","category":"anthropic-skill","format":"markdown","content":"# Pin & Paper Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/pin-and-paper/design.md`\n- Preview card: `bold-template-pack/templates/pin-and-paper/preview.md`\n\n## Selection Metadata\n\n- Slug: `pin-and-paper`\n- Tagline: Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture.\n- Mood: crafted, handmade, warm, thoughtful, literary\n- Tone: literary, intimate, warm, grounded\n- Formality: medium\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel hand-crafted, warm, and literary: qualitative research findings, founder reflections, longform brand stories, workshop debriefs. The signature safety-pin illustrations and paper-grain texture make it especially good for any deck — including tech or business — that wants personality and warmth over polish.\n- Avoid for: Decks that need to feel digital-native polished or rigorously data-driven — handwritten Caveat is intentionally informal.\n\n## Visual Snapshot\n\nA field-notebook editorial system rendered as yellow legal-pad paper with deep cobalt-blue ink. Every slide carries a fractalnoise paper-grain overlay, hand-drawn safety-pin SVG illustrations that \"pin\" cards to the page, and a hand-script Caveat face for personal annotations. Space Grotesk at heavy weights carries the printed headlines; DM Mono handles archival labels. The aesthetic borrows from analog field reports, vintage public-notice boards, and the diary pages of scientific notebooks — closer to a lab journal pinned to a corkboard than a polished deck.\n\nPin & Paper is a field-notebook editorial system built on a single material premise: every slide is yellow legal-pad paper. The paper is rendered through a base color ({colors.paper} — saturated cadmium yellow), two soft radial-gradient highlights (upper-left light, lower-right shadow), and a non-optional fractal-noise grain overlay on a ::before pseudo-element with multiply blend. This stack creates a surface that reads as physical paper under raking light. Without the grain, the system collapses into flat cartoon-yellow; the texture is foundational, not decorative.\n\n## Preview Ingredients\n\n- Palette: paper #EFE56A; paper-2 #F5ECA0; paper-3 #E8D85A; paper-extra #FBE6A4; cream #F8F1D6; kraft #C9A66B; ink #1F3A8A; ink-soft #2D4FB8\n- Typography: Space Grotesk; Caveat; DM Mono\n- Signature move: Yellow paper background ({components.paper-surface}) with two layered radial gradients and a non-optional fractal-noise grain overlay ({components.paper-grain-overlay}) on every slide.\n- Signature move: Deep cobalt-blue ink ({colors.ink}) as the universal text, border, divider, and pin-illustration color.\n- Signature move: Cream card surfaces ({colors.cream}) with 1.5px ink borders, 4px micro-radius, and a hard ink-blue offset shadow (5px–6px, zero blur).\n- Signature move: Hand-drawn safety-pin SVG illustrations ({components.pin-illustration}) — closed and open variants — pinned to cards at slight rotation angles.\n- Signature move: Three-voice typography: Space Grotesk for print headlines, Caveat hand-script for personal voice, DM Mono for archival labels.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1058,"sizeBytes":4753},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pink-script/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pink-script/design.md","title":"Pink Script (After Hours)","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Pink Script (After Hours)\ndescription: A nocturnal couture editorial system rendered in hot fuchsia ink on dim warm-black paper, with a soft film-grain overlay and a hairline interior frame. DM Serif Display carries every script and editorial moment at sizes up to 600px; Inter at weight 300 carries the body voice; JetBrains Mono carries the boutique-catalog metadata. The aesthetic borrows from glossy fashion magazine spreads, late-night perfume advertising, and the editorial pages of high-end zines — closer to a Maison's seasonal lookbook than a startup deck.\n\ncolors:\n  ink-deep: \"#060507\"\n  ink-violet: \"#0F0D11\"\n  paper-blush: \"#F5EDF1\"\n  pink: \"#ED3D8C\"\n  pink-light: \"#FF66A8\"\n  pink-deep: \"#B81D67\"\n  line-pink: \"rgba(237, 61, 140, 0.32)\"\n  mute-paper: \"rgba(245, 237, 241, 0.55)\"\n  hair-paper: \"rgba(245, 237, 241, 0.14)\"\n\ncolor-aliases:\n  c-bg: ink-deep\n  c-fg: paper-blush\n  c-accent: pink\n  c-line: line-pink\n\ntypography:\n  script-huge:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 540px\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.01em\n    color: \"{colors.pink}\"\n  script-section:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 600px\n    fontWeight: 400\n    lineHeight: 0.82\n    letterSpacing: -0.02em\n    color: \"{colors.pink}\"\n  script-giant:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 360px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.pink}\"\n  script-cover:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 280px\n    fontWeight: 400\n    lineHeight: 1.02\n    letterSpacing: -0.015em\n    color: \"{colors.pink}\"\n  script-large:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 220px\n    fontWeight: 400\n    lineHeight: 1.04\n    color: \"{colors.pink}\"\n  script-med:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 156px\n    fontWeight: 400\n    lineHeight: 1.04\n    color: \"{colors.pink}\"\n  script-sm:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 132px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.pink}\"\n  serif-cta:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 1.04\n    letterSpacing: -0.015em\n    color: \"{colors.paper-blush}\"\n  serif-h2:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 132px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.paper-blush}\"\n  serif-quote:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 92px\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n    color: \"{colors.paper-blush}\"\n  serif-chart-h:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 90px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.paper-blush}\"\n  serif-section-h:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 88px\n    fontWeight: 400\n    lineHeight: 1.06\n    color: \"{colors.paper-blush}\"\n  serif-stat:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 116px\n    fontWeight: 400\n    lineHeight: 0.9\n    color: \"{colors.pink}\"\n  serif-toc-num:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 64px\n    fontWeight: 400\n    lineHeight: 1.0\n    color: \"{colors.pink}\"\n  serif-toc-title:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 56px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.paper-blush}\"\n  serif-quote-attr:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 48px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.paper-blush}\"\n  serif-process-h:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 38px\n    fontWeight: 400\n    lineHeight: 1.05\n    color: \"{colors.paper-blush}\"\n  serif-matrix-label:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 32px\n    fontWeight: 400\n    lineHeight: 1.2\n    color: \"{colors.paper-blush}\"\n  body:\n    fontFamily: \"Inter, system-ui, sans-serif\"\n    fontSize: 24px\n    fontWeight: 300\n    lineHeight: 1.55\n    color: \"{colors.paper-blush}\"\n  body-muted:\n    fontFamily: \"Inter, system-ui, sans-serif\"\n    fontSize: 22px\n    fontWeight: 300\n    lineHeight: 1.5\n    color: \"{colors.mute-paper}\"\n  body-toc-desc:\n    fontFamily: \"Inter, system-ui, sans-serif\"\n    fontSize: 24px\n    fontWeight: 300\n    lineHeight: 1.4\n    color: \"{colors.mute-paper}\"\n  mono-runner:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  mono-kicker:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 22px\n    fontWeight: 400\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.pink}\"\n  mono-label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 22px\n    fontWeight: 400\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.paper-blush}\"\n  mono-cover-pre:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 28px\n    fontWeight: 400\n    letterSpacing: 0.42em\n    textTransform: uppercase\n    color: \"{colors.paper-blush}\"\n  mono-pill:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    fontWeight: 400\n    letterSpacing: 0.08em\n    textTransform: uppercase\n\nspacing:\n  edge-x: 60px\n  edge-top-chrome: 60px\n  edge-bottom-chrome: 60px\n  content-top: 140px\n  content-bottom: 140px\n  inner-frame-inset: 36px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  slide-surface:\n    background: \"radial-gradient(ellipse 90% 70% at 30% 30%, #1A1218 0%, #0A0709 55%, #050306 100%)\"\n    description: \"Universal dark surface — radial ellipse from a slightly warmer #1A1218 in the upper-left fading to near-black in the lower-right. The off-center light source is part of the system's identity.\"\n  film-grain:\n    selector: \".slide::before\"\n    background: \"fractalNoise SVG via data URI, baseFrequency=0.9, octaves=2\"\n    opacity: 0.08\n    mixBlendMode: screen\n    description: \"Subtle film grain overlay on every slide via ::before. Opacity 0.08 with screen blend — barely visible but reads as photographic grain rather than digital flatness.\"\n  hairline-frame:\n    selector: \".slide::after\"\n    position: \"absolute; inset: 36px\"\n    border: \"1px solid {colors.hair-paper}\"\n    description: \"1px paper-blush-at-14%-opacity interior frame inset 36px from each slide edge. Always present. Functions as the editorial border of the magazine page.\"\n  runner:\n    position: \"absolute; top: 60px; left: 60px; right: 60px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    description: \"Top metadata runner — brand name on left (colored pink), section / chapter tag on right (muted paper-blush).\"\n  footer:\n    position: \"absolute; bottom: 60px; left: 60px; right: 60px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    description: \"Bottom metadata runner — source / confidentiality on left, page-position (e.g. '03 / 09') on right. Page-position has paper-blush base text with a pink ::em for the current number.\"\n  pink-rule:\n    height: 1px\n    background: \"{colors.pink}\"\n    opacity: 0.45\n    description: \"Hairline pink rule for soft section separators.\"\n  hair-rule:\n    height: 1px\n    background: \"{colors.paper-blush}\"\n    opacity: 0.25\n    description: \"Hairline paper rule for muted section separators.\"\n  pink-glow:\n    textShadow: \"0 0 80px rgba(237, 61, 140, 0.18)\"\n    description: \"Soft pink halo behind large script titles. Applied via text-shadow on hero serif text only.\"\n  pink-glow-mega:\n    textShadow: \"0 0 120px rgba(237, 61, 140, 0.22)\"\n    description: \"Stronger pink halo for section-divider mega numerals.\"\n  callout-rail:\n    borderLeft: \"1px solid {colors.pink}\"\n    paddingLeft: 24px\n    description: \"Pink left rule with right-aligned content — used as a callout container beside a chart, beside a chapter explanation.\"\n  matrix-cell:\n    padding: \"16px 24px\"\n    borderBottom: \"1px solid {colors.line-pink}\"\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: 22px\n    fontWeight: 300\n    color: \"{colors.paper-blush}\"\n    description: \"Comparison matrix cell. Rows are separated by hairline pink-at-32% rules; columns are gap-separated, no vertical borders.\"\n  matrix-cell-us:\n    background: \"rgba(237, 61, 140, 0.08)\"\n    description: \"Highlighted matrix row variant — soft pink wash to mark the 'our' column.\"\n  pill-outline:\n    border: \"1px solid {colors.pink}\"\n    color: \"{colors.pink}\"\n    padding: \"6px 14px\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    description: \"Hollow pink pill — 1px pink border with pink mono text. The default pill state.\"\n  pill-solid:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink-deep}\"\n    border: \"1px solid {colors.pink}\"\n    fontWeight: 500\n    description: \"Solid pink pill — pink fill, deep-ink text. Affirmative / featured state.\"\n  pill-dim:\n    borderColor: \"{colors.hair-paper}\"\n    color: \"{colors.mute-paper}\"\n    description: \"Dim pill — muted paper border, muted paper text. The de-emphasized state.\"\n  qr-tile:\n    width: 180px\n    height: 180px\n    background: \"{colors.paper-blush}\"\n    padding: 12px\n    description: \"QR-code container — solid paper-blush square with 12px white padding around the SVG QR. The only large light-surface element in the system.\"\n  stat-row:\n    display: \"grid; columns: 240px 1fr\"\n    borderBottom: \"1px solid {colors.hair-paper}\"\n    paddingBottom: 16px\n    description: \"Stat row pattern — large pink serif figure on the left (with a paper-blush superscript unit) paired with a mono label and Inter description on the right. Rows are separated by 1px paper hairline.\"\n  callout-num:\n    fontFamily: \"DM Serif Display, serif\"\n    fontSize: 120px\n    lineHeight: 0.9\n    color: \"{colors.pink}\"\n    description: \"Chart callout number — large pink serif numeral with smaller paper-colored unit suffix.\"\n  arrow-glyph:\n    width: 24px\n    height: 24px\n    color: \"{colors.pink}\"\n    description: \"Small pink right-arrow SVG used between process steps.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPink Script is a **nocturnal couture editorial system** built on a single atmospheric premise: a deep warm-black surface lit from the upper-left by a slightly warmer #1A1218 ellipse that fades to near-black across the lower-right. The off-center light source reads as a studio softbox catching one corner of a magazine spread. Over this, a subtle film-grain overlay at 8% opacity with screen blend adds the photographic graininess of late-night editorial photography. Inside this surface sits a 1px hairline interior frame (paper-blush at 14% opacity, inset 36px from each edge) — the editorial border of every page. Without the lit gradient, the film grain, and the interior frame, the system collapses into flat dark UI.\n\nThe typeface stack is a deliberate three-voice editorial pairing. **DM Serif Display** carries every editorial moment — script titles (treated as the system's \"pink script\"), serif headlines, stat figures, quote text. It runs at weight 400 only; the face has just one weight and that's the system's display voice. The serif scales freely from 32px (table labels) all the way up to 600px (section-divider numerals). **Inter** at weight 300 carries every body paragraph, lead, description, and caption — the ultra-light geometric sans is the system's calm prose voice. **JetBrains Mono** at weight 400 carries every label, kicker, page number, axis tag, runner, and footer string — always uppercase with at least 0.08em positive tracking.\n\nThe palette is anchored to a single signature: **hot pink fuchsia** (`{colors.pink}` — #ED3D8C) against deep warm-black (`{colors.ink-deep}` — #060507). The pink is the entire editorial accent system; it appears as script title color, as kicker color, as chart line color, as pill border, as inline `<em>` switch inside paper-blush headlines, as callout numerals, as rule color, and as the soft halo (text-shadow glow) behind hero script titles. **Paper-blush** (`{colors.paper-blush}` — #F5EDF1) is the secondary text color — used for editorial sans-serif headlines, paragraph copy, and any moment that should read as ink rather than highlight. Muted paper at 55% opacity handles secondary text; hairline paper at 14% handles separators and the interior frame.\n\nDepth is created through three layered mechanisms: the **off-center radial gradient surface** (lit from the upper-left), the **subtle film-grain overlay** (8% opacity, screen blend, adds photographic texture), and the **pink halo text-shadow** on hero script titles (a soft 80–120px glow that simulates the light bleed of large neon-saturated type on photographic paper). There are no drop shadows on any element; the depth is atmospheric and photographic, not structural.\n\n**Density philosophy: sparse-medium with one hero moment.** Pink Script reads as elegant when a single oversized script anchors the slide and the rest is generous negative space punctuated by 2–4 small editorial fragments (a runner, a kicker, a paragraph, a footer). A slide with the hero script taking up 60–70% of the canvas and the supporting copy quietly orbiting the remaining margin is correct. Cramming the canvas with multiple equally-weighted regions breaks the late-night magazine feeling. The exception is the stats slide (5 stat rows side-by-side), the comparison matrix (full-grid table), and the system slide (multiple panels) — these slides are denser by design because the editorial purpose is reference, not poetry. Process and TOC slides are populated but always hierarchical: a giant script header dominates, with smaller card rows orbiting beneath.\n\n**Key Characteristics:**\n- Deep warm-black surface (`{components.slide-surface}`) lit from the upper-left by a radial gradient ellipse.\n- A subtle film-grain overlay (`{components.film-grain}`) on every slide — opacity 0.08, screen blend.\n- A 1px paper-blush interior frame (`{components.hairline-frame}`) inset 36px from each edge, present on every slide.\n- Hot fuchsia pink (`{colors.pink}`) is the single chromatic accent — used as script color, kicker color, line color, pill outline, inline emphasis, and the soft halo behind hero scripts.\n- DM Serif Display carries every editorial moment, scaling from 32px to 600px. There is no second display face.\n- Inter at weight 300 carries every body paragraph — ultra-light sans is the system's prose voice.\n- JetBrains Mono uppercase at 0.08em+ tracking carries every label, page number, and runner string.\n- Top runner and bottom footer chromes appear on every slide; the runner brand text is pink, everything else in chrome is muted paper-blush.\n- The inline `<em>` element switches paper-blush serif headlines to pink — the system's editorial emphasis mechanism.\n\n## Colors\n\n### Palette\n\n- **Ink Deep** (`{colors.ink-deep}` — #060507): The base surface color. A near-black with a faint warm shift. Combined with the radial gradient, this anchors the dark editorial surface.\n- **Ink Violet** (`{colors.ink-violet}` — #0F0D11): A slightly lifted dark with a violet cast. Reserved alternate dark — available but rarely used in current slide types.\n- **Paper Blush** (`{colors.paper-blush}` — #F5EDF1): A warm off-white with a faint pink undertone. The primary editorial text color, the QR-tile background, and the secondary highlight surface. Reads as paper rather than pure white.\n- **Pink** (`{colors.pink}` — #ED3D8C): Hot fuchsia. The system's single chromatic accent. Used as the script title color, kicker color, inline `<em>` color, callout numeral color, rule color, chart line color, pill outline color, and the source color for the halo text-shadow.\n- **Pink Light** (`{colors.pink-light}` — #FF66A8): A brighter pink. Defined but not used in current slide types.\n- **Pink Deep** (`{colors.pink-deep}` — #B81D67): A darker pink. Defined but not used in current slide types.\n- **Line Pink** (`{colors.line-pink}` — rgba(237,61,140,0.32)): Pink at 32% opacity for table row dividers and chart axis lines.\n- **Mute Paper** (`{colors.mute-paper}` — rgba(245,237,241,0.55)): Paper-blush at 55% for muted body text and metadata.\n- **Hair Paper** (`{colors.hair-paper}` — rgba(245,237,241,0.14)): Paper-blush at 14% for the interior hairline frame, dim pill borders, and toc-row dividers.\n\n### Defaults\n\n- **Default slide surface**: `{components.slide-surface}` — the lit warm-black radial gradient. Always.\n- **Default film grain**: `{components.film-grain}` at opacity 0.08 with screen blend. Non-optional.\n- **Default interior frame**: `{components.hairline-frame}` at 1px paper-blush 14%. Non-optional.\n- **Default primary headline color**: For a hero script moment, `{colors.pink}`. For an editorial headline that should read as ink (not highlight), `{colors.paper-blush}`.\n- **Default body text color**: `{colors.paper-blush}` for primary copy; `{colors.mute-paper}` for muted lead and description.\n- **Default kicker color**: `{colors.pink}`. The eyebrow label is always pink.\n- **Default label / metadata color**: `{colors.mute-paper}` for runner, footer, and metadata.\n- **Default line / divider color**: `{colors.pink}` at 45% opacity for soft pink rules; `{colors.hair-paper}` for muted hairlines.\n- **Default emphasis mechanism inside a paper-blush headline**: wrap in `<em>` to switch that word to `{colors.pink}` (font-style stays upright).\n- **Default pill state**: outline (`{components.pill-outline}`) — pink border, pink text.\n- **Default chart series**: pink line for primary; muted paper-blush dashed for secondary.\n\nThe pink is the only chromatic color in regular use; the other pink variants (Pink Light, Pink Deep) are reserved. Don't introduce a second chromatic accent — Pink Script's identity is that it is monochromatically pink.\n\n## Typography\n\n### Font Family\n\nThe system loads three web fonts: **DM Serif Display** (weight 400, italic 0 only) carries every editorial / display moment from 32px up to 600px; **Inter** (weights 300, 400, 500, 600) carries every body paragraph and lead; **JetBrains Mono** (weights 400, 500) carries every label, runner, footer, and metadata string.\n\nThe emotional register of each face is distinct:\n- DM Serif Display reads as **editorial, perfume-magazine, late-night couture** — the face has elegant high-contrast strokes and the system uses it for every moment that should feel literary or magazine-typeset.\n- Inter at weight 300 reads as **calm, contemporary, neutrally elegant** — the ultra-light weight matches the editorial tone without competing with the serif.\n- JetBrains Mono reads as **archival, boutique-catalog, edition-numbered** — the mono uppercase voice handles edition numbers, page positions, runner brand text, and section tags.\n\nA key inline mixing rule: **the `<em>` element inside a DM Serif Display headline switches color to `{colors.pink}`** (font-style normalized to upright). This is the system's primary headline emphasis — pink ink inside paper-blush serif text.\n\nA second inline mixing rule: **a `<sup>` element inside a stat figure renders at ~36px in `{colors.paper-blush}`** with a slight top-padding offset — used for unit suffixes (%, ×, M).\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.script-section}` | 600px | DM Serif Display | 400 | Section-divider mega numeral |\n| `{typography.script-huge}` | 540px | DM Serif Display | 400 | Hero script in a feature display position |\n| `{typography.script-giant}` | 360px | DM Serif Display | 400 | Large editorial script title |\n| `{typography.script-cover}` | 280px | DM Serif Display | 400 | Cover script title |\n| `{typography.script-large}` | 220px | DM Serif Display | 400 | TOC primary script |\n| `{typography.script-med}` | 156px | DM Serif Display | 400 | Process slide primary headline |\n| `{typography.serif-cta}` | 140px | DM Serif Display | 400 | Closing CTA headline (paper-blush color) |\n| `{typography.script-sm}` | 132px | DM Serif Display | 400 | Stat-slide headline, matrix headline |\n| `{typography.serif-stat}` | 116px | DM Serif Display | 400 | Stat row figure |\n| `{typography.callout-num}` | 120px | DM Serif Display | 400 | Chart callout numeral |\n| `{typography.serif-quote}` | 92px | DM Serif Display | 400 | Quote-slide body text |\n| `{typography.serif-chart-h}` | 90px | DM Serif Display | 400 | Chart-slide headline |\n| `{typography.serif-section-h}` | 88px | DM Serif Display | 400 | Section divider supporting headline |\n| `{typography.serif-toc-num}` | 64px | DM Serif Display | 400 | TOC row numeral |\n| `{typography.serif-toc-title}` | 56px | DM Serif Display | 400 | TOC row title |\n| `{typography.serif-quote-attr}` | 48px | DM Serif Display | 400 | Quote attribution name |\n| `{typography.serif-process-h}` | 38px | DM Serif Display | 400 | Process step heading |\n| `{typography.serif-matrix-label}` | 32px | DM Serif Display | 400 | Matrix row label |\n| `{typography.body}` | 24px | Inter | 300 | Standard body paragraph |\n| `{typography.body-muted}` | 22px | Inter | 300 | Muted lead and description |\n| `{typography.body-toc-desc}` | 24px | Inter | 300 | TOC row description |\n| `{typography.mono-runner}` | 24px | JetBrains Mono | 400 | Top runner and bottom footer |\n| `{typography.mono-kicker}` | 22px | JetBrains Mono | 400 | Pink kicker eyebrow |\n| `{typography.mono-label}` | 22px | JetBrains Mono | 400 | Standard paper-blush label |\n| `{typography.mono-cover-pre}` | 28px | JetBrains Mono | 400 | Cover preamble line (with 0.42em wide tracking) |\n| `{typography.mono-pill}` | 16px | JetBrains Mono | 400 | Pill text |\n\n### Defaults\n\n- **Default primary content headline**: `{typography.script-sm}` (132px) — when the slide is a content moment with a strong headline.\n- **Default cover / opening headline**: `{typography.script-cover}` (280px) — the cover script lockup.\n- **Default section-divider mega numeral**: `{typography.script-section}` (600px).\n- **Default body paragraph**: `{typography.body}` (24px Inter 300).\n- **Default muted lead / description**: `{typography.body-muted}` (22px Inter 300, mute-paper color).\n- **Default label / kicker**: `{typography.mono-kicker}` (22px JetBrains Mono, pink).\n- **Default footer / runner**: `{typography.mono-runner}` (24px JetBrains Mono).\n- **Default stat figure**: `{typography.serif-stat}` (116px) with a 36px paper-blush `<sup>` for unit.\n- **Default weight for any display element**: 400 (DM Serif Display has only one weight).\n- **Default weight for body**: 300.\n\nWhen unsure, the canonical pattern is: a 22px pink kicker + a 132–156px DM Serif Display headline (with one `<em>`-wrapped word in pink if extra emphasis is needed) + a 22–24px Inter 300 paragraph in muted paper-blush. That three-element pattern is the system's most reliable rhythm.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every slide carries the radial-gradient surface, the film-grain overlay, AND the 1px paper-blush interior frame.** All three together. Removing any one collapses the editorial-magazine reading.\n- **Every hero script element (sizes 280px and larger) carries the pink halo text-shadow.** `{components.pink-glow}` for hero scripts (80px blur); `{components.pink-glow-mega}` for section-divider mega numerals (120px blur). The halo simulates the light bleed of neon-saturated print.\n- **Every script color is `{colors.pink}`.** DM Serif Display in any other color is not \"script\" — it becomes \"serif headline.\" The pink color is what defines script vs. headline in this system.\n- **Paper-blush serif headlines may switch one word to pink via `<em>`** — this is the system's headline emphasis mechanism. The `<em>` stays upright (font-style: normal).\n- **DM Serif Display headlines always have `padding-bottom: .1em` (or `.12em` for the largest script).** This compensates for the serif descenders so the visual baseline reads correctly aligned.\n- **All JetBrains Mono is uppercase with at least 0.08em positive tracking** (most chrome and labels use 0.12–0.18em; the cover preamble uses 0.42em).\n- **Body text is always Inter at weight 300.** Inter at any other weight is not body — switching to 400 reads as a different tone.\n- **The kicker is always pink** in `{colors.pink}`. The eyebrow color is non-negotiable.\n- **Runner brand text on the left is always pink; the right-side meta is always muted paper-blush.** The pink brand text is the system's persistent identity signal.\n- **The page-position footer uses paper-blush base text with a pink `<em>` for the current number.** Format: `<span>03 / 09</span>` where `03` is wrapped in `<em>` to render pink.\n\n### Typography Principles\n\nThe rhythm of Pink Script is **oversized pink script + paper-blush serif paragraph headline + muted Inter prose + small mono editorial tag**. Switching any voice (e.g., setting a script in Inter, or body in DM Serif) collapses the system's editorial register. The serif scales freely from 32px to 600px; choose the size based on the slide's hero moment, not on a fixed scale.\n\nItalic letterforms are not used (DM Serif Display does have an italic, but it's not loaded by the template). The `<em>` tag is repurposed as a pink color switch. Underline is not used. Bold weight is not available in DM Serif Display, and using bold Inter for body breaks the calm prose voice.\n\n## Layout\n\n### Canvas System\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component. All sizes are pixel-fixed; the stage handles proportional scaling.\n\nMost slides use **absolute positioning** with edge-anchored elements. The standard content area is `inset: 140px 60px 140px 60px` — a 140px top reserve for the runner + headline area, 140px bottom reserve for the footer, and 60px left/right edge margins.\n\n### Padding and Anchoring\n\n| Anchor | Value | Use |\n|---|---|---|\n| `edge-x` | 60px | Left and right edge margins for content |\n| `edge-top-chrome` | 60px | Top inset for the runner chrome |\n| `edge-bottom-chrome` | 60px | Bottom inset for the footer chrome |\n| `content-top` | 140px | Top inset for slide body content (below runner) |\n| `content-bottom` | 140px | Bottom inset for slide body content (above footer) |\n| `inner-frame-inset` | 36px | The hairline interior frame inset |\n\n### Chrome Frame\n\nEvery slide carries a **top runner** at 60px top / 60px sides — a brand name on the left (always pink) and a section / chapter tag on the right (muted paper-blush). The runner is JetBrains Mono uppercase at 24px with 0.14em tracking.\n\nEvery slide also carries a **bottom footer** at 60px bottom / 60px sides — typically a source or confidentiality string on the left and a page-position marker on the right. The page-position uses paper-blush base with a pink `<em>` for the current number (e.g., `01 / 09`).\n\nThe **hairline interior frame** at 1px paper-blush 14% sits at `inset: 36px` on every slide. It is the editorial border of the magazine page and present unconditionally.\n\n## Depth and Elevation\n\n### No Box Shadows, Atmospheric Depth Only\n\nThe system uses **zero box-shadow declarations** on any structural element. Depth comes from three atmospheric layers:\n\n1. **The radial-gradient surface** (`{components.slide-surface}`) — lit from the upper-left by a warm dark ellipse fading to near-black across the lower-right. This creates the impression of a studio softbox catching one corner of the page.\n2. **The film-grain overlay** (`{components.film-grain}`) — 8% opacity, screen blend, adds photographic graininess to the surface.\n3. **The pink halo text-shadow** on hero script titles — a soft 80–120px blur in pink at low alpha that simulates the light bleed of large neon-saturated type on photographic paper.\n\n### No Drop Shadows on Cards or Panels\n\nCards, tables, and panels do not carry shadows. The system's \"card\" pattern is structural rather than elevated: a region defined by a border or a left-rule, sitting flat on the surface.\n\n### Hairline Rules as Structural Depth\n\nWhere the system needs to separate regions, it uses:\n- 1px pink at 45% opacity (`{components.pink-rule}`) for soft pink rules.\n- 1px paper-blush at 14% (`{components.hair-paper}`) for muted hairline separators.\n- 1px pink at 32% (`{colors.line-pink}`) for table row dividers and chart axis lines.\n\nNever a 2px or thicker rule. Never a colored rule outside pink and paper.\n\n## Shapes and Treatment\n\n### Border Radius\n\n| Value | Use |\n|---|---|\n| 0px | Cards, panels, table cells, QR tiles, runner / footer text |\n| 999px | None — pills here are explicitly rectangular |\n\nThe system has **zero border-radius** on any structural element. Pills are 0-radius rectangles (despite the \"pill\" naming convention). The only round element is the small chart-callout circle marker (an SVG `<circle>` element marking an inflection point).\n\n### Border Weights\n\n- **1px solid paper-blush at 14%** — the universal interior hairline frame.\n- **1px solid pink** (`{colors.pink}`) — pill outlines.\n- **1px solid pink at 32%** (`{colors.line-pink}`) — table dividers, chart axes.\n- **1px solid paper-blush at 14%** — TOC row dividers, footer separators.\n- **1px solid pink** at full opacity — left callout-rail border, top-of-step border in process slides.\n- **1px dashed pink at 18%** — chart grid lines.\n\nNo other border weights exist. There is no 2px, 3px, or thicker border anywhere in the system.\n\n### Decorative Element Types\n\n**Hero script title** — A DM Serif Display headline at 220–600px in pink with the halo text-shadow. The defining moment of any slide that uses it. Always pink, always with the glow, always carries `padding-bottom: .1em` to compensate for descenders.\n\n**Paper-blush serif headline** — A DM Serif Display headline at 88–140px in paper-blush. Used when the moment should read as ink rather than highlight. May contain `<em>` to switch one word to pink.\n\n**Pink kicker** — A 22px JetBrains Mono uppercase eyebrow in `{colors.pink}` placed above a headline. The system's most consistent appearance of pink alongside the hero script.\n\n**Mono runner / footer** — Standard JetBrains Mono chrome at 24px / 0.14em tracking. The brand on the runner is always pink; the rest is muted paper-blush.\n\n**Pink rule (`{components.pink-rule}`)** — 1px pink at 45% opacity. Used as a soft separator.\n\n**Hairline rule (`{components.hair-rule}`)** — 1px paper-blush at 14% opacity. Used as a muted separator and as the TOC row divider.\n\n**Callout rail (`{components.callout-rail}`)** — A 1px pink left border with right-aligned content padding-left 24px. Used as a vertical callout container beside charts or beside a chapter explanation.\n\n**Stat row (`{components.stat-row}`)** — A 240px serif figure paired with a mono label + Inter description, separated from the next row by a 1px paper hairline. Stat figures are pink; descriptions are muted paper-blush.\n\n**Pills (`{components.pill-outline}`, `{components.pill-solid}`, `{components.pill-dim}`)** — Three pill states: hollow pink (default), solid pink with deep-ink text (affirmative / featured), and dim hairline (de-emphasized). All are 0-radius rectangles.\n\n**QR tile (`{components.qr-tile}`)** — A 180×180 paper-blush square with 12px white padding and an SVG QR inside. The only large light-surface element in the system; it functions as a \"ticket\" object on the CTA slide.\n\n**Chart callout** — A 120px pink serif numeral with a 0.5em paper-colored unit suffix, plus a small mono label and a 22px muted Inter description, anchored to the right of a chart by a 1px pink callout rail.\n\n**Chart line** — A 3px solid pink line for the primary series; a 2px paper-blush dashed line for the secondary series. The inflection point on the primary line carries a 9px solid pink circle with an 18px hollow ring at 50% opacity and a vertical dashed line dropping to the axis.\n\n**Process step** — A vertical column anchored by a 1px solid pink top border with a 96px pink serif numeral, a 38px paper-blush serif heading, and an Inter description. Steps are separated by a 24px gap and connected by a small pink arrow glyph.\n\n**Matrix table** — A 4-column grid with the first column being a 32px paper-blush serif label, the column header row colored pink, and the \"our column\" row tinted with `rgba(237, 61, 140, 0.08)` to mark it.\n\n## Do's and Don'ts\n\n### Do\n- Apply the radial-gradient surface, the film-grain overlay, and the 1px paper-blush interior frame to every slide. All three are non-optional.\n- Set hero script titles in `{colors.pink}` with the halo text-shadow. The glow is part of the script's identity.\n- Use DM Serif Display for every editorial / display moment. The serif is the system's only editorial face — don't substitute a second face.\n- Set body paragraphs in Inter at weight 300. The ultra-light weight is the system's calm prose voice.\n- Use JetBrains Mono uppercase with at least 0.08em tracking for every label, page number, runner, and footer string.\n- Use `<em>` inside a paper-blush serif headline to switch one word to pink — the system's primary headline emphasis.\n- Place a pink kicker above every primary headline. The pink eyebrow is the system's editorial signal.\n- Use the pink left-rule callout (`{components.callout-rail}`) to anchor a stat, a callout, or a chapter explanation to the right of a chart or content region.\n- Add `padding-bottom: .1em` to every DM Serif Display headline. The serif descenders need compensation.\n- Use the page-position footer pattern with pink `<em>` for the current number: `<em>03</em> / 09`.\n\n### Don't\n- Don't omit the film grain or the interior hairline frame. The system's editorial atmosphere depends on both.\n- Don't use box-shadow on any panel or card. Depth is atmospheric, not structural.\n- Don't introduce a second chromatic accent. Pink is the only accent. Adding red, blue, or green breaks the system.\n- Don't render the pink fuchsia as text on the paper-blush surface — the contrast inverts and looks like a typo.\n- Don't put body copy in DM Serif Display. The serif is for editorial moments, not paragraphs.\n- Don't put display headlines in Inter. The sans is the body voice, not the headline voice.\n- Don't round any element. Cards, pills, tables, QR tiles — all strict rectangles.\n- Don't use blurred shadows on any element. The only \"shadow\" in the system is the pink halo text-shadow on hero scripts, and that's a glow, not a drop shadow.\n- Don't use italic letterforms. The `<em>` tag is repurposed as a pink color switch.\n- Don't crowd a slide with multiple equally-weighted regions. The system reads as elegant when one hero moment dominates.\n\n## Responsive Behavior\n\nThe system targets a **fixed 1920×1080 canvas** rendered inside a `<deck-stage>` web component. The stage handles proportional scaling to the browser viewport — all pixel-fixed sizes inside the canvas scale uniformly.\n\n### Presenter Behavior\n- Navigation, scaling, and presenter chrome are handled by the `<deck-stage>` component.\n- Keyboard, touch, and mouse-wheel navigation are managed by the stage.\n- The canvas is constant 1920×1080 regardless of viewport.\n\n### Print Behavior\nPrint export depends on the deck-stage component's print handling. The pink halo text-shadow and the film-grain overlay may render inconsistently in PDF export — test before assuming visual parity.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face (recommended) | Weight | Notes |\n|---|---|---|---|---|\n| Script / display (DM Serif Display) | DM Serif Display | **思源宋体 Noto Serif SC** | **900** | Heavy serif that holds visual mass on dark backgrounds. The default choice. |\n| Display alternate (delicate moments) | DM Serif Display | 站酷小薇体 ZCOOL XiaoWei | 400 | Couture-thin display face — use only at very large sizes (400px+) where delicacy reads as intentional. Too thin on dark backgrounds at typical headline sizes (40–200px). |\n| Body (Inter 300) | Inter | Noto Serif SC (思源宋体) | 400 | Serif body keeps the editorial register cohesive with the heavy display. |\n| Label / runner (JetBrains Mono UPPERCASE tracked) | JetBrains Mono | Noto Sans SC | 400 (do not force monospace on CJK) | |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. DM Serif Display tokens become `\"DM Serif Display, 'Noto Serif SC', serif\"` with `font-weight: 900` on the Chinese run; Inter body tokens become `\"Inter, 'Noto Serif SC', system-ui, sans-serif\"`; JetBrains Mono tokens become `\"JetBrains Mono, 'Noto Sans SC', monospace\"`. Latin glyphs render in their original face; CJK falls through automatically.\n\n**Critical**: when Chinese text uses the display role, set `font-weight: 900` explicitly. DM Serif Display's \"single weight\" is already visually heavy because it's a high-contrast display serif — the equivalent CJK heaviness lives at weight 900 in Noto Serif SC, not weight 400.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=Inter:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500;700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPink Script (After Hours) is a nocturnal couture system whose entire editorial identity rests on DM Serif Display in hot fuchsia pink at sizes up to 600px against dim warm-black paper. The visual weight of DM Serif Display at any size is substantial — high-contrast strokes, serif terminals, and a typographic mass that holds against the dark background.\n\nThe recommended Chinese equivalent is **思源宋体 Noto Serif SC at weight 900**. This carries the same visual mass as DM Serif Display: bold serif terminals, sufficient stroke density to read clearly against the dark surface, and the editorial register that defines the system. Weight 900 is non-negotiable for display moments — anything lighter (400, 500, even 700) will visually disappear against the pink-glow + dark-paper combination and break the entire couture register.\n\n**站酷小薇体 ZCOOL XiaoWei** is a viable secondary option for moments where extreme delicacy reads as intentional — a single 400-px+ pull-quote, a hairline section divider title, a brand wordmark at the very top of a cover slide. Its single-weight 400 with extreme stroke contrast carries a different feeling: dressier, more whisper-thin, more vintage-Vogue than modern-fashion-editorial. For most display work, choose Noto Serif SC 900; reach for XiaoWei only when the moment is genuinely a delicate accent at extreme size.\n\nThe pink halo text-shadow (`{components.pink-glow}` at 80–120px blur) transfers perfectly to Chinese characters regardless of which display face you choose. **Apply the same glow to every Chinese display moment in pink** — the neon bleed effect is script-agnostic and the late-night magazine atmosphere survives the script switch fully.\n\nThe pink color (`{colors.pink}` — #ED3D8C) as the only chromatic accent works unchanged. The inline `<em>` color switch (paper-blush headline with one word in pink) is a clean transfer to Chinese — wrap one CJK character or one phrase in `<em>` and the pink ink switch reads exactly the same.\n\n**Inter at weight 300 for body** does not transfer directly. Noto Serif SC at weight 400 is the recommended body face — its high-contrast serif stroke matches the couture register of the system's overall feel. Body color stays paper-blush (`{colors.paper-blush}`); the ultra-light register is achieved through size, paper-blush color, and the muted 55%-opacity lead, not through font weight.\n\nJetBrains Mono uppercase tracked labels (runner brand, page numbers, footer chrome) do not transfer to CJK. Pure Latin chrome strings (the brand name itself, edition numbers like `01 / 09`) keep JetBrains Mono. For Chinese chrome text (a section / chapter tag in the upper-right), use Noto Sans SC 400 at the same 24px size with letter-spacing reset to 0 and no uppercase.\n\nThe radial-gradient surface, the film-grain overlay, the 1px paper-blush interior frame — all script-agnostic. The pink halo, the kicker, the callout rail, the stat-row pattern, the matrix-cell — all transfer unchanged.\n\n### Known CJK Gap\n\nDM Serif Display's \"single weight\" is misleading: it's a high-contrast display serif that reads as visually heavy at any size. The Chinese equivalent heaviness lives at Noto Serif SC **weight 900**, not weight 400 — using weight 400 for display will make Chinese headlines look limp and disconnected from the bold pink callouts. The system's reliance on size for hierarchy still works in Chinese, but you must lock display weight at 900 to preserve the visual mass.\n\nZCOOL XiaoWei is the only CDN-loadable Chinese face that captures the \"high-contrast couture serif\" character in its proportions, but its single-weight 400 is too thin for most display sizes on this template's dark surface. Treat XiaoWei as a niche option, not the default.\n\n## Iteration Guide\n\n1. Every new slide background is the lit radial gradient (`{components.slide-surface}`) with film grain and the interior hairline frame. Don't skip any of the three layers.\n2. Every new hero script title is DM Serif Display in `{colors.pink}` with the halo text-shadow at 80–120px blur.\n3. Every new editorial headline that should read as ink (not highlight) is DM Serif Display in `{colors.paper-blush}`. Use `<em>` inside to switch a word to pink.\n4. Every new body paragraph is Inter at weight 300 in paper-blush (full) or mute-paper (muted).\n5. Every new label, runner, footer, or metadata tag is JetBrains Mono uppercase at 0.08em+ tracking.\n6. Every new kicker eyebrow is pink. Don't render a kicker in any other color.\n7. Every new pill is a 0-radius rectangle. Choose outline (default), solid (affirmative), or dim (de-emphasized) state.\n8. Every new table or matrix uses 1px pink-at-32% row dividers and no vertical borders.\n9. Every chart uses a 3px solid pink line for primary and a 2px paper-blush dashed line for secondary. Don't introduce a third color.\n10. The runner brand text is always pink; the right-side meta is always muted paper-blush. Don't swap.\n\n## Known Gaps\n\n- The system depends on a `<deck-stage>` web component loaded via `deck-stage.js`. Without it, the 1920×1080 canvas will not scale and slides will render at native pixel size.\n- The film-grain overlay uses a data-URI SVG with `feTurbulence`. Some browsers (older Safari) render the noise inconsistently or skip it in PDF export.\n- DM Serif Display has only weight 400. There is no bold or italic variant available — the system has no fallback weight scale and depends on size alone for hierarchy.\n- The pink halo text-shadow uses fixed 80px and 120px blur values. At very small viewport scales, the glow may dominate the type; at very large scales, the glow may appear weak.\n- The `{colors.pink-light}`, `{colors.pink-deep}`, and `{colors.ink-violet}` tokens are defined but inactive in current slide types. They are reserved for future variation.\n- The QR-tile SVG inside the CTA slide is a hand-coded pattern of `<rect>` elements that does not encode a real scannable code. Real QR codes need to be generated externally.\n- Chart line points and inflection markers are SVG `<polyline>` coordinates that must be computed manually. There is no data-binding layer.\n- The cover script lockup uses `padding-left: 180px` on the second line for an indented hanging effect. This is a hardcoded layout decision and doesn't generalize to other word lengths — long second lines may break the centering.\n- The runner and footer rely on `white-space: nowrap` to prevent line-wrap. Extremely long brand names or page-position strings may overflow the 60px edge margin.\n- The matrix `cell.us` column highlight is a hardcoded `rgba(237, 61, 140, 0.08)` wash. Tinting other columns requires per-column class additions.\n","frontmatter":{"version":"alpha","name":"Pink Script (After Hours)","description":"A nocturnal couture editorial system rendered in hot fuchsia ink on dim warm-black paper, with a soft film-grain overlay and a hairline interior frame. DM Serif Display carries every script and editorial moment at sizes up to 600px; Inter at weight 300 carries the body voice; JetBrains Mono carries the boutique-catalog metadata. The aesthetic borrows from glossy fashion magazine spreads, late-night perfume advertising, and the editorial pages of high-end zines — closer to a Maison's seasonal lookbook than a startup deck.","colors":{"ink-deep":"#060507","ink-violet":"#0F0D11","paper-blush":"#F5EDF1","pink":"#ED3D8C","pink-light":"#FF66A8","pink-deep":"#B81D67","line-pink":"rgba(237, 61, 140, 0.32)","mute-paper":"rgba(245, 237, 241, 0.55)","hair-paper":"rgba(245, 237, 241, 0.14)"},"color-aliases":{"c-bg":"ink-deep","c-fg":"paper-blush","c-accent":"pink","c-line":"line-pink"},"typography":{"script-huge":{"fontFamily":"DM Serif Display, serif","fontSize":"540px","fontWeight":400,"lineHeight":1.05,"letterSpacing":"-0.01em","color":"{colors.pink}"},"script-section":{"fontFamily":"DM Serif Display, serif","fontSize":"600px","fontWeight":400,"lineHeight":0.82,"letterSpacing":"-0.02em","color":"{colors.pink}"},"script-giant":{"fontFamily":"DM Serif Display, serif","fontSize":"360px","fontWeight":400,"lineHeight":1.05,"color":"{colors.pink}"},"script-cover":{"fontFamily":"DM Serif Display, serif","fontSize":"280px","fontWeight":400,"lineHeight":1.02,"letterSpacing":"-0.015em","color":"{colors.pink}"},"script-large":{"fontFamily":"DM Serif Display, serif","fontSize":"220px","fontWeight":400,"lineHeight":1.04,"color":"{colors.pink}"},"script-med":{"fontFamily":"DM Serif Display, serif","fontSize":"156px","fontWeight":400,"lineHeight":1.04,"color":"{colors.pink}"},"script-sm":{"fontFamily":"DM Serif Display, serif","fontSize":"132px","fontWeight":400,"lineHeight":1.06,"color":"{colors.pink}"},"serif-cta":{"fontFamily":"DM Serif Display, serif","fontSize":"140px","fontWeight":400,"lineHeight":1.04,"letterSpacing":"-0.015em","color":"{colors.paper-blush}"},"serif-h2":{"fontFamily":"DM Serif Display, serif","fontSize":"132px","fontWeight":400,"lineHeight":1.06,"color":"{colors.paper-blush}"},"serif-quote":{"fontFamily":"DM Serif Display, serif","fontSize":"92px","fontWeight":400,"lineHeight":1.05,"letterSpacing":"-0.005em","color":"{colors.paper-blush}"},"serif-chart-h":{"fontFamily":"DM Serif Display, serif","fontSize":"90px","fontWeight":400,"lineHeight":1.06,"color":"{colors.paper-blush}"},"serif-section-h":{"fontFamily":"DM Serif Display, serif","fontSize":"88px","fontWeight":400,"lineHeight":1.06,"color":"{colors.paper-blush}"},"serif-stat":{"fontFamily":"DM Serif Display, serif","fontSize":"116px","fontWeight":400,"lineHeight":0.9,"color":"{colors.pink}"},"serif-toc-num":{"fontFamily":"DM Serif Display, serif","fontSize":"64px","fontWeight":400,"lineHeight":1,"color":"{colors.pink}"},"serif-toc-title":{"fontFamily":"DM Serif Display, serif","fontSize":"56px","fontWeight":400,"lineHeight":1.05,"color":"{colors.paper-blush}"},"serif-quote-attr":{"fontFamily":"DM Serif Display, serif","fontSize":"48px","fontWeight":400,"lineHeight":1.05,"color":"{colors.paper-blush}"},"serif-process-h":{"fontFamily":"DM Serif Display, serif","fontSize":"38px","fontWeight":400,"lineHeight":1.05,"color":"{colors.paper-blush}"},"serif-matrix-label":{"fontFamily":"DM Serif Display, serif","fontSize":"32px","fontWeight":400,"lineHeight":1.2,"color":"{colors.paper-blush}"},"body":{"fontFamily":"Inter, system-ui, sans-serif","fontSize":"24px","fontWeight":300,"lineHeight":1.55,"color":"{colors.paper-blush}"},"body-muted":{"fontFamily":"Inter, system-ui, sans-serif","fontSize":"22px","fontWeight":300,"lineHeight":1.5,"color":"{colors.mute-paper}"},"body-toc-desc":{"fontFamily":"Inter, system-ui, sans-serif","fontSize":"24px","fontWeight":300,"lineHeight":1.4,"color":"{colors.mute-paper}"},"mono-runner":{"fontFamily":"JetBrains Mono, monospace","fontSize":"24px","fontWeight":400,"letterSpacing":"0.14em","textTransform":"uppercase"},"mono-kicker":{"fontFamily":"JetBrains Mono, monospace","fontSize":"22px","fontWeight":400,"letterSpacing":"0.14em","textTransform":"uppercase","color":"{colors.pink}"},"mono-label":{"fontFamily":"JetBrains Mono, monospace","fontSize":"22px","fontWeight":400,"letterSpacing":"0.14em","textTransform":"uppercase","color":"{colors.paper-blush}"},"mono-cover-pre":{"fontFamily":"JetBrains Mono, monospace","fontSize":"28px","fontWeight":400,"letterSpacing":"0.42em","textTransform":"uppercase","color":"{colors.paper-blush}"},"mono-pill":{"fontFamily":"JetBrains Mono, monospace","fontSize":"16px","fontWeight":400,"letterSpacing":"0.08em","textTransform":"uppercase"}},"spacing":{"edge-x":"60px","edge-top-chrome":"60px","edge-bottom-chrome":"60px","content-top":"140px","content-bottom":"140px","inner-frame-inset":"36px"},"canvas":{"width":"1920px","height":"1080px"},"components":{"slide-surface":{"background":"radial-gradient(ellipse 90% 70% at 30% 30%, #1A1218 0%, #0A0709 55%, #050306 100%)","description":"Universal dark surface — radial ellipse from a slightly warmer #1A1218 in the upper-left fading to near-black in the lower-right. The off-center light source is part of the system's identity."},"film-grain":{"selector":".slide::before","background":"fractalNoise SVG via data URI, baseFrequency=0.9, octaves=2","opacity":0.08,"mixBlendMode":"screen","description":"Subtle film grain overlay on every slide via ::before. Opacity 0.08 with screen blend — barely visible but reads as photographic grain rather than digital flatness."},"hairline-frame":{"selector":".slide::after","position":"absolute; inset: 36px","border":"1px solid {colors.hair-paper}","description":"1px paper-blush-at-14%-opacity interior frame inset 36px from each slide edge. Always present. Functions as the editorial border of the magazine page."},"runner":{"position":"absolute; top: 60px; left: 60px; right: 60px","fontFamily":"JetBrains Mono, monospace","fontSize":"24px","letterSpacing":"0.14em","textTransform":"uppercase","description":"Top metadata runner — brand name on left (colored pink), section / chapter tag on right (muted paper-blush)."},"footer":{"position":"absolute; bottom: 60px; left: 60px; right: 60px","fontFamily":"JetBrains Mono, monospace","fontSize":"24px","letterSpacing":"0.14em","textTransform":"uppercase","description":"Bottom metadata runner — source / confidentiality on left, page-position (e.g. '03 / 09') on right. Page-position has paper-blush base text with a pink ::em for the current number."},"pink-rule":{"height":"1px","background":"{colors.pink}","opacity":0.45,"description":"Hairline pink rule for soft section separators."},"hair-rule":{"height":"1px","background":"{colors.paper-blush}","opacity":0.25,"description":"Hairline paper rule for muted section separators."},"pink-glow":{"textShadow":"0 0 80px rgba(237, 61, 140, 0.18)","description":"Soft pink halo behind large script titles. Applied via text-shadow on hero serif text only."},"pink-glow-mega":{"textShadow":"0 0 120px rgba(237, 61, 140, 0.22)","description":"Stronger pink halo for section-divider mega numerals."},"callout-rail":{"borderLeft":"1px solid {colors.pink}","paddingLeft":"24px","description":"Pink left rule with right-aligned content — used as a callout container beside a chart, beside a chapter explanation."},"matrix-cell":{"padding":"16px 24px","borderBottom":"1px solid {colors.line-pink}","fontFamily":"Inter, sans-serif","fontSize":"22px","fontWeight":300,"color":"{colors.paper-blush}","description":"Comparison matrix cell. Rows are separated by hairline pink-at-32% rules; columns are gap-separated, no vertical borders."},"matrix-cell-us":{"background":"rgba(237, 61, 140, 0.08)","description":"Highlighted matrix row variant — soft pink wash to mark the 'our' column."},"pill-outline":{"border":"1px solid {colors.pink}","color":"{colors.pink}","padding":"6px 14px","fontFamily":"JetBrains Mono, monospace","fontSize":"16px","letterSpacing":"0.08em","textTransform":"uppercase","description":"Hollow pink pill — 1px pink border with pink mono text. The default pill state."},"pill-solid":{"background":"{colors.pink}","color":"{colors.ink-deep}","border":"1px solid {colors.pink}","fontWeight":500,"description":"Solid pink pill — pink fill, deep-ink text. Affirmative / featured state."},"pill-dim":{"borderColor":"{colors.hair-paper}","color":"{colors.mute-paper}","description":"Dim pill — muted paper border, muted paper text. The de-emphasized state."},"qr-tile":{"width":"180px","height":"180px","background":"{colors.paper-blush}","padding":"12px","description":"QR-code container — solid paper-blush square with 12px white padding around the SVG QR. The only large light-surface element in the system."},"stat-row":{"display":"grid; columns: 240px 1fr","borderBottom":"1px solid {colors.hair-paper}","paddingBottom":"16px","description":"Stat row pattern — large pink serif figure on the left (with a paper-blush superscript unit) paired with a mono label and Inter description on the right. Rows are separated by 1px paper hairline."},"callout-num":{"fontFamily":"DM Serif Display, serif","fontSize":"120px","lineHeight":0.9,"color":"{colors.pink}","description":"Chart callout number — large pink serif numeral with smaller paper-colored unit suffix."},"arrow-glyph":{"width":"24px","height":"24px","color":"{colors.pink}","description":"Small pink right-arrow SVG used between process steps."}}},"isInternal":false,"tokens":11437,"sizeBytes":45749},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pink-script/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/pink-script/preview.md","title":"Pink-script Skill","category":"anthropic-skill","format":"markdown","content":"# Pink Script — After Hours Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/pink-script/design.md`\n- Preview card: `bold-template-pack/templates/pink-script/preview.md`\n\n## Selection Metadata\n\n- Slug: `pink-script`\n- Tagline: Black canvas, hot pink accent, pearl-cream paper, Instrument Serif headlines: late-night editorial luxury.\n- Mood: nocturnal, moody, intentional, luxe, expressive\n- Tone: literary, sultry, considered, magazine\n- Formality: medium-high\n- Density: low\n- Scheme: dark\n- Best for: Anything that should feel nocturnal, intentional, and a little luxe: fashion brand decks, creator personal brands, after-hours / nightlife / spirits launches, luxury product reveals, editorial features. Also a striking unexpected pick for a tech keynote, research synthesis, or business pitch that wants to land with magnetic confidence.\n- Avoid for: Daytime corporate-professional and traditional B2B contexts where the dark canvas with hot-pink accent reads as too styled or too expressive.\n\n## Visual Snapshot\n\nA nocturnal couture editorial system rendered in hot fuchsia ink on dim warm-black paper, with a soft film-grain overlay and a hairline interior frame. DM Serif Display carries every script and editorial moment at sizes up to 600px; Inter at weight 300 carries the body voice; JetBrains Mono carries the boutique-catalog metadata. The aesthetic borrows from glossy fashion magazine spreads, late-night perfume advertising, and the editorial pages of high-end zines — closer to a Maison's seasonal lookbook than a startup deck.\n\nPink Script is a nocturnal couture editorial system built on a single atmospheric premise: a deep warm-black surface lit from the upper-left by a slightly warmer #1A1218 ellipse that fades to near-black across the lower-right. The off-center light source reads as a studio softbox catching one corner of a magazine spread. Over this, a subtle film-grain overlay at 8% opacity with screen blend adds the photographic graininess of late-night editorial photography. Inside this surface sits a 1px hairline interior frame (paper-blush at 14% opacity, inset 36px from each edge) — the editorial border of every page. Without the lit gradient, the film grain, and the interior frame, the system collapses...\n\n## Preview Ingredients\n\n- Palette: ink-deep #060507; ink-violet #0F0D11; paper-blush #F5EDF1; pink #ED3D8C; pink-light #FF66A8; pink-deep #B81D67\n- Typography: DM Serif Display; Inter; JetBrains Mono\n- Signature move: Deep warm-black surface ({components.slide-surface}) lit from the upper-left by a radial gradient ellipse.\n- Signature move: A subtle film-grain overlay ({components.film-grain}) on every slide — opacity 0.08, screen blend.\n- Signature move: A 1px paper-blush interior frame ({components.hairline-frame}) inset 36px from each edge, present on every slide.\n- Signature move: Hot fuchsia pink ({colors.pink}) is the single chromatic accent — used as script color, kicker color, line color, pill outline, inline emphasis, and the soft halo behind hero scripts.\n- Signature move: DM Serif Display carries every editorial moment, scaling from 32px to 600px. There is no second display face.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":1062,"sizeBytes":4799},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/playful/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/playful/design.md","title":"Playful","category":"anthropic-skill","format":"markdown","content":"---\nversion: alpha\nname: Playful\ndescription: \"A warm, hand-crafted editorial system built on a peach-clay canvas with charcoal ink as the only \\\"color.\\\" Display type runs in Syne (weight 700–800, tight negative tracking); body type runs in Space Grotesk at weight 400–500. The aesthetic borrows from independent studio decks, risograph zines, and sketchbook spreads: organic blob frames, scribbled SVG doodles, slightly rotated cards, and double-stroke offset borders give every slide a hand-touched, unpolished warmth. The effect is creative-studio editorial, not corporate pitch — confident but human, structured but loose.\"\n\ncolors:\n  bg: \"#F0C8A0\"\n  bg-alt: \"#E8B88E\"\n  light: \"#F7DEC6\"\n  text: \"#1A1A1A\"\n\ncolor-aliases:\n  accent: text\n\ntypography:\n  display-hero:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(4rem, 10vw, 9rem)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  display:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(3rem, 8vw, 7rem)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.02em\n  headline:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(2.5rem, 6vw, 5rem)\"\n    fontWeight: 700\n    lineHeight: 1.0\n    letterSpacing: -0.01em\n  statement:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(2.5rem, 5vw, 4.5rem)\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  title:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(2rem, 4vw, 3.5rem)\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  title-sm:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"1.3rem\"\n    fontWeight: 700\n    lineHeight: 1.2\n  number-hero:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"clamp(4rem, 8vw, 7rem)\"\n    fontWeight: 800\n    lineHeight: 1.0\n  number-md:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"2.5rem\"\n    fontWeight: 800\n    lineHeight: 1.0\n  number-sm:\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: \"2rem\"\n    fontWeight: 800\n    lineHeight: 1.0\n  body:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"clamp(1rem, 1.2vw, 1.1rem)\"\n    fontWeight: 400\n    lineHeight: 1.7\n  body-md:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"1.2rem\"\n    fontWeight: 500\n    lineHeight: 1.6\n  label-eyebrow:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 600\n    lineHeight: 1.2\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  caption:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 500\n    lineHeight: 1.4\n  tag:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 600\n    lineHeight: 1.2\n\nspacing:\n  pad-slide-lg: \"4rem 5rem\"\n  pad-slide-md: \"3rem 4rem\"\n  pad-card-lg: \"2rem 3rem\"\n  pad-card-md: \"1.5rem\"\n  gap-lg: \"3rem\"\n  gap-md: \"2rem\"\n  gap-sm: \"1.5rem\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  rough-box:\n    border: \"3px solid {colors.text}\"\n    background: \"{colors.bg}\"\n    padding: \"1.5rem\"\n    offsetShadowOffset: \"6px 6px\"\n    offsetShadowBorder: \"2–3px solid {colors.text}\"\n    description: \"Generic content card with a double-stroke effect — the inner box has a 3px solid border, and an absolutely-positioned ::before pseudo-element offsets a second 2–3px border down-and-right by 6–8px to simulate a hand-drawn double outline. No fill on the offset; the canvas shows through.\"\n  filled-block:\n    background: \"{colors.text}\"\n    color: \"{colors.bg}\"\n    padding: \"1.5rem\"\n    description: \"Inverted card: dark charcoal background with peach text. Used as the visual counterpoint to outlined cards in a collage of mixed treatments.\"\n  blob-frame-organic:\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"40% 60% 70% 30% / 40% 50% 60% 50%\"\n    description: \"Organic outlined blob, asymmetric border-radius. Decorative wrapper that holds a smaller solid filled-blob inside it.\"\n  blob-frame-pebble:\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"255px 15px 225px 15px / 15px 225px 15px 255px\"\n    description: \"Pebble-shaped frame with extreme alternating border-radius — two opposing corners pulled long, the other two pinched short. Reads as a hand-drawn lozenge.\"\n  blob-fill:\n    background: \"{colors.text}\"\n    borderRadius: \"60% 40% 30% 70% / 60% 30% 70% 40%\"\n    description: \"Solid dark blob with asymmetric organic radius. Used inside an outlined blob-frame or floating on its own as decorative mass.\"\n  scribble-svg:\n    stroke: \"{colors.text}\"\n    strokeWidth: 2\n    fill: none\n    strokeLinecap: round\n    description: \"Inline SVG path drawn as a single hand-drawn line — wavy stub, scribbled circle, star outline, squiggle, arrow. Always 2px stroke, rounded caps. Placed absolutely in corners and edges as decorative breath.\"\n  doodle-circle:\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"50%\"\n    description: \"Plain round outlined circle used as a decorative anchor in slide corners.\"\n  doodle-rect:\n    border: \"3px solid {colors.text}\"\n    rotation: \"5–10deg\"\n    description: \"Plain outlined rectangle, slightly rotated, used as a decorative anchor in slide corners.\"\n  card-rotated:\n    transform: \"rotate(-3deg to 3deg)\"\n    description: \"Any card or block can carry a small ±3deg rotation. Rotations stagger so adjacent cards rotate in opposite directions — never all in the same direction, never more than 3deg.\"\n  step-node-circle:\n    width: 64px\n    height: 64px\n    border: \"3px solid {colors.text}\"\n    borderRadius: \"50%\"\n    background: \"{colors.bg}\"\n    fontFamily: \"Syne, sans-serif\"\n    fontSize: 1.5rem\n    fontWeight: 800\n    description: \"Round outlined node containing a single numeric digit at display weight. Used as a timeline or process marker; alternates between outlined (bg fill) and filled (charcoal fill, bg text).\"\n  avatar-placeholder:\n    width: 60px\n    height: 60px\n    background: \"{colors.text}\"\n    borderRadius: \"50%\"\n    description: \"Solid dark circle used as a portrait stand-in inside a team or people card.\"\n  tag-pill:\n    background: \"{colors.text}\"\n    color: \"{colors.bg}\"\n    padding: \"0.4rem 0.8rem\"\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 600\n    description: \"Small charcoal pill with peach text, anchored to the bottom-left of an image frame as a category label.\"\n  bar-chart:\n    barFillSolid: \"{colors.text}\"\n    barFillOutlined: \"3px solid {colors.text} + transparent\"\n    axisStroke: \"3px solid {colors.text}\"\n    description: \"Custom HTML bar chart. Bars are either solid charcoal (primary series) or outlined transparent (secondary series). Axes are 3px solid charcoal lines, no grid.\"\n  vertical-text:\n    fontFamily: \"Syne, sans-serif\"\n    fontWeight: 700\n    letterSpacing: 0.1em\n    transform: \"rotate(90deg)\"\n    description: \"Display-weight text rotated 90deg, anchored to a slide edge as a magazine-style spine label.\"\n  ghost-blob:\n    background: \"{colors.text}\"\n    borderRadius: \"40% 60% 70% 30% / 40% 50% 60% 50%\"\n    opacity: 0.08\n    description: \"Oversized organic blob at very low opacity placed behind content as atmospheric wallpaper. Functions like a watermark cloud.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nPlayful is a **hand-crafted editorial system** anchored by a single warm canvas — a peach-clay `{colors.bg}` (#F0C8A0) — with charcoal `{colors.text}` (#1A1A1A) as the only meaningful \"color.\" Everything reads as ink-on-clay-paper. There are no secondary brand colors, no gradients, no chromatic accents. The system commits fully to a one-color discipline and finds its expressiveness in shape, weight, rotation, and hand-drawn marks rather than in palette variety.\n\nThe typeface stack is **Syne for display, Space Grotesk for body**. Syne is the personality — a high-contrast display sans with quirky humanist proportions that reads as a contemporary independent studio voice, not a corporate sans. It is used at weights 700 and 800 with tight negative letter-spacing (-0.01em to -0.03em) for every headline, statement, statistic, and number. Space Grotesk is the workhorse — a steady, neutral geometric sans at weight 400–500 for body and 500–600 for labels. The pairing reads as \"expressive editorial built on a reliable grid.\"\n\nThe color philosophy is **monochrome warmth**: a single ink color on a single warm surface, plus two tonal siblings of the canvas (`{colors.bg-alt}` slightly darker for image placeholders, `{colors.light}` slightly lighter for gentle layering). The peach is saturated enough to read as a deliberate aesthetic choice, not a neutral. The ink is slightly softened from pure black (#1A1A1A) to sit comfortably on the warm paper. The system's emotional register is \"studio sketchbook\" — confident but warm, structured but unpolished.\n\nDepth is **double-stroke offset borders** and **hand-drawn marks**, not blurred shadows. The signature treatment: a 3px charcoal border on a card, plus a `::before` pseudo-element offset down-and-right by 6–8px carrying a second 2–3px border — the visual effect is a hand-drawn double outline that suggests imperfect tracing. Combined with small rotations (±0.5deg to ±3deg on cards) and scribbled SVG paths placed in slide corners, the system reads as crafted-by-hand rather than rendered-by-software.\n\n**Density philosophy: medium-low.** Each slide is anchored by a single dominant element — a statement, a chart, a roster — surrounded by deliberate breathing room and one or two decorative scribbles. Crowding the canvas with simultaneous cards, doodles, and copy collapses the hand-touched feeling into clutter. The correct density is one substantive moment per slide with one or two SVG scribbles or organic blobs serving as visual punctuation in the negative space.\n\n**Key Characteristics:**\n- Peach-clay canvas (`{colors.bg}`) with charcoal ink (`{colors.text}`) as the only color. No secondary brand palette.\n- Syne at weight 700–800 with negative letter-spacing for every display and numeric moment; Space Grotesk at 400–500 for body.\n- Double-stroke offset borders on cards — a 3px outline plus a 6–8px offset ghost border via `::before`.\n- Small ±0.5deg to ±3deg rotations on cards, blocks, and statistics for a hand-placed feel.\n- Organic blob shapes with asymmetric border-radius act as decorative frames and fills.\n- Inline 2px-stroke SVG scribbles (squiggles, stars, circles, arrows) live in slide corners as hand-drawn punctuation.\n- No web shadows. Depth comes from double borders, rotation, and ink-density contrast.\n- One dominant element per slide with generous negative space — never wall-to-wall content.\n\n## Colors\n\n### Palette\n- **Background** (`{colors.bg}` — #F0C8A0): The peach-clay canvas. The default surface for every slide. Saturated enough to be the system's signature; warm enough that charcoal ink reads softly rather than starkly.\n- **Background Alt** (`{colors.bg-alt}` — #E8B88E): A slightly darker tonal sibling of the canvas. Used as a fill for image placeholder regions and for subtle surface differentiation when one card needs to read as \"behind\" another without committing to a new color.\n- **Light** (`{colors.light}` — #F7DEC6): A slightly lighter tonal sibling of the canvas. Available for gentle layering when a region needs to lift off the background by a single tonal step without introducing white.\n- **Text/Ink** (`{colors.text}` — #1A1A1A): Charcoal ink — the single non-canvas color in the system. Softened from pure black so it sits as warm ink on warm paper. Used for all body text, all display text, all borders, all SVG strokes, all filled blocks, all dark fills.\n\nThe `accent` alias resolves to `{colors.text}` — the system has no separate accent color. The \"accent\" in Playful is contrast against the canvas, not a third hue.\n\n### Defaults\n- **Default surface background**: `{colors.bg}` — every slide opens on peach-clay.\n- **Default headline color**: `{colors.text}` — always. Headlines are never tinted or recolored.\n- **Default body text color**: `{colors.text}` — sometimes at opacity 0.7–0.9 for de-emphasis, but the underlying color remains charcoal.\n- **Default border color**: `{colors.text}` — every outlined card, blob, doodle, and chart axis is charcoal.\n- **Default text color on filled charcoal blocks**: `{colors.bg}` — peach text on dark surfaces is the only color inversion.\n- **Default image-placeholder fill**: `{colors.bg-alt}` — slightly darker than the canvas so the placeholder reads as a distinct region without using white.\n- **Default decorative-blob fill**: `{colors.text}` at full opacity (foreground) or at 0.08 opacity (atmospheric ghost-blob behind content).\n\nThe system has no concept of \"primary vs secondary color.\" Every visual decision is a binary between canvas (peach) and ink (charcoal), modulated by opacity, scale, and shape.\n\n## Typography\n\n### Font Family\nThe system pairs two carefully chosen Google Fonts:\n\n- **Syne** (display): A contemporary humanist display sans with quirky letterforms, narrow apertures, and slightly compressed proportions. Used at weight 700 and 800 for every display moment — headlines, statements, titles, numerals, vertical labels. Its character is what distinguishes Playful from a generic warm-toned deck: Syne reads as an independent studio voice, not a corporate header.\n- **Space Grotesk** (body): A clean, slightly geometric sans-serif with a friendly humanist warmth. Used at weight 400–500 for body paragraphs, 500–600 for labels and captions. Provides a steady, legible counterweight to Syne's expressiveness.\n\nThere is no third face. Italic and underline are not used. Emphasis comes from weight (700 → 800), size, and the Syne-vs-Space-Grotesk contrast itself.\n\n### Type Scale\n\n| Token | Size (clamp) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-hero}` | 4–9rem | Syne | 800 | Oversized cover or opening date/title |\n| `{typography.display}` | 3–7rem | Syne | 800 | Closing or major declarative headline |\n| `{typography.headline}` | 2.5–5rem | Syne | 700 | Primary section headline |\n| `{typography.statement}` | 2.5–4.5rem | Syne | 700 | Long-form quoted statement or manifesto line |\n| `{typography.title}` | 2–3.5rem | Syne | 700 | Region or section title |\n| `{typography.number-hero}` | 4–7rem | Syne | 800 | Hero statistic numeral |\n| `{typography.number-md}` | 2.5rem | Syne | 800 | Mid-scale ordinal or stat numeral |\n| `{typography.number-sm}` | 2rem | Syne | 800 | Inline ordinal or step numeral |\n| `{typography.title-sm}` | 1.3rem | Syne | 700 | Card title within a small block |\n| `{typography.body-md}` | 1.2rem | Space Grotesk | 500 | Subtitle or emphasized body |\n| `{typography.body}` | 1–1.1rem | Space Grotesk | 400 | Paragraph body |\n| `{typography.label-eyebrow}` | 0.85rem | Space Grotesk | 600 | Section eyebrow above a headline, uppercase tracked |\n| `{typography.caption}` | 0.85rem | Space Grotesk | 500 | Subtitle, fine print, footnote |\n| `{typography.tag}` | 0.75rem | Space Grotesk | 600 | Pill tag text inside a charcoal label |\n\n### Defaults\n- **Default size for a primary section headline**: `{typography.headline}` (2.5–5rem clamp).\n- **Default size for a cover or major opening moment**: `{typography.display-hero}` (4–9rem clamp).\n- **Default size for paragraph body**: `{typography.body}` (1–1.1rem clamp).\n- **Default size for a subtitle or emphasized lead body**: `{typography.body-md}` (1.2rem).\n- **Default size for any inline caption, footnote, or fine print**: `{typography.caption}` (0.85rem).\n- **Default size for a hero numerical figure**: `{typography.number-hero}` (4–7rem clamp).\n- **Default size for a stat tile or ordinal numeral**: `{typography.number-md}` (2.5rem).\n- **Default weight for any display element (headline, statement, title, numeral)**: 700 or 800 — never lower.\n- **Default weight for any body element**: 400 or 500.\n\nWhen unsure between `{typography.title}` and `{typography.headline}` for the primary text on a slide, reach for `{typography.headline}` — `{typography.title}` is for sub-regions within a slide.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every display element is set in Syne.** Headlines, statements, titles, numerals, vertical labels, decorative single-character marks — all Syne. Using Space Grotesk at large sizes is the wrong system signal.\n- **Every Syne element uses negative letter-spacing**: -0.01em to -0.03em depending on size. Syne at default tracking reads as untreated; the negative tracking is what gives display type its tight, compressed personality.\n- **Every body and label element is set in Space Grotesk.** Syne for body paragraphs reads as overwrought.\n- **Eyebrow labels are uppercase with 0.15em letter-spacing.** A label without uppercase + tracked spacing reads as a body fragment, not a label.\n- **Statistics and numerals are always weight 800.** Even mid-scale numerals (2rem) follow the display-weight convention. A weight-500 numeral reads as inventory, not a brag.\n- **Numerals and statistics may carry a small rotation (±0.5deg to ±1deg)** when they sit as standalone stat-items rather than inside a chart or table. The rotation reinforces the hand-placed feeling.\n\n### Typography Principles\nThe system's typographic rhythm comes from the **Syne-vs-Space-Grotesk contrast**, not from mixing weights within a face. A slide that uses only Syne at varying weights reads as monotonous; a slide that uses only Space Grotesk reads as understated to the point of corporate. The correct rhythm is Syne headline + Space Grotesk body, repeated with discipline.\n\nLine-height: tight on display (0.85–1.1), generous on body (1.5–1.7). Never use tight line-height on body or generous line-height on display — both inversions break the rhythm.\n\nItalic does not exist in this system. Underline does not exist. Emphasis is achieved by switching face (body → display) or weight (400 → 700), never by italicizing.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` — full viewport. Every `.slide` is absolutely positioned to fill the viewport, and only the `.active` slide is visible (opacity 1, others at opacity 0). Slide navigation is JS-driven via arrow keys, space, click on next/prev buttons, and touch swipe. A 4px-tall charcoal progress bar runs along the bottom of the viewport, growing to indicate slide position. All sizes use `clamp()` so the layout fluidly scales without breakpoints down to a mobile reflow at 768px.\n\n### Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide-lg}` | 4rem 5rem | Cover, statement, and closing slides — generous outer padding |\n| `{spacing.pad-slide-md}` | 3rem 4rem | Standard content slides — outer padding |\n| `{spacing.pad-card-lg}` | 2rem 3rem | Large card or contact block interior padding |\n| `{spacing.pad-card-md}` | 1.5rem | Standard card interior padding |\n| `{spacing.gap-lg}` | 3rem | Large grid/flex gaps between major regions |\n| `{spacing.gap-md}` | 2rem | Standard grid/flex gaps between cells |\n| `{spacing.gap-sm}` | 1.5rem | Tight inline gaps |\n\n### Chrome\nA fixed 48px×48px navigation cluster sits at bottom-right (prev arrow, slide counter, next arrow — all outlined in 2px charcoal). A 4px-tall charcoal progress bar runs flush along the bottom edge of the viewport. Neither is part of the slide composition; they exist as the deck's persistent presenter chrome and should not be styled against.\n\nThe progress bar and nav buttons are the only persistent UI elements. Slides themselves carry no top bar, no footer chrome, no slide numbers within the canvas.\n\n## Depth and Elevation\n\n### Double-Stroke Offset Border (Primary Technique)\nThe signature depth treatment is a **double-stroke offset border**. A card carries a 3px solid charcoal border, and a `::before` pseudo-element absolutely positioned over the card carries a second 2–3px border offset 6–8px down-and-right. The offset border has no fill — the canvas shows through. The visual effect is a hand-drawn double outline that suggests imperfect tracing, like a pen pulled twice along an edge. This is the system's elevation device; it replaces what most systems would do with a `box-shadow`.\n\n### Rotation (Secondary Technique)\nSmall rotations (±0.5deg to ±3deg) on cards, blocks, statistics, and decorative shapes provide a hand-placed feeling. Rotation directions alternate across adjacent elements — never two cards rotated the same direction next to each other — to suggest someone laid each piece down by hand rather than via a snapped grid.\n\n### Atmospheric Ghost-Blob\nA signature treatment: an oversized organic blob (`{components.ghost-blob}`) filled with charcoal at 0.08 opacity, placed absolutely in a slide corner as atmospheric wallpaper. The blob reads as a soft watermark cloud behind the content. Use sparingly — at most one ghost-blob per slide, anchored to a corner the primary content does not occupy.\n\n### No Web Shadows\nThe system uses **no `box-shadow` blur values, no `drop-shadow`, no rgba shadows**. All apparent depth comes from the double-stroke offset border, rotation, and ink-density contrast. A blurred shadow on any element breaks the hand-crafted aesthetic — the marks should look drawn, not rendered.\n\n## Shapes and Treatment\n\n### Border Radius Scale\n| Value | Use |\n|---|---|\n| 0px | Cards, blocks, tags, image frames, table cells |\n| 50% | Round avatar placeholders, step-node circles, doodle circles |\n| Asymmetric organic (e.g. `40% 60% 70% 30% / 40% 50% 60% 50%`) | Blob frames and blob fills only |\n| Pebble-asymmetric (e.g. `255px 15px 225px 15px / 15px 225px 15px 255px`) | Pebble-shaped frames only |\n\nThe system avoids smooth medium radii (4px, 8px, 12px) — corners are either sharp, perfectly round, or organically blob-shaped. The middle ground reads as a generic web app, which is the wrong signal.\n\n### Border Weights\n- **3px solid `{colors.text}`** — the standard outlined-card and blob-frame border weight.\n- **2–3px solid `{colors.text}`** — the offset ghost-border weight on the `::before` pseudo-element (slightly thinner than the primary).\n- **3px solid `{colors.text}`** — the chart axis weight (X and Y axes on bar charts).\n- **2px solid `{colors.text}`** — the nav-button border weight and the timeline-track horizontal line.\n- **2px stroke** — the standard SVG scribble stroke weight with rounded line-caps.\n\n### Decorative Element Types\n\n**Rough-box card** — A rectangular content card with the signature double-stroke offset border. Background can be canvas peach (default), or solid charcoal (inverted card). Padding from the `{spacing.pad-card-*}` scale. Optional small rotation (±0.5–3deg).\n\n**Organic blob frame** — A decorative outlined wrapper with asymmetric border-radius. Used as a portrait frame or decorative anchor; often holds a smaller solid blob-fill inside. Two characteristic shapes: the wavy organic blob (`{components.blob-frame-organic}`) and the pebble shape (`{components.blob-frame-pebble}`).\n\n**Solid blob fill** — A charcoal organic shape with asymmetric border-radius. Used either inside an outlined blob-frame (creating a frame-and-mass pairing) or floating alone as a decorative mass.\n\n**Scribble SVG** — Inline SVG path drawn as a single 2px-stroke charcoal line with round caps. The vocabulary: wavy stub, star outline, scribbled circle, squiggle waveform, arrow, concentric circles. Placed absolutely in slide corners or edges as decorative breath. Every slide gets at least one scribble; the most populated slides carry two or three.\n\n**Doodle circle / doodle rect** — Plain outlined circle or rectangle, slightly rotated, placed absolutely in slide corners as a minimal decorative anchor. The simpler counterpart to the blob shapes — when a slide needs visual punctuation but a blob would feel too organic.\n\n**Step-node circle** — A 64px round outlined node containing a single digit in Syne 800. Alternates between outlined (canvas fill, charcoal digit) and filled (charcoal fill, canvas digit) in sequence — odd steps filled, even steps outlined, or any consistent pattern.\n\n**Tag pill** — A small charcoal rectangle with peach text at 0.75rem weight 600. Anchored to the bottom-left of an image frame as a category label. The only inverted text-on-charcoal element that is not a full card.\n\n**Vertical spine label** — Syne 700 text at 1.5rem rotated 90deg, anchored to a slide's right edge with 0.1em letter-spacing. Reads as a magazine-spine wayfinder.\n\n**Ghost-blob wallpaper** — Oversized organic blob at 0.08 opacity, placed absolutely in a slide corner as atmospheric wallpaper.\n\n**Connector arrow doodle** — A small SVG sketched arrow (single 2px line with chevron head) used to suggest \"next\" or \"see also\" in the negative space of a slide.\n\n## Do's and Don'ts\n\n### Do\n- Use Syne for every display moment (headline, statement, title, number, vertical label) and Space Grotesk for every body and label. The two-face contrast is the system's typographic rhythm.\n- Apply negative letter-spacing (-0.01em to -0.03em) to every Syne element. Default tracking on Syne reads as untreated.\n- Apply the double-stroke offset border to every primary content card — 3px main outline plus a 6–8px offset ghost border via `::before`. This is the system's signature elevation device.\n- Place a scribbled SVG mark (squiggle, star, circle, arrow) in at least one corner of every slide as hand-drawn breath. The marks are punctuation, not content.\n- Give cards, blocks, and statistics a small ±0.5–3deg rotation. Alternate rotation direction across adjacent elements so nothing reads as snapped to a grid.\n- Use `{colors.text}` (charcoal) as the only ink color. Headlines, body, borders, scribbles, fills — all the same color.\n- Reach for `{colors.bg-alt}` when a region needs to read as a distinct surface without introducing white or a new color.\n- Let negative space breathe. One dominant element per slide plus one or two scribbles is the correct density.\n- Pair an outlined blob frame with a smaller solid blob fill inside it when you need a portrait-like decorative anchor.\n- Place an oversized ghost-blob (charcoal at 0.08 opacity) in a slide corner when the negative space feels empty but a scribble would be too small.\n\n### Don't\n- Don't introduce a third color. The system is peach-canvas + charcoal-ink only. No blues, no reds, no chart-segment palettes — chart bars are solid charcoal or outlined charcoal, never colored.\n- Don't use blurred `box-shadow`. All depth comes from double borders and rotation. A blurred shadow breaks the hand-drawn aesthetic immediately.\n- Don't apply medium border-radius values (4px, 8px, 12px). Corners are sharp, fully round, or organically blob-shaped — nothing between.\n- Don't use Space Grotesk for headlines or display moments. Syne is the personality face; substituting Space Grotesk loses the studio voice.\n- Don't use Syne for body paragraphs. It reads as overwrought at small sizes and at low weights.\n- Don't rotate elements more than 3deg. Beyond ±3deg the hand-placed feeling tips into wonky and amateur.\n- Don't rotate every element in the same direction. Alternate ±directions across adjacent elements; uniformity reads as a tilted canvas, not as hand-placement.\n- Don't crowd a slide with simultaneous cards, statistics, and doodles. The system reads as expensive when sparse and broken when dense.\n- Don't use italic or underline for emphasis. Switch face or weight instead.\n- Don't put display-weight text at default tracking. Always tighten Syne with negative letter-spacing.\n\n## Responsive Behavior\n\nThe system targets `100vw × 100vh` and uses `clamp()` throughout, so type and padding scale fluidly between viewport sizes without media queries. A single media query at `max-width: 768px` reflows multi-column grids to single-column, collapses the horizontal timeline track to vertical, and reduces slide padding to 2rem.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `Space`, or `Enter`.\n- Slides reverse via `ArrowLeft`.\n- The active slide carries the `.active` class; inactive slides are visibility-hidden at opacity 0.\n- Slide transitions use a 0.6s opacity fade.\n- A 4px-tall charcoal progress bar runs along the bottom of the viewport, growing as the deck advances.\n- A bottom-right nav cluster shows prev/next buttons (48px outlined squares) and the current/total slide counter.\n- Touch swipe horizontal on mobile advances/reverses.\n\n### Print Behavior\nNo `@media print` rule is defined. The deck is web/viewport-first; printing will not render correctly without custom print styles.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin face | Chinese face | Weight |\n|---|---|---|---|\n| Display / headline / numeral (Syne 700–800) | Syne | 站酷快乐体 ZCOOL KuaiLe | 400 (only weight available) |\n| Body / label (Space Grotesk 400–600) | Space Grotesk | 悠哉字体 Yozai | 400 |\n\n### Mixed-Content Strategy\n\nStrategy A — extend each token's `fontFamily` to include the Chinese face after the Latin face. Syne tokens become `\"Syne, ZCOOL KuaiLe, sans-serif\"`; Space Grotesk tokens become `\"Space Grotesk, Yozai, sans-serif\"`. Latin glyphs render in the original face; CJK characters fall through automatically.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Syne:wght@700;800&family=Space+Grotesk:wght@400;500;600;700&family=ZCOOL+KuaiLe&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- Line-height: body 1.75–1.85, display 1.15–1.25\n- Letter-spacing: 0 on CJK\n- Text-transform: no uppercase on CJK\n- Full-width punctuation （，。：；！？「」（））\n- No period on display headlines (Chinese typography convention)\n- Pangu spacing 盘古之白 (space between CJK and Latin: `使用 Claude` not `使用Claude`)\n- One font per sentence\n\n### Aesthetic Notes for This System\n\nPlayful is a hand-crafted editorial system built on Syne (quirky humanist display) plus Space Grotesk (warm geometric body) on a peach-clay canvas. The Chinese transfer is exceptionally strong because both Chinese faces selected here carry the same \"warm, hand-touched, independent studio\" register as the Latin pairing.\n\n**站酷快乐体 ZCOOL KuaiLe** is a rounded, friendly Chinese display face with quirky humanist proportions — the closest CDN-available equivalent to Syne's expressive studio voice. At display weights (4–9rem), KuaiLe reads as a contemporary independent Chinese studio voice, not a corporate or formal one. It pairs naturally with the peach canvas and charcoal ink. **Drop the negative letter-spacing (-0.01em to -0.03em) for Chinese display** — KuaiLe is designed on a square em-box and tightening causes glyph collision. The face's intrinsic warmth replaces what negative tracking does for Syne.\n\n**悠哉字体 Yozai** is a Chinese sans-serif designed for relaxed body reading — slightly rounded terminals, friendly humanist proportions, designed to match the warmth that Space Grotesk brings to Latin. Set every Chinese body paragraph and label in Yozai 400. The eyebrow label treatment (0.15em letter-spacing + uppercase in Latin) does not transfer to CJK; for Chinese eyebrows, use Yozai at the same 0.85rem size with letter-spacing 0 and no uppercase — small size alone reads as label.\n\nThe double-stroke offset border, the small ±3deg rotations, the organic blob shapes, the SVG scribbles, the ghost-blob wallpaper — all script-agnostic. The single-color discipline (peach + charcoal) and the hand-crafted aesthetic survive the script switch fully.\n\nThe system's typographic rhythm (Syne-vs-Space-Grotesk contrast) becomes (KuaiLe-vs-Yozai contrast) in pure Chinese — both pairs carry the same \"expressive editorial built on a reliable grid\" rhythm. Statistics and numerals are pure digits and transfer unchanged in Syne 800; only when a stat carries a Chinese unit suffix (`亿`, `万`) does the suffix glyph fall through to KuaiLe.\n\n### Known CJK Gap\n\nZCOOL KuaiLe and Yozai are both single-weight faces (400). The system's reliance on weight contrast (Syne 700 vs 800 for sub-display hierarchy; Space Grotesk 400 vs 500 vs 600 for label hierarchy) collapses to size-only hierarchy in pure Chinese. This is not a meaningful loss — Playful's hierarchy is primarily size-driven anyway, and the missing weight steps don't change the visual rhythm enough to matter. The rotation, scribble, and double-border treatments carry the system's character regardless of weight availability.\n\n## Iteration Guide\n\n1. Any new card uses the rough-box pattern: 3px charcoal border, peach background (or charcoal if inverted), padding from `{spacing.pad-card-*}`, and a `::before` ghost-border offset 6–8px down-and-right at 2–3px weight.\n2. Any new card carries a small rotation (±0.5–3deg). Alternate rotation direction with neighboring cards; never align all cards to the same angle.\n3. Any new headline uses Syne at weight 700–800 with negative letter-spacing. If the headline is the primary slide moment, reach for `{typography.headline}` or `{typography.display}` — not `{typography.title}` (which is sub-region scale).\n4. Any new body or label uses Space Grotesk at weight 400–600. Use `{typography.label-eyebrow}` (0.85rem, weight 600, uppercase, 0.15em tracking) for the small label above a headline.\n5. Any new statistic or numeral uses Syne at weight 800 with negative letter-spacing. Even small numerals (2rem) follow the display-weight convention.\n6. Any new slide gets at least one scribbled SVG mark in a corner — squiggle, star, circle, arrow. Stroke 2px with rounded line-caps in `{colors.text}`.\n7. Any decorative shape uses asymmetric organic border-radius (blob) or sharp 0px (rectangle) or 50% (round). Avoid medium radii.\n8. If the slide negative space feels heavy, add a ghost-blob (charcoal at 0.08 opacity, oversized organic shape) anchored to a corner the content does not occupy.\n9. Charts (bar, donut, line) use only `{colors.text}` and `{colors.bg-alt}` as fills. Do not introduce chromatic chart palettes.\n10. Cards may be either outlined (default — canvas fill, charcoal border, charcoal text) or inverted (charcoal fill, peach text). Inverted cards are the system's emphasis device; reserve them for the cell you want to anchor the slide's attention.\n\n## Known Gaps\n\n- The system loads two Google Fonts (Syne, Space Grotesk) over the network. If fonts fail to load, the fallback sans-serif will render but the system's voice will be lost. Self-hosting is recommended for production.\n- The double-stroke offset border (`::before` with 6–8px offset) requires the parent card to have `position: relative` and the pseudo-element to be visually inside the card's bounding box plus the offset. Cards near a slide edge may have their offset border clipped.\n- The mobile responsive breakpoint at 768px reflows grids but does not adjust the absolutely-positioned decorative SVGs and blobs — they remain at desktop coordinates and may overlap or fall off-screen on small viewports. Treat the responsive behavior as basic, not polished.\n- The peach canvas (#F0C8A0) has a strong cultural register (earthy, warm, slightly rustic). It does not pair well with cool-toned brand palettes and is not interchangeable with a neutral cream or white — the warmth is foundational.\n- Image placeholders (`{colors.bg-alt}` fills with a centered \"IMG 01\" label) are stubs only. Production decks need real images that respect the warm palette; cool-toned photos will fight the canvas.\n- There is no defined dark-mode variant. The system is single-mode (warm peach canvas only).\n- The hover states on nav buttons (background fills to charcoal, text inverts to peach) are interactive presenter-chrome behaviors and are not part of the deck's slide composition.\n","frontmatter":{"version":"alpha","name":"Playful","description":"A warm, hand-crafted editorial system built on a peach-clay canvas with charcoal ink as the only \"color.\" Display type runs in Syne (weight 700–800, tight negative tracking); body type runs in Space Grotesk at weight 400–500. The aesthetic borrows from independent studio decks, risograph zines, and sketchbook spreads: organic blob frames, scribbled SVG doodles, slightly rotated cards, and double-stroke offset borders give every slide a hand-touched, unpolished warmth. The effect is creative-studio editorial, not corporate pitch — confident but human, structured but loose.","colors":{"bg":"#F0C8A0","bg-alt":"#E8B88E","light":"#F7DEC6","text":"#1A1A1A"},"color-aliases":{"accent":"text"},"typography":{"display-hero":{"fontFamily":"Syne, sans-serif","fontSize":"clamp(4rem, 10vw, 9rem)","fontWeight":800,"lineHeight":0.9,"letterSpacing":"-0.03em"},"display":{"fontFamily":"Syne, sans-serif","fontSize":"clamp(3rem, 8vw, 7rem)","fontWeight":800,"lineHeight":0.9,"letterSpacing":"-0.02em"},"headline":{"fontFamily":"Syne, sans-serif","fontSize":"clamp(2.5rem, 6vw, 5rem)","fontWeight":700,"lineHeight":1,"letterSpacing":"-0.01em"},"statement":{"fontFamily":"Syne, sans-serif","fontSize":"clamp(2.5rem, 5vw, 4.5rem)","fontWeight":700,"lineHeight":1.1,"letterSpacing":"-0.01em"},"title":{"fontFamily":"Syne, sans-serif","fontSize":"clamp(2rem, 4vw, 3.5rem)","fontWeight":700,"lineHeight":1.1,"letterSpacing":"-0.01em"},"title-sm":{"fontFamily":"Syne, sans-serif","fontSize":"1.3rem","fontWeight":700,"lineHeight":1.2},"number-hero":{"fontFamily":"Syne, sans-serif","fontSize":"clamp(4rem, 8vw, 7rem)","fontWeight":800,"lineHeight":1},"number-md":{"fontFamily":"Syne, sans-serif","fontSize":"2.5rem","fontWeight":800,"lineHeight":1},"number-sm":{"fontFamily":"Syne, sans-serif","fontSize":"2rem","fontWeight":800,"lineHeight":1},"body":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"clamp(1rem, 1.2vw, 1.1rem)","fontWeight":400,"lineHeight":1.7},"body-md":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"1.2rem","fontWeight":500,"lineHeight":1.6},"label-eyebrow":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"0.85rem","fontWeight":600,"lineHeight":1.2,"letterSpacing":"0.15em","textTransform":"uppercase"},"caption":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"0.85rem","fontWeight":500,"lineHeight":1.4},"tag":{"fontFamily":"Space Grotesk, sans-serif","fontSize":"0.75rem","fontWeight":600,"lineHeight":1.2}},"spacing":{"pad-slide-lg":"4rem 5rem","pad-slide-md":"3rem 4rem","pad-card-lg":"2rem 3rem","pad-card-md":"1.5rem","gap-lg":"3rem","gap-md":"2rem","gap-sm":"1.5rem"},"canvas":{"width":"100vw","height":"100vh"},"components":{"rough-box":{"border":"3px solid {colors.text}","background":"{colors.bg}","padding":"1.5rem","offsetShadowOffset":"6px 6px","offsetShadowBorder":"2–3px solid {colors.text}","description":"Generic content card with a double-stroke effect — the inner box has a 3px solid border, and an absolutely-positioned ::before pseudo-element offsets a second 2–3px border down-and-right by 6–8px to simulate a hand-drawn double outline. No fill on the offset; the canvas shows through."},"filled-block":{"background":"{colors.text}","color":"{colors.bg}","padding":"1.5rem","description":"Inverted card: dark charcoal background with peach text. Used as the visual counterpoint to outlined cards in a collage of mixed treatments."},"blob-frame-organic":{"border":"3px solid {colors.text}","borderRadius":"40% 60% 70% 30% / 40% 50% 60% 50%","description":"Organic outlined blob, asymmetric border-radius. Decorative wrapper that holds a smaller solid filled-blob inside it."},"blob-frame-pebble":{"border":"3px solid {colors.text}","borderRadius":"255px 15px 225px 15px / 15px 225px 15px 255px","description":"Pebble-shaped frame with extreme alternating border-radius — two opposing corners pulled long, the other two pinched short. Reads as a hand-drawn lozenge."},"blob-fill":{"background":"{colors.text}","borderRadius":"60% 40% 30% 70% / 60% 30% 70% 40%","description":"Solid dark blob with asymmetric organic radius. Used inside an outlined blob-frame or floating on its own as decorative mass."},"scribble-svg":{"stroke":"{colors.text}","strokeWidth":2,"fill":"none","strokeLinecap":"round","description":"Inline SVG path drawn as a single hand-drawn line — wavy stub, scribbled circle, star outline, squiggle, arrow. Always 2px stroke, rounded caps. Placed absolutely in corners and edges as decorative breath."},"doodle-circle":{"border":"3px solid {colors.text}","borderRadius":"50%","description":"Plain round outlined circle used as a decorative anchor in slide corners."},"doodle-rect":{"border":"3px solid {colors.text}","rotation":"5–10deg","description":"Plain outlined rectangle, slightly rotated, used as a decorative anchor in slide corners."},"card-rotated":{"transform":"rotate(-3deg to 3deg)","description":"Any card or block can carry a small ±3deg rotation. Rotations stagger so adjacent cards rotate in opposite directions — never all in the same direction, never more than 3deg."},"step-node-circle":{"width":"64px","height":"64px","border":"3px solid {colors.text}","borderRadius":"50%","background":"{colors.bg}","fontFamily":"Syne, sans-serif","fontSize":"1.5rem","fontWeight":800,"description":"Round outlined node containing a single numeric digit at display weight. Used as a timeline or process marker; alternates between outlined (bg fill) and filled (charcoal fill, bg text)."},"avatar-placeholder":{"width":"60px","height":"60px","background":"{colors.text}","borderRadius":"50%","description":"Solid dark circle used as a portrait stand-in inside a team or people card."},"tag-pill":{"background":"{colors.text}","color":"{colors.bg}","padding":"0.4rem 0.8rem","fontFamily":"Space Grotesk, sans-serif","fontSize":"0.75rem","fontWeight":600,"description":"Small charcoal pill with peach text, anchored to the bottom-left of an image frame as a category label."},"bar-chart":{"barFillSolid":"{colors.text}","barFillOutlined":"3px solid {colors.text} + transparent","axisStroke":"3px solid {colors.text}","description":"Custom HTML bar chart. Bars are either solid charcoal (primary series) or outlined transparent (secondary series). Axes are 3px solid charcoal lines, no grid."},"vertical-text":{"fontFamily":"Syne, sans-serif","fontWeight":700,"letterSpacing":"0.1em","transform":"rotate(90deg)","description":"Display-weight text rotated 90deg, anchored to a slide edge as a magazine-style spine label."},"ghost-blob":{"background":"{colors.text}","borderRadius":"40% 60% 70% 30% / 40% 50% 60% 50%","opacity":0.08,"description":"Oversized organic blob at very low opacity placed behind content as atmospheric wallpaper. Functions like a watermark cloud."}}},"isInternal":false,"tokens":9156,"sizeBytes":37271},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/playful/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/playful/preview.md","title":"Playful Skill","category":"anthropic-skill","format":"markdown","content":"# Playful Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/playful/design.md`\n- Preview card: `bold-template-pack/templates/playful/preview.md`\n\n## Selection Metadata\n\n- Slug: `playful`\n- Tagline: Sun-warm peach background with Syne display: a friendly indie launch deck.\n- Mood: warm, approachable, indie, friendly\n- Tone: upbeat, informal, welcoming\n- Formality: low\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel warm, indie, and approachable: creator portfolios, indie product launches, lifestyle brands, small-business pitches, newsletter / community decks. Also welcoming for any deck — including tech or research — that wants to feel friendly and human rather than corporate.\n- Avoid for: Contexts where institutional credibility matters more than warmth — the peach palette is intentionally informal.\n\n## Visual Snapshot\n\nA warm, hand-crafted editorial system built on a peach-clay canvas with charcoal ink as the only \"color.\" Display type runs in Syne (weight 700–800, tight negative tracking); body type runs in Space Grotesk at weight 400–500. The aesthetic borrows from independent studio decks, risograph zines, and sketchbook spreads: organic blob frames, scribbled SVG doodles, slightly rotated cards, and double-stroke offset borders give every slide a hand-touched, unpolished warmth. The effect is creative-studio editorial, not corporate pitch — confident but human, structured but loose.\n\nPlayful is a hand-crafted editorial system anchored by a single warm canvas — a peach-clay {colors.bg} (#F0C8A0) — with charcoal {colors.text} (#1A1A1A) as the only meaningful \"color.\" Everything reads as ink-on-clay-paper. There are no secondary brand colors, no gradients, no chromatic accents. The system commits fully to a one-color discipline and finds its expressiveness in shape, weight, rotation, and hand-drawn marks rather than in palette variety.\n\n## Preview Ingredients\n\n- Palette: bg #F0C8A0; bg-alt #E8B88E; light #F7DEC6; text #1A1A1A\n- Typography: Syne; Space Grotesk\n- Signature move: Peach-clay canvas ({colors.bg}) with charcoal ink ({colors.text}) as the only color. No secondary brand palette.\n- Signature move: Syne at weight 700–800 with negative letter-spacing for every display and numeric moment; Space Grotesk at 400–500 for body.\n- Signature move: Double-stroke offset borders on cards — a 3px outline plus a 6–8px offset ghost border via ::before.\n- Signature move: Small ±0.5deg to ±3deg rotations on cards, blocks, and statistics for a hand-placed feel.\n- Signature move: Organic blob shapes with asymmetric border-radius act as decorative frames and fills.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n","isInternal":false,"tokens":969,"sizeBytes":4285},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/raw-grid/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/raw-grid/design.md","title":"Raw Grid","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fraw-grid%2Fdesign.md -->","frontmatter":{"version":"alpha","name":"Raw Grid","description":"A neobrutalist presentation system where 3px solid black borders ARE the layout. Display type runs in the native system sans-serif stack (Segoe UI / system-ui) at weight 900 in strict uppercase — no web fonts loaded. The palette is white canvas + black structure + two muted pastel accents (blush pink","colors":{"black":"#0A0A0A","white":"#FFFFFF","pink":"#F2D4CF","green":"#E5EDD6","gray":"#F5F5F5","darkgray":"#333333"},"borders":{"primary":"3px solid {colors.black}"},"shadows":{"default":"6px 6px 0 {colors.black}","small":"4px 4px 0 {colors.black}"},"typography":{"display":{"fontFamily":"Segoe UI, system-ui, -apple-system, Helvetica, Arial, sans-serif","fontSize":"clamp(48px, 7vw, 96px)","fontWeight":900,"lineHeight":1.05,"letterSpacing":"-0.02em","textTransform":"uppercase"},"headline":{"fontFamily":"Segoe UI, system-ui, -apple-system, Helvetica, Arial, sans-serif","fontSize":"clamp(32px, 4.5vw, 64px)","fontWeight":900,"lineHeight":1.1,"letterSpacing":"-0.01em","textTransform":"uppercase"},"title":{"fontFamily":"Segoe UI, system-ui, -apple-system, Helvetica, Arial, sans-serif","fontSize":"clamp(24px, 2.5vw, 36px)","fontWeight":800,"lineHeight":1.2,"letterSpacing":"0.01em","textTransform":"uppercase"},"subtitle":{"fontFamily":"Segoe UI, system-ui, -apple-system, Helvetica, Arial, sans-serif","fontSize":"clamp(16px, 1.4vw, 22px)","fontWeight":700,"lineHeight":1.3,"letterSpacing":"0.04em","textTransform":"uppercase"},"body":{"fontFamily":"Segoe UI, system-ui, -apple-system, Helvetica, Arial, sans-serif","fontSize":"clamp(16px, 1.3vw, 20px)","fontWeight":500,"lineHeight":1.6,"letterSpacing":0},"caption":{"fontFamily":"Segoe UI, system-ui, -apple-system, Helvetica, Arial, sans-serif","fontSize":"clamp(11px, 1vw, 13px)","fontWeight":700,"lineHeight":1.2,"letterSpacing":"0.08em","textTransform":"uppercase"},"number":{"fontFamily":"Segoe UI, system-ui, -apple-system, Helvetica, Arial, sans-serif","fontSize":"clamp(64px, 8vw, 120px)","fontWeight":900,"lineHeight":1,"letterSpacing":"-0.04em"},"number-md":{"fontFamily":"Segoe UI, system-ui, -apple-system, Helvetica, Arial, sans-serif","fontSize":"clamp(36px, 4vw, 56px)","fontWeight":900,"lineHeight":1,"letterSpacing":"-0.02em"},"number-lg":{"fontFamily":"Segoe UI, system-ui, -apple-system, Helvetica, Arial, sans-serif","fontSize":"clamp(48px, 6vw, 80px)","fontWeight":900,"lineHeight":1,"letterSpacing":"-0.02em"},"label-text":{"fontFamily":"Segoe UI, system-ui, -apple-system, Helvetica, Arial, sans-serif","fontSize":"11px","fontWeight":800,"lineHeight":1,"letterSpacing":"0.08em","textTransform":"uppercase"}},"spacing":{"pad-lg":"clamp(32px, 4vw, 64px)","pad-md":"clamp(20px, 2.5vw, 40px)","pad-sm":"clamp(12px, 1.5vw, 20px)","gap-lg":"clamp(24px, 3vw, 48px)","gap-md":"clamp(16px, 2vw, 32px)","gap-sm":"clamp(8px, 1vw, 16px)"},"canvas":{"width":"100vw","height":"100vh"},"components":{"label":{"background":"{colors.black}","color":"{colors.white}","padding":"6px 14px","fontSize":"11px","fontWeight":800,"letterSpacing":"0.08em","textTransform":"uppercase"},"line-h":{"width":"60px","height":"4px","background":"{colors.black}"},"line-v":{"width":"4px","height":"60px","background":"{colors.black}"},"line-full":{"width":"100%","height":"4px","background":"{colors.black}"},"arrow-prefix":{"content":"→\\00a0","description":"Inline right-arrow glyph (U+2192) followed by a non-breaking space. Prepended via ::before on CTAs and interactive list items."},"icon-box":{"width":"48px","height":"48px","border":"3px solid {colors.black}","background":"{colors.white}","fontSize":"18px–20px","fontWeight":900,"description":"Square white box with 3px black border, used for logos and feature icons. Contains 1–3 character glyph or Roman numeral."},"bar-track":{"width":"100%","height":"32px","border":"3px solid {colors.black}","background":"{colors.white}"},"bar-fill-pink":{"background":"{colors.pink}"},"bar-fill-green":{"background":"{colors.green}"},"bar-fill-black":{"background":"{colors.black}","color":"{colors.white}"},"stat-box":{"border":"3px solid {colors.black}","padding":"clamp(16px, 2vw, 28px)","background":"{colors.white}"},"card":{"padding":"clamp(24px, 3vw, 48px)","border":"3px solid {colors.black}","description":"Generic content card. Background may be white, pink, green, or gray."},"decorative-numeral":{"fontWeight":900,"fontSize":"clamp(40px, 5vw, 72px)","lineHeight":1,"opacity":"0.2–0.35","description":"Oversized numeral placed inside a card at very low opacity as decorative wallpaper behind the actual content."},"decorative-quote-mark":{"fontSize":"clamp(80px, 12vw, 160px)","fontWeight":900,"opacity":0.15,"description":"Oversized opening quotation mark placed absolutely at the top-left of a quote region at very low opacity."},"connector-node":{"width":"32px","height":"32px","border":"3px solid {colors.black}","background":"{colors.black}","color":"{colors.white}","fontSize":"16px","fontWeight":900,"description":"Small black square with white arrow glyph, used as a connector between sequential items in a horizontal flow."},"legend-swatch":{"width":"16px","height":"16px","border":"3px solid {colors.black}"},"donut-stroke-width":24,"donut-track-stroke-width":1.5,"table-cell":{"border":"3px solid {colors.black}","padding":"clamp(12px, 1.5vw, 20px)","fontWeight":600},"table-header":{"background":"{colors.black}","color":"{colors.white}","fontWeight":800,"letterSpacing":"0.06em","textTransform":"uppercase"},"table-zebra-row":{"background":"{colors.gray}"},"hover-highlight":{"background":"{colors.green}","transition":"background 0.15s"}}},"isInternal":false,"tokens":8561,"sizeBytes":34859},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/raw-grid/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/raw-grid/preview.md","title":"Raw-grid Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fraw-grid%2Fpreview.md -->","isInternal":false,"tokens":1026,"sizeBytes":4544},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-windows/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-windows/design.md","title":"Retro Windows","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-windows%2Fdesign.md -->","frontmatter":{"version":"alpha","name":"Retro Windows","description":"A Windows 95 / 98 desktop-OS aesthetic rendered as a presentation system. Every slide is a window — beveled chrome, navy gradient title bar, MS Sans Serif body type, with chart areas, group boxes, and panels arranged as if they were software UI from 1995. The palette is the original Win9x system colors (gray button-face, navy title bars, white sunken inputs) with retro accent hues (DOS green, brick red, mustard yellow, teal cyan) reserved for status text and chart data. Pixel-font (Press Start 2P) and terminal-font (VT323) appear sparingly for nostalgic punctuation. The effect is half playful nostalgia, half functional dashboard — a deck that reads as a software product running on a CRT monitor.","colors":{"bg-gray":"#c0c0c0","bg-light":"#d4d0c8","bg-dark":"#808080","white":"#ffffff","black":"#000000","text-dark":"#222222","blue-navy":"#000080","blue-bright":"#0000a0","blue-light":"#1084d0","green-retro":"#008000","red-retro":"#800000","yellow-retro":"#808000","cyan-retro":"#008080","text-gray":"#555555"},"color-aliases":{"btn-face":"bg-light","btn-highlight":"white","btn-shadow":"#404040","btn-dark-shadow":"black"},"typography":{"body":{"fontFamily":"MS Sans Serif, Segoe UI, Tahoma, Geneva, Verdana, sans-serif","fontSize":"16px","fontWeight":400,"lineHeight":1.5},"text-xl":{"fontFamily":"MS Sans Serif, Segoe UI, Tahoma, Geneva, Verdana, sans-serif","fontSize":"32px","fontWeight":700,"lineHeight":1.2},"text-lg":{"fontFamily":"MS Sans Serif, Segoe UI, Tahoma, Geneva, Verdana, sans-serif","fontSize":"22px","fontWeight":700,"lineHeight":1.3},"text-md":{"fontFamily":"MS Sans Serif, Segoe UI, Tahoma, Geneva, Verdana, sans-serif","fontSize":"18px","fontWeight":400,"lineHeight":1.6},"text-sm":{"fontFamily":"MS Sans Serif, Segoe UI, Tahoma, Geneva, Verdana, sans-serif","fontSize":"14px","fontWeight":400,"lineHeight":1.5},"text-xs":{"fontFamily":"MS Sans Serif, Segoe UI, Tahoma, Geneva, Verdana, sans-serif","fontSize":"12px","fontWeight":400,"lineHeight":1.4},"metric-xl":{"fontFamily":"MS Sans Serif, Segoe UI, Tahoma, Geneva, Verdana, sans-serif","fontSize":"30px","fontWeight":700,"lineHeight":1.1},"title-bar":{"fontFamily":"MS Sans Serif, Segoe UI, Tahoma, Geneva, Verdana, sans-serif","fontSize":"14px","fontWeight":700,"lineHeight":1,"letterSpacing":"0.5px"},"group-box-title":{"fontFamily":"MS Sans Serif, Segoe UI, Tahoma, Geneva, Verdana, sans-serif","fontSize":"13px","fontWeight":700,"lineHeight":1},"pixel-display":{"fontFamily":"'Press Start 2P', cursive","fontSize":"20–24px","fontWeight":400,"lineHeight":1.8},"terminal":{"fontFamily":"'VT323', monospace","fontSize":"22px","fontWeight":400,"lineHeight":1.2},"nav-hint":{"fontFamily":"'VT323', monospace","fontSize":"16px","fontWeight":400,"lineHeight":1}},"spacing":{"slide-pad":"24px 32px 44px 32px","win-body-pad":"20px 24px 24px 24px","panel-pad":"16px","group-box-pad":"20px 18px 16px 18px","panel-sunken-pad":"12px","gap-1":"6px","gap-2":"10px","gap-3":"16px","gap-4":"24px"},"canvas":{"width":"100vw","height":"100vh"},"components":{"crt-overlay":{"backgroundImage":"repeating-linear-gradient(0deg, rgba(0,0,0,0.03) 0px, rgba(0,0,0,0.03) 1px, transparent 1px, transparent 3px)","zIndex":9999,"description":"Fixed, full-viewport scanline overlay at 3% black opacity that sits above all content. Imitates the horizontal phosphor lines of a CRT monitor. Pointer-events disabled."},"win-window":{"background":"{colors.bg-light}","border":"2px solid {colors.white} (top/left) + 2px solid {colors.black} (right/bottom)","boxShadow":"inset 1px 1px 0 {colors.white}, inset -1px -1px 0 #404040","description":"The signature framing element. Every slide is one (or more) win-window. The asymmetric border + double inset shadow creates the Win9x beveled raised effect — top-left highlighted, bottom-right shadowed."},"win-titlebar":{"background":"linear-gradient(90deg, {colors.blue-navy} 0%, {colors.blue-bright} 100%)","color":"{colors.white}","padding":"4px 8px","fontSize":"14px","fontWeight":700,"description":"Navy-blue gradient bar at the top of every window. Contains a left lockup (icon + filename in caps) and a right cluster of three minimize/maximize/close buttons (_, [], X)."},"win-titlebar-inactive":{"background":"linear-gradient(90deg, #808080 0%, #a0a0a0 100%)","description":"Grayed-out title bar variant for inactive/secondary windows (used when a slide contains multiple stacked windows representing different states)."},"win-btn":{"width":"20px","height":"18px","background":"{colors.bg-light}","border":"2px solid {colors.white} (top/left) + 2px solid {colors.black} (right/bottom)","description":"Beveled-raised mini button used inside the title bar (_, [], X) and elsewhere. Active state inverts the bevel."},"btn-retro":{"background":"{colors.bg-light}","border":"2px solid {colors.white} (top/left) + 2px solid {colors.black} (right/bottom)","padding":"6px 24px","fontSize":"14px","description":"Standard Win9x command button. Beveled raised; active state inverts the bevel so the button appears pressed in."},"group-box":{"border":"2px solid #404040 (top/left) + 2px solid {colors.white} (right/bottom)","padding":"20px 18px 16px 18px","background":"{colors.bg-light}","description":"Sunken-bevel framed container with a title label that breaks the top border (the title sits in a small background-painted notch at top-left). The Win9x equivalent of a fieldset/legend."},"group-box-title":{"position":"absolute","top":"-10px","left":"12px","background":"{colors.bg-light}","padding":"0 8px","fontSize":"13px","fontWeight":700,"description":"The title label that sits on top of a group-box's upper border, painted with the parent background to mask the border behind it."},"panel-raised":{"background":"{colors.bg-light}","border":"2px solid {colors.white} (top/left) + 2px solid {colors.black} (right/bottom)","padding":"16px","description":"Raised-bevel panel. Used for tool palettes, button strips, and elevated content regions inside a window body."},"panel-sunken":{"background":"{colors.white}","border":"2px solid #404040 (top/left) + 2px solid {colors.white} (right/bottom)","padding":"12px","description":"Sunken-bevel panel with a white interior. Used for text input fields, read-only data displays, and status regions. The white interior is the system's signal for 'this is content, not chrome.'"},"progress-bar":{"width":"100%","height":"24px","background":"{colors.white}","border":"2px solid #404040 (top/left) + 2px solid {colors.white} (right/bottom)","padding":"2px","description":"Sunken white well containing a solid navy fill div whose width represents the data value. The fill is `{colors.blue-navy}` solid — no gradient, no animation beyond width transition."},"retro-list":{"listStyle":"none","marker":"> (chevron)","markerColor":"{colors.blue-navy}","description":"Custom-bullet list where each item is prefixed with a navy '>' character. The chevron is set via ::before, never via list-style."},"retro-check":{"checkBoxSize":"16px","checkBoxBorder":"2px solid {colors.black} (top/left) + 2px solid {colors.white} (right/bottom)","checkMarker":"x","description":"Sunken white square checkbox with a literal lowercase 'x' character as the checked-state marker. Inset-beveled the opposite direction from buttons."},"retro-table":{"borderCollapse":"collapse","fontSize":"14px","headerBackground":"{colors.bg-gray}","headerBorder":"1px solid #404040","cellBackground":"{colors.white}","cellBorder":"1px solid {colors.bg-gray}","zebraRowBackground":"#f0f0f0","description":"Pixel-flat data table with gray headers, white cells, light-gray border lines, and a barely-different zebra fill on alternate rows."},"marquee":{"background":"{colors.white}","border":"1px inset {colors.bg-gray}","padding":"3px 0","animation":"marquee 14s linear infinite","description":"Scrolling text inside a sunken white well. The animation translates the text from 100% right to -100% left over 14 seconds. The original Win marquee element re-implemented in CSS."},"win-icon":{"width":"18px","height":"18px","background":"{colors.white}","border":"1px solid {colors.black}","fontSize":"11px","color":"{colors.blue-navy}","fontWeight":700,"description":"Tiny 18px square icon next to a title-bar filename — a navy-on-white letter glyph that imitates an application icon. The glyph is a 1-character mnemonic of the window's role (P for Presentation, R for README, D for Dataview, etc.)."},"tree-item":{"fontSize":"14px","indent":"24px per level","folderGlyph":"📁 (U+1F4C1)","fileGlyph":"📄 (U+1F4C4)","expandedMarker":"-","collapsedMarker":"+","description":"Explorer-style hierarchical tree view. Each row carries an expand marker (+/−), a folder or file emoji glyph, and the label text. Indentation steps by 24px per nesting level."},"separator-vertical":{"width":"2px","background":"#404040","borderLeft":"1px solid {colors.white}","margin":"0 12px","description":"Beveled vertical separator between inline elements — the Win9x equivalent of a vertical rule."},"hr-retro":{"borderTop":"1px solid #404040","borderBottom":"1px solid {colors.white}","margin":"14px 0","description":"Beveled horizontal rule. Two stacked 1px lines (dark on top, white on bottom) create the engraved-in look."},"nav-dot":{"width":"12px","height":"12px","background":"{colors.bg-gray}","border":"2px solid {colors.white} (top/left) + 2px solid {colors.black} (right/bottom)","activeBackground":"{colors.blue-navy}","description":"Beveled square mini-dot used as a slide-indicator chip. Active state fills navy with a 4px white center square."},"chart-canvas-host":{"background":"{colors.bg-light}","description":"Chart.js canvas embedded inside a panel-raised. Chart colors use {colors.blue-navy}, {colors.blue-bright}, {colors.blue-light}, {colors.green-retro}, {colors.cyan-retro}, {colors.yellow-retro}. Axis labels use MS Sans Serif at 11–12px in {colors.text-dark}. Gridlines in {colors.bg-gray}."},"scrollbar":{"width":"16px","trackBackground":"{colors.bg-gray}","thumbBackground":"{colors.bg-gray}","thumbBorder":"2px solid {colors.white} (top/left) + 2px solid {colors.black} (right/bottom)","description":"Custom webkit scrollbar styled as a beveled-raised gray thumb on a flat gray track. Width is fixed 16px to match Win9x default."}}},"isInternal":false,"tokens":11591,"sizeBytes":46270},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-windows/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-windows/preview.md","title":"Retro-windows Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-windows%2Fpreview.md -->","isInternal":false,"tokens":1076,"sizeBytes":4717},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-zine/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-zine/design.md","title":"Retro Zine","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-zine%2Fdesign.md -->","frontmatter":{"version":"alpha","name":"Retro Zine","description":"A risograph-zine editorial system on warm khaki paper with a deep forest-green accent and ink-black structure. Display type runs in Bebas Neue (condensed industrial sans, uppercase, generously tracked); body type runs in Space Grotesk at weight 300–500; handwritten emphasis runs in Caveat. A subtle SVG grain overlay sits over every slide, reinforcing the printed-paper feel. The aesthetic borrows from independent press, mid-century activist posters, and DIY zine culture: slightly rotated stamp marks, masking-tape pieces in collage layouts, drop caps, and offset paper-on-paper shadows. The effect is hand-printed editorial — warm but disciplined, confident but tactile.","colors":{"bg":"#C8B99A","bg-dark":"#B8A98A","green":"#008F4D","green-light":"#00A85D","black":"#1A1A1A","white":"#F4EFE6"},"color-aliases":{"line":"black"},"typography":{"display-hero":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"clamp(56px, 10vw, 160px)","fontWeight":400,"lineHeight":0.85,"letterSpacing":"0.04em","textTransform":"uppercase"},"display-cover":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"clamp(48px, 10vw, 140px)","fontWeight":400,"lineHeight":0.88,"letterSpacing":"0.04em","textTransform":"uppercase"},"display":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"clamp(48px, 8vw, 120px)","fontWeight":400,"lineHeight":0.9,"letterSpacing":"0.04em","textTransform":"uppercase"},"headline":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"clamp(42px, 6vw, 90px)","fontWeight":400,"lineHeight":0.95,"letterSpacing":"0.03em","textTransform":"uppercase"},"headline-md":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"clamp(36px, 5vw, 72px)","fontWeight":400,"lineHeight":0.95,"letterSpacing":"0.03em","textTransform":"uppercase"},"statement":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"clamp(36px, 6vw, 90px)","fontWeight":400,"lineHeight":1.1,"letterSpacing":"0.02em","textTransform":"uppercase"},"title":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"clamp(24px, 3vw, 42px)","fontWeight":400,"lineHeight":1.1,"letterSpacing":"0.04em","textTransform":"uppercase"},"number-hero":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"clamp(80px, 12vw, 160px)","fontWeight":400,"lineHeight":1,"letterSpacing":"0.02em"},"number-md":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"clamp(44px, 6vw, 80px)","fontWeight":400,"lineHeight":1,"letterSpacing":"0.02em"},"drop-cap":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"clamp(48px, 6vw, 80px)","fontWeight":400,"lineHeight":0.8,"letterSpacing":"0.02em"},"body":{"fontFamily":"'Space Grotesk', sans-serif","fontSize":"clamp(13px, 1.2vw, 16px)","fontWeight":400,"lineHeight":1.7},"body-md":{"fontFamily":"'Space Grotesk', sans-serif","fontSize":"clamp(14px, 1.3vw, 18px)","fontWeight":400,"lineHeight":1.6},"label-eyebrow":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"14–18px","fontWeight":400,"lineHeight":1.2,"letterSpacing":"0.2em","textTransform":"uppercase"},"label-spaced":{"fontFamily":"'Space Grotesk', sans-serif","fontSize":"12–14px","fontWeight":600,"lineHeight":1.2,"letterSpacing":"0.25em","textTransform":"uppercase"},"caption-feature":{"fontFamily":"'Bebas Neue', sans-serif","fontSize":"13–15px","fontWeight":400,"lineHeight":1.2,"letterSpacing":"0.2em","textTransform":"uppercase"},"hand-script":{"fontFamily":"'Caveat', cursive","fontSize":"clamp(22px, 3vw, 36px)","fontWeight":600,"lineHeight":1.3},"hand-script-sm":{"fontFamily":"'Caveat', cursive","fontSize":"clamp(16px, 2vw, 22px)","fontWeight":400,"lineHeight":1.3},"hand-script-lg":{"fontFamily":"'Caveat', cursive","fontSize":"clamp(24px, 3vw, 36px)","fontWeight":600,"lineHeight":1.3}},"spacing":{"slide-pad":"60px","slide-pad-wide":"60px 80px","card-pad-lg":"48px","card-pad-md":"32px","card-pad-sm":"24px","gap-lg":"60px","gap-md":"40px","gap-sm":"24px"},"canvas":{"width":"100vw","height":"100vh"},"components":{"grain-overlay":{"backgroundImage":"SVG fractal-noise filter, base 200×200 tile","opacity":0.07,"zIndex":9999,"description":"Fixed, full-viewport SVG grain overlay sitting above all content. Imitates the print-grain texture of a risograph or letterpress page. Pointer-events disabled. Required on every slide."},"line-box":{"border":"3px solid {colors.black}","description":"Generic outlined card with 3px solid black border on khaki background. The system's default content container."},"line-divider":{"border":"3px solid {colors.black}","description":"Strict 3px black rule used as a region divider. May be top, bottom, left, or right of a region; meets adjacent borders without gap."},"line-thin":{"border":"2px solid {colors.black}","description":"2px black rule used inside a section for sub-region division (editorial column rule, ed-header bottom rule)."},"line-fine":{"border":"1.5px solid {colors.black}","description":"1.5px black rule used inside grid containers for cell separation (sub-cells inside a 3px-bordered grid)."},"stamp":{"transform":"rotate(-8deg) or rotate(6deg)","display":"inline-block","description":"Any element may be rotated -8deg (stamp) or 6deg (stamp-alt) to read as a hand-pressed ink stamp or applied label. Reserve for badges, callouts, and decorative overlays."},"stamp-mark":{"background":"{colors.black}","color":"{colors.green}","fontFamily":"'Bebas Neue', sans-serif","padding":"10px 24px","border":"2px solid {colors.green}","transform":"rotate(-8deg)","fontSize":"18px","letterSpacing":"0.1em","description":"Approval / status stamp — black background, green text, green 2px border, rotated -8deg. Used as a 'stamp of authenticity' callout."},"ribbon-bar":{"background":"{colors.green}","color":"{colors.white}","padding":"4–8px 12–20px","description":"Solid green color-block that contains light cream text — used as section labels, accent strips, and inline highlight bars."},"inline-highlight":{"background":"{colors.black}","color":"{colors.bg}","padding":"2px 8px","fontWeight":600,"description":"Black-on-khaki marker highlight applied inline inside body paragraphs to lift a phrase. The print equivalent of a marker pen swipe."},"drop-cap":{"float":"left","fontSize":"clamp(48px, 6vw, 80px)","fontFamily":"'Bebas Neue', sans-serif","color":"{colors.green}","lineHeight":0.8,"marginRight":"12px","description":"Oversized green initial cap at the start of an editorial paragraph. Bebas Neue, line-height 0.8, floated left so body text wraps around."},"card-offset":{"background":"{colors.white}","border":"3px solid {colors.black}","positionBefore":{"offset":"12px down, 12px right","background":"{colors.green}","zIndex":-1},"description":"Card with a paper-on-paper offset effect — a solid green slab sits 12px behind the card, offset down-and-right. Reads as a colored shadow without using box-shadow."},"collage-piece":{"border":"3px solid {colors.black}","padding":"24px","position":"absolute","transform":"rotate(-5deg to 5deg)","description":"Free-positioned collage panel with a 3px black border and small rotation. Backgrounds vary across pieces — white, khaki-dark, green, or black-with-inversion. Used in scatter-on-page compositions."},"tape":{"width":"80px","height":"24px","background":"rgba(255,255,255,0.4)","border":"1px solid rgba(0,0,0,0.1)","transform":"rotate(-40deg to 35deg)","description":"Translucent masking-tape rectangle layered at random angles over a collage to suggest physically taped-down pieces. Positioned absolutely; 1px hairline border. Always semi-transparent white."},"divider-stub":{"width":"60–80px","height":"4px","background":"{colors.white} or {colors.green}","description":"Short solid horizontal rule used as a centered visual breath above/below a statement or closing title. 4px tall."},"rsvp-field":{"borderBottom":"2px solid {colors.black}","paddingBottom":"8px","description":"Form-field row pattern: small Bebas Neue green label, hand-script value drawn over a 2px black underline. Mimics a written form."},"ledger-row":{"borderBottom":"1.5px solid {colors.black} (header) or 1px solid rgba(black, 0.22) (body)","padding":"10–18px 0","description":"Horizontal data row pattern: date | title | edition | track | nr. Header row has stronger bottom border; body rows have hairline dividers."},"chip":{"padding":"4px 10px","fontFamily":"'JetBrains Mono', ui-monospace, monospace","fontSize":"11–12px","color":"{colors.white}","textTransform":"uppercase","letterSpacing":"0.06em","description":"Mono-font color chip used inline in tabular ledger rows to tag a row's category. Fill pulls from green / red-stamp / orange / pink / blue as a categorical palette extension."}}},"isInternal":false,"tokens":10804,"sizeBytes":44004},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-zine/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/retro-zine/preview.md","title":"Retro-zine Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fretro-zine%2Fpreview.md -->","isInternal":false,"tokens":1049,"sizeBytes":4598},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/sakura-chroma/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/sakura-chroma/design.md","title":"Sakura Chroma","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsakura-chroma%2Fdesign.md -->","frontmatter":{"version":"alpha","name":"Sakura Chroma","description":"A cassette-package editorial system on warm cream paper with a six-color primary palette and warm-brown ink. Display type runs in Big Shoulders Display (condensed industrial display sans at weight 900); body in Albert Sans; tabular and tag content in JetBrains Mono; occasional Japanese accents in Noto Sans JP. The aesthetic borrows from 1970s consumer cassette packaging, Japanese print catalogues, and lo-fi product zines: petal-cluster blob clusters, diagonal multi-color ribbon bands, 12-point starburst seals, red rectangular stamps, and tracked uppercase micro-labels. The effect is hand-curated industrial editorial — warm but disciplined, playful but tightly typeset, with the cassette as its visual metaphor.","colors":{"paper":"#F1E6CB","paper-dk":"#E5D6B0","ink":"#3A2516","red":"#E5392A","pink":"#E54489","orange":"#F09131","green":"#3D9F47","blue":"#3F8BC4","yellow":"#F0BC2A"},"color-aliases":{"line":"ink"},"typography":{"disp-hero":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(120px, min(14vw, 22vh), 280px)","fontWeight":900,"lineHeight":0.84,"letterSpacing":"-0.025em"},"disp-statement":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(70px, min(8.4vw, 14vh), 168px)","fontWeight":900,"lineHeight":0.86,"letterSpacing":"-0.022em"},"disp-title":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(80px, min(9vw, 14vh), 180px)","fontWeight":900,"lineHeight":0.86,"letterSpacing":"-0.022em"},"disp-lockup":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(56px, min(7vw, 11vh), 130px)","fontWeight":900,"lineHeight":0.9,"letterSpacing":"-0.015em"},"disp-section":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(52px, min(5.6vw, 9vh), 100px)","fontWeight":900,"lineHeight":0.9,"letterSpacing":"-0.018em"},"disp-quote":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(48px, min(5.4vw, 9vh), 110px)","fontWeight":900,"lineHeight":0.92,"letterSpacing":"-0.018em"},"disp-quote-lg":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(56px, min(6.4vw, 10.5vh), 130px)","fontWeight":900,"lineHeight":0.9,"letterSpacing":"-0.018em"},"disp-brand":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(32px, min(3.4vw, 5.4vh), 56px)","fontWeight":900,"lineHeight":0.92,"letterSpacing":"-0.02em"},"disp-card-name":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(28px, min(2.6vw, 4.6vh), 48px)","fontWeight":900,"lineHeight":0.94,"letterSpacing":"-0.012em"},"num-hero":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(110px, min(11vw, 18vh), 240px)","fontWeight":900,"lineHeight":0.86,"letterSpacing":"-0.025em"},"num-md":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(70px, min(7vw, 11vh), 150px)","fontWeight":900,"lineHeight":0.86,"letterSpacing":"-0.02em"},"ttl-row":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(22px, 1.7vw, 30px)","fontWeight":700,"lineHeight":1.1,"letterSpacing":"-0.005em"},"body":{"fontFamily":"'Albert Sans', sans-serif","fontSize":"clamp(14px, 1vw, 17px)","fontWeight":400,"lineHeight":1.5},"body-md":{"fontFamily":"'Albert Sans', sans-serif","fontSize":"clamp(14px, 0.95vw, 15px)","fontWeight":400,"lineHeight":1.4},"body-emphasis":{"fontFamily":"'Albert Sans', sans-serif","fontSize":"clamp(15px, 1.1vw, 20px)","fontWeight":600,"lineHeight":1.4},"micro":{"fontFamily":"'Albert Sans', sans-serif","fontSize":"clamp(12px, 0.9vw, 14px)","fontWeight":700,"lineHeight":1.2,"letterSpacing":"0.16em","textTransform":"uppercase"},"micro-lg":{"fontFamily":"'Albert Sans', sans-serif","fontSize":"clamp(12px, 0.9vw, 14px)","fontWeight":700,"lineHeight":1.2,"letterSpacing":"0.2em","textTransform":"uppercase"},"micro-xl":{"fontFamily":"'Albert Sans', sans-serif","fontSize":"clamp(12px, 0.92vw, 14px)","fontWeight":700,"lineHeight":1.2,"letterSpacing":"0.32em","textTransform":"uppercase"},"micro-spec":{"fontFamily":"'Albert Sans', sans-serif","fontSize":"clamp(14px, 1.1vw, 20px)","fontWeight":700,"lineHeight":1.2,"letterSpacing":"0.04em"},"mono":{"fontFamily":"'JetBrains Mono', ui-monospace, monospace","fontSize":"clamp(11px, 0.78vw, 12px)","fontWeight":400,"lineHeight":1.3,"letterSpacing":"0.02em"},"mono-md":{"fontFamily":"'JetBrains Mono', ui-monospace, monospace","fontSize":"clamp(14px, 0.95vw, 16px)","fontWeight":400,"lineHeight":1.3,"letterSpacing":"0.02em"},"mono-tag":{"fontFamily":"'JetBrains Mono', ui-monospace, monospace","fontSize":"clamp(12px, 0.85vw, 14px)","fontWeight":400,"lineHeight":1,"letterSpacing":"0.04em"},"jp":{"fontFamily":"'Noto Sans JP', sans-serif","fontSize":"inherit","fontWeight":500,"lineHeight":"inherit"},"stamp-text":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(20px, 1.6vw, 28px)","fontWeight":900,"lineHeight":1,"letterSpacing":"0.02em"},"seal-text":{"fontFamily":"'Big Shoulders Display', sans-serif","fontSize":"clamp(22px, 2vw, 38px)","fontWeight":900,"lineHeight":0.9,"letterSpacing":"-0.01em"}},"spacing":{"frame-inset":"clamp(36px, 3.6vw, 72px)","frame-inset-bottom":"clamp(72px, 7vh, 110px)","topbar-gap":"clamp(12px, 1.4vh, 22px)","card-pad-x":"clamp(14px, 1.4vw, 20px)","card-pad-y":"clamp(16px, 1.7vw, 24px)","grid-gap":"clamp(16px, 1.6vw, 26px)","col-gap":"clamp(28px, 3vw, 56px)","pagenum-inset":"clamp(20px, 2.2vh, 36px) clamp(24px, 2.2vw, 44px)"},"canvas":{"width":"100vw","height":"100vh"},"components":{"paper-texture":{"backgroundImage":"radial-gradient(circle at 1px 1px, rgba(58,37,22,0.55) 1px, transparent 1.6px)","backgroundSize":"4px 4px","opacity":0.16,"zIndex":1,"description":"Subtle 4px-period halftone-dot paper texture sitting over every slide stage at 16% opacity. Drawn as a 1px-period radial-gradient. Required — it is the paper-grain that anchors every flat color block in the print register."},"petals-cluster":{"description":"A decorative cluster of 4–5 overlapping perfect circles (each `aspect-ratio: 1/1, border-radius: 50%`) in the primary palette colors. Circles overlap and tile within a bounded container. Used as a brand mark, decorative anchor in slide corners, or quote-page ornament."},"ribbon-band":{"height":"clamp(40px, 6vh, 96px)","width":"160% (oversize so rotation clears the frame)","transform":"rotate(-22deg) or rotate(22deg)","description":"A bundle of 5 stacked solid-color horizontal bars (pink, orange, yellow, green, blue) rotated -22° or +22° to sweep diagonally across a region. Echoes the cassette-label color-stripe motif. Anchored to one edge of the slide and bleeds off the opposite edge."},"ribbon-single":{"height":"16–18%","width":"160%","transform":"rotate(±22deg)","description":"A single solid-color ribbon in a multi-color stack; each ribbon is positioned with its own top/bottom percentage so the stack reads as parallel rays."},"rosette-seal":{"width":"clamp(60px, 6vw, 110px)","aspectRatio":"1 / 1","background":"{colors.ink}","color":"{colors.paper}","clipPath":"32-point starburst polygon","description":"12+ point starburst clip-path shape filled ink with cream text. Used as an authority seal or volume marker. Always carries a 1–4 character glyph (a number, two-letter abbreviation, or short word) in Big Shoulders 900."},"red-stamp":{"background":"{colors.red}","color":"{colors.paper}","padding":"clamp(8px, 1vh, 14px) clamp(12px, 1.4vw, 22px)","transform":"rotate(-3deg) or rotate(0)","fontFamily":"'Big Shoulders Display', sans-serif","fontWeight":900,"description":"Red rectangular stamp with cream text, optionally rotated -3°. Used for status badges (COMPLETE, AS SEEN ON, LIMITED) and product callouts."},"card-product":{"border":"1.5px solid {colors.ink}","background":"{colors.paper}","overflow":"hidden","description":"Vertical product card with a 1.5px ink border, a colored topstrip header band, and a stacked body of name + description + extras + monospaced spec rows. The catalogue grid's primary unit."},"card-topstrip":{"height":"clamp(18px, 2vh, 32px)","description":"Colored horizontal band running the full width of a product card's top — fills in red, pink, orange, or blue depending on the card variant. Reads as a Pantone color tab."},"spec-checklist":{"description":"Vertical column of inline rows with a 14–20px square ink-bordered box (filled or empty) followed by a small caps label (COLOR, LO-FI, STEREO, LP). Echoes the cassette package's feature-spec checklist."},"bar-eq":{"bgUntint":"rgba(58, 37, 22, 0.10)","borderUntint":"rgba(58, 37, 22, 0.22)","description":"Equalizer-style bar chart. Each column is a stack of 6 equal-height tiles (segments). 'On' segments fill with one of the primary colors (red, pink, orange, yellow, green, blue) per column; 'off' segments fill with a translucent ink tint. column-reverse stacking means on-segments stack from the bottom up, like a VU meter."},"ledger-row":{"gridColumns":"96px 1.4fr 0.9fr 0.6fr 64px","paddingY":"clamp(10px, 1.2vh, 18px)","borderBottom":"1px solid rgba(58,37,22,0.22)","description":"5-column tabular row pattern: date | title | edition | chip | nr indicator. Header row uses a 1.5px ink border-bottom; body rows use 1px hairline ink-alpha dividers."},"chip":{"padding":"4px 10px","fontFamily":"'JetBrains Mono', ui-monospace, monospace","fontSize":"11–12px","color":"{colors.paper}","textTransform":"uppercase","letterSpacing":"0.06em","description":"Mono-font color chip tagging a ledger row's category. Background pulls from red, pink, orange, blue, or green."},"topbar-rule":{"borderBottom":"1.5px solid {colors.ink}","paddingBottom":"clamp(12px, 1.4vh, 22px)","description":"Section header underline pattern. A title (Big Shoulders 900 with optional red em-emphasis) on the left aligned-end with a tracked-caps label on the right, separated from the body by a 1.5px ink rule."},"qbody-box":{"background":"{colors.paper}","border":"1.5px solid {colors.ink}","boxShadow":"8px 8px 0 {colors.ink}","padding":"clamp(20px, 2.4vh, 40px) clamp(28px, 2.6vw, 48px)","description":"Quote body container with a 1.5px ink border and a hard 8px ink offset shadow. Sits on top of diagonal ribbons as a paper-on-ribbons callout."},"petal":{"aspectRatio":"1 / 1","borderRadius":"50%","description":"A single perfect circle in one of the primary colors. The atomic unit of petal-clusters and scattered blobs. Always perfectly round — never an ellipse."},"pagenum":{"fontFamily":"'JetBrains Mono', ui-monospace, monospace","fontSize":"clamp(11px, 0.82vw, 13px)","color":"{colors.ink}","letterSpacing":"0.06em","description":"Bottom-right page indicator — mono font, formatted NN / TT. Required on every content slide."},"nb-checkbox":{"width":"clamp(14px, 1.1vw, 20px)","aspectRatio":"1 / 1","border":"2px solid {colors.ink}","checkedFill":"{colors.ink}","checkedMarker":"× (cream-colored multiplication sign in Big Shoulders 900)","description":"Ink-bordered square checkbox used in spec-checklists and the cover footer. Checked state fills ink and centers a cream multiplication-sign glyph (not a checkmark)."}}},"isInternal":false,"tokens":12746,"sizeBytes":49716},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/sakura-chroma/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/sakura-chroma/preview.md","title":"Sakura-chroma Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsakura-chroma%2Fpreview.md -->","isInternal":false,"tokens":1094,"sizeBytes":4930},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/scatterbrain/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/scatterbrain/design.md","title":"Scatterbrain","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fscatterbrain%2Fdesign.md -->","frontmatter":{"version":"alpha","name":"Scatterbrain","description":"A Post-it-note-and-cork-board presentation system. Every content block is a colored sticky note on a textured paper or cork surface, layered with red thumbtacks, masking tape, and decorative doodles. Display type runs in Shrikhand (a chunky decorative display serif) on every headline; body type runs in Zilla Slab (a friendly slab serif); handwritten emphasis runs in Caveat. The palette is pastel sticky-note colors (yellow, blue, pink, green, orange, purple) on cream paper / cork / warm gradient backgrounds. The aesthetic borrows from creative-workshop wall art, brainstorming boards, and indie-studio mood boards: scattered slight rotations, multiple background texture variants per slide, pin / tape / drop-shadow combinations. The effect is warmth, play, and tactile creative-process energy.","colors":{"yellow":"#ffe066","yellow-deep":"#ffd43b","blue":"#a5d8ff","blue-deep":"#74c0fc","pink":"#ffc9c9","pink-deep":"#ff9f9f","green":"#b2f2bb","green-deep":"#8ce99a","orange":"#ffcc80","purple":"#d0bfff","cream":"#faf8f3","paper":"#f7f5f0","ink":"#2d2a26","ink-light":"#5c5750","shadow":"rgba(45, 42, 38, 0.15)","shadow-deep":"rgba(45, 42, 38, 0.25)"},"typography":{"display-hero":{"fontFamily":"'Shrikhand', cursive","fontSize":"clamp(2.5rem, 5vw, 4.5rem)","fontWeight":400,"lineHeight":1.1,"letterSpacing":"0.02em"},"statement":{"fontFamily":"'Shrikhand', cursive","fontSize":"clamp(2rem, 4vw, 3.5rem)","fontWeight":400,"lineHeight":1.1,"letterSpacing":"0.02em"},"headline":{"fontFamily":"'Shrikhand', cursive","fontSize":"clamp(1.8rem, 3.5vw, 3rem)","fontWeight":400,"lineHeight":1.1,"letterSpacing":"0.02em"},"title":{"fontFamily":"'Shrikhand', cursive","fontSize":"clamp(1.3rem, 2.5vw, 1.8rem)","fontWeight":400,"lineHeight":1.1,"letterSpacing":"0.02em"},"body":{"fontFamily":"'Zilla Slab', serif","fontSize":"clamp(1rem, 1.5vw, 1.25rem)","fontWeight":400,"lineHeight":1.7},"list-item":{"fontFamily":"'Zilla Slab', serif","fontSize":"1.1rem","fontWeight":400,"lineHeight":1.6},"handwritten":{"fontFamily":"'Caveat', cursive","fontSize":"clamp(1.2rem, 2vw, 1.6rem)","fontWeight":400,"lineHeight":1.4},"handwritten-lg":{"fontFamily":"'Caveat', cursive","fontSize":"clamp(1.4rem, 2.5vw, 2rem)","fontWeight":600,"lineHeight":1.3},"handwritten-sm":{"fontFamily":"'Caveat', cursive","fontSize":"clamp(1.2rem, 1.5vw, 1.4rem)","fontWeight":500,"lineHeight":1.3},"label-script":{"fontFamily":"'Caveat', cursive","fontSize":"0.9rem","fontWeight":400,"lineHeight":1.2,"letterSpacing":"0.15em","textTransform":"uppercase"},"stat-value":{"fontFamily":"'Shrikhand', cursive","fontSize":"1.8rem","fontWeight":400,"lineHeight":1.1},"caption-subtitle":{"fontFamily":"'Zilla Slab', serif","fontSize":"1.3rem","fontWeight":400,"lineHeight":1.6}},"spacing":{"slide-pad":"3rem","post-it-pad-lg":"3rem 4rem","post-it-pad-md":"2.5rem","post-it-pad-sm":"1.5rem","post-it-pad-statement":"3.5rem 4rem","gap-lg":"3rem","gap-md":"2.5rem","gap-sm":"2rem"},"canvas":{"width":"100vw","height":"100vh"},"components":{"bg-cork":{"backgroundLayers":"radial-gradient ellipse + linear-gradient (warm browns) + SVG plus-sign pattern at 15% opacity","description":"Cork-board background variant. Warm tan/brown tonal gradient with a faint pattern of small plus-sign marks suggesting cork texture. Used on slides that feel like 'a wall of pinned notes.'"},"bg-paper":{"backgroundLayers":"linear-gradient (cream) + 40px grid lines at 8% opacity","description":"Desk-paper background variant. Cream gradient with a faint 40px grid overlay suggesting graph or notebook paper. Used on slides that feel like 'notes arranged on a desk.'"},"bg-warm":{"backgroundLayers":"multiple radial-gradients (yellow/blue/pink soft glows) + linear-gradient cream base","description":"Warm gradient background variant. Cream base with soft-glow ellipses of yellow, blue, and pink suggesting morning light. Used on slides that need a softer, less-textured atmosphere."},"grain-overlay":{"backgroundImage":"SVG fractal-noise filter, 256×256 tile","opacity":0.04,"zIndex":9999,"description":"Fixed full-viewport SVG grain texture above all content at 4% opacity. Reinforces the paper-and-cork tactile register. Always present."},"post-it":{"padding":"2rem","boxShadow":"2px 3px 15px {colors.shadow}, 0 1px 3px {colors.shadow-deep}","description":"Generic colored sticky-note base. Soft drop-shadow simulates the note's slight lift off the surface. Always carries a background color from the post-it palette (yellow, blue, pink, green, orange, purple, or white)."},"post-it-yellow":{"background":"linear-gradient(135deg, {colors.yellow} 0%, {colors.yellow-deep} 100%)","description":"Yellow sticky variant. Soft 135° gradient from light to deep yellow."},"post-it-blue":{"background":"linear-gradient(135deg, {colors.blue} 0%, {colors.blue-deep} 100%)","description":"Blue sticky variant."},"post-it-pink":{"background":"linear-gradient(135deg, {colors.pink} 0%, {colors.pink-deep} 100%)","description":"Pink sticky variant."},"post-it-green":{"background":"linear-gradient(135deg, {colors.green} 0%, {colors.green-deep} 100%)","description":"Green sticky variant."},"post-it-orange":{"background":"{colors.orange}","description":"Orange sticky variant. Flat fill (no gradient) — the only post-it that ships flat."},"post-it-purple":{"background":"{colors.purple}","description":"Purple sticky variant. Flat fill."},"post-it-white":{"background":"#fff","border":"2px solid {colors.ink}","description":"White note variant. Carries a 2px ink border (because pure white otherwise disappears into cream/paper backgrounds). Used as a 'plain note' in timelines or comparisons."},"pin":{"width":"16px","height":"16px","position":"::before, top: -12px, centered","background":"radial-gradient(circle at 30% 30%, #ff6b6b, #c92a2a)","boxShadow":"0 2px 4px {colors.shadow-deep}, inset -2px -2px 4px rgba(0,0,0,0.2)","description":"Red thumbtack mark sitting at the top-center of a post-it via ::before. Radial-gradient gives it a 3D bead-shaped highlight; inset shadow adds dimension. The default pin color."},"pin-blue":{"background":"radial-gradient(circle at 30% 30%, #4dabf7, #1864ab)","description":"Blue thumbtack variant."},"pin-green":{"background":"radial-gradient(circle at 30% 30%, #69db7c, #2f9e44)","description":"Green thumbtack variant."},"pin-gold":{"background":"radial-gradient(circle at 30% 30%, #ffd43b, #f59f00)","description":"Gold thumbtack variant."},"tape":{"width":"80px","height":"25px","position":"::after, top: -15px, centered, rotate(-2deg)","background":"rgba(255, 255, 255, 0.4)","border":"1px solid rgba(255, 255, 255, 0.3)","description":"Masking-tape mark across the top-center of a post-it via ::after. Translucent white, slightly rotated. Often combined with .pin so a single note has both tape and a tack."},"card-rotation":{"rotation":"±1° to ±15°","description":"Every post-it carries a small rotation. Statement and feature cards: ±1° to ±3°. Accent / floating notes: ±5° to ±15° (more dramatic to read as 'casually applied'). Rotations alternate direction across adjacent notes."},"feature-icon":{"width":"60px","height":"60px","border":"3px solid {colors.ink}","borderRadius":"50%","fontFamily":"'Shrikhand', cursive","fontSize":"1.5rem","description":"Round ink-bordered icon containing a single character (letter, number, or symbol) in Shrikhand display. Used as a category marker at the top of feature post-its."},"versus-circle":{"width":"60px","height":"60px","background":"{colors.ink}","color":"{colors.paper}","borderRadius":"50%","fontFamily":"'Shrikhand', cursive","fontSize":"1.2rem","boxShadow":"0 2px 8px {colors.shadow-deep}","description":"Ink-filled circle with cream text used between two compare-cards. Centered between the two cards with absolute positioning; reads as a 'vs' / 'and' connector."},"photo-frame":{"background":"#fff","padding":"1rem","boxShadow":"2px 3px 15px {colors.shadow}","rotation":"±1° to ±2°","description":"Polaroid-style image frame. White paper with 1rem padding around the inner image area; same drop shadow as post-its; small rotation. The inner image area has a 4:3 aspect ratio."},"chart-canvas":{"background":"#fff","padding":"2.5rem","boxShadow":"2px 3px 15px {colors.shadow}","rotation":"±1°","description":"White paper card hosting an inline SVG chart. Same drop shadow as post-its and photo-frames; small rotation. Charts use the post-it color palette for fills."},"stat-row":{"borderBottom":"1px dashed rgba(45, 42, 38, 0.2)","padding":"1rem 0","description":"A label-and-value row inside a stat post-it. Label in Zilla Slab body color; value in Shrikhand stat-value. Bottom-divider is a dashed ink-alpha hairline."},"doodle":{"opacity":0.15,"stroke":"{colors.ink}","strokeWidth":3,"description":"Decorative SVG mark placed absolutely in slide corners — a circle, squiggle, triangle, line, or X+ pair. All at 0.15 opacity, all in 3px ink stroke. Slides have 0–2 doodles each."},"timeline-connector":{"height":"60px","pathStyle":"Q (quadratic) bezier curve at 0.3 opacity, stroke-dasharray '8 4', polygon arrowhead at end","description":"Dashed quadratic-bezier line between timeline nodes. Curve direction alternates row to row (concave up, concave down). Always ends with a triangle arrowhead."},"custom-cursor":{"cursor":"URL data-svg red-and-white thumbtack, 24×24, hotspot 12×12","description":"Browser cursor replaced with a tiny SVG thumbtack circle (red outer, white center) when hovering over any slide. Reinforces the 'pinning ideas to a board' metaphor."}}},"isInternal":false,"tokens":11443,"sizeBytes":45167},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/scatterbrain/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/scatterbrain/preview.md","title":"Scatterbrain Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fscatterbrain%2Fpreview.md -->","isInternal":false,"tokens":1077,"sizeBytes":4878},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/signal/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/signal/design.md","title":"Signal","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsignal%2Fdesign.md -->","frontmatter":{"version":"alpha","name":"Signal","description":"A literary editorial presentation system in the spirit of a long-form magazine — The Economist's restraint crossed with a private intelligence briefing. Source Serif 4 carries every headline with roman/italic mixing mid-sentence in antique gold, DM Sans steps back for body, and IBM Plex Mono runs all the timestamps, kickers, and chrome. The dual surface system is warm cream paper (#F0ECE3) and deep editorial navy (#1C2644), connected by a single hot accent — antique gold (#C8A870) — used only on rules, italic emphasis, and numerical figures. A near-invisible 80px grid texture overlays every dark slide as a fingerprint. The effect is sober, considered, and a little bit aristocratic.","colors":{"navy":"#1C2644","navy-alt":"#232F55","cream":"#F0ECE3","cream-alt":"#E6E0D4","text-warm":"#E2DCD0","text-muted-dark":"#8A96A8","text-hint-dark":"#4E5A6E","ink":"#1A2030","text-muted-light":"#5A6270","text-hint-light":"#9AA0A8","gold":"#C8A870","border-dark":"#2E3D5C","border-light":"#CAC4B4"},"color-aliases":{"c-bg":"navy","c-bg-alt":"navy-alt","c-bg-light":"cream","c-bg-light-alt":"cream-alt","c-fg":"text-warm","c-fg-2":"text-muted-dark","c-fg-3":"text-hint-dark","c-fg-light":"ink","c-fg-light-2":"text-muted-light","c-fg-light-3":"text-hint-light","c-accent":"gold","c-border":"border-dark","c-border-light":"border-light"},"typography":{"display":{"fontFamily":"Source Serif 4, Noto Serif SC, Georgia, serif","fontSize":"9.5vw","fontWeight":700,"lineHeight":0.96,"letterSpacing":"-0.02em"},"h1":{"fontFamily":"Source Serif 4, Noto Serif SC, Georgia, serif","fontSize":"5.2vw","fontWeight":600,"lineHeight":1.08,"letterSpacing":"-0.01em"},"h2":{"fontFamily":"Source Serif 4, Noto Serif SC, Georgia, serif","fontSize":"3vw","fontWeight":600,"lineHeight":1.18},"h3":{"fontFamily":"Source Serif 4, Noto Serif SC, Georgia, serif","fontSize":"1.9vw","fontWeight":500,"lineHeight":1.3},"lead":{"fontFamily":"DM Sans, Noto Sans SC, system-ui, sans-serif","fontSize":"1.4vw","fontWeight":400,"lineHeight":1.58},"body":{"fontFamily":"DM Sans, Noto Sans SC, system-ui, sans-serif","fontSize":"1.05vw","fontWeight":400,"lineHeight":1.65},"caption":{"fontFamily":"DM Sans, Noto Sans SC, system-ui, sans-serif","fontSize":"0.82vw","fontWeight":400,"lineHeight":1.5},"label":{"fontFamily":"IBM Plex Mono, JetBrains Mono, monospace","fontSize":"0.7vw","fontWeight":500,"letterSpacing":"0.14em","textTransform":"uppercase"},"stat-value":{"fontFamily":"Source Serif 4, Noto Serif SC, Georgia, serif","fontSize":"5.5vw","fontWeight":600,"lineHeight":1,"letterSpacing":"-0.02em"},"quote-text":{"fontFamily":"Source Serif 4, Noto Serif SC, Georgia, serif","fontSize":"3.6vw","fontWeight":400,"lineHeight":1.28,"letterSpacing":"-0.01em"},"quote-mark":{"fontFamily":"Source Serif 4, Noto Serif SC, Georgia, serif","fontSize":"8vw","fontWeight":300,"lineHeight":0.6},"editorial-headline":{"fontFamily":"Source Serif 4, Noto Serif SC, Georgia, serif","fontSize":"2.75vw","fontWeight":600,"lineHeight":1.2},"dense-headline":{"fontFamily":"Source Serif 4, Noto Serif SC, Georgia, serif","fontSize":"2.4vw","fontWeight":600,"lineHeight":1.2}},"spacing":{"pad-x":"7.5vw","pad-y":"5.5vh","gap-lg":"4vh","gap-md":"2.5vh","gap-sm":"1.2vh","grid-cell":"80px"},"canvas":{"width":"100vw","height":"100vh"},"components":{"rule-short":{"width":"36px","height":"1px","background":"{colors.gold}","description":"Short gold rule used as a kicker separator above headlines and as a chapter accent mark."},"rule-full":{"width":"100%","height":"1px","background":"{colors.border-dark}","description":"Full-width hairline divider, color shifts to {colors.border-light} on cream surfaces."},"kicker":{"color":"{colors.gold}","typography":"{typography.label}","description":"Mono uppercase label in antique gold, sits above a headline."},"tag":{"border":"1px solid {colors.gold}","color":"{colors.gold}","padding":"0.3em 0.8em","typography":"{typography.label}","description":"Outlined gold pill containing a mono uppercase label."},"chrome-bar":{"borderBottom":"1px solid {colors.border-dark}","paddingBottom":"{spacing.gap-sm}","marginBottom":"{spacing.gap-md}","description":"Top chrome strip with mono label left, mono counter right, hairline rule beneath."},"foot-bar":{"borderTop":"1px solid {colors.border-dark}","paddingTop":"{spacing.gap-sm}","marginTop":"{spacing.gap-md}","description":"Bottom chrome strip, mirror of chrome-bar."},"stat-card":{"borderTop":"1px solid {colors.border-dark}","padding":"{spacing.gap-md} {spacing.gap-md} {spacing.gap-md} 0","description":"Stat tile with a top hairline rule, big gold serif numeral above a sans label and mono note."},"bullet-marker":{"content":"—","color":"{colors.gold}","fontFamily":"{typography.label.fontFamily}","description":"Em-dash bullet rendered in mono gold prefixes every list item."},"vt-spine":{"width":"1px","background":"{colors.border-dark}","description":"Vertical hairline spine for timeline column, with a 9px gold dot marking each entry."},"vt-dot":{"width":"9px","height":"9px","borderRadius":"50%","background":"{colors.gold}","description":"Gold node sitting on the timeline spine at each date."},"pie-donut":{"borderRadius":"50%","innerCutout":"22% inset, painted to match slide background","description":"SVG/CSS donut chart, segments in palette colors with a 1px gold ring divider where used."},"bar-fill-default":{"background":"{colors.text-hint-dark}","description":"Default bar fill in muted slate; switches to gold for the highlighted bar."},"bar-fill-accent":{"background":"{colors.gold}"},"compare-divider":{"borderRight":"1px solid {colors.border-dark}","description":"Single vertical hairline separating two comparison panels."},"pyramid-band":{"borderLeft":"3px solid {colors.gold}","padding":"1.3vh 2.5vw","fillFunction":"color-mix(in srgb, {colors.gold} N%, {colors.navy})","description":"Horizontal band in pyramid layouts; opacity of gold mix decreases from top tier to bottom."},"grid-texture":{"background":"linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px)","backgroundSize":"80px 80px","description":"Near-invisible 80px grid overlay applied to every dark slide via ::before pseudo-element."},"cycle-step":{"borderTop":"2px solid {colors.gold}","padding":"{spacing.gap-md}","description":"Cycle/process step card with a 2px gold rule at top, gold numeral, serif title, sans body."}}},"isInternal":false,"tokens":9751,"sizeBytes":39469},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/signal/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/signal/preview.md","title":"Signal Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsignal%2Fpreview.md -->","isInternal":false,"tokens":1075,"sizeBytes":4801},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/soft-editorial/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/soft-editorial/design.md","title":"Soft Editorial","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsoft-editorial%2Fdesign.md -->","frontmatter":{"version":"alpha","name":"Soft Editorial","description":"A warm magazine spread aesthetic — the kind of layout a small print quarterly with field-notes pretensions would commission. Cormorant Garamond carries every headline and ornamental moment with mixed roman and italic; Work Sans recedes into supporting body. The palette is cream paper with a quartet of pastel candy accents (dusty pink, chartreuse lemon, soft peach blush, sage green, lilac) used as colored card backgrounds. Generous rounded cards (24–36px radius) float on translucent white over the cream field. The mood is editorial calm with a sprinkling of riso-print color — closer to a literary research notebook than a corporate deck.","colors":{"paper":"#F2EEDF","paper-2":"#ECE6D2","ink":"#2A241B","ink-soft":"#5C5345","pink":"#E1A4C2","lemon":"#D6DD63","blush":"#E8C9B6","sage":"#B7C7A8","lilac":"#C9BEDC","card-fill":"rgba(255,255,255,0.55)","rule-soft":"rgba(42,36,27,0.18)","rule-medium":"rgba(42,36,27,0.35)"},"color-aliases":{"background":"paper","text-primary":"ink","text-secondary":"ink-soft"},"typography":{"display":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"232px","fontWeight":500,"lineHeight":0.92,"letterSpacing":"-0.02em"},"title":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"188px","fontWeight":500,"lineHeight":0.95,"letterSpacing":"-0.015em"},"closer":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"168px","fontWeight":500,"lineHeight":0.95,"letterSpacing":"-0.015em"},"numeral-hero":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"320px","fontWeight":500,"lineHeight":0.9,"letterSpacing":"-0.02em"},"numeral-lg":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"200px","fontWeight":500,"lineHeight":0.9,"letterSpacing":"-0.02em"},"panel-headline":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"124px","fontWeight":500,"lineHeight":0.98,"letterSpacing":"-0.01em"},"section-headline":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"96px","fontWeight":500,"lineHeight":0.98,"letterSpacing":"-0.01em"},"page-headline":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"88px","fontWeight":500,"lineHeight":1,"letterSpacing":"-0.01em"},"quote-text":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"88px","fontWeight":500,"lineHeight":1.05,"letterSpacing":"-0.01em"},"quote-mark":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"220px","fontWeight":500,"lineHeight":0.7,"fontStyle":"italic"},"card-headline":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"72px","fontWeight":500,"lineHeight":1,"letterSpacing":"-0.01em"},"drop-cap":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"132px","fontWeight":500,"lineHeight":0.85},"opener":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"56px","fontWeight":500,"fontStyle":"italic","lineHeight":1.1},"numeral-step":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"92px","fontWeight":500,"fontStyle":"italic","lineHeight":0.9},"numeral-card":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"64px","fontWeight":500,"fontStyle":"italic","lineHeight":1},"subhead-lg":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"56px","fontWeight":500,"fontStyle":"italic","lineHeight":1.1},"subhead-md":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"44px","fontWeight":500,"lineHeight":1.05},"subhead-sm":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"38px","fontWeight":500,"lineHeight":1.05},"kicker":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"38px","fontWeight":400,"fontStyle":"italic","lineHeight":1.2},"marker":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"32px","fontWeight":400,"fontStyle":"italic","lineHeight":1.3},"card-sub":{"fontFamily":"Work Sans, sans-serif","fontSize":"32px","fontWeight":500,"lineHeight":1.1},"eyebrow":{"fontFamily":"Work Sans, sans-serif","fontSize":"28px","fontWeight":400,"letterSpacing":"-0.005em"},"page-marker":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"26px","fontWeight":400,"fontStyle":"italic"},"footer":{"fontFamily":"Cormorant Garamond, Garamond, serif","fontSize":"26px","fontWeight":400,"fontStyle":"italic"},"body":{"fontFamily":"Work Sans, sans-serif","fontSize":"26px","fontWeight":400,"lineHeight":1.5},"body-md":{"fontFamily":"Work Sans, sans-serif","fontSize":"24px","fontWeight":400,"lineHeight":1.5},"attr":{"fontFamily":"Work Sans, sans-serif","fontSize":"24px","fontWeight":500,"lineHeight":1.3},"swatch-label":{"fontFamily":"Work Sans, sans-serif","fontSize":"11px","fontWeight":400,"letterSpacing":"0.06em","textTransform":"uppercase"}},"spacing":{"pad-outer":"80px","pad-top":"60px","pad-bottom":"50px","card-pad-lg":"64px 48px","card-pad-md":"48px 52px","card-pad-sm":"28px 30px","gap-cards":"28px","gap-cards-lg":"36px","gap-stack":"36px"},"canvas":{"width":"1920px","height":"1080px"},"components":{"card-soft":{"background":"{colors.card-fill}","borderRadius":"24px to 36px","padding":"{spacing.card-pad-sm} to {spacing.card-pad-lg}","description":"Translucent white card floating on the cream field. The system's default container — used for stats, columns, panels, content blocks."},"card-color":{"background":"any of pink, lemon, blush, sage, lilac","borderRadius":"22px to 36px","padding":"{spacing.card-pad-sm}","description":"Saturated pastel card containing numerals, step content, or featured items. Text stays ink/ink-soft on every accent fill — never inverted."},"pill":{"borderRadius":"999px","padding":"4px 14px","fontWeight":500,"description":"Status pill in a pastel fill (lemon=yes, blush=partial, pink=no) or translucent white with a soft border for notes."},"swatch-dot":{"width":"56px","height":"56px","borderRadius":"50%","description":"Circular accent disc shown in a row at the top of cover slides — the visual signature of the system's color palette."},"swatch-tile":{"aspectRatio":"1/1.2","borderRadius":"16px","description":"Rounded rectangle paint chip used in palette displays and design-system layouts."},"rule-dashed":{"borderColor":"{colors.rule-soft}","borderStyle":"dashed","borderWidth":"1px","description":"1px dashed warm-ink hairline used inside matrix tables, panel dividers, and any subdivision that wants to read softer than a solid rule."},"rule-solid":{"borderColor":"{colors.rule-medium}","borderStyle":"solid","borderWidth":"1.5px","description":"Slightly heavier hairline for major dividers inside cards (head-row underlines, column rules)."},"drop-cap":{"typography":"{typography.drop-cap}","float":"left","description":"First letter of an opener paragraph floats left at ~132px, line-height 0.85, with 8px 14px 0 0 padding. The visible signature of editorial reads."},"legend-bar":{"width":"28px","height":"12px","borderRadius":"6px","description":"Rounded color bar used as a chart legend swatch."},"marker-rule":{"width":"auto","borderTop":"1px dashed {colors.rule-soft}","description":"Dashed top-rule used to mark source attributions or sign-offs beneath content."},"action-bar":{"background":"{colors.lemon}","borderRadius":"24px","padding":"24px 36px","description":"Lemon-yellow action band running near the top of a slide, containing a tag separator and a serif headline — used for important CTAs or callouts."},"chrome-eyebrow":{"position":"absolute top-left at 60px / 80px","typography":"{typography.eyebrow}","color":"{colors.ink}","description":"Section name in plain sans, sits at the top-left corner of standard slides."},"chrome-pagedot":{"position":"absolute top-right at 60px / 80px","typography":"{typography.page-marker}","color":"{colors.ink-soft}","description":"Roman or arabic page numeral in italic serif at the top-right corner."},"chrome-footer":{"position":"absolute bottom at 50px","typography":"{typography.footer}","color":"{colors.ink-soft}","description":"Two-column italic serif footer running across the bottom — date left, publication name right."}}},"isInternal":false,"tokens":11421,"sizeBytes":44593},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/soft-editorial/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/soft-editorial/preview.md","title":"Soft-editorial Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fsoft-editorial%2Fpreview.md -->","isInternal":false,"tokens":1112,"sizeBytes":4901},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/stencil-tablet/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/stencil-tablet/design.md","title":"Stencil & Tablet","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstencil-tablet%2Fdesign.md -->","frontmatter":{"version":"alpha","name":"Stencil & Tablet","description":"A West Coast skate-poster meets municipal stencil signage system. Stardos Stencil carries every headline, numeral, and chunky display moment with its characteristic ink-break gaps; Barlow Condensed runs all metadata and uppercase chrome at extra-heavy weights; Inter handles body. The palette is bone (#E2DCC9) and black, energized by a saturated retro-print accent set — sienna, magenta, orange, teal, blue, mustard, olive. Soft rounded \"tablet\" cards (22–26px radius) tile across slides in colored blocks. Type runs huge and uppercase, numerals dominate at 160–540px, and color blocks act as the layout. The mood is industrial poster, vintage workshop sign, and music festival lineup all at once.","colors":{"bone":"#E2DCC9","black":"#000000","ink":"#0A0A0A","paper":"#F4EFE0","sienna":"#A06A3C","magenta":"#C73B7A","orange":"#EE7A2E","teal":"#2D7E73","blue":"#3F73B7","mustard":"#D8A93B","olive":"#6F7A2E"},"typography":{"cover-hero":{"fontFamily":"Stardos Stencil, serif","fontSize":"220px","fontWeight":700,"lineHeight":0.82,"letterSpacing":"-0.015em","textTransform":"uppercase"},"numeral-mega":{"fontFamily":"Stardos Stencil, serif","fontSize":"540px","fontWeight":700,"lineHeight":0.8},"numeral-card-xl":{"fontFamily":"Stardos Stencil, serif","fontSize":"240px","fontWeight":700,"lineHeight":0.85,"letterSpacing":"-0.02em"},"numeral-tablet":{"fontFamily":"Stardos Stencil, serif","fontSize":"220px","fontWeight":700,"lineHeight":0.9,"letterSpacing":"-0.02em"},"numeral-stat":{"fontFamily":"Stardos Stencil, serif","fontSize":"160px","fontWeight":700,"lineHeight":0.85,"letterSpacing":"-0.02em"},"section-headline":{"fontFamily":"Stardos Stencil, serif","fontSize":"120px","fontWeight":700,"lineHeight":0.92,"letterSpacing":"-0.005em","textTransform":"uppercase"},"chart-headline":{"fontFamily":"Stardos Stencil, serif","fontSize":"110px","fontWeight":700,"lineHeight":0.92,"letterSpacing":"-0.01em","textTransform":"uppercase"},"page-headline":{"fontFamily":"Stardos Stencil, serif","fontSize":"92px","fontWeight":700,"lineHeight":0.92,"letterSpacing":"-0.01em","textTransform":"uppercase"},"quote-text":{"fontFamily":"Stardos Stencil, serif","fontSize":"60px","fontWeight":400,"lineHeight":1.05,"letterSpacing":"-0.005em"},"quote-mark":{"fontFamily":"Bowlby One, Stardos Stencil, serif","fontSize":"320px","fontWeight":700,"lineHeight":0.8},"numeral-process":{"fontFamily":"Stardos Stencil, serif","fontSize":"64px","fontWeight":700,"lineHeight":0.9},"date-mark":{"fontFamily":"Stardos Stencil, serif","fontSize":"36px","fontWeight":700,"textTransform":"uppercase"},"card-headline":{"fontFamily":"Stardos Stencil, serif","fontSize":"34px","fontWeight":700,"lineHeight":1.15,"textTransform":"uppercase","letterSpacing":"-0.005em"},"meta-headline":{"fontFamily":"Stardos Stencil, serif","fontSize":"32px","fontWeight":700,"lineHeight":1.1},"card-h3":{"fontFamily":"Stardos Stencil, serif","fontSize":"30px","fontWeight":700,"lineHeight":1.05,"textTransform":"uppercase","letterSpacing":"0.02em"},"matrix-row":{"fontFamily":"Stardos Stencil, serif","fontSize":"26px","fontWeight":700,"lineHeight":1.1,"textTransform":"uppercase","letterSpacing":"0.01em"},"matrix-head":{"fontFamily":"Stardos Stencil, serif","fontSize":"24px","fontWeight":700,"textTransform":"uppercase","letterSpacing":"0.02em"},"topbar":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"32px","fontWeight":800,"letterSpacing":"0.04em","textTransform":"uppercase","lineHeight":1},"super":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"28px","fontWeight":800,"letterSpacing":"0.12em","textTransform":"uppercase"},"who-name":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"30px","fontWeight":700,"letterSpacing":"0.04em","textTransform":"uppercase"},"attribution":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"26px","fontWeight":800,"letterSpacing":"0.08em","textTransform":"uppercase"},"meta":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"24px","fontWeight":600,"letterSpacing":"0.06em"},"section-eyebrow":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"24px","fontWeight":800,"letterSpacing":"0.14em","textTransform":"uppercase"},"footer":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"22px","fontWeight":600,"letterSpacing":"0.08em","textTransform":"uppercase"},"process-sub":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"22px","fontWeight":600,"letterSpacing":"0.06em","textTransform":"uppercase"},"timeline-marker":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"20px","fontWeight":700,"letterSpacing":"0.08em","textTransform":"uppercase"},"legend":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"22px","fontWeight":700,"letterSpacing":"0.06em","textTransform":"uppercase"},"pill":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"18px","fontWeight":700,"letterSpacing":"0.08em","textTransform":"uppercase"},"chart-axis":{"fontFamily":"Barlow Condensed, sans-serif","fontSize":"18px","fontWeight":600,"letterSpacing":"0.06em"},"body-lg":{"fontFamily":"Inter, sans-serif","fontSize":"24px","fontWeight":400,"lineHeight":1.4},"body":{"fontFamily":"Inter, sans-serif","fontSize":"22px","fontWeight":400,"lineHeight":1.4},"body-sm":{"fontFamily":"Inter, sans-serif","fontSize":"20px","fontWeight":400,"lineHeight":1.45},"body-xs":{"fontFamily":"Inter, sans-serif","fontSize":"18px","fontWeight":400,"lineHeight":1.4}},"spacing":{"pad-outer":"64px","pad-top":"48px","pad-bottom":"36px","card-pad":"24px 22px to 38px 32px","gap-card":"22px to 28px","radius-card":"22px","radius-card-lg":"26px","radius-action":"22px","radius-pill":"999px","radius-mark":"14px","radius-timeline":"18px"},"canvas":{"width":"1920px","height":"1080px"},"components":{"tablet":{"borderRadius":"26px","padding":"38px 32px 32px","background":"any palette accent or {colors.bone}","color":"{colors.ink} on light fills, {colors.bone} on dark fills","description":"The system's namesake container — a rounded rectangle holding a giant stencil numeral above a stencil headline and Inter body. Numerals run to 220px+ inside."},"card-color":{"borderRadius":"22px","padding":"{spacing.card-pad}","description":"Generic color-block card in any palette accent (sienna, magenta, orange, teal, blue, mustard, olive, paper)."},"pill-status":{"borderRadius":"{spacing.radius-pill}","padding":"6px 16px","typography":"{typography.pill}","description":"Uppercase Barlow Condensed pill used as a matrix cell value. teal=yes, mustard=partial, magenta=no, paper-with-ink-border=note."},"action-bar":{"background":"{colors.mustard}","borderRadius":"22px","padding":"24px 32px","description":"Mustard-yellow callout bar running across the top of a slide, containing a tag separator and a stencil headline. Used for important section openers."},"num-mega":{"typography":"{typography.numeral-mega}","color":"{colors.orange} (default) or any saturated accent","description":"Giant 540px stencil numeral used as a section divider — the number IS the layout. Sits absolute top-left while the section headline runs bottom-right."},"num-tablet":{"typography":"{typography.numeral-tablet}","description":"220px stencil numeral inside a tablet card, paired with a stencil headline and Inter body underneath."},"num-stat":{"typography":"{typography.numeral-stat}","suffix":"{typography.attribution}","description":"160px stencil stat numeral with optional small-caps Barlow suffix (e.g., '%') at vertical-align top, 40px."},"cover-lockup":{"description":"Cover-bottom row containing a small rounded mark (56px square, 14px radius, accent fill), an uppercase Barlow name with small subtitle, and a stencil date."},"cover-mark":{"width":"56px","height":"56px","borderRadius":"14px","background":"any accent (default orange)","description":"Small rounded square 'logo' tile in the cover lockup."},"section-num-block":{"description":"Section divider where a 540px stencil numeral fills the left side, a small Barlow eyebrow sits top-right, and a 120px stencil headline runs bottom-right."},"process-node":{"borderRadius":"22px","padding":"24px 22px 22px","description":"Process step card with a 64px stencil ordinal at top, an uppercase stencil h3, and small Inter body. Each step takes a different accent fill."},"timeline-bar":{"background":"{colors.paper}","borderRadius":"14px","padding":"0 28px","height":"50px","description":"Paper-fill horizontal bar at the bottom of process diagrams, containing uppercase Barlow timeline markers spread evenly."},"matrix-cell":{"border":"1.5px solid rgba(10,10,10,0.35)","padding":"18px 22px","description":"Matrix table cell with a single warm-ink hairline border. Head row inverts to black fill with bone text. Last row drops bottom border."},"legend-bar":{"width":"32px","height":"6px","description":"Flat horizontal bar (no border-radius) used as a chart legend swatch."},"quote-panel":{"background":"{colors.magenta} (or any saturated accent)","borderRadius":"26px","padding":"60px 80px","description":"Large rounded panel filling most of the slide, containing a 320px Bowlby One quote mark beside a 60px stencil quote text."},"organic-shape":{"description":"Decorative organic blob (SVG) sitting behind agenda items on the dark agenda layout, in any accent color. The shape is the background, the number and label float on top."},"topbar":{"position":"absolute top 48px, left/right 64px","typography":"{typography.topbar}","description":"Top chrome strip with section name left and meta columns right. Uppercase Barlow Condensed 800."},"footer-chrome":{"position":"absolute bottom 36px, left/right 64px","typography":"{typography.footer}","description":"Bottom chrome strip with date left and deck name right. Uppercase Barlow Condensed 600 at 0.75 opacity."}}},"isInternal":false,"tokens":11611,"sizeBytes":46537},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/stencil-tablet/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/stencil-tablet/preview.md","title":"Stencil-tablet Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstencil-tablet%2Fpreview.md -->","isInternal":false,"tokens":1093,"sizeBytes":4852},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/studio/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/studio/design.md","title":"Studio","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstudio%2Fdesign.md -->","frontmatter":{"version":"alpha","name":"Studio","description":"A \"Boring Studios\" agency presentation system — type-as-graphic-mass in the spirit of contemporary design-studio decks (Pentagram, Anti, Order). The entire system runs on Barlow at weight 900 uppercase, with type so heavy at display scale that it stops being type and starts being a shape. The palette is binary plus one: near-black field (#1C1C1C), acid yellow type (#F5D200), and the same yellow as a full slide background. IBM Plex Mono carries every footer metadata, slide counter, and three-column lockup. No drop shadows, no rounded corners, no accent colors — the headline IS the design, and the only chromatic decision per slide is dark-yellow-on-near-black or near-black-on-acid-yellow.","colors":{"near-black":"#1C1C1C","near-black-alt":"#242422","acid-yellow":"#F5D200","acid-yellow-alt":"#F0CC00","text-on-dark-2":"rgba(245,210,0,0.58)","text-on-dark-3":"rgba(245,210,0,0.32)","text-on-light-2":"rgba(28,28,28,0.62)","text-on-light-3":"rgba(28,28,28,0.35)","border-dark":"#2E2E2C","border-light":"rgba(28,28,28,0.18)"},"color-aliases":{"c-bg":"near-black","c-bg-alt":"near-black-alt","c-bg-light":"acid-yellow","c-bg-light-alt":"acid-yellow-alt","c-fg":"acid-yellow","c-fg-light":"near-black","c-accent":"acid-yellow","c-fg-2":"text-on-dark-2","c-fg-3":"text-on-dark-3","c-fg-light-2":"text-on-light-2","c-fg-light-3":"text-on-light-3"},"typography":{"display":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"12vw","fontWeight":900,"lineHeight":0.9,"letterSpacing":"-0.02em","textTransform":"uppercase"},"h1":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"7.5vw","fontWeight":900,"lineHeight":0.92,"letterSpacing":"-0.02em","textTransform":"uppercase"},"h2":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"4.8vw","fontWeight":900,"lineHeight":0.95,"letterSpacing":"-0.01em","textTransform":"uppercase"},"h3":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"2.8vw","fontWeight":700,"lineHeight":1.1,"textTransform":"uppercase"},"quote-text":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"3.8vw","fontWeight":900,"lineHeight":1.05,"letterSpacing":"-0.02em","textTransform":"uppercase"},"stat-value":{"fontFamily":"Barlow, Noto Sans SC, sans-serif","fontSize":"5.5vw","fontWeight":900,"lineHeight":0.9,"letterSpacing":"-0.03em","textTransform":"uppercase"},"lead":{"fontFamily":"Barlow, Noto Sans SC, system-ui, sans-serif","fontSize":"1.6vw","fontWeight":500,"lineHeight":1.45},"body":{"fontFamily":"Barlow, Noto Sans SC, system-ui, sans-serif","fontSize":"1.15vw","fontWeight":400,"lineHeight":1.6},"caption":{"fontFamily":"Barlow, Noto Sans SC, system-ui, sans-serif","fontSize":"0.85vw","fontWeight":400,"lineHeight":1.5},"label":{"fontFamily":"IBM Plex Mono, monospace","fontSize":"0.72vw","fontWeight":500,"letterSpacing":"0.06em"}},"spacing":{"pad-x":"5vw","pad-y":"5vh","gap-lg":"3.5vh","gap-md":"2vh","gap-sm":"1vh"},"canvas":{"width":"100vw","height":"100vh"},"components":{"chrome-bar":{"borderBottom":"1px solid {colors.border-dark} (or {colors.border-light} on yellow)","paddingBottom":"{spacing.gap-sm}","marginBottom":"{spacing.gap-md}","description":"Top chrome bar — mono label left, mono counter right, hairline rule beneath."},"foot-bar":{"borderTop":"1px solid {colors.border-dark} (or {colors.border-light} on yellow)","paddingTop":"{spacing.gap-sm}","marginTop":"{spacing.gap-md}","description":"Bottom chrome bar — mirror of chrome-bar."},"cover-meta":{"display":"grid 1fr 1fr 1fr","borderTop":"1px solid rgba(245,210,0,0.25)","description":"Three-column mono metadata footer over the cover image: studio × client + date, presentation title (center), studio name (right). The signature 'Boring Studios' lockup."},"stat-card":{"borderTop":"2px solid (acid-yellow on dark, near-black on yellow)","padding":"{spacing.gap-md} {spacing.gap-md} {spacing.gap-md} 0","description":"Stat tile with a 2px top rule. Value at 5.5vw weight 900 in the surface's foreground color; label and mono note beneath."},"bullet-marker":{"content":"—","color":"acid-yellow on dark, near-black on yellow","fontFamily":"{typography.body.fontFamily}","description":"Em-dash bullet prefix on every list item; color follows the surface accent."},"compare-divider":{"borderRight":"2px solid (near-black on yellow, dark-text-3 on dark)","description":"Single vertical 2px rule separating two compare panels."},"bar-fill-default":{"background":"muted text-on-surface (dark-text-3 or light-text-3)","description":"Default chart bar fill — muted version of the surface text color."},"bar-fill-accent":{"background":"acid-yellow on dark, near-black on yellow","description":"Highlighted chart bar — the surface's primary foreground color."},"chart-baseline":{"height":"2px","background":"muted accent (dark-text-3 or border-light)","description":"Heavier 2px baseline beneath chart bars — Studio uses thicker rules than Signal."},"cover-img-area":{"position":"absolute inset 0","background":"{colors.near-black-alt}","description":"Cover image placeholder filling the entire slide behind the cover-type and cover-meta. Image-or-placeholder occupies the whole canvas; type sits on top."},"img-placeholder":{"background":"near-black-alt on dark, acid-yellow-alt on yellow","description":"Warm-toned rectangular placeholder for images, centered mono label inside, no border on dark / hairline border on yellow."}}},"isInternal":false,"tokens":9712,"sizeBytes":39487},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/studio/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/studio/preview.md","title":"Studio Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fstudio%2Fpreview.md -->","isInternal":false,"tokens":1083,"sizeBytes":4754},{"name":"design.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/vellum/design.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/vellum/design.md","title":"Vellum","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fvellum%2Fdesign.md -->","frontmatter":{"version":"alpha","name":"Vellum","description":"An essay-pinned-to-a-wall presentation system — a single monochromatic field of deep periwinkle (#2A3870) with warm chartreuse-yellow type (#E8D85C) floating centered on it, every slide. Italic Cormorant Garamond carries every headline at all sizes — the italic serif is the personality, against the bold colorfield. DM Sans handles body in a quiet supporting role. Courier Prime mono provides the typed annotation voice — appearing as a \"pin-note\" attribution sitting in the bottom-left corner of every slide. The mood is gallery exhibition wall meets archive folder — quiet, monochromatic, deeply still. One color, two warm typefaces, zero motion.","colors":{"navy":"#2A3870","navy-alt":"#343F80","navy-deep":"#1F2858","navy-mid":"#34407A","yellow":"#E8D85C","yellow-2":"rgba(232,216,92,0.62)","yellow-3":"rgba(232,216,92,0.32)","emphasis-yellow":"#F5E168","teal":"#3A7878","border":"rgba(232,216,92,0.20)"},"color-aliases":{"c-bg":"navy","c-bg-alt":"navy-alt","c-bg-light":"navy","c-fg":"yellow","c-fg-2":"yellow-2","c-fg-3":"yellow-3","c-fg-light":"yellow","c-emphasis":"emphasis-yellow","c-accent":"teal","c-border":"border"},"typography":{"display":{"fontFamily":"Cormorant Garamond, Noto Serif SC, Georgia, serif","fontSize":"11vw","fontWeight":400,"fontStyle":"italic","lineHeight":0.92,"letterSpacing":"-0.01em"},"h1":{"fontFamily":"Cormorant Garamond, Noto Serif SC, Georgia, serif","fontSize":"7vw","fontWeight":400,"fontStyle":"italic","lineHeight":0.95,"letterSpacing":"-0.01em"},"h2":{"fontFamily":"Cormorant Garamond, Noto Serif SC, Georgia, serif","fontSize":"4vw","fontWeight":400,"fontStyle":"italic","lineHeight":1.05},"h3":{"fontFamily":"Cormorant Garamond, Noto Serif SC, Georgia, serif","fontSize":"2.4vw","fontWeight":500,"fontStyle":"italic","lineHeight":1.15},"quote-text":{"fontFamily":"Cormorant Garamond, Noto Serif SC, Georgia, serif","fontSize":"3.2vw","fontWeight":400,"fontStyle":"italic","lineHeight":1.25},"quote-mark":{"fontFamily":"Cormorant Garamond, Noto Serif SC, Georgia, serif","fontSize":"7vw","fontWeight":400,"fontStyle":"italic","lineHeight":0.6,"color":"{colors.teal}"},"stat-value":{"fontFamily":"Cormorant Garamond, Noto Serif SC, Georgia, serif","fontSize":"5.5vw","fontWeight":400,"fontStyle":"italic","lineHeight":1,"letterSpacing":"-0.02em"},"lead":{"fontFamily":"DM Sans, Noto Sans SC, system-ui, sans-serif","fontSize":"1.5vw","fontWeight":400,"lineHeight":1.6},"body":{"fontFamily":"DM Sans, Noto Sans SC, system-ui, sans-serif","fontSize":"1.05vw","fontWeight":400,"lineHeight":1.65},"caption":{"fontFamily":"DM Sans, Noto Sans SC, system-ui, sans-serif","fontSize":"0.85vw","fontWeight":400,"lineHeight":1.5},"label":{"fontFamily":"Courier Prime, Courier New, monospace","fontSize":"0.72vw","fontWeight":400,"letterSpacing":"0.06em"},"pin-note":{"fontFamily":"Courier Prime, Courier New, monospace","fontSize":"1.15vw","fontWeight":500,"lineHeight":1.5,"color":"{colors.teal}","letterSpacing":"0.01em"},"bar-val":{"fontFamily":"Courier Prime, Courier New, monospace","fontSize":"1.1vw","fontWeight":400,"lineHeight":1}},"spacing":{"pad-x":"6vw","pad-y":"6vh","gap-lg":"5vh","gap-md":"3vh","gap-sm":"1.5vh"},"canvas":{"width":"100vw","height":"100vh"},"components":{"pin-annotation":{"position":"absolute bottom-left, padding ~0.9 * pad-y from bottom and 1 * pad-x from left","typography":"{typography.pin-note}","color":"{colors.teal}","maxWidth":"22vw","description":"The system's signature element — a small stack of Courier Prime mono lines in dusty teal, sitting in the bottom-left of every slide. Holds slide counter (e.g., '03 / 09'), a short pinned label, and an optional second pin note. Functions as the 'tag stuck to the wall.'"},"kicker":{"typography":"{typography.label}","color":"{colors.teal}","description":"Small Courier Prime mono label in dusty teal, sits above a headline as a section marker."},"rule":{"width":"28px","height":"1px","background":"{colors.teal}","description":"A 28px hairline accent rule in dusty teal, used as a small kicker separator."},"chrome-bar":{"borderBottom":"1px solid {colors.border}","paddingBottom":"{spacing.gap-sm}","marginBottom":"{spacing.gap-md}","description":"Top chrome bar — mono label left, mono counter right, low-opacity hairline rule beneath."},"foot-bar":{"borderTop":"1px solid {colors.border}","paddingTop":"{spacing.gap-sm}","marginTop":"{spacing.gap-md}","description":"Bottom chrome bar — mirror of chrome-bar."},"bullet-list-numbered":{"listStyle":"none","counter":"list-counter","markerFontFamily":"{typography.label.fontFamily}","markerColor":"{colors.teal}","markerSize":"{typography.label.fontSize}","description":"Numbered list using CSS counters — the counter renders in Courier Prime mono at label size in dusty teal, with a 2em column for the number and 0.5em gap to the body."},"pin-stat":{"borderRight":"1px solid {colors.border}","padding":"{spacing.gap-md}","description":"Vertically-arranged centered stat (italic serif numeral above mono label), separated from neighbors by a single 1px low-opacity hairline. Last stat in row drops the border."},"pin-stat-val":{"typography":"{typography.stat-value}","color":"{colors.yellow}","description":"Large italic serif stat numeral (5.5vw italic Cormorant Garamond), centered in a pin-stat tile."},"pin-stat-label":{"typography":"{typography.caption}","fontFamily":"{typography.label.fontFamily}","color":"{colors.yellow-2}","description":"Small mono caption beneath a pin-stat numeral."},"compare-panel-dark":{"background":"{colors.navy-deep}","description":"Left compare panel — a slightly deeper navy to create internal contrast against the standard navy field."},"compare-panel-light":{"background":"{colors.navy-mid}","borderLeft":"1px solid {colors.border}","description":"Right compare panel — a slightly lighter navy with a hairline left-border, creating the two-shade panel pair."},"bar-fill-default":{"background":"{colors.yellow-3}","description":"Default chart bar fill — yellow at 32% opacity (the tier-3 muted color)."},"bar-fill-accent":{"background":"{colors.yellow}","description":"Highlighted chart bar — full yellow."},"chart-baseline":{"height":"1px","background":"{colors.border}","description":"1px hairline baseline beneath chart bars."},"img-placeholder":{"background":"rgba(42,56,112,0.12)","border":"1px dashed {colors.border}","description":"Image slot — translucent navy fill with a dashed yellow-low-opacity border, centered mono label inside."},"quote-mark":{"typography":"{typography.quote-mark}","color":"{colors.teal}","description":"A 7vw italic Cormorant Garamond opening quote glyph in dusty teal, sitting centered above a centered pull-quote. The teal color is the system's only large-graphic accent."}}},"isInternal":false,"tokens":10882,"sizeBytes":44168},{"name":"preview.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/vellum/preview.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/vellum/preview.md","title":"Vellum Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2Ftemplates%2Fvellum%2Fpreview.md -->","isInternal":false,"tokens":1070,"sizeBytes":4705},{"name":"html-template.md","path":"plugins/frontend-slides/skills/frontend-slides/html-template.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/html-template.md","title":"Frontend-slides Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fhtml-template.md -->","isInternal":false,"tokens":2626,"sizeBytes":11460},{"name":"SKILL.md","path":"plugins/frontend-slides/skills/frontend-slides/SKILL.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/SKILL.md","title":"frontend-slides","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2FSKILL.md -->","frontmatter":{"name":"frontend-slides","description":"Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to build a presentation, convert a PPT/PPTX to web, or create slides for a talk/pitch. Helps non-designers discover their aesthetic through visual exploration rather than abstract choices."},"isInternal":false,"tokens":6153,"sizeBytes":28187},{"name":"STYLE_PRESETS.md","path":"plugins/frontend-slides/skills/frontend-slides/STYLE_PRESETS.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/STYLE_PRESETS.md","title":"Frontend-slides Skill","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2FSTYLE_PRESETS.md -->","isInternal":false,"tokens":2397,"sizeBytes":8201},{"name":"SKILL.md","path":"SKILL.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/SKILL.md","title":"frontend-slides","category":"anthropic-skill","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=SKILL.md -->","frontmatter":{"name":"frontend-slides","description":"Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to build a presentation, convert a PPT/PPTX to web, or create slides for a talk/pitch. Helps non-designers discover their aesthetic through visual exploration rather than abstract choices."},"isInternal":false,"tokens":6153,"sizeBytes":28187},{"name":"marketplace.json","path":".claude-plugin/marketplace.json","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/.claude-plugin/marketplace.json","title":"frontend-slides","category":"marketplace","format":"json","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=.claude-plugin%2Fmarketplace.json -->","frontmatter":{"$schema":"https://anthropic.com/claude-code/marketplace.schema.json","name":"frontend-slides","description":"Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files.","owner":{"name":"zarazhangrui","url":"https://github.com/zarazhangrui"},"plugins":[{"name":"frontend-slides","description":"Zero-dependency HTML presentation generator with safe presets, bold template-library styles, PPT conversion, and anti-AI-slop design philosophy.","source":"./plugins/frontend-slides","category":"productivity","tags":["presentations","slides","html","design","powerpoint","templates"]}]},"isInternal":false,"tokens":180,"sizeBytes":716},{"name":"plugin.json","path":"plugins/frontend-slides/.claude-plugin/plugin.json","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/.claude-plugin/plugin.json","title":"frontend-slides","category":"plugin-manifest","format":"json","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2F.claude-plugin%2Fplugin.json -->","frontmatter":{"name":"frontend-slides","version":"2.1.0","description":"Zero-dependency HTML presentation generator with safe presets, bold template-library styles, PPT conversion, and anti-AI-slop design philosophy.","skills":"./skills/","author":{"name":"zarazhangrui","url":"https://github.com/zarazhangrui"},"homepage":"https://github.com/zarazhangrui/frontend-slides","repository":"https://github.com/zarazhangrui/frontend-slides","license":"MIT","keywords":["presentations","slides","html","design","powerpoint","animations","templates"]},"isInternal":false,"tokens":168,"sizeBytes":590},{"name":"README.md","path":"plugins/frontend-slides/skills/frontend-slides/bold-template-pack/README.md","rawUrl":"https://raw.githubusercontent.com/zarazhangrui/frontend-slides/HEAD/plugins/frontend-slides/skills/frontend-slides/bold-template-pack/README.md","title":"bold-template-pack Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/zarazhangrui/frontend-slides?path=plugins%2Ffrontend-slides%2Fskills%2Ffrontend-slides%2Fbold-template-pack%2FREADME.md -->","isInternal":false,"tokens":742,"sizeBytes":3308}],"systemPromptSnippet":"<yakaai_skills repo=\"zarazhangrui/frontend-slides\">\n<!-- File: plugins/frontend-slides/skills/frontend-slides/animation-patterns.md (Tokens: ~1031 | Category: anthropic-skill) -->\n# Animation Patterns Reference\n\nUse this reference when generating presentations. Match animations to the intended feeling.\n\n## Effect-to-Feeling Guide\n\n| Feeling | Animations | Visual Cues |\n|---------|-----------|-------------|\n| **Dramatic / Cinematic** | Slow fade-ins (1-1.5s), large scale transitions (0.9 to 1), parallax scrolling | Dark backgrounds, spotlight effects, full-bleed images |\n| **Techy / Futuristic** | Neon glow (box-shadow), glitch/scramble text, grid reveals | Particle systems (canvas), grid patterns, monospace accents, cyan/magenta/electric blue |\n| **Playful / Friendly** | Bouncy easing (spring physics), floating/bobbing | Rounded corners, pastel/bright colors, hand-drawn elements |\n| **Professional / Corporate** | Subtle fast animations (200-300ms), clean slides | Navy/slate/charcoal, precise spacing, data visualization focus |\n| **Calm / Minimal** | Very slow subtle motion, gentle fades | High whitespace, muted palette, serif typography, generous padding |\n| **Editorial / Magazine** | Staggered text reveals, image-text interplay | Strong type hierarchy, pull quotes, grid-breaking layouts, serif headlines + sans body |\n\n## Entrance Animations\n\n```css\n/* Fade + Slide Up (most versatile) */\n.reveal {\n    opacity: 0;\n    transform: translateY(30px);\n    transition: opacity 0.6s var(--ease-out-expo),\n                transform 0.6s var(--ease-out-expo);\n}\n.visible .reveal {\n    opacity: 1;\n    transform: translateY(0);\n}\n\n/* Scale In */\n.reveal-scale {\n    opacity: 0;\n    transform: scale(0.9);\n    transition: opacity 0.6s, transform 0.6s var(--ease-out-expo);\n}\n\n/* Slide from Left */\n.reveal-left {\n    opacity: 0;\n    transform: translateX(-50px);\n    transition: opacity 0.6s, transform 0.6s var(--ease-out-expo);\n}\n\n/* Blur In */\n.reveal-blur {\n    opacity: 0;\n    filter: blur(10px);\n    transition: opacity 0.8s, filter 0.8s var(--ease-out-expo);\n}\n```\n\n## Background Effects\n\n```css\n/* Gradient Mesh — layered radial gradients for depth */\n.gradient-bg {\n    background:\n        radial-gradient(ellipse at 20% 80%, rgba(120, 0, 255, 0.3) 0%, transparent 50%),\n        radial-gradient(ellipse at 80% 20%, rgba(0, 255, 200, 0.2) 0%, transparent 50%),\n        var(--bg-primary);\n}\n\n/* Noise Texture — inline SVG for grain */\n.noise-bg {\n    background-image: url(\"data:image/svg+xml,...\"); /* Inline SVG noise */\n}\n\n/* Grid Pattern — subtle structural lines */\n.grid-bg {\n    background-image:\n        linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px),\n        linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px);\n    background-size: 50px 50px;\n}\n```\n\n## Interactive Effects\n\n```javascript\n/* 3D Tilt on Hover — adds depth to cards/panels */\nclass TiltEffect {\n    constructor(element) {\n        this.element = element;\n        this.element.style.transformStyle = 'preserve-3d';\n        this.element.style.perspective = '1000px';\n\n        this.element.addEventListener('mousemove', (e) => {\n            const rect = this.element.getBoundingClientRect();\n            const x = (e.clientX - rect.left) / rect.width - 0.5;\n            const y = (e.clientY - rect.top) / rect.height - 0.5;\n            this.element.style.transform = `rotateY(${x * 10}deg) rotateX(${-y * 10}deg)`;\n        });\n\n        this.element.addEventListener('mouseleave', () => {\n            this.element.style.transform = 'rotateY(0) rotateX(0)';\n        });\n    }\n}\n```\n\n## Troubleshooting\n\n| Problem | Fix |\n|---------|-----|\n| Fonts not loading | Check Fontshare/Google Fonts URL; ensure font names match in CSS |\n| Animations not triggering | Verify Intersection Observer is running; check `.visible` class is being added |\n| Scroll snap not working | Ensure `scroll-snap-type: y mandatory` on html; each slide needs `scroll-snap-align: start` |\n| Mobile issues | Disable heavy effects at 768px breakpoint; test touch events; reduce particle count |\n| Performance issues | Use `will-change` sparingly; prefer `transform`/`opacity` animations; throttle scroll handlers |\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/selection-index.json (Tokens: ~9019 | Category: anthropic-skill) -->\n{\n  \"schema_version\": 1,\n  \"pack_name\": \"Beautiful HTML Templates - Bold Design Pack\",\n  \"source_repo\": \"zarazhangrui/beautiful-html-templates\",\n  \"template_count\": 34,\n  \"usage\": {\n    \"selection\": \"Read this compact index first to shortlist bold templates from metadata.\",\n    \"previews\": \"For title-slide previews, read only the preview_md files for the shortlisted bold candidates.\",\n    \"final_generation\": \"After the user chooses a bold template, read exactly that template design_md before generating the full deck.\",\n    \"never\": \"Do not bulk-read templates/*/design.md and do not read template.html unless the selected design.md is missing a critical implementation detail.\"\n  },\n  \"frontend_slides_policy\": {\n    \"layout_model\": \"fixed-stage\",\n    \"canvas_width\": 1920,\n    \"canvas_height\": 1080,\n    \"scaling\": \"scale-stage-to-viewport\",\n    \"mobile_behavior\": \"preserve 16:9 stage; letterbox or pillarbox instead of reflowing slide content\"\n  },\n  \"templates\": [\n    {\n      \"slug\": \"8-bit-orbit\",\n      \"name\": \"8-Bit Orbit\",\n      \"tagline\": \"Pixel-art neon arcade aesthetic on a deep navy void.\",\n      \"mood\": [\n        \"retro-tech\",\n        \"playful\",\n        \"cyberpunk\",\n        \"energetic\"\n      ],\n      \"tone\": [\n        \"geeky\",\n        \"neon\",\n        \"rebellious\",\n        \"sci-fi\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos. Just as good for a tech talk that wants to lean into nostalgic-digital craft, a synthwave brand deck, or a creative review that wants to feel like a console.\",\n      \"avoid_for\": \"Contexts where the dark neon palette would actively work against the message — quiet institutional finance disclosures, healthcare patient-facing materials, traditional luxury.\",\n      \"preview_md\": \"bold-template-pack/templates/8-bit-orbit/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/8-bit-orbit/design.md\"\n    },\n    {\n      \"slug\": \"biennale-yellow\",\n      \"name\": \"Biennale Yellow\",\n      \"tagline\": \"Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients.\",\n      \"mood\": [\n        \"editorial\",\n        \"atmospheric\",\n        \"warm\",\n        \"cultural-institution\",\n        \"poster-like\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"contemplative\",\n        \"warm-modern\",\n        \"Dutch-editorial\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, studio retrospectives. Equally good for any deck wanting Dutch-editorial atmosphere with an unmistakable single-color signature.\",\n      \"avoid_for\": \"Decks that need visual punch or saturated multi-color energy — the warm-paper canvas and one-yellow palette are intentionally quiet and atmospheric.\",\n      \"preview_md\": \"bold-template-pack/templates/biennale-yellow/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/biennale-yellow/design.md\"\n    },\n    {\n      \"slug\": \"block-frame\",\n      \"name\": \"BlockFrame\",\n      \"tagline\": \"Neobrutalist deck with pastel-neon color blocks and chunky black borders.\",\n      \"mood\": [\n        \"bold\",\n        \"playful\",\n        \"graphic\",\n        \"fresh\"\n      ],\n      \"tone\": [\n        \"confident\",\n        \"graphic\",\n        \"pop\",\n        \"design-led\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns. Also a strong unexpected pick for tech, finance, or research when the speaker wants to land as confident and contemporary rather than buttoned-up.\",\n      \"avoid_for\": \"Contexts that require quiet institutional restraint or traditional weight (regulated disclosures, formal legal briefs).\",\n      \"preview_md\": \"bold-template-pack/templates/block-frame/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/block-frame/design.md\"\n    },\n    {\n      \"slug\": \"blue-professional\",\n      \"name\": \"Blue Professional\",\n      \"tagline\": \"Cream paper background with electric cobalt blue accents; clean modern professional.\",\n      \"mood\": [\n        \"professional\",\n        \"modern\",\n        \"calm\",\n        \"trustworthy\"\n      ],\n      \"tone\": [\n        \"clean\",\n        \"considered\",\n        \"polished\",\n        \"neutral\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports. Also a clean, tasteful choice whenever you want to read as professional without going stiff — research synthesis, internal reviews, brand work for service businesses.\",\n      \"avoid_for\": \"Contexts where the deck should feel hot, playful, or intentionally informal — the cool electric-blue restraint will read as overly polished.\",\n      \"preview_md\": \"bold-template-pack/templates/blue-professional/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/blue-professional/design.md\"\n    },\n    {\n      \"slug\": \"bold-poster\",\n      \"name\": \"Bold Poster\",\n      \"tagline\": \"Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent.\",\n      \"mood\": [\n        \"bold\",\n        \"editorial\",\n        \"loud\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"dramatic\",\n        \"graphic\",\n        \"sharp\",\n        \"intentional\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews. Excellent any time you want a few words to feel like a poster — including unexpected fits like a tech keynote or a finance manifesto that wants to be quotable.\",\n      \"avoid_for\": \"Decks that need to communicate dense information per slide — the layout is built around a few large statements, not paragraphs of detail.\",\n      \"preview_md\": \"bold-template-pack/templates/bold-poster/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/bold-poster/design.md\"\n    },\n    {\n      \"slug\": \"broadside\",\n      \"name\": \"Broadside\",\n      \"tagline\": \"Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack.\",\n      \"mood\": [\n        \"editorial\",\n        \"dramatic\",\n        \"loud\",\n        \"newspaper\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"punchy\",\n        \"literary\",\n        \"considered\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements. Also a striking pick for tech, research, or business decks that want a dramatic single-accent editorial feel.\",\n      \"avoid_for\": \"Decks that need to feel quiet, warm, or institutionally traditional — the dark canvas with fire-orange accent commits to drama.\",\n      \"preview_md\": \"bold-template-pack/templates/broadside/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/broadside/design.md\"\n    },\n    {\n      \"slug\": \"capsule\",\n      \"name\": \"Capsule\",\n      \"tagline\": \"Modular pill-shaped cards on warm bone with a full pastel-pop palette.\",\n      \"mood\": [\n        \"playful\",\n        \"modern\",\n        \"warm\",\n        \"fresh\",\n        \"fun\"\n      ],\n      \"tone\": [\n        \"upbeat\",\n        \"graphic\",\n        \"approachable\",\n        \"cool\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials. Also fun for a playful tech demo or a research deck that wants pop-art clarity instead of gravitas.\",\n      \"avoid_for\": \"Contexts that require traditional institutional weight — the capsule shapes and pastel pops actively soften authority.\",\n      \"preview_md\": \"bold-template-pack/templates/capsule/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/capsule/design.md\"\n    },\n    {\n      \"slug\": \"cartesian\",\n      \"name\": \"Cartesian\",\n      \"tagline\": \"Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried.\",\n      \"mood\": [\n        \"quiet\",\n        \"considered\",\n        \"elegant\",\n        \"warm-minimal\"\n      ],\n      \"tone\": [\n        \"classical\",\n        \"literary\",\n        \"restrained\",\n        \"confident-quiet\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks. Also a strong choice for editorial features, founder reflections, or any deck where restraint is the message — including across tech and finance.\",\n      \"avoid_for\": \"Decks that need visual heat, multiple accents, or a sense of urgency — the warm-neutral palette is intentionally low-energy.\",\n      \"preview_md\": \"bold-template-pack/templates/cartesian/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/cartesian/design.md\"\n    },\n    {\n      \"slug\": \"cobalt-grid\",\n      \"name\": \"Cobalt Grid\",\n      \"tagline\": \"Electric cobalt serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules.\",\n      \"mood\": [\n        \"editorial\",\n        \"design-research\",\n        \"studious\",\n        \"modernist\",\n        \"tech-print\",\n        \"monochrome\"\n      ],\n      \"tone\": [\n        \"considered\",\n        \"literary\",\n        \"studious\",\n        \"quietly-modern\",\n        \"editorial\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report. Strong for studio annuals, agency capabilities decks, design-research publications, architecture / art / academic decks, and any deck wanting one strict accent colour and a printed-ledger calmness rather than corporate polish.\",\n      \"avoid_for\": \"Decks that need warmth, multi-colour energy, or a casual / playful voice — the strict cobalt + cream + grid palette is intentionally austere.\",\n      \"preview_md\": \"bold-template-pack/templates/cobalt-grid/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/cobalt-grid/design.md\"\n    },\n    {\n      \"slug\": \"coral\",\n      \"name\": \"Coral\",\n      \"tagline\": \"Cream and coral on near-black, set in oversized Bebas Neue.\",\n      \"mood\": [\n        \"bold\",\n        \"warm\",\n        \"modern\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"punchy\",\n        \"magazine\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials. Just as strong for a creator portfolio, a manifesto, or a tech / research deck that wants warmth and a single bold accent instead of corporate cool.\",\n      \"avoid_for\": \"Contexts that should feel quiet or institutional — the coral accent and oversized Bebas Neue commit hard to a confident magazine voice.\",\n      \"preview_md\": \"bold-template-pack/templates/coral/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/coral/design.md\"\n    },\n    {\n      \"slug\": \"creative-mode\",\n      \"name\": \"Creative Mode\",\n      \"tagline\": \"Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display.\",\n      \"mood\": [\n        \"creative\",\n        \"confident\",\n        \"playful\",\n        \"design-led\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"expressive\",\n        \"modern\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium-high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews. Also a great unexpected pick for a tech talk, research findings, or finance review when the speaker wants to lead with taste rather than convention.\",\n      \"avoid_for\": \"Contexts that demand institutional restraint and a quiet authority — the saturated multi-accent palette will read as expressive, not formal.\",\n      \"preview_md\": \"bold-template-pack/templates/creative-mode/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/creative-mode/design.md\"\n    },\n    {\n      \"slug\": \"daisy-days\",\n      \"name\": \"Daisy Days\",\n      \"tagline\": \"Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm.\",\n      \"mood\": [\n        \"cheerful\",\n        \"playful\",\n        \"warm\",\n        \"sunny\",\n        \"wholesome\"\n      ],\n      \"tone\": [\n        \"friendly\",\n        \"soft\",\n        \"encouraging\",\n        \"approachable\",\n        \"lighthearted\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration. Also lovely for an unexpected playful internal kickoff, a wedding planning deck, or any moment where warmth is the message — including across tech or business contexts.\",\n      \"avoid_for\": \"Contexts where the audience explicitly expects authority and precision — the hand-drawn pastel SVG decorations are the opposite of buttoned-up.\",\n      \"preview_md\": \"bold-template-pack/templates/daisy-days/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/daisy-days/design.md\"\n    },\n    {\n      \"slug\": \"editorial-forest\",\n      \"name\": \"Editorial Forest\",\n      \"tagline\": \"Forest green, dusty pink, and warm cream meet Source Serif 4 in a quiet, intentional quarterly-review deck.\",\n      \"mood\": [\n        \"editorial\",\n        \"quiet\",\n        \"considered\",\n        \"warm\",\n        \"intentional\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"thoughtful\",\n        \"warm\",\n        \"low-pressure\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like a considered editorial — quarterly reviews, internal readouts, studio updates, creative-agency presentations. Equally good for any deck that wants to feel warm and unhurried rather than corporate, including research recaps, book or program announcements, and team retrospectives.\",\n      \"avoid_for\": \"Contexts that need to feel urgent, punchy, or sales-driven — the palette and rhythm are intentionally quiet.\",\n      \"preview_md\": \"bold-template-pack/templates/editorial-forest/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/editorial-forest/design.md\"\n    },\n    {\n      \"slug\": \"editorial-tri-tone\",\n      \"name\": \"Editorial Tri-Tone\",\n      \"tagline\": \"Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif.\",\n      \"mood\": [\n        \"editorial\",\n        \"warm\",\n        \"intentional\",\n        \"moody\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"warm\",\n        \"considered\",\n        \"stylish\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews. Equally good for any deck — including tech, research, or business — that wants tri-tone discipline and serif/sans contrast instead of the usual neutrals.\",\n      \"avoid_for\": \"Decks that need to read as soft or comforting — the burgundy/pink/cream tri-tone is intentionally high-contrast and styled.\",\n      \"preview_md\": \"bold-template-pack/templates/editorial-tri-tone/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/editorial-tri-tone/design.md\"\n    },\n    {\n      \"slug\": \"emerald-editorial\",\n      \"name\": \"Emerald Editorial\",\n      \"tagline\": \"A magazine-cover business deck: emerald + navy + paper, double-rule masthead ornaments, and a bold Bodoni-style display serif.\",\n      \"mood\": [\n        \"editorial\",\n        \"considered\",\n        \"confident\",\n        \"magazine-cover\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"authoritative\",\n        \"warm\",\n        \"designed\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel like the front of a serious magazine, including but not limited to leadership readouts, planning-office reviews, and strategy briefings. The double-rule masthead ornament gives it editorial gravitas without making it stiff — also a great unexpected pick for product launches or research recaps that want to feel considered rather than corporate.\",\n      \"avoid_for\": \"Contexts that need to read as quiet, neutral, or institutionally restrained — the emerald field is too saturated to disappear into the background.\",\n      \"preview_md\": \"bold-template-pack/templates/emerald-editorial/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/emerald-editorial/design.md\"\n    },\n    {\n      \"slug\": \"grove\",\n      \"name\": \"Grove\",\n      \"tagline\": \"Forest-green canvas with cream type, classical Playfair serifs, and a single rust accent.\",\n      \"mood\": [\n        \"organic\",\n        \"considered\",\n        \"warm\",\n        \"literary\",\n        \"natural\"\n      ],\n      \"tone\": [\n        \"classical\",\n        \"warm\",\n        \"considered\",\n        \"patient\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel organic, considered, and grown-up: sustainability and wellness brands, outdoor / nature products, wineries and restaurants, literary or arts decks, advisory deliverables, bilingual EN/CN reports. Also a calm, distinctive choice for tech, research, or business decks that want patience over urgency.\",\n      \"avoid_for\": \"Decks that need neon energy or rapid-fire pop — the forest-green canvas and Playfair serif commit to a slow, classical voice.\",\n      \"preview_md\": \"bold-template-pack/templates/grove/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/grove/design.md\"\n    },\n    {\n      \"slug\": \"long-table\",\n      \"name\": \"Long Table\",\n      \"tagline\": \"Warm cream and rust-red supper-club aesthetic with bold uppercase grotesk headlines, Fraunces serifs, and pill-shaped outlined buttons.\",\n      \"mood\": [\n        \"warm\",\n        \"intimate\",\n        \"modern\",\n        \"friendly\",\n        \"small-batch\",\n        \"social\",\n        \"hospitality\"\n      ],\n      \"tone\": [\n        \"warm\",\n        \"playful\",\n        \"considered\",\n        \"social\",\n        \"magazine-friendly\",\n        \"modern-editorial\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a warm, intimate, modern hospitality / community brand: supper clubs, dinner series, small restaurants, creative-studio events, membership pitches, lifestyle and wine brands. Equally good for any deck wanting a single warm accent colour, mixed-weight typography, and a social-media-aware modern-editorial voice.\",\n      \"avoid_for\": \"Decks that need corporate polish, technical density, or a cold / minimalist register — the rust-red palette and bold serif mix are intentionally warm and people-facing.\",\n      \"preview_md\": \"bold-template-pack/templates/long-table/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/long-table/design.md\"\n    },\n    {\n      \"slug\": \"mat\",\n      \"name\": \"Mat\",\n      \"tagline\": \"Dark sage canvas with bone paper and burnt-orange accent; mid-century modern with wood undertones.\",\n      \"mood\": [\n        \"warm-modern\",\n        \"considered\",\n        \"tactile\",\n        \"mid-century\"\n      ],\n      \"tone\": [\n        \"warm\",\n        \"design-led\",\n        \"intentional\",\n        \"considered\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel mid-century, tactile, and intentional: design studio credentials, architecture / interior brands, ceramics / craft / furniture, advisory decks. Also a warm, distinctive choice for tech, research, or business decks that want a considered analog feel instead of digital-cool.\",\n      \"avoid_for\": \"Contexts that need fast tech energy or institutional restraint — the muted sage and burnt-orange palette is intentionally warm and slow.\",\n      \"preview_md\": \"bold-template-pack/templates/mat/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/mat/design.md\"\n    },\n    {\n      \"slug\": \"monochrome\",\n      \"name\": \"Monochrome\",\n      \"tagline\": \"Ivory ledger paper with all-black type; Lora serif headlines, Jost body, no color at all.\",\n      \"mood\": [\n        \"restrained\",\n        \"literary\",\n        \"archival\",\n        \"ledger\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"neutral\",\n        \"honest\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a hand-typeset ledger: user research synthesis, white papers, longform reports, academic and policy briefs, advisory deliverables, bilingual EN/CN reports. Equally good for tech, design, or brand decks that want their words to be the only thing on the page.\",\n      \"avoid_for\": \"Decks that need visual personality or color-led storytelling — the all-ink palette is intentionally austere.\",\n      \"preview_md\": \"bold-template-pack/templates/monochrome/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/monochrome/design.md\"\n    },\n    {\n      \"slug\": \"neo-grid-bold\",\n      \"name\": \"Neo-Grid Bold\",\n      \"tagline\": \"Editorial neo-brutalism with a single neon yellow accent on off-white paper.\",\n      \"mood\": [\n        \"confident\",\n        \"punchy\",\n        \"editorial\",\n        \"modern\"\n      ],\n      \"tone\": [\n        \"bold\",\n        \"minimal\",\n        \"design-led\",\n        \"graphic\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel confident and editorial-graphic: design-led pitches, brand work, founder talks, conference keynotes. Excellent for stat-heavy slides, comparisons, and process flows. Just as strong for tech, research, or finance when the speaker wants to read as design-led rather than corporate.\",\n      \"avoid_for\": \"Contexts that need to feel quiet, traditional, or warm — the neon-yellow accent and uppercase display commit to a confident editorial voice.\",\n      \"preview_md\": \"bold-template-pack/templates/neo-grid-bold/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/neo-grid-bold/design.md\"\n    },\n    {\n      \"slug\": \"peoples-platform\",\n      \"name\": \"People's Platform (Block & Bold)\",\n      \"tagline\": \"Activist poster energy: blue, orange, red on cream, with Alfa Slab + Caveat Brush.\",\n      \"mood\": [\n        \"activist\",\n        \"loud\",\n        \"graphic\",\n        \"honest\"\n      ],\n      \"tone\": [\n        \"punchy\",\n        \"direct\",\n        \"expressive\",\n        \"warm-bold\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium-high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel honest, loud, and graphic: cultural commentary, manifestos, civic and community decks, design talks, campaign pitches. Excellent for founder-vision moments, mission statements, or any deck — including across industries — that wants protest-poster energy instead of corporate polish.\",\n      \"avoid_for\": \"Contexts where institutional restraint is the actual goal — the saturated political-poster palette commits hard to expressive energy.\",\n      \"preview_md\": \"bold-template-pack/templates/peoples-platform/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/peoples-platform/design.md\"\n    },\n    {\n      \"slug\": \"pin-and-paper\",\n      \"name\": \"Pin & Paper\",\n      \"tagline\": \"Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture.\",\n      \"mood\": [\n        \"crafted\",\n        \"handmade\",\n        \"warm\",\n        \"thoughtful\",\n        \"literary\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"intimate\",\n        \"warm\",\n        \"grounded\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel hand-crafted, warm, and literary: qualitative research findings, founder reflections, longform brand stories, workshop debriefs. The signature safety-pin illustrations and paper-grain texture make it especially good for any deck — including tech or business — that wants personality and warmth over polish.\",\n      \"avoid_for\": \"Decks that need to feel digital-native polished or rigorously data-driven — handwritten Caveat is intentionally informal.\",\n      \"preview_md\": \"bold-template-pack/templates/pin-and-paper/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/pin-and-paper/design.md\"\n    },\n    {\n      \"slug\": \"pink-script\",\n      \"name\": \"Pink Script — After Hours\",\n      \"tagline\": \"Black canvas, hot pink accent, pearl-cream paper, Instrument Serif headlines: late-night editorial luxury.\",\n      \"mood\": [\n        \"nocturnal\",\n        \"moody\",\n        \"intentional\",\n        \"luxe\",\n        \"expressive\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"sultry\",\n        \"considered\",\n        \"magazine\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"low\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel nocturnal, intentional, and a little luxe: fashion brand decks, creator personal brands, after-hours / nightlife / spirits launches, luxury product reveals, editorial features. Also a striking unexpected pick for a tech keynote, research synthesis, or business pitch that wants to land with magnetic confidence.\",\n      \"avoid_for\": \"Daytime corporate-professional and traditional B2B contexts where the dark canvas with hot-pink accent reads as too styled or too expressive.\",\n      \"preview_md\": \"bold-template-pack/templates/pink-script/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/pink-script/design.md\"\n    },\n    {\n      \"slug\": \"playful\",\n      \"name\": \"Playful\",\n      \"tagline\": \"Sun-warm peach background with Syne display: a friendly indie launch deck.\",\n      \"mood\": [\n        \"warm\",\n        \"approachable\",\n        \"indie\",\n        \"friendly\"\n      ],\n      \"tone\": [\n        \"upbeat\",\n        \"informal\",\n        \"welcoming\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel warm, indie, and approachable: creator portfolios, indie product launches, lifestyle brands, small-business pitches, newsletter / community decks. Also welcoming for any deck — including tech or research — that wants to feel friendly and human rather than corporate.\",\n      \"avoid_for\": \"Contexts where institutional credibility matters more than warmth — the peach palette is intentionally informal.\",\n      \"preview_md\": \"bold-template-pack/templates/playful/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/playful/design.md\"\n    },\n    {\n      \"slug\": \"raw-grid\",\n      \"name\": \"Raw Grid\",\n      \"tagline\": \"Neo-brutalist deck with thick borders, offset shadows, and a pink/sage/ink palette.\",\n      \"mood\": [\n        \"raw\",\n        \"punchy\",\n        \"energetic\",\n        \"confident\"\n      ],\n      \"tone\": [\n        \"direct\",\n        \"modern\",\n        \"no-nonsense\",\n        \"graphic\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel direct and graphic-confident: founder pitches, accelerator demos, brand decks, indie launches, creator portfolios. Strong for stat slides, comparison tables, and process flows. Equally good for tech, research, or finance when the speaker wants the deck to feel scrappy-confident rather than buttoned-up.\",\n      \"avoid_for\": \"Contexts that need to feel soft, warm, or intentionally quiet — the brutalist borders and offset shadows commit to a graphic voice.\",\n      \"preview_md\": \"bold-template-pack/templates/raw-grid/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/raw-grid/design.md\"\n    },\n    {\n      \"slug\": \"retro-windows\",\n      \"name\": \"Retro Windows\",\n      \"tagline\": \"Windows 95 chrome: gray title bars, MS Sans Serif, pixel typography, full nostalgia.\",\n      \"mood\": [\n        \"nostalgic\",\n        \"retro\",\n        \"geeky\",\n        \"playful\"\n      ],\n      \"tone\": [\n        \"winking\",\n        \"nostalgic\",\n        \"geeky\",\n        \"fun\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel knowingly nostalgic: retro gaming, Y2K-aesthetic brands, creator portfolios with a 90s vibe, tech-history talks, deliberately tongue-in-cheek decks. A great choice anywhere a playful retro reference is the entire point.\",\n      \"avoid_for\": \"Decks that need to read as modern, elegant, or institutionally credible — the Win95 chrome will always read as a costume.\",\n      \"preview_md\": \"bold-template-pack/templates/retro-windows/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/retro-windows/design.md\"\n    },\n    {\n      \"slug\": \"retro-zine\",\n      \"name\": \"Retro Zine\",\n      \"tagline\": \"Beige paper with green accent and Bebas Neue + Caveat: a riso-printed zine in HTML form.\",\n      \"mood\": [\n        \"crafted\",\n        \"lo-fi\",\n        \"underground\",\n        \"warm-retro\"\n      ],\n      \"tone\": [\n        \"scrappy\",\n        \"warm\",\n        \"intentional\",\n        \"DIY\"\n      ],\n      \"formality\": \"medium-low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel printed, lo-fi, and crafted: indie zines and publications, music / arts brands, creator portfolios, small-batch craft launches, community decks. Also a great underdog choice for tech, research, or business decks that want a riso-print warmth instead of digital polish.\",\n      \"avoid_for\": \"Contexts that demand digital-native polish or fast modern-tech energy — the layered zine aesthetic intentionally feels handmade.\",\n      \"preview_md\": \"bold-template-pack/templates/retro-zine/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/retro-zine/design.md\"\n    },\n    {\n      \"slug\": \"sakura-chroma\",\n      \"name\": \"Sakura Chroma\",\n      \"tagline\": \"Vintage Japanese cassette-package aesthetic: cream paper, diagonal rainbow ribbons, condensed bold type, JIS-style spec checkboxes.\",\n      \"mood\": [\n        \"retro\",\n        \"playful\",\n        \"kawaii-tech\",\n        \"warm\",\n        \"tactile\",\n        \"product-catalogue\"\n      ],\n      \"tone\": [\n        \"playful\",\n        \"confident\",\n        \"warm\",\n        \"tactile\",\n        \"80s-Japanese-tech\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a vintage Japanese cassette package or a TDK / Sony / Sakura Color product catalogue: indie hardware brand decks, music-label release schedules, analog studio retrospectives, zine and magazine pitches, kawaii-tech product launches, creative-studio annual reports. Equally good for any deck wanting bold colour, condensed display type, and a tactile printed-product personality.\",\n      \"avoid_for\": \"Decks that need restrained, corporate, or quiet typography — the bold condensed lockups, ribbon stripes, and primary-colour palette are intentionally loud and product-page-y.\",\n      \"preview_md\": \"bold-template-pack/templates/sakura-chroma/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/sakura-chroma/design.md\"\n    },\n    {\n      \"slug\": \"scatterbrain\",\n      \"name\": \"Scatterbrain\",\n      \"tagline\": \"Post-it inspired: pastel sticky notes, Caveat handwriting, Shrikhand and Zilla Slab type stack.\",\n      \"mood\": [\n        \"playful\",\n        \"creative\",\n        \"warm\",\n        \"messy-on-purpose\",\n        \"workshop\"\n      ],\n      \"tone\": [\n        \"informal\",\n        \"warm\",\n        \"expressive\",\n        \"human\"\n      ],\n      \"formality\": \"low\",\n      \"density\": \"high\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel like a designer's whiteboard: brainstorms, workshops, creative-agency credentials, design-thinking sessions, ideation pitches, art-direction reviews. Equally fun for any deck — including tech, research, or business — that wants to read as in-progress thinking rather than polished conclusions.\",\n      \"avoid_for\": \"Contexts that demand precision and institutional weight — the post-it sticky-note aesthetic intentionally reads as warm and unfinished.\",\n      \"preview_md\": \"bold-template-pack/templates/scatterbrain/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/scatterbrain/design.md\"\n    },\n    {\n      \"slug\": \"signal\",\n      \"name\": \"Signal\",\n      \"tagline\": \"Deep navy canvas with bone paper and a single muted-gold accent; institutional with quiet weight.\",\n      \"mood\": [\n        \"institutional\",\n        \"trustworthy\",\n        \"considered\",\n        \"weighty\"\n      ],\n      \"tone\": [\n        \"sober\",\n        \"polished\",\n        \"established\",\n        \"literary\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"high\",\n      \"scheme\": \"mixed\",\n      \"best_for\": \"Anything that should feel weighty, considered, and credibly institutional: investor decks, board presentations, consulting deliverables, legal / policy briefs, advisory pitches. Also a strong choice for tech, research, or brand work that wants to read as quietly authoritative rather than loud.\",\n      \"avoid_for\": \"Contexts that should feel hot, fast, or intentionally playful — the navy + gold restraint commits to a sober voice.\",\n      \"preview_md\": \"bold-template-pack/templates/signal/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/signal/design.md\"\n    },\n    {\n      \"slug\": \"soft-editorial\",\n      \"name\": \"Soft Editorial\",\n      \"tagline\": \"Cormorant Garamond serif on warm paper with sage, blush, and lemon accents.\",\n      \"mood\": [\n        \"literary\",\n        \"elegant\",\n        \"quiet\",\n        \"warm-classical\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"warm\",\n        \"magazine\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel literary, elegant, and unhurried: editorial features, longform brand stories, gallery / museum decks, advisory deliverables, wedding / lifestyle media, founder essays. Equally good for tech, research, or business decks that want a Sunday-supplement warmth instead of corporate polish.\",\n      \"avoid_for\": \"Decks that need visual heat or punch — the warm-paper palette and Cormorant serif are intentionally quiet.\",\n      \"preview_md\": \"bold-template-pack/templates/soft-editorial/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/soft-editorial/design.md\"\n    },\n    {\n      \"slug\": \"stencil-tablet\",\n      \"name\": \"Stencil & Tablet\",\n      \"tagline\": \"Bone paper with stencil-cut headlines and a six-color earth palette: archaeology meets brand.\",\n      \"mood\": [\n        \"archival\",\n        \"earthy\",\n        \"tactile\",\n        \"considered\",\n        \"graphic\"\n      ],\n      \"tone\": [\n        \"weighty\",\n        \"considered\",\n        \"tactile\",\n        \"literary\"\n      ],\n      \"formality\": \"medium-high\",\n      \"density\": \"medium\",\n      \"scheme\": \"light\",\n      \"best_for\": \"Anything that should feel archival, tactile, and weighty-graphic: museum and cultural-institution decks, art / architecture brands, longform research, heritage and craft brands, manifestos. A great choice anytime — including across tech and business — when you want the deck to feel like a field manual rather than a slide deck.\",\n      \"avoid_for\": \"Contexts that demand digital-native polish or playful pop — the stencil-cut display and earth-tone palette commit to a deliberate analog feel.\",\n      \"preview_md\": \"bold-template-pack/templates/stencil-tablet/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/stencil-tablet/design.md\"\n    },\n    {\n      \"slug\": \"studio\",\n      \"name\": \"Studio\",\n      \"tagline\": \"Black canvas with electric-yellow type; high-voltage design studio aesthetic.\",\n      \"mood\": [\n        \"electric\",\n        \"bold\",\n        \"graphic\",\n        \"design-led\",\n        \"high-contrast\"\n      ],\n      \"tone\": [\n        \"graphic\",\n        \"loud\",\n        \"modern\",\n        \"intentional\"\n      ],\n      \"formality\": \"medium\",\n      \"density\": \"medium\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel electric and design-led: studio credentials, creative agency pitches, brand showcases, art-direction reviews, fashion / sneaker brand work. Also a striking unexpected choice for tech, research, or business decks where the speaker wants the deck to *be* a brand statement.\",\n      \"avoid_for\": \"Contexts that should feel quiet or institutional — the black-and-electric-yellow palette is the loudest in the library.\",\n      \"preview_md\": \"bold-template-pack/templates/studio/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/studio/design.md\"\n    },\n    {\n      \"slug\": \"vellum\",\n      \"name\": \"Vellum\",\n      \"tagline\": \"Deep navy canvas with warm-yellow Cormorant serifs and a single dusty teal accent. A quiet, scholarly aesthetic.\",\n      \"mood\": [\n        \"scholarly\",\n        \"literary\",\n        \"considered\",\n        \"quiet\",\n        \"intellectual\"\n      ],\n      \"tone\": [\n        \"literary\",\n        \"considered\",\n        \"patient\",\n        \"intelligent\"\n      ],\n      \"formality\": \"high\",\n      \"density\": \"low\",\n      \"scheme\": \"dark\",\n      \"best_for\": \"Anything that should feel scholarly, literary, and quietly intelligent: research synthesis, white papers, academic and policy briefs, advisory deliverables, longform editorial pieces, founder reflections. Equally strong for any deck — including tech, business, or creator work — that wants a calm, considered atmosphere instead of energetic visuals.\",\n      \"avoid_for\": \"Contexts that need visual heat or pop — the navy + warm-yellow Cormorant aesthetic is intentionally low-tempo.\",\n      \"preview_md\": \"bold-template-pack/templates/vellum/preview.md\",\n      \"design_md\": \"bold-template-pack/templates/vellum/design.md\"\n    }\n  ]\n}\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/design.md (Tokens: ~11362 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: 8-Bit Orbit\ndescription: A retro-futuristic pixel-art presentation system that fuses 16-bit arcade nostalgia with editorial discipline. Display type runs in Tektur (a chunky geometric display face built on pixel-grid logic) paired with Chakra Petch for body and Space Mono for code-flavored labels and tabular data. The palette pivots on a deep cosmic navy (`#0F1B3D` / `#0A0E27`) lit by three saturated neons — cyan, hot pink, and a high-key yellow — with a soft lavender pastel for warm reprieves. Depth is built from stacked hard offset shadows in 4px increments (the pixel unit), CRT scanlines, atmospheric grain, vignettes, and animated starfields. The effect sits between an arcade cabinet and a Tron-era boardroom — unmistakably digital, intentionally lo-fi, and engineered to feel as if it just booted up.\n\ncolors:\n  dark-void: \"#0A0E27\"\n  deep-navy: \"#0F1B3D\"\n  neon-cyan: \"#5EDCF4\"\n  neon-pink: \"#F0A6CA\"\n  neon-yellow: \"#F4D03F\"\n  soft-lavender: \"#E2D5F2\"\n  white: \"#FFFFFF\"\n\nshadows:\n  pixel-stack-cyan-yellow: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}, 8px 4px 0 0 {colors.neon-yellow}, 4px 8px 0 0 {colors.neon-yellow}, 8px 8px 0 0 {colors.neon-yellow}\"\n  pixel-stack-pink-cyan: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}, 8px 4px 0 0 {colors.neon-cyan}, 4px 8px 0 0 {colors.neon-cyan}, 8px 8px 0 0 {colors.neon-cyan}\"\n  pixel-l-shape: \"4px 0 0 0 {colors.deep-navy}, 0 4px 0 0 {colors.deep-navy}, 4px 4px 0 0 {colors.deep-navy}\"\n  pixel-text-shadow: \"4px 4px 0 {colors.neon-yellow}, 8px 8px 0 {colors.deep-navy}\"\n  pixel-text-shadow-small: \"3px 3px 0 {colors.deep-navy}\"\n  card-offset: \"6px 6px 0 rgba(15, 27, 61, 0.15)\"\n  card-featured: \"8px 8px 0 {colors.neon-yellow}\"\n\ntypography:\n  pixel-hero:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(48px, 10vw, 128px)\"\n    fontWeight: 900\n    lineHeight: 1.05\n    letterSpacing: 0.04em\n  display:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(32px, 5vw, 64px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  headline:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(24px, 3.5vw, 45px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  subhead:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(17.6px, 2vw, 24px)\"\n    fontWeight: 700\n    lineHeight: 1.15\n  stat-number:\n    fontFamily: \"'Tektur', cursive\"\n    fontSize: \"clamp(32px, 4vw, 56px)\"\n    fontWeight: 900\n    lineHeight: 1\n  body:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(14.4px, 1.2vw, 18.4px)\"\n    fontWeight: 400\n    lineHeight: 1.7\n  hero-tagline:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(14.4px, 1.5vw, 19.2px)\"\n    fontWeight: 400\n    lineHeight: 1.8\n  quote-body:\n    fontFamily: \"'Chakra Petch', sans-serif\"\n    fontSize: \"clamp(17.6px, 2.2vw, 25.6px)\"\n    fontWeight: 500\n    lineHeight: 1.8\n  label-pill:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12px\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 0.2em\n    textTransform: uppercase\n  label-eyebrow:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 13.6px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.3em\n    textTransform: uppercase\n  badge:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  chart-value:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12px\n    fontWeight: 700\n    lineHeight: 1\n  chart-label:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.05em\n  date-chip:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    fontWeight: 400\n    lineHeight: 1\n  counter:\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 12.8px\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.15em\n\nspacing:\n  pixel-unit: 4px\n  pad-slide-y: \"3vh\"\n  pad-slide-x: \"4vw\"\n  pad-card-lg: \"32px 40px\"\n  pad-card-md: \"28px\"\n  pad-card-sm: \"16px 20px\"\n  gap-grid-lg: 32px\n  gap-grid-md: 24px\n  gap-grid-sm: 16px\n  content-max-width: 1200px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  label-pill:\n    background: \"{colors.deep-navy}\"\n    color: \"{colors.neon-yellow}\"\n    padding: \"6px 14px\"\n    fontSize: 12px\n    fontWeight: 700\n    letterSpacing: 0.2em\n    textTransform: uppercase\n    fontFamily: \"'Space Mono', monospace\"\n    description: \"Universal section tag. Default fill is deep-navy with neon-yellow text. Variant fills swap text color so the pill stays legible (e.g., navy bg with cyan text, navy bg with pink text).\"\n  pixel-button:\n    background: \"{colors.neon-cyan}\"\n    color: \"{colors.deep-navy}\"\n    padding: \"16px 36px\"\n    fontFamily: \"'Tektur', cursive\"\n    fontWeight: 700\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    boxShadow: \"{shadows.pixel-stack-cyan-yellow}\"\n    description: \"The signature stacked-shadow CTA. The pink variant swaps cyan body for pink and yellow shadow halo for cyan halo.\"\n  pixel-corner-bracket:\n    width: 24px\n    height: 24px\n    borderWidth: 4px\n    description: \"Two outward-facing L-shapes (top-left + bottom-right) bracketing a region. Default color is neon-cyan; yellow and pink variants exist. Sits 8px outside the bracketed element.\"\n  feature-card:\n    background: \"rgba(255, 255, 255, 0.15)\"\n    backdropFilter: \"blur(8px)\"\n    padding: \"32px 24px\"\n    border: \"2px solid rgba(15, 27, 61, 0.2)\"\n    description: \"Frosted-glass card with inset navy L-brackets (top-left + bottom-right) replacing rounded corners. Used on light-surface slides.\"\n  stat-block:\n    background: \"rgba(94, 220, 244, 0.08)\"\n    border: \"2px solid rgba(94, 220, 244, 0.2)\"\n    padding: \"32px 16px\"\n    description: \"Cyan-tinted glass stat tile with cyan L-bracket accents at opposite corners. Used on dark surfaces. Stat numeral uses the pixel-text-shadow-small treatment.\"\n  bar-track-light:\n    height: 32px\n    background: \"rgba(15, 27, 61, 0.1)\"\n    description: \"Horizontal track for hbar charts on light surfaces. Fill is solid navy/cyan/pink with a yellow offset shadow.\"\n  bar-vertical:\n    background: \"{colors.neon-cyan}\"\n    boxShadow: \"{shadows.pixel-l-shape}\"\n    description: \"Vertical chart bar with three-piece navy L-shadow. Color cycles cyan → pink → yellow.\"\n  timeline-node:\n    width: 24px\n    height: 24px\n    background: \"{colors.neon-cyan}\"\n    border: \"4px solid {colors.deep-navy}\"\n    description: \"Square pixel node on timeline rails. Active state swaps fill to neon-yellow.\"\n  timeline-rail:\n    width: 4px\n    background: \"repeating-linear-gradient(to bottom, {colors.deep-navy} 0px, {colors.deep-navy} 16px, transparent 16px, transparent 24px)\"\n    description: \"Dashed pixel rail running between timeline nodes.\"\n  date-chip:\n    background: \"{colors.deep-navy}\"\n    color: \"{colors.neon-cyan}\"\n    padding: \"2px 10px\"\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    description: \"Small inline date marker on timeline events.\"\n  hero-badge:\n    border: \"2px solid {colors.neon-yellow}\"\n    color: \"{colors.neon-yellow}\"\n    padding: \"8px 16px\"\n    fontFamily: \"'Space Mono', monospace\"\n    fontSize: 11.2px\n    letterSpacing: 0.1em\n    textTransform: uppercase\n    description: \"Outline-only chip used in clusters under hero headlines.\"\n  bg-grid:\n    backgroundColor: \"{colors.dark-void}\"\n    backgroundImage: \"linear-gradient(rgba(94, 220, 244, 0.07) 1px, transparent 1px), linear-gradient(90deg, rgba(94, 220, 244, 0.07) 1px, transparent 1px)\"\n    backgroundSize: \"40px 40px\"\n    description: \"40px cyan-on-navy grid wallpaper for dark surfaces. Pink, cyan, and lavender variants invert the relationship (colored ground with low-opacity navy grid lines).\"\n  scanlines:\n    background: \"repeating-linear-gradient(0deg, transparent 0px, transparent 2px, rgba(10, 14, 39, 0.04) 2px, rgba(10, 14, 39, 0.04) 4px)\"\n    mixBlendMode: multiply\n    description: \"Horizontal CRT scanline overlay applied via ::after at z-index 50. Always present on every slide.\"\n  grain:\n    opacity: 0.035\n    description: \"SVG fractal-noise grain layer applied via ::before at z-index 49. Always present on every slide.\"\n  crt-glow:\n    background: \"radial-gradient(ellipse at center, transparent 50%, rgba(10, 14, 39, 0.25) 100%)\"\n    description: \"Radial vignette that darkens the corners to mimic a CRT bulge. Applied to dark-surface slides via ::after at z-index 51.\"\n  starfield:\n    description: \"Container of small 4-6px colored squares (cyan, yellow, pink) positioned absolutely with a 3s twinkle keyframe. Lives on dark surfaces only.\"\n  pixel-particles:\n    description: \"Floating 8px colored squares with an 8s float keyframe. Decorative ambient layer on hero and CTA-type surfaces.\"\n  nav-dot:\n    width: 12px\n    height: 12px\n    border: \"2px solid {colors.neon-cyan}\"\n    background: transparent\n    description: \"Hollow square pip with a 2px inset cyan fill on active state. Fixed vertical rail at right edge.\"\n  quote-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.neon-yellow}\"\n    boxShadow: \"4px 4px 0 {colors.deep-navy}\"\n    description: \"Short yellow rule with navy offset shadow, used as a separator under quote bodies.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\n8-Bit Orbit is a **retro-futuristic pixel-art presentation system**. Its foundational premise is the **4-pixel unit**: every shadow offset, every border, every corner bracket, every label height resolves to a multiple of 4px. Layouts feel as if they were rasterized on an old CRT and dragged into HTML — and atmospheric overlays (scanlines, grain, vignette glow, animated starfields) reinforce the illusion on every surface.\n\nThe type stack is three faces working in concert. **Tektur** is the display face — a chunky, geometric, semi-pixelated grotesque that carries headlines, hero text, stat numerals, and any text that needs to feel like it was drawn on the pixel grid. **Chakra Petch** is the body face — a humanist sans with subtle geometric cuts that reads cleanly at small sizes and avoids fighting Tektur for attention. **Space Mono** is the system face — used exclusively for labels, captions, badges, chart values, dates, and counters. The mono treatment + wide tracking on these elements makes them feel like HUD readouts, not editorial captions.\n\nThe palette is built around **deep navy as ground** (`{colors.dark-void}` and `{colors.deep-navy}`) lit by **three saturated neons** — cyan, hot pink, yellow — plus a soft lavender pastel. Surfaces alternate: a dark navy surface (cyan grid wallpaper, white text, neon accents glowing in front) followed by a colored surface (pink, cyan, or lavender ground with navy text and navy grid lines etched at low opacity). The neons never appear as body text — they are reserved for headlines, stat numerals, accent rules, and label fills. The result is high contrast without being harsh: the neons feel illuminated rather than printed.\n\nDepth is the system's signature trick: **stacked hard offset shadows in the pixel unit**. The flagship pattern is a six-piece shadow on buttons — three navy offsets stepping down-right at 4px, then three colored halo offsets stepping further at 8px. Hero text gets a two-layer text shadow (yellow at +4/+4, navy at +8/+8). Cards get either a 6px navy box shadow or an 8px yellow box shadow on the featured tier. Every shadow is hard-edged, zero blur, locked to the 4px grid. Atmospheric depth comes from the always-on **scanlines + grain + CRT glow** overlay trio that subtly modulates every surface.\n\n**Density philosophy: moderately dense, atmospherically loaded.** The system reads as broken when surfaces are clean and unaccompanied — without scanlines, grain, vignette, particles, or a colored grid behind, the type loses its arcade context and starts to look like generic web typography. Always layer the atmosphere. Within content regions, however, breathing room matters: cards are widely spaced (24-32px gaps), stat tiles get heavy internal padding, and hero text is allowed to dominate. A typical slide carries one display moment + a small constellation of supporting elements (badges, labels, a chart, or a small grid), all sitting on a fully decorated atmospheric background.\n\n**Key Characteristics:**\n- Three-font stack: Tektur (display), Chakra Petch (body), Space Mono (HUD/labels) — never substitute, never mix outside their roles.\n- Navy ground (`{colors.dark-void}` / `{colors.deep-navy}`) alternates with colored-grid surfaces (pink, cyan, lavender) — both carry the 40px etched grid.\n- Three neons (cyan, pink, yellow) reserved for display, stats, rules, and label fills — never for body text.\n- All measurements snap to the 4px pixel unit: borders 2-4px, shadow offsets 4px / 8px, corner brackets 24×24 with 4px stroke.\n- Stacked hard offset shadows are the system's depth language — never blurred, never colored on text shadows except in the yellow→navy cascade.\n- Every slide carries the persistent scanline + grain + CRT-vignette trio at z-index 49-51.\n- L-shaped corner brackets (`{components.pixel-corner-bracket}`) replace rounded corners and frame regions, cards, and stat tiles.\n- A monospace label pill (`{components.label-pill}`) sits as the universal eyebrow on every region — navy fill, neon text, 0.2em tracking, uppercase.\n- Animated starfields and floating particle squares wallpaper dark surfaces — ambient, not decorative.\n\n## Colors\n\n### Palette\n\n- **Dark Void** (`{colors.dark-void}` — `#0A0E27`): The deepest ground, used on `<body>` and as the base for dark-grid surfaces. Reads as black-with-blue-bias under the CRT vignette.\n- **Deep Navy** (`{colors.deep-navy}` — `#0F1B3D`): The structural color — all shadow stacks, label fills, dark cards, button text on neon surfaces, and chart bar text. Slightly warmer than the void; the two read as ground and figure when stacked.\n- **Neon Cyan** (`{colors.neon-cyan}` — `#5EDCF4`): The system's primary glow. Used for headlines on dark surfaces, primary button fill, stat numerals, primary chart bars, timeline nodes, navigation dots, corner brackets, and grid lines on dark surfaces (at 7% opacity).\n- **Neon Pink** (`{colors.neon-pink}` — `#F0A6CA`): The warm accent. Used as a colored surface ground (40px navy-on-pink grid), secondary button fill, secondary chart bars, mouth detail in pixel avatars, and tertiary corner brackets.\n- **Neon Yellow** (`{colors.neon-yellow}` — `#F4D03F`): The high-key alert color. Used in shadow halos behind buttons and on featured tier cards, as the active timeline-node fill, on hero badges, in label-pill text variants, in the quote-line, and as Tektur text-shadow layer 1.\n- **Soft Lavender** (`{colors.soft-lavender}` — `#E2D5F2`): The calm pastel surface — used as ground for slides that need a softer reprieve from the neon-on-navy intensity. Carries the same etched-navy grid wallpaper as the other colored surfaces.\n- **White** (`{colors.white}` — `#FFFFFF`): Text color on dark/neon surfaces only. Never used as a slide background.\n\n### Defaults\n\n- **Default surface background**: `{colors.dark-void}` with the 40px cyan grid (`{components.bg-grid}`). Always apply scanlines + grain + crt-glow on top.\n- **Default headline color on dark surfaces**: `{colors.neon-cyan}`, with the `{shadows.pixel-text-shadow-small}` or `{shadows.pixel-text-shadow}` treatment for hero-scale text.\n- **Default headline color on colored grids (pink/cyan/lavender)**: `{colors.deep-navy}` — neon text becomes illegible on neon grounds.\n- **Default body text color on dark surfaces**: `rgba(255, 255, 255, 0.7)` — softened white, not pure white.\n- **Default body text color on colored grids**: `rgba(15, 27, 61, 0.75)` — softened navy.\n- **Default label-pill fill**: `{colors.deep-navy}` with `{colors.neon-yellow}` text. On colored grids the text can swap to cyan or pink as long as contrast against navy holds.\n- **Default accent color for callouts and stat numerals**: `{colors.neon-cyan}`.\n- **Default chart palette order**: cyan → pink → yellow (in that order across series).\n- **Default corner bracket color**: `{colors.neon-cyan}`. Yellow and pink variants exist for thematic accents.\n\nWhen a slide needs to feel softer or warmer, switch the colored grid from cyan-on-navy (default) to navy-on-pink, navy-on-cyan, or navy-on-lavender — the structural relationship inverts (grid lines become navy at low opacity) but the typographic rules stay the same.\n\n## Typography\n\n### Font Family\nThe system runs three faces, each locked to its role.\n\n**Tektur** is the display face — a wide-bodied, semi-geometric grotesque with subtle pixel-grid cuts. Used for every hero title, headline, stat numeral, quote mark, and large numeral. Tektur's chunky personality is what makes the system feel arcade-native; replacing it with Inter or Space Grotesk breaks the entire aesthetic.\n\n**Chakra Petch** is the body face — a humanist sans with mild geometric/squared character that reads cleanly at 14-22px and has enough personality to sit next to Tektur without disappearing. Used for paragraphs, hero taglines, quote bodies, and any longer-form prose.\n\n**Space Mono** is the HUD face — a monospace used exclusively for labels, badges, chart values/axes, page counters, date chips, and any element that should feel like a system readout. The mono + wide-tracked uppercase combination is the system's \"interface\" voice.\n\nNever use Tektur for body, never use Chakra Petch for chrome/HUD, never use Space Mono for headlines. The three-role separation is the typographic structure.\n\n### Typography Scale\n\n| Token | Size (clamp) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.pixel-hero}` | 48–128px | Tektur | 900 | Hero or cover display title — always carries the two-layer text shadow |\n| `{typography.display}` | 32–64px | Tektur | 700 | Large section opener |\n| `{typography.headline}` | 24–45px | Tektur | 700 | Primary section headline |\n| `{typography.subhead}` | 17.6–24px | Tektur | 700 | Region-level subheading or card title |\n| `{typography.stat-number}` | 32–56px | Tektur | 900 | Stat tile numeral — pairs with the small text shadow |\n| `{typography.body}` | 14.4–18.4px | Chakra Petch | 400 | Paragraph body |\n| `{typography.hero-tagline}` | 14.4–19.2px | Chakra Petch | 400 | Hero subtitle / lede paragraph below a pixel-hero |\n| `{typography.quote-body}` | 17.6–25.6px | Chakra Petch | 500 | Quote text |\n| `{typography.label-pill}` | 12px | Space Mono | 700 | Text inside the navy label pill |\n| `{typography.label-eyebrow}` | 13.6px | Space Mono | 400 | Standalone uppercase eyebrow above a headline (heavier tracking than the pill) |\n| `{typography.badge}` | 11.2px | Space Mono | 400 | Outline-only hero badge text |\n| `{typography.chart-value}` | 12px | Space Mono | 700 | Chart bar value numerals |\n| `{typography.chart-label}` | 11.2px | Space Mono | 400 | Chart axis or category labels |\n| `{typography.date-chip}` | 11.2px | Space Mono | 400 | Date marker on timeline events |\n| `{typography.counter}` | 12.8px | Space Mono | 400 | Persistent slide counter (NN / NN) |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.pixel-hero}` (48–128px clamp) — always Tektur weight 900 with the two-layer text shadow.\n- **Default size for a primary section headline**: `{typography.headline}` (24–45px clamp) — Tektur weight 700.\n- **Default size for paragraph body**: `{typography.body}` (14.4–18.4px clamp) — Chakra Petch weight 400.\n- **Default size for a stat numeral**: `{typography.stat-number}` (32–56px clamp) — Tektur weight 900, always carries the 3px navy text shadow.\n- **Default size for an eyebrow label**: `{typography.label-pill}` (12px) housed in the navy pill — or `{typography.label-eyebrow}` (13.6px) if the eyebrow sits standalone.\n- **Default tracking for any Space Mono label**: 0.1em (badges) to 0.3em (eyebrow labels). Mono without wide tracking reads as code, not HUD.\n- **Default body weight**: 400 for Chakra Petch, 500 for quote bodies.\n- **Default display weight**: 700 for headlines, 900 for hero scale and stat numerals.\n\nWhen unsure which display token to reach for, default to `{typography.headline}` — it's the section-level workhorse. Reserve `{typography.pixel-hero}` for cover and CTA moments only.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every pixel-hero element carries the stacked text-shadow.** The pattern is `4px 4px 0 {colors.neon-yellow}, 8px 8px 0 {colors.deep-navy}` on cyan text. A pixel-hero element without this two-layer cascade reads as untreated display type and breaks the arcade voice.\n- **Every stat numeral carries the small text-shadow.** The pattern is `3px 3px 0 {colors.deep-navy}` on cyan text. Stat numerals on dark surfaces need this shadow to feel illuminated; without it they read flat.\n- **Every Space Mono element is uppercase with wide tracking** — minimum 0.05em for chart labels, 0.08–0.2em for pills and badges, 0.3em for standalone eyebrow labels. Sentence-case mono does not exist in this system.\n- **Every Tektur display element keeps its native letter-spacing or slight positive (+0.04em on hero scale).** Tektur is wide-bodied by design — adding negative tracking compresses it into something that no longer reads as the same face.\n- **Every Chakra Petch body block uses line-height ≥ 1.6.** The face is dense; tighter line-height on body bleeds into unreadable.\n- **Every label pill uses Space Mono at 12px with 0.2em letter-spacing.** No exceptions — the pill is the system's most recognizable small chrome and any deviation in size or tracking breaks it.\n- **Every chart bar value / axis label uses Space Mono.** Numerical chrome is mono, never Tektur or Chakra Petch.\n\n### Typography Principles\n\nThe voice contrast is **chunky display ↔ humanist body ↔ wide-tracked mono chrome**. Switching any of the three roles to a different face flattens the system into a generic dark-mode aesthetic. Italic is never used in display or body — the only italic that appears anywhere is implicit in the slight tilt on pixel-art decorative elements.\n\nTektur should always feel **planted** — left-aligned, generous line-height, never centered for body-length runs (centering is permitted on hero and CTA titles only). Chakra Petch should always feel **calm** — left-aligned by default, no all-caps treatment, no letter-spacing.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are stacked vertically inside a `slides-container` and translated via `transform: translateY(...)` for navigation. Only one slide occupies the viewport at a time, with cubic-bezier `(0.22, 1, 0.36, 1)` easing on an 800ms transition.\n\nDefault slide padding is `3vh 4vw`. The inner `slide-content` caps at `max-width: 1200px` and centers, so on wide displays content keeps editorial column width while the colored background fills the viewport.\n\n### Pixel Unit\nEvery measurement in the system snaps to a **4px grid**. Border widths are 2px or 4px. Shadow offsets are 4px or 8px. Corner brackets are 24×24 with 4px stroke. The background grid is 40px (10 × pixel-unit). Card padding usually resolves to multiples of 8 (16, 24, 32, 48). This discipline is what makes the system feel rasterized rather than vector.\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Navigation dot rail** — vertical stack of 12×12 cyan-bordered squares, fixed at `right: 24px`, vertically centered. Active state fills the inner 8×8 with cyan.\n- **Slide counter** — Space Mono `01 / 10` format, fixed at `bottom: 24px`, horizontally centered, dark-navy semi-transparent pill background.\n- **Nav hint** — `USE KEYS ↑ ↓`, Space Mono 11px at 50% opacity, fixed at `bottom: 24px right: 24px`.\n\nThe cursor across the entire deck is `crosshair` — an additional arcade signal.\n\n### Atmospheric Overlay Stack\nEvery slide carries (in z-order):\n1. Surface background — either `{components.bg-grid}` (cyan-on-navy) or one of the colored grid variants.\n2. Grain layer at z-index 49, opacity 0.035.\n3. Scanlines at z-index 50, multiply blend mode.\n4. CRT vignette glow at z-index 51 (dark surfaces only).\n5. Optional starfield / pixel particles at z-index 1 inside the surface.\n6. `.slide-content` at z-index 10 above the atmospheric layers.\n\nThis overlay stack is the system's identity. A slide rendered without it looks like a wireframe.\n\n## Depth and Elevation\n\n### Stacked Hard Offset Shadow (Signature)\nThe system uses **stacked, multi-step hard offset shadows** in the 4px pixel unit. Every shadow value is composed in one of three patterns:\n\n- **Three-step navy L-shape** (`{shadows.pixel-l-shape}`) — three offsets at `4px 0`, `0 4px`, `4px 4px` in deep-navy, zero blur. Used on chart bars and small elevated chrome to suggest a single-layer drop.\n- **Six-step button cascade** (`{shadows.pixel-stack-cyan-yellow}` / `{shadows.pixel-stack-pink-cyan}`) — three navy offsets at 4px stepping then three colored halo offsets at 8px stepping behind. Creates a two-layer pixel-bevel effect. Used exclusively on `{components.pixel-button}`.\n- **Two-layer text-shadow** (`{shadows.pixel-text-shadow}` / `{shadows.pixel-text-shadow-small}`) — yellow layer at +4/+4 then navy layer at +8/+8 (or just navy at +3/+3 for stat-scale numerals). Used on every Tektur display element.\n\nAll shadows are zero-blur, hard-edged, locked to the pixel unit. A blurred drop shadow does not exist anywhere in the system.\n\n### Card Shadows\nTwo simpler patterns serve cards:\n- `{shadows.card-offset}` = `6px 6px 0 rgba(15, 27, 61, 0.15)` — soft navy offset for non-featured tier cards on light surfaces.\n- `{shadows.card-featured}` = `8px 8px 0 {colors.neon-yellow}` — neon-yellow offset for featured tier cards, paired with a `-12px` translateY lift.\n\n### Corner Brackets as Depth\nThe L-shaped corner brackets (`{components.pixel-corner-bracket}`) replace traditional border treatments on regions and cards. Two brackets at opposite corners imply a frame without enclosing it — the eye fills in the missing edges. On stat blocks and feature cards, brackets sit inset at `top: -2px / left: -2px` and `bottom: -2px / right: -2px` so they break the cell edge slightly, reinforcing the pixel-bevel feel.\n\n### Atmospheric Depth\nThe scanline + grain + CRT-vignette stack provides ambient depth on every surface without requiring shadow on individual elements. Animated starfields and floating particles layer additional spatial cues behind content. None of these are decorative add-ons — they are core to the depth perception of the system.\n\n## Shapes and Treatment\n\n### Border Radius\nEffectively zero. The only round shape that appears anywhere is the donut-style nav dot inner-fill (which is still a square in this system — the nav dots are square pips, not circles). Rounded buttons, rounded cards, or rounded pill chips break the pixel-art aesthetic immediately.\n\nThe pixel-face avatar zone uses square eyes and a rectangular mouth — anatomy rendered in pixels, not curves.\n\n### Border Weights\n- **2px solid** — used on feature-card outlines, hero badges, nav dots, stat-block frames, chart bars (inline edges).\n- **3px stroke** — used for chart axes inside SVG charts (deep-navy).\n- **4px solid** — used on corner brackets, timeline node borders, the quote-line, and the inner pixel-bevel of buttons.\n\nBorders are always solid, always navy or neon, never dashed except for the timeline rail (`{components.timeline-rail}`) which is intentionally rendered as a 16px-on, 8px-off repeating linear gradient to mimic a pixel-dashed line.\n\n### Decorative Element Types\n\n**Pixel corner bracket** — Two outward L-shapes (top-left + bottom-right) bracketing a region. 24×24 with 4px stroke. Default color is cyan; yellow and pink variants exist. The bracket pattern is the system's most distinctive non-typographic mark.\n\n**Label pill** — Navy rectangle with neon-yellow Space Mono text at 12px / 0.2em. The universal section eyebrow. Variants flip the text color to cyan or pink while keeping the navy fill.\n\n**Hero badge** — Outline-only 2px yellow border with yellow Space Mono text. Appears in clusters under hero titles as feature tags.\n\n**Stat block** — Cyan-tinted glass tile (8% cyan fill, 20% cyan border) with cyan corner brackets at top-left and bottom-right. Holds a large stat numeral over a Space Mono pink label.\n\n**Feature card** — Frosted-glass white card (15% white fill, blur) with navy corner brackets at opposite corners. Used on colored-grid surfaces.\n\n**Pixel button** — Cyan rectangle with the six-step stacked shadow cascade. On hover, the button translates +2/+2 and the shadow collapses to a 4-step cascade — simulating a key-press in pixel art.\n\n**Quote-line** — A 60×4 yellow rectangle with a 4×4 navy offset shadow. Used as a separator beneath quote bodies.\n\n**Timeline node** — 24×24 cyan square with a 4px navy border, positioned on a dashed navy rail. Active state swaps fill to yellow.\n\n**Date chip** — Inline 2px-padded navy pill with cyan Space Mono text, used to mark timeline events.\n\n**Pixel face** — A 120×120 grouping of square \"facial features\" (cyan eyes, pink mouth) rendered as absolutely positioned divs inside a navy avatar zone. Functions as both a friendly mascot and a system-signature decorative module.\n\n**Tier card** — White rectangle, 6px navy offset shadow. Featured tier swaps fill to deep-navy and shadow to 8px yellow, with a `-12px` translateY lift. Tier features use a `+` ::before glyph in cyan instead of standard bullets.\n\n**Pixel landscape** — A row of variable-height navy mountains at the bottom of CTA-class surfaces, opacity 0.3. Pure decoration suggesting an arcade horizon.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply the scanlines + grain + CRT-vignette overlay stack to every slide. The atmosphere is the design system; surfaces without it look like wireframes.\n- Use `{colors.neon-cyan}` as the default headline color on dark surfaces and `{colors.deep-navy}` as the default headline color on colored grids (pink/cyan/lavender).\n- Apply `{shadows.pixel-text-shadow}` to every pixel-hero element and `{shadows.pixel-text-shadow-small}` to every stat numeral. Tektur display type without its text-shadow reads flat.\n- Snap every measurement to the 4px pixel unit — border widths, shadow offsets, padding, corner-bracket dimensions. Off-grid values break the rasterized feel.\n- Use Tektur for display, Chakra Petch for body, Space Mono for chrome — exclusively. Cross-mixing the three voices flattens the system.\n- Wrap eyebrows in the `{components.label-pill}` (navy bg, yellow Space Mono text, 0.2em tracking, uppercase) as the universal section tag.\n- Pair the navy ground with at least one neon glow per region — text, chart bar, corner bracket, or button shadow halo. Pure navy without a neon accent reads as dead screen.\n- Layer animated starfields and pixel-particle floaters on dark hero and CTA surfaces. The motion is part of the atmosphere.\n- Render charts with cyan → pink → yellow series order and Space Mono numerals/labels. The neon trio is the chart palette.\n- Bracket cards and stat tiles with the L-shaped corner brackets at opposite corners instead of fully outlining them. The implied frame is the system's signature card treatment.\n\n### Don't\n\n- Don't substitute fonts. Tektur, Chakra Petch, and Space Mono are the three voices — replacing any of them with Inter, Roboto, or Space Grotesk collapses the system.\n- Don't round any corner. The pixel aesthetic depends on square edges. Border-radius is reserved for SVG donut chart geometry only.\n- Don't blur any shadow. Every shadow is hard-edged at zero blur. `0 4px 12px rgba(0,0,0,0.1)` does not exist here.\n- Don't place neon text on neon surfaces. Cyan headlines on the pink grid become illegible — switch to deep-navy on colored grounds.\n- Don't use Tektur in sentence-case body runs or Chakra Petch in chrome/labels. Each face has a single role.\n- Don't introduce a fourth neon. The palette is cyan + pink + yellow + lavender pastel. Adding green or orange breaks the curated neon trio.\n- Don't omit the atmospheric overlay stack on any slide, even chart-heavy or table-heavy slides. The overlays are non-negotiable.\n- Don't use uppercase Chakra Petch body text. Body always sentence-case; uppercase is reserved for Space Mono and Tektur display.\n- Don't drop the navy label pill in favor of a plain text eyebrow. The pill is the most recognizable small chrome in the system.\n- Don't shadow text or chrome with off-axis offsets. Every shadow steps down-right in 4px increments — left or upward offsets do not exist.\n\n## Responsive Behavior\n\n8-Bit Orbit is a **viewport-fluid system** built around `vw/vh`-based sizing and CSS `clamp()` ranges. There are no hard breakpoints for the deck itself — every font size, padding value, and gap interpolates between a minimum and maximum based on viewport width.\n\n### Scaling Behavior\n- Hero text scales 48px → 128px on viewport width.\n- Stat numerals scale 32px → 56px.\n- Body scales 14.4px → 18.4px.\n- The 4px pixel unit, 40px grid size, scanline 4px stripe, and corner-bracket dimensions are fixed — they do not scale, which means at larger viewports the pixel chrome appears proportionally finer (intentionally — the larger the canvas, the smaller and more refined the pixels read).\n\n### Component Breakpoints\nThree component-level breakpoints exist:\n- `max-width: 1024px` — feature grid collapses 4→2 columns, two-column split layouts stack.\n- `max-width: 900px` — feature grid further collapses, hbar chart label column shrinks.\n- `max-width: 500px` — feature grid becomes single column, stats grid stacks.\n\n### Presenter Behavior\n- Slides advance via `ArrowDown`, `ArrowRight`, or `Space`.\n- Slides reverse via `ArrowUp` or `ArrowLeft`.\n- `Home` jumps to first, `End` to last.\n- Vertical swipe on touch devices advances/reverses with a 50px threshold.\n- Mouse wheel scroll advances/reverses with an 800ms debounce lock.\n- Slide transitions use 800ms cubic-bezier `(0.22, 1, 0.36, 1)` on a translateY transform.\n\n### Animation Triggers\nChart bars and stat counters animate in on slide entry with `setTimeout` staggers (100-150ms between items). When a slide is exited, its bars/counters reset to 0 so re-entry replays the animation. The `prefers-reduced-motion` media query disables transitions and the starfield/particle twinkle keyframes.\n\n### Print Behavior\nThe system has no `@media print` rule. The deck is screen-first; printing produces only the active slide. For static export, screenshots of each slide preserve all atmospheric overlays (scanlines and grain are CSS-rendered, not assets).\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / stat numerals | Tektur 700–900 | 思源黑体 Noto Sans SC 900 |\n| Body / hero tagline / quote body | Chakra Petch 400–500 | 思源黑体 Noto Sans SC 400 |\n| HUD labels / badges / chart values / counter | Space Mono 400–700 (uppercase + wide tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) — see Known CJK Gap below |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family with built-in Latin glyph coverage. Set every text element to `font-family: 'Noto Sans SC', sans-serif`. 思源黑体 ships Latin glyphs that read cleanly alongside Chinese characters, so a sentence like `使用 Tektur 字体` renders in one consistent face rather than font-switching mid-word. This system normally runs three faces (display / body / HUD); collapsing to one CJK face is the right tradeoff because none of the three Latin faces have credible Chinese counterparts, and visual hierarchy still works through weight (900 / 700 / 500 / 400) plus the system's signature shadow stacks.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.7–1.8), display 1.15–1.25 (up from 1.05–1.15). CJK characters are square and visually full — they crowd vertically more than Latin.\n- **Letter-spacing**: set to 0 on every CJK run. The template's positive tracking on Tektur display (+0.04em) and 0.1–0.3em mono tracking on Space Mono labels looks broken on square CJK glyphs — they're already evenly spaced by design.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Space Mono label in this system uses `text-transform: uppercase`; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `8 位赛博 / 1989 模式` not `8位赛博/1989模式`.\n- **One font per sentence**: 思源黑体 covers both CJK and Latin glyphs in a unified style — let it handle mixed sentences. Don't let the browser fall back to Tektur or Space Mono mid-sentence for ASCII characters.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on three voices — Tektur (chunky arcade display), Chakra Petch (humanist body), Space Mono (HUD readouts) — and a CJK build cannot preserve that three-face contrast. Compensate by leaning harder on the **non-typographic** signature elements: the stacked text-shadow (yellow at +4/+4, navy at +8/+8) still works on 思源黑体 900 headlines and is what carries the arcade voice when the face itself is generic. Keep all atmospheric overlays (scanlines, grain, CRT vignette, starfields, grid wallpaper) — they do more identity work in a CJK build than in the Latin original.\n\nThe system's Space Mono label-pill (navy fill, neon-yellow text, 0.2em tracking, uppercase) is the most recognizable small chrome and translates poorly: CJK characters won't accept the wide tracking or uppercase transform. Render Chinese label-pills with 思源黑体 weight 500 at 0 tracking, no transform, and a slightly tighter fontSize (10–11px instead of 12px) to preserve the chip's compact silhouette. The colored pill background and corner-bracket framing carry the recognition load.\n\n### Known CJK Gap\n\n- **No CDN-loadable Chinese pixel font.** The system's arcade aesthetic depends on Tektur's semi-pixel grotesque character — there is no equivalent Chinese face on Google Fonts or major CDNs that reads as \"pixel-art\" while remaining legible. 思源黑体 at weight 900 gives heft but loses the pixel-grid signal entirely. The atmospheric overlays (scanlines, grain, vignette, starfields) and pixel-bevel shadow stacks must carry the arcade voice on their own.\n- **No CDN Chinese monospace face for HUD labels.** Space Mono's \"system readout\" voice depends on monospaced rhythm + uppercase + 0.1–0.3em tracking — none of which transfer to CJK. The label-pill loses its mono character; lean on the navy fill + neon text + corner-bracket framing to keep chrome recognizable.\n\n## Iteration Guide\n\n1. Any new slide gets the full atmospheric overlay trio (scanlines + grain + crt-glow on dark surfaces, scanlines + grain on colored surfaces) and a 40px etched grid surface. Don't skip the overlays.\n2. Any new display element uses Tektur. Any new body element uses Chakra Petch. Any new label, badge, counter, or chart value uses Space Mono. Never cross the role boundaries.\n3. Any new headline gets `{colors.neon-cyan}` on dark surfaces or `{colors.deep-navy}` on colored grids — both with the appropriate Tektur weight and (for hero scale) the stacked text-shadow.\n4. Any new eyebrow uses the `{components.label-pill}` — navy fill, neon-yellow Space Mono text at 12px / 0.2em / uppercase. Don't substitute a plain h-tag.\n5. Any new card or region gets the L-shaped corner brackets at opposite corners (top-left + bottom-right) instead of a full outline. The implied frame is the system's signature.\n6. Any new measurement snaps to the 4px pixel unit. Borders 2-4px, shadow offsets 4px / 8px, corner brackets 24px, grid 40px. Off-grid values feel wrong.\n7. Any new shadow is hard-edged at zero blur. For buttons use the six-step cascade; for cards use 6px navy or 8px yellow; for text use the two-layer cascade.\n8. Any new chart cycles cyan → pink → yellow in series order. Numerical labels and axis labels are always Space Mono.\n9. If a surface needs to feel warmer or softer, switch to the pink, cyan, or lavender etched grid variant — but keep all typographic rules intact (navy headlines, softened-navy body).\n10. Animated elements (starfield, particles, chart bar grow, counter rollup) should respect `prefers-reduced-motion`. Atmospheric overlays (scanlines, grain, vignette) are not animated and stay on always.\n\n## Known Gaps\n\n- **Tektur, Chakra Petch, and Space Mono are Google Fonts** loaded via a preconnect + `<link>`. The system has no fallback strategy beyond `cursive` / `sans-serif` / `monospace` — in environments where Google Fonts fail (offline, restricted networks), the aesthetic collapses to system defaults and loses its character.\n- **Starfield and pixel-particle elements are generated by inline JS** that creates a fixed count of absolutely-positioned divs with random positions and animation delays. The animation keyframes are present in CSS, but the elements are only created if the JS runs successfully.\n- **The chart system is hardcoded**: bar heights, hbar widths, and stat counter targets are stored in `data-*` attributes and animated via `setTimeout` staggers triggered by slide-index matching. There is no data-binding layer — adding a new chart requires copying the HTML pattern and updating the JS slide-index matcher.\n- **The pixel-landscape on CTA surfaces is JS-generated** from a hardcoded heights array `[30, 50, 70, ...]`. Width varies per mountain (60 + (i % 3) * 20px). Replacing the landscape requires editing the JS heights array.\n- **The CRT vignette glow uses a fixed dark-navy radial gradient.** Adjusting it requires editing the CSS gradient stops; there is no tokenized vignette intensity.\n- **The cursor is set to `crosshair` deck-wide** for atmospheric reasons. This may conflict with text-selection expectations in contexts where the deck is embedded.\n- **No keyboard navigation hint exists for the wheel/touch fallback.** The nav-hint reads `USE KEYS ↑ ↓` even though wheel and touch are also wired up.\n- **The slide counter format is fixed at `NN / NN` zero-padded.** Decks with more than 99 slides would render with a layout-shifting counter.\n- **The pixel-corner-bracket sizing is fixed at 24×24 with 4px stroke** and does not scale with viewport. On very large or very small viewports the brackets may feel proportionally off.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/8-bit-orbit/preview.md (Tokens: ~1115 | Category: anthropic-skill) -->\n# 8-Bit Orbit Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/8-bit-orbit/design.md`\n- Preview card: `bold-template-pack/templates/8-bit-orbit/preview.md`\n\n## Selection Metadata\n\n- Slug: `8-bit-orbit`\n- Tagline: Pixel-art neon arcade aesthetic on a deep navy void.\n- Mood: retro-tech, playful, cyberpunk, energetic\n- Tone: geeky, neon, rebellious, sci-fi\n- Formality: low\n- Density: medium\n- Scheme: dark\n- Best for: Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos. Just as good for a tech talk that wants to lean into nostalgic-digital craft, a synthwave brand deck, or a creative review that wants to feel like a console.\n- Avoid for: Contexts where the dark neon palette would actively work against the message — quiet institutional finance disclosures, healthcare patient-facing materials, traditional luxury.\n\n## Visual Snapshot\n\nA retro-futuristic pixel-art presentation system that fuses 16-bit arcade nostalgia with editorial discipline. Display type runs in Tektur (a chunky geometric display face built on pixel-grid logic) paired with Chakra Petch for body and Space Mono for code-flavored labels and tabular data. The palette pivots on a deep cosmic navy (#0F1B3D / #0A0E27) lit by three saturated neons — cyan, hot pink, and a high-key yellow — with a soft lavender pastel for warm reprieves. Depth is built from stacked hard offset shadows in 4px increments (the pixel unit), CRT scanlines, atmospheric grain, vignettes, and animated starfields. The effect sits between an arcade cabinet and a Tron-era boardroom — unmistakably digital, intentionally lo-fi, and engineered to feel as if it just booted up.\n\n8-Bit Orbit is a retro-futuristic pixel-art presentation system. Its foundational premise is the 4-pixel unit: every shadow offset, every border, every corner bracket, every label height resolves to a multiple of 4px. Layouts feel as if they were rasterized on an old CRT and dragged into HTML — and atmospheric overlays (scanlines, grain, vignette glow, animated starfields) reinforce the illusion on every surface.\n\n## Preview Ingredients\n\n- Palette: dark-void #0A0E27; deep-navy #0F1B3D; neon-cyan #5EDCF4; neon-pink #F0A6CA; neon-yellow #F4D03F; soft-lavender #E2D5F2; white #FFFFFF\n- Typography: See full design doc after selection.\n- Signature move: Three-font stack: Tektur (display), Chakra Petch (body), Space Mono (HUD/labels) — never substitute, never mix outside their roles.\n- Signature move: Navy ground ({colors.dark-void} / {colors.deep-navy}) alternates with colored-grid surfaces (pink, cyan, lavender) — both carry the 40px etched grid.\n- Signature move: Three neons (cyan, pink, yellow) reserved for display, stats, rules, and label fills — never for body text.\n- Signature move: All measurements snap to the 4px pixel unit: borders 2-4px, shadow offsets 4px / 8px, corner brackets 24×24 with 4px stroke.\n- Signature move: Stacked hard offset shadows are the system's depth language — never blurred, never colored on text shadows except in the yellow→navy cascade.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/design.md (Tokens: ~11624 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Biennale Yellow\ndescription: \"A literary-editorial presentation system in the visual register of an art biennale catalogue or quiet exhibition poster. The aesthetic is built on warm parchment grounds (`#E9E5DB`) flooded with soft solar yellow (`#F1EE2E`) radial blooms, set against a single deep indigo navy ink color. Display type is Instrument Serif — a contemporary high-contrast serif with tall ascenders and elegant italics — paired with Archivo for sans-serif chrome and JetBrains Mono for numerical and metadata callouts. No drop shadows, no rounded corners, no bordered cards: the only structural lines are hairline 1px rules in ink. The mood sits between a folded museum brochure, a slow-reading literary quarterly, and a Mediterranean exhibition poster — confident, atmospheric, and deeply restrained.\"\n\ncolors:\n  paper: \"#E9E5DB\"\n  paper-deep: \"#DCD6C4\"\n  sun: \"#F1EE2E\"\n  sun-soft: \"#F8F39B\"\n  haze: \"#F0DA7C\"\n  ink: \"#1B2566\"\n  ember: \"#E26B4A\"\n\ncolor-aliases:\n  line: ink\n\ntypography:\n  display:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, min(14.6vw, 22vh), 240px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-md:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(80px, min(10vw, 16vh), 200px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-sm:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(110px, min(11vw, 18vh), 200px)\"\n    lineHeight: 0.86\n    letterSpacing: -0.018em\n  display-it:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontStyle: italic\n    fontSize: \"clamp(56px, min(7vw, 11vh), 120px)\"\n    lineHeight: 1.04\n    letterSpacing: -0.005em\n  numeral-jumbo:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(220px, min(28vw, 64vh), 720px)\"\n    lineHeight: 0.84\n    letterSpacing: -0.04em\n  numeral-lg:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, min(15vw, 22vh), 280px)\"\n    lineHeight: 0.9\n    letterSpacing: -0.04em\n  numeral-md:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(72px, min(7vw, 12vh), 144px)\"\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n  headline:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(40px, min(4.6vw, 7vh), 88px)\"\n    lineHeight: 1.06\n    letterSpacing: -0.005em\n  headline-sm:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, min(3.6vw, 6vh), 56px)\"\n    lineHeight: 1\n  date-rail:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(48px, min(5.2vw, 9vh), 96px)\"\n    lineHeight: 0.96\n    letterSpacing: -0.005em\n  ledger-title:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(20px, 1.6vw, 30px)\"\n    lineHeight: 1.15\n  strand-title:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(22px, 1.7vw, 32px)\"\n    lineHeight: 1.1\n  strand-num:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 2vw, 38px)\"\n    lineHeight: 1\n  body-lede:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(15px, 1.05vw, 18px)\"\n    lineHeight: 1.55\n  body:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(14px, 0.95vw, 16px)\"\n    lineHeight: 1.5\n  body-sm:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 0.78vw, 13px)\"\n    lineHeight: 1.5\n  micro-label:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(11px, 0.85vw, 14px)\"\n    lineHeight: 1.2\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  micro-label-tight:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.72vw, 12px)\"\n    lineHeight: 1.2\n    letterSpacing: 0.16em\n    textTransform: uppercase\n  rail-label:\n    fontFamily: \"'Archivo', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    lineHeight: 1\n    letterSpacing: 0.32em\n    textTransform: uppercase\n  mono-data:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 0.85vw, 14px)\"\n    lineHeight: 1.4\n    letterSpacing: 0.04em\n  mono-date:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 0.95vw, 16px)\"\n    lineHeight: 1.4\n    letterSpacing: 0.02em\n  pagenum:\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    lineHeight: 1\n    letterSpacing: 0.08em\n\nspacing:\n  pad-edge: \"clamp(40px, 4vw, 76px)\"\n  pad-region: \"clamp(40px, 4.2vw, 80px)\"\n  pad-foot: \"clamp(56px, 5vh, 88px)\"\n  pad-strand-y: \"clamp(12px, 1.6vh, 22px)\"\n  gap-region: \"clamp(20px, 2.5vw, 48px)\"\n  gap-strand: \"clamp(14px, 1.8vh, 22px)\"\n  gap-footer-col: \"clamp(20px, 2.4vw, 44px)\"\n  pagenum-bottom: \"clamp(22px, 2.4vh, 42px)\"\n  pagenum-right: \"clamp(24px, 2.4vw, 48px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.paper}\"\n\ncomponents:\n  pagenum:\n    position: \"absolute, right + bottom\"\n    color: \"{colors.ink}\"\n    opacity: 0.75\n    fontFamily: \"'JetBrains Mono', ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    letterSpacing: 0.08em\n    description: \"Single mono pagenum NN / NN pinned to bottom-right of every slide at 75% opacity. The only persistent chrome on every surface.\"\n  hairline-rule:\n    border: \"1px solid {colors.ink}\"\n    description: \"1px solid ink horizontal or vertical rule. The system's only border treatment — separates header bands from content, footer columns from each other, ledger rows from each other. No thicker rule exists.\"\n  hairline-rule-soft:\n    border: \"1px solid rgba(27, 37, 102, 0.18-0.2)\"\n    description: \"1px ink at 18-20% opacity. Used for between-row separators inside dense ledger or strand lists where a full-weight rule would feel oppressive.\"\n  sun-bloom:\n    background: \"radial-gradient using {colors.sun} {colors.sun-soft} {colors.haze} blending to transparent on {colors.paper}\"\n    description: \"Large soft radial bloom of solar yellow placed off-center or behind a focal element. The system's primary atmospheric layer. Sized 42-70% of viewport in the larger axis.\"\n  ember-bloom:\n    background: \"radial-gradient using {colors.ember} at 15-22% opacity blending to transparent\"\n    description: \"Small warm peach bloom used as a counter-temperature accent in a corner opposite the sun bloom. Always subordinate; never dominant.\"\n  block-tile:\n    background: \"{colors.sun} at 40-70% opacity\"\n    description: \"Geometric blocks of translucent solar yellow placed on an 8-row × 4-column grid behind cover or colophon surfaces. Suggests a layered poster underprint.\"\n  yellow-panel:\n    background: \"{colors.sun}\"\n    color: \"{colors.ink}\"\n    description: \"Full-bleed yellow panel covering a column or third of the slide. The strongest possible color statement — used when a region needs to read as poster-fill, not paper.\"\n  bar-ink:\n    background: \"{colors.ink}\"\n    height: \"clamp(14px, 1.6vh, 22px)\"\n    description: \"Solid ink horizontal bar for data charts. Width carries the data value.\"\n  bar-lit:\n    background: \"{colors.sun}\"\n    border: \"1px solid {colors.ink}\"\n    height: \"clamp(14px, 1.6vh, 22px)\"\n    description: \"Highlighted variant of bar-ink — yellow fill with 1px ink stroke. Used to mark the current or featured row in a series.\"\n  strand-row:\n    layout: \"grid 56px 1fr, gap clamp(14px, 1.4vw, 24px), border-bottom hairline-soft, padding-bottom clamp(12px, 1.6vh, 22px)\"\n    description: \"Numbered editorial list row — numeral cell + content cell separated by hairline-soft. Used for programmes, agendas, and curated lists.\"\n  ledger-row:\n    layout: \"grid 92px 1.6fr 0.9fr 80px, gap clamp(14px, 1.4vw, 28px), border-bottom hairline-soft, padding clamp(10px, 1.3vh, 18px) 0\"\n    description: \"Four-column tabular row for calendars and itineraries. Date column is mono, title is serif, venue is sans, duration is mono right-aligned.\"\n  footer-band:\n    layout: \"grid 4-column with hairline-rule top border on each cell, gap clamp(20px, 2.4vw, 44px)\"\n    description: \"Four-column metadata strip pinned to the bottom of cover and colophon surfaces. Each cell has a tiny uppercase tag + a brief plain-English statement.\"\n  vertical-rail:\n    transform: \"rotate(-90deg) translateY(-50%) at left edge\"\n    fontFamily: \"'Archivo', sans-serif\"\n    fontSize: \"clamp(11px, 0.85vw, 13px)\"\n    letterSpacing: 0.32em\n    textTransform: uppercase\n    description: \"Rotated vertical text label running up the left edge. Used on chapter/divider surfaces as a section marker.\"\n  date-rail-stack:\n    fontFamily: \"'Instrument Serif', Georgia, serif\"\n    fontSize: \"clamp(48px, min(5.2vw, 9vh), 96px)\"\n    lineHeight: 0.96\n    textAlign: right\n    description: \"Large serif date or date-range stacked at top-right of cover surfaces. Uses an en-dash to indicate spans.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBiennale Yellow is a **literary-editorial presentation system** modeled on the visual language of European art biennale catalogues, slow exhibition posters, and quarterly literary publications. There are no cards, no buttons, no shadows, no rounded corners. The structural vocabulary is just three things: paper, ink, and yellow.\n\nThe typographic system pivots on **Instrument Serif**, a contemporary high-contrast serif with tall ascenders, elegant italics, and slightly flared terminals. It carries every display moment, every numeral, every quote — at scales ranging from headline-small (40px) to jumbo numerals over 700px. Set tight (line-height 0.86, letter-spacing −0.018em), it reads as confident editorial display; set looser in italic (line-height 1.04, letter-spacing −0.005em), it becomes a slow-reading quotation face. **Archivo** is the sans companion — used for body paragraphs and as small, wide-tracked uppercase labels (the \"micro-label\" treatment). **JetBrains Mono** handles all numerical and metadata callouts: dates, ledger figures, page numbers. The three-face system is rigid and disciplined; the contrast between them is the entire typographic story.\n\nThe color world is built on **warm parchment** (`{colors.paper}` — `#E9E5DB`) as the universal ground, marked by a single **ink** color (`{colors.ink}` — `#1B2566`, a deep indigo navy) used for every line of type and every rule. The system's signature color is **sun** (`{colors.sun}` — `#F1EE2E`), a highly saturated solar yellow used as a flooded panel, as a soft blooming radial gradient, or as a geometric tile underprint. A **soft ember peach** (`{colors.ember}` — `#E26B4A`) appears only as a subordinate counter-temperature accent, always at 15-22% opacity in a corner radial bloom. Inverted color treatments are not used; the system commits to navy ink on a warm ground.\n\nDepth is **atmospheric, not structural**. There are no drop shadows anywhere in the system. Depth comes from layered radial gradients of yellow (the sun-bloom and ember-bloom components) and the optional block-tile underprint on cover-class surfaces. Cards have no borders; regions are separated only by 1px hairline rules in ink. The lack of border weight is itself the aesthetic — the design feels printed, not engineered.\n\n**Density philosophy: editorial-restrained.** This system reads as elegant when sparse and broken when crowded. A typical surface holds one large display moment + a handful of supporting elements (a micro-label, a body paragraph, an ordered list, or a single radial bloom). Crowding the canvas with cards, buttons, panels, or stacked components turns the system into a different aesthetic entirely. Even dense surfaces (a calendar or programme) achieve density through tabular repetition, not visual richness — many quiet rows of hairline-separated metadata, not many bordered cells. Generous edge padding (40-76px) and wide footer/header bands let the canvas breathe.\n\n**Key Characteristics:**\n- Warm parchment ground (`{colors.paper}`) on every surface; never white, never gray.\n- Single ink color (`{colors.ink}`) for all text and all rules — no secondary text colors.\n- Solar yellow (`{colors.sun}`) deployed three ways: as a flooded panel, as a soft radial bloom, as a translucent geometric tile underprint.\n- Instrument Serif handles every display moment at scales from 40px to 720px+.\n- Archivo Bold uppercase + 0.16–0.32em tracking is the universal label voice.\n- JetBrains Mono is reserved exclusively for dates, ledger numerals, and page numbers.\n- 1px hairline rules in `{colors.ink}` are the only border treatment — used for header bands, ledger rows, footer columns, and strand separators.\n- No drop shadows, no rounded corners, no card outlines, no buttons. Decoration is atmospheric (radial blooms) or geometric (translucent tile blocks).\n- Persistent `01 / NN` JetBrains Mono pagenumber at bottom-right of every surface at 75% opacity.\n- Optional vertical rotated rail-label at the left edge of chapter/divider surfaces.\n\n## Colors\n\n### Palette\n\n- **Paper** (`{colors.paper}` — `#E9E5DB`): The warm parchment canvas. The default and near-universal background. Reads as a softened off-white with strong warmth — never neutral, never cold.\n- **Paper-deep** (`{colors.paper-deep}` — `#DCD6C4`): A slightly darker parchment tone, available as a secondary surface or to suggest a shadow band without using actual shadow. Reserved for moments that need surface differentiation while staying within the warm-paper family.\n- **Ink** (`{colors.ink}` — `#1B2566`): The single text and line color across the entire system. A deep indigo navy that reads as confident editorial black-with-blue-bias. Used for headlines, body, micro-labels, monos, hairline rules, and ink-bar fills. The `--line` CSS variable resolves to this same color.\n- **Sun** (`{colors.sun}` — `#F1EE2E`): The system's signature solar yellow. Highly saturated, slightly green-leaning. Used three ways: as a flooded full-bleed or column-bleed panel, as the core of soft radial blooms, and as 40-70% opacity geometric tile blocks.\n- **Sun-soft** (`{colors.sun-soft}` — `#F8F39B`): A paler buttery yellow used in the middle stops of sun-bloom gradients to soften the transition from saturated sun to paper.\n- **Haze** (`{colors.haze}` — `#F0DA7C`): A warmer mustard-leaning yellow used in the outermost stops of sun-bloom gradients to extend the bloom into the paper without a hard edge.\n- **Ember** (`{colors.ember}` — `#E26B4A`): A warm peach-orange used only as a subordinate counter-temperature accent in 15-22% opacity radial blooms. Never used as a fill color, never as a text color. Its job is to balance a sun-bloom on the opposite side of the canvas.\n\n### Defaults\n\n- **Default surface background**: `{colors.paper}`. Every surface starts here.\n- **Default headline color**: `{colors.ink}`. Always. Headlines never appear in yellow, ember, or paper-deep — only ink.\n- **Default body text color**: `{colors.ink}`. Body uses the same color as display; the contrast is achieved through size and weight, not color.\n- **Default rule color**: `{colors.ink}` (1px solid) for primary separators, ink at 18-20% opacity for secondary row separators.\n- **Default accent surface for poster moments**: `{colors.sun}` — a flooded panel of solar yellow with `{colors.ink}` text on top.\n- **Default atmospheric layer**: a single `{components.sun-bloom}` placed off-center on the surface, with an optional `{components.ember-bloom}` in the opposite corner.\n- **Default chart bar color**: `{colors.ink}`. The featured/current bar uses `{components.bar-lit}` (yellow fill, ink stroke).\n- **Default label color**: `{colors.ink}` for the text, no fill. Labels are tracking + uppercase + weight 600, not filled pills.\n\nThe system never inverts: ink text on a sun panel is correct (and a key signature treatment), but yellow text on an ink ground does not exist. Text is always ink; the variability lives in what's behind the text, not in the text color itself.\n\n## Typography\n\n### Font Family Stack\nThe system runs three faces, each with a tightly defined role.\n\n**Instrument Serif** (Google Fonts, italic + roman) is the display and editorial face. Its high contrast, tall ascenders, and slightly flared terminals give it a contemporary literary register — closer to a magazine masthead than a traditional book serif. Roman is used for headlines, numerals, ledger titles, and date rails. Italic is used for manifesto quotes and certain emphasis moments. Set tight (line-height ≤ 1.06, negative letter-spacing −0.005 to −0.04em).\n\n**Archivo** (Google Fonts) is the sans companion. Used at weight 400 for body paragraphs (line-height 1.5) and at weight 600 for the universal micro-label treatment (uppercase, 0.16-0.32em tracking, 10-14px). Never used at intermediate weights, never used for headlines.\n\n**JetBrains Mono** (Google Fonts) is the numerical/metadata face. Used exclusively for dates in ledgers, mono numerical callouts in data slides, page numbers, and the nav-hint. Its slab character gives editorial weight to numerical content without leaning on bold styling.\n\n### Typography Scale\n\n| Token | Size (clamp) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 120–240px | Instrument Serif | 400 | Cover-scale display title |\n| `{typography.display-sm}` | 110–200px | Instrument Serif | 400 | Editorial display in a panel context |\n| `{typography.display-md}` | 80–200px | Instrument Serif | 400 | Closing-statement display |\n| `{typography.display-it}` | 56–120px | Instrument Serif italic | 400 | Manifesto-scale italic quote body |\n| `{typography.numeral-jumbo}` | 220–720px | Instrument Serif | 400 | Chapter-divider ordinal numeral |\n| `{typography.numeral-lg}` | 120–280px | Instrument Serif | 400 | Decorative quotation mark, oversized punctuation |\n| `{typography.numeral-md}` | 72–144px | Instrument Serif | 400 | Hero stat figure |\n| `{typography.headline}` | 40–88px | Instrument Serif | 400 | Primary section headline, large quote body |\n| `{typography.headline-sm}` | 32–56px | Instrument Serif | 400 | Region headline, ledger/calendar topbar |\n| `{typography.date-rail}` | 48–96px | Instrument Serif | 400 | Date or date-range stacked at top of a surface |\n| `{typography.ledger-title}` | 20–30px | Instrument Serif | 400 | Title cell inside a calendar/ledger row |\n| `{typography.strand-title}` | 22–32px | Instrument Serif | 400 | Title inside a numbered strand/list row |\n| `{typography.strand-num}` | 28–38px | Instrument Serif | 400 | Numeral cell inside a strand row |\n| `{typography.body-lede}` | 15–18px | Archivo | 400 | Lede paragraph following a chapter headline |\n| `{typography.body}` | 14–16px | Archivo | 400 | Standard body paragraph |\n| `{typography.body-sm}` | 11–13px | Archivo | 400 | Footer-band body text, dense metadata |\n| `{typography.micro-label}` | 11–14px | Archivo | 600 | Universal uppercase eyebrow label |\n| `{typography.micro-label-tight}` | 10–12px | Archivo | 600 | Smaller uppercase label inside footer cells |\n| `{typography.rail-label}` | 11–13px | Archivo | 600 | Vertical rotated rail label |\n| `{typography.mono-data}` | 12–14px | JetBrains Mono | 400 | Chart year/value labels, mono inline data |\n| `{typography.mono-date}` | 13–16px | JetBrains Mono | 400 | Date column in calendar ledgers |\n| `{typography.pagenum}` | 11–13px | JetBrains Mono | 400 | Persistent page number |\n\n### Defaults\n\n- **Default size for a cover-scale display headline**: `{typography.display}` (120–240px clamp). Anything smaller reads as section-level, not cover-level.\n- **Default size for a primary section headline**: `{typography.headline}` (40–88px clamp).\n- **Default size for a chapter-divider numeral**: `{typography.numeral-jumbo}` (220–720px clamp). Don't shrink — the jumbo numeral is the point of a divider surface.\n- **Default size for a hero statistic**: `{typography.numeral-md}` (72–144px clamp). Stat figures share the same serif as headlines — they are display moments, not data chrome.\n- **Default size for a paragraph body**: `{typography.body}` (14–16px). For a lede after a chapter headline, step up to `{typography.body-lede}` (15–18px).\n- **Default size for any eyebrow label**: `{typography.micro-label}` (11–14px) at weight 600, uppercase, 0.18em tracking.\n- **Default weight for any Archivo body**: 400. Archivo body at any other weight breaks the rhythm.\n- **Default weight for any micro-label**: 600. Labels at weight 400 or 700 read as either timid or oversized.\n- **Default tracking for any uppercase label**: 0.16em minimum, 0.32em maximum. Labels without wide tracking read as code, not editorial.\n\nWhen unsure which display token to reach for, default to `{typography.headline}` (40–88px) for the primary moment, and `{typography.numeral-md}` (72–144px) for a single hero statistic. The display, display-sm, and display-md tokens are reserved for cover/colophon/poster-scale moments.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every display, numeral, headline, and ledger-title element is Instrument Serif at weight 400.** Bold serif display does not exist in this system — the face's contrast is its weight signal. Setting Instrument Serif at weight 700 collapses the entire elegance.\n- **Every Instrument Serif display element uses tight line-height (0.84–1.06).** Generous line-height on display destroys the editorial poster feel — large serif headlines must feel stacked, not aerated.\n- **Every Instrument Serif display element uses negative letter-spacing.** Display, headline, jumbo numerals at −0.018 to −0.04em; italic display at −0.005em. Without negative tracking, the wide-bodied glyphs read as untreated.\n- **Every micro-label is uppercase Archivo weight 600 with tracking ≥ 0.16em.** No exceptions. A label without uppercase + tracking is not a label in this system; it's a stray sans element.\n- **Every numerical metadata element (date, page number, chart value, calendar date) is JetBrains Mono.** Serif numerals are for display moments; mono numerals are for data chrome. Don't cross the line.\n- **Every italic manifesto-scale quote uses `{typography.display-it}`.** Setting an italic quote at headline scale (40–88px) reads as a smaller moment; the italic is meant to dominate.\n- **Every body paragraph is Archivo weight 400 with line-height ≥ 1.45.** Body in Instrument Serif does not exist — Instrument is for display only.\n\n### Typography Principles\n\nThe voice contrast is **slow elegant serif ↔ wide-tracked uppercase sans ↔ tabular mono**. Italic Instrument is the system's \"feeling\" voice (reserved for quotes and manifesto moments); roman Instrument is the \"statement\" voice; Archivo upper-tracked is the \"label\" voice; mono is the \"data\" voice. Each has a single job.\n\nMixing rules are tight: an `<em>` inside an Instrument Serif headline stays in italic Instrument Serif (no face switch). An `<em>` inside an Archivo body paragraph becomes italic Archivo, not a serif. Don't mix faces inline.\n\nColor is locked to ink on every element. There is no \"accent color text\" treatment in this system — accent is delivered through atmospheric blooms and panel fills, not text color.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and crossfade via opacity transition (280ms ease). Only one slide is `.active` at a time. Every measurement uses CSS `clamp()` with both vw and vh terms — typography clamps include `min(...vw, ...vh)` patterns so display type scales by whichever viewport axis is shorter.\n\n### Padding and Margin Scale\n\n| Token | Range | Use |\n|---|---|---|\n| `{spacing.pad-edge}` | 40–76px | Standard edge padding from any slide edge to content |\n| `{spacing.pad-region}` | 40–80px | Internal padding inside a flooded yellow panel or major region |\n| `{spacing.pad-foot}` | 56–88px | Bottom padding when the footer band is present |\n| `{spacing.gap-region}` | 20–48px | Gap between two major content columns/regions |\n| `{spacing.gap-strand}` | 14–22px | Gap between strand rows in a numbered list |\n| `{spacing.gap-footer-col}` | 20–44px | Gap between columns of the footer-band metadata strip |\n| `{spacing.pagenum-bottom}` | 22–42px | Bottom inset of the persistent pagenum |\n| `{spacing.pagenum-right}` | 24–48px | Right inset of the persistent pagenum |\n\n### Persistent Chrome\nThe **pagenum** is the only persistent on-canvas element. It appears at `bottom-right` of every slide in JetBrains Mono at 11–13px, color ink, opacity 0.75. A **nav-hint** (`← / → · space`) appears once, fixed to the bottom-left of the viewport in JetBrains Mono at 10–12px / opacity 0.4. The nav-hint is not part of the slide composition — it lives outside the `.stage`.\n\n### Edge Discipline\nEvery meaningful element respects a minimum 40px (mobile) to 76px (desktop) edge inset. The system's elegance depends on negative space at the edges — pushing content to the bleed (other than full-bleed panels, blooms, and tile blocks) breaks the catalogue feel.\n\n### Atmospheric Layer\nEvery slide may carry one or both atmospheric layers behind content:\n- A **sun-bloom** (`{components.sun-bloom}`) — a large soft radial gradient of solar yellow, sized 42-70% of viewport, placed off-center or behind a focal element.\n- An **ember-bloom** (`{components.ember-bloom}`) — a small warm peach radial gradient at 15-22% opacity, placed in a corner opposite the sun bloom.\n\nThese layers are not optional decoration — they are the system's primary depth mechanism. A surface without a bloom reads as flat parchment.\n\n## Depth and Elevation\n\n### No Drop Shadows\nThe system has **zero drop shadows**. No `box-shadow`, no `text-shadow`, no `filter: drop-shadow(...)`. Depth is delivered atmospherically.\n\n### Atmospheric Depth (Sun Bloom)\nThe primary depth mechanism is the **sun-bloom** — a large soft radial gradient of solar yellow blooming from a point on the canvas. Bloom anatomy is a layered radial gradient with three or four color stops:\n- 0%: `{colors.sun}` at 70-95% opacity (the hot core)\n- ~30-40%: `{colors.sun}` at 40-65% opacity (the bloom)\n- ~55-65%: `{colors.haze}` at 18-22% opacity (the soft extension)\n- 80-90%: `{colors.paper}` at 0% (smooth fade into ground)\n\nBloom size and position varies by surface need: cover surfaces use a centered or slightly-off-center bloom 42% × 38% of viewport; chapter surfaces use a corner-anchored 720px-radius bloom; closing surfaces use a bottom-anchored 55% × 50% bloom rising from below.\n\n### Counter-Temperature Accent (Ember Bloom)\nAn optional **ember-bloom** in a corner opposite the sun-bloom provides warm-cool color tension without raising the saturation of the canvas. Always at 15-22% opacity, always smaller than the sun-bloom, always subordinate.\n\n### Geometric Underprint (Block Tiles)\nOn cover and colophon surfaces, an additional **block-tile** layer can appear behind content — translucent solar yellow rectangles placed on an 8-row × 4-column grid system at 40-70% opacity. This layer suggests a layered poster underprint without committing to a solid panel. The tiles are decorative geometry, not active content regions.\n\n### Yellow Panel (Structural Color)\nFor surfaces that need the strongest possible color statement, a **yellow-panel** flood (`{components.yellow-panel}`) covers a column, half, or third of the canvas in saturated `{colors.sun}`. This is the only \"hard\" color treatment in the system — when a panel is used, ink text sits on top at full opacity. Panels do not have borders or shadows; they meet the paper edge or another panel edge directly.\n\n### Hairline Rules\nInternal structural depth is delivered by **1px solid ink hairline rules** separating header bands from content, ledger rows from each other, and footer columns from each other. Rules are never thicker than 1px. Between secondary list rows (e.g., strand separators), the rule drops to `rgba(27, 37, 102, 0.18-0.2)` — same color, lower opacity.\n\n## Shapes and Treatment\n\n### Border Radius\n**Zero, on everything.** Every shape is a strict rectangle. The radial blooms are technically circles but they have no visible edge — they fade into paper.\n\n### Border Weights\n- **1px solid `{colors.ink}`** — the universal rule. Used for header-band underlines, ledger row separators, footer-column tops, and the bordered chart bar accent on the lit row.\n- **1px solid `rgba(27, 37, 102, 0.18-0.2)`** — soft variant of the same rule. Used for secondary row separators inside dense lists where full-weight ink would feel heavy.\n\nThe system has **no thicker borders**. There are no 2px, 3px, or 4px outlines anywhere. The visual structure depends on the lightness of the hairline.\n\n### Decorative Element Types\n\n**Sun-bloom** — Large soft radial gradient of solar yellow placed off-center or behind a focal element. The system's primary depth mechanism. Always one per surface, sometimes paired with a counter-bloom.\n\n**Ember-bloom** — Small warm peach radial gradient at 15-22% opacity, placed in a corner opposite the sun-bloom. Subordinate atmospheric balance.\n\n**Block-tile underprint** — Translucent solar yellow rectangles placed on an 8×4 grid system. Decorative geometry suggesting a layered poster, used on cover and colophon-type surfaces.\n\n**Yellow panel** — A full-bleed column, half, or third of the canvas flooded with `{colors.sun}`. The system's strongest color statement. Carries ink text on top.\n\n**Hairline rule** — 1px solid ink. Used for header-band underlines, ledger separators, footer column tops. The system's only border.\n\n**Footer band** — A four-column metadata strip at the bottom of cover/colophon surfaces. Each cell has a `{components.hairline-rule}` top border, an Archivo micro-label, and a short body statement.\n\n**Strand row** — Numbered editorial list row with serif numeral cell + serif title + sans body, separated from the next row by a hairline-soft rule.\n\n**Ledger row** — Four-column tabular calendar/itinerary row: mono date + serif title + sans venue + mono duration (right-aligned), separated by hairline-soft rules.\n\n**Vertical rail label** — Rotated Archivo uppercase text running up the left edge of a chapter-divider surface, with 0.32em tracking.\n\n**Date rail** — Large serif date or date-range stacked at top-right of cover surfaces, often using an en-dash to indicate a span across years or months.\n\n**Jumbo numeral** — A single huge Instrument Serif numeral (220-720px) dominating a divider surface. Always serif, always at weight 400, always with tight line-height.\n\n**Chart bar** — A solid ink rectangle whose width carries the data value. The featured/current bar swaps to yellow fill with a 1px ink stroke (`{components.bar-lit}`). Chart layouts use grid-row patterns: mono year label + bar + mono value, separated by gap.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.paper}` as the universal background. Every surface starts on parchment.\n- Set every line of text in `{colors.ink}` — display, body, micro-label, mono, everything. The single text color is non-negotiable.\n- Use Instrument Serif at weight 400 with tight line-height (0.84-1.06) and negative letter-spacing (-0.018 to -0.04em) for every display moment. The serif's elegance lives in this configuration.\n- Add at least one `{components.sun-bloom}` to every surface. Atmospheric depth is the system's depth mechanism; a flat parchment surface reads as broken.\n- Pair a sun-bloom with an `{components.ember-bloom}` in the opposite corner when you want warm-cool tension without raising the overall saturation.\n- Use `{components.hairline-rule}` (1px solid ink) for every structural separator: header-band underline, ledger row, footer column, strand separator.\n- Set every uppercase label in Archivo weight 600 with 0.16-0.32em tracking. Without the wide tracking, labels read as code, not editorial.\n- Use `{components.yellow-panel}` (full-bleed sun column or panel) when a surface needs strongest color commitment — keep ink text on top at full opacity.\n- Place the persistent `{components.pagenum}` (JetBrains Mono, 75% opacity ink) at bottom-right of every surface.\n- Reserve JetBrains Mono exclusively for numerical and metadata callouts: dates, ledger figures, chart values, page numbers, nav-hint. Never use mono for display or body.\n\n### Don't\n\n- Don't add drop shadows. The system has zero box-shadows and zero text-shadows. Adding any blurred or offset shadow breaks the printed-paper feel immediately.\n- Don't round any corner. Every shape is strict rectangle. Border-radius is forbidden.\n- Don't use borders thicker than 1px. The hairline rule is the only border vocabulary; 2px, 3px, or 4px outlines do not exist.\n- Don't set Instrument Serif at weight 700 or any bold weight. The serif's character lives at weight 400; bold serif display flattens the system.\n- Don't introduce a second text color. Yellow text on paper, ember text anywhere, or muted-ink secondary text — none exist. Text is always full-opacity ink.\n- Don't crowd the canvas with cards or panels. The system reads as elegant when sparse. Bordered cards, button stacks, or multi-region grids of containers break the editorial restraint.\n- Don't invert: ink panels with yellow or paper text are not part of the system. Ink ground is reserved for chart bars and small rule elements only.\n- Don't substitute Inter, Helvetica, or system-ui for Archivo, or Times for Instrument Serif. The font selection is the visual identity; substitution collapses the aesthetic.\n- Don't use mono for body or headlines. JetBrains Mono is exclusively for numerical/metadata chrome.\n- Don't omit the bloom layer on a surface. A flat parchment slide reads as a CMS template; the bloom is the atmosphere that signals \"biennale\".\n\n## Responsive Behavior\n\nThis system is built as a **viewport-fluid 100vw × 100vh deck** with no responsive breakpoints. Every font size, padding value, and gap uses CSS `clamp()` with both vw and vh terms — `clamp(40px, min(4.4vw, 7vh), 88px)` is a typical pattern. Display type scales by whichever viewport axis is shorter, so portrait orientations don't blow out the headlines.\n\n### Scaling Behavior\n- Cover-scale display scales 120px → 240px.\n- Chapter-divider jumbo numeral scales 220px → 720px.\n- Headline scales 40px → 88px.\n- Body scales 14px → 16px.\n- Edge padding scales 40px → 76px.\n- Hairline rule (1px) and pagenum sizing (11-13px) are essentially fixed.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `PageDown`, or `Space`.\n- Slides reverse via `ArrowLeft` or `PageUp`.\n- `Home` jumps to first slide, `End` to last.\n- Horizontal touch swipe with a 40px threshold advances/reverses.\n- Slide crossfades at 280ms ease via `opacity` toggle on the `.active` class. Only the active slide is `pointer-events: auto`.\n\n### Print Behavior\nThe system has no `@media print` rule. The crossfade transition is screen-only. For static export, capturing each slide individually via screenshot preserves all atmospheric layers (the radial blooms are pure CSS gradients, not assets).\n\n### Mobile Behavior\nThe `min(vw, vh)` pattern in display clamps means narrow portrait viewports automatically shrink display type to fit. The strand and ledger rows use fixed-px first columns (56px, 92px) that may feel tight on narrow widths — the system is designed for landscape presentation contexts and is functional but not optimized for sub-768px portrait usage.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / numerals / headlines / date rail | Instrument Serif 400 | 得意黑 Smiley Sans (oblique) — display moments; 思源宋体 Noto Serif SC 400 as fallback for long-form serif headlines |\n| Body / lede / micro-label | Archivo 400–600 | 思源宋体 Noto Serif SC 400 for body; 思源黑体 Noto Sans SC 600 for micro-labels |\n| Mono data / dates / page numbers | JetBrains Mono 400 | 思源黑体 Noto Sans SC 500 with tabular-feeling alignment — see Known CJK Gap below |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role, with Latin glyphs handled by the same CJK family. Both 思源宋体 and 思源黑体 ship Latin glyphs that read cleanly alongside Chinese characters, so a mixed sentence renders in a consistent face. 得意黑 is used surgically — only on the biggest display moments where its slight oblique slant matches the Italian-poster register Instrument Serif provides in the Latin original. For everything else (body, micro-label, mono), Noto Serif SC / Noto Sans SC carries both scripts.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=Noto+Serif+SC:wght@400;500;700;900&display=swap\" rel=\"stylesheet\">\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-smiley-sans-oblique/font.min.css\">\n```\n\nAfter loading, reference 得意黑 as `font-family: 'Smiley Sans Oblique', 'Noto Serif SC', serif` on the display tokens that should carry the strongest poster register.\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.5–1.55), display 1.05–1.15 (up from the very tight 0.84–0.96 used on Instrument Serif). The Latin display tokens here use line-height as low as 0.84 — at that compression, CJK characters collide vertically. Open display to a minimum of 1.0 for Chinese, and 1.15+ on multi-line headlines.\n- **Letter-spacing**: set to 0 on every CJK run. The Latin display tokens use negative tracking from −0.005em down to −0.04em; on square CJK glyphs this overlaps strokes and reads as broken. Micro-labels at 0.16–0.32em wide tracking also drop to 0.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every micro-label and rail-label in this system uses `text-transform: uppercase`; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））. Replace the en-dash separator in date ranges with a Chinese 至 or full-width 「—」 hyphen.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 春季双年展` not `2024春季双年展`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style — let it handle mixed editorial sentences. Don't let the browser font-switch to Archivo mid-paragraph.\n\n### Aesthetic Notes for This System\n\nThe system's editorial identity rests on Instrument Serif's high-contrast, tall-ascender personality — a face that signals \"art biennale catalogue\" and \"slow literary quarterly\". The closest Chinese equivalent for register is **思源宋体 Noto Serif SC** for body and editorial display, with **得意黑 Smiley Sans Oblique** reserved for the poster-scale display moments where Instrument Serif at 120–240px does the heaviest identity work in the Latin original. 得意黑's slight italic tilt and slab character matches the Italian-exhibition-poster register; pure Noto Serif SC at jumbo numerals reads as restrained academic Chinese rather than biennale-loud.\n\nThe \"single text color, single accent\" discipline of this system transfers cleanly to CJK — ink-on-paper, sun-bloom atmosphere, hairline rules, no shadows. The micro-label treatment (Archivo weight 600, uppercase, 0.16–0.32em tracking) is the system's most fragile element when translated: CJK micro-labels lose both the uppercase signal and the wide tracking. Compensate by setting Chinese micro-labels in 思源黑体 weight 600 at 0 tracking with the **slightly heavier weight contrast** (drop body to weight 400 of 思源宋体, keep labels at 600 of 思源黑体) and by **always pairing the label with a hairline-soft rule beneath** — the rule does the chrome-recognition work the wide-tracked uppercase did in Latin.\n\n### Known CJK Gap\n\n- **No CDN-loadable Chinese monospace face for tabular data.** JetBrains Mono's role here (calendar ledger dates, chart year/value labels, page numbers) depends on monospaced figure rhythm that CJK doesn't provide. 思源黑体 at weight 500 with `font-feature-settings: \"tnum\"` gives tabular Latin digits but Chinese characters remain proportional. For ledger rows where alignment is structural, keep the date and value columns in Latin digits (Arabic numerals + Latin date abbreviations) and use 思源黑体 only for the title/venue cells.\n- **Instrument Serif italic has no direct Chinese counterpart.** The italic display token (manifesto-scale quote body) loses its slow-reading personality entirely in CJK. Use 思源宋体 400 with looser line-height (1.4) and slightly larger size to compensate; consider 「」 quotation framing to signal \"this is a quoted passage\".\n- **得意黑 may not load on restricted networks.** The cn-fontsource CDN is reliable in mainland China but less proven internationally. Always include `'Noto Serif SC', serif` in the stack as fallback so display headlines remain editorial even when 得意黑 fails.\n\n## Iteration Guide\n\n1. Any new surface starts on `{colors.paper}`, places at least one `{components.sun-bloom}` for atmosphere, and pins the persistent `{components.pagenum}` to bottom-right.\n2. Any new headline uses Instrument Serif weight 400 with tight line-height and negative tracking. Reach for `{typography.headline}` for primary moments and `{typography.display}` only for cover-scale.\n3. Any new body paragraph uses Archivo weight 400 with line-height 1.5. Lede paragraphs following a headline use the slightly larger `{typography.body-lede}` for breathing room.\n4. Any new eyebrow or section tag uses the micro-label treatment: Archivo weight 600, uppercase, 0.16-0.32em tracking, ink color, no fill. Don't substitute a pill or chip.\n5. Any new structural separator is a 1px `{components.hairline-rule}` in ink, or its soft variant for secondary list rows. Never reach for a thicker border.\n6. Any new numerical or metadata content (date, page number, chart value, ledger figure) uses JetBrains Mono. Serif numerals are reserved for display moments only.\n7. Any new \"poster-scale\" color statement uses `{components.yellow-panel}` — a flooded column or fraction of the canvas in `{colors.sun}` with ink text on top.\n8. Any new ordered list of program items uses the `{components.strand-row}` pattern: serif numeral cell + serif title + sans body, separated by hairline-soft rule.\n9. Any new tabular itinerary uses the `{components.ledger-row}` pattern: mono date + serif title + sans venue + mono duration right-aligned, separated by hairline-soft rule.\n10. If a surface feels flat, add an `{components.ember-bloom}` in the opposite corner from the sun-bloom — never add a card border or shadow.\n\n## Known Gaps\n\n- **Instrument Serif, Archivo, and JetBrains Mono are loaded from Google Fonts** via a preconnect + `<link>`. Fallbacks (`Georgia`, `Helvetica Neue`, `ui-monospace`) are defined but render very differently — in environments where Google Fonts fail, the system collapses to generic editorial defaults and loses its identity.\n- **The Instrument Serif italic axis is loaded** but used only for the manifesto-scale quote treatment. Other italic moments (an `<em>` inside a body paragraph, for instance) will not stylistically signal the same as the dedicated italic display.\n- **The system has no chart engine** — the data slide uses inline `style=\"width: XX%\"` on bar divs. Building dynamic charts requires computing widths in JS or templating the markup server-side.\n- **The block-tile underprint uses hardcoded grid positions** (`grid-column: 1 / 3; grid-row: 6 / 9;`) per tile. Tiles are decorative and the placements are tuned per surface; there is no parametric tile placement system.\n- **The vertical rail-label uses a rotated transform** that can produce subtle subpixel rendering artifacts on some browsers. The label is decorative; if rendering looks off, it can safely be dropped.\n- **The slide navigation has no slide indicator beyond the pagenum.** There are no dot-rails, no progress bar, no thumbnail bar. The pagenum text is the only positional cue.\n- **The crossfade transition is screen-only** and doesn't degrade to a sensible print/static state. Capturing slides for PDF export requires manual screenshot per surface.\n- **The cover and colophon footer-band columns use fractional widths** (`1.1fr 1fr 1.4fr 2fr` and `1.2fr 1.1fr 1fr 1.4fr`). These ratios are tuned to the demo content and may need adjusting if footer cells carry significantly different text length.\n- **The system loads Google Fonts with `ital` axis for Instrument Serif** but only `wght` axes for Archivo and JetBrains Mono. Adding italic body or italic mono moments requires updating the font-loading request.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/biennale-yellow/preview.md (Tokens: ~1003 | Category: anthropic-skill) -->\n# Biennale Yellow Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/biennale-yellow/design.md`\n- Preview card: `bold-template-pack/templates/biennale-yellow/preview.md`\n\n## Selection Metadata\n\n- Slug: `biennale-yellow`\n- Tagline: Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients.\n- Mood: editorial, atmospheric, warm, cultural-institution, poster-like\n- Tone: literary, considered, contemplative, warm-modern, Dutch-editorial\n- Formality: high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, studio retrospectives. Equally good for any deck wanting Dutch-editorial atmosphere with an unmistakable single-color signature.\n- Avoid for: Decks that need visual punch or saturated multi-color energy — the warm-paper canvas and one-yellow palette are intentionally quiet and atmospheric.\n\n## Visual Snapshot\n\nA literary-editorial presentation system in the visual register of an art biennale catalogue or quiet exhibition poster. The aesthetic is built on warm parchment grounds (#E9E5DB) flooded with soft solar yellow (#F1EE2E) radial blooms, set against a single deep indigo navy ink color. Display type is Instrument Serif — a contemporary high-contrast serif with tall ascenders and elegant italics — paired with Archivo for sans-serif chrome and JetBrains Mono for numerical and metadata callouts. No drop shadows, no rounded corners, no bordered cards: the only structural lines are hairline 1px rules in ink. The mood sits between a folded museum brochure, a slow-reading literary quarterly, and a Mediterranean exhibition poster — confident, atmospheric, and deeply restrained.\n\nBiennale Yellow is a literary-editorial presentation system modeled on the visual language of European art biennale catalogues, slow exhibition posters, and quarterly literary publications. There are no cards, no buttons, no shadows, no rounded corners. The structural vocabulary is just three things: paper, ink, and yellow.\n\n## Preview Ingredients\n\n- Palette: paper #E9E5DB; paper-deep #DCD6C4; sun #F1EE2E; sun-soft #F8F39B; haze #F0DA7C; ink #1B2566; ember #E26B4A\n- Typography: See full design doc after selection.\n- Signature move: Warm parchment ground ({colors.paper}) on every surface; never white, never gray.\n- Signature move: Single ink color ({colors.ink}) for all text and all rules — no secondary text colors.\n- Signature move: Solar yellow ({colors.sun}) deployed three ways: as a flooded panel, as a soft radial bloom, as a translucent geometric tile underprint.\n- Signature move: Instrument Serif handles every display moment at scales from 40px to 720px+.\n- Signature move: Archivo Bold uppercase + 0.16–0.32em tracking is the universal label voice.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/design.md (Tokens: ~11507 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: BlockFrame\ndescription: \"A maximalist neobrutalist presentation system built on 4px solid black borders, 8px hard offset shadows, and a high-key candy palette of five saturated pastels plus cream and off-white. Display type runs Inter at weight 800-900 in tight uppercase; secondary chrome uses Space Grotesk as a quasi-monospace label face. Tilted decorative shapes (rotated stars, rectangles, badges) puncture the borders and break the grid intentionally. Pastels are paired loudly: pink + blue + green + yellow + cream cycle through every region with deliberate juxtaposition. The aesthetic borrows from zine layout, 1990s-revival sticker books, and contemporary toy packaging — bold, joyful, slightly chaotic, never timid.\"\n\ncolors:\n  black: \"#000000\"\n  white: \"#FFFFFF\"\n  offwhite: \"#FFFDF5\"\n  pink: \"#FE90E8\"\n  blue: \"#C0F7FE\"\n  green: \"#99E885\"\n  yellow: \"#F7CB46\"\n  cream: \"#FFDC8B\"\n\nborders:\n  primary: \"4px solid {colors.black}\"\n  thin: \"3px solid {colors.black}\"\n\nshadows:\n  default: \"8px 8px 0px {colors.black}\"\n  small: \"4px 4px 0px {colors.black}\"\n  hover: \"6px 6px 0px {colors.black}\"\n  close-yellow: \"12px 12px 0px {colors.yellow}\"\n  close-white: \"6px 6px 0px {colors.white}\"\n\ntypography:\n  heading-xl:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(48px, 6vw, 96px)\"\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n    textTransform: uppercase\n  heading-lg:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 800\n    fontSize: \"clamp(32px, 4vw, 64px)\"\n    lineHeight: 1\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  heading-md:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(24px, 2.5vw, 40px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.01em\n  close-title:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(40px, 5vw, 80px)\"\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n    textTransform: uppercase\n  quote-text:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(28px, 3.5vw, 52px)\"\n    lineHeight: 1.15\n    letterSpacing: -0.02em\n    textTransform: uppercase\n  stat-number:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: \"clamp(36px, 4vw, 64px)\"\n    lineHeight: 1\n  card-title:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: 22px\n    lineHeight: 1.2\n    textTransform: uppercase\n  step-num:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: 48px\n    lineHeight: 1\n  body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(16px, 1.2vw, 20px)\"\n    lineHeight: 1.6\n  body-card:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: 15px\n    lineHeight: 1.6\n  list-body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: 16px\n    lineHeight: 1.5\n  label:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 13px\n    lineHeight: 1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n  mono-tag:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 14px\n    lineHeight: 1\n    letterSpacing: 0.05em\n    textTransform: uppercase\n  mono-meta:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 500\n    fontSize: 15px\n    letterSpacing: 0.02em\n  subtitle-mono:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 500\n    fontSize: 18px\n    lineHeight: 1.5\n  counter:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 700\n    fontSize: 14px\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  legend-item:\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 600\n    fontSize: 13px\n\nspacing:\n  slide-pad: 60px\n  card-pad-lg: 60px\n  card-pad-md: 36px\n  card-pad-sm: 28px\n  card-pad-xs: 22px\n  gap-lg: 48px\n  gap-md: 32px\n  gap-sm: 24px\n  gap-xs: 16px\n  pad-bottom-clearance: 110px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  default-background: \"{colors.offwhite}\"\n\ncomponents:\n  card-elevated:\n    border: \"4px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.default}\"\n    description: \"Primary elevated card. 4px ink border + 8px ink offset shadow. Background is white by default; on darker surfaces background may shift to offwhite or to a colored fill.\"\n  card-flat:\n    border: \"4px solid {colors.black}\"\n    background: \"{colors.white}\"\n    description: \"Bordered card without elevation shadow. Used for secondary content cells inside multi-card grids where the shadow would compound.\"\n  card-small:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Compact card with thinner border + smaller offset shadow. Used for intro-cards, stat-cards, team-cards, and timeline-steps.\"\n  label-pill:\n    border: \"3px solid {colors.black}\"\n    padding: \"6px 16px\"\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontSize: 13px\n    fontWeight: 600\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Universal section eyebrow. White base by default; pink, blue, green, yellow, cream variants swap background. Always sits on a 3px black border with a 4px hard offset shadow.\"\n  button-primary:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    color: \"{colors.black}\"\n    padding: \"14px 32px\"\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 700\n    fontSize: 16px\n    boxShadow: \"{shadows.small}\"\n    description: \"Primary CTA. Yellow fill with black text, 3px black border, 4px offset shadow. Hover lifts the button -2/-2 and grows shadow to 6px.\"\n  corner-bracket:\n    width: 24px\n    height: 24px\n    border: \"3px solid {colors.black}\"\n    description: \"Two L-shaped brackets at opposite corners of a card or frame (tl + br + tr + bl pattern available). Sits inside the card edge as a decorative frame-within-frame.\"\n  icon-square:\n    width: 64px\n    height: 64px\n    border: \"3px solid {colors.black}\"\n    description: \"Solid pastel square (pink/blue/green) holding a single uppercase letter glyph at weight 700 / 28px. Used as feature-card icons.\"\n  feature-deco:\n    width: 48px\n    height: 48px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    position: \"absolute top -12px right 24px\"\n    description: \"Yellow square notch that protrudes from the top edge of a feature card, breaking the card's top border line.\"\n  stat-deco-dot:\n    width: 12px\n    height: 12px\n    borderRadius: 50%\n    border: \"2px solid {colors.black}\"\n    description: \"Small black-bordered colored circle pinned to the top-right of a stat card. The only round shape used on cards. Fill cycles through the pastel palette.\"\n  avatar-square:\n    width: 72px\n    height: 72px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.pink}\"\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 900\n    fontSize: 28px\n    textTransform: uppercase\n    description: \"Square avatar with two-letter initials, used in team grids. Fill cycles through the pastel palette.\"\n  list-number:\n    width: 36px\n    height: 36px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.yellow}\"\n    fontFamily: \"'Space Grotesk', monospace\"\n    fontWeight: 700\n    fontSize: 14px\n    description: \"Square numerical bullet pinned to the left of each list item. Black border, yellow fill, mono numeral.\"\n  star-burst:\n    clipPath: \"polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)\"\n    border: \"3px solid\"\n    background: \"{colors.pink}\"\n    description: \"10-point star clipped via CSS clip-path with a 3px border. Decorative attention-grabber pinned to corners of close-frames and feature cards.\"\n  stripe-block:\n    background: \"repeating-linear-gradient(45deg, {colors.black}, {colors.black} 4px, {colors.green} 4px, {colors.green} 12px)\"\n    border: \"3px solid {colors.black}\"\n    description: \"Black-and-color diagonal stripe panel used as decorative attention block on poster-class surfaces.\"\n  bg-dot-grid:\n    backgroundImage: \"radial-gradient(circle, {colors.black} 1.2px, transparent 1.2px)\"\n    backgroundSize: \"24px 24px\"\n    description: \"Faint dot-grid background pattern used as an overlay on light surfaces or as decoration in corners of cards.\"\n  tilt-card:\n    transform: \"rotate(±2deg) or rotate(±8deg)\"\n    description: \"Card with intentional tilt. Stat cards alternate -2deg / +2deg; decorative rectangles tilt up to ±12deg. The tilt is the system's playful structural signature.\"\n  nav-btn:\n    width: 48px\n    height: 48px\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Square nav arrow button. Hover translates -2/-2 and grows shadow; active translates 2/2 and shrinks shadow.\"\n  slide-counter:\n    border: \"3px solid {colors.black}\"\n    background: \"{colors.white}\"\n    padding: \"10px 18px\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Persistent slide counter pill at bottom-left. Space Grotesk uppercase NN / NN format.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBlockFrame is a **maximalist neobrutalist presentation system** built on five structural laws: every region has a 4px black border, every elevated element has an 8px hard offset shadow, every corner is square, every accent color is a saturated pastel, and every layout is allowed to be a little bit crooked. The system's joy comes from the deliberate collision of these laws — bordered cards meet bordered cards, shadows stack against shadows, tilted decorations puncture the grid intentionally.\n\nThe type system pivots on **Inter** (weights 400-900) for display, body, and stats — set at weight 800-900 in tight uppercase with negative letter-spacing for headlines, weight 500 sentence case for body, and weight 700 uppercase for card titles. **Space Grotesk** (weights 400-700) is the secondary face, used as a quasi-monospace label voice for eyebrows, slide counters, stat labels, mono tags, and any chrome that should read as \"system\" rather than \"editorial\". The face combination is deliberately ordinary — both are widely-available open sans-serifs — but the treatment (heavy uppercase Inter + wide-tracked Space Grotesk) gives them a distinct neobrutalist register.\n\nThe palette is built around **five saturated pastels** (pink `#FE90E8`, blue `#C0F7FE`, green `#99E885`, yellow `#F7CB46`, cream `#FFDC8B`) plus **pure black** (`#000000`) for borders and text, **white** (`#FFFFFF`) for clean card fills, and **off-white** (`#FFFDF5`) for warm canvas. The pastels are not subtle accents — they are full-bleed surface fills. A typical deck cycles every slide through a different colored ground (offwhite cover → blue intro → offwhite content → green chart → pink quote → yellow split → offwhite timeline → blue stats → cream team → black close). This color cycling is the system's primary rhythm.\n\nDepth is **hard offset shadow at 4px and 8px**, always solid black, always zero blur, always positioned bottom-right. Larger elements get 8px, smaller chrome gets 4px. The close-frame uses a single 12px offset in **yellow** (the only colored shadow in the system) as the system's loudest depth statement, and inverted close-frames pair 6px **white** shadows on black surfaces. Borders are 4px solid black on primary cards, 3px solid black on secondary chrome. Border weight and shadow size are tightly coupled — a 4px border carries an 8px shadow; a 3px border carries a 4px shadow.\n\n**Density philosophy: comfortably dense.** This system reads as authoritative when packed and timid when sparse. A typical surface holds: a label-pill eyebrow + a large headline + a multi-card grid (3-6 cards) + at least one decorative element (tilted rectangle, star burst, stripe block, corner bracket, deco dots). Empty space within a region reads as \"broken\" — every card should be filled, every grid should be complete. The system's joy depends on the visual chatter of many bordered objects existing in the same frame.\n\n**Key Characteristics:**\n- 4px solid black borders on primary cards, 3px on secondary chrome — never thinner.\n- 8px hard offset shadows on primary cards, 4px on secondary chrome — solid black, zero blur.\n- Five-pastel palette (pink, blue, green, yellow, cream) plus black, white, off-white — cycled across surfaces.\n- Inter weight 800-900 uppercase with negative tracking is the display voice; Space Grotesk weight 600 uppercase with 0.08em tracking is the label voice.\n- Square corners everywhere except a single circular accent dot on stat cards.\n- Tilted decorative elements (rotated rectangles, stars, badges) puncture the grid intentionally.\n- Label pills (`{components.label-pill}`) carry a 3px border, 4px offset shadow, and a pastel fill variant — the universal section eyebrow.\n- Colored fills are bold and saturated; pastels are used as panel grounds, not as light accents.\n- Yellow is the default CTA color; black is the default close-surface color.\n- Star bursts, stripe blocks, and dot grids are reusable decorative attention units.\n\n## Colors\n\n### Palette\n\n- **Black** (`{colors.black}` — `#000000`): The structural color. Every border, every primary text moment, every shadow. Pure black, no warm bias. The system's contrast anchor.\n- **White** (`{colors.white}` — `#FFFFFF`): The default card fill. Used on every primary card and as the background of label-pills and nav-buttons. Pure white, no warmth.\n- **Off-white** (`{colors.offwhite}` — `#FFFDF5`): The warm canvas tone. The default body/slide background when no pastel ground is in play. Subtly warmer than pure white so that white cards sitting on top still feel layered.\n- **Pink** (`{colors.pink}` — `#FE90E8`): A high-key candy magenta. Used as a full-surface ground, as label-pill fill, as icon-square fill, as star-burst fill, and as one of the pastel chart series. The most saturated of the five pastels.\n- **Blue** (`{colors.blue}` — `#C0F7FE`): A pale cyan-ice blue. Used as a full-surface ground (the \"intro\" and \"stats\" feel), as label-pill fill, as icon-square fill, and as a chart series.\n- **Green** (`{colors.green}` — `#99E885`): A bright spring green. Used as a full-surface ground, as label-pill fill, as icon-square fill, in the stripe-block diagonal pattern, and as a chart series.\n- **Yellow** (`{colors.yellow}` — `#F7CB46`): The CTA color. Used as the default button fill, as the close-frame shadow color, as list-number squares, as the feature-deco notch, and as label-pill fill. The brightest, most attention-pulling pastel.\n- **Cream** (`{colors.cream}` — `#FFDC8B`): A warm yellow-cream. Softer than yellow, more saturated than offwhite. Used as a full-surface ground (the \"team\" or \"cover\" feel), as label-pill fill, and as a tertiary chart accent.\n\n### Defaults\n\n- **Default surface background**: `{colors.offwhite}` for content-heavy surfaces; cycle through `{colors.cream}`, `{colors.blue}`, `{colors.pink}`, `{colors.green}`, `{colors.yellow}` for surfaces that need a stronger ground. The cycle is the rhythm; staying on one ground for many slides flattens the system.\n- **Default headline color**: `{colors.black}` on all light/pastel surfaces; `{colors.white}` on the black close-surface.\n- **Default body text color**: `{colors.black}` on all light/pastel surfaces; `{colors.white}` or `{colors.cream}` on dark surfaces.\n- **Default border color**: `{colors.black}` — always. There are no colored borders anywhere except the 4px white border on the inverted close-frame.\n- **Default card fill**: `{colors.white}`. Use a pastel fill only when the card is part of a multi-card row where each card needs distinct color identity (e.g., the timeline-step row where each step is a different pastel).\n- **Default button fill**: `{colors.yellow}`. Other pastels work, but yellow is the system's primary \"click here\" signal.\n- **Default label-pill base**: `{colors.white}`; pastel variants (`{colors.pink}`, `{colors.blue}`, `{colors.green}`, `{colors.yellow}`, `{colors.cream}`) signal section type or decorate the eyebrow.\n- **Default decorative accent on stat cards**: a 12px circle (`{components.stat-deco-dot}`) in a pastel fill — cycling pink, blue, green, yellow across cards.\n- **Default chart palette order**: pink → blue → green (three-series), with yellow and cream available for additional series.\n\nThe pastels are interchangeable in role — none of them carry fixed semantic meaning (green isn't \"success\", red doesn't exist in the palette at all). Pair them by visual juxtaposition: pink + blue + green is the most common trio; cream + yellow is the warm pair; blue + pink is the cool-warm contrast.\n\n## Typography\n\n### Font Family Stack\nThe system runs two faces.\n\n**Inter** (weights 400-900) is the display, body, headline, and stat face. Used at weight 900 for hero/close titles and quote text, weight 800 for primary headlines, weight 700 for medium headlines and card titles, weight 500 for body. Display weights are always uppercase with negative letter-spacing (-0.02 to -0.03em); body weights are always sentence case with default tracking. The contrast between heavy uppercase display and weight-500 sentence body is the system's typographic rhythm.\n\n**Space Grotesk** (weights 400-700) is the label and chrome face. Used at weight 600 for label-pills (13px, 0.08em tracking, uppercase) and at weight 500 for monospace meta callouts. The face is technically not monospace, but its slightly geometric character + the wide tracking treatment makes it read as the system's \"code\" voice.\n\nDon't introduce a third face. The Inter + Space Grotesk pairing is the entire typographic palette.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.heading-xl}` | 48–96px clamp | Inter | 900 | Hero or cover-scale headline |\n| `{typography.heading-lg}` | 32–64px clamp | Inter | 800 | Primary section headline |\n| `{typography.heading-md}` | 24–40px clamp | Inter | 700 | Region headline, chart title |\n| `{typography.close-title}` | 40–80px clamp | Inter | 900 | Closing-statement title (inverted surface) |\n| `{typography.quote-text}` | 28–52px clamp | Inter | 900 | Quote body — always uppercase |\n| `{typography.stat-number}` | 36–64px clamp | Inter | 900 | Stat numeral |\n| `{typography.card-title}` | 22px | Inter | 700 | Feature card title — uppercase |\n| `{typography.step-num}` | 48px | Inter | 900 | Numeral inside a timeline-step (opacity 0.6) |\n| `{typography.body}` | 16–20px clamp | Inter | 500 | Standard body paragraph |\n| `{typography.body-card}` | 15px | Inter | 500 | Body inside compact cards |\n| `{typography.list-body}` | 16px | Inter | 500 | Numbered list body |\n| `{typography.label}` | 13px | Space Grotesk | 600 | Text inside label-pill |\n| `{typography.mono-tag}` | 14px | Space Grotesk | 600 | Mono tag/badge, slide-counter |\n| `{typography.mono-meta}` | 15px | Space Grotesk | 500 | Inline mono metadata |\n| `{typography.subtitle-mono}` | 18px | Space Grotesk | 500 | Hero subtitle / close subtitle |\n| `{typography.counter}` | 14px | Space Grotesk | 700 | Persistent slide counter (NN / NN) |\n| `{typography.legend-item}` | 13px | Space Grotesk | 600 | Chart legend label |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.heading-xl}` (48–96px). Always uppercase, always weight 900, always with -0.03em tracking.\n- **Default size for a primary section headline**: `{typography.heading-lg}` (32–64px). Uppercase, weight 800, -0.02em.\n- **Default size for a region or chart title**: `{typography.heading-md}` (24–40px). The only Inter heading not in uppercase by default — though uppercase is permitted.\n- **Default size for a stat numeral**: `{typography.stat-number}` (36–64px). Weight 900, line-height 1.\n- **Default size for body paragraph**: `{typography.body}` (16–20px clamp). Weight 500, sentence case, line-height 1.6.\n- **Default size for an eyebrow label**: `{typography.label}` (13px) inside the `{components.label-pill}`.\n- **Default weight for any Inter display**: 800 or 900. Inter display at weight 700 reads as \"almost there\"; only use 700 for `{typography.heading-md}` or card titles.\n- **Default weight for any Inter body**: 500. Body at 400 reads as too light, body at 700 reads as oversized.\n- **Default tracking for any Space Grotesk label/chrome**: 0.05-0.10em. Wide tracking is the face's \"chrome\" signal.\n- **Default tracking for any Inter display**: -0.01em (heading-md) to -0.03em (heading-xl). Display without negative tracking reads as untreated.\n\nWhen unsure which heading token to reach for, default to `{typography.heading-lg}` (32–64px) for the slide's primary text moment. `{typography.heading-md}` is for region or chart titles within a slide.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Inter display element (heading-xl, heading-lg, quote-text, close-title) is uppercase.** Sentence-case Inter display at weights 800+ does not exist in this system. The uppercase + heavy-weight + negative-tracking combination is the visual identity.\n- **Every Inter display element uses negative letter-spacing** (-0.01 to -0.03em). Display without negative tracking reads as default Inter, which is a fundamentally different aesthetic.\n- **Every label-pill carries the 3px border + 4px shadow + uppercase Space Grotesk text** combination. A label without all three properties is not a label-pill — it's a stray text element.\n- **Every card-title is uppercase Inter weight 700.** Card titles in sentence case break the brutalist rhythm.\n- **Every Space Grotesk label/chrome/counter is uppercase with 0.05-0.1em tracking.** Sentence-case Space Grotesk does not exist in this system except for body-adjacent metadata (mono-meta, mono inline).\n- **Every stat numeral is Inter weight 900 with line-height 1.** Stat numerals are display moments, not data chrome.\n- **Every Inter body block is sentence case with line-height 1.6 (or 1.5 for compact card body).** Body in uppercase or with tight line-height reads as broken.\n- **Step numbers inside timeline-step cards are 48px weight 900 at opacity 0.6.** The reduced opacity is mandatory — full-opacity step numbers overwhelm the step title.\n\n### Typography Principles\n\nThe voice contrast is **bold uppercase display ↔ sentence body ↔ wide-tracked label**. Italic is never used. Underline is never used. The only emphasis mechanism is weight contrast within the Inter ladder and the uppercase/sentence-case switch.\n\nDisplay elements should be allowed to **dominate the canvas**. The system is built for poster-scale typography; reading a heading-xl at small size collapses its character. Lean into the upper bound of every clamp.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and toggled via `display: none` / `display: flex` on the `.active` class. Default slide padding is 60px on all sides. Slides that contain bottom-anchored grids (timeline, team grid, chart with stat column) carry an additional `padding-bottom: 110px` to clear the fixed slide-counter and nav-controls chrome.\n\nThe default slide flex direction is column with `justify-content: center`. For two-column splits (intro slide, split image+text), flex direction switches to row.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.slide-pad}` | 60px | Default slide padding from edge to content |\n| `{spacing.card-pad-lg}` | 60px | Hero-frame and quote-frame internal padding |\n| `{spacing.card-pad-md}` | 36px | Feature-card internal padding |\n| `{spacing.card-pad-sm}` | 28px | Intro-card internal padding |\n| `{spacing.card-pad-xs}` | 22px | Team-card and small-cell padding |\n| `{spacing.gap-lg}` | 48px | Gap between major sections (header-to-grid) |\n| `{spacing.gap-md}` | 32px | Gap between feature cards |\n| `{spacing.gap-sm}` | 24px | Gap between intro cards, stat cards |\n| `{spacing.gap-xs}` | 16px | Gap inside list items, intra-card content |\n| `{spacing.pad-bottom-clearance}` | 110px | Bottom padding reserve to clear fixed nav chrome |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Slide counter** at bottom-left — 3px black border, white fill, 4px shadow, Space Grotesk 14px weight 700 uppercase, NN / NN format.\n- **Nav controls** at bottom-right — two 48px square nav buttons with 3px borders, white fills, 4px shadows.\n- The slide-counter and nav-controls are not part of the slide composition — they live outside `.slides-container` and overlap the bottom edge.\n\n### Card-on-Card Structure\nThe system's primary layout pattern is **cards on grounds on grounds**. A typical slide places a colored-ground surface, on which sits a white card with 4px black border + 8px shadow, which may contain smaller cards or icon-squares. Each level of nesting carries its own border weight: 4px for the outer card, 3px for inner chrome. This nested-bordered structure is what gives the system its dense, packed feel.\n\n### Decorative Disruption\nTilted decorative elements (rotated rectangles, stars, badges, dot grids) are placed absolutely on slide and card surfaces to puncture the grid intentionally. These are not \"background decoration\" — they are part of the composition. A surface without any decorative element reads as too clean.\n\n## Depth and Elevation\n\n### Hard Offset Shadow Stack\nThe system uses three primary shadow values:\n- **`{shadows.default}`** = `8px 8px 0px {colors.black}` — primary card shadow. Used on hero-frame, feature-card, quote-frame, chart-frame, and any elevated card.\n- **`{shadows.small}`** = `4px 4px 0px {colors.black}` — secondary chrome shadow. Used on intro-card, stat-card, team-card, timeline-step, label-pill, button-primary, nav-btn, slide-counter.\n- **`{shadows.hover}`** = `6px 6px 0px {colors.black}` — hover state for buttons and nav. Triggered with a -2/-2 transform.\n\nAll shadows are solid black, zero blur, fixed offset bottom-right. The shadow + transform pairing on hover creates a \"lifting off the page\" interaction signature — the element translates -2/-2 while the shadow grows to 6/6, simulating a peel-up.\n\n### Inverted Shadows\nOn the dark close-surface, shadows invert their color but keep the offset logic:\n- **`{shadows.close-yellow}`** = `12px 12px 0px {colors.yellow}` — the loudest depth statement in the system. Used on close-frame to make the inverted surface read as still \"elevated\" despite its dark ground.\n- **`{shadows.close-white}`** = `6px 6px 0px {colors.white}` — used on the close-btn to maintain elevation on the black ground.\n\nThese colored shadows are the only exceptions to the \"shadows are always black\" rule, and they appear only on the dark surface.\n\n### Border-Based Depth\nMost of the system's apparent layering comes from the 4px or 3px ink borders, not from shadow. A card with a border but no shadow still reads as \"an object on a surface\" — the shadow is what makes it read as \"lifted\". Use shadow for elevated cards; use border-only for secondary cards inside a multi-card grid where stacked shadows would compound into noise.\n\n### Tilted Elements as Depth\nThe system's playful depth signature is **tilt**. Stat cards alternate -2deg / +2deg rotation. Decorative pink rectangles tilt up to ±12deg. The yellow button tab on the hero frame tilts -3deg. These tilts break the grid alignment intentionally and create perceived dimensionality without using actual perspective or shadow.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px** on everything structural — cards, label-pills, buttons, icon-squares, list-numbers, avatars, badges. Square corners are non-negotiable.\n- **50% (circle)** used only for the stat-deco dot (12×12 circular accent pinned to stat cards). This is the only round shape in the system.\n\nThe square-corner discipline is the system's structural identity. Adding rounded corners to any card or chip immediately reads as a different aesthetic.\n\n### Border Weights\n- **4px solid `{colors.black}`** — used on primary cards (hero-frame, feature-card, quote-frame, chart-frame, team-card border, timeline-step border, stat-card border) and the close-frame inverse (4px solid white on black ground).\n- **3px solid `{colors.black}`** — used on secondary chrome (label-pill, button, intro-card, icon-square, list-number, avatar, corner-bracket, nav-btn, slide-counter, stripe-block, star-burst). The 3px weight signals \"secondary structural\" vs. the 4px \"primary structural\".\n- **2px solid `{colors.black}`** — used only on legend swatches (16×16 chart swatches) and stat-deco dots. The thinnest border weight, reserved for atomic chrome.\n- **4px solid `{colors.white}`** — used only on the inverted close-frame, the visual-box, and its ::after offset frame on the dark split-visual surface.\n\nThe border weight ladder (2 / 3 / 4) is fixed. No 1px borders, no 5px+ borders.\n\n### Decorative Element Types\n\n**Label-pill** — Square bordered pill (3px black border, 4px shadow), pastel or white fill, Space Grotesk 13px weight 600 uppercase text with 0.08em tracking. The universal section eyebrow.\n\n**Corner-bracket** — Two L-shaped brackets (or four for full enclosure) at the corners of a card, 3px black border. Creates a frame-within-frame decorative motif.\n\n**Star-burst** — 10-point star clipped via CSS clip-path with a 3px border, pastel fill. Decorative attention-grabber pinned to corners of close-frames and feature cards.\n\n**Stripe-block** — Diagonal 4px-on, 8px-off stripe pattern in black + a pastel color, framed with a 3px black border. Decorative attention block used on poster-class surfaces.\n\n**Dot-grid** — 1.2px radial-gradient dot pattern at 24×24 spacing. Used as a faint decorative overlay in corners of slides, at 30-40% opacity.\n\n**Feature-deco notch** — 48×48 yellow square with 3px black border, positioned absolutely to protrude from the top edge of a feature card. The notch breaks the card's top border, suggesting it's been \"stapled on\".\n\n**Icon-square** — 64×64 pastel square with 3px black border holding a single uppercase letter glyph at Inter weight 700 / 28px. Used as feature-card icons.\n\n**Stat-deco dot** — 12×12 circle with 2px black border, pastel fill, pinned to the top-right of a stat card. The system's only round shape.\n\n**List-number** — 36×36 yellow square with 3px black border holding a Space Grotesk 14px weight 700 numeral. Used as bullets on numbered lists.\n\n**Avatar-square** — 72×72 pastel square with 3px black border holding two uppercase initials at Inter weight 900 / 28px. Used in team grids; fills cycle through pastels.\n\n**Step-connector** — A 28×4 horizontal black bar pinned to the right edge of a timeline-step card, mid-height. Visually links adjacent steps in a horizontal flow.\n\n**Tilted decoration** — Any rectangle, badge, or star with a rotate(±2deg to ±12deg) transform. The tilt is intentional disruption of the grid; without it, the system reads as too uniform.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply 4px solid black borders to primary cards (`{components.card-elevated}`, hero-frame, quote-frame) and 3px to secondary chrome. The border weight ladder is the system's structural backbone.\n- Pair every 4px border with an 8px offset shadow, and every 3px border with a 4px offset shadow. The border/shadow coupling is non-negotiable.\n- Cycle slide backgrounds through the pastel palette — offwhite, cream, blue, pink, green, yellow — to keep the deck visually rhythmic. Staying on one color for many slides flattens the system.\n- Set every Inter display element in uppercase with negative letter-spacing (-0.01 to -0.03em) and weight 800+. The combination is the typographic identity.\n- Use the `{components.label-pill}` (3px border, 4px shadow, pastel fill, Space Grotesk uppercase 0.08em) as the universal section eyebrow on every region.\n- Apply tilt to decorative rectangles, stat cards, stars, and badges (±2deg to ±12deg). The intentional misalignment is the system's playful signature.\n- Use `{colors.yellow}` as the default button color. Yellow with a 3px black border and 4px black shadow is the system's \"click here\" voice.\n- Render shadows as solid black with zero blur, always offset bottom-right. The hard-edge shadow is the depth language.\n- Add a decorative element (star-burst, stripe-block, dot-grid, corner-bracket, tilted rectangle) to every surface. The visual chatter is part of the system's energy.\n- Use pure black `{colors.black}` for the closing surface, with white text and a 12px yellow offset shadow on the close-frame. The inverted dark surface is the system's loudest contrast moment.\n\n### Don't\n\n- Don't round any corner on cards, buttons, label-pills, icon-squares, or avatars. Border-radius is forbidden except on the stat-deco dot (12px circle).\n- Don't blur any shadow. Every shadow is hard-edged at zero blur. `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` does not exist in this system.\n- Don't use colored borders. Borders are always pure black, except for the inverted 4px white border on the close-frame.\n- Don't use Inter display weights in sentence case. Uppercase is mandatory on heading-xl, heading-lg, quote-text, close-title, and card-title.\n- Don't set Inter display without negative letter-spacing. Default-tracked Inter at heavy weights reads as a different system.\n- Don't introduce a sixth pastel color. The palette is locked at pink, blue, green, yellow, cream. Adding purple, orange, or red breaks the curated candy palette.\n- Don't omit the label-pill on a region. Going straight from background to headline without an eyebrow tag breaks the system's editorial rhythm.\n- Don't render label-pills as plain text. The 3px border + 4px shadow + pastel fill combination is what defines the pill.\n- Don't use blurred or colored body text. Body is solid black on light surfaces, solid white or cream on dark surfaces.\n- Don't keep every card perfectly aligned. The tilt on stat cards, decorations, and badges is what gives the system its hand-made energy.\n\n## Responsive Behavior\n\nBlockFrame is designed as a **1920×1080 presentation system** (effective 100vw × 100vh). Sizing uses CSS `clamp()` for type and fixed px for borders, shadows, and structural padding. The system has three component-level breakpoints for narrow viewports.\n\n### Scaling Behavior\n- Heading-xl scales 48px → 96px on viewport width.\n- Heading-lg scales 32px → 64px.\n- Body scales 16px → 20px.\n- Borders (3px, 4px), shadows (4px, 8px), and structural padding (60px slide-pad) are fixed and do not scale.\n\n### Component Breakpoints\n- `max-width: 1024px` — slide padding shrinks 60px → 40px, two-column splits stack vertically, feature card row stacks vertically, timeline track stacks vertically with step-connectors hidden, stats grid collapses to 2 columns, team grid collapses to 2 columns. Split visual loses left border and gains a top border.\n- `max-width: 640px` — stats grid collapses to 1 column, team grid collapses to 1 column, hero-frame padding shrinks to 32px, quote-frame padding shrinks to 32px.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are instant (`display: none` ↔ `display: flex` on the `.active` class), with no crossfade.\n\n### Print Behavior\nThe system has no `@media print` rule. Slides are absolute-positioned and only one is visible at a time — printing produces only the active slide. For static export, screenshots of each slide preserve all borders, shadows, and decorations (all are CSS, not image assets).\n\n### Interactive States\n- Buttons and nav-buttons translate -2/-2 on hover and shadow grows to 6px (`{shadows.hover}`); on active, translate 2/2 and shadow shrinks to 2px. The hover-press behavior is unusual for a presentation system; it reflects BlockFrame's hybrid identity as both deck and interactive product mockup.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / quote / close title / stat numerals | Inter 800–900 (uppercase, negative tracking) | 思源黑体 Noto Sans SC 900 (sentence case, 0 tracking) |\n| Card title | Inter 700 (uppercase) | 思源黑体 Noto Sans SC 700 (no transform) |\n| Body / list body | Inter 500 | 思源黑体 Noto Sans SC 400 |\n| Label / mono tag / counter / legend | Space Grotesk 600–700 (uppercase, 0.05–0.1em tracking) | 思源黑体 Noto Sans SC 600 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family with built-in Latin glyph coverage. Set every text element to `font-family: 'Noto Sans SC', sans-serif`. 思源黑体 ships Latin glyphs that pair cleanly with its Chinese characters, so mixed sentences render in one consistent face. The Inter / Space Grotesk distinction in the Latin original is preserved through weight contrast: weight 900 carries the brutalist display role, weight 600 carries the label role, weight 400–500 carries body. Visual hierarchy survives even though the face contrast is gone.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700;900&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.15–1.25 (up from 0.95–1). The Latin display compresses to 0.95 line-height; CJK at that compression collides vertically.\n- **Letter-spacing**: set to 0 on every CJK run. The template's negative display tracking (−0.02 to −0.03em on Inter) overlaps CJK strokes and reads as broken; the positive 0.05–0.1em tracking on Space Grotesk labels reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Inter display heading (heading-xl, heading-lg, quote-text, close-title, card-title) uses `text-transform: uppercase` in the Latin original; remove it for CJK runs. Every label-pill, counter, and chrome element also uses uppercase; remove that too.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `BlockFrame 设计系统` not `BlockFrame设计系统`.\n- **One font per sentence**: 思源黑体 covers both CJK and Latin glyphs in a unified style — let it handle mixed sentences. Don't let the browser font-switch to Inter or Space Grotesk mid-word.\n\n### Aesthetic Notes for This System\n\nThe Latin original's typographic identity rests entirely on the **heavy uppercase + negative tracking** combination on Inter display. CJK has no case, so this signal disappears. The system survives because its identity is **80% structural, 20% typographic**: the 4px black borders, 8px hard offset shadows, five-pastel palette, tilted decorations, label-pills, star bursts, stripe blocks, and dot grids do the brutalist work. Set 思源黑体 900 in sentence case at the same large sizes; the chunky black-on-pastel + hard-shadow framing reads as brutalist regardless of whether the type is in caps.\n\nThe label-pill (Space Grotesk 600 uppercase, 0.08em tracking, 3px border + 4px shadow, pastel fill) loses the uppercase + tracked-mono character. Render Chinese label-pills with 思源黑体 weight 600 at 0 tracking and a slightly tighter fontSize (11–12px instead of 13px) — the bordered pill shape and shadow do the chrome-recognition work. Keep the pastel fill rotation (pink / blue / green / yellow / cream) intact; it's the system's most recognizable signal after the borders themselves.\n\n### Known CJK Gap\n\n- **No CDN Chinese monospace face for the \"system readout\" voice.** Space Grotesk's quasi-mono role (label-pills, counters, mono-tags, slide counter NN / NN) depends on its slightly geometric character plus the wide-tracked uppercase treatment. Neither survives the CJK translation. The slide counter and chart legend can keep Latin digits + Latin labels intact; for purely Chinese chrome, lean on the pill border + shadow + pastel fill to signal \"label\" rather than the typographic treatment.\n- **The \"uppercase brutalist\" identity weakens.** The system's most distinctive typographic decision is \"heavy uppercase Inter with negative tracking\" — and that signal is irreplaceable in CJK. Compensate by leaning harder on the structural elements: more decorative disruption (extra tilted rectangles, star bursts, stripe blocks), more saturated pastel-ground rotation across slides, and slightly tighter shadow offsets to compensate for the calmer typographic baseline.\n\n## Iteration Guide\n\n1. Any new card uses a 4px or 3px solid black border + the matched-weight offset shadow (8px or 4px). Never use a card without both.\n2. Any new region begins with a `{components.label-pill}` eyebrow in pastel fill, then the headline in uppercase Inter weight 800+, then content. The label-headline-content sequence is the system's editorial rhythm.\n3. Any new headline uses uppercase Inter with negative letter-spacing and weight 800-900. Reach for `{typography.heading-lg}` (32-64px) for primary moments and `{typography.heading-xl}` (48-96px) for cover/hero scale.\n4. Any new accent or surface fill picks from the 5-pastel palette (pink, blue, green, yellow, cream) — never introduce a sixth pastel.\n5. Any new CTA uses the `{components.button-primary}` pattern: 3px black border, yellow fill, 4px black shadow, Inter weight 700 / 16px. Hover lifts -2/-2 with shadow growing to 6px.\n6. Any new chart cycles through pink → blue → green for series order, with yellow/cream available for additional series. Legend swatches use 2px black border.\n7. Any new stat or metric uses Inter weight 900 + line-height 1 for the numeral, paired with Space Grotesk uppercase label below. Decorate the card with a `{components.stat-deco-dot}` in a pastel color.\n8. Any new slide adds at least one decorative disruption (tilted rectangle, star-burst, stripe-block, dot-grid corner, corner-bracket frame) — empty surfaces feel timid.\n9. Any new closing-style surface uses pure `{colors.black}` ground with white text, a 4px white-bordered close-frame, and a 12px yellow offset shadow. This is the only colored shadow allowed.\n10. If a surface feels too noisy, drop a decoration — don't drop a border or shadow. The borders and shadows are structural; the decorations are tunable.\n\n## Known Gaps\n\n- **Inter and Space Grotesk are loaded from Google Fonts** via inline `@import`. There are no system fallbacks beyond `sans-serif` and `monospace` — in environments where Google Fonts fail, the system collapses to system defaults and loses its identity.\n- **The system uses `@import` inside the `<style>` block** rather than a `<link>` preconnect. This is slower than the standard `<link>` approach and may delay first paint of typography.\n- **The chart is rendered as inline SVG with hardcoded coordinates** (`viewBox=\"0 0 800 360\"`, hardcoded `x/y/width/height` per `<rect>`). Adding new chart slides requires manual coordinate math; there is no data-binding layer.\n- **The hover/active state on buttons assumes a pointing device.** On touch devices the lift-and-press feedback only triggers on tap and may feel inconsistent.\n- **The tilt on stat cards is hardcoded with `:nth-child(odd)` -2deg and `:nth-child(even)` +2deg.** Re-ordering cards changes which tilts which direction — there's no per-card tilt control beyond ordering.\n- **The decorative star uses a CSS clip-path polygon with 10 points.** Browsers without clip-path support (very old IE/Edge) will render the star as a colored rectangle.\n- **The slide-counter and nav-controls overlap the slide content area at the bottom edge.** The 110px bottom padding on certain slides (slide-4, slide-9) reserves space, but other slides may have content that crowds the bottom-left counter pill.\n- **The black close-surface uses pure `#000000` ground with white text** — accessibility-wise this is high-contrast and fine, but the colored decorations on this surface (yellow shadow, white border) don't pass the WCAG color contrast checks at small sizes.\n- **The dot-grid background is a CSS radial-gradient.** At very large viewport sizes the dots may look too small to read as a grid; at very small sizes they may visually merge into solid noise.\n- **There is no transition between slides** other than the binary display toggle. Adding a fade or slide animation requires modifying the JS and adding transition CSS.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/block-frame/preview.md (Tokens: ~1004 | Category: anthropic-skill) -->\n# BlockFrame Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/block-frame/design.md`\n- Preview card: `bold-template-pack/templates/block-frame/preview.md`\n\n## Selection Metadata\n\n- Slug: `block-frame`\n- Tagline: Neobrutalist deck with pastel-neon color blocks and chunky black borders.\n- Mood: bold, playful, graphic, fresh\n- Tone: confident, graphic, pop, design-led\n- Formality: medium-low\n- Density: high\n- Scheme: light\n- Best for: Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns. Also a strong unexpected pick for tech, finance, or research when the speaker wants to land as confident and contemporary rather than buttoned-up.\n- Avoid for: Contexts that require quiet institutional restraint or traditional weight (regulated disclosures, formal legal briefs).\n\n## Visual Snapshot\n\nA maximalist neobrutalist presentation system built on 4px solid black borders, 8px hard offset shadows, and a high-key candy palette of five saturated pastels plus cream and off-white. Display type runs Inter at weight 800-900 in tight uppercase; secondary chrome uses Space Grotesk as a quasi-monospace label face. Tilted decorative shapes (rotated stars, rectangles, badges) puncture the borders and break the grid intentionally. Pastels are paired loudly: pink + blue + green + yellow + cream cycle through every region with deliberate juxtaposition. The aesthetic borrows from zine layout, 1990s-revival sticker books, and contemporary toy packaging — bold, joyful, slightly chaotic, never timid.\n\nBlockFrame is a maximalist neobrutalist presentation system built on five structural laws: every region has a 4px black border, every elevated element has an 8px hard offset shadow, every corner is square, every accent color is a saturated pastel, and every layout is allowed to be a little bit crooked. The system's joy comes from the deliberate collision of these laws — bordered cards meet bordered cards, shadows stack against shadows, tilted decorations puncture the grid intentionally.\n\n## Preview Ingredients\n\n- Palette: black #000000; white #FFFFFF; offwhite #FFFDF5; pink #FE90E8; blue #C0F7FE; green #99E885; yellow #F7CB46; cream #FFDC8B\n- Typography: See full design doc after selection.\n- Signature move: 4px solid black borders on primary cards, 3px on secondary chrome — never thinner.\n- Signature move: 8px hard offset shadows on primary cards, 4px on secondary chrome — solid black, zero blur.\n- Signature move: Five-pastel palette (pink, blue, green, yellow, cream) plus black, white, off-white — cycled across surfaces.\n- Signature move: Inter weight 800-900 uppercase with negative tracking is the display voice; Space Grotesk weight 600 uppercase with 0.08em tracking is the label voice.\n- Signature move: Square corners everywhere except a single circular accent dot on stat cards.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/design.md (Tokens: ~13200 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Blue Professional\ndescription: A restrained, consulting-grade presentation system on a warm cream canvas (#fdfae7) with a single saturated cobalt blue (#1e2bfa) as the only accent color. Display type runs Space Grotesk for headlines and numerical callouts; Inter handles body and chrome. Cards are soft-tinted cobalt at 4% opacity with 1.5px translucent borders and 10-14px rounded corners — quiet, never bordered in solid color. The aesthetic borrows from investment-research reports, McKinsey-grade quarterly briefings, and contemporary financial dashboards — measured, data-dense without feeling crowded, and unmistakably professional. The system is built for executive readability at distance, with strong typographic hierarchy and a single accent color carrying every emphasis moment.\n\ncolors:\n  bg: \"#fdfae7\"\n  primary: \"#1e2bfa\"\n  text: \"#111111\"\n  text-muted: \"#6b6b6b\"\n  text-light: \"#9a9a9a\"\n  accent-light: \"rgba(30, 43, 250, 0.08)\"\n  accent-medium: \"rgba(30, 43, 250, 0.15)\"\n  border: \"rgba(30, 43, 250, 0.2)\"\n  card-bg: \"rgba(30, 43, 250, 0.04)\"\n  positive: \"#059669\"\n  negative: \"#dc2626\"\n\ntypography:\n  h1:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(44.8px, 5vw, 67.2px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h2:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(28.8px, 3vw, 41.6px)\"\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h3:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(17.6px, 1.8vw, 24px)\"\n    lineHeight: 1.3\n    letterSpacing: -0.02em\n  h4-eyebrow:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(13.6px, 1.2vw, 16px)\"\n    lineHeight: 1.1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n    color: \"{colors.primary}\"\n  body:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13.6px, 1.1vw, 16.8px)\"\n    lineHeight: 1.6\n    color: \"{colors.text-muted}\"\n  metric-value:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(35.2px, 3.4vw, 48px)\"\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  metric-label:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(15.2px, 1.3vw, 17.6px)\"\n    lineHeight: 1.3\n    color: \"{colors.text}\"\n  metric-desc:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12.5px, 0.95vw, 14.4px)\"\n    lineHeight: 1.5\n    color: \"{colors.text-muted}\"\n  metric-support:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 0.9vw, 13.6px)\"\n    lineHeight: 1.45\n    color: \"{colors.text-muted}\"\n  stat-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"clamp(25.6px, 2.4vw, 33.6px)\"\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  stat-name:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(13.6px, 1vw, 15.2px)\"\n    lineHeight: 1.35\n    color: \"{colors.text}\"\n  stat-context:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 400\n    fontSize: 12px\n    lineHeight: 1.4\n    color: \"{colors.text-light}\"\n  agenda-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: 28.8px\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  insight-num:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    lineHeight: 1.7\n    letterSpacing: 0.05em\n    color: \"{colors.primary}\"\n  split-highlight:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(18.4px, 1.55vw, 24px)\"\n    lineHeight: 1.4\n    color: \"{colors.text}\"\n  blockquote:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(25.6px, 2.8vw, 38.4px)\"\n    lineHeight: 1.35\n    color: \"{colors.text}\"\n  quote-mark:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: \"128px\"\n    lineHeight: 0.5\n    color: \"{colors.primary}\"\n    opacity: 0.15\n  step-circle-text:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 700\n    fontSize: 20.8px\n    lineHeight: 1\n  step-title:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(15.2px, 1.4vw, 18.4px)\"\n    lineHeight: 1.2\n  bar-label:\n    fontFamily: \"'Inter', sans-serif\"\n    fontWeight: 500\n    fontSize: \"clamp(12.8px, 1.1vw, 16px)\"\n    lineHeight: 1.3\n    color: \"{colors.text}\"\n  bar-pct:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 15.2px\n    color: \"{colors.primary}\"\n  tag:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12px\n    lineHeight: 1\n    color: \"{colors.primary}\"\n  counter:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12.8px\n    lineHeight: 1\n    letterSpacing: 0.05em\n    color: \"{colors.text-muted}\"\n  meta:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: 12.8px\n    lineHeight: 1.4\n    letterSpacing: 0.05em\n    color: \"{colors.text-light}\"\n  cite:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12.5px\n    lineHeight: 1.4\n    letterSpacing: 0.04em\n    textTransform: uppercase\n    color: \"{colors.text-muted}\"\n\nspacing:\n  pad-slide-x: \"4vw\"\n  pad-slide-y-top: \"3.5vw\"\n  pad-slide-y-bottom: \"8.5vh\"\n  pad-card-lg: \"1.5rem 1.6rem\"\n  pad-card-md: \"1.4rem 1.5rem\"\n  pad-card-sm: \"1rem 1.2rem\"\n  pad-mini: \"0.9rem 1rem\"\n  gap-grid-lg: \"3.5rem\"\n  gap-grid-md: \"2rem 3rem\"\n  gap-grid-sm: \"1.5rem\"\n  gap-cards: \"1.2rem\"\n  gap-mini: \"1rem\"\n  header-margin: \"2.5vh\"\n  accent-line-width: \"60px\"\n  accent-line-height: \"4px\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.bg}\"\n\nradii:\n  pill: \"100px\"\n  card-lg: \"14px\"\n  card-md: \"12px\"\n  card-sm: \"10px\"\n  bar: \"6px\"\n  circle: \"50%\"\n\ncomponents:\n  card-tinted:\n    background: \"{colors.card-bg}\"\n    border: \"1.5px solid {colors.border}\"\n    borderRadius: 14px\n    padding: \"1.5rem 1.6rem\"\n    description: \"Primary content card. Cobalt tinted at 4% with a 20% cobalt 1.5px border. Soft 14px radius. Never solid-colored, never outlined in full primary.\"\n  card-tinted-sm:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 12px\n    padding: \"1.4rem 1.5rem\"\n    description: \"Compact tinted card with 1px border. Used for stat cells and small data blocks.\"\n  card-tinted-xs:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 10px\n    padding: \"0.9rem 1rem\"\n    description: \"Mini tinted card used for inline mini-stats.\"\n  detail-block:\n    background: \"{colors.card-bg}\"\n    border: \"1px solid {colors.border}\"\n    borderRadius: 10px\n    padding: \"1rem 1.2rem\"\n    description: \"Detail block holding a small h3 + a bulleted ul. Used in detail-analysis grids.\"\n  tag-pill:\n    background: \"{colors.accent-light}\"\n    color: \"{colors.primary}\"\n    padding: \"0.35rem 0.9rem\"\n    borderRadius: 100px\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 500\n    fontSize: 12px\n    description: \"Pill-shaped tag sitting in the top-right of the slide-header. Fully rounded, soft cobalt tint background, cobalt text.\"\n  cta-button:\n    background: \"{colors.primary}\"\n    color: \"{colors.bg}\"\n    padding: \"0.9rem 2.2rem\"\n    borderRadius: 100px\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 15.2px\n    description: \"Primary CTA. Fully rounded solid cobalt pill with cream text. Hover lifts -2 with a soft cobalt drop shadow.\"\n  nav-btn:\n    width: 44px\n    height: 44px\n    borderRadius: 50%\n    border: \"1.5px solid {colors.border}\"\n    background: \"{colors.bg}\"\n    color: \"{colors.primary}\"\n    description: \"Circular nav-arrow button. Hover inverts: cobalt fill, cream icon. Disabled state at 30% opacity.\"\n  accent-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.primary}\"\n    borderRadius: 2px\n    description: \"Short horizontal cobalt rule, 60×4px, slightly rounded. Used above cover titles and as eyebrow separators.\"\n  accent-dot:\n    width: 8px\n    height: 8px\n    background: \"{colors.primary}\"\n    borderRadius: 50%\n    description: \"Small inline cobalt dot. Decorative inline marker.\"\n  bar-track:\n    height: 28px\n    background: \"{colors.accent-light}\"\n    borderRadius: 6px\n    description: \"Horizontal bar chart track. Soft cobalt tint with 6px rounded corners.\"\n  bar-fill:\n    height: \"100%\"\n    background: \"{colors.primary}\"\n    borderRadius: 6px\n    description: \"Solid cobalt fill inside bar-track. Width carries the data value. Animates from 0 to value on slide entry.\"\n  step-circle:\n    width: 56px\n    height: 56px\n    borderRadius: 50%\n    background: \"{colors.primary}\"\n    color: \"{colors.bg}\"\n    description: \"Circular numbered step marker in cobalt with cream numeral. Sequential steps reduce opacity (1.0 → 0.85 → 0.7 → 0.55) to suggest fade-into-future.\"\n  metric-change-positive:\n    color: \"{colors.positive}\"\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    description: \"Inline positive-change chip with up-arrow glyph and percentage. Green text inline; no border or fill.\"\n  metric-change-negative:\n    color: \"{colors.negative}\"\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 12.5px\n    description: \"Inline negative-change chip with up/down-arrow glyph and percentage. Red text inline; no border or fill.\"\n  insight-list-item:\n    paddingLeft: \"2.6rem\"\n    description: \"Numbered insight list with a Space Grotesk 600 counter (decimal-leading-zero) at position absolute left. Numbers in cobalt, body in default text color.\"\n  split-highlight-block:\n    background: \"{colors.accent-light}\"\n    borderLeft: \"4px solid {colors.primary}\"\n    borderRadius: 12px\n    padding: \"1.3rem 1.5rem\"\n    description: \"Highlighted callout block with cobalt left rule and tinted cobalt fill. Used for inline pull-quotes inside split-column layouts.\"\n  progress-bar:\n    position: \"fixed bottom 0 left 0\"\n    height: 3px\n    background: \"{colors.primary}\"\n    description: \"Thin cobalt progress bar at the bottom edge of the viewport, width grows linearly with slide index.\"\n  cover-decoration:\n    background: \"{colors.accent-light}\"\n    clipPath: \"polygon(30% 0, 100% 0, 100% 100%, 0% 100%)\"\n    description: \"Diagonal accent panel filling the right ~35% of cover surfaces. Soft cobalt tint, clip-path angled cut on the left edge.\"\n  cover-dots:\n    layout: \"3x3 grid of 6px cobalt dots at 12px gap, 25% opacity\"\n    description: \"Small dotted decoration used on cover and other open-space surfaces.\"\n  closing-circles:\n    border: \"1px solid {colors.border}\"\n    borderRadius: \"50%\"\n    description: \"Two concentric centered circles (500px outer, 360px inner) as atmospheric decoration on closing-class surfaces. Opacity 0.3-0.4.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBlue Professional is a **consulting-grade presentation system** designed for executive briefings, research deliverables, and quarterly reviews. Its foundational visual premise is **restraint with one strong commitment**: a warm cream canvas (`{colors.bg}` — `#fdfae7`) and a single saturated cobalt (`{colors.primary}` — `#1e2bfa`) that carries every accent, every metric, every CTA, every eyebrow, every chart fill. There is no secondary brand color, no palette of pastels, no warm/cool pairing — just cream, cobalt, and a tight ladder of muted grays for body text.\n\nThe type system uses two open Google Fonts in tightly defined roles. **Space Grotesk** (weights 300-700) is the display, headline, numerical, and chrome face — used for h1-h3 headings, all metric/stat numerals, eyebrow labels (in uppercase with 0.08em tracking), tag pills, CTAs, slide counters, agenda numbers, and step circles. Its slightly geometric character + soft humanist warmth makes it read as both modern (suitable for AI/tech audiences) and trustworthy (suitable for finance audiences). **Inter** (weights 300-600) is the body face — used for paragraph text, list bodies, metric descriptions, and table-style content. The Space Grotesk / Inter pairing is deliberately ordinary; what makes the system feel distinctive is the discipline of their usage, not the novelty of the faces.\n\nThe color philosophy is **one accent, three text grays**. Cobalt does all the emphasis work: headlines stay in `{colors.text}` (a near-black `#111111`), but every metric value, every eyebrow, every CTA, every chart bar, every callout border, every step circle, every progress indicator is cobalt. Body text uses a three-step gray ladder — `{colors.text}` for primary body, `{colors.text-muted}` (`#6b6b6b`) for paragraph body and metric descriptions, `{colors.text-light}` (`#9a9a9a`) for tertiary metadata. Only two non-cobalt accent colors exist: `{colors.positive}` (a subdued green `#059669`) and `{colors.negative}` (a subdued red `#dc2626`), used only on directional change indicators (arrows and percentages on metric cards) — and these are inline text colors, not fills.\n\nDepth is **soft and tinted**, never offset or shadowed. Cards are 4% cobalt tints (`{colors.card-bg}`) with 1.5px translucent cobalt borders (`{colors.border}` — cobalt at 20% opacity) and 10-14px rounded corners. There are no drop shadows except a single subtle cobalt-tinted shadow on the CTA hover state (`0 8px 24px rgba(30, 43, 250, 0.25)`). The lack of harsh shadows is what gives the system its quiet, premium feel — every elevation is implied by border + tint, not by shadow.\n\n**Density philosophy: balanced and data-dense without crowding.** This system is built to carry information — six-stat dashboards, six-detail-block grids, seven-bar rankings, multi-column splits with callouts and mini-stats. The system reads as authoritative when populated with substantive content and timid when sparse. A typical surface holds: a slide-header (h4 eyebrow + tag pill) + a section h2 headline + a grid or list of 3-6 information cells. Cards have moderate internal padding (1.5rem) and moderate inter-card gap (1.2-1.5rem) — neither tight nor airy. The system can support both quote/cover-class surfaces (one bold statement in space) and dashboard-class surfaces (six cards of dense data) without feeling like two different systems.\n\n**Key Characteristics:**\n- Warm cream ground (`{colors.bg}`) on every surface — never pure white, never gray.\n- Single saturated cobalt (`{colors.primary}`) as the only accent — used for every eyebrow, metric, CTA, chart fill, and progress indicator.\n- Space Grotesk (display + chrome) + Inter (body) — never substitute either.\n- Cards are 4% cobalt tints with 1.5px cobalt-at-20% borders and 10-14px rounded corners.\n- Soft pill-shaped chrome (`{components.tag-pill}`, `{components.cta-button}`) with full `100px` border-radius.\n- Headlines use Space Grotesk weight 600-700 with -0.02em tracking on a near-black text color.\n- Body uses Inter weight 400 at 13.6-16.8px with 1.6 line-height in the muted gray.\n- Every slide carries a slide-header (eyebrow + tag pill), a single h2, and a flexible content region — the structure is rhythmic across the deck.\n- Persistent chrome: cobalt progress bar at bottom edge, slide-counter at bottom-left, circular nav-arrows at bottom-right.\n- Decorative atmospheric elements (concentric circles, dot grids, diagonal accent panels) appear only on cover and closing-class surfaces.\n\n## Colors\n\n### Palette\n\n- **Bg** (`{colors.bg}` — `#fdfae7`): The warm cream canvas. The default and universal surface. Slightly green-cream-leaning warmth that distinguishes the system from corporate-template white. Every slide rests on this ground.\n- **Primary** (`{colors.primary}` — `#1e2bfa`): The signature cobalt. A highly saturated electric blue that carries every emphasis moment. Used for h4 eyebrows, metric values, stat numerals, chart bar fills, CTA fills, step circles, progress bars, accent lines, agenda numbers, and the cite border on highlight blocks. No other accent color exists.\n- **Text** (`{colors.text}` — `#111111`): The primary text color. Near-black, slightly warmer than `#000000`. Used for h1-h3 headlines, primary content text, metric labels, and any text that should carry full weight.\n- **Text-muted** (`{colors.text-muted}` — `#6b6b6b`): Secondary text — body paragraphs, metric descriptions, captions. Reads as comfortably softer than the primary text without disappearing.\n- **Text-light** (`{colors.text-light}` — `#9a9a9a`): Tertiary text — slide meta info, hairline dividers in text, stat context lines. The lightest readable gray; below this, text becomes ambient noise.\n- **Accent-light** (`{colors.accent-light}` — `rgba(30, 43, 250, 0.08)`): The default cobalt tint for tag pills, bar tracks, highlight callouts, and cover-decoration panels.\n- **Accent-medium** (`{colors.accent-medium}` — `rgba(30, 43, 250, 0.15)`): A slightly darker cobalt tint, available but used sparingly.\n- **Border** (`{colors.border}` — `rgba(30, 43, 250, 0.2)`): Cobalt at 20% opacity. The universal soft border color for cards, nav buttons, decorative circles, and structural rules.\n- **Card-bg** (`{colors.card-bg}` — `rgba(30, 43, 250, 0.04)`): Cobalt at 4% opacity. The universal card fill — softer than accent-light, reading as a barely-tinted surface that lifts slightly off the cream ground.\n- **Positive** (`{colors.positive}` — `#059669`): Subdued green. Used only inline as the text color for positive-change indicators (up-arrow + percentage). Never used as a fill or border.\n- **Negative** (`{colors.negative}` — `#dc2626`): Subdued red. Used only inline as the text color for negative-change indicators. Never used as a fill or border.\n\n### Defaults\n\n- **Default surface background**: `{colors.bg}` — every surface starts on cream.\n- **Default headline color**: `{colors.text}` (`#111111`) — headlines are near-black, never cobalt. Cobalt is reserved for accent moments (eyebrows, metrics, CTAs).\n- **Default body text color**: `{colors.text-muted}` (`#6b6b6b`) — body paragraphs default to muted, not full black.\n- **Default eyebrow / h4 color**: `{colors.primary}` — eyebrows are always cobalt, always uppercase, always with 0.08em tracking.\n- **Default card fill**: `{colors.card-bg}` (cobalt at 4%) — the universal soft tint.\n- **Default card border**: `{colors.border}` (cobalt at 20%) at 1px or 1.5px. Never solid full-cobalt borders.\n- **Default card border-radius**: 10-14px depending on card size (`{radii.card-sm}` for stat cells, `{radii.card-md}` for stat cards and detail blocks, `{radii.card-lg}` for metric cards).\n- **Default accent for any numerical value (metric, stat, agenda number, bar percentage)**: `{colors.primary}`.\n- **Default chart bar color**: `{colors.primary}` solid fill on a `{colors.accent-light}` track.\n- **Default CTA**: `{components.cta-button}` — solid cobalt pill with cream text and 100px border-radius.\n- **Default tag pill**: `{components.tag-pill}` — soft cobalt tint with cobalt text and 100px border-radius, paired with an h4 eyebrow in the slide-header.\n\nThe system has **no secondary accent color**. Don't reach for orange, teal, or purple to differentiate categories — the single-cobalt discipline is the system's identity. Categorical differentiation should be done through positioning, sizing, or labeling, not through additional hues.\n\n## Typography\n\n### Font Family Stack\nThe system runs two faces, each with a single role.\n\n**Space Grotesk** (Google Fonts, weights 300-700) is the display + numerical + chrome face. Used for every h1, h2, h3, h4 heading; every numerical callout (metric values, stat numbers, agenda numbers, bar percentages, step circles); every chrome element (tag pills, CTAs, slide counters, hint text); and every uppercase eyebrow with 0.08em tracking. Its slightly geometric character + softly rounded humanist forms read as both contemporary and trustworthy — suitable for both AI/tech and finance audiences.\n\n**Inter** (Google Fonts, weights 300-600) is the body face. Used for paragraph text, list bodies, metric descriptions, agenda descriptions, detail-block body, and any longer-form content. Set at weight 400 with line-height 1.6 in the muted gray, Inter reads as comfortable, generous, and editorial.\n\nThe face roles are non-overlapping: Space Grotesk handles every numeral and every heading; Inter handles every paragraph and list body. Don't cross the boundary — Inter h1 reads as a different brand; Space Grotesk body reads as a tech startup landing page.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.h1}` | 44.8–67.2px clamp | Space Grotesk | 700 | Cover or closing title |\n| `{typography.h2}` | 28.8–41.6px clamp | Space Grotesk | 600 | Primary section headline on each slide |\n| `{typography.h3}` | 17.6–24px clamp | Space Grotesk | 500 | Agenda item / region title |\n| `{typography.h4-eyebrow}` | 13.6–16px clamp | Space Grotesk | 600 | Uppercase eyebrow in the slide-header (always cobalt) |\n| `{typography.body}` | 13.6–16.8px clamp | Inter | 400 | Standard body paragraph |\n| `{typography.metric-value}` | 35.2–48px clamp | Space Grotesk | 700 | Large metric numeral in a callout card |\n| `{typography.metric-label}` | 15.2–17.6px clamp | Inter | 600 | Metric label line under the numeral |\n| `{typography.metric-desc}` | 12.5–14.4px clamp | Inter | 400 | Metric supporting description paragraph |\n| `{typography.metric-support}` | 12–13.6px clamp | Inter | 400 | Metric supporting bullet list |\n| `{typography.stat-num}` | 25.6–33.6px clamp | Space Grotesk | 700 | Stat-cell numeral (smaller than metric-value) |\n| `{typography.stat-name}` | 13.6–15.2px clamp | Inter | 500 | Stat-cell descriptive name line |\n| `{typography.stat-context}` | 12px | Inter | 400 | Stat-cell tertiary context line below a hairline divider |\n| `{typography.agenda-num}` | 28.8px | Space Grotesk | 700 | Agenda item numeral |\n| `{typography.insight-num}` | 12.5px | Space Grotesk | 600 | Counter-style number prefix on insight list items |\n| `{typography.split-highlight}` | 18.4–24px clamp | Space Grotesk | 500 | Inline pull-quote text inside a split-highlight block |\n| `{typography.blockquote}` | 25.6–38.4px clamp | Space Grotesk | 500 | Quote-class headline body |\n| `{typography.quote-mark}` | 128px | Space Grotesk | 700 | Decorative oversized quote glyph at 15% opacity above a blockquote |\n| `{typography.step-circle-text}` | 20.8px | Space Grotesk | 700 | Numeral inside a circular step marker |\n| `{typography.step-title}` | 15.2–18.4px clamp | Space Grotesk | 600 | Step title beneath a step circle |\n| `{typography.bar-label}` | 12.8–16px clamp | Inter | 500 | Bar chart row label |\n| `{typography.bar-pct}` | 15.2px | Space Grotesk | 600 | Bar chart row percentage value |\n| `{typography.tag}` | 12px | Space Grotesk | 500 | Tag pill text in slide-header |\n| `{typography.counter}` | 12.8px | Space Grotesk | 500 | Persistent slide counter |\n| `{typography.meta}` | 12.8px | Space Grotesk | 400 | Cover meta line (e.g., date / confidential marker) |\n| `{typography.cite}` | 12.5px | Space Grotesk | 500 | Cite/attribution under a pull-quote, uppercase with 0.04em tracking |\n\n### Defaults\n\n- **Default size for a cover title**: `{typography.h1}` (44.8–67.2px). Always Space Grotesk weight 700 with -0.02em tracking.\n- **Default size for the primary section headline on each slide**: `{typography.h2}` (28.8–41.6px). Space Grotesk weight 600. The \"section h2\" is the system's structural workhorse — every content slide has one.\n- **Default size for a region or agenda-item title**: `{typography.h3}` (17.6–24px).\n- **Default size for the eyebrow above the h2**: `{typography.h4-eyebrow}` (13.6–16px) in cobalt, uppercase, 0.08em tracking.\n- **Default size for paragraph body**: `{typography.body}` (13.6–16.8px clamp). Inter weight 400 with line-height 1.6.\n- **Default size for a large metric numeral**: `{typography.metric-value}` (35.2–48px). For dashboard stat cells, step down to `{typography.stat-num}` (25.6–33.6px).\n- **Default size for a quote body**: `{typography.blockquote}` (25.6–38.4px). Always Space Grotesk weight 500.\n- **Default weight for Space Grotesk headings**: 500 (h3) → 600 (h2 and eyebrow) → 700 (h1 and numerical callouts). Don't reach for weight 400 or 800; the weight ladder is fixed.\n- **Default weight for Inter body**: 400. Inter body at 500-600 reads as too assertive; at 300 reads as too thin.\n- **Default tracking for h1-h3 headings**: -0.02em. Without negative tracking, Space Grotesk display reads as untreated.\n- **Default tracking for the h4 eyebrow**: 0.08em uppercase. Without the wide tracking + uppercase combination, the eyebrow doesn't read as an eyebrow.\n\nWhen unsure which heading token to reach for, default to `{typography.h2}` (28.8–41.6px) for the slide's primary text moment. `{typography.h3}` is for region or agenda-item titles; `{typography.h1}` is reserved for cover and closing.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every h4 eyebrow is Space Grotesk weight 600 in `{colors.primary}` cobalt, uppercase, with 0.08em letter-spacing.** No exceptions. An eyebrow without uppercase + tracking + cobalt color is not the system's eyebrow — it's a stray sans element.\n- **Every headline (h1, h2, h3) uses negative letter-spacing of -0.02em.** Default-tracked Space Grotesk display reads as untreated and breaks the editorial discipline.\n- **Every headline uses `{colors.text}` (`#111111`), not cobalt.** Cobalt headlines are forbidden — cobalt is reserved for accent moments (eyebrows, metrics, CTAs, chart bars). Reversing this collapses the visual hierarchy.\n- **Every numerical callout (metric value, stat number, agenda number, bar percentage, step circle) is Space Grotesk weight 600-700 in `{colors.primary}` cobalt.** Numerical values are the system's primary accent moment.\n- **Every body paragraph is Inter weight 400 in `{colors.text-muted}` (`#6b6b6b`) with line-height 1.6.** Body in pure black reads as too heavy; body in text-light reads as too faint.\n- **Every CTA is the `{components.cta-button}` pattern: solid cobalt pill with cream text, 100px border-radius, 0.9rem × 2.2rem padding.** CTAs in any other shape or color don't exist.\n- **Every tag pill is the `{components.tag-pill}` pattern: soft cobalt tint with cobalt text, 100px border-radius, 0.35rem × 0.9rem padding.** Tag pills with solid backgrounds or borders break the system.\n- **Every slide-header places the h4 eyebrow on the left and the tag pill on the right.** This is the structural rhythm of every content slide.\n\n### Typography Principles\n\nThe voice contrast is **near-black display headlines ↔ cobalt eyebrows + numerals ↔ muted gray body**. Italic and underline are not used. The only emphasis mechanisms are: switching weight within the Space Grotesk ladder, switching color from text-muted to text or to cobalt, and uppercase + tracking on labels.\n\nNumerical content is **always Space Grotesk**, even small numerical labels (bar percentages, slide counters, mini-stat values). The mono-flavored character of Space Grotesk at numerical sizes mimics tabular figures without requiring an actual monospace face.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and animated in via opacity + translateX (40px → 0px) on 500ms ease. Only the `.active` slide is `opacity: 1`; the previous slide gets a `.prev` class and translates -40px out of view.\n\nDefault slide padding is asymmetric: `3.5vw` left, top, and right; `8.5vh` bottom. The extra bottom space reserves room for the fixed slide-counter (left) and nav-controls (right) which sit at `bottom: 2.5vh` overlapping the viewport bottom.\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide-x}` | 4vw | Slide horizontal padding |\n| `{spacing.pad-slide-y-top}` | 3.5vw | Slide top padding |\n| `{spacing.pad-slide-y-bottom}` | 8.5vh | Slide bottom padding (extra to clear nav chrome) |\n| `{spacing.pad-card-lg}` | 1.5rem 1.6rem | Large card internal padding (metric cards) |\n| `{spacing.pad-card-md}` | 1.4rem 1.5rem | Medium card internal padding (stat cells) |\n| `{spacing.pad-card-sm}` | 1rem 1.2rem | Small card internal padding (detail blocks) |\n| `{spacing.pad-mini}` | 0.9rem 1rem | Mini card internal padding (mini-stat cells) |\n| `{spacing.gap-grid-lg}` | 3.5rem | Large gap between split columns |\n| `{spacing.gap-grid-md}` | 2rem 3rem | Medium gap in two-column grids (row × col) |\n| `{spacing.gap-grid-sm}` | 1.5rem | Standard gap in 3-column metric grids |\n| `{spacing.gap-cards}` | 1.2rem | Gap between dashboard stat cells |\n| `{spacing.gap-mini}` | 1rem | Gap between mini-stats |\n| `{spacing.header-margin}` | 2.5vh | Margin below the slide-header |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Slide counter** at bottom-left — Space Grotesk 12.8px weight 500 in text-muted gray, fixed at `bottom: 2.5vh; left: 3vw`.\n- **Nav controls** at bottom-right — two circular 44px nav-buttons with 1.5px cobalt-at-20% borders, fixed at `bottom: 2.5vh; right: 3vw`. Disabled state at 30% opacity (first slide / last slide).\n- **Progress bar** at bottom edge — 3px solid cobalt strip with width = `(currentSlide + 1) / total * 100%`. Animates on slide change.\n\nA **keyboard hint** (\"Use arrow keys to navigate\") appears at bottom center in text-light gray.\n\n### Slide-Header Structure\nEvery content slide carries a `.slide-header` band at the top: an h4 eyebrow on the left, a tag pill on the right. Below the slide-header sits the section h2, then the content region (a grid, list, chart, or split). Cover, quote, and closing slides skip the slide-header in favor of centered content.\n\n### Content Grids\nThe system uses repeated grid patterns for content layout: 2×3 agenda grid, 3-column metric row, 3-column stats grid (becomes 2 rows on dashboards), 1.05fr/1fr split-body, 4-step timeline row, 2-column detail grid. These are content-density containers; the grid choice depends on content volume, not on a fixed layout vocabulary.\n\n## Depth and Elevation\n\n### Tinted Cards (Primary Depth Mechanism)\nThe system uses **soft cobalt-tinted backgrounds + soft cobalt-borders + rounded corners** to create the impression of elevation without using shadows. A card with `background: {colors.card-bg}` (cobalt at 4%) and `border: 1.5px solid {colors.border}` (cobalt at 20%) sits visually above the cream ground without any actual offset. This treatment is the system's depth language.\n\n### No Drop Shadows on Cards\nThere are no `box-shadow` declarations on cards, stat cells, detail blocks, or any content container. The only shadow in the system is a single soft cobalt-tinted hover state on the CTA button: `0 8px 24px rgba(30, 43, 250, 0.25)`, which appears for 200ms on hover and disappears on mouse-out. This is the only colored, blurred shadow in the system.\n\n### Border-Left Accent (Highlight Block)\nThe `{components.split-highlight-block}` uses a 4px solid cobalt left border to signal \"this is a quoted callout, distinct from surrounding body\". This is the system's structural accent mechanism — it's not a shadow, but it carries the same elevation cue (the colored rule pulls the block forward visually).\n\n### Rounded Corners as Softness\nThe 10-14px border-radius on cards is part of the depth language. Without rounded corners, the cobalt-tinted cards would read as flat panels; the soft radius softens them into \"lifted\" surfaces.\n\n### Atmospheric Decorations\nDecorative elements (cover-decoration diagonal panel, concentric closing-circles, cover-dots grid, quote decoration circles) appear only on cover, quote, and closing-class surfaces. They are atmospheric, not structural — used to soften open-space surfaces without filling them with content.\n\n## Shapes and Treatment\n\n### Border Radius\n- **`{radii.pill}` = 100px** — fully rounded. Used on `{components.tag-pill}`, `{components.cta-button}`, and any pill-shaped chrome.\n- **`{radii.card-lg}` = 14px** — used on large metric cards.\n- **`{radii.card-md}` = 12px** — used on standard stat cells, split-highlight blocks.\n- **`{radii.card-sm}` = 10px** — used on detail blocks and mini-stats.\n- **`{radii.bar}` = 6px** — used on bar tracks and bar fills.\n- **`{radii.circle}` = 50%** — used on step circles, nav-button circles, accent dots, closing decoration circles, cover dots, quote decoration circles.\n\nThe radius ladder is graduated: tighter radii on smaller chrome, larger radii on bigger cards, fully rounded on pills, perfect circles on chrome. The system has **no square (0px) corners** anywhere except the progress bar.\n\n### Border Weights\n- **1px solid `{colors.border}`** — universal soft border. Used on stat cells, mini-stats, detail blocks, agenda items (bottom border only), stat-context dividers (top border only).\n- **1.5px solid `{colors.border}`** — slightly heavier soft border. Used on metric cards, nav-buttons.\n- **2px solid `{colors.border}`** — used on the split column divider (border-left on the right column of split layouts).\n- **4px solid `{colors.primary}`** — used only as the left rule on `{components.split-highlight-block}` to signal a quoted callout.\n\nThe borders are **never opaque cobalt** — they are always at 20% opacity (`{colors.border}`). This is what gives the system its quiet, lifted quality.\n\n### Decorative Element Types\n\n**Tinted card** (`{components.card-tinted}`) — Cobalt-at-4% background with 1.5px cobalt-at-20% border, 14px radius. The primary content card.\n\n**Tag pill** (`{components.tag-pill}`) — Fully rounded cobalt-at-8% pill with cobalt text. Sits in the top-right of the slide-header.\n\n**Eyebrow** (`{typography.h4-eyebrow}`) — Uppercase cobalt label with 0.08em tracking. Sits in the top-left of the slide-header.\n\n**CTA button** (`{components.cta-button}`) — Solid cobalt pill with cream text. The system's only solid-color element. Used once per closing surface.\n\n**Accent line** (`{components.accent-line}`) — A short 60×4 horizontal cobalt rule with 2px radius. Used above cover titles and as eyebrow separators on open-space surfaces.\n\n**Step circle** (`{components.step-circle}`) — A 56×56 solid cobalt circle with cream Space Grotesk numeral inside. Sequential timeline steps reduce opacity (1.0 → 0.85 → 0.7 → 0.55) to suggest fade-into-future.\n\n**Bar track + fill** (`{components.bar-track}` + `{components.bar-fill}`) — 28px-tall track in cobalt-at-8% with a solid cobalt fill whose width carries the data. 6px rounded corners on both.\n\n**Insight list item** (`{components.insight-list-item}`) — A counter-numbered list using CSS counter() to render decimal-leading-zero prefixes (\"01\", \"02\") in cobalt Space Grotesk 600 / 12.5px positioned absolute left.\n\n**Split highlight block** (`{components.split-highlight-block}`) — A cobalt-at-8% tinted block with a 4px cobalt left rule and a cite line below. Used for inline pull-quotes inside split-column layouts.\n\n**Cover decoration** (`{components.cover-decoration}`) — A clipped diagonal cobalt-tinted panel filling the right ~35% of cover surfaces. Reads as a printed accent without enclosing the layout.\n\n**Cover dots** (`{components.cover-dots}`) — A 3×3 grid of 6px cobalt dots at 12px gap, 25% opacity. Decorative atmosphere on open-space surfaces.\n\n**Closing circles** (`{components.closing-circles}`) — Two concentric centered circles (500px outer, 360px inner) with 1px cobalt-at-20% borders, opacity 0.3-0.4. Atmospheric decoration on closing-class surfaces.\n\n**Metric change chip** (`{components.metric-change-positive}` / `{components.metric-change-negative}`) — Inline directional indicator: a small arrow glyph + percentage value in `{colors.positive}` or `{colors.negative}`. No fill, no border — pure inline text color.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.bg}` (cream) as the universal canvas. Every surface starts on warm cream, never pure white.\n- Use `{colors.primary}` cobalt as the only accent color across the entire deck — for eyebrows, metrics, CTAs, chart fills, step circles, and progress indicators.\n- Set headlines (h1, h2, h3) in `{colors.text}` (`#111111`) near-black with -0.02em tracking. Cobalt headlines are forbidden; cobalt is for accent moments only.\n- Set every h4 eyebrow in cobalt Space Grotesk weight 600 with uppercase + 0.08em tracking. The eyebrow is the universal section opener.\n- Use `{components.card-tinted}` (cobalt-at-4% fill + cobalt-at-20% 1.5px border + 14px radius) as the universal content card pattern.\n- Pair every slide-header with an h4 eyebrow on the left and a `{components.tag-pill}` on the right. The rhythm is the system's structural identity.\n- Set body in Inter weight 400 at 13.6-16.8px in `{colors.text-muted}` (`#6b6b6b`) with line-height 1.6. The muted gray body is what makes the system feel premium.\n- Render every numerical callout (metric, stat, bar percentage, agenda number) in Space Grotesk weight 600-700 in cobalt. The cobalt numerical accent is the system's data voice.\n- Use full 100px border-radius on all chrome (tag pills, CTAs, nav-buttons). The pill shape is the system's chrome signature.\n- Use directional change chips (`{components.metric-change-positive}` / `{components.metric-change-negative}`) inline with no fill — green for positive, red for negative, both subdued.\n\n### Don't\n\n- Don't introduce a second accent color. Cobalt is the only accent — orange, teal, purple, or any additional brand color breaks the single-accent discipline.\n- Don't set headlines in cobalt. Headlines are near-black; cobalt is reserved for eyebrows, metrics, CTAs, and chart fills.\n- Don't use drop shadows on cards or content. The system has zero box-shadows except a single soft cobalt CTA hover.\n- Don't use square corners (0px radius) anywhere. The system is built around soft rounded corners — square corners immediately read as a different aesthetic.\n- Don't use opaque cobalt borders on cards. Borders are always cobalt-at-20% (`{colors.border}`). Full-opacity borders break the quiet, lifted feel.\n- Don't substitute fonts. Space Grotesk + Inter is the pairing. Substituting Arial, Helvetica, Roboto, or Open Sans collapses the typographic identity.\n- Don't crowd the canvas with bordered hard-edged elements. The system depends on soft tints and gentle borders; adding heavy outlines makes it feel like a different system.\n- Don't omit the slide-header (h4 eyebrow + tag pill) on a content slide. The header is the editorial rhythm.\n- Don't use uppercase body text. Uppercase is reserved for h4 eyebrows and the cite line under highlight blocks.\n- Don't use directional chips for non-directional emphasis. The green/red change chips are reserved for actual positive/negative comparisons (e.g., \"+11 pts vs. prior quarter\"). They are not general accent colors.\n\n## Responsive Behavior\n\nBlue Professional is designed as a **1920×1080 presentation system** (effective 100vw × 100vh). Sizing uses CSS `clamp()` for type and `vw / vh / rem` for spacing. The system has minimal responsive behavior — it's built for landscape presentation contexts.\n\n### Scaling Behavior\n- h1 scales 44.8px → 67.2px on viewport width.\n- h2 scales 28.8px → 41.6px.\n- Body scales 13.6px → 16.8px.\n- Metric values scale 35.2px → 48px.\n- Card padding (rem-based) scales with the user's font-size setting; default cards stay around 24-26px internal padding.\n- Borders (1px, 1.5px, 2px), border-radii (10-14px), and pill radius (100px) are fixed and do not scale.\n\n### Component Adjustments at Low Viewport Heights\nA single `@media (max-height: 700px)` block tightens spacing on dense slides:\n- Slide padding reduces from 3.5vw / 8.5vh to 2.5vh / 3vw.\n- Agenda grid gap reduces.\n- Metric and detail card padding reduces to 1rem.\n- Bar item padding reduces.\n\nThis ensures the system fits on shorter laptop screens without breaking the structural layout.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `Space`, or `PageDown`.\n- Slides reverse via `ArrowLeft` or `PageUp`.\n- `Home` jumps to first, `End` to last.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are 500ms ease with opacity fade + 40px translateX slide-in/out.\n- Nav-buttons disable at first/last slide (opacity 0.3).\n- Progress bar at the bottom edge animates to the current slide percentage with a 400ms ease.\n\n### Print Behavior\nThe system has no `@media print` rule. The slide transition is screen-only; printing produces only the active slide. For static export, screenshots of each slide preserve all atmospheric elements (cover decoration, dots, concentric circles are all CSS).\n\n### Interactive States\n- Nav-buttons invert on hover (cobalt fill, cream icon).\n- Agenda items get a subtle `{colors.card-bg}` background on hover (200ms transition).\n- CTA button lifts -2px on hover with a soft cobalt drop shadow (the only shadow in the system).\n- Bar fills animate from 0 to data value with a 0.8s ease transition — most visible on slide entry.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| h1 / h2 / h3 / h4-eyebrow / metric numerals / chart percentages | Space Grotesk 500–700 (negative tracking, uppercase on h4) | 思源黑体 Noto Sans SC 700 (0 tracking, no transform) |\n| Body / metric description / list body | Inter 400 | 思源宋体 Noto Serif SC 400 |\n| Mono / counter / tag pill / cite | Space Grotesk 500–600 (often uppercase) | 思源黑体 Noto Sans SC 500 (no transform) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use 思源黑体 Noto Sans SC for every Space Grotesk role (display, eyebrow, numerical, chrome) and 思源宋体 Noto Serif SC for the Inter body role. Both faces ship Latin glyphs that read cleanly alongside Chinese characters. The serif body pairing reinforces the consulting-grade editorial register that this template is built for — investor reports and McKinsey-style briefings often pair sans display with serif body in Chinese.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.2–1.3 (up from 1.1). CJK characters are visually full and crowd vertically more than Latin.\n- **Letter-spacing**: set to 0 on every CJK run. The template's −0.02em negative tracking on h1–h3 overlaps CJK strokes; the +0.08em positive tracking on h4 eyebrows reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. The h4-eyebrow and cite tokens use `text-transform: uppercase` in the Latin original; remove it for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 Q3 业绩复盘` not `2024Q3业绩复盘`.\n- **One font per sentence**: 思源黑体 / 思源宋体 cover both CJK and Latin glyphs — let one face handle each sentence. Don't let the browser fall back to Space Grotesk or Inter for ASCII characters mid-sentence.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on **restraint with one strong commitment** — cream ground, cobalt accent, soft tinted cards, no shadows. None of that depends on Latin typography; it transfers cleanly to Chinese. The h4-eyebrow loses its \"uppercase + 0.08em tracked + cobalt\" character in CJK because both uppercase and wide tracking drop. Compensate by **always pairing the eyebrow with the cobalt accent-line component above the headline** — the 60×4 cobalt rule does the chrome-recognition work that the tracked-uppercase did in Latin. Keep the eyebrow's cobalt color and weight-600 contrast against the muted-gray body.\n\nThe cobalt color discipline (`#1e2bfa` as the only accent, full-opacity on numerals and CTAs, 20% opacity on borders, 4% opacity on card fills) is the system's actual identity and transfers entirely to a CJK build. Numerical callouts remain Latin Arabic digits in Chinese consulting decks by convention (业绩 $24.3M, 同比 +18%), so the cobalt Space Grotesk → 思源黑体 swap mostly affects labels and headlines, not the headline-grabbing numerical figures. Keep numerals in 思源黑体 weight 700 for the digit rendering.\n\n### Known CJK Gap\n\n- **No CDN Chinese face matches Space Grotesk's \"trustworthy consulting\" register exactly.** 思源黑体 reads as more institutional and slightly less contemporary than Space Grotesk. The template will feel slightly more \"official report\" and slightly less \"AI startup\" than its Latin original. This is generally desirable for executive-briefing contexts in Chinese.\n- **The h4-eyebrow signal weakens.** The \"uppercase Space Grotesk 600 in cobalt with 0.08em tracking\" combination is the system's most recognizable small chrome and loses both the uppercase and tracking signals in CJK. Adding the `{components.accent-line}` above or below the eyebrow is the recommended compensation; without it, eyebrows can blend into body weight contrast.\n- **Body in 思源宋体 changes the register.** Inter body reads as neutral-modern; 思源宋体 reads as editorial-serious. The system's \"premium consulting\" feel becomes slightly more \"policy paper\" — appropriate for state-owned enterprise or government audiences, slightly heavy for startup-pitch audiences. For startup contexts, swap body to 思源黑体 Noto Sans SC 400 instead.\n\n## Iteration Guide\n\n1. Any new slide starts on `{colors.bg}` cream ground. Don't switch the background per slide; the constant ground is the system's identity.\n2. Any new content slide carries a slide-header at the top: h4 eyebrow (cobalt, uppercase, 0.08em) on the left + tag-pill on the right.\n3. Any new headline uses Space Grotesk weight 600-700 in `{colors.text}` near-black with -0.02em tracking. Reach for h2 (28.8-41.6px) for primary moments.\n4. Any new card uses the tinted pattern: `{colors.card-bg}` (cobalt at 4%) + 1-1.5px `{colors.border}` (cobalt at 20%) + 10-14px radius. Never use solid color fills or opaque borders.\n5. Any new numerical callout (metric value, stat number, agenda number, bar percentage, step circle) is Space Grotesk weight 600-700 in `{colors.primary}` cobalt. Numbers are the accent moment.\n6. Any new accent line, divider, or directional rule uses cobalt — solid for the primary rule, soft-cobalt (20% opacity) for borders.\n7. Any new CTA uses the `{components.cta-button}` pattern: solid cobalt pill with cream text, 100px radius, no other CTA shape exists.\n8. Any new chart bar uses `{components.bar-fill}` (solid cobalt) on `{components.bar-track}` (cobalt at 8%) with 6px radius.\n9. Any new step or sequential indicator uses the `{components.step-circle}` with diminishing opacity for future steps (1.0 → 0.85 → 0.7 → 0.55).\n10. If a surface feels too sparse, add information (more stats, more detail blocks) — don't add a second accent color or a heavier border to fill space. The system reads as elegant when populated with substance, not noise.\n\n## Known Gaps\n\n- **Space Grotesk and Inter are loaded from Google Fonts** via a preconnect + `<link>`. There are no system fallbacks beyond `sans-serif` — in environments where Google Fonts fail, the system collapses to system defaults and loses its character.\n- **The directional change colors (`{colors.positive}` and `{colors.negative}`) are inline-only.** There is no token-level support for status fills, success/error badges, or alerts beyond these two inline text colors.\n- **The single-accent discipline limits categorical color encoding.** Multi-series charts must distinguish through positioning or labeling — there is no design-system answer for \"show 4 categorical series in different colors\". This is intentional but limits chart expressiveness.\n- **The agenda-item hover state changes background to `{colors.card-bg}`** — interactive on hover. This may not work as expected in static screen-share contexts.\n- **Bar fills animate from 0 to value on entry** but only the active slide's bars are visible. Re-entering a slide replays the animation; the system does not preserve animation state.\n- **The progress bar reads as decorative on slide 1** (it's at ~10% on a 10-slide deck) and\n\n<!-- [TRUNCATED AT 50KB] -->\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/blue-professional/preview.md (Tokens: ~1041 | Category: anthropic-skill) -->\n# Blue Professional Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/blue-professional/design.md`\n- Preview card: `bold-template-pack/templates/blue-professional/preview.md`\n\n## Selection Metadata\n\n- Slug: `blue-professional`\n- Tagline: Cream paper background with electric cobalt blue accents; clean modern professional.\n- Mood: professional, modern, calm, trustworthy\n- Tone: clean, considered, polished, neutral\n- Formality: medium-high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports. Also a clean, tasteful choice whenever you want to read as professional without going stiff — research synthesis, internal reviews, brand work for service businesses.\n- Avoid for: Contexts where the deck should feel hot, playful, or intentionally informal — the cool electric-blue restraint will read as overly polished.\n\n## Visual Snapshot\n\nA restrained, consulting-grade presentation system on a warm cream canvas (#fdfae7) with a single saturated cobalt blue (#1e2bfa) as the only accent color. Display type runs Space Grotesk for headlines and numerical callouts; Inter handles body and chrome. Cards are soft-tinted cobalt at 4% opacity with 1.5px translucent borders and 10-14px rounded corners — quiet, never bordered in solid color. The aesthetic borrows from investment-research reports, McKinsey-grade quarterly briefings, and contemporary financial dashboards — measured, data-dense without feeling crowded, and unmistakably professional. The system is built for executive readability at distance, with strong typographic hierarchy and a single accent color carrying every emphasis moment.\n\nBlue Professional is a consulting-grade presentation system designed for executive briefings, research deliverables, and quarterly reviews. Its foundational visual premise is restraint with one strong commitment: a warm cream canvas ({colors.bg} — #fdfae7) and a single saturated cobalt ({colors.primary} — #1e2bfa) that carries every accent, every metric, every CTA, every eyebrow, every chart fill. There is no secondary brand color, no palette of pastels, no warm/cool pairing — just cream, cobalt, and a tight ladder of muted grays for body text.\n\n## Preview Ingredients\n\n- Palette: bg #FDFAE7; primary #1E2BFA; text #111111; text-muted #6B6B6B; text-light #9A9A9A; positive #059669; negative #DC2626\n- Typography: See full design doc after selection.\n- Signature move: Warm cream ground ({colors.bg}) on every surface — never pure white, never gray.\n- Signature move: Single saturated cobalt ({colors.primary}) as the only accent — used for every eyebrow, metric, CTA, chart fill, and progress indicator.\n- Signature move: Space Grotesk (display + chrome) + Inter (body) — never substitute either.\n- Signature move: Cards are 4% cobalt tints with 1.5px cobalt-at-20% borders and 10-14px rounded corners.\n- Signature move: Soft pill-shaped chrome ({components.tag-pill}, {components.cta-button}) with full 100px border-radius.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/design.md (Tokens: ~12899 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Bold Poster\ndescription: \"A populist editorial poster system that mashes vintage Italian sports-magazine display lettering with classical serif body and tight monospace metadata. The display face is Shrikhand — a heavy slab/script hybrid with playful italic personality — rendered at poster scale (often 200-320px) and routinely tilted off-axis. Body runs Libre Baskerville for a literary editorial register; Space Grotesk handles tiny uppercase labels and chrome. The palette is uncompromising: white canvas, deep brown-black ink (#1C1410), single saturated tomato red (#D8000F), and a warm off-white (#F5F2EF) for alternating panels. Borders are bold 1.5-3px ink rules; the only shadow is a single stacked offset behind red display text. The aesthetic is loud, confident, and unmistakably print-poster — closer to a 1970s European brand annual report or a wine merchant's catalogue than a contemporary slide deck.\"\n\ncolors:\n  bg: \"#FFFFFF\"\n  dark: \"#1C1410\"\n  red: \"#D8000F\"\n  light: \"#F5F2EF\"\n\ntypography:\n  hero-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(72px, 16vw, 220px)\"\n    lineHeight: 0.88\n    letterSpacing: 1px\n    color: \"{colors.dark}\"\n  hero-title-red:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(84px, 18vw, 260px)\"\n    lineHeight: 0.85\n    color: \"{colors.red}\"\n    transform: \"rotate(-4deg)\"\n  hero-title-bottom:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(64px, 14vw, 200px)\"\n    lineHeight: 0.9\n    color: \"{colors.dark}\"\n    transform: \"rotate(2deg)\"\n  close-big:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(80px, 18vw, 260px)\"\n    lineHeight: 0.88\n    color: \"{colors.red}\"\n    transform: \"rotate(-5deg)\"\n  stat-big:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(120px, 26vw, 320px)\"\n    lineHeight: 0.82\n    color: \"{colors.red}\"\n    transform: \"rotate(-6deg)\"\n  red-quote:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, 7vw, 90px)\"\n    lineHeight: 1.15\n    color: \"{colors.bg}\"\n    textShadow: \"2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)\"\n  section-header:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(32px, 5vw, 64px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  section-header-lg:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(36px, 6vw, 72px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  cell-number-lg:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 3.5vw, 52px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  cell-number-md:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 3.5vw, 48px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  card-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(22px, 3vw, 36px)\"\n    lineHeight: 1.1\n    color: \"{colors.dark}\"\n  card-title-sm:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(20px, 2.5vw, 32px)\"\n    lineHeight: 1.1\n    color: \"{colors.dark}\"\n  pillar-num:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(36px, 5vw, 64px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  pillar-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2.2vw, 28px)\"\n    lineHeight: 1.15\n    color: \"{colors.dark}\"\n  stat-item-num:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(28px, 4vw, 56px)\"\n    lineHeight: 1\n    color: \"{colors.dark}\"\n  roadmap-title:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2.5vw, 32px)\"\n    lineHeight: 1.1\n  inline-stat:\n    fontFamily: \"'Shrikhand', cursive\"\n    fontWeight: 400\n    fontSize: \"clamp(18px, 2vw, 28px)\"\n    lineHeight: 1\n    color: \"{colors.red}\"\n  body:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.2vw, 16px)\"\n    lineHeight: 1.75\n    color: \"{colors.dark}\"\n  body-card:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(12px, 1.1vw, 14px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  body-cell:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 13px)\"\n    lineHeight: 1.55\n    color: \"{colors.dark}\"\n  body-small:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 13px)\"\n    lineHeight: 1.5\n    color: \"{colors.dark}\"\n  hero-meta:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(11px, 1vw, 14px)\"\n    lineHeight: 1.5\n    color: \"{colors.dark}\"\n  tag-body:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.2vw, 16px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  red-cite:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(13px, 1.3vw, 16px)\"\n    lineHeight: 1.5\n    color: \"{colors.bg}\"\n  close-sub:\n    fontFamily: \"'Libre Baskerville', serif\"\n    fontWeight: 400\n    fontSize: \"clamp(14px, 1.5vw, 18px)\"\n    lineHeight: 1.6\n    color: \"{colors.dark}\"\n  label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 10px\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  label-red:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 10px\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  rm-label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 9px\n    letterSpacing: 3px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  tag-label:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    letterSpacing: 3px\n    textTransform: uppercase\n    color: \"{colors.red}\"\n  bullet-body:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    lineHeight: 1.45\n    color: \"{colors.dark}\"\n  counter:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: 11px\n    lineHeight: 1\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  link:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 600\n    fontSize: \"clamp(10px, 0.9vw, 12px)\"\n    letterSpacing: 2px\n    textTransform: uppercase\n    color: \"{colors.dark}\"\n  fc-micro:\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontWeight: 400\n    fontSize: 10px\n    lineHeight: 1.4\n    color: \"{colors.dark}\"\n\nspacing:\n  pad-slide: \"48px 56px\"\n  pad-cell: \"22px 20px\"\n  pad-cell-sm: \"20px 24px\"\n  pad-pillar: \"32px 24px\"\n  pad-card: \"24px\"\n  pad-roadmap: \"40px 48px\"\n  gap-grid-md: \"24px 32px\"\n  gap-grid-roadmap: \"28px 36px\"\n  gap-grid-stats: \"48px\"\n  gap-stat-row: \"20px\"\n  pad-bottom-clearance: \"40px\"\n  max-width-content: 1100px\n  max-width-services: 1000px\n\ncanvas:\n  width: 100vw\n  height: 100vh\n  background: \"{colors.bg}\"\n\ncomponents:\n  progress-bar:\n    position: \"fixed, bottom 0 left 0\"\n    height: 5px\n    background: \"{colors.red}\"\n    description: \"Persistent thick red progress strip at the bottom of the viewport. Width grows linearly with slide index. The system's most prominent piece of chrome.\"\n  counter:\n    position: \"fixed, bottom 18px right 24px\"\n    color: \"{colors.dark}\"\n    opacity: 0.5\n    fontFamily: \"'Space Grotesk', sans-serif\"\n    fontSize: 11px\n    letterSpacing: 2px\n    description: \"Persistent slide counter NN / NN at 50% opacity in Space Grotesk uppercase.\"\n  hint-pill:\n    position: \"fixed, bottom 18px center\"\n    background: \"{colors.light}\"\n    padding: \"6px 14px\"\n    borderRadius: 4px\n    fontSize: 10px\n    opacity: 0\n    description: \"Bottom-center hint pill that fades to 50% opacity on body hover. Subtle wayfinding only.\"\n  section-bordered-grid:\n    border: \"3px solid {colors.dark}\"\n    description: \"Heavy 3px ink border enclosing a grid of cells. Each child cell carries a 1.5px ink inner border, producing a hairline-on-heavy double-border tabular grid. Used for financial-figure and summary-highlight grids.\"\n  cell-bordered:\n    border: \"1.5px solid {colors.dark}\"\n    padding: \"22px 20px\"\n    description: \"Tabular cell with 1.5px ink border. Lives inside a 3px-bordered parent grid; the two border weights touch to produce the system's signature grid-with-double-edge.\"\n  red-leftbar-card:\n    borderLeft: \"4px solid {colors.red}\"\n    paddingLeft: 18px\n    description: \"Service or content card marked by a 4px solid red left rule and 18px left padding. The system's editorial card pattern — no outline, just the red rule signaling the start of a block.\"\n  red-leftbar-card-thin:\n    borderLeft: \"3px solid {colors.red}\"\n    paddingLeft: 16px\n    description: \"Thinner variant of the red-leftbar card used on dark surfaces (roadmap phases). Same pattern, scaled-down rule weight.\"\n  bullet-em-dash:\n    glyph: \"—\"\n    color: \"{colors.red}\"\n    fontWeight: 700\n    paddingLeft: 14px\n    description: \"List bullet using a red em-dash (—) glyph in place of a disc. The dash sits at position absolute left and the body text indents to clear it.\"\n  bullet-bullet:\n    glyph: \"•\"\n    color: \"{colors.red}\"\n    paddingLeft: 12px\n    description: \"List bullet using a red round bullet (•) glyph. Same indent pattern as the em-dash variant.\"\n  pillar-panel:\n    flex: 1\n    padding: \"32px 24px\"\n    borderRight: \"3px solid {colors.dark}\"\n    description: \"Vertical column panel inside a multi-pillar layout. Each pillar separated by a 3px ink vertical rule. Alternating panels swap background from {colors.bg} to {colors.light} for striping.\"\n  pillar-bullet-row:\n    padding: \"5px 0\"\n    borderBottom: \"1px solid rgba(28, 20, 16, 0.08)\"\n    description: \"Bullet row inside a pillar with a hairline-soft bottom border (ink at 8%) separating items. The last item drops the border.\"\n  global-card:\n    border: \"2px solid {colors.dark}\"\n    padding: 24px\n    description: \"Bordered information card with 2px ink outline. Used on the global presence layout. Heavier than the leftbar pattern, more contained.\"\n  stacked-text-shadow:\n    textShadow: \"2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)\"\n    description: \"Three-step decreasing-opacity stacked offset shadow in ink. Applied only to large red display text on red panels. The system's only shadow treatment.\"\n  red-panel:\n    background: \"{colors.red}\"\n    color: \"{colors.bg}\"\n    description: \"Full-bleed saturated red panel surface. Carries white text with the stacked-text-shadow treatment on display.\"\n  dark-panel:\n    background: \"{colors.dark}\"\n    color: \"{colors.bg}\"\n    description: \"Full-bleed deep brown-black panel surface. Carries white text and red accents (left bars, mono labels).\"\n  link-underline:\n    color: \"{colors.dark}\"\n    borderBottom: \"2px solid {colors.red}\"\n    paddingBottom: 4px\n    description: \"Footer link style — Space Grotesk uppercase with a 2px red underline. Hover swaps text color to red.\"\n  hero-title-stack:\n    description: \"A three-line stacked title where each line is a Shrikhand display element at a slightly different size. Two of the three lines carry rotation transforms (-4deg, +2deg) and one is set in red. The composition is the system's signature opener.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBold Poster is a **populist editorial poster system** that lifts its visual vocabulary from vintage Italian sports magazines, mid-century European brand annual reports, and wine-merchant catalogues. The premise is that every slide should feel printed — set in heavy display type, locked to one strong red accent, on a white or off-white sheet, with grids ruled in ink and decoration kept to a strict minimum.\n\nThe type system is three faces working in tight roles. **Shrikhand** (Google Fonts) is the display face — a heavy slab/script hybrid with chunky italic terminals, narrow apertures, and a distinctly Italian-sports-script personality. Used at poster scale (often 100-320px) and almost always with playful rotation (-6° to +2°), Shrikhand carries every hero title, every section header, every stat figure, every card title. **Libre Baskerville** (Google Fonts) is the body face — a classical literary serif with strong stroke contrast that anchors the system in editorial register. Used at 11-16px with 1.5-1.75 line-height in deep ink, Libre Baskerville is what makes the system feel printed rather than digital. **Space Grotesk** (Google Fonts) is the chrome face — used exclusively for tiny uppercase labels (9-12px, 2-3px tracking), bullet body inside cards, slide counters, and footer links. The Space Grotesk treatment is the system's \"metadata\" voice.\n\nThe color philosophy is **uncompromising restraint**: white canvas, deep brown-black ink (`{colors.dark}` — `#1C1410`), single saturated tomato red (`{colors.red}` — `#D8000F`), and a warm off-white (`{colors.light}` — `#F5F2EF`) for alternating panels. There are no secondary brand colors, no gradients (except the inside of the stacked text-shadow), no tints, no semantic state colors. Every numerical callout, every active rule, every CTA, every emphasis moment is red — and red is reserved for these moments only (it is never used as body text, never as fill on a card without text on top, never as a tint).\n\nDepth is **structural, not atmospheric**. The system has no drop shadows except a single stacked text-shadow applied to red display text on red panels (three steps at 2/2, 4/4, 6/6 in decreasing-opacity ink). All other depth comes from heavy borders: 3px ink outlines on tabular grids, 1.5-2px ink borders on cells, 4px red left rules on editorial cards, 1px hairline rules between bullet items. The double-border treatment (3px outer + 1.5px inner) is the system's signature tabular pattern — it produces a printed-newsprint quality that defines the look.\n\n**Density philosophy: high — populist and packed.** This system reads as authoritative when slides are dense and timid when sparse. Roadmap, pillar, and financial slides routinely carry 3-6 distinct cells with body paragraphs, bullet lists, and tabular data — and they read as energetic, not crowded. Conversely, hero, closing, and statement slides intentionally drop to one or two huge display elements with massive negative space — the very-low and very-high density polarities are both deliberate. A typical content slide carries a section header + a grid of 3-6 cells, each holding a red numerical/title + a Libre Baskerville body paragraph + 3-6 Space Grotesk mono bullets. A typical statement slide carries one rotated red Shrikhand element occupying half the canvas with a single tagline below.\n\n**Key Characteristics:**\n- White (`{colors.bg}`) canvas alternating with off-white (`{colors.light}`) panels for striping, plus dark (`{colors.dark}`) and red (`{colors.red}`) full-bleed panel surfaces for statement moments.\n- Single tomato red (`{colors.red}`) as the only accent — used for every numerical figure, every section rule, every label, every left-bar marker.\n- Three-face stack: Shrikhand (display + numerical), Libre Baskerville (body), Space Grotesk (mono labels + bullets + chrome).\n- Display Shrikhand is routinely tilted (-6° to +2°) — the rotation is the system's signature movement.\n- Heavy ink borders: 3px on tabular grid containers, 1.5-2px on cells, 4px red on editorial leftbar cards, 1px hairlines between bullet rows.\n- Stacked text-shadow (three steps at 2/2, 4/4, 6/6 in decreasing ink opacity) on red display elements — the only shadow in the system.\n- Persistent red progress bar (5px thick) at the bottom edge of every slide.\n- Em-dash and bullet glyphs in red as list markers — never default disc bullets.\n- Hero compositions stack three Shrikhand lines at varying sizes with at least one in red and at least one tilted.\n- Footer links use Space Grotesk uppercase with a 2px red underline.\n\n## Colors\n\n### Palette\n\n- **Bg** (`{colors.bg}` — `#FFFFFF`): Pure white canvas. The default ground for most surfaces. Reads as fresh newsprint paper.\n- **Dark** (`{colors.dark}` — `#1C1410`): A deep brown-black with warm bias — not pure black. Used for every line of body text, every border, every Space Grotesk label, every Libre Baskerville paragraph, and as a full-bleed panel ground on roadmap-class surfaces. The warmth distinguishes it from generic editorial black.\n- **Red** (`{colors.red}` — `#D8000F`): Saturated tomato red. The system's single accent. Used for every numerical figure (Shrikhand red numerals are the most common element), every section eyebrow label, every leftbar rule on editorial cards, every list bullet glyph, every footer link underline, the persistent progress bar, and as a full-bleed panel ground on statement-class surfaces. Never used as body text color, never as a tint, never as a card fill without overlaid text.\n- **Light** (`{colors.light}` — `#F5F2EF`): Warm off-white. Used for alternating panel backgrounds inside pillar layouts (every other pillar swaps to off-white for vertical striping) and as the background of the hint-pill chrome. Subtly warmer than the white canvas — creates surface differentiation without disrupting the printed-paper register.\n\n### Defaults\n\n- **Default surface background**: `{colors.bg}` (white). For statement moments, switch to `{colors.red}` (full-bleed red panel). For roadmap-class moments, switch to `{colors.dark}`. For striping inside a pillar layout, alternate `{colors.bg}` and `{colors.light}`.\n- **Default headline / display color on white surfaces**: `{colors.dark}` for primary headlines, `{colors.red}` for numerical figures and stat-class display elements.\n- **Default headline color on red panels**: `{colors.bg}` (white) with the stacked text-shadow treatment.\n- **Default headline color on dark panels**: `{colors.bg}` (white). Numerical accents stay `{colors.red}`.\n- **Default body text color**: `{colors.dark}` on white/light surfaces, `{colors.bg}` (white) on dark/red surfaces with opacity 0.5-0.8 for tertiary content.\n- **Default eyebrow / label color**: `{colors.red}` on white surfaces (red Space Grotesk uppercase at 2-3px tracking), `{colors.dark}` for the smaller cell labels inside grids.\n- **Default leftbar rule color**: `{colors.red}`. The 4px (or 3px on dark surfaces) red left rule is the editorial card signature.\n- **Default border color for cells and grids**: `{colors.dark}`. There are no colored cell borders.\n- **Default bullet glyph color**: `{colors.red}`. Default disc bullets do not exist in this system; every list uses red em-dash or red round-bullet glyphs.\n\nThe system commits **hard** to the four-color palette. Don't introduce a fifth color (green for positive, blue for info, yellow for highlight). All emphasis is achieved by red, all body is dark on light, all inversion is white on red or white on dark. Categorical differentiation comes from positioning, label, and tilt — never from color.\n\n## Typography\n\n### Font Family Stack\nThe system runs three faces, each tightly bound to its role.\n\n**Shrikhand** (Google Fonts) is the display + numerical face. It's a single-weight (400) heavy slab-script with playful italic-leaning forms and narrow apertures — a face that reads as both old-world (postcard-script) and contemporary (variable-weight digital display). Used at every scale from 18px (inline stats) to 320px (the hero stat). Always weight 400 (the face has no other weights). Rotation is part of the face's voice — multiple Shrikhand elements per slide carry transforms ranging from -6° to +2°.\n\n**Libre Baskerville** (Google Fonts, 400 / 700 + italic) is the body face. A classical literary serif with high stroke contrast — used for every paragraph, every body cell, every metadata line, every cite, every close-sub. Set at 11-16px with 1.5-1.75 line-height, the face reads as comfortably editorial. The face's italic and bold weights are loaded but used sparingly — italic exists for inline emphasis, bold weight 700 is rarely needed since Shrikhand already handles all the heavy display work.\n\n**Space Grotesk** (Google Fonts, weights 400-700) is the metadata + chrome face. Used at 9-12px in uppercase with 2-3px letter-spacing for labels, eyebrows, slide counters, link text, card bullet bodies (when not using Libre Baskerville), and progress chrome. The wide-tracked uppercase treatment is the system's \"stamped metadata\" voice.\n\nThe roles are non-overlapping: Shrikhand handles every display moment and every numerical figure; Libre Baskerville handles every body paragraph and editorial text; Space Grotesk handles every uppercase label, bullet, and chrome element. Don't cross — Shrikhand body would be illegible; Libre Baskerville labels would look like book footnotes; Space Grotesk headlines would feel like a tech startup.\n\n### Typography Scale\n\n| Token | Size (clamp / px) | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.stat-big}` | 120–320px clamp | Shrikhand | 400 | Hero-class stat figure (always rotated -6°, always red) |\n| `{typography.hero-title-red}` | 84–260px clamp | Shrikhand | 400 | Red word in a multi-line hero stack (always rotated -4°) |\n| `{typography.close-big}` | 80–260px clamp | Shrikhand | 400 | Closing-statement title (always rotated -5°, always red) |\n| `{typography.hero-title}` | 72–220px clamp | Shrikhand | 400 | Top line of a hero stack (default no rotation) |\n| `{typography.hero-title-bottom}` | 64–200px clamp | Shrikhand | 400 | Bottom line of a hero stack (always rotated +2°) |\n| `{typography.section-header-lg}` | 36–72px clamp | Shrikhand | 400 | Large section header for financial / dense-data slides |\n| `{typography.section-header}` | 32–64px clamp | Shrikhand | 400 | Standard section header (summary, services, global, close) |\n| `{typography.pillar-num}` | 36–64px clamp | Shrikhand | 400 | Numeral atop a pillar panel (red) |\n| `{typography.cell-number-lg}` / `{typography.cell-number-md}` | 28–52px clamp | Shrikhand | 400 | Tabular cell numerical figure (always red) |\n| `{typography.stat-item-num}` | 28–56px clamp | Shrikhand | 400 | Inline supplementary stat numeral (dark color) |\n| `{typography.card-title}` | 22–36px clamp | Shrikhand | 400 | Service card title or global card title |\n| `{typography.card-title-sm}` | 20–32px clamp | Shrikhand | 400 | Smaller card title (global cards) |\n| `{typography.pillar-title}` | 18–28px clamp | Shrikhand | 400 | Pillar panel title |\n| `{typography.roadmap-title}` | 18–32px clamp | Shrikhand | 400 | Roadmap phase title (white on dark surface) |\n| `{typography.red-quote}` | 32–90px clamp | Shrikhand | 400 | Quote body on a red panel (white text + stacked shadow) |\n| `{typography.inline-stat}` | 18–28px clamp | Shrikhand | 400 | Inline mini-stat number (red) inside a body block |\n| `{typography.body}` | 13–16px clamp | Libre Baskerville | 400 | Standard body paragraph |\n| `{typography.body-card}` | 12–14px clamp | Libre Baskerville | 400 | Card body inside service/global cards |\n| `{typography.body-cell}` | 11–13px clamp | Libre Baskerville | 400 | Tabular cell body inside grids |\n| `{typography.body-small}` | 11–13px clamp | Libre Baskerville | 400 | Small body for summary highlights |\n| `{typography.hero-meta}` | 11–14px clamp | Libre Baskerville | 400 | Hero meta line above the title stack |\n| `{typography.red-cite}` | 13–16px clamp | Libre Baskerville | 400 | Citation under a red-panel quote (white text) |\n| `{typography.close-sub}` | 14–18px clamp | Libre Baskerville | 400 | Subtitle / contact line under a closing title |\n| `{typography.label-red}` / `{typography.tag-label}` | 10–12px | Space Grotesk | 600 | Section label (uppercase, 2-3px tracking, red) |\n| `{typography.label}` | 10px | Space Grotesk | 600 | Cell label inside grids (uppercase, 2px tracking, dark) |\n| `{typography.rm-label}` | 9px | Space Grotesk | 600 | Roadmap phase label (uppercase, 3px tracking, red) |\n| `{typography.bullet-body}` | 10–12px clamp | Space Grotesk | 400 | List bullet body inside cards and pillars |\n| `{typography.counter}` | 11px | Space Grotesk | 600 | Persistent slide counter |\n| `{typography.link}` | 10–12px clamp | Space Grotesk | 600 | Footer / closing link text (uppercase, 2px tracking) |\n| `{typography.fc-micro}` | 10px | Space Grotesk | 400 | Tiny micro-context line at the bottom of a tabular cell |\n\n### Defaults\n\n- **Default size for a hero or cover title**: `{typography.hero-title}` (72–220px) at the top of a stack, paired with `{typography.hero-title-red}` (84–260px, red, rotated -4°) on a second line and `{typography.hero-title-bottom}` (64–200px, rotated +2°) on a third line. The three-line stacked composition is the system's standard hero pattern.\n- **Default size for a primary section headline**: `{typography.section-header}` (32–64px). Always Shrikhand.\n- **Default size for a hero-class statistic**: `{typography.stat-big}` (120–320px) rotated -6°, always red.\n- **Default size for a tabular cell numeral**: `{typography.cell-number-md}` (28–52px) in red.\n- **Default size for body**: `{typography.body}` (13–16px) Libre Baskerville at line-height 1.75.\n- **Default size for a card body**: `{typography.body-card}` (12–14px) at line-height 1.6.\n- **Default size for a section eyebrow label**: `{typography.tag-label}` (10–12px) Space Grotesk weight 600 in red, uppercase, with 2-3px letter-spacing.\n- **Default size for a list bullet body**: `{typography.bullet-body}` (10–12px) Space Grotesk weight 400.\n- **Default weight for Shrikhand**: 400 — the face has no other weights.\n- **Default weight for Libre Baskerville body**: 400. Bold (700) is used only for inline emphasis inside body paragraphs.\n- **Default weight for Space Grotesk labels**: 600. Wide tracking is the system's label voice; weight 400 is for bullet bodies only.\n\nWhen unsure which display token to reach for, default to `{typography.section-header}` (32–64px) for a primary slide section opener. Reserve `{typography.stat-big}` for hero-stat moments and `{typography.hero-title}` triples for cover-class surfaces.\n\n### Signature Treatments\n\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every hero-class Shrikhand element is part of a multi-line stacked composition with at least one rotated line and at least one red line.** A single-line Shrikhand hero title without rotation or color contrast collapses into a generic display moment.\n- **Every tabular numerical cell figure is Shrikhand at the cell-number scale (28–52px) in `{colors.red}`.** Numerical cells in dark text break the system's hierarchy — red is the data signal.\n- **Every section eyebrow is Space Grotesk weight 600 in `{colors.red}`, uppercase, with 2-3px letter-spacing.** No exceptions. Eyebrows at any other tracking, weight, color, or case are not the system's eyebrow.\n- **Every statement-class Shrikhand element (stat-big, close-big) is rotated -5° to -6° in `{colors.red}`.** Untilted red Shrikhand at hero scale looks like a misplaced word — the tilt is the system's \"movement\" signal.\n- **Every red-panel display element carries the stacked text-shadow** (`2px 2px 0 rgba(28,20,16,0.25), 4px 4px 0 rgba(28,20,16,0.2), 6px 6px 0 rgba(28,20,16,0.15)`). Without the shadow, white Shrikhand on red reads as floating; with it, the text feels printed-and-pressed into the panel.\n- **Every list bullet uses a `{colors.red}` em-dash (—) or round-bullet (•) glyph** at position absolute left with a 12-14px padding-left on the body. Default disc bullets do not exist; the red marker is the system's list signal.\n- **Every Libre Baskerville body is at line-height ≥ 1.5 (preferably 1.6-1.75).** Tighter line-height collapses the editorial register.\n- **Every body strong (`<strong>`) inside a Libre Baskerville paragraph switches face to Space Grotesk weight 600.** The inline face-switch is the system's primary inline emphasis mechanism — a serif strong tag does not produce the same effect.\n\n### Typography Principles\n\nThe voice contrast is **chunky tilted display Shrikhand ↔ literary serif body ↔ wide-tracked mono labels**. Italic is rare (Libre Baskerville italic exists but is used only for inline emphasis inside body); underline is reserved for the red-underline footer link treatment. Bold within Libre Baskerville body is replaced by an inline face-switch to Space Grotesk weight 600 — the change-of-face is the emphasis signal.\n\nNumerical content (stat figures, financial values, percentage callouts, mini-stats) is always Shrikhand in red. Even small inline stats inside body cells become red Shrikhand. The numerical-as-display pattern is what gives the system its sports-magazine register.\n\n## Layout\n\n### Canvas System\nThe system targets `100vw × 100vh` per slide. Slides are absolutely positioned and animate in via opacity + translateY (30px) + scale (0.98 → 1) on 550ms ease. Only one slide is `.active` at a time. Default slide padding is `48px 56px` with major variations:\n- Hero slides: `5vh 7vw` top-padding, alignment shifted to top-left.\n- Roadmap slides: `40px 48px` to accommodate the dense two-column grid.\n- Pillars slides: `0` (the pillar columns provide their own internal padding).\n\n### Padding and Gap Scale\n\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide}` | 48px 56px | Default slide padding |\n| `{spacing.pad-cell}` | 22px 20px | Tabular cell internal padding (financial grid) |\n| `{spacing.pad-cell-sm}` | 20px 24px | Summary highlight cell padding |\n| `{spacing.pad-pillar}` | 32px 24px | Pillar column padding |\n| `{spacing.pad-card}` | 24px | Global card padding |\n| `{spacing.pad-roadmap}` | 40px 48px | Roadmap surface padding |\n| `{spacing.gap-grid-md}` | 24px 32px | Standard service/global grid gap (row × col) |\n| `{spacing.gap-grid-roadmap}` | 28px 36px | Roadmap two-column grid gap |\n| `{spacing.gap-grid-stats}` | 48px | Big stat row gap |\n| `{spacing.gap-stat-row}` | 20px | Vertical gap within a stat-item stack |\n\n### Persistent Chrome\nThree elements appear on every slide:\n- **Progress bar** at the bottom edge — a 5px thick `{colors.red}` strip that grows in width with slide index. The thickest, most visible piece of chrome; it functions as both progress indicator and bottom-edge poster trim.\n- **Slide counter** at bottom-right (`bottom: 18px right: 24px`) — Space Grotesk weight 600 uppercase NN / NN at 50% opacity.\n- **Hint pill** at bottom-center — Space Grotesk uppercase text in an off-white pill, opacity 0 by default, fading to 50% on `body:hover`.\n\n### Surface Variations\nThe deck cycles through five surface treatments:\n- **White content surfaces** — default, most slides.\n- **Off-white striped panels** — inside pillar layouts, alternating columns get `{colors.light}` background for vertical striping.\n- **Full-bleed red panel** — statement / quote slides flood the canvas in `{colors.red}` with white display text and the stacked text-shadow.\n- **Full-bleed dark panel** — roadmap-class surfaces use `{colors.dark}` ground with white text and red accents.\n- **Bordered tabular grids** — financial-figure and summary-highlight grids carry a 3px ink outer border + 1.5px ink inner cell borders, producing the system's signature double-border tabular composition.\n\n### Hero Stack Composition\nThe standard cover/hero pattern is a **three-line Shrikhand stack** where each line carries a different size and at least one carries rotation and at least one is in red. The stack reads top-left → bottom-right, with the smallest line at the bottom and the boldest red rotation in the middle. The composition is the system's most distinctive opener.\n\n## Depth and Elevation\n\n### No Cards, No Shadows (Mostly)\nThe system uses **almost no box-shadows**. Cards do not float off the surface via shadow. Depth comes from:\n- **Heavy borders** (3px outer + 1.5px inner double-border on tabular grids; 2px solid borders on global cards; 4px red left rules on editorial leftbar cards).\n- **Surface inversion** (full-bleed red or dark panels switch the entire surface).\n- **Tilted display elements** that break the grid alignment.\n\n### The Single Shadow Pattern (Stacked Text Shadow)\nThe only shadow in the entire system is the **stacked text-shadow on red display text on red panels**: three steps at 2/2, 4/4, 6/6 with decreasing-opacity ink fill (0.25, 0.20, 0.15). The shadow is applied via `text-shadow:` not `box-shadow:`. The effect is a printed-press feel — the text reads as having been stamped slightly off-register, three times. This treatment appears only on the red-quote and certain rotated Shrikhand display moments on red panels.\n\n### Border-as-Depth (Tabular Grid Signature)\nThe financial-grid and summary-highlight-grid patterns use a **3px solid ink outer border** with **1.5px solid ink inner cell borders** — the two border weights touch at every cell intersection, producing a printed-newsprint quality. This is the system's primary structural depth mechanism on data-heavy surfaces.\n\n### Leftbar Rules\nEditorial cards (service cards, roadmap phases, global cards) are marked by a **4px (or 3px on dark surfaces) red solid left border** with 16-18px padding-left. The leftbar rule signals \"this is a card\" without enclosing it — the card reads as cantilevered off the red rule. This is the system's most common card pattern.\n\n### Tilt as Depth\nRotated Shrikhand display elements break the horizontal baseline and create perceived dimensionality without using perspective. The standard rotations are -6° (stat-big), -5° (close-big), -4° (hero-title-red), +2° (hero-title-bottom). These tilts are part of the system's spatial language.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px** on everything except the hint-pill (4px) and the bar-track elements (none in this template, but if used should be 0px). Every card, every cell, every panel, every callout is a strict rectangle.\n- **4px** on the hint-pill only — a minor concession for the floating chrome.\n\nThe square-corner discipline is essential. Rounded cards immediately collapse the printed-poster feel into generic web aesthetic.\n\n### Border Weights\n- **5px solid `{colors.red}`** — used only on the persistent progress bar.\n- **4px solid `{colors.red}`** — used on the editorial leftbar card (service cards on white surfaces).\n- **3px solid `{colors.dark}`** — used on the outer border of tabular grids (financial-grid, summary-highlights) and as the vertical pillar separator.\n- **3px solid `{colors.red}`** — used on the leftbar of roadmap phase cards (on dark surfaces).\n- **2px solid `{colors.red}`** — used as the underline rule on footer links.\n- **2px solid `{colors.dark}`** — used as the outline border on global cards.\n- **1.5px solid `{colors.dark}`** — used on inner cells of tabular grids.\n- **1px solid `rgba(28, 20, 16, 0.08)`** — hairline-soft separator between bullet rows inside pillar panels.\n\nThe border ladder (1px-soft / 1.5px / 2px / 3px / 4px / 5px) is fixed. Every border is solid; dashed and dotted borders do not exist.\n\n### Decorative Element Types\n\n**Hero title stack** — A three-line Shrikhand composition at varying sizes with rotation and color contrast. The system's signature opener.\n\n**Red panel** — Full-bleed `{colors.red}` ground with white display text carrying the stacked text-shadow. Used for statement / quote moments.\n\n**Dark panel** — Full-bleed `{colors.dark}` ground with white text and red accents. Used for roadmap-class dense-data surfaces.\n\n**Tabular bordered grid** — 3px ink outer border + 1.5px ink inner cell borders producing a double-border tabular composition. Each cell holds a Shrikhand red numeral + Space Grotesk uppercase label + Libre Baskerville body paragraph + optional Space Grotesk micro line at bottom.\n\n**Red leftbar card** — A 4px solid red left rule with 18px left padding holding a Shrikhand card title + Libre Baskerville body + Space Grotesk red-bullet list. The system's primary editorial card pattern.\n\n**Pillar panel** — A vertical column inside a multi-pillar layout, separated by 3px ink vertical rules and alternating between white and off-white backgrounds. Each pillar holds a Shrikhand red numeral, Shrikhand title, Libre Baskerville lead, and Space Grotesk bullets separated by 1px hairline-soft rules.\n\n**Global card** — A 2px solid ink-bordered card with 24px padding holding a Space Grotesk red label + Shrikhand title + Libre Baskerville body + inline gc-stats row. Used on the global-presence surface.\n\n**Em-dash bullet** — A red em-dash glyph at position absolute left with 14px padding-left on the body. The system's primary list marker.\n\n**Round bullet** — A red round-bullet glyph at position absolute left with 12px padding-left on the body. Secondary list marker, used in card and pillar bullets.\n\n**Footer link** — Space Grotesk uppercase text with a 2px red underline and 4px padding-bottom. Hover swaps text color to red.\n\n**Stacked text shadow** — Three-step decreasing-opacity ink shadow applied to red display text on red panels. The system's only shadow treatment.\n\n**Tilted display** — Shrikhand elements rotated -6° to +2°. Used on hero-title-red, stat-big, close-big, and hero-title-bottom.\n\n## Do's and Don'ts\n\n### Do\n\n- Apply `{colors.bg}` (white) as the default canvas on most surfaces. Switch to `{colors.red}` for statement slides, `{colors.dark}` for dense-data slides, and alternate `{colors.bg}` / `{colors.light}` for vertical pillar striping.\n- Set every hero-class title as a multi-line Shrikhand stack with at least one rotated line and at least one red line. The composed-stack is the system's opener signature.\n- Use Shrikhand at every numerical-callout moment in `{colors.red}` — tabular cells, summary highlights, pillar numbers, inline mini-stats. Red Shrikhand numerals are the system's data voice.\n- Set every section eyebrow in Space Grotesk weight 600 uppercase with 2-3px letter-spacing in `{colors.red}`. The wide-tracked red label is the universal section opener.\n- Apply the stacked text-shadow to red display text on red panels. The three-step decreasing-opacity ink shadow is the system's only shadow and creates the printed-press feel.\n- Use the 4px red leftbar pattern (`{components.red-leftbar-card}`) for editorial cards. The cantilevered-off-the-rule treatment is the system's primary card pattern.\n- Build tabular grids with the double-border treatment: 3px ink outer border + 1.5px ink inner cell borders touching at intersections.\n- Render every list bullet with a red em-dash (`{components.bullet-em-dash}`) or red round-bullet (`{components.bullet-bullet}`) at position absolute left. Default disc bullets are forbidden.\n- Tilt Shrikhand statement elements (-5° to -6°) to create the system's signature movement. Untilted red statement display reads as misplaced.\n- Use Libre Baskerville at line-height 1.5-1.75 in `{colors.dark}` for every body paragraph. The literary editorial body is what makes the system feel printed.\n\n### Don't\n\n- Don't introduce a second accent color. Red is the only accent — green for positive, blue for info, yellow for highlight all break the single-accent discipline.\n- Don't round any corner on cards, panels, cells, or callouts. Square corners are non-negotiable; the only exception is the 4px hint-pill chrome.\n- Don't add drop shadows or blurred shadows. The system has zero box-shadows; the only shadow is the stacked text-shadow on red display text.\n- Don't substitute fonts. Shrikhand + Libre Baskerville + Space Grotesk is the trio. Replacing Shrikhand with any other display face collapses the entire identity.\n- Don't use Shrikhand for body or Libre Baskerville for labels. The three-face role discipline is non-negotiable.\n- Don't use default bullet points or disc list markers. Lists always use red em-dash or red round-bullet glyphs at position absolute left.\n- Don't omit the tilt on hero-class red Shrikhand elements. The rotation is the system's signature movement; untilted red display reads as flat.\n- Don't render headlines in red on white surfaces (except for stat-big, close-big, hero-title-red — the rotated statement elements). Most section headers are `{colors.dark}` Shrikhand, not red.\n- Don't tighten Libre Baskerville body line-height below 1.5. Tight body line-height collapses the literary register into something cramped.\n- Don't crowd a statement slide with cards or structural content. Statement surfaces (red panel, stat slide, close slide) deliberately reserve massive negative space around a single rotated red display element.\n\n## Responsive Behavior\n\nBold Poster is designed as a **1920×1080 presentation system**. Sizing uses CSS `clamp()` with `vw`-based mid values for display type, fixed `px` for borders and chrome, and `rem`-adjacent fixed values for cell padding. The system has a single responsive breakpoint at 768px for narrow viewports.\n\n### Scaling Behavior\n- Hero stat scales 120px → 320px on viewport width.\n- Hero titles scale 64px → 260px.\n- Section headers scale 32px → 72px.\n- Body scales 11px → 16px.\n- Borders (1px-soft / 1.5px / 2px / 3px / 4px / 5px) and rotation transforms are fixed and do not scale.\n\n### Mobile Breakpoint (max-width: 768px)\nA single `@media (max-width: 768px)` block restructures dense layouts for narrow viewports:\n- Slide padding shrinks from 48px × 56px to 32px × 24px.\n- Summary columns collapse from 2 → 1.\n- Summary highlights grid collapses from 3 → 1.\n- Financial grid collapses from 3 → 2.\n- Service grid collapses from 2 → 1.\n- Roadmap grid collapses from 2 → 1.\n- Pillars switch from horizontal flex-row to vertical flex-column; vertical separators become horizontal bottom borders.\n- Global grid collapses from 2 → 1.\n- Stat row stacks vertically.\n- Hero tagline shifts from absolute-positioned bottom-right to relative-positioned below the hero title stack.\n\nThe system is functional but not optimized for sub-768px portrait usage — it's designed for landscape presentation contexts.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, `Space`, `Enter`, or `PageDown`.\n- Slides reverse via `ArrowLeft`, `ArrowUp`, or `PageUp`.\n- Click on the right half of the viewport advances; click on the left half reverses.\n- Horizontal touch swipe with a 50px threshold advances/reverses.\n- Slide transitions are 550ms cubic-bezier `(0.22, 1, 0.36, 1)` with combined opacity, translateY (30px), and scale (0.98 → 1).\n- Progress bar at bottom edge animates to current slide percentage with a 500ms cubic-bezier ease.\n\n### Print Behavior\nThe system has no `@media print` rule. The transition is screen-only. For static export, screenshots of each slide preserve all rotation transforms and the stacked text-shadow (both are pure CSS).\n\n### Interactive States\n- Footer links swap text color from `{colors.dark}` to `{colors.red}` on hover.\n- The hint-pill fades from opacity 0 to 0.5 on `body:hover` via a 400ms ease.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / hero / stat / section header / numerical figures / card titles | Shrikhand 400 (heavy slab-script, rotated) | 思源宋体 Noto Serif SC 900 |\n| Body / body-card / body-cell / hero-meta / cite / close-sub | Libre Baskerville 400 (literary serif) | 思源宋体 Noto Serif SC 400 |\n| Label / bullet body / counter / link / micro chrome | Space Grotesk 400–600 (uppercase, 2–3px tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use **思源宋体 Noto Serif SC** for both display and body (weight 900 for display, weight 400 for body — visual hierarchy comes from weight, size, color, and rotation, not face contrast). Use **思源黑体 Noto Sans SC** weight 500 for the small uppercase chrome (labels, bullet bodies, counter, links). 思源宋体 ships Latin glyphs that pair cleanly with Chinese characters; for mixed display moments, 思源宋体 weight 900 will render both 中文 and Latin in the same heavy serif voice.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (already close to Libre Baskerville 1.75; keep at 1.8 for CJK), display 1.1–1.25 (up from the very tight 0.82–0.9 used on Shrikhand). Display at 0.82 collides vertically in CJK; open to 1.0 minimum.\n- **Letter-spacing**: set to 0 on every CJK run. The template's 1px positive tracking on hero-title and the 2–3px tracking on Space Grotesk labels both read as gappy on square CJK glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every Space Grotesk label, tag-label, rm-label, counter, and link uses `text-transform: uppercase` in the Latin original; remove for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `1970 米兰式海报` not `1970米兰式海报`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style — let it handle mixed sentences in display and body. Don't let the browser fall back to Shrikhand or Libre Baskerville mid-word for ASCII characters.\n\n### Aesthetic Notes for This System\n\nThe system's identity rests on **Shrikhand's chunky slab-script personality + rotation + saturated red**. Shrikhand is the most distinctive single decision in this template — and it has no Chinese equivalent. 思源宋体 weight 900 carries weight and editorial register but loses the playful italic-leaning slab character entirely. Compensate by **leaning harder on the non-typographic signatures**: keep all rotations intact (-6° on stat-big, -5° on close-big, -4° on hero-title-red, +2° on hero-title-bottom), keep the stacked text-shadow on red-panel display, keep the saturated tomato red as the only accent, keep the 3px + 1.5px double-border tabular grids, keep the red leftbar cards, keep the red em-dash bullet markers. The rotation, red, and printed-newsprint structural language survive the face swap.\n\nThe system's three-face role discipline (Shrikhand display / Libre Baskerville body / Space Grotesk chrome) collapses to a two-face system in CJK: 思源宋体 for everything Latin-serif, 思源黑体 for everything Latin-mono. The body-vs-display contrast becomes pure weight (400 vs 900) plus color (dark vs red). For inline `<strong>` emphasis inside body, switch from 思源宋体 400 to 思源黑体 600 — the change-of-face is what signals emphasis in the Latin original, and the serif-to-sans swap preserves the same logic in CJK.\n\n### Known CJK Gap\n\n- **No exact online CJK match for Shrikhand's slab-script personality.** The face is Italian-sports-magazine display script with chunky terminals and playful italic forms — there is no Chinese equivalent on Google Fonts, Adobe Fonts, or cn-fontsource. 思源宋体 weight 900 gives heft and editorial register but reads as serious rather than playful. The rotation transforms and saturated red carry the playful-sports-magazine voice on their own; don't drop the tilts when translating to CJK.\n- **No CDN Chinese monospace face for the chrome voice.** Space Grotesk's role (uppercase tracked labels, slide counter, footer links with red underline) depends on the uppercase + 2–3px tracking treatment. 思源黑体 weight 500–600 at 0 tracking is the closest match but loses the \"stamped metadata\" signal. The red color and 1–2px border treatments on tags/links do most of the chrome-recognition work in a CJK build.\n- **Libre Baskerville's classical literary register has no exact Chinese counterpart.** 思源宋体 reads as institutional-modern rather than 19th-century-literary. For projects that need the literary-quarterly voice specifically (long body paragraphs in essays or manifestos), consider 霞鹜文楷 LXGW WenKai instead of 思源宋体 — it carries a hand-written/calligraphic warmth closer to Baskerville's editorial personality.\n\n## Iteration Guide\n\n1. Any new content slide starts with a Shrikhand section header at `{typography.section-header}` (32–64px) in `{colors.dark}`, optionally preceded by a Space Grotesk red eyebrow label.\n2. Any new nume\n\n<!-- [TRUNCATED AT 50KB] -->\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/bold-poster/preview.md (Tokens: ~1060 | Category: anthropic-skill) -->\n# Bold Poster Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/bold-poster/design.md`\n- Preview card: `bold-template-pack/templates/bold-poster/preview.md`\n\n## Selection Metadata\n\n- Slug: `bold-poster`\n- Tagline: Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent.\n- Mood: bold, editorial, loud, confident\n- Tone: dramatic, graphic, sharp, intentional\n- Formality: medium\n- Density: low\n- Scheme: light\n- Best for: Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews. Excellent any time you want a few words to feel like a poster — including unexpected fits like a tech keynote or a finance manifesto that wants to be quotable.\n- Avoid for: Decks that need to communicate dense information per slide — the layout is built around a few large statements, not paragraphs of detail.\n\n## Visual Snapshot\n\nA populist editorial poster system that mashes vintage Italian sports-magazine display lettering with classical serif body and tight monospace metadata. The display face is Shrikhand — a heavy slab/script hybrid with playful italic personality — rendered at poster scale (often 200-320px) and routinely tilted off-axis. Body runs Libre Baskerville for a literary editorial register; Space Grotesk handles tiny uppercase labels and chrome. The palette is uncompromising: white canvas, deep brown-black ink (#1C1410), single saturated tomato red (#D8000F), and a warm off-white (#F5F2EF) for alternating panels. Borders are bold 1.5-3px ink rules; the only shadow is a single stacked offset behind red display text. The aesthetic is loud, confident, and unmistakably print-poster — closer to a 1970s European brand annual report or a wine merchant's catalogue than a contemporary slide deck.\n\nBold Poster is a populist editorial poster system that lifts its visual vocabulary from vintage Italian sports magazines, mid-century European brand annual reports, and wine-merchant catalogues. The premise is that every slide should feel printed — set in heavy display type, locked to one strong red accent, on a white or off-white sheet, with grids ruled in ink and decoration kept to a strict minimum.\n\n## Preview Ingredients\n\n- Palette: bg #FFFFFF; dark #1C1410; red #D8000F; light #F5F2EF\n- Typography: See full design doc after selection.\n- Signature move: White ({colors.bg}) canvas alternating with off-white ({colors.light}) panels for striping, plus dark ({colors.dark}) and red ({colors.red}) full-bleed panel surfaces for statement moments.\n- Signature move: Single tomato red ({colors.red}) as the only accent — used for every numerical figure, every section rule, every label, every left-bar marker.\n- Signature move: Three-face stack: Shrikhand (display + numerical), Libre Baskerville (body), Space Grotesk (mono labels + bullets + chrome).\n- Signature move: Display Shrikhand is routinely tilted (-6° to +2°) — the rotation is the system's signature movement.\n- Signature move: Heavy ink borders: 3px on tabular grid containers, 1.5-2px on cells, 4px red on editorial leftbar cards, 1px hairlines between bullet rows.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/design.md (Tokens: ~9742 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Broadside\ndescription: A protest-poster editorial system built on massive Barlow type and a single fire-orange environment color. The aesthetic is \"ink on fire\" — dark slides for documentation, orange slides for declaration. Display type is enormous (13vw, roughly 187px at 1440 width) in weight 900 lowercase, treating words as graphic elements rather than reading copy. The cultural reference is broadside printing, SPACE10 reports, and Wim Crouwel grids reinterpreted with one loud color and zero decoration.\n\ncolors:\n  ink-black: \"#111111\"\n  ink-black-alt: \"#1A1A18\"\n  fire-orange: \"#E85D26\"\n  cream: \"#F0ECE5\"\n  cream-muted: \"#888880\"\n  cream-hint: \"#505048\"\n  border-dark: \"#282826\"\n  ink-on-orange-muted: \"rgba(17, 17, 17, 0.75)\"\n  ink-on-orange-hint: \"rgba(17, 17, 17, 0.55)\"\n  ink-on-orange-faint: \"rgba(17, 17, 17, 0.40)\"\n  ink-on-orange-border: \"rgba(17, 17, 17, 0.20)\"\n\ncolor-aliases:\n  c-bg: ink-black\n  c-bg-alt: ink-black-alt\n  c-bg-light: ink-black            # Broadside collapses \"light\" → dark; there are no cream slides\n  c-bg-orange: fire-orange\n  c-fg: cream\n  c-fg-2: cream-muted\n  c-fg-3: cream-hint\n  c-accent: fire-orange\n  c-border: border-dark\n\ntypography:\n  display:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"13vw\"\n    fontWeight: 900\n    lineHeight: 0.88\n    letterSpacing: -0.04em\n  h1:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"7.5vw\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.03em\n  h2:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"4.5vw\"\n    fontWeight: 700\n    lineHeight: 1.1\n    letterSpacing: -0.02em\n  h3:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"2.8vw\"\n    fontWeight: 600\n    lineHeight: 1.2\n  lead:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"1.6vw\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"1.2vw\"\n    fontWeight: 400\n    lineHeight: 1.6\n  caption:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"0.9vw\"\n    fontWeight: 400\n    lineHeight: 1.5\n  label:\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontSize: \"0.72vw\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  stat-value:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"5.5vw\"\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.04em\n  quote-mark:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"10vw\"\n    fontWeight: 900\n    lineHeight: 0.6\n  quote-text:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"3.8vw\"\n    fontWeight: 700\n    lineHeight: 1.15\n    letterSpacing: -0.02em\n  fadelist-item:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"7.5vw\"\n    fontWeight: 900\n    lineHeight: 1\n    letterSpacing: -0.03em\n  fadelist-title:\n    fontFamily: \"Barlow, Noto Sans SC, sans-serif\"\n    fontSize: \"10.5vw\"\n    fontWeight: 900\n    lineHeight: 0.9\n    letterSpacing: -0.04em\n\nspacing:\n  pad-x: \"5.5vw\"\n  pad-y: \"5.5vh\"\n  gap-lg: \"3.5vh\"\n  gap-md: \"2vh\"\n  gap-sm: \"1vh\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\nmotion:\n  ease-slide: \"cubic-bezier(0.77, 0, 0.175, 1)\"\n  dur-slide: \"0.8s\"\n  ease-enter: \"cubic-bezier(0.16, 1, 0.3, 1)\"\n  dur-enter: \"0.5s\"\n\ncomponents:\n  slide-chrome:\n    layout: \"flex row, justify space-between\"\n    paddingBottom: \"{spacing.gap-sm}\"\n    borderBottom: \"1px solid {colors.border-dark}\"\n    marginBottom: \"{spacing.gap-md}\"\n    description: \"Top chrome bar carrying section label on left, slide number/meta on right. Suppressed on cover, chapter, quote, and end slides.\"\n  slide-foot:\n    layout: \"flex row, justify space-between\"\n    paddingTop: \"{spacing.gap-sm}\"\n    borderTop: \"1px solid {colors.border-dark}\"\n    marginTop: \"{spacing.gap-md}\"\n    description: \"Bottom chrome bar, mirrors top chrome. Same suppression rules.\"\n  rule:\n    width: 36px\n    height: 2px\n    background: \"{colors.fire-orange}\"\n    description: \"Stub accent rule. On orange slides this flips to {colors.ink-black}.\"\n  rule-full:\n    width: \"100%\"\n    height: 2px\n    background: \"{colors.border-dark}\"\n  kicker:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.fire-orange}\"\n    description: \"Eyebrow above headlines. Orange on dark; dark-ink-at-55%-opacity on orange.\"\n  tag:\n    fontFamily: \"{typography.label.fontFamily}\"\n    fontSize: \"{typography.label.fontSize}\"\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    color: \"{colors.fire-orange}\"\n    border: \"1px solid {colors.fire-orange}\"\n    padding: \"0.3em 0.8em\"\n    description: \"Bordered mono tag. On orange slides flips to dark ink with 40%-opacity dark border.\"\n  broadside-num:\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontSize: \"1.1vw\"\n    fontWeight: 500\n    letterSpacing: 0.1em\n    color: \"rgba(17, 17, 17, 0.45)\"\n    description: \"Catalogue-style slide number, typically anchored top-left on orange slides. On dark slides, color shifts to {colors.cream-hint}.\"\n  stat-card:\n    borderTop: \"1px solid {colors.border-dark}\"\n    padding: \"{spacing.gap-md} {spacing.gap-md} {spacing.gap-md} 0\"\n    description: \"Top-border-only data card. Big orange numeral above body label above mono note.\"\n  bullet-marker:\n    content: \"/\"\n    color: \"{colors.fire-orange}\"\n    fontFamily: \"IBM Plex Mono, monospace\"\n    fontWeight: 700\n    description: \"Slash glyph rendered via ::before on every bullet item. Orange on dark, dark-at-45%-opacity on orange.\"\n  compare-panel-left:\n    paddingRight: \"calc({spacing.pad-x} * 0.55)\"\n    borderRight: \"1px solid {colors.border-dark}\"\n  compare-panel-right:\n    paddingLeft: \"calc({spacing.pad-x} * 0.55)\"\n  compare-panel-orange:\n    background: \"{colors.fire-orange}\"\n    description: \"Right-half panel filled with fire orange — the 'after' or payoff side in compare layouts.\"\n  bar-track:\n    height: \"30vh\"\n    borderLeft: \"1px solid {colors.border-dark}\"\n    description: \"Vertical bar chart container. Bars are cream-hint by default; one bar per chart gets the .accent class for fire orange.\"\n  bar-fill:\n    background: \"{colors.cream-hint}\"\n  bar-fill-accent:\n    background: \"{colors.fire-orange}\"\n  img-placeholder:\n    height: \"55vh\"\n    background: \"rgba(255, 255, 255, 0.04)\"\n    border: \"1px dashed {colors.border-dark}\"\n    textTransform: uppercase\n    letterSpacing: 0.12em\n    description: \"Dashed-border placeholder shown when no image is wired. Same 55vh footprint as a real img.\"\n  fadelist-stack:\n    description: \"Vertical stack of three display-weight words, opacities 1.0 / 0.5 / 0.22 top-to-bottom. The SPACE10 'before/during/after' treatment.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nBroadside is a **protest-poster editorial system**. The defining premise: type is so large it stops behaving as text and starts behaving as graphic primitive. Display sizes at `13vw` (`{typography.display}`) put a single word at roughly 187px on a 1440-wide screen — wide enough that the eye scans letterforms before reading. This is the system's primary expressive instrument.\n\nThe typeface stack is monolithic. **Barlow** carries every text role from `{typography.display}` down to `{typography.body}` — there is no serif companion, no script accent, no secondary display face. The expressive range is achieved entirely through weight (400 to 900) and size, not face contrast. **IBM Plex Mono** is the only secondary face and it appears only in chrome: slide numbers, kickers, labels, tags, captions, and the bullet-list slash markers. **Noto Sans SC** sits in every font-family stack as the CJK fallback at matching weights. The voice is uniform, heavy, and lowercase — *Broadside does not use uppercase headlines.* That is a meaningful inversion of the brutalist norm.\n\nThe palette functions in two distinct registers. The **dark register** uses near-black canvas `{colors.ink-black}` with cream text `{colors.cream}` and `{colors.fire-orange}` as the singular accent — the orange is used only for emphasis (kickers, accent stats, bullet markers, the leading bar). The **orange register** flips the relationship entirely: `{colors.fire-orange}` becomes the full slide background, and the same dark `#111111` ink is used for headlines and body. There is no light/cream slide variant — the `.light` class is intentionally aliased to dark in the source. Cover and chapter slides default to the orange register; content slides default to dark.\n\nDepth is **flat**. There are no drop shadows, no elevation tokens, no soft surfaces. Hierarchy is constructed entirely from type weight, type size, and 1px hairline dividers. The `slide-chrome` and `slide-foot` borders, the `stat-card` top borders, and the `compare-panel` divider are the system's only depth signals. Everything sits on a single plane.\n\n**Density philosophy: low to medium.** Broadside is built for negative space. A correctly composed slide pairs one massive display moment with a 1–2 line caption and nothing else. Bullet lists are explicitly capped at three items — the system prizes density of impact over density of information. A slide that feels broken in this system is one where four columns of body copy compete for attention; the correct density is one statement, one rule, breathing room. Cover, chapter, and quote slides take this furthest, suppressing chrome entirely and leaving the type alone in the field.\n\n**Key Characteristics:**\n- Massive Barlow display type at weight 900 in **lowercase** — never uppercase on display elements.\n- Two-register color system: dark slides with cream text, or orange slides with dark ink. No cream/white slides exist.\n- `{colors.fire-orange}` is both accent (on dark) and environment (on orange) — never a secondary color, always *the* color.\n- Single-typeface system on Barlow + IBM Plex Mono for chrome only. No serif, no script, no third face.\n- 1px hairline dividers (`{colors.border-dark}` on dark; `rgba(17,17,17,0.2)` on orange) provide all hierarchy structure.\n- Mono kickers, mono tags, mono catalogue numbers — the chrome voice is always IBM Plex Mono uppercase.\n- Bullet lists use `/` glyph in mono as the marker, capped at three items per list.\n- Flat plane — no shadows, no rounded surfaces, no gradient backgrounds.\n- `{spacing.pad-x}` of 5.5vw + `{spacing.pad-y}` of 5.5vh creates a generous frame; type fills the remaining space.\n\n## Colors\n\n### The Two Registers\nBroadside operates on a binary surface system. Every slide is either **dark** (near-black background, cream text, orange as singular accent) or **orange** (fire-orange background, dark-ink text, dark-ink as the muted-emphasis tone). There is no cream/paper register — the `.light` class is aliased to dark in the source. Choose one register per slide and commit to it.\n\n### Palette\n- **Ink Black** (`{colors.ink-black}` — #111111): The dark register's primary canvas, and the primary text color on orange slides. Slightly softer than pure black but reads as black. This is the universal \"ink\" of the system.\n- **Ink Black Alt** (`{colors.ink-black-alt}` — #1A1A18): A secondary surface for the dark register, used when a region needs to feel slightly raised from the base canvas without breaking the flat plane.\n- **Fire Orange** (`{colors.fire-orange}` — #E85D26): The signature. On dark slides it is the accent — kickers, accent stat values, bullet markers, the leading bar in a chart, the orange opening quote mark. On orange slides it is the entire environment. Saturation is high but the hue is warm rather than electric; it reads as protest poster, not safety vest.\n- **Cream** (`{colors.cream}` — #F0ECE5): Primary text color on dark slides. Warm off-white, never pure white — the warmth softens the dark canvas and signals an editorial register.\n- **Cream Muted** (`{colors.cream-muted}` — #888880): Secondary text on dark slides — supporting body, sub-headings, the muted half of a comparison.\n- **Cream Hint** (`{colors.cream-hint}` — #505048): Tertiary text on dark — chart axis labels, source notes, slide numbers when not in mono context.\n- **Border Dark** (`{colors.border-dark}` — #282826): The 1px divider color on dark slides. Barely visible against the canvas; provides structure without drawing attention.\n- **Ink-on-orange overlays**: Dark ink at four opacities (75% / 55% / 40% / 20%) for body, hint, label, and border treatments on orange slides. These are the orange register's \"muted\" equivalents.\n\n### Defaults\n- **Default surface for content slides**: `{colors.ink-black}` (dark register).\n- **Default surface for cover, chapter, statement-payoff, and section-divider slides**: `{colors.fire-orange}` (orange register).\n- **Default headline color on dark surfaces**: `{colors.cream}`.\n- **Default headline color on orange surfaces**: `{colors.ink-black}`.\n- **Default body text color on dark surfaces**: `{colors.cream}`.\n- **Default body text color on orange surfaces**: `rgba(17, 17, 17, 0.75)`.\n- **Default accent color on dark surfaces**: `{colors.fire-orange}` — used for kickers, accent stat values, bullet markers, the lead bar in a chart, and the opening quote mark.\n- **Default accent color on orange surfaces**: `{colors.ink-black}` — the dark ink itself becomes the contrast pop.\n- **Default chrome border color**: `{colors.border-dark}` on dark; `rgba(17, 17, 17, 0.2)` on orange.\n\nThe orange register has no third color. When emphasis is needed on an orange slide, use weight or opacity contrast on the existing ink, not a new hue. Introducing a second accent color breaks the system.\n\n## Typography\n\n### Font Family\nThe system is monolingual on **Barlow** (with Noto Sans SC as the CJK fallback for identical role coverage). Every display, heading, lead, body, and caption token uses Barlow. The only secondary face is **IBM Plex Mono**, which is reserved entirely for chrome: slide numbers, kickers, tags, labels, captions in chart axes, bullet-list markers, image captions, and source notes. The contrast between Barlow's tight grotesque density and IBM Plex Mono's even monospace is the system's secondary typographic rhythm; the primary rhythm is Barlow's own weight and size axis.\n\nItalic is not used. Underline is not used. The only emphasis mechanisms are weight, size, and color (orange accent on dark, or weight-only on orange).\n\n### Display, Heading, and Body Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | 13vw | Barlow | 900 | Cover-scale display — the single dominant element on a slide where type *is* the composition |\n| `{typography.fadelist-title}` | 10.5vw | Barlow | 900 | Oversized side-of-stage display in a fadelist composition |\n| `{typography.quote-mark}` | 10vw | Barlow | 900 | The opening quotation glyph on a pull-quote slide |\n| `{typography.h1}` | 7.5vw | Barlow | 800 | Chapter or section-opener title |\n| `{typography.fadelist-item}` | 7.5vw | Barlow | 900 | Each stacked word in a three-stage fadelist treatment |\n| `{typography.stat-value}` | 5.5vw | Barlow | 900 | Large data figure inside a stat card |\n| `{typography.h2}` | 4.5vw | Barlow | 700 | Primary slide headline |\n| `{typography.quote-text}` | 3.8vw | Barlow | 700 | Pull-quote body |\n| `{typography.h3}` | 2.8vw | Barlow | 600 | Sub-headline or panel title inside a comparison |\n| `{typography.lead}` | 1.6vw | Barlow | 400 | Lead paragraph, list items, prominent supporting copy |\n| `{typography.body}` | 1.2vw | Barlow | 400 | Standard body paragraph |\n| `{typography.caption}` | 0.9vw | Barlow | 400 | Image caption, footnote, source line |\n| `{typography.label}` | 0.72vw | IBM Plex Mono | 500 | Chrome labels, kickers, tags, mono notes |\n\n### Defaults\n- **Default size for a primary content slide headline**: `{typography.h2}` (4.5vw).\n- **Default size for a cover or chapter title**: `{typography.h1}` (7.5vw).\n- **Default size for the single declarative display moment on a statement slide**: `{typography.display}` (13vw).\n- **Default size for paragraph body**: `{typography.body}` (1.2vw); for the lead paragraph immediately following a headline, `{typography.lead}` (1.6vw).\n- **Default size for any inline chrome element (label, kicker, tag, slide number, axis label)**: `{typography.label}` (0.72vw).\n- **Default size for a hero numerical figure inside a stat card**: `{typography.stat-value}` (5.5vw).\n- **Default weight for any Barlow display moment (h2 and above)**: 700+; for the largest display, 900.\n- **Default weight for body**: 400.\n\nWhen unsure, reach for `{typography.h2}` for the slide's primary text moment. `{typography.h1}` is reserved for chapter/section openers; `{typography.display}` for the rare moment where type is the entire composition.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **All Barlow display, heading, lead, and body text is set in sentence case (or true title case for proper nouns).** Uppercase Barlow at display weights does not exist in this system — it reads as a different design language entirely. The lowercase-display choice is the most distinctive single decision in Broadside.\n- **All IBM Plex Mono chrome text is uppercase with at least 0.1em letter-spacing.** Mono labels, kickers, tags, slide numbers, axis labels, source notes, and bullet markers are always uppercase. The uppercase/lowercase split between Barlow body and mono chrome is the system's primary case rhythm.\n- **All display tokens carry negative letter-spacing.** `{typography.display}` and `{typography.stat-value}` at -0.04em; `{typography.h1}` and `{typography.fadelist-title}` at -0.03em or -0.04em; `{typography.h2}` and `{typography.quote-text}` at -0.02em. Barlow at display weight without negative tracking reads as untreated.\n- **All Barlow display elements run at weight 700, 800, or 900 — never lighter.** Lighter Barlow at display sizes loses the broadside density.\n- **On orange slides, every Barlow display/h1/h2/h3 element is forced to `{colors.ink-black}`.** This is the \"ink on fire\" rule — cream-colored headlines on orange do not exist.\n- **Every bulleted list item carries the orange `/` mono marker via `::before`.** Bullet discs, dashes, or numerals do not exist in this system.\n- **Every kicker is uppercase IBM Plex Mono at `{typography.label}` size in `{colors.fire-orange}`** (or dark-ink-at-55%-opacity on orange).\n\n### Typography Principles\nThe weight-900 + lowercase + negative-tracking + Barlow combination is the system's voice. Substituting uppercase, switching to weight 600, or removing the negative tracking each reads as a different system. The chrome's IBM Plex Mono uppercase + 0.14em-tracking is similarly inseparable.\n\nLine-height collapses at scale: `{typography.display}` runs at 0.88, `{typography.h1}` at 0.9, `{typography.h2}` at 1.1, and only by `{typography.lead}` does it open to 1.5+. The compression at the top of the scale is what makes the display feel monolithic.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Slides sit side-by-side in a horizontal `#deck` flexbox; navigation translates the deck container horizontally rather than swapping `display`. All sizes are viewport-relative (`vw` / `vh`) — there is no fixed 1920×1080 grid.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-x}` | 5.5vw | Outer horizontal padding on every slide |\n| `{spacing.pad-y}` | 5.5vh | Outer vertical padding on every slide |\n| `{spacing.gap-lg}` | 3.5vh | Large vertical spacing between major blocks |\n| `{spacing.gap-md}` | 2vh | Standard spacing between sibling elements |\n| `{spacing.gap-sm}` | 1vh | Tight spacing — kicker to headline, chrome bar inner gap |\n\nThe padding is deliberately tighter than a generic editorial system. Broadside's massive type needs the slide's edge to feel close, not distant — the type is supposed to crowd the frame.\n\n### Chrome Frame\nThe system has an optional chrome frame consisting of two horizontal hairline bars: a top `slide-chrome` bar (label left, slide number right) and a bottom `slide-foot` bar (mirror). Both are 1px solid borders in `{colors.border-dark}` on dark slides, or `rgba(17, 17, 17, 0.2)` on orange. Internal padding/margin uses `{spacing.gap-sm}` and `{spacing.gap-md}`.\n\nThe chrome is **suppressed entirely** on the system's \"declarative\" slide types — cover, chapter, statement, quote, and end. Those slides remove all chrome and let the type occupy the whole field. Content slides (split, stats, list, compare, chart, diagram) keep the chrome.\n\nA separate `broadside-num` element (mono, ~1.1vw, low-opacity) may also be placed independently of the chrome bar as a catalogue-style slide number anchored at the top-left of orange cover/chapter slides.\n\n## Depth and Elevation\n\n### Flat Plane (Only Technique)\nBroadside is entirely flat. There are no drop shadows, no inner shadows, no blurred elevations, no rounded surface gradients. Every element sits on a single plane.\n\nHierarchy is constructed from:\n- **Type weight + size contrast** — the dominant signal.\n- **1px hairline dividers** — `slide-chrome`/`slide-foot` borders, `stat-card` top borders, `compare-panel` dividers, `bar-track` left border, `chart-baseline` baseline.\n- **Color shift** — orange against ink, ink against cream, cream-muted against cream.\n- **Negative space** — generous padding and intentional empty regions.\n\nIntroducing a `box-shadow`, a card with elevation, or a soft gradient breaks the system. The flatness is the editorial signal.\n\n## Shapes and Treatment\n\n### Border Radius\nBorder radius is **0px everywhere** except `nav-dot` (50% — the tiny navigation circles at the bottom). Cards, panels, tags, image placeholders, stat cards, chart bars — all rectangles with sharp corners.\n\n### Border Weights\n- **1px solid** — the only structural weight. Used on `slide-chrome`, `slide-foot`, `stat-card` top, `compare-panel` divider, `bar-track` left edge, `chart-baseline`, image captions, the `rule.full` divider.\n- **1px dashed** — used only on `img-placeholder` to signal \"no image wired\".\n- **2px solid** — used only on the small `rule` accent stub (36px wide) and the `chapter-rule` mark.\n\nAll borders are either `{colors.border-dark}` (dark slides), `rgba(17, 17, 17, 0.2)` (orange slides), or `{colors.fire-orange}` (the tag border on dark slides).\n\n### Decorative Element Types\n\n**Stub accent rule** — A 36×2px solid bar in `{colors.fire-orange}` (on dark) or `{colors.ink-black}` (on orange). Used as a visual \"section break\" mark above a chapter title, above a stat, or beside a kicker. Functions as Broadside's only ornament.\n\n**Mono catalogue number** — A small IBM Plex Mono numeral anchored top-left on cover/chapter slides at low opacity (`rgba(17, 17, 17, 0.45)` on orange, `{colors.cream-hint}` on dark). Reads as a publication catalogue mark.\n\n**Stat card** — A top-border-only data block: 1px solid border on top, no other borders, padded body containing `{typography.stat-value}` (large orange numeral on dark; dark ink on orange) above `{typography.body}` (label) above `{typography.caption}` (mono note in `{colors.cream-hint}` or dark-faint).\n\n**Compare panel pair** — Two equal-width panels divided by a 1px vertical border. The right panel may optionally be filled with `{colors.fire-orange}` (`compare-panel-orange`) as the \"after\" / payoff side; the left panel remains transparent over the dark canvas.\n\n**Vertical bar chart** — A `bar-track` container with `border-left` only (no other axes), bars dropping from the top with `cream-hint` fill, one bar per chart carrying the `.accent` class for fire orange. Axis labels in mono uppercase below the baseline.\n\n**Fadelist** — A SPACE10-style composition: three stacked Barlow-900 words at descending opacity (1.0 / 0.5 / 0.22) paired with one oversized display title on the opposite side of the slide. Used for \"before / during / after\" or \"past / present / future\" narratives.\n\n**Pull quote** — An oversized fire-orange `{typography.quote-mark}` glyph (with line-height 0.6 so it sits on the baseline rather than below), followed by `{typography.quote-text}` capped at ~78% of the column width, followed by a two-line `quote-attr` with name above mono role/affiliation.\n\n**Bordered mono tag** — A small inline pill in IBM Plex Mono uppercase with a 1px solid border, padded 0.3em vertical × 0.8em horizontal. The border and text are both `{colors.fire-orange}` on dark; dark ink at 40% opacity on orange.\n\n## Do's and Don'ts\n\n### Do\n- Set every Barlow display, heading, lead, and body element in sentence case. Lowercase display is Broadside's most distinctive single choice.\n- Use IBM Plex Mono uppercase at 0.1em+ tracking for every chrome element: slide numbers, kickers, labels, tags, axis labels, source notes, bullet markers.\n- Make `{colors.fire-orange}` the singular accent on dark slides — kickers, accent stat values, bullet `/` markers, the leading chart bar, the opening quote mark, the `rule` stub.\n- Make orange the *full background* on cover, chapter, and declarative-payoff slides. Use it as environment, not just accent, on those slide types.\n- Cap bullet lists at three items. Broadside prizes density of impact over density of information.\n- Apply negative letter-spacing on every Barlow display moment — -0.04em on the largest, -0.02em on h2.\n- Use 1px hairline borders (`{colors.border-dark}` on dark, `rgba(17,17,17,0.2)` on orange) for all structural division. They are the system's only hierarchy chrome.\n- Suppress slide-chrome and slide-foot on cover, chapter, statement, quote, and end slides — let the type breathe edge-to-edge.\n- Place the `broadside-num` catalogue number top-left on orange cover/chapter slides as a publication-style mark.\n- Use the `/` mono glyph in fire orange as the bullet marker on every list item.\n\n### Don't\n- Don't uppercase Barlow at display or heading weights. Uppercase Barlow at 13vw reads as a different design system entirely.\n- Don't introduce a second accent color. Orange is *the* color — adding a blue, yellow, or green accent breaks the protest-poster identity.\n- Don't add drop shadows, blurred elevations, or rounded surfaces. Broadside is strictly flat — depth comes from type and 1px lines.\n- Don't use cream-colored text on orange slides. The \"ink on fire\" rule is absolute: orange slides use `{colors.ink-black}` for headlines and body.\n- Don't pair Barlow with a serif companion. The single-typeface monolith is part of the identity.\n- Don't use border-radius on cards, tags, panels, or stat blocks. The only round shapes in the system are the small nav dots.\n- Don't pack more than one display moment into a slide. Broadside is for one statement, one rule, breathing room — not magazine-style layered composition.\n- Don't render chrome elements in Barlow. Chrome is exclusively IBM Plex Mono uppercase.\n- Don't introduce a third surface register. There are two: dark and orange. A cream/paper slide does not exist.\n- Don't use italic or underline. Emphasis is achieved through weight, size, or orange color only.\n\n## Responsive Behavior\n\nThis is a viewport-fluid 1920×1080 presentation system that uses `vw`/`vh` units throughout. There are no fixed pixel breakpoints. Every typography token, padding value, and component dimension scales linearly with the viewport.\n\n### Scaling Behavior\n- Display headline (`{typography.display}`) scales from ~138px at 1066-wide viewports to ~250px at 1920-wide.\n- Body text (`{typography.body}`) scales from ~13px to ~23px across the same range.\n- Outer padding (`{spacing.pad-x}` 5.5vw) scales from ~59px to ~106px.\n- All borders are fixed at 1px or 2px and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, `Space`, or `PageDown`.\n- Slides reverse via `ArrowLeft`, `ArrowUp`, or `PageUp`.\n- Navigation translates the deck container horizontally with a `cubic-bezier(0.77, 0, 0.175, 1)` ease at 0.8s.\n- Per-element entry animations (`data-anim=\"fade-up\"`, `fade-in`, `reveal-right`, `reveal-left`, `scale-in`) replay every time a slide becomes `.is-active`, staggered by `data-delay` (0 through 6).\n- Nav dots at bottom-center, mono slide counter at bottom-right.\n\n### Print / Export\nNot explicitly handled by the source. Each slide is a `100vw × 100vh` block; export workflows should target 1920×1080 PNG/PDF per slide.\n\n## CJK & International Content\n\nWhen using this template for Chinese (or other CJK) content, swap the Latin typeface stack for an equivalent Chinese pairing and apply universal CJK adjustments. All recommended Chinese fonts load via CDN — no install required.\n\n### Recommended Chinese Pairing\n\n| Role | Latin (default) | Chinese counterpart |\n|---|---|---|\n| Display / h1 / h2 / h3 / stat-value / quote / fadelist | Barlow 700–900 (lowercase, negative tracking) | 思源宋体 Noto Serif SC 900 |\n| Lead / body / caption | Barlow 400 | 霞鹜文楷 LXGW WenKai 400 |\n| Label / kicker / tag / slide number / bullet marker | IBM Plex Mono 500 (uppercase, 0.14em tracking) | 思源黑体 Noto Sans SC 500 (no transform, no tracking) |\n\n### Mixed-Content Strategy\n\n**Strategy A** — single CJK family per role with Latin glyph coverage built in. Use **思源宋体 Noto Serif SC** weight 900 for every display and heading role; use **霞鹜文楷 LXGW WenKai** weight 400 for body and lead text; use **思源黑体 Noto Sans SC** weight 500 for chrome (kickers, labels, slide numbers, bullet markers). All three faces ship Latin glyphs that pair cleanly with Chinese characters. The serif/handwritten/sans contrast loosely echoes Broadside's display/body/mono distinction even though the source uses Barlow throughout.\n\n### Loading\n\nAdd to the template's `<head>`:\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700;900&family=Noto+Sans+SC:wght@400;500&family=LXGW+WenKai+TC&display=swap\" rel=\"stylesheet\">\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: increase by ~15–25% from the Latin spec. Body 1.75–1.85 (up from 1.6), display 1.15–1.25 (up from the very tight 0.88–0.9 used on Barlow display). The Latin template compresses display to 0.6 on the quote-mark token; at that compression CJK characters overlap entirely. Open display to 1.0 minimum.\n- **Letter-spacing**: set to 0 on every CJK run. The template's −0.02 to −0.04em negative tracking on Barlow display overlaps CJK strokes; the +0.14em positive tracking on IBM Plex Mono chrome reads as gappy on square glyphs.\n- **Text transform**: don't apply `uppercase` to Chinese text — CJK has no case. Every IBM Plex Mono label, kicker, tag, slide number, and bullet marker uses `text-transform: uppercase` in the Latin original; remove for CJK runs.\n- **Punctuation**: use full-width Chinese punctuation （，。：；！？「」（））.\n- **No period on display headlines**: Chinese typography convention omits trailing 。 on display-scale headlines. Especially important for Broadside's massive display moments — a trailing 。 at 13vw is visually disruptive.\n- **Space between CJK and Latin (盘古之白)**: insert an ASCII space between every Chinese character and adjacent Latin character or digit. Write `2024 大字海报` not `2024大字海报`.\n- **One font per sentence**: 思源宋体 covers both CJK and Latin glyphs in a unified serif style for display; 霞鹜文楷 covers both for body. Don't let the browser fall back to Barlow mid-word for ASCII characters in a Chinese sentence.\n\n### Aesthetic Notes for This System\n\nBroadside's most distinctive single decision is **lowercase Barlow at weight 900 at 13vw display sizes**. The lowercase-display choice is what separates this system from generic brutalist decks. In CJK that signal disappears entirely — Chinese has no case. The system compensates because its identity is **80% structural + color**: the two-register surface system (dark / orange), the singular fire-orange accent, the flat plane, the 1px hairline dividers, the `/` mono bullet markers, the suppressed chrome on declarative slides, and the negative-space-as-composition philosophy all transfer cleanly.\n\nThe closest Chinese face to Barlow's \"monolithic heavy grotesque\" register is **思源宋体 weight 900** — but a serif heavy display rather than a sans heavy display. This is a deliberate register shift: heavy Chinese serif at protest-poster scale reads as \"broadside printed-poster\" (the system's actual cultural reference) more credibly than heavy Chinese sans, which reads more \"corporate signage.\" For the body face, **霞鹜文楷 LXGW WenKai** brings a handwritten/calligraphic warmth that pairs with the editorial-protest register; if a more institutional body is needed, swap to 思源宋体 400.\n\nKeep the chrome's \"stamped metadata\" voice by maintaining the small font size (0.72vw equivalent) and the orange color on kickers/labels. The IBM Plex Mono uppercase + tracked treatment loses both signals in CJK, but the orange color carries enough chrome-recognition on its own. The `/` bullet marker can stay as a Latin slash character even in Chinese contexts — it's a graphic mark, not a language element.\n\n### Known CJK Gap\n\n- **No CDN Chinese face matches Barlow's monolithic grotesque + lowercase identity.** Barlow's distinctive choice in this system is lowercase-display at heavy weights — and CJK has no equivalent expressive lever. The system's \"protest-poster lowercase-shouting\" character softens to \"heavy-serif declarative.\" The two-register color system (dark / orange) and the singular fire-orange accent carry the protest-poster identity on their own.\n- **No CDN Chinese monospace face for the chrome voice.** IBM Plex Mono's role (kickers, labels, slide numbers, `/` bullet markers) depends on monospaced rhythm + uppercase + 0.14em tracking. 思源黑体 weight 500 at 0 tracking is the closest match but loses the \"catalogue mark\" signal. Keep the orange color and the small font size; the color and scale do the chrome-recognition work.\n- **霞鹜文楷 may not load on restricted networks.** The Google Fonts CDN serves the Traditional Chinese variant (LXGW WenKai TC) reliably; the Simplified variant is also available via cn-fontsource. Always include `'Noto Serif SC', serif` in the body stack as fallback.\n- **The quote-mark glyph at 10vw with line-height 0.6 is a Latin-quote convention.** Chinese typography uses 「」 or 『』 framing rather than oversized opening-quote glyphs. For Chinese pull-quotes, consider replacing the oversized fire-orange quote-mark with a full-width 「 character at 8vw, or dropping the decorative quote glyph entirely and relying on the orange color + larger size to signal \"this is a quoted passage.\"\n\n## Iteration Guide\n\n1. Every new content slide opens with a `kicker` in mono uppercase fire orange, followed by `{typography.h2}` headline in Barlow lowercase. Don't skip the kicker — it is the system's content-slide chrome signal.\n2. Every cover, chapter, statement-payoff, or end slide uses the orange register. Don't use orange for content/data slides — orange is for declaration moments.\n3. New stat cards use the `stat-card` top-border-only pattern with `{typography.stat-value}` in orange (on dark) or ink (on orange). Don't bottom-border or fully-border stat cards.\n4. New bullet lists use the `/` mono marker in fire orange. Cap at three items.\n5. New charts use the `bar-track` vertical-bar pattern with one accent bar per chart in fire orange; remaining bars in `{colors.cream-hint}`.\n6. New quotes use the oversized fire-orange `{typography.quote-mark}` opening glyph, followed by `{typography.quote-text}` at max 78% width.\n7. Headlines on orange slides are always `{colors.ink-black}`. There are no cream headlines on orange.\n8. New tags use `tag` styling: 1px fire-orange border + fire-orange mono uppercase text on dark; dark-ink at 40% opacity on orange.\n9. The system has nine canonical layout patterns — cover, chapter, statement, split, stats, quote, list, compare, end — plus fadelist, chart, and diagram extensions. New layouts should respect the chrome/no-chrome rule based on whether the slide is declarative or content-bearing.\n\n## Known Gaps\n\n- Broadside's `.light` slide class is intentionally overridden to dark — the source comments confirm \"there are no cream/white slides.\" Any attempt to use `.light` will fall back to the dark register.\n- Noto Sans SC is in every font stack as the CJK fallback but the system was not designed with mixed Latin/CJK headlines in mind; line-height behavior on CJK display sizes may need per-slide adjustment.\n- The bullet marker glyph (`/`) is set in IBM Plex Mono via `::before` — replacing it with a different glyph requires editing CSS, not markup.\n- The bar chart `bar-fill` heights are inline-styled via `style=\"height: NN%\"` in the source; there is no data-binding layer.\n- The fadelist and bar-chart layouts are not in the canonical \"9 layout patterns\" comment block; they are extensions added beyond the documented system.\n- Image placeholders use a dashed `{colors.border-dark}` border and a mono uppercase label — replace with a real `<img src>` at the same 55vh height to maintain layout.\n- The `c-fg-light` token exists in the palette (`#111111`) for \"light theme primary text\" but since the light theme is suppressed, this token is effectively unused in the rendered output.\n- The system loads three Google Fonts families (Barlow, IBM Plex Mono, Noto Sans SC) with multiple weights — initial render requires successful font load to avoid Times New Roman fallback.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/broadside/preview.md (Tokens: ~962 | Category: anthropic-skill) -->\n# Broadside Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/broadside/design.md`\n- Preview card: `bold-template-pack/templates/broadside/preview.md`\n\n## Selection Metadata\n\n- Slug: `broadside`\n- Tagline: Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack.\n- Mood: editorial, dramatic, loud, newspaper\n- Tone: graphic, punchy, literary, considered\n- Formality: medium-high\n- Density: medium\n- Scheme: dark\n- Best for: Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements. Also a striking pick for tech, research, or business decks that want a dramatic single-accent editorial feel.\n- Avoid for: Decks that need to feel quiet, warm, or institutionally traditional — the dark canvas with fire-orange accent commits to drama.\n\n## Visual Snapshot\n\nA protest-poster editorial system built on massive Barlow type and a single fire-orange environment color. The aesthetic is \"ink on fire\" — dark slides for documentation, orange slides for declaration. Display type is enormous (13vw, roughly 187px at 1440 width) in weight 900 lowercase, treating words as graphic elements rather than reading copy. The cultural reference is broadside printing, SPACE10 reports, and Wim Crouwel grids reinterpreted with one loud color and zero decoration.\n\nBroadside is a protest-poster editorial system. The defining premise: type is so large it stops behaving as text and starts behaving as graphic primitive. Display sizes at 13vw ({typography.display}) put a single word at roughly 187px on a 1440-wide screen — wide enough that the eye scans letterforms before reading. This is the system's primary expressive instrument.\n\n## Preview Ingredients\n\n- Palette: ink-black #111111; ink-black-alt #1A1A18; fire-orange #E85D26; cream #F0ECE5; cream-muted #888880; cream-hint #505048; border-dark #282826\n- Typography: Barlow; IBM Plex Mono; {typography.label.fontFamily}\n- Signature move: Massive Barlow display type at weight 900 in lowercase — never uppercase on display elements.\n- Signature move: Two-register color system: dark slides with cream text, or orange slides with dark ink. No cream/white slides exist.\n- Signature move: {colors.fire-orange} is both accent (on dark) and environment (on orange) — never a secondary color, always *the* color.\n- Signature move: Single-typeface system on Barlow + IBM Plex Mono for chrome only. No serif, no script, no third face.\n- Signature move: 1px hairline dividers ({colors.border-dark} on dark; rgba(17,17,17,0.2) on orange) provide all hierarchy structure.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/design.md (Tokens: ~10335 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Capsule\ndescription: A playful editorial system built on pill-shaped containers, a sun-bleached cream canvas, and a nine-color candy palette. Bodoni Moda serif headlines pair with Space Grotesk body to suggest a literary magazine that took a holiday at a 1970s ice-cream parlor. Every container that holds text is a pill (border-radius 9999px) outlined with a 2px ink stroke, casting a soft 6–12px offset shadow. The aesthetic is \"Memphis-meets-editorial\" — confident typography, generous bordered shapes, and decorative floating pills as atmospheric wallpaper.\n\ncolors:\n  cream: \"#F5F5F0\"\n  ink: \"#1A1A1A\"\n  outline: \"#1E1E1E\"\n  white: \"#FFFFFF\"\n  coral: \"#E85D4E\"\n  lime: \"#C4D94E\"\n  lavender: \"#C5B5E0\"\n  sky: \"#8BB4F7\"\n  violet: \"#A06CE8\"\n  yellow: \"#F2D160\"\n  peach: \"#F5B895\"\n  mint: \"#A8E6CF\"\n  shadow: \"rgba(26, 26, 26, 0.08)\"\n\ncolor-aliases:\n  bg: cream\n  fg: ink\n  outline: outline                  # same hue family as ink; reserved for stroke role\n\ntypography:\n  display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(3rem, 8vw, 7rem)\"\n    fontWeight: 800\n    lineHeight: 0.9\n    letterSpacing: -0.02em\n  closing-display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2.5rem, 6vw, 5rem)\"\n    fontWeight: 800\n    lineHeight: 0.95\n    letterSpacing: -0.03em\n  headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2rem, 4vw, 3.5rem)\"\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.02em\n  section-headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 700\n    lineHeight: 1.05\n    letterSpacing: -0.01em\n  quote-display:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(1.6rem, 3.5vw, 3rem)\"\n    fontWeight: 600\n    lineHeight: 1.35\n    letterSpacing: -0.01em\n  card-headline:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 700\n    lineHeight: 1.1\n  stat-number:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"clamp(2rem, 3.5vw, 3rem)\"\n    fontWeight: 800\n    lineHeight: 1\n    letterSpacing: -0.03em\n  orbit-numeral:\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"2.5rem\"\n    fontWeight: 700\n    lineHeight: 1\n  body:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.2vw, 1.15rem)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-sm:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.9rem\"\n    fontWeight: 400\n    lineHeight: 1.55\n  subtitle:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"clamp(0.8rem, 1.5vw, 1.1rem)\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  pill-text-md:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  pill-text-sm:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.7rem\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  label:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  mini-label:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: \"0.65rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 0.08em\n    textTransform: uppercase\n\nspacing:\n  pad-lg: \"3rem 4rem\"\n  pad-md: \"2rem\"\n  gap-xl: \"4rem\"\n  gap-lg: \"3rem\"\n  gap-md: \"2rem\"\n  gap-sm: \"1.5rem\"\n  gap-xs: \"0.75rem\"\n  card-pad: \"2.5rem 2rem\"\n  pill-pad-lg: \"1.5rem 3.5rem\"\n  pill-pad-md: \"1rem 2.5rem\"\n  pill-pad-sm: \"0.4rem 1.2rem\"\n  pill-pad-xs: \"0.35rem 1rem\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  pill:\n    borderRadius: 9999px\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontWeight: 500\n    letterSpacing: 0.02em\n    whiteSpace: nowrap\n    description: \"The universal container shape. Any text container — chip, button, label, statement-highlight, stat tile, card, bar — is a pill with 2px outline. Background can be any palette accent or white.\"\n  pill-card:\n    background: \"{colors.white}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: \"2rem\"\n    padding: \"{spacing.card-pad}\"\n    boxShadow: \"8px 8px 0 {colors.shadow}\"\n    description: \"Larger pill-shaped card (slightly squared corners at 2rem rather than full pill) for content blocks. Always white background, always shadowed.\"\n  stat-pill:\n    background: \"{colors.white}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: \"2rem\"\n    padding: \"2rem 1.5rem\"\n    boxShadow: \"6px 6px 0 {colors.shadow}\"\n    description: \"Stat tile — pill-shaped white card containing a colored stat number, label, and a tiny accent bar.\"\n  bar-track:\n    height: 36px\n    background: \"{colors.cream}\"\n    border: \"2px solid {colors.outline}\"\n    borderRadius: 9999px\n    overflow: hidden\n    description: \"Horizontal bar chart track shaped as a pill. Fills use the candy palette.\"\n  bar-fill:\n    height: \"100%\"\n    borderRadius: 9999px\n    borderRight: \"2px solid {colors.outline}\"\n    description: \"Inner bar pill with the value label printed at right edge inside the fill.\"\n  accent-line:\n    width: 60px\n    height: 4px\n    background: \"{colors.coral}\"\n    borderRadius: 9999px\n    description: \"Pill-shaped 60×4 accent rule. Default color coral; closing-context variant uses 80×4.\"\n  card-icon:\n    width: 60px\n    height: 60px\n    borderRadius: \"50%\"\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 700\n    description: \"Circular pill icon (60px) used as a card mark. Background is an accent color; contains a 1–3 character Roman numeral or letter.\"\n  step-node:\n    width: 56px\n    height: 56px\n    borderRadius: \"50%\"\n    border: \"2px solid {colors.outline}\"\n    background: \"{colors.white}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"1.3rem\"\n    fontWeight: 700\n    boxShadow: \"4px 4px 0 {colors.shadow}\"\n    description: \"Circular pill node (56px) used as a timeline step or sequence marker. Step accent color appears as filled-pill class on the node.\"\n  orbit-center:\n    width: 160px\n    height: 160px\n    borderRadius: \"50%\"\n    background: \"{colors.lime}\"\n    border: \"2px solid {colors.outline}\"\n    fontFamily: \"Bodoni Moda, serif\"\n    fontSize: \"2.5rem\"\n    fontWeight: 700\n    description: \"Large circular pill (160px) used as the gravitational anchor of an orbit composition. Default fill lime; small satellite pills orbit around it.\"\n  diagram-node:\n    borderRadius: 9999px\n    border: \"2px solid {colors.outline}\"\n    padding: \"1rem 2rem\"\n    boxShadow: \"6px 6px 0 {colors.shadow}\"\n    background: \"{colors.white}\"\n    description: \"Flow-diagram node — pill-shaped container with shadow. Connected by 50×4 ink connectors with triangular arrowheads.\"\n  diagram-connector:\n    width: 50px\n    height: 4px\n    background: \"{colors.outline}\"\n    description: \"Solid 50×4 ink bar with a triangular arrowhead at the right end, connecting two diagram nodes inline.\"\n  visual-frame:\n    borderRadius: \"2rem\"\n    border: \"2px solid {colors.outline}\"\n    boxShadow: \"12px 12px 0 {colors.shadow}\"\n    description: \"Large image/illustration frame — slightly squared pill (2rem radius) with thicker 12px offset shadow. Often filled with a tri-stop linear gradient and a dot-pattern overlay.\"\n  grain-overlay:\n    position: fixed\n    inset: 0\n    pointerEvents: none\n    zIndex: 9999\n    opacity: 0.04\n    mixBlendMode: multiply\n    backgroundImage: \"fractalNoise SVG\"\n    description: \"Subtle film-grain noise overlay applied to the entire viewport at 4% opacity in multiply blend mode. Always present, never absent.\"\n  radial-glow:\n    description: \"Soft radial gradient wash anchored to a corner or center of a slide background. Uses one of the candy palette colors at 6–15% opacity, blended into the cream canvas. Provides atmospheric warmth without changing the surface color.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCapsule is a **playful editorial system** whose defining structural premise is the **pill**: every text container is a pill, every icon is a pill, every bar is a pill, every node in a diagram is a pill. The `border-radius: 9999px` rule applies to virtually all UI elements, with larger panels softening to a 2rem radius. Combined with the 2px ink outline that wraps every shape, the result is a system where containers feel inflated, friendly, and graphically distinct — a nod to Memphis design and late-70s ice-cream-parlor signage without abandoning editorial discipline.\n\nThe typeface stack is a deliberate two-face conversation. **Bodoni Moda** — a high-contrast didone serif — carries every display moment, every section headline, every stat numeral, every card title, every quote. Bodoni's tall capitals and thin-thick stroke contrast give the headlines their editorial weight and a touch of fashion-magazine glamour. **Space Grotesk** — a contemporary geometric sans — carries every body paragraph, every label, every pill text, every subtitle. The serif/grotesk pairing creates the system's primary typographic rhythm: glamorous serif statements + clean grotesk supporting structure.\n\nThe palette runs nine colors plus three neutrals. The canvas is `{colors.cream}` — a warm sun-bleached off-white that signals \"magazine paper\" rather than \"screen white.\" The ink is `{colors.ink}`, used for body text, headlines, and the universal outline. The seven candy accents — `{colors.coral}`, `{colors.lime}`, `{colors.lavender}`, `{colors.sky}`, `{colors.violet}`, `{colors.yellow}`, `{colors.peach}`, plus `{colors.mint}` — are interchangeable. They fill pills, color stat numbers, fill bar charts, and float as decorative atmosphere. There is no semantic mapping: no color means \"warning,\" none means \"success.\" Each accent is chosen for compositional balance, not meaning.\n\nDepth comes from **soft hard-offset shadows** at 4px, 6px, 8px, and 12px in a low-opacity ink color (`{colors.shadow}` = `rgba(26, 26, 26, 0.08)`). Unlike a true brutalist shadow, these are slightly transparent — they read as \"lifted\" rather than \"stamped.\" Combined with the 2px outline, every pill feels like it's floating just above the cream canvas. There is no use of blurred drop shadows; the offset is always solid, always to the bottom-right.\n\n**Density philosophy: medium-high atmospheric.** Capsule slides feel populated. The system is built around the idea that decorative floating pills should orbit the actual content as wallpaper — small colored pills tilted at 5–25° rotations across the slide background, each containing a single uppercase word. These atmospheric pills are non-functional; they are typographic confetti. A correctly composed slide pairs one or two substantive content blocks (a pill-card, a stat grid, a diagram) with 5–8 floating decorative pills around the edges. A slide that feels broken in Capsule is one with empty corners or unrelieved cream space — the candy palette wants to participate even where the content doesn't strictly require it.\n\n**Key Characteristics:**\n- Universal pill geometry — `border-radius: 9999px` for small containers, 2rem for larger cards/frames.\n- 2px solid `{colors.outline}` stroke wraps every pill, icon, and card.\n- Bodoni Moda serif for every display/headline/stat; Space Grotesk sans for every body/label/pill text.\n- Sun-bleached cream canvas `{colors.cream}` with soft radial glows in candy accent colors at 6–15% opacity for background atmosphere.\n- Hard-offset shadows in low-opacity ink (`{colors.shadow}`) at 4/6/8/12px offsets, always solid, always bottom-right.\n- Nine-color candy accent palette used interchangeably — no semantic mapping.\n- Decorative floating pills tilted at 5–25° rotations populate slide backgrounds as atmospheric wallpaper.\n- A persistent fractal-noise grain overlay (4% opacity, multiply blend) sits over the entire viewport at all times.\n- Full-screen vertical nav-dot column at right, mono slide counter at bottom-right.\n\n## Colors\n\n### Canvas & Ink\n- **Cream** (`{colors.cream}` — #F5F5F0): The canvas. Warm sun-bleached off-white. Used as default slide background, default bar-track interior, and any neutral region that wants paper warmth without being pure white.\n- **Ink** (`{colors.ink}` — #1A1A1A): The primary text color. Used for headlines, body, and (under the alias `outline`) the universal stroke.\n- **Outline** (`{colors.outline}` — #1E1E1E): Functionally identical to ink; reserved as the stroke color on every pill, card, icon, and frame for semantic clarity.\n- **White** (`{colors.white}` — #FFFFFF): True white. Used as the default fill for pill-cards, stat-pills, diagram nodes, and any pill that needs the highest contrast against the cream canvas. White pills always carry the 2px ink outline.\n\n### Candy Accents\n- **Coral** (`{colors.coral}` — #E85D4E): Warm orange-red. The most \"voice-y\" of the accents; used as a default accent-line color, default pill-card icon fill on the first card in a sequence, and the most frequent stat-number color.\n- **Lime** (`{colors.lime}` — #C4D94E): Vivid chartreuse-green. Pairs well with coral; default fill for orbit-center anchors and frequent stat-number color.\n- **Lavender** (`{colors.lavender}` — #C5B5E0): Soft lilac-purple. Used as a calming pill fill in headers and as a frequent quote-highlight color.\n- **Sky** (`{colors.sky}` — #8BB4F7): Mid-saturation cornflower blue. The default \"third accent\" — sits comfortably next to coral and lime in a 3-card grid.\n- **Violet** (`{colors.violet}` — #A06CE8): Deeper purple. Used when a slide already has lavender as one accent and needs a second purple-family pop.\n- **Yellow** (`{colors.yellow}` — #F2D160): Warm marigold. The default fill for title pills, closing pills, and any pill that should read as \"important / featured.\"\n- **Peach** (`{colors.peach}` — #F5B895): Pale apricot. The softest accent; used in floating decorative pills and circular decorative spots.\n- **Mint** (`{colors.mint}` — #A8E6CF): Pale aqua-green. Used most often inside the linear-gradient visual frame and in lower-emphasis decorative pills.\n- **Shadow** (`{colors.shadow}` — `rgba(26, 26, 26, 0.08)`): The universal soft hard-offset shadow color. Never use a different shadow color.\n\n### Defaults\n- **Default slide surface**: `{colors.cream}`.\n- **Default headline color**: `{colors.ink}` — Bodoni serif headlines are always ink, never colored. Color appears only on stat numerals and inside accent pills.\n- **Default body text color**: `{colors.ink}` rendered at opacity 0.6–0.7 to soften it against the cream canvas.\n- **Default outline color**: `{colors.outline}` (≈ ink) — 2px on every pill/card/icon, no exceptions.\n- **Default card fill**: `{colors.white}`.\n- **Default accent-line color**: `{colors.coral}`.\n- **Default title-pill fill**: `{colors.yellow}`.\n- **Default closing-pill fill**: `{colors.yellow}`.\n- **Default orbit-center fill**: `{colors.lime}`.\n- **Default first accent in a 3- or 4-accent sequence**: coral → lime → sky → violet (rotated when more colors are needed). The sequence is the system's \"Roy G. Biv\"; it gives the agent a deterministic order to reach for so the candy palette doesn't feel random.\n- **Default decorative pill background opacity**: full saturation (no fading). The floating pills are loud on purpose.\n\nAccent colors have no semantic role. Choose accents based on warm/cool balance and adjacency, not meaning. When three accents appear together, pair a warm (coral/yellow/peach) with a cool (sky/lavender/violet/mint) with a neutral-bright (lime). Avoid placing two same-family accents adjacent (two purples, two greens, two warms).\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face conversation**: `Bodoni Moda` (serif, weights 400–900, opsz axis) carries every display and headline; `Space Grotesk` (sans, weights 300–700) carries every body, label, and pill text. There is no third face. Both families are loaded from Google Fonts at variable-axis weights.\n\nBodoni Moda's high contrast and didone modulation give the system its editorial-glamour register; the thin-thick stroke contrast is most pronounced at large sizes, so display weights should always be 700+ to maintain stroke presence. Space Grotesk's geometric grotesque carries clean, modern body — it never tries to compete with the Bodoni headlines.\n\nAn inline `<em>` inside a Bodoni headline keeps Bodoni and shifts to italic. A `quote-highlight` inside a Bodoni quote body switches the wrapped word to a pill (Space Grotesk uppercase pill text on a candy fill) for visual emphasis.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3rem, 8vw, 7rem) | Bodoni Moda | 800 | Largest cover/title display |\n| `{typography.closing-display}` | clamp(2.5rem, 6vw, 5rem) | Bodoni Moda | 800 | Conclusive declarative headline |\n| `{typography.headline}` | clamp(2rem, 4vw, 3.5rem) | Bodoni Moda | 700 | Primary slide headline on split or two-column layouts |\n| `{typography.section-headline}` | clamp(1.8rem, 3.5vw, 3rem) | Bodoni Moda | 700 | Section-opening or centered headline above cards/charts |\n| `{typography.quote-display}` | clamp(1.6rem, 3.5vw, 3rem) | Bodoni Moda | 600 | Pull-quote body |\n| `{typography.card-headline}` | 1.5rem | Bodoni Moda | 700 | Card or pillar-block title |\n| `{typography.stat-number}` | clamp(2rem, 3.5vw, 3rem) | Bodoni Moda | 800 | Large numerical stat figure |\n| `{typography.orbit-numeral}` | 2.5rem | Bodoni Moda | 700 | Centered ordinal inside the orbit-center circle |\n| `{typography.body}` | clamp(0.95rem, 1.2vw, 1.15rem) | Space Grotesk | 400 | Paragraph body |\n| `{typography.body-sm}` | 0.9rem | Space Grotesk | 400 | Compact body inside a card |\n| `{typography.subtitle}` | clamp(0.8rem, 1.5vw, 1.1rem) | Space Grotesk | 400 | Uppercase tracked subtitle below a display headline |\n| `{typography.pill-text-md}` | 0.85rem | Space Grotesk | 600 | Text inside title/closing pills |\n| `{typography.pill-text-sm}` | 0.7rem | Space Grotesk | 600 | Text inside small floating decorative pills |\n| `{typography.label}` | 0.75rem | Space Grotesk | 500 | Header tag pills, attribution lines |\n| `{typography.mini-label}` | 0.65rem | Space Grotesk | 500 | Mini-pill chips in a tag cluster |\n\n### Defaults\n- **Default size for the primary section headline**: `{typography.section-headline}` (clamp 1.8–3rem). For two-column or split layouts, `{typography.headline}` (clamp 2–3.5rem).\n- **Default size for a cover or opening display moment**: `{typography.display}` (clamp 3–7rem).\n- **Default size for paragraph body**: `{typography.body}` (clamp 0.95–1.15rem).\n- **Default size for any inline label or chip**: `{typography.label}` (0.75rem).\n- **Default weight for any Bodoni display element**: 700 minimum; 800 for the largest display.\n- **Default weight for any Space Grotesk body element**: 400.\n- **Default size for a hero stat figure**: `{typography.stat-number}` (clamp 2–3rem).\n\nWhen unsure, reach for `{typography.section-headline}` for the slide's primary text moment, not `{typography.card-headline}` (which is for block-level titles within a card).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every display, headline, stat-number, card-headline, and quote-display element is set in Bodoni Moda.** Space Grotesk does not appear in any display role.\n- **Every body, subtitle, pill-text, label, and chip element is set in Space Grotesk.** Bodoni does not appear in body or chip roles.\n- **Every Bodoni display element uses negative letter-spacing** (-0.01em to -0.03em). Bodoni at large sizes with default tracking reads loose.\n- **Every Space Grotesk subtitle, label, pill-text, and chip element is uppercase with 0.08em+ tracking.** The uppercase + tracking is the small-text identity signal.\n- **Bodoni headlines are always rendered in `{colors.ink}`, never in a candy color.** Color appears on stat numerals (e.g., `color: {colors.coral}`) but not on serif headlines. The exception is the orbit-center numeral, which sits inside a colored circular pill but the numeral itself remains ink.\n- **Every pill element carries the 2px solid outline.** A pill without its 2px ink stroke breaks the system.\n- **Every container with `border-radius: 9999px` or `2rem` carries either the 2px outline or sits inside an already-outlined parent.** Unoutlined rounded containers do not exist.\n- **Every card or elevated pill carries a hard-offset shadow** at 4/6/8/12px in `{colors.shadow}`. Smaller pills get 4–6px; cards get 8px; visual frames get 12px.\n\n### Typography Principles\nThe Bodoni-headline + Space-Grotesk-body pairing is the primary rhythm; switching either face breaks the system. Italic appears only inside pull-quote bodies via the `<em>` tag (Bodoni italic). Underline is not used. Pill-encapsulation is the system's primary emphasis mechanism: wrapping a phrase in a candy-filled pill is the equivalent of bold-italicizing it in a traditional editorial system.\n\nLine-height tightens at scale: `{typography.display}` at 0.9, `{typography.headline}` at 1.05, body at 1.6. The tight display + open body contrast is what gives the system its editorial breathing rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport, with one slide carrying `.active` (opacity 1) at a time. Transitions are 0.6s opacity fades via `cubic-bezier(0.4, 0, 0.2, 1)`. All sizes use rem units inside CSS `clamp()` so the layout scales fluidly.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-lg}` | 3rem 4rem | Default slide outer padding |\n| `{spacing.gap-xl}` | 4rem | Major two-column gutter |\n| `{spacing.gap-lg}` | 3rem | Section-block spacing |\n| `{spacing.gap-md}` | 2rem | Standard inter-element spacing |\n| `{spacing.gap-sm}` | 1.5rem | Tight card-internal spacing |\n| `{spacing.gap-xs}` | 0.75rem | Inline gap between mini-pills |\n| `{spacing.card-pad}` | 2.5rem 2rem | Default pillar-card padding |\n| `{spacing.pill-pad-lg}` | 1.5rem 3.5rem | Title-pill / closing-pill padding |\n| `{spacing.pill-pad-md}` | 1rem 2.5rem | Featured pill padding |\n| `{spacing.pill-pad-sm}` | 0.4rem 1.2rem | Header-tag pill padding |\n| `{spacing.pill-pad-xs}` | 0.35rem 1rem | Mini-pill chip padding |\n\n### Atmospheric Background Layer\nEvery slide layers two atmospheric treatments on top of the cream canvas:\n1. **Radial glows** — one to three soft `radial-gradient(ellipse at X% Y%, rgba(accent, 0.06–0.15), transparent)` washes anchored to corners or center. These tint the canvas warmly without changing its surface color.\n2. **Grain overlay** — a fractal-noise SVG fixed at `inset: 0`, opacity 0.04, mix-blend-mode multiply, z-index 9999. Always present, always identical, never removed.\n\nThese are not decorative options; they are baseline canvas treatments that should appear on every slide.\n\n### Decorative Pill Wallpaper\nA signature: small decorative pills (60–160px wide, 35–90px tall) tilted at -20° to +25° rotations are placed absolutely on slide backgrounds as atmospheric typographic confetti. Each contains a single uppercase Space-Grotesk word and a candy fill. Some are circular (border-radius 50%) instead of capsule-shaped. They have no informational role — they are visual atmosphere. Typical count: 5–8 per slide on cover/closing/quote layouts; 0 on dense data layouts.\n\n## Depth and Elevation\n\n### Soft Hard-Offset Shadow\nThe system's only depth technique is a **solid hard-offset shadow** in low-opacity ink:\n- **4px 4px 0** — small elevated nodes (step nodes, small pills).\n- **6px 6px 0** — orbit pills, stat-pills, diagram nodes.\n- **8px 8px 0** — pillar-cards, chart container.\n- **12px 12px 0** — large visual frame (the most lifted element in the system).\n\nAll shadows use `{colors.shadow}` (`rgba(26, 26, 26, 0.08)`). The opacity is the key distinction from a brutalist hard shadow: at 8% the shadow reads as a soft lift rather than a stamped offset. The offset direction is always bottom-right.\n\n### Outline-Based Depth\nMost apparent depth comes from the 2px ink outline that wraps every pill against the cream canvas. The outline does much of the elevation work; the shadow adds the lift on cards and elevated pills.\n\n### Flat Decorative Layer\nDecorative floating pills and radial glows are flat — they cast no shadow. The shadow is reserved for content-bearing containers (cards, stat tiles, diagram nodes, visual frames). This visual rule separates \"content\" from \"atmosphere\" at a glance.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 9999px (full pill) | All small pills: title pill, closing pill, decorative pills, header tags, mini chips, bar tracks, bar fills, accent lines, orbit pills, floating pills, quote highlights, diagram nodes |\n| 2rem (32px) | Larger cards: pillar-cards, stat-pills, chart container, visual frame |\n| 1.5rem (24px) | Inner dashed frame inside the visual frame |\n| 50% (circle) | Circular pills: card-icon (60px), step-node (56px), orbit-center (160px), nav dots (10px) |\n| 0 | The grain overlay; the slide itself; the candy-color gradient regions inside a visual frame |\n\nThe system has **no sharp-cornered text containers**. Every container that holds text or icon content is rounded.\n\n### Border Weights\n- **2px solid `{colors.outline}`** — the universal stroke. Used on every pill, card, icon, frame, bar track, nav dot.\n- **2px dashed `{colors.outline}`** — used only on the inner frame inside the visual-frame component (a decorative interior border indicating \"image placeholder\").\n- **4px solid ink** — used only on the timeline-line that connects sequential step nodes horizontally.\n\nAll borders are `{colors.outline}`. Colored borders do not exist in the system.\n\n### Decorative Element Types\n\n**Decorative floating pill** — A small (60–160px wide × 35–90px tall) pill or circle in a candy fill, tilted at -20° to +25° rotation, positioned absolutely on the slide background. Contains a single uppercase Space-Grotesk word at 0.55–0.85rem. Functions as typographic confetti / atmospheric wallpaper. Five to eight per declarative slide.\n\n**Header tag pill** — A small (≈0.7rem text) pill in a candy fill (typically lavender) with `pill-pad-sm` padding, centered above a section headline. The system's section-tag chip.\n\n**Title pill / closing pill** — A medium pill (`pill-pad-lg`) in `{colors.yellow}` carrying uppercase Space-Grotesk text. Placed above the largest display headline on cover and closing slides.\n\n**Pillar-card** — A 2rem-radius white card with 2px outline and 8px offset shadow, containing a circular `card-icon` at the top, a Bodoni `card-headline`, and a Space-Grotesk body paragraph. Used in 3-card and 4-card grids.\n\n**Stat-pill** — A 2rem-radius white card containing a colored Bodoni stat number, a small uppercase label, and a tiny 40×4 accent bar at the bottom. Sits in 3- or 4-column stat grids.\n\n**Bar-track** — A 36px-tall horizontal pill (9999px radius) with 2px outline and cream interior. The fill is a child pill in a candy color with the value label printed at the right edge inside the fill.\n\n**Orbit composition** — A central 160px circular pill in `{colors.lime}` carrying a Bodoni ordinal, surrounded by 4–6 small `orbit-pill` satellites in candy fills, each tilted, positioned at 8–45% / 8–45% offsets, with 6px shadows.\n\n**Diagram-node + connector** — Pill-shaped flow node (`diagram-node`) with 6px shadow, connected to the next node by a 50×4 ink bar with a triangular arrowhead. Nodes may carry candy fills; arrows are always ink.\n\n**Visual-frame** — A 2rem-radius large frame with 12px offset shadow, filled with a tri-stop linear gradient (typically lavender → sky → mint), overlaid with a dot-grid pattern at 0.15 opacity, with an inner dashed border indicating \"image placeholder.\" Used for hero visual moments.\n\n**Quote-highlight** — An inline pill in lime or sky with 2px outline, wrapped around a single phrase inside a Bodoni quote body. The system's primary inline emphasis mechanism.\n\n**Accent line** — A 60×4 (or 80×4 on closing slides) horizontal pill in `{colors.coral}` used as a sub-headline accent rule.\n\n## Do's and Don'ts\n\n### Do\n- Make every text container a pill — 9999px radius for small pills, 2rem radius for larger cards. The pill geometry is the system's most distinctive single trait.\n- Apply the 2px `{colors.outline}` stroke to every pill, card, icon, and frame. The outline is what makes the candy palette read as graphic rather than candy.\n- Set every Bodoni display element in `{colors.ink}`, never in a candy color. Color belongs on stat numerals and pill fills, not on serif headlines.\n- Use Bodoni Moda for every headline/stat/card title; use Space Grotesk for every body/label/pill. The two-face split is non-negotiable.\n- Render shadows as solid hard offsets at 4/6/8/12px in `{colors.shadow}` (`rgba(26,26,26,0.08)`). Never blur; never re-color.\n- Populate slide backgrounds with 5–8 floating decorative pills tilted at -20° to +25° rotations on cover, closing, quote, and other declarative layouts. The wallpaper-pill treatment is a system signature.\n- Layer radial-gradient accent glows (6–15% opacity) into the cream canvas on every slide for atmospheric warmth.\n- Keep the grain overlay (4% opacity, multiply blend) active on every slide — it is a baseline layer, not optional decoration.\n- Wrap inline emphasis phrases in `quote-highlight` pills (lime, sky, or another candy) inside Bodoni quote bodies, rather than bolding or italicizing.\n- Pair warm + cool accents adjacently: coral with sky, yellow with lavender, peach with mint. Avoid two same-family accents next to each other.\n\n### Don't\n- Don't render any text container with sharp corners. Square text containers do not exist in Capsule.\n- Don't render a pill, card, or icon without the 2px ink outline. The stroke is the system's identity.\n- Don't render Bodoni headlines in a candy color. Headlines are always `{colors.ink}`; color lives on stat numerals and pill fills.\n- Don't use blurred drop shadows. The shadow is always solid offset at 4/6/8/12px in `{colors.shadow}`.\n- Don't pair Bodoni with a different sans companion. The Bodoni Moda + Space Grotesk pairing is fixed.\n- Don't use uppercase on Bodoni headlines. Bodoni in this system is sentence case (or true title case for proper nouns).\n- Don't use sentence case on Space Grotesk subtitles, labels, or pill text. Small Space Grotesk text is always uppercase + 0.08em tracking.\n- Don't introduce a tenth accent color. The nine candy accents are the closed palette.\n- Don't apply shadows to decorative floating pills. Shadows are reserved for content-bearing containers.\n- Don't leave a slide's corners empty on declarative layouts. The cream canvas wants atmospheric pills or radial glows; bare corners read as broken.\n\n## Responsive Behavior\n\nCapsule is a viewport-fluid 1920×1080 presentation system using `clamp()` and viewport-relative units throughout. There is a single `@media (max-width: 900px)` breakpoint that collapses grid columns to single-column stacks and hides the nav-dot column; below 600px the stats grid further collapses from 2-col to 1-col. The system is otherwise responsive without breakpoints.\n\n### Scaling Behavior\n- Display headline scales from 3rem at minimum viewport to 7rem at maximum.\n- Body text scales from 0.95rem to 1.15rem.\n- Padding scales via `clamp` inside individual layout selectors.\n- Borders, pill outlines, shadow offsets, and grain overlay are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight`, `ArrowDown`, or `Space`.\n- Slides reverse via `ArrowLeft` or `ArrowUp`.\n- `Home` jumps to the first slide; `End` to the last.\n- Touch swipe (horizontal): swipe distance >50px advances or reverses.\n- The active slide carries `.active` (opacity 1); non-active slides are opacity 0 + pointer-events none.\n- Nav dots are a vertical column at the right edge; the slide counter is at bottom-right; a keyboard hint is at bottom-left.\n\n### Print / Export\nNot explicitly handled; opacity-toggling means a naïve print captures only the active slide. Export workflows should snapshot each slide individually at 1920×1080.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Bodoni Moda 700–800) | Bodoni Moda | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body / Pill text (Space Grotesk 400–600) | Space Grotesk | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare the CJK font *after* the Latin font in the same `font-family` stack so Latin glyphs render in Bodoni Moda / Space Grotesk and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bodoni+Moda:ital,opsz,wght@0,6..96,400..900;1,6..96,400..900&family=Space+Grotesk:wght@300..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Bodoni Moda\", \"ZCOOL XiaoWei\", serif;\n  --font-body: \"Space Grotesk\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.7 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (negative tracking that flatters Bodoni capitals jams Hanzi strokes together). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any pill/label/subtitle when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei is a high-contrast literary serif-leaning Hanzi face whose thin-thick stroke modulation echoes Bodoni Moda's didone register — it gives display headlines the same editorial-glamour weight as the Latin original. Yozai is a friendly rounded Hanzi sans whose open counters and modest stroke contrast mirror Space Grotesk's geometric grotesque, so pill text, labels, and body paragraphs retain the \"clean modern sans\" feel rather than reverting to a stiff system Hanzi. Both pair cleanly with the candy palette: ZCOOL XiaoWei in `{colors.ink}` keeps the rule \"Bodoni headlines are never colored\" intact, and Yozai sits inside coral / lime / yellow pills without losing legibility against the 2px ink outline. The decorative floating pill wallpaper still works in Chinese — substitute single-character or two-character atmospheric words (愿景, 未来, 下一步) for the English uppercase confetti.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a display face with limited weight axis (single weight) and a smaller glyph set than Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage and a similar friendly humanist register. The ZCOOL XiaoWei italic / heavy moments that Bodoni achieves via the opsz axis have no equivalent in the Chinese face — use scale and color to compensate when Latin would have leaned on italic Bodoni.\n\n## Iteration Guide\n\n1. Any new container that holds text uses the pill geometry — 9999px radius for small, 2rem radius for cards. Don't introduce a sharp-cornered text container.\n2. Any new pill carries the 2px solid `{colors.outline}` stroke. Don't render an unstroked pill.\n3. Any new headline uses Bodoni Moda in `{colors.ink}`. Don't color a serif headline; don't switch to Space Grotesk for display.\n4. Any new card carries a `8px 8px 0 {colors.shadow}` offset shadow (4px for small nodes, 12px for the visual frame). Don't blur; don't re-color.\n5. Any new accent uses the nine-color candy palette in the coral → lime → sky → violet → yellow → lavender → peach → mint default sequence. Don't introduce a tenth color.\n6. Any new declarative slide (cover, closing, quote, statement) gets 5–8 floating decorative pills as atmospheric wallpaper.\n7. Any new data slide gets one or two radial accent glows in the canvas background. Don't leave the cream surface flat.\n8. Any inline emphasis inside a Bodoni quote body uses a `quote-highlight` pill. Don't bold; don't italicize except via the Bodoni italic axis inside `<em>`.\n9. New components inherit the pill geometry + 2px outline + 4–12px shadow pattern. If a new component breaks any of these three rules, redesign it before adding it.\n\n## Known Gaps\n\n- Two Bodoni font axes (italic and opsz 6..96) are loaded but the template only exercises the upright axis at fixed sizes; the optical-size variation across display sizes is not explicitly opted into.\n- Bar-chart values are inline-styled via `style=\"width: NN%\"` — there is no data-binding layer.\n- The decorative floating pill positions and rotations are all hand-tuned via inline style on each instance; there is no generative placement system.\n- The visual-frame's tri-stop gradient (lavender → sky → mint) is a hardcoded \"default\" — alternate gradient combinations are valid but need to be authored per instance.\n- The grain overlay uses an inline SVG data URL; replacing or removing it requires editing the markup, not a CSS variable.\n- The chart-bar-fill border-right at 2px solid outline is what gives bars their pill-end-cap definition; removing it loses the pill aesthetic on bars.\n- The system inherits all 9 candy accent CSS variables but only ~6 are actively used across the source — peach and mint are present in the palette but used sparingly. They are available for new compositions.\n- Decorative floating pills include their text content as part of the visual identity (single uppercase Space-Grotesk words). The words are not informational; new compositions should pick neutral single-word atmospheres (\"VISION\", \"FUTURE\", \"NEXT\", etc.) rather than content-specific text.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/capsule/preview.md (Tokens: ~1022 | Category: anthropic-skill) -->\n# Capsule Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/capsule/design.md`\n- Preview card: `bold-template-pack/templates/capsule/preview.md`\n\n## Selection Metadata\n\n- Slug: `capsule`\n- Tagline: Modular pill-shaped cards on warm bone with a full pastel-pop palette.\n- Mood: playful, modern, warm, fresh, fun\n- Tone: upbeat, graphic, approachable, cool\n- Formality: medium-low\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials. Also fun for a playful tech demo or a research deck that wants pop-art clarity instead of gravitas.\n- Avoid for: Contexts that require traditional institutional weight — the capsule shapes and pastel pops actively soften authority.\n\n## Visual Snapshot\n\nA playful editorial system built on pill-shaped containers, a sun-bleached cream canvas, and a nine-color candy palette. Bodoni Moda serif headlines pair with Space Grotesk body to suggest a literary magazine that took a holiday at a 1970s ice-cream parlor. Every container that holds text is a pill (border-radius 9999px) outlined with a 2px ink stroke, casting a soft 6–12px offset shadow. The aesthetic is \"Memphis-meets-editorial\" — confident typography, generous bordered shapes, and decorative floating pills as atmospheric wallpaper.\n\nCapsule is a playful editorial system whose defining structural premise is the pill: every text container is a pill, every icon is a pill, every bar is a pill, every node in a diagram is a pill. The border-radius: 9999px rule applies to virtually all UI elements, with larger panels softening to a 2rem radius. Combined with the 2px ink outline that wraps every shape, the result is a system where containers feel inflated, friendly, and graphically distinct — a nod to Memphis design and late-70s ice-cream-parlor signage without abandoning editorial discipline.\n\n## Preview Ingredients\n\n- Palette: cream #F5F5F0; ink #1A1A1A; outline #1E1E1E; white #FFFFFF; coral #E85D4E; lime #C4D94E; lavender #C5B5E0; sky #8BB4F7\n- Typography: Bodoni Moda; Space Grotesk\n- Signature move: Universal pill geometry — border-radius: 9999px for small containers, 2rem for larger cards/frames.\n- Signature move: 2px solid {colors.outline} stroke wraps every pill, icon, and card.\n- Signature move: Bodoni Moda serif for every display/headline/stat; Space Grotesk sans for every body/label/pill text.\n- Signature move: Sun-bleached cream canvas {colors.cream} with soft radial glows in candy accent colors at 6–15% opacity for background atmosphere.\n- Signature move: Hard-offset shadows in low-opacity ink ({colors.shadow}) at 4/6/8/12px offsets, always solid, always bottom-right.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/design.md (Tokens: ~9138 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Cartesian\ndescription: A quiet, museum-catalog editorial system built on Playfair Display serif headlines, Inter sans body, and a five-tone warm-stone palette. The aesthetic is \"consulting deck meets architectural monograph\" — minimal geometric line decorations (thin circles, dashed arcs, vertical and horizontal hairlines) drift behind content, suggesting drafting paper and compass work. Every divider is a single 1px line in a muted taupe; nothing is bold, nothing is loud. The cultural reference is Massimo Vignelli's editorial work, the Cooper Hewitt catalog, and pencil-and-tracing-paper urban planning documents.\n\ncolors:\n  bg-primary: \"#EDE8E0\"\n  bg-secondary: \"#E2DBD1\"\n  text-primary: \"#1A1A1A\"\n  text-secondary: \"#5A5A5A\"\n  accent: \"#8A8178\"\n  line: \"#B8B0A4\"\n  white-overlay: \"rgba(255, 255, 255, 0.3)\"\n\ntypography:\n  display:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(3rem, 6vw, 5.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h1:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(2.5rem, 5vw, 4.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h2:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  h3:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"clamp(1.2rem, 2vw, 1.6rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  stat-figure:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"2rem\"\n    fontWeight: 400\n    lineHeight: 1\n  agenda-numeral:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.5rem\"\n    fontWeight: 400\n    lineHeight: 1\n  team-initial:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"2rem\"\n    fontWeight: 400\n    lineHeight: 1\n  quote-mark:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"5rem\"\n    fontWeight: 400\n    lineHeight: 1\n  card-headline:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.3rem\"\n    fontWeight: 400\n    lineHeight: 1.1\n  timeline-headline:\n    fontFamily: \"Playfair Display, serif\"\n    fontSize: \"1.2rem\"\n    fontWeight: 400\n    lineHeight: 1.1\n  body:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(0.9rem, 1.2vw, 1.1rem)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-sm:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.9rem\"\n    fontWeight: 400\n    lineHeight: 1.6\n  subtitle:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(1rem, 1.5vw, 1.3rem)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  attribution:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.85rem\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 2px\n    textTransform: uppercase\n  label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.75rem\"\n    fontWeight: 500\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  micro:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"0.7rem\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n    textTransform: uppercase\n\nspacing:\n  pad-y: \"4vh\"\n  pad-x: \"4vw\"\n  gap-xl: \"6vw\"\n  gap-lg: \"5vw\"\n  gap-md: \"3vw\"\n  gap-sm: \"2vh\"\n  card-pad: \"4vh 2vw\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  card:\n    border: \"1px solid {colors.line}\"\n    padding: \"{spacing.card-pad}\"\n    background: \"{colors.white-overlay}\"\n    description: \"Tracing-paper card — 1px taupe outline with semi-transparent white fill that lets the canvas tone bleed through. No radius, no shadow.\"\n  card-icon:\n    width: 40px\n    height: 40px\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    color: \"{colors.accent}\"\n    fontSize: \"1rem\"\n    description: \"Small ringed circle (40px) containing a 1–3 character Roman numeral or letter in accent taupe.\"\n  agenda-row:\n    padding: \"2vh 0\"\n    borderBottom: \"1px solid {colors.line}\"\n    description: \"List row separated only by a 1px taupe hairline. Numeral at left, label at right.\"\n  timeline-rule:\n    height: \"1px\"\n    background: \"{colors.line}\"\n    description: \"Single horizontal 1px taupe line connecting timeline items. No nodes, no markers — just the line.\"\n  vertical-line:\n    width: \"1px\"\n    height: \"100%\"\n    background: \"{colors.line}\"\n    opacity: 0.3\n    description: \"Optional decorative vertical hairline anchored at left edge (default 8vw from edge) at low opacity. Provides drafting-paper grid feel.\"\n  horizontal-accent:\n    width: \"20vw\"\n    height: \"1px\"\n    background: \"{colors.text-primary}\"\n    description: \"Single short ink-black 1px horizontal line used as a strong accent rule. Black, not taupe.\"\n  geo-circle:\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.5\n    description: \"Thin solid taupe ring at low opacity, used as decorative geometry behind content.\"\n  geo-arc:\n    border: \"1px dashed {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.3\n    description: \"Thin dashed taupe ring at very low opacity, paired with geo-circle to suggest compass construction.\"\n  geo-decoration:\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    description: \"Large decorative ring (30–50vw diameter) anchored to a corner or center. Always pairs with a ::before pseudo-element rendering a smaller dashed ring inside it, suggesting concentric drafting.\"\n  geo-ring:\n    width: \"50vw\"\n    height: \"50vw\"\n    border: \"1px solid {colors.line}\"\n    borderRadius: \"50%\"\n    opacity: 0.3\n    description: \"The largest geometric decoration variant — a 50vw centered ring with an inner ::before dashed ring at 70% diameter.\"\n  image-placeholder:\n    background: \"{colors.bg-secondary}\"\n    border: \"1px solid {colors.line}\"\n    description: \"Solid taupe-tinted block with two crossed 1px diagonal hairlines via ::before/::after at +30° and -30°, suggesting an X over a blank frame. Holds a small uppercase label centered.\"\n  team-photo:\n    width: \"12vw\"\n    height: \"12vw\"\n    borderRadius: \"50%\"\n    border: \"1px solid {colors.line}\"\n    background: \"{colors.bg-secondary}\"\n    description: \"Circular portrait frame (12vw) in slightly darker stone, ringed in taupe, holding a single Playfair initial in accent taupe at center.\"\n  nav-arrow:\n    width: 40px\n    height: 40px\n    border: \"1px solid {colors.line}\"\n    background: \"transparent\"\n    description: \"Square 40px button with 1px taupe border holding an arrow glyph. Hover state inverts to ink fill with cream text.\"\n  nav-dot:\n    width: 8px\n    height: 8px\n    borderRadius: \"50%\"\n    background: \"{colors.line}\"\n    description: \"Small taupe dot at right edge as navigation indicator. Active state shifts to ink and scales 1.3.\"\n  chart-stroke-primary: \"{colors.text-primary}\"\n  chart-stroke-comparison: \"{colors.line}\"\n  chart-comparison-dash: \"5, 5\"\n  chart-grid-color: \"{colors.bg-secondary}\"\n  chart-axis-tick-color: \"{colors.accent}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCartesian is a **quiet museum-catalog editorial system**. Its defining premise is **restraint through 1px lines**. Every structural element — list separators, agenda rules, timeline connectors, card borders, table dividers — is a single 1px line in a muted taupe `{colors.line}`. There are no thick borders, no fills, no shadows, no rounded surfaces. Hierarchy is built through type contrast and negative space; depth does not exist in the conventional sense.\n\nThe typeface stack is a literary-monograph pairing. **Playfair Display** — a high-contrast didone-influenced serif — carries every headline, every stat numeral, every card title, every team initial, every quote mark. Playfair runs at weight 400 (regular) almost exclusively — there is no use of bold or 700-weight Playfair in the system. The thin-stroke didone aesthetic depends on letting the letterforms breathe at modest weights. **Inter** — a clean modern grotesque — carries every body paragraph, every subtitle, every label, every attribution. Inter runs at 400 for body and 500 for labels. The pairing creates the system's editorial voice: serif statements + clean sans supporting structure.\n\nThe palette is **five warm stones plus ink**. The canvas is `{colors.bg-primary}` — a warm sandstone off-cream. A slightly deeper stone `{colors.bg-secondary}` provides subtle region differentiation (image placeholders, team photo frames). Ink `{colors.text-primary}` is the headline color; medium gray `{colors.text-secondary}` is body. A warmer taupe `{colors.accent}` carries labels, attribution, and small numerals. The lightest taupe `{colors.line}` is the universal 1px line color. There are no accent colors in the populist sense — no red, no orange, no blue. The palette is stone, stone, stone, ink, ink. The only \"color\" in the system is type contrast.\n\nDepth is **entirely absent in the conventional sense**. There are no shadows, no elevated cards, no rounded surfaces, no gradients. Atmosphere is created by **geometric line decorations**: thin solid and dashed circles in `{colors.line}` at 20–50% opacity drift behind content as if drawn on tracing paper with a compass. These do not create hierarchy — they create mood. The decorative geometry signals \"drafted, considered, precise.\"\n\n**Density philosophy: sparse and breathing.** Cartesian reads as elegant when sparse and broken when crowded. A correctly composed slide pairs one Playfair headline with one body paragraph, or one chart with one short caption, framed by generous negative space. Most slide composition uses centered or asymmetric two-column layouts with `5–6vw` gutters and significant vertical breathing room. The decorative compass arcs reinforce the sparseness — they are most effective when there is room around them. A slide that feels broken in this system is one packed edge-to-edge with content; the correct density is \"one clear idea, well-framed, on stone paper.\"\n\n**Key Characteristics:**\n- Warm sandstone canvas `{colors.bg-primary}` with single 1px taupe `{colors.line}` dividers as the universal structural element.\n- Playfair Display serif at weight 400 for every headline/numeral/quote-mark; Inter sans for every body/label/attribution.\n- Five-tone monochrome palette: two stones, two grays, one ink. No vivid accent colors anywhere.\n- Decorative geometric rings (thin solid + dashed circles, 20–50% opacity) drift behind content as compass-drafted atmosphere.\n- Every label, attribution, and micro-text is uppercase Inter with 2–3px letter-spacing.\n- All borders are 1px hairlines; no element has a thicker border, a shadow, or a rounded fill.\n- Right-edge vertical nav-dot column, bottom-left square nav-arrow buttons, bottom-right mono slide counter.\n- Image placeholders carry a signature pair of crossed 1px diagonals (an X) over a stone-tinted block.\n\n## Colors\n\n### Stone & Ink Palette\n- **Background Primary** (`{colors.bg-primary}` — #EDE8E0): The canvas. Warm sandstone off-cream — closer to \"manila folder\" than \"white paper.\" This is the default slide background.\n- **Background Secondary** (`{colors.bg-secondary}` — #E2DBD1): A slightly deeper stone, used for image placeholders, team-photo frames, and any region that needs subtle separation from the canvas without a colored fill or a border.\n- **Text Primary** (`{colors.text-primary}` — #1A1A1A): Near-black ink. Used for headlines, stat numerals, and the special `{components.horizontal-accent}` rule. The strongest contrast color in the system.\n- **Text Secondary** (`{colors.text-secondary}` — #5A5A5A): Medium warm gray. Used for all body paragraph text. Softer than ink — readable but recedes.\n- **Accent** (`{colors.accent}` — #8A8178): Warm taupe. Used for labels, attributions, agenda numerals, slide counter, card-icon text, team-member role text. The system's \"small text\" color.\n- **Line** (`{colors.line}` — #B8B0A4): Pale taupe. The universal 1px line color: card borders, agenda rules, timeline connectors, team-photo rings, nav-arrow borders, geo-decoration rings.\n\n### Defaults\n- **Default surface background**: `{colors.bg-primary}`.\n- **Default headline color**: `{colors.text-primary}` — always ink, never colored, never accent-taupe. Playfair headlines are uniformly ink.\n- **Default body text color**: `{colors.text-secondary}` (medium warm gray).\n- **Default label / attribution / micro-text color**: `{colors.accent}` (warm taupe).\n- **Default border color**: `{colors.line}` — every 1px structural border. Never use ink-black for borders except the rare `horizontal-accent` rule.\n- **Default secondary surface fill**: `{colors.bg-secondary}`.\n- **Default chart primary series color**: `{colors.text-primary}` (ink).\n- **Default chart comparison/secondary series color**: `{colors.line}` with 5px dashed stroke.\n- **Default chart grid color**: `{colors.bg-secondary}`.\n- **Default chart axis tick color**: `{colors.accent}`.\n\nCartesian has **no accent color in the populist sense.** A red callout, a blue bar, a green stat — none of these exist. When emphasis is needed, increase type size, switch from sans to serif, or add a single 1px `horizontal-accent` rule in ink. Color is not the emphasis mechanism in this system; restraint is.\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face conversation**: `Playfair Display` (serif, weights 400/600/700, italic available) carries every headline, stat numeral, quote mark, card title, and team initial; `Inter` (sans, weights 300/400/500/600) carries every body, subtitle, label, attribution, and micro-text. There is no third face.\n\nPlayfair Display is used almost exclusively at **weight 400 (regular)**. The system deliberately avoids bold Playfair — the didone aesthetic relies on thin-stroke modulation that disappears at heavier weights. Italic Playfair is available (loaded) but not exercised in the default template; reserve it for inline emphasis inside body copy.\n\nInter runs at weight 400 for body, weight 500 for labels and micro-text, weight 600 for the rare emphasized inline element. The contrast between Playfair's high-modulation serif and Inter's even sans is the system's primary typographic rhythm.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3rem, 6vw, 5.5rem) | Playfair Display | 400 | Cover or large opening title |\n| `{typography.h1}` | clamp(2.5rem, 5vw, 4.5rem) | Playfair Display | 400 | Section-opening or large closing headline |\n| `{typography.h2}` | clamp(1.8rem, 3.5vw, 3rem) | Playfair Display | 400 | Primary slide headline |\n| `{typography.h3}` | clamp(1.2rem, 2vw, 1.6rem) | Playfair Display | 400 | Sub-headline within a region |\n| `{typography.card-headline}` | 1.3rem | Playfair Display | 400 | Card or pillar-block title |\n| `{typography.timeline-headline}` | 1.2rem | Playfair Display | 400 | Timeline-step or phase headline |\n| `{typography.stat-figure}` | 2rem | Playfair Display | 400 | Numerical stat figure (typically inline in a stats cluster) |\n| `{typography.team-initial}` | 2rem | Playfair Display | 400 | Initial letter centered inside a team-photo circle |\n| `{typography.agenda-numeral}` | 1.5rem | Playfair Display | 400 | Ordinal numeral preceding an agenda row |\n| `{typography.quote-mark}` | 5rem | Playfair Display | 400 | Opening quotation glyph for a pull-quote |\n| `{typography.subtitle}` | clamp(1rem, 1.5vw, 1.3rem) | Inter | 400 | Subtitle paragraph below a display headline |\n| `{typography.body}` | clamp(0.9rem, 1.2vw, 1.1rem) | Inter | 400 | Standard paragraph body |\n| `{typography.body-sm}` | 0.9rem | Inter | 400 | Compact body inside cards or timeline items |\n| `{typography.attribution}` | 0.85rem | Inter | 400 | Attribution line below a quote, with 2px tracking + uppercase |\n| `{typography.label}` | 0.75rem | Inter | 500 | Section label / eyebrow above a headline, with 3px tracking + uppercase |\n| `{typography.micro}` | 0.7rem | Inter | 400 | Image label, slide counter, smallest chrome text |\n\n### Defaults\n- **Default size for the primary slide headline**: `{typography.h2}` (clamp 1.8–3rem).\n- **Default size for a cover or large opening headline**: `{typography.h1}` (clamp 2.5–4.5rem); for the most expansive cover, `{typography.display}` (clamp 3–5.5rem).\n- **Default size for paragraph body**: `{typography.body}` (clamp 0.9–1.1rem).\n- **Default size for any inline label or eyebrow**: `{typography.label}` (0.75rem) — always 3px tracking + uppercase.\n- **Default weight for any Playfair headline**: 400. Don't reach for 600 or 700.\n- **Default weight for body**: 400.\n- **Default weight for labels/micro**: 500.\n- **Default size for a stat numeral inside a stats cluster**: `{typography.stat-figure}` (2rem). Cartesian does not have a hero-stat-numeral pattern (no 5–7rem display stat); stats are presented as inline ranks at modest scale.\n\nWhen unsure, reach for `{typography.h2}` for the slide's primary text moment, not `{typography.h3}` (which is a sub-headline within a region).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Playfair headline, stat, quote, card title, and initial is set at weight 400.** Bold Playfair does not exist in this system. The thin-stroke didone aesthetic is the identity.\n- **Every Playfair element is set in sentence case (or true title case for proper nouns).** Uppercase Playfair is not used.\n- **Every Inter label, attribution, and micro-text element is uppercase with 2–3px letter-spacing.** Labels at 3px tracking; attributions and micro at 2px. Without the tracking, Inter caps read as untreated.\n- **Every Playfair element is rendered in `{colors.text-primary}` (ink).** Headlines are never accent-taupe and never gray. The exception is decorative initial letters inside a circular `card-icon` or `team-photo`, where the letterform is rendered in `{colors.accent}`.\n- **Every 1px structural border uses `{colors.line}`.** Other border colors do not exist except for the rare `horizontal-accent` rule in ink.\n- **Every card, image-placeholder, team-photo, and nav-arrow border is 1px solid.** Thicker borders do not exist in this system.\n- **Charts use ink-black for the primary series and dashed taupe (5px, 5px) for the comparison series.** This pair is the only chart-color rule.\n\n### Typography Principles\nThe Playfair-400 + Inter-400 combination is the system's voice. Switching either family or jumping Playfair to weight 700 reads as a different design system. Italic emphasis is permitted via inline `<em>` inside body copy (Inter italic) — italic Playfair is loaded but reserved for rare uses. Underline is not used.\n\nLine-height stays open: headlines at 1.1, body at 1.6. The wide body line-height is part of the breathing-room aesthetic.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, visibility visible) at a time. Transitions are 0.6s opacity + visibility fades.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-y}` | 4vh | Default vertical slide padding |\n| `{spacing.pad-x}` | 4vw | Default horizontal slide padding |\n| `{spacing.gap-xl}` | 6vw | Major two-column gutter (most spacious) |\n| `{spacing.gap-lg}` | 5vw | Standard two-column or grid gutter |\n| `{spacing.gap-md}` | 3vw | Card-grid gutter |\n| `{spacing.gap-sm}` | 2vh | Agenda row vertical padding, attribution spacing |\n| `{spacing.card-pad}` | 4vh 2vw | Internal padding for content cards |\n\nHeadlines typically carry a 2–3vh margin-bottom from labels above and a 2vh margin-bottom from body below. Section headers above 3-card or 4-team grids carry a 6vh margin-bottom from the grid (significant breathing room).\n\n### Decorative Geometry Layer\nCartesian's signature is its **drafting-paper geometric decoration**. Every slide may layer one or more of:\n- A large ringed `geo-decoration` anchored to a corner (typically 30–50vw diameter) with an inner dashed ring at ~80% diameter (the `::before` pseudo).\n- A `vertical-line` at ~8vw from the left edge running floor-to-ceiling at 30% opacity.\n- A `horizontal-accent` (a single short black 1px line) anchored at 15vh from the bottom-left.\n- A centered `geo-ring` (50vw circle) on closing or contemplative slides.\n\nThese elements have **no informational role** — they create atmosphere. Slides without any geometric decoration are valid; over-decoration (more than two geo elements per slide) breaks the restraint.\n\n### Chrome\nThe system's chrome is minimal:\n- Right-edge vertical column of small `nav-dot` indicators (8px circles in taupe).\n- Bottom-left pair of square `nav-arrow` buttons (40×40, 1px taupe border, transparent fill).\n- Bottom-right `slide-counter` text in Inter at 0.75rem with 2px tracking in `{colors.accent}`.\n\nThere is no top chrome bar, no persistent header, no footer rule.\n\n## Depth and Elevation\n\n### Flat Plane (Only Technique)\nCartesian has no shadows, no elevated cards, no rounded surfaces, no gradients. Every element sits on a single plane.\n\nHierarchy is constructed from:\n- **Type contrast** — Playfair serif vs Inter sans; size scale from 5rem down to 0.7rem.\n- **1px hairline dividers** — agenda rows, timeline rule, card outlines, image-placeholder outlines, stats top-border, team-photo rings, nav-arrow borders.\n- **Color tone** — ink vs gray vs taupe.\n- **Negative space** — generous padding around every element.\n- **Geometric atmosphere** — compass-drafted rings behind content suggest depth without creating it.\n\nIntroducing a `box-shadow`, an elevated card, or a soft gradient breaks the restraint that defines the system.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 50% (circle) | Every circular element: `card-icon` (40px), `team-photo` (12vw), `nav-dot` (8px), `geo-circle`, `geo-arc`, `geo-decoration`, `geo-ring` |\n| 0 | Everything else: cards, image-placeholders, nav-arrows, agenda rows, timeline, stat-blocks, chart container |\n\nThe system uses **only two radius values**: 50% (true circle) or 0 (sharp rectangle). Soft-rounded corners do not exist.\n\n### Border Weights\n- **1px solid `{colors.line}`** — the universal structural border. Used on every card, image-placeholder, team-photo ring, nav-arrow, agenda row bottom, timeline rule, stats top, geo-circle, geo-decoration.\n- **1px dashed `{colors.line}`** — used on `geo-arc` and the inner `::before` ring inside `geo-decoration` / `geo-ring`. Dashed signals \"construction line / arc.\"\n- **1px solid `{colors.text-primary}`** — used only on the rare `horizontal-accent` decorative rule. The system's only ink-black line.\n- **Chart bar/line stroke widths** — Chart.js series at 1px (bar borders), 2px (line series). Comparison series at 2px dashed (5px dash, 5px gap).\n\nAll structural borders are `{colors.line}`. Thicker borders, colored borders, and dashed structural borders (other than geo-arcs) do not exist.\n\n### Decorative Element Types\n\n**Geometric ring (geo-circle / geo-decoration / geo-ring)** — Thin 1px taupe circles in various sizes (10vw, 30vw, 50vw) at 20–50% opacity. Typically paired with an inner dashed `::before` ring at 70–80% of the outer diameter, suggesting compass construction with both a primary and an offset arc. Anchored to corners or centers; sits behind content with `z-index: 0` and `pointer-events: none`.\n\n**Vertical line** — A single 1px taupe column anchored at ~8vw from the left slide edge, running floor-to-ceiling at 30% opacity. Suggests a drafting-paper alignment guide. Optional per slide.\n\n**Horizontal accent** — A single 20vw × 1px black line anchored 15vh from the bottom-left of a slide. The system's only ink-black line — used as a strong terminal accent rule on cover or closing layouts. Use sparingly.\n\n**Image placeholder** — A solid `{colors.bg-secondary}` block with two 150% diagonal 1px taupe lines crossed at +30° and -30° via `::before` / `::after`, forming an X. Centers a small uppercase Inter label (\"Visual Reference\" or similar). The X pattern is the signature image-not-yet-wired treatment.\n\n**Team-photo frame** — A 12vw circular block in `{colors.bg-secondary}` with a 1px taupe ring, holding a single Playfair-400 initial at 2rem in `{colors.accent}` centered. Used as portrait placeholder.\n\n**Card** — A 1px taupe-bordered block with a semi-transparent white interior fill (`{colors.white-overlay}`) that lets the canvas tone bleed through subtly. The faint white fill is what differentiates a card from a bare region; remove the fill and the card disappears.\n\n**Agenda row** — A flex row containing a Playfair `{typography.agenda-numeral}` in `{colors.accent}` at left, then a label at right, with 2vh padding and a 1px taupe bottom border. Stacked rows form an agenda list.\n\n**Timeline** — A 1px taupe top-border across a flex row of evenly-distributed timeline items; each item carries a small Inter `year` label in taupe, a Playfair `{typography.timeline-headline}`, and an Inter body paragraph. The hairline is the only timeline structure — there are no nodes, no markers, no dots.\n\n**Stats cluster** — A flex row of stat items separated by `gap-md`, framed by a 1px taupe top border, holding inline `{typography.stat-figure}` Playfair numerals with small uppercase Inter labels in taupe below.\n\n**Quote mark** — A 5rem Playfair quote glyph at 50% opacity in taupe, positioned above a Playfair `{typography.h2}` headline + a small uppercase taupe attribution below.\n\n**Chart** — Chart.js bar or line chart with ink-black primary series and dashed taupe comparison series. Grid lines in `{colors.bg-secondary}`. Axis ticks in `{colors.accent}`. Always rendered without fill on the primary series (or with a 5% ink-tinted fill on line charts).\n\n## Do's and Don'ts\n\n### Do\n- Use a single 1px line in `{colors.line}` for every structural separator — agenda rule, timeline connector, card border, stats top, team-photo ring. The 1px hairline is Cartesian's identity.\n- Set every Playfair headline, stat, quote mark, and card title at weight 400. Don't reach for bold; the thin-stroke didone aesthetic depends on it.\n- Render every headline in `{colors.text-primary}` (ink). Playfair never appears in taupe or color.\n- Render every label, attribution, agenda numeral, and micro-text in `{colors.accent}` (taupe) with uppercase + 2–3px letter-spacing.\n- Layer decorative geometric rings (solid + dashed) at 20–50% opacity behind content for atmosphere. One or two geo elements per slide; never more.\n- Pair Playfair Display (serif headlines) with Inter (sans body). The two-face pairing is fixed.\n- Use the crossed-diagonal X pattern inside image placeholders. It is the system's signature placeholder treatment.\n- Let slides breathe — sparse layouts with generous negative space are the correct density.\n- Use `{colors.bg-secondary}` as the fill for image placeholders and team-photo frames — a subtle stone, not white, not gray.\n- Use a single `horizontal-accent` (20vw × 1px ink line) sparingly as a strong terminal rule on cover or closing compositions.\n\n### Don't\n- Don't introduce a populist accent color. No red, no orange, no blue, no green. The palette is stone-on-stone with ink for headlines.\n- Don't render Playfair headlines in `{colors.accent}` (taupe). Headlines are ink; taupe is reserved for small text.\n- Don't bold any Playfair element. Weight 400 is the standing rule; bold breaks the didone aesthetic.\n- Don't add shadows, elevated cards, or gradient fills. Cartesian is flat; depth comes from geometry and type, not z-axis.\n- Don't use rounded corners on cards or rectangles. The only round shapes are true circles (radius 50%).\n- Don't use thick borders (2px+). Every structural border is 1px.\n- Don't crowd the slide. Sparse breathing layouts read as elegant; packed layouts read as broken.\n- Don't pair Playfair with a different sans companion. The Inter pairing is fixed.\n- Don't render labels or micro-text in sentence case. Small Inter text is always uppercase + 2–3px tracking.\n- Don't add more than two geo decorations per slide — restraint is the rule; over-decoration reads as cluttered.\n\n## Responsive Behavior\n\nCartesian is a viewport-fluid 1920×1080 presentation system using `vw` / `vh` units and `clamp()` throughout. There is a single `@media (max-aspect-ratio: 4/3)` breakpoint that collapses two-column grids to single-column, hides the timeline rule (which would lose meaning when stacked), and stacks team and card grids vertically. The system is otherwise responsive without breakpoints.\n\n### Scaling Behavior\n- Display headlines scale from 2.5rem at minimum viewport to 5.5rem at maximum via `clamp()`.\n- Body text scales from 0.9rem to 1.1rem.\n- Padding uses `vh` / `vw` units that scale linearly with viewport.\n- The 1px borders, 8px nav dots, and 40px nav arrows are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Nav dots at right edge can be clicked to jump to specific slides.\n- Nav arrows at bottom-left are clickable; hover state inverts background to ink and text to cream.\n- Slide counter at bottom-right shows current / total with 2-digit zero-padding.\n\n### Charts\nCharts are rendered with Chart.js (loaded via CDN). The two chart types in the source are bar and line; both follow the ink-primary / dashed-taupe-comparison convention. Custom font settings inject Inter into Chart.js label rendering.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Playfair Display 400) | Playfair Display | 思源宋体 Noto Serif SC 700 | Google Fonts |\n| Body / Label (Inter 400–500) | Inter | 思源宋体 Noto Serif SC 400 | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin font in the same `font-family` stack so Latin glyphs render in Playfair / Inter and CJK glyphs fall through to Noto Serif SC automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400..700;1,400..700&family=Inter:wght@300..600&family=Noto+Serif+SC:wght@400;700&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Playfair Display\", \"Noto Serif SC\", serif;\n  --font-body: \"Inter\", \"Noto Serif SC\", sans-serif;\n}\n/* Headlines use Noto Serif SC 700; body uses Noto Serif SC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.75 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase, and Cartesian already favors generous leading.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs. Keep the 2–3px tracking only on uppercase Latin labels.\n- **Text-transform**: drop `text-transform: uppercase` on any label/attribution/micro when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nNoto Serif SC (思源宋体) is the only mainstream Hanzi serif with the same restrained editorial register Cartesian needs — its modulated horizontal-thin / vertical-thick strokes echo Playfair's didone aesthetic, and its uniformly even cadence matches Cartesian's \"museum-catalog\" voice. Using NSC at weight 700 for headlines preserves the visual mass of the Latin display while NSC 400 carries body with the same quiet warmth Inter provides. The five-stone palette absorbs Hanzi cleanly because every glyph stays in ink or taupe — no candy fills to negotiate. The decorative compass-arc geometry layer is content-agnostic and works identically in any language. Avoid bolding Hanzi (the Chinese-typography equivalent of Cartesian's \"no bold Playfair\" rule); rely on size and the 1px line dividers for hierarchy.\n\n### Known CJK Gap\n\nNoto Serif SC is the only Hanzi serif loaded — there is no italic axis (Chinese type historically has no italic), so the rare italic Playfair `<em>` moment loses its emphasis when the body falls through to NSC. Substitute a single-character span colored in `{colors.accent}` (taupe), or wrap the emphasized phrase in faint brackets 「」, to recover emphasis. NSC's 700 weight is the heaviest available — the system's restraint-through-400-weight rule naturally extends to Chinese, so this is rarely a gap in practice.\n\n## Iteration Guide\n\n1. Every new structural separator uses a 1px solid `{colors.line}` border. No exceptions.\n2. Every new headline uses Playfair Display at weight 400 in `{colors.text-primary}`. Don't bold; don't color.\n3. Every new small text element (label, attribution, micro) uses Inter uppercase with 2–3px letter-spacing in `{colors.accent}`.\n4. Every new body paragraph uses Inter weight 400 in `{colors.text-secondary}`, with line-height 1.6.\n5. Every new card uses 1px taupe border + semi-transparent white overlay fill. No shadow, no radius.\n6. New circular elements (icons, photos, decorative rings) use border-radius 50% with 1px taupe ring.\n7. New geometric decorations stay subtle: 1 or 2 per slide, at 20–50% opacity, behind content (z-index 0, pointer-events none).\n8. New chart series follow the ink-primary / dashed-taupe-comparison convention. Don't introduce colored chart series.\n9. New layouts respect the breathing-room density rule — sparse beats dense in Cartesian.\n10. The `horizontal-accent` 20vw ink line is the system's only \"ink rule\" — use it sparingly as a terminal accent, never as a routine divider.\n\n## Known Gaps\n\n- The Chart.js library is loaded via CDN; new chart types beyond bar and line require manual configuration matching the ink-primary / dashed-taupe-comparison aesthetic.\n- The decorative `geo-decoration` and `geo-ring` `::before` inner-ring pattern is hardcoded in CSS; size variants beyond what the source exercises require new style rules.\n- The team-photo placeholder shows a single Playfair initial in taupe; real portrait insertion requires replacing the initial with an `<img>` and adjusting the circular crop.\n- The chart axis label colors and grid colors are hardcoded inline in the Chart.js options blocks (rather than reading from CSS variables) — restyling requires editing JS, not CSS.\n- The image-placeholder X pattern (crossed +30°/-30° diagonals) is rendered via `::before` / `::after` with fixed 150% widths; resizing the placeholder beyond the source dimensions may require recomputing the rotation angle to maintain edge-touch.\n- Italic Playfair is loaded but not exercised in any default rule; it is available for inline `<em>` emphasis in body copy but the system itself does not author any italic text.\n- The `vertical-line` and `horizontal-accent` decorative elements have hardcoded position values (8vw from left, 15vh from bottom); using them off-default-position requires per-instance style overrides.\n- The slide-counter `currentSlide` / `totalSlides` IDs are referenced in the JS but the system has no internal slide-name registry; new slides simply increment by their DOM order.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cartesian/preview.md (Tokens: ~985 | Category: anthropic-skill) -->\n# Cartesian Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/cartesian/design.md`\n- Preview card: `bold-template-pack/templates/cartesian/preview.md`\n\n## Selection Metadata\n\n- Slug: `cartesian`\n- Tagline: Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried.\n- Mood: quiet, considered, elegant, warm-minimal\n- Tone: classical, literary, restrained, confident-quiet\n- Formality: high\n- Density: low\n- Scheme: light\n- Best for: Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks. Also a strong choice for editorial features, founder reflections, or any deck where restraint is the message — including across tech and finance.\n- Avoid for: Decks that need visual heat, multiple accents, or a sense of urgency — the warm-neutral palette is intentionally low-energy.\n\n## Visual Snapshot\n\nA quiet, museum-catalog editorial system built on Playfair Display serif headlines, Inter sans body, and a five-tone warm-stone palette. The aesthetic is \"consulting deck meets architectural monograph\" — minimal geometric line decorations (thin circles, dashed arcs, vertical and horizontal hairlines) drift behind content, suggesting drafting paper and compass work. Every divider is a single 1px line in a muted taupe; nothing is bold, nothing is loud. The cultural reference is Massimo Vignelli's editorial work, the Cooper Hewitt catalog, and pencil-and-tracing-paper urban planning documents.\n\nCartesian is a quiet museum-catalog editorial system. Its defining premise is restraint through 1px lines. Every structural element — list separators, agenda rules, timeline connectors, card borders, table dividers — is a single 1px line in a muted taupe {colors.line}. There are no thick borders, no fills, no shadows, no rounded surfaces. Hierarchy is built through type contrast and negative space; depth does not exist in the conventional sense.\n\n## Preview Ingredients\n\n- Palette: bg-primary #EDE8E0; bg-secondary #E2DBD1; text-primary #1A1A1A; text-secondary #5A5A5A; accent #8A8178; line #B8B0A4\n- Typography: Playfair Display; Inter\n- Signature move: Warm sandstone canvas {colors.bg-primary} with single 1px taupe {colors.line} dividers as the universal structural element.\n- Signature move: Playfair Display serif at weight 400 for every headline/numeral/quote-mark; Inter sans for every body/label/attribution.\n- Signature move: Five-tone monochrome palette: two stones, two grays, one ink. No vivid accent colors anywhere.\n- Signature move: Decorative geometric rings (thin solid + dashed circles, 20–50% opacity) drift behind content as compass-drafted atmosphere.\n- Signature move: Every label, attribution, and micro-text is uppercase Inter with 2–3px letter-spacing.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/design.md (Tokens: ~11293 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Cobalt Grid\ndescription: \"A Japanese-magazine trend-report system built on warm cream paper, electric cobalt ink, and a graph-paper grid that lives permanently behind every slide. Newsreader serif headlines tower at 18vh while DM Mono carries chrome and ticker text. The signature decoration is a pixel-glitch column — vertical scanlines stair-stepped down the right edge of declarative slides — paired with QR-style 8×8 grid patches. The cultural reference is WIRED Japan, Shift magazine, and architectural trend reports printed in two-color risograph: cream + one cobalt.\"\n\ncolors:\n  paper: \"#F0EBDE\"\n  paper-2: \"#E6E0CE\"\n  ink: \"#1F2BE0\"\n  ink-soft: \"#5560E5\"\n  grid: \"rgba(31, 43, 224, 0.10)\"\n  ink-faint: \"rgba(31, 43, 224, 0.18)\"\n\ncolor-aliases:\n  rule: ink\n  bg: paper\n\ntypography:\n  display-hero:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(100px, min(11vw, 18vh), 200px)\"\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.008em\n  display-closing:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(72px, min(8.4vw, 14vh), 180px)\"\n    fontWeight: 400\n    lineHeight: 0.96\n    letterSpacing: -0.005em\n  display-chapter:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(56px, min(6vw, 10vh), 130px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: -0.005em\n  display-quote:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(50px, min(5.6vw, 9vh), 110px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n  display-manifesto:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(56px, min(6.4vw, 11vh), 120px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n    letterSpacing: -0.005em\n  headline:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(46px, min(4.8vw, 8.2vh), 92px)\"\n    fontWeight: 400\n    lineHeight: 0.95\n  headline-index:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(48px, min(5vw, 8.5vh), 100px)\"\n    fontWeight: 400\n    lineHeight: 0.95\n  vbig-numeral:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(110px, min(11vw, 18vh), 240px)\"\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.015em\n  ed-callout:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(28px, min(2.8vw, 4.6vh), 50px)\"\n    fontWeight: 400\n    lineHeight: 1.1\n  row-headline:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(26px, 2vw, 40px)\"\n    fontWeight: 400\n    lineHeight: 1.05\n  table-name:\n    fontFamily: \"Newsreader, Georgia, serif\"\n    fontSize: \"clamp(20px, 1.6vw, 28px)\"\n    fontWeight: 400\n    lineHeight: 1.15\n  micro:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(12px, 0.9vw, 14px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.16em\n    textTransform: uppercase\n  micro-strong:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(13px, 1vw, 16px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  micro-sm:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(11px, 0.75vw, 12px)\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  body:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(14px, 0.95vw, 15px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body-lede:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(15px, 1vw, 18px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  body-stat:\n    fontFamily: \"Hanken Grotesk, sans-serif\"\n    fontSize: \"clamp(15px, 1vw, 17px)\"\n    fontWeight: 400\n    lineHeight: 1.5\n  mono-tag:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(13px, 0.9vw, 15px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.04em\n  mono-chrome:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.82vw, 13px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.06em\n  mono-tick:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(12px, 0.85vw, 14px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 0.04em\n\nspacing:\n  edge: \"clamp(36px, 3.6vw, 80px)\"\n  edge-inner: \"clamp(60px, 8vw, 160px)\"\n  pad-top: \"clamp(76px, 8vh, 130px)\"\n  pad-bottom: \"clamp(100px, 10vh, 150px)\"\n  gap-lg: \"clamp(28px, 3vw, 56px)\"\n  gap-md: \"clamp(20px, 2.2vh, 36px)\"\n  gap-sm: \"clamp(14px, 1.6vh, 24px)\"\n  gap-xs: \"clamp(10px, 1.2vh, 18px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  graph-paper-grid:\n    backgroundImage: \"linear-gradient(to right, {colors.grid} 1px, transparent 1px), linear-gradient(to bottom, {colors.grid} 1px, transparent 1px)\"\n    backgroundSize: \"clamp(28px, 2.2vw, 44px) clamp(28px, 2.2vw, 44px)\"\n    description: \"Permanent ::before pseudo on every stage. 28–44px squared graph paper grid in 10%-opacity cobalt that sits behind every slide at z-index 1. Cannot be turned off — it is the canvas tone.\"\n  hairlines:\n    height: \"1.5px\"\n    background: \"{colors.ink}\"\n    description: \"Two persistent slim cobalt rules — one at the top of every slide (≈2.6vh from top) and one near the bottom (≈2vh from bottom) — both inset from edges by {spacing.edge}. They frame the slide composition.\"\n  pagenum:\n    position: absolute\n    right: \"{spacing.edge}\"\n    bottom: \"clamp(48px, 4.8vh, 76px)\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(11px, 0.82vw, 13px)\"\n    color: \"{colors.ink}\"\n    letterSpacing: 0.06em\n    description: \"Mono cobalt page number anchored bottom-right above the bottom hairline. One per slide.\"\n  nav-hint:\n    position: fixed\n    left: \"{spacing.edge}\"\n    bottom: \"clamp(48px, 4.8vh, 76px)\"\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    fontSize: \"clamp(10px, 0.75vw, 12px)\"\n    color: \"{colors.ink}\"\n    letterSpacing: 0.08em\n    opacity: 0.4\n    description: \"Mono cobalt navigation hint anchored bottom-left, mirrors pagenum.\"\n  pixel-glitch:\n    description: \"Stair-stepped column of vertical scanlines, rendered as inline SVG. Each stepped rectangle contains evenly-spaced cobalt vertical lines on cream. Sits absolutely positioned (typically right edge) at z-index 3, decorative only. Size ranges from 16vw × full-height (compact decoration) to 32vw × full-height (signature cover decoration).\"\n  qr-block:\n    display: grid\n    gridTemplateColumns: \"repeat(8, 1fr)\"\n    gridTemplateRows: \"repeat(8, 1fr)\"\n    gap: 1.5px\n    background: \"{colors.paper}\"\n    padding: 4px\n    boxShadow: \"0 0 0 1.5px {colors.paper}\"\n    description: \"8×8 QR-style mosaic of cobalt cells on cream background. Paper-fill ensures it reads as a discrete patch when overlapping the pixel-glitch column. Typical size 58–100px square.\"\n  topbar-rule:\n    borderBottom: \"1.5px solid {colors.ink}\"\n    paddingBottom: \"clamp(12px, 1.4vh, 22px)\"\n    description: \"1.5px cobalt rule under the topbar of an index, data, or table layout. Below the rule sits a Newsreader headline (left) and a mono lab-tag (right).\"\n  row-divider:\n    borderBottom: \"1px solid {colors.ink-faint}\"\n    description: \"Faint 18%-opacity cobalt rule between rows of an index list, table, or ledger.\"\n  attribution-rule:\n    borderTop: \"1px solid {colors.ink}\"\n    paddingTop: \"clamp(10px, 1.2vh, 18px)\"\n    description: \"Solid cobalt rule above a quote attribution or manifesto byline.\"\n  pixel-stack-bars:\n    description: \"Vertical bar chart rendered as a column of stacked 'cells' — flex column-reverse with 3px gaps, each cell a small horizontal block. Cells default to 10%-opacity cobalt (the grid color); .on cells fill solid cobalt to represent the value. Reads as a pixelated bar made of grid units.\"\n  ledger-row:\n    display: grid\n    gridTemplateColumns: \"76px 0.6fr 1.4fr 0.7fr 0.5fr\"\n    gap: \"clamp(14px, 1.4vw, 28px)\"\n    borderBottom: \"1px solid {colors.ink-faint}\"\n    description: \"Dense table row carrying a num-tag, name (Newsreader), description (Hanken Grotesk), mood-tag, and delta-tag (mono with up/down arrow prefix). Header row uses 1.5px solid cobalt bottom border.\"\n  vstack-label:\n    fontFamily: \"DM Mono, ui-monospace, monospace\"\n    writingMode: \"vertical-rl\"\n    textOrientation: \"mixed\"\n    letterSpacing: 0.04em\n    description: \"Vertical-orientation mono label column anchored to the right edge of a slide. Replaces the Korean vertical column of the reference with mono catalogue text rotated 90°.\"\n  delta-up:\n    content: \"↑ \"\n    description: \"Up arrow prefix via ::before on a mono delta tag in the ledger table.\"\n  delta-down:\n    content: \"↓ \"\n    opacity: 0.6\n    description: \"Down arrow prefix via ::before, dimmed 40% to read as decline.\"\n  delta-flat:\n    content: \"— \"\n    opacity: 0.6\n    description: \"Em-dash prefix via ::before, dimmed 40% to read as neutral.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCobalt Grid is a **two-color trend-report editorial system** built on three immovable foundations: a warm cream paper canvas (`{colors.paper}`), an electric cobalt ink (`{colors.ink}`), and a **permanent graph-paper grid** that sits behind every slide. The grid is not optional decoration — it is rendered via a `::before` pseudo on every `.stage` and cannot be turned off. The aesthetic is \"two-color risograph monograph\": cream + cobalt only, with the grid lending the entire deck the feel of architectural tracing paper or a Japanese trend report.\n\nThe typeface stack is a deliberate three-face conversation. **Newsreader** — a contemporary literary serif with low-modulation roman letterforms — carries every display moment, every section headline, every stat numeral. Newsreader is used at weight 400 only; the type relies on size to assert hierarchy, not weight. **Hanken Grotesk** — a humanist sans — carries every body paragraph, every uppercase label, every micro-text. Hanken runs at 400 for body and 600 for labels. **DM Mono** — a monospace — carries every chrome element: page numbers, mono tags, axis ticks, vertical-stack labels, delta arrows in tables. The three-face system creates the system's identity: serif statements + sans bodies + mono chrome.\n\nThe palette is **strictly two-color**: cream and cobalt, with a softer cobalt `{colors.ink-soft}` and two opacity tones (`{colors.grid}` at 10%, `{colors.ink-faint}` at 18%) for atmospheric and structural use. There are no accent colors. Cobalt is the *only* ink color — for headlines, body, borders, page numbers, the graph paper, the pixel-glitch decoration, and the QR patches. The cream paper is the *only* surface. Even the pixel-stack bar chart uses cobalt at two opacities (10% off, 100% on) to render data.\n\nDepth is **flat with structural rules**. There are no drop shadows, no elevated cards, no rounded surfaces. Hierarchy comes from:\n- The 1.5px cobalt **hairline frame** (top and bottom of every slide).\n- 1.5px cobalt **topbar rule** under section headers.\n- 1px faint-cobalt **row dividers** between table or index entries.\n- The 10%-opacity **graph paper grid** behind everything.\n- The pixel-glitch and QR-block **decorative SVG patches** as compositional accents.\n\n**Density philosophy: medium to dense, structured by the grid.** Cobalt Grid is built for editorial density — magazine spreads, trend indices, data ledgers. A correctly composed slide pairs one large Newsreader headline with multiple structured information rows (an index of six trends, a ledger of eight entries, a chart with eight pixel-stack bars). The graph paper underneath actively wants to be filled; sparse slides leave too much grid showing and read as wireframe. The exception is the manifesto, quote, and colophon layouts, which deliberately leave space open and let the graph paper breathe. Choose density by slide type: chapter / manifesto / quote / colophon are sparse; index / data / table are dense.\n\n**Key Characteristics:**\n- Cream paper canvas `{colors.paper}` with electric cobalt `{colors.ink}` as the only ink — strictly two-color.\n- Permanent 28–44px graph-paper grid in 10%-opacity cobalt behind every slide.\n- Top and bottom 1.5px cobalt hairlines frame every slide with `{spacing.edge}` insets.\n- Newsreader serif at weight 400 for every display/headline; Hanken Grotesk sans for body/labels; DM Mono for all chrome.\n- Pixel-glitch vertical scanline columns and QR-style 8×8 mosaics as the system's signature decorative patches.\n- Display type can be enormous — `{typography.display-hero}` up to 18vh (≈194px on a 1080-tall display) and `{typography.vbig-numeral}` to 240px.\n- Hanken labels are uppercase at 0.16–0.18em letter-spacing; mono tags carry 0.04–0.06em tracking.\n- Pixel-stack bar charts render data as stacks of grid-unit cells (cobalt on / cobalt-10% off).\n- Page number bottom-right, mono navigation hint bottom-left, both anchored above the bottom hairline.\n\n## Colors\n\n### Two-Color System\n- **Paper** (`{colors.paper}` — #F0EBDE): The canvas. Warm cream off-white with a clear yellow-warm bias — closer to \"newsprint paper\" than \"blank white.\" Used as the universal slide background and as the fill behind QR-blocks so they read as discrete patches against the pixel-glitch column.\n- **Paper-2** (`{colors.paper-2}` — #E6E0CE): A slightly deeper cream. Defined in the palette but used sparingly — available for subtle region differentiation when needed.\n- **Ink** (`{colors.ink}` — #1F2BE0): Electric cobalt / royal blue. The *only* ink color in the system. Used for all headlines, all body text, all borders, all chrome, the graph paper grid, the pixel-glitch decoration, and the QR patches. The high saturation is intentional — at full strength it reads as risograph-printed cobalt, not navy blue.\n- **Ink Soft** (`{colors.ink-soft}` — #5560E5): A lighter cobalt for secondary marks. Defined in the palette but used sparingly — most softened cobalt in the system comes from opacity-on-ink rather than this dedicated tone.\n- **Grid** (`{colors.grid}` — rgba(31, 43, 224, 0.10)): 10%-opacity cobalt. Used exclusively for the permanent graph-paper grid behind every slide, and for the \"off\" cells in pixel-stack bar charts.\n- **Ink Faint** (`{colors.ink-faint}` — rgba(31, 43, 224, 0.18)): 18%-opacity cobalt. Used exclusively for the faint row dividers in index lists, tables, and ledgers — between rows that share the same dense information layer.\n\n### Defaults\n- **Default slide surface**: `{colors.paper}`.\n- **Default headline color**: `{colors.ink}` — every Newsreader serif headline is cobalt. There is no other headline color.\n- **Default body text color**: `{colors.ink}` — body is also cobalt, just smaller. Cobalt-on-cream is the system's only text relationship.\n- **Default label / mono / micro color**: `{colors.ink}`.\n- **Default border color (structural rules)**: `{colors.ink}` at 1.5px solid.\n- **Default border color (row dividers within dense lists)**: `{colors.ink-faint}` at 1px solid.\n- **Default grid color**: `{colors.grid}` — never visible at full strength; never disabled.\n- **Default chart data color (on)**: `{colors.ink}`.\n- **Default chart data color (off)**: `{colors.grid}`.\n\nThe system has **no accent color** in the populist sense. A second color does not exist — adding a red callout, a green stat, or a yellow highlight breaks the risograph two-color identity. When emphasis is needed, increase type size, switch from Hanken to Newsreader, add a mono delta arrow, or use opacity to dim rather than coloring to highlight.\n\n## Typography\n\n### Font Family\nThe system runs on a **three-face conversation**: `Newsreader` (serif, weight 400 / 500 italic) carries every display and headline; `Hanken Grotesk` (sans, weights 400–700) carries every body, label, and micro-text; `DM Mono` (monospace, 400–500) carries every chrome element. There is no fourth face.\n\nNewsreader's roman letterforms run at weight 400 almost exclusively — the type relies on size to assert hierarchy, not weight. Italic Newsreader is loaded (300/400/500 italic axis) and is used inside the manifesto's `.roman` modifier (which is *non-italic* — the modifier flips the italic body back to roman for an inline pull moment) and is available for inline `<em>` emphasis. Hanken Grotesk carries body at 400 and labels at 600. DM Mono provides chrome at 400.\n\nThe serif/grotesk/mono three-way pairing is the system's primary typographic rhythm. Each face has a strict role: serif = statement, grotesk = supporting copy, mono = catalogue chrome.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.vbig-numeral}` | clamp(110px, min(11vw, 18vh), 240px) | Newsreader | 400 | Largest numerical display — hero stat figure |\n| `{typography.display-hero}` | clamp(100px, min(11vw, 18vh), 200px) | Newsreader | 400 | Largest title — cover or hero display |\n| `{typography.display-closing}` | clamp(72px, min(8.4vw, 14vh), 180px) | Newsreader | 400 | Conclusive headline on a colophon/closing layout |\n| `{typography.display-chapter}` | clamp(56px, min(6vw, 10vh), 130px) | Newsreader | 400 | Section-opening or chapter title |\n| `{typography.display-manifesto}` | clamp(56px, min(6.4vw, 11vh), 120px) | Newsreader | 400 | Manifesto statement display |\n| `{typography.display-quote}` | clamp(50px, min(5.6vw, 9vh), 110px) | Newsreader | 400 | Pull-quote body |\n| `{typography.headline-index}` | clamp(48px, min(5vw, 8.5vh), 100px) | Newsreader | 400 | Index or trend-list section header |\n| `{typography.headline}` | clamp(46px, min(4.8vw, 8.2vh), 92px) | Newsreader | 400 | Data, table, or chart section header |\n| `{typography.ed-callout}` | clamp(28px, min(2.8vw, 4.6vh), 50px) | Newsreader | 400 | Editorial subtitle below a hero title |\n| `{typography.row-headline}` | clamp(26px, 2vw, 40px) | Newsreader | 400 | Per-row headline inside an index list |\n| `{typography.table-name}` | clamp(20px, 1.6vw, 28px) | Newsreader | 400 | Per-row name cell inside a ledger table |\n| `{typography.body-lede}` | clamp(15px, 1vw, 18px) | Hanken Grotesk | 400 | Lead paragraph below a chapter title |\n| `{typography.body-stat}` | clamp(15px, 1vw, 17px) | Hanken Grotesk | 400 | Descriptive paragraph next to a stat figure |\n| `{typography.body}` | clamp(14px, 0.95vw, 15px) | Hanken Grotesk | 400 | Standard paragraph body |\n| `{typography.micro-strong}` | clamp(13px, 1vw, 16px) | Hanken Grotesk | 600 | Largest uppercase label / kicker |\n| `{typography.micro}` | clamp(12px, 0.9vw, 14px) | Hanken Grotesk | 600 | Standard uppercase label / lab-tag |\n| `{typography.micro-sm}` | clamp(11px, 0.75vw, 12px) | Hanken Grotesk | 600 | Smallest uppercase label / table header |\n| `{typography.mono-tag}` | clamp(13px, 0.9vw, 15px) | DM Mono | 400 | Mono catalogue tag, num-tag in an index row |\n| `{typography.mono-tick}` | clamp(12px, 0.85vw, 14px) | DM Mono | 400 | Mono chart tick label, vertical-stack-label entry |\n| `{typography.mono-chrome}` | clamp(11px, 0.82vw, 13px) | DM Mono | 400 | Mono page number, navigation hint, secondary meta |\n\n### Defaults\n- **Default size for the primary section headline (index, data, table)**: `{typography.headline}` (clamp 46–92px) or `{typography.headline-index}` for index layouts.\n- **Default size for a cover or hero display**: `{typography.display-hero}` (clamp 100–200px).\n- **Default size for a chapter or section-opener title**: `{typography.display-chapter}` (clamp 56–130px).\n- **Default size for paragraph body**: `{typography.body}` (clamp 14–15px).\n- **Default size for any inline uppercase label**: `{typography.micro}` (clamp 12–14px) at weight 600 with 0.16em tracking.\n- **Default size for any mono chrome (page number, tag, tick)**: `{typography.mono-tag}` (clamp 13–15px).\n- **Default weight for Newsreader**: 400. Newsreader bold is not used.\n- **Default weight for Hanken body**: 400.\n- **Default weight for Hanken label**: 600.\n\nWhen unsure, reach for `{typography.headline}` (clamp 46–92px) for the slide's primary section header, not `{typography.display-chapter}` (which is for chapter-opening moments only).\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Newsreader element is set at weight 400.** Newsreader at 600/700 is not used in this system. The literary-serif aesthetic depends on the open roman letterforms at modest weight.\n- **Every Newsreader element is rendered in `{colors.ink}` (cobalt).** A cream serif headline does not exist.\n- **Every Hanken label, kicker, lab-tag, and micro-text is uppercase with at least 0.16em letter-spacing** at weight 600. Hanken caps without tracking read as untreated.\n- **Every DM Mono element is rendered in `{colors.ink}` with 0.04–0.08em letter-spacing.** Mono with tighter tracking reads as code, not editorial.\n- **Every display element carries negative letter-spacing.** Display-hero at -0.008em, vbig-numeral at -0.015em, chapter / closing / manifesto / quote at -0.005em.\n- **The graph-paper grid is permanent on every slide.** The `.stage::before` rule is not overridable per-slide — every composition sits on top of it.\n- **The top and bottom hairlines frame every slide.** The `.hairlines::before` and `.hairlines::after` rules apply by default; they should not be suppressed.\n- **Page number sits above the bottom hairline with clear vertical space.** The bottom hairline anchors at `bottom: clamp(20px, 2vh, 32px)`; the page number anchors at `bottom: clamp(48px, 4.8vh, 76px)` — they must not collide.\n\n### Typography Principles\nThe Newsreader-400 + Hanken-600-uppercase-tracked + DM-Mono-tracked combination is the system's voice. Switching any of those three face/weight/case rules reads as a different design system. Italic is permitted via Newsreader italic (loaded) for inline `<em>` and for the manifesto's editorial italic-with-`.roman`-flip treatment. Underline is not used.\n\nLine-height collapses at the top: display-hero / vbig-numeral at 0.92, display-chapter at 1.0, body at 1.5. The tight display + open body contrast is what gives the system its trend-report rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, pointer-events auto) at a time. Transitions are 280ms opacity fades.\n\nA `.stage` wrapper sits inside `.deck` (`position: fixed; inset: 0`) and provides the cream background plus the permanent `::before` graph-paper grid.\n\n### Edge and Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.edge}` | clamp(36px, 3.6vw, 80px) | Standard slide edge inset for content, page number, hairlines |\n| `{spacing.edge-inner}` | clamp(60px, 8vw, 160px) | Tighter inset used for manifesto-style centered statements |\n| `{spacing.pad-top}` | clamp(76px, 8vh, 130px) | Top padding inside index/data/table frame, below the top hairline |\n| `{spacing.pad-bottom}` | clamp(100px, 10vh, 150px) | Bottom padding inside index/data/table frame, above the bottom hairline |\n| `{spacing.gap-lg}` | clamp(28px, 3vw, 56px) | Large gap between major regions inside a slide |\n| `{spacing.gap-md}` | clamp(20px, 2.2vh, 36px) | Standard inter-element spacing |\n| `{spacing.gap-sm}` | clamp(14px, 1.6vh, 24px) | Tight spacing — chrome bar inner gap, attribution-to-quote gap |\n| `{spacing.gap-xs}` | clamp(10px, 1.2vh, 18px) | Vertical-stack row gap, smallest inter-element gap |\n\n### Universal Chrome Frame\nEvery slide carries a four-piece chrome frame:\n1. **Top hairline** — 1.5px solid cobalt at ≈2.6vh from top, inset by `{spacing.edge}` left/right.\n2. **Bottom hairline** — 1.5px solid cobalt at ≈2vh from bottom, inset by `{spacing.edge}` left/right.\n3. **Page number** — DM Mono cobalt anchored bottom-right, ≈4.8vh from bottom (above the bottom hairline).\n4. **Nav hint** — DM Mono cobalt at 40% opacity anchored bottom-left, same vertical level as page number.\n\nThis frame is rendered automatically by the `.hairlines` and `.pagenum` / `.nav-hint` rules — every new slide inherits it.\n\nA nested **`.frame` content rectangle** sits inside the chrome on index, data, table, and chapter layouts. It is absolutely positioned with `inset: {spacing.pad-top} {spacing.edge} {spacing.pad-bottom}` and serves as the actual content container.\n\n### Composition Patterns\nWithin the chrome frame, content typically follows one of these compositional moves (not enumerated as available layouts — these are descriptive, not prescriptive):\n- A `topbar` block (Newsreader headline left, mono lab-tag right, 1.5px cobalt rule beneath) above a main content region.\n- A pixel-glitch column anchored to the right edge of the content region (or occasionally the left, as on the colophon).\n- A QR-block patch as a small punctuation mark (typically top-right corner).\n- A vertical-stack mono label column anchored to one edge.\n- A dense ledger or index of equal-flex rows separated by faint cobalt dividers.\n\n## Depth and Elevation\n\n### Flat With Structural Rules\nCobalt Grid has no drop shadows, no elevated cards, no rounded surfaces, no gradients. Every element sits on a single plane.\n\nDepth signals are entirely structural:\n- **1.5px cobalt rules** — top/bottom slide hairlines, topbar rule, attribution rule.\n- **1px faint cobalt dividers** — row separators inside index lists, tables, and ledgers.\n- **Graph-paper grid** — the 10%-opacity cobalt background creates a sense of measured plane.\n- **Pixel-glitch decoration** — vertical scanline columns add visual texture without z-axis elevation.\n- **QR-block patches** — read as discrete graphic objects against the grid+glitch background due to their paper-fill and 1.5px paper-color outset shadow (which is functionally an \"anti-shadow\" — it pushes the grid away so the QR mosaic stays readable).\n\nThe QR-block's 1.5px paper-color outset is the *only* shadow-like effect in the system, and it exists to preserve readability against the pixel-glitch column, not to create elevation. There is no z-axis depth.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 0 | Every structural element — frames, cards, ledger rows, QR cells, pixel-glitch rectangles, charts, tables |\n| 50% (circle) | None — Cobalt Grid has no circular elements |\n\nThe system uses **zero rounded corners**. Every shape is a strict rectangle. This is unusual for editorial systems and is part of the trend-report identity.\n\n### Border Weights\n- **1.5px solid `{colors.ink}`** — primary structural rules: top/bottom slide hairlines, topbar bottom rule, table head row bottom border, chart baseline rule.\n- **1px solid `{colors.ink}`** — attribution rules above quote bylines, manifesto attribution top border.\n- **1px solid `{colors.ink-faint}`** (18% opacity) — faint row dividers between dense list / table / ledger entries.\n- **1px solid `{colors.grid}`** (10% opacity) — the permanent graph-paper grid behind every slide.\n- **1.5px box-shadow in `{colors.paper}`** — QR-block readability outset (functional, not decorative).\n\nAll structural borders are cobalt. Colored borders do not exist (there is no \"colored\" — only cobalt at different opacities).\n\n### Decorative Element Types\n\n**Pixel-glitch column** — A stair-stepped vertical column rendered as inline SVG. Each step is a rectangle filled with evenly-spaced cobalt vertical scanlines on cream. Steps decrease in width as the column descends (or vice versa), creating a \"glitch\" pixelation effect. Anchored to one edge of a slide (typically right), absolutely positioned, z-index 3, pointer-events disabled. Decorative only — sizes range from compact 16vw × full-height secondary use to 32vw × full-height signature cover decoration. Opacity 0.6–1.0 depending on context (lower opacity when used as background, full opacity when used as primary decoration).\n\n**QR-block patch** — An 8×8 grid of cells (some `.on` = solid cobalt, some default = paper) forming a QR-code-like mosaic. Sits over a paper-fill background with 4px internal padding and 1.5px paper-color outset (which preserves readability when overlapping the pixel-glitch column). Typical size 58–100px square. Used as compositional punctuation — typically top-right corner.\n\n**Vertical-stack label column** — A column of DM Mono labels written with `writing-mode: vertical-rl` and `text-orientation: mixed`, rotating Latin text 90° clockwise. Anchored to right edge, vertically centered, evenly spaced. Reads as catalogue-style metadata stacked along the slide edge.\n\n**Topbar (with rule)** — A flex row containing a Newsreader headline left and a small mono lab-tag right, separated from the content below by a 1.5px solid cobalt bottom border. The universal section-header pattern.\n\n**Frame** — An absolutely-positioned content container with `inset: {spacing.pad-top} {spacing.edge} {spacing.pad-bottom}`. Holds the slide's actual content while keeping it clear of the hairline frame, page number, and nav hint.\n\n**Index list** — A 2×3 grid of equal-flex rows, each row a 56px num-tag column + a content column with a Newsreader row-headline and a Hanken body paragraph, separated by 1px faint-cobalt bottom borders.\n\n**Pixel-stack bar chart** — A row of 8 vertical \"stacks,\" each a flex column-reverse of small horizontal cells (default 10%-cobalt off, .on solid cobalt). Cell counts represent values. A 1.5px cobalt top border with mono tick labels sits beneath the bars as the axis. Renders data as pixelated bars made of grid units — directly echoes the pixel-glitch decoration.\n\n**Ledger table** — A flex column of dense rows, each row a 5-column grid (76px num-tag / 0.6fr name / 1.4fr description / 0.7fr mood-tag / 0.5fr delta-tag), separated by 1px faint-cobalt bottom borders. Header row uses 1.5px solid cobalt. Delta tags use `↑` / `↓` / `—` prefixes via `::before`.\n\n**Manifesto** — A centered statement in `{typography.display-manifesto}` Newsreader with an italic `<em>` body containing inline `.roman` (non-italic) emphasis moments. Below: a 1px cobalt top border with a Hanken who-tag and a mono meta-tag side-by-side.\n\n**Quote** — A Hanken kicker above a `{typography.display-quote}` Newsreader pull, with a 1px cobalt top-border attribution row beneath. Paired with a compact pixel-glitch column at the right edge.\n\n**Colophon** — Right-aligned closing layout. A large `{typography.display-closing}` Newsreader title aligned right with a kicker above. Pixel-glitch column anchored to left edge (mirroring the cover). Page footer with 3–4 column grid of paragraph credits.\n\n## Do's and Don'ts\n\n### Do\n- Set every Newsreader element at weight 400 in `{colors.ink}`. The thin roman serif at modest weight is the literary register's identity.\n- Render every label, kicker, and micro-text in Hanken Grotesk weight 600 uppercase with 0.16em+ letter-spacing in `{colors.ink}`.\n- Render every chrome element (page number, mono tag, tick label, vertical-stack) in DM Mono with 0.04–0.08em tracking in `{colors.ink}`.\n- Keep the permanent graph-paper grid behind every slide. The grid is the system — disabling it breaks the identity.\n- Maintain the top and bottom 1.5px cobalt hairlines on every slide, with the page number and nav hint sitting above the bottom hairline.\n- Use the pixel-glitch column as the system's primary decorative move on declarative slides (cover, chapter, quote, colophon).\n- Pair pixel-glitch with a QR-block patch when the composition needs a discrete graphic anchor — the QR's paper-fill keeps it readable against the glitch lines.\n- Use the `topbar + 1.5px cobalt rule` pattern as the standard section-header treatment on index, data, and table layouts.\n- Use 1px faint-cobalt dividers between rows of dense lists, tables, and ledgers.\n- Render charts as pixel-stack columns of grid cells (cobalt on / cobalt-10% off). The pixel-stack bar treatment echoes the decorative glitch and unifies the visual language.\n\n### Don't\n- Don't introduce a second ink color. The system is strictly two-color: cream paper + cobalt ink. A second hue breaks the risograph identity.\n- Don't render a Newsreader headline at weight 600 or 700. The 400-only rule is a signature.\n- Don't disable or hide the graph-paper grid. It is the canvas tone, not optional decoration.\n- Don't suppress the top/bottom hairlines on a slide. They are the frame — every slide carries them.\n- Don't round any corner. Every shape is a strict rectangle; the system has zero circular elements.\n- Don't add drop shadows, elevated cards, or gradient fills. Depth is structural (rules + grid + glitch), not z-axis.\n- Don't use Hanken caps without 0.16em+ tracking. Untracked Hanken caps read as untreated.\n- Don't put the page number directly on the bottom hairline. It sits at `bottom: clamp(48px, 4.8vh, 76px)` with clear space above the hairline.\n- Don't render the QR-block without its paper-fill and 1.5px paper outset. The fill is what preserves QR readability against the pixel-glitch column.\n- Don't crowd the manifesto, quote, or colophon layouts. Those layouts deliberately leave grid showing — over-stuffing them breaks the contemplative register.\n\n## Responsive Behavior\n\nCobalt Grid is a viewport-fluid 1920×1080 presentation system using `clamp()` and viewport-relative units throughout. There are no explicit responsive breakpoints in the source — every dimension scales between a min and max.\n\n### Scaling Behavior\n- Display-hero scales from ~100px at minimum viewport to ~200px at maximum.\n- Body text scales from 14px to 15px (deliberately narrow range — body stays compact).\n- Graph-paper grid scales from 28px cells (smaller viewports) to 44px cells (larger viewports), maintaining roughly 50–80 cells across the slide width.\n- Edge insets scale from 36px to 80px.\n- The 1.5px hairlines and 1px row dividers are fixed and do not scale.\n\n### Presenter Behavior\n- Slides cross-fade via 280ms opacity transitions.\n- Navigation is JS-driven (the source includes a `.deck` / `.slide.active` pattern); typical keyboard arrow / spacebar conventions apply.\n- The nav hint at bottom-left displays interaction guidance in mono cobalt at 40% opacity.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080. The grid and hairline overlays should render correctly in PDF capture (no blend modes or filters).\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Newsreader 400) | Newsreader | 思源宋体 Noto Serif SC 700 | Google Fonts |\n| Body / Label (Hanken Grotesk 400–600) | Hanken Grotesk | 思源宋体 Noto Serif SC 400 | Google Fonts |\n| Chrome / Mono (DM Mono) | DM Mono | DM Mono (Latin/digit only — keep mono chrome in Latin) | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin font in the same `font-family` stack so Latin glyphs render in Newsreader / Hanken Grotesk and CJK glyphs fall through to NSC automatically. Mono chrome stays Latin/digit-only — page numbers, ticks, and vertical-stack tags do not need a CJK fallback (and DM Mono has no CJK glyphs by design).\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,400..500;1,6..72,400..500&family=Hanken+Grotesk:wght@400..700&family=DM+Mono:wght@400..500&family=Noto+Serif+SC:wght@400;700&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Newsreader\", \"Noto Serif SC\", Georgia, serif;\n  --font-body: \"Hanken Grotesk\", \"Noto Serif SC\", sans-serif;\n  --font-mono: \"DM Mono\", ui-monospace, monospace;\n}\n/* Headlines use Noto Serif SC 700; body uses Noto Serif SC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.7 (from 1.5) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 0.16em+ Hanken caps tracking shatters Hanzi cadence). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any micro/label/kicker when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nNoto Serif SC (思源宋体) is the natural Hanzi partner for Newsreader — both are quiet literary serifs with thin-thick modulation that holds at very large display sizes (up to 18vh / 240px on the vbig-numeral). The cobalt-on-cream two-color rule absorbs Chinese without negotiation because there's only one ink color to assign. NSC 700 carries display moments where Newsreader 400 would have at 100–200px; NSC 400 carries body and labels. The DM Mono chrome layer (page numbers, vertical-stack tags, ticks) intentionally stays Latin/digit-only — `编号 001` is rendered as Latin \"001\" in DM Mono with the Hanzi prefix in Hanken/NSC, preserving the mono catalogue chrome's \"technical spec\" voice. The graph-paper grid, pixel-glitch column, and QR-block decoration are content-agnostic and read identically in any language. Vertical-stack labels written with `writing-mode: vertical-rl` work for Hanzi too — Chinese is the original vertical script — but mixing Latin and Hanzi in the same vertical run will rotate the Hanzi to upright while keeping Latin rotated 90°; isolate runs by language.\n\n### Known CJK Gap\n\nNoto Serif SC has no italic axis (Chinese type historically has no italic), so the manifesto layout's italic-Newsreader-with-`.roman`-flip emphasis pattern collapses when content is Hanzi. Substitute a weight contrast (NSC 700 vs NSC 400) or a faint-cobalt tone (`{colors.ink-faint}`) to recover the emphasis register. Newsreader's optical-size axis (6..72) has no NSC equivalent — the literary \"this is a small caption\" optical refinement is unavailable for Hanzi, but at NSC's quality this is rarely noticeable.\n\n## Iteration Guide\n\n1. Every new slide inherits the permanent graph-paper grid, the top and bottom 1.5px cobalt hairlines, the page number bottom-right, and the nav hint bottom-left. Don't author these per-slide — they live on `.stage` and `.hairlines`.\n2. Every new headline uses Newsreader at weight 400 in `{colors.ink}`. Don't bold; don't color.\n3. Every new label uses Hanken Grotesk weight 600 uppercase with 0.16em+ letter-spacing in `{colors.ink}`.\n4. Every new chrome element uses DM Mono in `{colors.ink}` with 0.04–0.08em tracking.\n5. New content slides on index / data / table layouts use a topbar (Newsreader headline left + Hanken lab-tag right) with a 1.5px cobalt bottom rule.\n6. New chart slides use the pixel-stack treatment — cobalt on / cobalt-10% off cells in column-reverse stacks. Don't introduce filled bar charts in a single solid block.\n7. New declarative slides (cover, chapter, quote, colophon) use a pixel-glitch column as the primary decoration. Pair with a QR-block when the composition needs a discrete graphic anchor.\n8. New row dividers in dense lists use 1px solid `{colors.ink-faint}` (18% opacity), not full-strength cobalt. Full-strength cobalt is reserved for major structural rules.\n9. New components inherit the zero-radius, no-shadow, no-gradient flatness. If a component breaks any of these, redesign it before adding.\n10. The system has one ink color (`{colors.ink}`) and one surface (`{colors.paper}`). New compositions should never introduce a third color or a third surface tone (paper-2 is available but rarely needed).\n\n## Known Gaps\n\n- The pixel-glitch column is rendered as inline SVG hand-authored per usage; there is no generative component — adjusting the stair-step pattern requires editing the SVG markup directly.\n- The QR-block 8×8 cell pattern is hand-authored per usage; each instance places `.on` cells manually. There is no QR-code generation logic.\n- The pixel-stack bar chart cell counts are hardcoded in markup; there is no data-binding layer translating numeric values to cell-on counts.\n- The vertical-stack label column uses `writing-mode: vertical-rl`; this works in modern browsers but rendering of mixed Latin/CJK in this orientation may vary across rendering engines.\n- The manifesto layout's italic-with-`.roman`-flip pattern (italic Newsreader body containing inline non-italic `.roman` spans for emphasis) is the inverse of typical italic emphasis — the rule lives in the manifesto-specific CSS and is not generalized.\n- The 1.5px paper-color outset on the QR-block is a `box-shadow` used as an anti-shadow (it extends the paper fill outward to clear the grid behind the QR cells). This is the only `box-shadow` in the system and it should not be repurposed for elevation.\n- The colophon's pixel-glitch column anchors to the left edge (mirroring the cover); other slides anchor to the right edge — the directionality is per-slide and should be considered when authoring new declarative layouts.\n- The graph-paper grid cell size scales between 28–44px via `clamp` — at extreme aspect ratios, the grid count across the slide width may feel uneven.\n- The system loads three Google Fonts families (Newsreader, Hanken Grotesk, DM Mono) with multiple weights — initial render requires successful font load to avoid Georgia/Helvetica fallback shifting the visual rhythm.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/cobalt-grid/preview.md (Tokens: ~968 | Category: anthropic-skill) -->\n# Cobalt Grid Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/cobalt-grid/design.md`\n- Preview card: `bold-template-pack/templates/cobalt-grid/preview.md`\n\n## Selection Metadata\n\n- Slug: `cobalt-grid`\n- Tagline: Electric cobalt serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules.\n- Mood: editorial, design-research, studious, modernist, tech-print, monochrome\n- Tone: considered, literary, studious, quietly-modern, editorial\n- Formality: high\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report. Strong for studio annuals, agency capabilities decks, design-research publications, architecture / art / academic decks, and any deck wanting one strict accent colour and a printed-ledger calmness rather than corporate polish.\n- Avoid for: Decks that need warmth, multi-colour energy, or a casual / playful voice — the strict cobalt + cream + grid palette is intentionally austere.\n\n## Visual Snapshot\n\nA Japanese-magazine trend-report system built on warm cream paper, electric cobalt ink, and a graph-paper grid that lives permanently behind every slide. Newsreader serif headlines tower at 18vh while DM Mono carries chrome and ticker text. The signature decoration is a pixel-glitch column — vertical scanlines stair-stepped down the right edge of declarative slides — paired with QR-style 8×8 grid patches. The cultural reference is WIRED Japan, Shift magazine, and architectural trend reports printed in two-color risograph: cream + one cobalt.\n\nCobalt Grid is a two-color trend-report editorial system built on three immovable foundations: a warm cream paper canvas ({colors.paper}), an electric cobalt ink ({colors.ink}), and a permanent graph-paper grid that sits behind every slide. The grid is not optional decoration — it is rendered via a ::before pseudo on every .stage and cannot be turned off. The aesthetic is \"two-color risograph monograph\": cream + cobalt only, with the grid lending the entire deck the feel of architectural tracing paper or a Japanese trend report.\n\n## Preview Ingredients\n\n- Palette: paper #F0EBDE; paper-2 #E6E0CE; ink #1F2BE0; ink-soft #5560E5\n- Typography: Newsreader; Hanken Grotesk; DM Mono\n- Signature move: The 1.5px cobalt hairline frame (top and bottom of every slide).\n- Signature move: 1.5px cobalt topbar rule under section headers.\n- Signature move: 1px faint-cobalt row dividers between table or index entries.\n- Signature move: The 10%-opacity graph paper grid behind everything.\n- Signature move: The pixel-glitch and QR-block decorative SVG patches as compositional accents.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/design.md (Tokens: ~11339 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Coral\ndescription: \"A bold magazine-poster system that runs on three surface registers — coral fire, ink black, and warm cream — animated by Bebas Neue display caps and a constant 45° diagonal hatch pattern. Inter handles body copy; Bebas Neue handles every headline, stat, title, and meta-figure at heavy letter-spacing. The cultural reference is mid-century travel posters, Saul Bass film titles, and modern editorial sport magazines: solid color planes meeting at hard edges, oversized condensed caps as architectural elements, and a single coral hue used both as accent and as full-slide environment.\"\n\ncolors:\n  coral: \"#E85D5D\"\n  coral-dark: \"#D44A4A\"\n  cream: \"#F5F0E8\"\n  cream-dark: \"#E8E0D4\"\n  black: \"#1A1A1A\"\n  gray: \"#6B6B6B\"\n  light-gray: \"#B0B0B0\"\n  white: \"#FFFFFF\"\n\ncolor-aliases:\n  bg: cream\n  ink: black\n\ntypography:\n  hero-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(120px, 9vw, 13vh)\"\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 4px\n  jumbo-feature:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(80px, 15vw, 200px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 12px\n  display-statement:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(42px, 7vw, 100px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  section-headline:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(40px, 6vw, 80px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  column-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(36px, 5vw, 72px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  stat-numeral:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(48px, 7vw, 96px)\"\n    fontWeight: 400\n    lineHeight: 1\n  card-stat:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(36px, 4vw, 56px)\"\n    fontWeight: 400\n    lineHeight: 1\n  sidebar-value:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(28px, 3vw, 48px)\"\n    fontWeight: 400\n    lineHeight: 1\n  card-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(24px, 2.5vw, 36px)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 1px\n  bar-title:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(28px, 4vw, 56px)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  meta-figure:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(44px, 3.5vw, 5.5vh)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  meta-date:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"min(38px, 3vw, 4.8vh)\"\n    fontWeight: 400\n    lineHeight: 1\n    letterSpacing: 2px\n  background-numeral:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(100px, 15vw, 200px)\"\n    fontWeight: 400\n    lineHeight: 1\n    description: \"Decorative oversized numeral placed inside a coral region at rgba(0,0,0,0.12) — wallpaper opacity. Sits behind the actual column title at full opacity.\"\n  giant-mark:\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"clamp(140px, 20vw, 280px)\"\n    fontWeight: 400\n    lineHeight: 1\n    description: \"Oversized quote mark or single character placed inside a coral region at opacity 0.35 — half-decorative, half-content.\"\n  body:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(15px, 1.4vw, 20px)\"\n    fontWeight: 400\n    lineHeight: 1.7\n  body-sm:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(13px, 1.1vw, 16px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  body-light:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(20px, 2.5vw, 36px)\"\n    fontWeight: 300\n    lineHeight: 1.5\n    description: \"Lighter-weight Inter for pull quotes — weight 300 to contrast against the Bebas Neue dominant voice.\"\n  item-text:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(14px, 1.2vw, 18px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  card-text:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"clamp(13px, 1.1vw, 16px)\"\n    fontWeight: 400\n    lineHeight: 1.6\n  bar-meta:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 2px\n    textTransform: uppercase\n  section-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 4px\n    textTransform: uppercase\n  item-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"11px\"\n    fontWeight: 700\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  meta-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"11px\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  sidebar-label:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 1px\n  quote-attribution:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"14px\"\n    fontWeight: 600\n    lineHeight: 1\n    letterSpacing: 3px\n    textTransform: uppercase\n  quote-role:\n    fontFamily: \"Inter, sans-serif\"\n    fontSize: \"12px\"\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 1px\n\nspacing:\n  pad-y: \"clamp(40px, 6vh, 80px)\"\n  pad-x: \"clamp(40px, 8vw, 100px)\"\n  pad-y-tight: \"clamp(28px, 4.5vh, 60px)\"\n  pad-col: \"clamp(32px, 4vw, 60px)\"\n  gap-grid: \"32px\"\n  gap-md: \"40px\"\n  card-pad: \"clamp(24px, 3vh, 40px)\"\n  bar-pad: \"clamp(24px, 4vh, 40px)\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  diagonal-hatch:\n    background: \"repeating-linear-gradient(45deg, transparent, transparent 20px, rgba(0,0,0,0.06) 20px, rgba(0,0,0,0.06) 40px)\"\n    description: \"Signature 45° diagonal hatch pattern in 6%-opacity black. Applied as a pseudo-element overlay on coral regions to provide texture without changing the surface color. Variant: -45° hatch on coral quote-left, with 30/60px stride. Variant: 90° vertical hatch in 10%-opacity black on coral gradient regions, with 60/62px stride. The hatch is a per-region atmospheric treatment, not a slide-level overlay.\"\n  accent-line:\n    width: \"80px\"\n    height: \"4px\"\n    background: \"{colors.coral}\"\n    description: \"Solid 80×4 coral rectangle used as a sub-headline accent rule. Closing or section-divider variant uses 60×4.\"\n  quote-accent:\n    width: \"60px\"\n    height: \"4px\"\n    background: \"{colors.coral}\"\n    description: \"60×4 coral rectangle placed above a quote attribution as a terminal accent.\"\n  title-rule:\n    width: \"100%\"\n    height: \"3px\"\n    background: \"{colors.black}\"\n    opacity: 0.15\n    description: \"Full-width 3px ink rule at 15% opacity used as a subtle horizontal divider beneath the hero title on the cover composition.\"\n  card:\n    background: \"{colors.white}\"\n    padding: \"{spacing.card-pad}\"\n    borderTop: \"5px solid {colors.coral}\"\n    description: \"Column card — white surface with a 5px solid coral top border as the only border on the element. No shadow, no radius.\"\n  sidebar-item:\n    background: \"{colors.white}\"\n    padding: \"20px 24px\"\n    borderLeft: \"4px solid {colors.coral}\"\n    description: \"Compact data tile — white surface with a 4px solid coral left border. Holds a Bebas value and an Inter label.\"\n  card-icon:\n    width: \"48px\"\n    height: \"48px\"\n    background: \"{colors.coral}\"\n    fontFamily: \"Bebas Neue, sans-serif\"\n    fontSize: \"24px\"\n    color: \"{colors.white}\"\n    description: \"48px solid coral square (no radius) containing a 1-character Bebas Neue glyph in white. Used as a card mark.\"\n  timeline-line:\n    height: \"4px\"\n    background: \"{colors.black}\"\n    description: \"Horizontal 4px solid ink line spanning the timeline width. A ::after pseudo overlays a repeating linear-gradient (20px ink + 10px transparent) to create a dashed effect. The dashed pattern is rendered through the gradient, not the border-style.\"\n  t-point-dot:\n    width: \"20px\"\n    height: \"20px\"\n    borderRadius: \"50%\"\n    background: \"{colors.coral}\"\n    border: \"4px solid {colors.cream}\"\n    description: \"Timeline node — 20px coral circle with a 4px cream halo, sitting on the timeline-line.\"\n  nav-dot:\n    width: \"10px\"\n    height: \"10px\"\n    borderRadius: \"50%\"\n    background: \"rgba(255, 255, 255, 0.3)\"\n    border: \"2px solid rgba(255, 255, 255, 0.5)\"\n    description: \"Small 10px nav indicator. White-translucent default on dark/coral surfaces; ink-translucent .dark variant on cream surfaces. Active state fills with coral.\"\n  nav-arrow:\n    width: \"44px\"\n    height: \"44px\"\n    borderRadius: \"50%\"\n    background: \"rgba(255, 255, 255, 0.1)\"\n    border: \"2px solid rgba(255, 255, 255, 0.3)\"\n    description: \"44px circular nav button with translucent fill and 2px translucent border. .dark variant for cream surfaces. Hover state fills with coral.\"\n  zigzag-layer:\n    description: \"SVG zigzag pattern overlay used decoratively on the cover's coral top-section. Renders as a thin black zigzag line at low opacity behind the title.\"\n  pattern-overlay:\n    description: \"Decorative repeating-pattern overlay applied to feature regions — typically 90° vertical hatch in ink at 10% opacity on coral gradient backgrounds. Separate from the 45° diagonal-hatch which is the system's primary texture.\"\n  bar-fill:\n    description: \"Chart.js horizontal bar fills use solid coral (#E85D5D) as the primary series color, with a darker coral (#D44A4A) for comparison or secondary series.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCoral is a **bold magazine-poster system** built on three surface registers — coral fire, ink black, and warm cream — that meet at hard edges. The defining structural premise is **solid color planes**: a single slide will split into a coral half + a cream half + an ink top-section, with each region a flat solid color holding its own self-contained composition. There are no gradient transitions between regions; the meeting point of two colors is the layout. This is the populist counterpart to a more refined editorial system — closer to a sports magazine cover than a literary catalogue.\n\nThe typeface stack is a **two-face hierarchy**. **Bebas Neue** — a tall narrow condensed sans display face — carries every headline, every stat, every column title, every meta figure, every section name. Bebas runs at its single available weight (400) and is treated as architectural — heavy letter-spacing (2–12px), oversized scale (up to 200px on jumbo features), and always set in its native uppercase. **Inter** — a contemporary humanist sans — carries every body paragraph, every label, every micro-text, every attribution. Inter spans weights 300 to 700: 300 for pull-quote bodies, 400 for paragraph body, 600 for meta labels, 700 for section eyebrows. The Bebas/Inter pair creates the system's voice: Bebas declares, Inter explains.\n\nThe palette is **three surfaces + ink + neutrals**. The coral `{colors.coral}` is both *the* accent (a 4px left border on a sidebar tile, a 5px top border on a card, a 48px solid icon square) and an entire slide environment (a full coral panel, the cover's top-section, a coral gradient feature region). The cream `{colors.cream}` is the warm canvas — the magazine paper. Ink `{colors.black}` is the strongest surface, used as full-slide background on quote and statement layouts. White appears only as card fills against coral or cream regions. Two grays (`{colors.gray}`, `{colors.light-gray}`) carry body and meta text.\n\nDepth is **flat with hard color edges**. There are no drop shadows, no rounded surfaces, no soft elevations. Hierarchy comes from:\n- **Solid color region splits** — coral / ink / cream regions meeting at hard edges.\n- **Accent borders** — 4px coral left, 5px coral top, 3px ink top, 4px ink horizontal.\n- **45° diagonal hatch** — a signature 6%-opacity black diagonal repeating pattern overlaid on coral regions, providing texture.\n- **Oversized decorative typography** — background numerals at 12% opacity, giant quote marks at 35% opacity, sitting behind or beside primary content.\n\n**Density philosophy: medium-high, structured by region.** Coral slides are structured rather than dense — each color region holds a self-contained composition (a single column title with one body block, a single stat tile with one label, a single timeline line with five dots). The aesthetic relies on regions feeling fully populated within their boundary, not on the slide overall being crowded. A correctly composed slide pairs 2–3 substantive regions, each fully expressed. A slide that feels broken is one where a coral region holds only a sparse fragment, or where a cream region attempts to carry too many competing elements. Decorative oversized numerals at 12% opacity behind a region's primary title are the standard \"fill the region\" move when content alone doesn't fully occupy the plane.\n\n**Key Characteristics:**\n- Three-surface system: `{colors.coral}` (fire), `{colors.black}` (ink), `{colors.cream}` (paper) — used as solid regions meeting at hard edges.\n- Bebas Neue uppercase condensed display for every headline/stat/title; Inter sans for every body/label/attribution.\n- 45° diagonal hatch in 6%-opacity black on coral regions as the signature atmospheric texture.\n- Coral as both accent (4–5px borders, 48px icon squares, 4-point timeline dots) and environment (full-region surfaces).\n- Decorative oversized numerals at 12% opacity behind column titles inside coral regions.\n- Oversized quote marks at 35% opacity inside coral regions as half-decorative content.\n- No rounded corners on rectangles; circular shapes only for nav dots, nav arrows, and timeline nodes.\n- Heavy letter-spacing on every Bebas element: 1–4px on most, 12px on the largest feature treatment.\n- Hard-edge color splits (vertical, horizontal, or 40/60 ratios) define slide composition.\n\n## Colors\n\n### Three-Surface System\n- **Coral** (`{colors.coral}` — #E85D5D): The signature color — a warm orange-red, vivid but not neon. Used both as accent (4px sidebar-item left border, 5px card top border, 48px card-icon fill, 80×4 accent line, 60×4 quote accent, timeline-point dot, chart primary series, hover-state fills, section eyebrows, stat-numerals on cream surfaces) and as a full-region surface (cover top-section, two-column left panel, full-width feature region, quote left panel). Defines the system.\n- **Coral Dark** (`{colors.coral-dark}` — #D44A4A): A darker coral variant. Used as the start stop in linear-gradient feature regions (135° from coral-dark to coral), and as the chart secondary/comparison series color.\n- **Cream** (`{colors.cream}` — #F5F0E8): The warm canvas. Used as default slide background, as the cover's bottom-section, as info-bar surfaces, as body text color on ink-black surfaces, and as the timeline-point dot halo.\n- **Cream Dark** (`{colors.cream-dark}` — #E8E0D4): A slightly deeper cream. Available in the palette for subtle region differentiation but sparingly used.\n- **Black** (`{colors.black}` — #1A1A1A): Near-black ink. Used as headline color on cream surfaces, as the full-background ink register for quote and certain feature slides, as timeline-line color, as title-rule color, as decorative background-numeral color (at 12% opacity inside coral regions), and as giant-mark color (at 35% opacity inside coral regions).\n- **Gray** (`{colors.gray}` — #6B6B6B): Mid neutral. Used for body paragraph text on cream surfaces, for meta labels, for sidebar labels, for card body copy, for quote roles.\n- **Light Gray** (`{colors.light-gray}` — #B0B0B0): Pale neutral. Defined in the palette but used sparingly — available for tertiary text where gray is too strong.\n- **White** (`{colors.white}` — #FFFFFF): True white. Used as card fills (sidebar-item, card, column-card), as item-text color on ink surfaces, as nav-dot/nav-arrow translucent fills.\n\n### Defaults\n- **Default slide surface**: `{colors.cream}`. (Cover and feature slides use mixed-surface compositions; statement, quote, and three-column slides default to cream or ink.)\n- **Default headline color on cream surfaces**: `{colors.black}` — Bebas Neue headlines are ink, not coral.\n- **Default headline color on coral surfaces**: `{colors.black}` — ink-on-fire. Bebas on coral is always ink, never white.\n- **Default headline color on ink surfaces**: `{colors.cream}`.\n- **Default body text color on cream surfaces**: `{colors.gray}`.\n- **Default body text color on ink surfaces**: `{colors.cream}`.\n- **Default body text color on coral surfaces**: `{colors.black}` — ink, not white.\n- **Default eyebrow / section-label color**: `{colors.coral}` on cream and ink surfaces; `{colors.black}` on coral surfaces.\n- **Default accent border color**: `{colors.coral}` — 4px left (sidebar tiles), 5px top (cards), 48px solid (icon squares).\n- **Default decorative numeral color inside a coral region**: `rgba(0, 0, 0, 0.12)` (ink at 12% opacity).\n- **Default giant-mark color inside a coral region**: `rgba(0, 0, 0, 0.35)` (ink at 35% opacity).\n- **Default chart primary series color**: `{colors.coral}`.\n- **Default chart comparison series color**: `{colors.coral-dark}`.\n\nThe three surfaces are intermixed by composition: a slide may be split coral/cream, coral/ink, ink/cream, or held to a single surface. There is no semantic mapping between surfaces; each is chosen for compositional balance and contrast.\n\n## Typography\n\n### Font Family\nThe system runs on a **two-face hierarchy**: `Bebas Neue` (display, single weight 400) carries every headline, stat numeral, column title, meta figure, bar title, card stat, sidebar value, and decorative numeral; `Inter` (sans, weights 300 / 400 / 600 / 700) carries every body paragraph, label, eyebrow, meta-label, attribution, role, and chart legend. There is no third face.\n\nBebas Neue is a tall narrow condensed sans display face — its narrow letterforms allow large sizes without overwhelming the slide width, and its single available weight (400) is treated as the system's only weight. Bebas is always set in its native uppercase. The display character of the system comes from heavy letter-spacing (1–4px on standard headlines, 12px on the largest jumbo feature treatment) and oversized scale (up to 200–280px on jumbo / giant-mark moments).\n\nInter carries the supporting voice with weight contrast: 300 for pull-quote bodies (a lighter register against Bebas's dominance), 400 for body paragraphs, 600 for meta labels, 700 for section eyebrows. Italic and underline are not used.\n\n### Type Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.giant-mark}` | clamp(140px, 20vw, 280px) | Bebas Neue | 400 | Oversized decorative quote mark or feature character inside a coral region |\n| `{typography.jumbo-feature}` | clamp(80px, 15vw, 200px) | Bebas Neue | 400 | Single dominant word filling a feature region |\n| `{typography.background-numeral}` | clamp(100px, 15vw, 200px) | Bebas Neue | 400 | Decorative wallpaper numeral inside a coral region at 12% opacity |\n| `{typography.hero-title}` | min(120px, 9vw, 13vh) | Bebas Neue | 400 | Largest cover title — 3-line title cap-and-line-broken |\n| `{typography.display-statement}` | clamp(42px, 7vw, 100px) | Bebas Neue | 400 | Big declarative statement on a cream surface |\n| `{typography.stat-numeral}` | clamp(48px, 7vw, 96px) | Bebas Neue | 400 | Hero stat figure |\n| `{typography.section-headline}` | clamp(40px, 6vw, 80px) | Bebas Neue | 400 | Primary section headline |\n| `{typography.column-title}` | clamp(36px, 5vw, 72px) | Bebas Neue | 400 | Column or panel title inside a region |\n| `{typography.card-stat}` | clamp(36px, 4vw, 56px) | Bebas Neue | 400 | Per-card stat figure |\n| `{typography.bar-title}` | clamp(28px, 4vw, 56px) | Bebas Neue | 400 | Info-bar title |\n| `{typography.sidebar-value}` | clamp(28px, 3vw, 48px) | Bebas Neue | 400 | Sidebar tile value |\n| `{typography.card-title}` | clamp(24px, 2.5vw, 36px) | Bebas Neue | 400 | Card or column-card title |\n| `{typography.meta-figure}` | min(44px, 3.5vw, 5.5vh) | Bebas Neue | 400 | Cover meta value (location, date, brand) |\n| `{typography.meta-date}` | min(38px, 3vw, 4.8vh) | Bebas Neue | 400 | Cover date variant |\n| `{typography.body-light}` | clamp(20px, 2.5vw, 36px) | Inter | 300 | Pull-quote body (lighter weight against Bebas dominance) |\n| `{typography.body}` | clamp(15px, 1.4vw, 20px) | Inter | 400 | Standard paragraph body |\n| `{typography.item-text}` | clamp(14px, 1.2vw, 18px) | Inter | 400 | Item body on ink surfaces |\n| `{typography.card-text}` | clamp(13px, 1.1vw, 16px) | Inter | 400 | Card body copy |\n| `{typography.body-sm}` | clamp(13px, 1.1vw, 16px) | Inter | 400 | Compact body |\n| `{typography.section-label}` | 12px | Inter | 700 | Section eyebrow above a headline, 4px letter-spacing |\n| `{typography.item-label}` | 11px | Inter | 700 | Item eyebrow in a list, 3px letter-spacing |\n| `{typography.meta-label}` | 11px | Inter | 600 | Cover meta label, 3px letter-spacing |\n| `{typography.quote-attribution}` | 14px | Inter | 600 | Author name below a pull quote, 3px letter-spacing |\n| `{typography.bar-meta}` | 12px | Inter | 400 | Info-bar meta-text, 2px letter-spacing |\n| `{typography.sidebar-label}` | 12px | Inter | 400 | Sidebar tile label, 1px letter-spacing |\n| `{typography.quote-role}` | 12px | Inter | 400 | Author role below quote attribution, 1px letter-spacing |\n\n### Defaults\n- **Default size for the primary section headline**: `{typography.section-headline}` (clamp 40–80px).\n- **Default size for a cover/hero title**: `{typography.hero-title}` (min(120px, 9vw, 13vh)).\n- **Default size for a feature dominant word**: `{typography.jumbo-feature}` (clamp 80–200px) with 12px letter-spacing.\n- **Default size for paragraph body**: `{typography.body}` (clamp 15–20px).\n- **Default size for any uppercase eyebrow / label**: `{typography.section-label}` (12px) at weight 700 with 4px letter-spacing; or `{typography.item-label}` (11px) at weight 700 with 3px letter-spacing for in-list contexts.\n- **Default weight for any Bebas Neue element**: 400 (the only available weight).\n- **Default weight for body**: 400; for pull quotes, 300.\n- **Default weight for labels**: 600 or 700.\n- **Default size for a hero stat figure**: `{typography.stat-numeral}` (clamp 48–96px).\n- **Default size for an in-card stat figure**: `{typography.card-stat}` (clamp 36–56px).\n\nWhen unsure, reach for `{typography.section-headline}` for the slide's primary text moment.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every Bebas Neue element is set in its native uppercase.** Bebas Neue in sentence case does not exist — the typeface itself doesn't support it. This is the system's most foundational typographic rule.\n- **Every Bebas Neue element carries letter-spacing of at least 1px.** Standard headlines at 2px, hero-title at 4px, jumbo-feature at 12px. Untracked Bebas reads as untreated.\n- **Every Inter label, eyebrow, and meta-text is uppercase with 1–4px letter-spacing.** Section labels at 4px, item labels at 3px, bar-meta at 2px, sidebar-labels at 1px. Inter caps without tracking break the editorial register.\n- **Every Bebas headline is rendered in `{colors.black}`, `{colors.cream}`, or `{colors.coral}`** based on surface contrast — never gray. Color choice: ink on cream/coral, cream on ink, coral on cream when emphasis is needed.\n- **Every section eyebrow is rendered in `{colors.coral}`** when sitting on cream or ink, or in `{colors.black}` when sitting on coral. Coral-on-coral does not exist.\n- **Every decorative oversized numeral inside a coral region is rendered at `rgba(0, 0, 0, 0.12)`** — the wallpaper-numeral signature. Sits behind primary content at full opacity.\n- **Every giant decorative mark (quote, single character) inside a coral region is rendered at `rgba(0, 0, 0, 0.35)`** — half-decorative, half-content.\n- **Pull-quote bodies use Inter weight 300, not Bebas.** This is the system's primary \"voice break\" — when content needs to feel personal rather than declarative, Inter Light takes over.\n\n### Typography Principles\nThe Bebas-uppercase-tracked + Inter-mixed-weight combination is the system's voice. Switching either face — using a different display sans for headlines, or using Bebas for body — breaks the system entirely. Italic does not appear. Underline does not appear. The only emphasis mechanism is weight (Bebas dominance), case (uppercase always on Bebas + labels), color (coral on cream surfaces), and surface inversion (placing the element in a different region).\n\nLine-height is uniformly tight at the top of the scale: Bebas elements at 0.9–1.0; Inter body at 1.6–1.7. The display compression + open body is what gives the system its magazine-poster rhythm.\n\n## Layout\n\n### Canvas System\nThe canvas is `100vw × 100vh` — full viewport with hidden overflow. Each `.slide` is absolutely positioned to fill the viewport; one slide carries `.active` (opacity 1, visibility visible) at a time. Transitions are 0.6s opacity + visibility fades.\n\nThe system has **no universal chrome bar**. Each slide is its own self-contained composition with its own padding, region structure, and color treatment. Navigation is per-page (nav arrows + nav dots + slide counter) and floats over the active surface with `.dark` variants for cream surfaces.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-y}` | clamp(40px, 6vh, 80px) | Standard vertical slide padding |\n| `{spacing.pad-x}` | clamp(40px, 8vw, 100px) | Standard horizontal slide padding |\n| `{spacing.pad-y-tight}` | clamp(28px, 4.5vh, 60px) | Compact vertical padding (cover bottom-section) |\n| `{spacing.pad-col}` | clamp(32px, 4vw, 60px) | Column padding inside a region |\n| `{spacing.gap-grid}` | 32px | Column-grid gap |\n| `{spacing.gap-md}` | 40px | Chart container internal gap |\n| `{spacing.card-pad}` | clamp(24px, 3vh, 40px) | Card internal padding |\n| `{spacing.bar-pad}` | clamp(24px, 4vh, 40px) | Info-bar internal padding |\n\n### Region Composition\nCoral's primary layout move is **multi-surface composition**. Slides split into regions of solid color, with the boundary between regions defining the layout. Standard splits include:\n- `grid-template-rows: 32% 68%` — top accent strip + main body (cover composition).\n- `grid-template-rows: 1fr auto` — large feature region + bottom info-bar.\n- `grid-template-columns: 1fr 1fr` — equal vertical split (often coral left + ink right).\n- `grid-template-columns: 40% 60%` — narrow accent column + wider content column (quote layout).\n- Single-surface slides — cream or ink as the whole canvas (statement, three-column, timeline layouts).\n\nThe boundary between regions is always a **hard color edge** — no soft transitions, no gradients across the boundary, no rounded corners at the junction. The meeting of two solid colors is the layout structure.\n\n## Depth and Elevation\n\n### Flat With Hard Color Edges\nCoral has no drop shadows, no soft elevations, no rounded surfaces. Every element sits on a single plane.\n\nDepth signals are entirely structural:\n- **Hard color region boundaries** — the primary structural signal.\n- **Accent borders** — 5px coral top on cards, 4px coral left on sidebar tiles, 4px ink horizontal timeline-line, 3px ink at 15% opacity title-rule.\n- **45° diagonal hatch** — 6%-opacity black diagonal repeating-linear-gradient overlay on coral regions creates texture without depth.\n- **Decorative wallpaper typography** — oversized numerals at 12% opacity and giant marks at 35% opacity sit behind primary content as wallpaper, creating a layered effect without z-index trickery.\n\nIntroducing a box-shadow, an elevated card, or a soft gradient breaks the populist-poster aesthetic that defines the system.\n\n### Atmospheric Hatch Variants\nThe 45° diagonal hatch is the system's primary atmospheric treatment, but several stride/angle variants appear:\n- **45° at 20/40px stride** in 6%-opacity black — the standard coral region overlay.\n- **-45° at 30/60px stride** in 6%-opacity black — coral quote-left panel variant.\n- **90° vertical at 60/62px stride** in 10%-opacity black — coral gradient feature-region overlay.\n\nAll hatches are subtle (6–10% opacity black). They provide texture without competing with content.\n\n## Shapes and Treatment\n\n### Border Radius\n| Value | Use |\n|---|---|\n| 50% (circle) | Circular elements only: `nav-dot` (10px), `nav-arrow` (44px), `t-point-dot` (20px timeline node) |\n| 0 | Everything else: every region, every card, every sidebar tile, every icon square, every chart, every accent line, every accent border |\n\nThe system uses **only two radius values**: 50% (true circle) or 0 (sharp rectangle). Soft-rounded corners do not exist. Cards, icon squares, info-bars, and feature regions are all strict rectangles.\n\n### Border Weights\n- **5px solid `{colors.coral}` (top)** — used on card top borders (column-card pattern).\n- **4px solid `{colors.coral}` (left)** — used on sidebar-item left borders.\n- **4px solid `{colors.black}` (horizontal)** — used on timeline-line.\n- **4px solid `{colors.cream}` (ring)** — used as the halo around 20px coral timeline-point dots.\n- **3px solid `{colors.black}` at 15% opacity** — used on title-rule beneath the cover hero title.\n- **2px solid translucent** — used on nav-dot and nav-arrow borders (rgba(255,255,255,0.3–0.5) on dark surfaces; rgba(26,26,26,0.2–0.4) on cream surfaces).\n\nAll borders are either coral, black, cream, or translucent. There is no border-radius on bordered rectangles.\n\n### Decorative Element Types\n\n**45° diagonal hatch** — A `repeating-linear-gradient(45deg, transparent, transparent 20px, rgba(0,0,0,0.06) 20px, rgba(0,0,0,0.06) 40px)` applied as a `::before` pseudo-element overlay on coral regions. The signature atmospheric texture. Variants: -45°, 90° vertical, different stride widths.\n\n**Background numeral** — An oversized Bebas Neue numeral (clamp 100–200px) at `rgba(0, 0, 0, 0.12)` placed inside a coral region. Sits behind the region's primary column-title at full opacity, creating a layered \"ordinal wallpaper\" effect.\n\n**Giant mark** — An oversized Bebas Neue character (clamp 140–280px) at `rgba(0, 0, 0, 0.35)` placed inside a coral region. Used as a half-decorative half-content element, typically a quotation mark on the coral left panel of a quote layout.\n\n**Card (column-card)** — A white-fill rectangle with a 5px coral top border as its only border. Contains a 48px solid coral icon square at top, a Bebas card-title, an Inter card-text body, and a coral card-stat figure at the bottom. The 5px top border is the only chrome — no other border, no shadow, no radius.\n\n**Sidebar item** — A white-fill rectangle with a 4px coral left border as its only border. Contains a Bebas sidebar-value and an Inter sidebar-label. The 4px left border is the only chrome.\n\n**Icon square** — A 48px solid coral rectangle (no radius) containing a 1-character Bebas glyph in white. Used as a card mark.\n\n**Info bar** — A flex row spanning a region's full width, holding a Bebas bar-title left and an uppercase Inter bar-meta right. Cream background; used as a footer band beneath a feature region.\n\n**Timeline** — A 4px solid ink horizontal line spanning the timeline width, with a `::after` repeating-linear-gradient overlay (20px ink + 10px transparent) creating a dashed effect. Timeline points are 20px coral circles with 4px cream halos, distributed evenly along the line.\n\n**Accent line** — An 80×4 solid coral rectangle used as a sub-headline accent rule, or 60×4 for closing/quote contexts. Always coral, always solid, no radius.\n\n**Title rule** — A full-width 3px solid ink line at 15% opacity, used as a subtle horizontal divider beneath the cover hero title.\n\n**Zigzag layer** — An SVG zigzag pattern rendered as a thin ink line at low opacity, overlaid decoratively on the cover's coral top-section.\n\n**Pattern overlay** — A separate repeating-pattern overlay (typically 90° vertical hatch in 10%-opacity ink) applied to coral gradient feature regions. Distinct from the standard 45° diagonal hatch.\n\n## Do's and Don'ts\n\n### Do\n- Compose slides as multi-surface region splits — coral, ink, and cream meeting at hard color edges. The region boundary is the layout structure.\n- Set every Bebas Neue element in its native uppercase with at least 1px letter-spacing — 2px for standard headlines, 4px for hero titles, 12px for jumbo feature treatments.\n- Render every section eyebrow in `{colors.coral}` uppercase Inter weight 700 with 3–4px letter-spacing on cream and ink surfaces.\n- Apply the 45° diagonal hatch (6% opacity black, 20/40px stride) as a `::before` overlay on coral regions for atmospheric texture.\n- Use the 5px coral top border on cards and the 4px coral left border on sidebar tiles as the only chrome on those elements — no other border, no shadow, no radius.\n- Place oversized decorative Bebas numerals at 12% opacity behind column titles inside coral regions when a region needs more visual weight than the title alone provides.\n- Use Inter weight 300 (light) for pull-quote bodies on ink-surface quote layouts — the lighter weight contrasts against Bebas dominance.\n- Render Bebas headlines on coral surfaces in `{colors.black}` (ink-on-fire). White headlines on coral do not exist in this system.\n- Use the coral chart series + coral-dark comparison series convention for any chart data.\n- Use the 48px solid coral icon square (no radius, single white Bebas glyph) as the standard card mark.\n\n### Don't\n- Don't render Bebas Neue in sentence case. The typeface is uppercase only — that is the entire identity.\n- Don't render Bebas without letter-spacing. Untracked Bebas reads as untreated, even at large sizes.\n- Don't introduce a fourth surface color. The three surfaces (coral / ink / cream) are the system — adding a yellow or blue region breaks the magazine-poster identity.\n- Don't render headlines in `{colors.gray}`. Headlines are ink, cream, or coral; gray is reserved for body and meta text only.\n- Don't add drop shadows, elevated cards, or rounded surfaces. The system is flat — depth comes from color region splits and accent borders.\n- Don't round any rectangular element. Cards, sidebar tiles, info bars, icon squares, accent lines — all sharp rectangles.\n- Don't pair Bebas with a different sans body face. The Bebas + Inter pairing is fixed.\n- Don't render Inter labels in sentence case. Small Inter text is always uppercase with 1–4px tracking.\n- Don't soften region boundaries with gradients (except in the rare 135° coral-dark → coral feature gradient). Region edges are hard color meetings.\n- Don't fill a coral region with sparse content. Coral wants weight — either fully populate the region's composition or use a decorative oversized numeral / giant mark as wallpaper.\n\n## Responsive Behavior\n\nCoral is a viewport-fluid 1920×1080 presentation system using `clamp()`, `min()`, and viewport-relative units throughout. There are no explicit responsive breakpoints in the source — every dimension scales between minimum and maximum bounds.\n\n### Scaling Behavior\n- Hero title scales via `min(120px, 9vw, 13vh)` — capped by both width and height so the 3-line title cannot overflow a short laptop screen.\n- Jumbo feature scales from 80px at minimum viewport to 200px at maximum.\n- Body text scales from 15px to 20px.\n- Padding scales via `clamp` per-region.\n- Borders, icon squares (48px), nav dots (10px), nav arrows (44px), and timeline dots (20px) are fixed and do not scale.\n\n### Presenter Behavior\n- Slides advance via `ArrowRight` or `Space`.\n- Slides reverse via `ArrowLeft`.\n- Nav-dots float at right edge; nav-arrows at bottom-left; slide counter at bottom-right. All three carry `.dark` variants for cream surfaces (ink-translucent fills) and standard variants for coral/ink surfaces (white-translucent fills).\n- Active nav-dot fills with `{colors.coral}` regardless of surface.\n\n### Charts\nCharts are rendered with Chart.js (loaded via CDN). Primary series uses `{colors.coral}`; comparison series uses `{colors.coral-dark}`. Chart styling is configured inline in the JS; restyling requires editing JS, not CSS.\n\n### Print / Export\nNot explicitly handled. Each slide is a 100vw × 100vh block; export workflows should snapshot each slide at 1920×1080. The 45° hatch overlays should render correctly in PDF capture.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Bebas Neue uppercase 400) | Bebas Neue | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body / Label (Inter 300–700) | Inter | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare ZCOOL XiaoWei *after* Bebas Neue and Yozai *after* Inter in the same `font-family` stack so Latin glyphs render in Bebas / Inter and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@300..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Bebas Neue\", \"ZCOOL XiaoWei\", sans-serif;\n  --font-body: \"Inter\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.8 (from 1.7) — Hanzi need more vertical breathing than Latin lowercase, and Coral's body already favors generous leading.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 1–12px Bebas tracking and 1–4px Inter tracking shatter Hanzi cadence). Keep heavy tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any label/eyebrow/meta when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei carries the magazine-poster voice that Bebas Neue provides for Latin — its tall narrow Hanzi forms have a similar architectural-display register, and at the 80–200px sizes Coral uses for jumbo features, ZCOOL XiaoWei holds shape without crumbling the way a system Hanzi face would. Critically, Bebas Neue's \"uppercase only with heavy tracking\" rule is meaningless for Hanzi (no case, no tracking), so the system's most foundational typographic rule simply doesn't apply to CJK — drop the tracking, drop the uppercase, and let ZCOOL XiaoWei stand on size alone. Yozai pairs with Inter for body and labels: its rounded humanist forms match Inter's warmth and stay legible inside coral / cream / ink surfaces. The three-surface region splits, 45° diagonal hatch, decorative oversized numerals (which can stay Latin — 01, 02, 03 work perfectly as wallpaper behind a Chinese column title), and 5px coral top borders are all content-agnostic and work identically in any language.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a single-weight display face with limited glyph coverage compared to Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage. Bebas Neue's narrow condensed proportion has no exact Chinese equivalent — ZCOOL XiaoWei is medium-condensed at best, so Chinese hero titles will occupy ~20% more horizontal space than Latin equivalents. Adjust line-breaks (typically a 2-line Chinese title fills the same area as a 3-line English hero-title) and consider increasing the hero-title `min()` cap when a Chinese title runs long.\n\n## Iteration Guide\n\n1. Every new slide is a composition of one to three surface regions (coral, ink, cream) meeting at hard edges. Choose the surface split based on content emphasis.\n2. Every new headline uses Bebas Neue uppercase with at least 1–2px letter-spacing. Don't sentence-case; don't untracked.\n3. Every new section eyebrow uses Inter weight 700 uppercase 4px-tracked in `{colors.coral}` on cream/ink, or `{colors.black}` on coral.\n4. Every new card uses the 5px coral top border + white fill + no shadow + no radius pattern.\n5. Every new sidebar tile uses the 4px coral left border + white fill + no radius pattern.\n6. Every new coral region carries a 45° diagonal hatch overlay at 6% opacity for texture.\n7. New coral regions that feel underweight get a decorative oversized Bebas numeral at 12% opacity as wallpaper behind the primary title.\n8. New chart series use coral + coral-dark; don't introduce additional series colors.\n9. New quote layouts pair a coral left panel (with a giant mark at 35% opacity) with an ink or cream right panel (carrying the quote body in Inter weight 300).\n10. The system has three surfaces and one accent (coral). Don't introduce a fourth surface color or a second accent.\n\n## Known Gaps\n\n- The Chart.js library is loaded via CDN; chart styling is configured inline in JS rather than reading from CSS variables — restyling requires editing JS.\n- The 45° diagonal hatch stride values (20px/40px standard; 30px/60px variant; 60px/62px vertical) are hardcoded per usage; there is no parameterized hatch component.\n- Decorative oversized numerals are placed as inline content with hardcoded values; there is no generative ordinal system.\n- The cover composition's SVG zigzag-layer is an inline SVG embedded in the source — adjusting the zigzag pattern requires editing SVG markup.\n- The timeline-line's dashed effect is rendered via a `::after` repeating-linear-gradient overlay rather than `border-style: dashed` — this gives precise control over dash dimensions but is unusual.\n- The cover composition uses `min(120px, 9vw, 13vh)` triple-cap sizing to prevent the 3-line title from overflowing on short laptops; new cover variants should follow the same multi-axis cap pattern.\n- The pull-quote layout uses Inter weight 300; Inter weight 300 is loaded explicitly but not used elsewhere — this is the system's only Inter Light deployment.\n- The `cream-dark` and `light-gray` palette tokens are defined but used sparingly across the source; they are available for new compositions that need additional neutral shades.\n- The nav-dot and nav-arrow `.dark` variant must be manually applied on cream-surface slides to maintain visibility — there is no automatic surface detection.\n- Linear-gradient feature regions (135° coral-dark → coral) are the system's only intentional gradient; all other surfaces are flat colors. Using gradients elsewhere breaks the flat-surface aesthetic.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/coral/preview.md (Tokens: ~1011 | Category: anthropic-skill) -->\n# Coral Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/coral/design.md`\n- Preview card: `bold-template-pack/templates/coral/preview.md`\n\n## Selection Metadata\n\n- Slug: `coral`\n- Tagline: Cream and coral on near-black, set in oversized Bebas Neue.\n- Mood: bold, warm, modern, confident\n- Tone: graphic, punchy, magazine\n- Formality: medium\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials. Just as strong for a creator portfolio, a manifesto, or a tech / research deck that wants warmth and a single bold accent instead of corporate cool.\n- Avoid for: Contexts that should feel quiet or institutional — the coral accent and oversized Bebas Neue commit hard to a confident magazine voice.\n\n## Visual Snapshot\n\nA bold magazine-poster system that runs on three surface registers — coral fire, ink black, and warm cream — animated by Bebas Neue display caps and a constant 45° diagonal hatch pattern. Inter handles body copy; Bebas Neue handles every headline, stat, title, and meta-figure at heavy letter-spacing. The cultural reference is mid-century travel posters, Saul Bass film titles, and modern editorial sport magazines: solid color planes meeting at hard edges, oversized condensed caps as architectural elements, and a single coral hue used both as accent and as full-slide environment.\n\nCoral is a bold magazine-poster system built on three surface registers — coral fire, ink black, and warm cream — that meet at hard edges. The defining structural premise is solid color planes: a single slide will split into a coral half + a cream half + an ink top-section, with each region a flat solid color holding its own self-contained composition. There are no gradient transitions between regions; the meeting point of two colors is the layout. This is the populist counterpart to a more refined editorial system — closer to a sports magazine cover than a literary catalogue.\n\n## Preview Ingredients\n\n- Palette: coral #E85D5D; coral-dark #D44A4A; cream #F5F0E8; cream-dark #E8E0D4; black #1A1A1A; gray #6B6B6B; light-gray #B0B0B0; white #FFFFFF\n- Typography: Bebas Neue; Inter\n- Signature move: Solid color region splits — coral / ink / cream regions meeting at hard edges.\n- Signature move: Accent borders — 4px coral left, 5px coral top, 3px ink top, 4px ink horizontal.\n- Signature move: 45° diagonal hatch — a signature 6%-opacity black diagonal repeating pattern overlaid on coral regions, providing texture.\n- Signature move: Oversized decorative typography — background numerals at 12% opacity, giant quote marks at 35% opacity, sitting behind or beside primary content.\n- Signature move: Three-surface system: {colors.coral} (fire), {colors.black} (ink), {colors.cream} (paper) — used as solid regions meeting at hard edges.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/design.md (Tokens: ~7377 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Creative Mode\ndescription: A neo-brutalist editorial presentation system built for 1920x1080 slides. The deck anchors on a warm cream canvas with heavy 4px ink borders, hard offset drop-shadows, and a bold four-color accent palette (forest green, hot pink, burnt orange, sunshine yellow). Display headlines run Archivo Black in pure uppercase — aggressive, loud, zero letter-spacing softness. Monospace labels in JetBrains Mono echo a typesetting rule-sheet. Body copy sits in Space Grotesk. Every slide uses flat color-blocking with no gradients, no rounded cards, and no subtlety. The aesthetic is part Bauhaus grid, part punk zine, part Swiss editorial.\n\ncolors:\n  cream: \"#EFE9D9\"\n  cream-2: \"#E4DCC4\"\n  ink: \"#0F0F0F\"\n  ink-2: \"#2A2A2A\"\n  green: \"#1F8A4C\"\n  green-dark: \"#136636\"\n  pink: \"#F06CA8\"\n  pink-dark: \"#D14E8B\"\n  orange: \"#E85A1F\"\n  yellow: \"#F5C518\"\n\ntypography:\n  display-jumbo:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 220px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-hero:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 160px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-xl:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-lg:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 100px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-md:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 96px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-sm:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 84px\n    fontWeight: 400\n    lineHeight: 0.92\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  display-xs:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 72px\n    fontWeight: 400\n    lineHeight: 0.95\n    letterSpacing: -0.01em\n    textTransform: uppercase\n  stat-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 96px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  step-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 140px\n    fontWeight: 400\n    lineHeight: 0.85\n    letterSpacing: 0\n  step-title:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 34px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  stamp-num:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 64px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  marker-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 46px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  badge-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  table-head:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  table-label:\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    textTransform: uppercase\n  body-lg:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-md:\n    fontFamily: \"Space Grotesk, sans-serif\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.3\n    letterSpacing: 0\n  mono-label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.06em\n    textTransform: uppercase\n  mono-kicker:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  mono-tag:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.1em\n    textTransform: uppercase\n  mono-chart:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.08em\n    textTransform: uppercase\n\nspacing:\n  slide-gutter: 96px\n  chrome-gutter: 64px\n  grid-gap: 28px\n  cell-pad: 32px\n  step-pad: 28px\n  topbar-top: 48px\n  meta-bottom: 40px\n  table-cell-pad: 18px 26px\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  slide-chrome:\n    topbar:\n      fontFamily: \"JetBrains Mono, monospace\"\n      fontSize: 24px\n      letterSpacing: 0.08em\n      textTransform: uppercase\n      position: absolute\n      left: 64px\n      right: 64px\n      top: 48px\n    topbar-pill:\n      border: \"2px solid {colors.ink}\"\n      padding: 6px 14px\n      borderRadius: 999px\n    slide-meta:\n      fontFamily: \"JetBrains Mono, monospace\"\n      fontSize: 24px\n      letterSpacing: 0.06em\n      textTransform: uppercase\n      position: absolute\n      left: 64px\n      right: 64px\n      bottom: 40px\n    slide-meta-dot:\n      width: 10px\n      height: 10px\n      background: \"{colors.ink}\"\n      borderRadius: 50%\n  stat-cell:\n    border: \"4px solid {colors.ink}\"\n    padding: 28px 32px\n  stat-cell-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  stat-cell-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  stat-cell-cream:\n    background: \"{colors.cream}\"\n    color: \"{colors.ink}\"\n  stat-cell-orange:\n    background: \"{colors.orange}\"\n    color: \"{colors.cream}\"\n  step-card:\n    border: \"4px solid {colors.ink}\"\n    padding: 28px\n    height: 420px\n  step-card-cream:\n    background: \"{colors.cream}\"\n    color: \"{colors.ink}\"\n  step-card-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  step-card-yellow:\n    background: \"{colors.yellow}\"\n    color: \"{colors.ink}\"\n  step-card-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  step-arrow:\n    borderTop: \"18px solid transparent\"\n    borderBottom: \"18px solid transparent\"\n    borderLeft: \"24px solid {colors.ink}\"\n  table:\n    border: \"4px solid {colors.ink}\"\n    background: \"{colors.cream-2}\"\n    rowBorder: \"3px solid {colors.ink}\"\n    colBorder: \"3px solid {colors.ink}\"\n  table-head-row:\n    background: \"{colors.ink}\"\n    color: \"{colors.cream}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    borderColor: \"{colors.cream}\"\n  table-col-pink:\n    background: \"{colors.pink}\"\n    color: \"{colors.ink}\"\n  table-col-green:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n  table-col-orange:\n    background: \"{colors.orange}\"\n    color: \"{colors.cream}\"\n  marker-block:\n    background: \"{colors.pink}\"\n    border: \"4px solid {colors.ink}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 46px\n    hardShadow: \"24px 24px 0 {colors.orange}, 24px 24px 0 4px {colors.ink}\"\n  iso-panel:\n    background: \"{colors.green}\"\n    border: \"4px solid {colors.ink}\"\n  stacked-block:\n    border: \"4px solid {colors.ink}\"\n    hardShadow: \"18px 18px 0 {colors.ink}\"\n  badge-rotated:\n    background: \"{colors.yellow}\"\n    border: \"4px solid {colors.ink}\"\n    fontFamily: \"Archivo Black, sans-serif\"\n    fontSize: 28px\n    textTransform: uppercase\n    transform: rotate(-4deg)\n  stamp:\n    background: \"{colors.pink}\"\n    border: \"4px solid {colors.cream}\"\n    width: 340px\n    height: 340px\n    transform: rotate(-6deg)\n  stamp-inner:\n    border: \"4px solid {colors.cream}\"\n    borderRadius: 50%\n  kicker-block:\n    background: \"{colors.ink}\"\n    color: \"{colors.cream}\"\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.14em\n    textTransform: uppercase\n    padding: 8px 16px\n  bar-chart-bar:\n    border: \"3px solid {colors.ink}\"\n  bar-chart-axis:\n    borderRight: \"3px solid {colors.ink}\"\n    borderBottom: \"3px solid {colors.ink}\"\n  decorative-circle:\n    background: \"{colors.yellow}\"\n    border: \"4px solid {colors.ink}\"\n    borderRadius: 50%\n  closing-slide:\n    background: \"{colors.green}\"\n    color: \"{colors.cream}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nCreative Mode is a **neo-brutalist editorial slide system** for 1920x1080 presentations. The foundational aesthetic choice is restraint of technique paired with aggression of expression: no rounded cards, no gradients, no shadows that suggest light sources — only flat color-blocking and hard offset drop-shadows (the \"Risograph\" or \"screen-print\" kind where the shadow is a sold same-color offset).\n\nThe canvas is warm cream (`{colors.cream}` — #EFE9D9) with near-black ink (`{colors.ink}` — #0F0F0F) for borders, text, and rules. Four accent colors fire at full saturation: forest green, hot pink, burnt orange, and sunshine yellow. These never blend — they collide on the slide and the collision is the design.\n\nHeadlines run **Archivo Black** (weight 400 due to the display face being intrinsically heavy) in strict uppercase with tight line-height (0.92). Font sizes are extreme: 220px for closing slides, 160px for titles. **JetBrains Mono** carries all metadata, labels, topbar text, and axis labels — reinforcing a \"designed artifact\" or \"technical manual\" register. **Space Grotesk** handles all body paragraphs.\n\nEvery slide follows an identical chrome frame: a JetBrains Mono topbar at 48px from top (left text + right pill), and a JetBrains Mono meta footer at 40px from bottom (label left, slide number right with ink dot divider). Content lives inside this frame with 96px side gutters.\n\n**Key Characteristics:**\n- Cream canvas (`{colors.cream}` — #EFE9D9) as the universal background; green (`{colors.green}` — #1F8A4C) used for the closing slide only.\n- 4px solid ink borders on every structural element — cards, panels, table cells, chart axes.\n- Hard offset box-shadows in place of blurred drops: `24px 24px 0 color, 24px 24px 0 4px ink` on featured blocks.\n- Archivo Black display type in uppercase with 0.92 line-height for extreme tightness.\n- Four accent colors used as flat fills; each slide uses two or three of the four, never all simultaneously.\n- Topbar pill badge (JetBrains Mono, 2px ink border, 999px radius) as the only rounded element per slide.\n\n## Colors\n\n### Canvas and Ink\n- **Cream** (`{colors.cream}` — #EFE9D9): The universal slide background. Warm, not white. Distinguishes the deck from sterile white-background slides.\n- **Cream 2** (`{colors.cream-2}` — #E4DCC4): One step darker cream. Used exclusively as the comparison table's background fill, creating a subtle recessed surface inside the ink border.\n- **Ink** (`{colors.ink}` — #0F0F0F): Near-black used for all borders, body text, rules, topbar chrome, and the closing stamp border. Not pure #000000 — slightly softened.\n- **Ink 2** (`{colors.ink-2}` — #2A2A2A): Softer near-black for secondary body text, descriptions inside stat cells, chart footnotes.\n\n### Accent Colors\n- **Green** (`{colors.green}` — #1F8A4C): Forest green. The dominant accent. Works on stat cells, diagram panels, process steps, and as a full-slide background for maximum visual impact.\n- **Green Dark** (`{colors.green-dark}` — #136636): Darker green variant — available for lever/depth decorative effects. Not used as a primary surface fill.\n- **Pink** (`{colors.pink}` — #F06CA8): Hot pink. High energy. Works on toggle switch illustrations, section markers, stat cells, process steps, and stamp elements.\n- **Pink Dark** (`{colors.pink-dark}` — #D14E8B): Darker pink for depth on decorative lever elements. Available for shadow-side accents.\n- **Orange** (`{colors.orange}` — #E85A1F): Burnt orange. The hard drop-shadow color on featured blocks; also works as a stat cell fill, bar chart color, and table column background.\n- **Yellow** (`{colors.yellow}` — #F5C518): Sunshine yellow. Works on decorative circles, process steps, rotated badges, and bar chart bars. A warm punctuation color.\n\n\n## Typography\n\n### Font Families\nThe system uses three typefaces, each in a strict register:\n- **Archivo Black** — display headlines, step numbers, stat numbers, table labels, all uppercase presentation text. Intrinsically heavy, no additional font-weight needed.\n- **JetBrains Mono** — all metadata: topbar labels, meta footer, kicker labels, chart axes, legend rows, layer tags, figure notes. Carries the \"technical spec\" voice.\n- **Space Grotesk** — body copy only: body column text (slide 2), stat cell descriptors, diagram subtext, step descriptions, closing strap.\n\n### Display Scale\nThe slide canvas is 1920x1080px, so font sizes are far larger than web norms.\n\n| Token | Size | Use |\n|---|---|---|\n| `{typography.display-jumbo}` | 220px | Jumbo title or closing headline |\n| `{typography.display-hero}` | 160px | Primary deck title or hero name |\n| `{typography.display-xl}` | 140px | Section-opening display headline |\n| `{typography.display-lg}` | 100px | Section headline alongside a panel |\n| `{typography.display-md}` | 96px | Mid-weight section headline |\n| `{typography.display-sm}` | 84px | Section headline for data-heavy layouts |\n| `{typography.display-xs}` | 72px | Section headline for grid layouts |\n| `{typography.step-num}` | 140px | Large ordinal numerals in stepped layouts |\n| `{typography.stat-num}` | 96px | Large numerals in stat or data cells |\n| `{typography.stamp-num}` | 64px | Stamp or seal numeral |\n| `{typography.marker-label}` | 46px | Featured marker or callout block label |\n| `{typography.step-title}` | 34px | Card or step title |\n| `{typography.table-head}` | 28px | Table header or label row text |\n| `{typography.badge-label}` | 28px | Rotated badge or annotation label |\n\n### Monospace Scale\nAll JetBrains Mono text sits at 24px. Letter-spacing varies by use:\n- Topbar labels: 0.08em\n- Meta footer: 0.06em\n- Kicker labels (inverted): 0.14em\n- Chart axes: 0.08em (via `{typography.mono-chart}`)\n- Legend rows: 0.06em\n- Layer tags: 0.1em\n\n### Body Scale\n- `{typography.body-lg}` (28px): Body copy for wide column layouts or lede paragraphs.\n- `{typography.body-md}` (24px): Body text in stat cells, diagram annotations, step descriptions, footnotes, and strap lines.\n\n### Principles\nArchivo Black has a line-height of 0.92 — headlines overlap their own cap-height, which is intentional. Uppercase lock is non-negotiable for the display face; lowercase Archivo Black breaks the editorial register. The monospace face uses generous letter-spacing (0.06–0.16em) to feel like a typewritten label. Never use letter-spacing on Archivo Black or Space Grotesk.\n\n## Layout\n\n### Canvas System\nEvery slide is exactly 1920×1080px in a fixed, non-scrolling viewport. The `deck-stage` custom element handles centering and scaling.\n\n### Gutter System\n- **Chrome gutter** (64px left/right): Used by topbar and slide-meta only.\n- **Content gutter** (96px left/right): Used by all content — headlines, body, grids.\n- Headlines occasionally push right to within 96px of the right edge, or are constrained by `right: 1000px` / `right: 900px` to coexist with a right-panel diagram.\n\n\n### Chrome Frame (All Slides)\n```\n┌─ topbar @ top:48px, left:64px, right:64px ──────────────────────────────────┐\n│  SECTION LABEL                                       [pill badge]            │\n├─────────────────────────────────────────────────────────────────────────────┤\n│                                                                              │\n│   CONTENT (96px left gutter, 96px right gutter)                            │\n│                                                                              │\n├─ slide-meta @ bottom:40px, left:64px, right:64px ───────────────────────────┤\n│  DESCRIPTOR LABEL                                    01 • 08                 │\n└─────────────────────────────────────────────────────────────────────────────┘\n```\n\n## Depth and Elevation\n\nThe system uses **zero blurred shadows**. Depth is expressed through two techniques:\n\n### Hard Offset Shadow\nThe signature treatment: a second solid shape offset by a fixed amount in both X and Y. Two values are used:\n- **Large offset** (24px 24px): Featured blocks like the marker and poster switch — `box-shadow: 24px 24px 0 {colors.orange}, 24px 24px 0 4px {colors.ink}`. The first shadow is the colored offset; the second is the ink border around it.\n- **Medium offset** (18px 18px): Stacked blocks in the diagram — `box-shadow: 18px 18px 0 {colors.ink}`. Pure ink shadow only.\n\n### Color-Block Contrast\nDepth perception comes from juxtaposing surfaces: cream on cream-2 (table), ink on cream (kicker block), green on cream (diagram panel). No shadow needed when contrast does the work.\n\n### Flat Elements\nTopbar, meta footer, chart axis lines, legend swatches: flat, no shadow, no border-radius.\n\n## Shapes and Treatment\n\n### Border Radius\n- **0px (square)**: All structural elements — stat cells, step cards, table cells, chart bars, diagram panels, stacked blocks. No rounding.\n- **50% (circle)**: Decorative circles within diagram (yellow circ), the topbar pill dot (slide meta separator dot).\n- **999px (pill)**: Topbar badge pill only. The one exception to the system's overall squareness, and it reads as a label chip rather than a card.\n- **Rotated elements**: The comparison badge rotates -4deg; the closing stamp rotates -6deg. These are the system's only non-orthogonal placements.\n\n### Borders\n- **4px solid `{colors.ink}`**: All structural borders — stat cells, step cards, diagram panels, table (outer), poster block, marker block, switch block, stamp.\n- **3px solid `{colors.ink}`**: All internal structural lines — table rows, table columns, chart axis, bar chart bars.\n- **2px solid `{colors.ink}`**: Topbar pill badge.\n- **3px dashed `{colors.ink}`**: Dashed horizontal rule separating the process slide's topbar from its flow cards.\n\n### Decorative Elements\n- **Toggle switch**: Pink square with a lever shape (skewed div) and thick/dark underside, offset shadow in orange with ink border.\n- **Stacked blocks**: Four overlapping absolute-positioned rectangles in pink, yellow, orange, cream-2 with 18px ink hard shadows.\n- **Circle overlay**: Yellow circle centered in a green square — shape contrast acting as decorative figure.\n- **Stamp**: Pink rotated square with a cream circular inner border — acts as a seal or approval mark.\n\n## Do's and Don'ts\n\n### Do\n- Use 4px ink borders on every structural element. Thinner looks soft; thicker looks like a web component.\n- Use hard offset shadows in exactly two sizes: 24px for featured hero blocks, 18px for diagram stacked blocks. Don't mix sizes.\n- Stay uppercase on all Archivo Black usage. The font in sentence case reads as a different brand.\n- Use the four accents in groups of two or three per slide. Every accent on one slide is noise.\n- Reserve the green background for a single dominant slide. Its rarity is what gives it impact.\n- Use JetBrains Mono for all labels, metadata, indices, figure notes, and axis text. Never use it for body or headlines.\n- Keep line-height at 0.92 for all display text. Looser leading breaks the tight editorial register.\n- Maintain 96px content gutter and 64px chrome gutter consistently across all slides.\n\n### Don't\n- Don't round card corners (except the topbar pill). Rounding signals \"friendly SaaS\"; sharp corners signal \"editorial precision.\"\n- Don't use gradients, drop shadows with blur, or glow effects. All depth must come from hard offset or color contrast.\n- Don't use Archivo Black in sentence case. Never lowercase the display face.\n- Don't apply letter-spacing to Archivo Black (except at -0.01em which is already encoded). Extra tracking breaks its density.\n- Don't introduce a fifth accent color. The four-color palette is the brand constraint.\n- Don't use pure white (#ffffff) as a background. Cream is the canvas; white reads as blank.\n- Don't use Space Grotesk for labels or metadata. That role belongs to JetBrains Mono.\n- Don't add multiple typefaces. The three-family stack is complete.\n- Don't center-align body text. All body copy is left-aligned; centered text breaks the grid discipline.\n- Don't soften the stamp or badge rotation. The -4deg and -6deg angles are deliberate imperfection signals.\n\n## Responsive Behavior\n\nThis template is designed **exclusively for 1920x1080 presentation display**. It is not a web page and has no mobile breakpoints. The `deck-stage` web component handles viewport scaling via CSS transforms, so the 1920x1080 canvas scales proportionally on any screen size without layout changes.\n\n### Touch / Presenter Behavior\n- Slides advance via keyboard arrow keys or presentation clicker (handled by `deck-stage.js`).\n- No hover states are defined or needed.\n- No interactive form elements exist.\n\n### Print / Export Behavior\n- At 96dpi, the 1920x1080 canvas maps to a standard 20x11.25 inch frame.\n- For PDF export, a 1920x1080 viewport capture or browser print-to-PDF at 100% scale is recommended.\n- At 1pt = 1.333px, the effective print sizes of headlines range from 54pt (72px) to 165pt (220px) — correct for poster/title cards.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Archivo Black uppercase 400) | Archivo Black | 思源宋体 Noto Serif SC 900 | Google Fonts |\n| Body (Space Grotesk 400) | Space Grotesk | 思源宋体 Noto Serif SC 400 | Google Fonts |\n| Mono / Label (JetBrains Mono uppercase) | JetBrains Mono | JetBrains Mono (Latin/digit only — keep mono chrome in Latin) | Google Fonts |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare Noto Serif SC *after* the Latin face in the same `font-family` stack so Latin glyphs render in Archivo Black / Space Grotesk and CJK glyphs fall through to NSC automatically. JetBrains Mono chrome stays Latin/digit-only — topbar labels, slide-meta, axis ticks, and figure notes do not need a CJK fallback (and JetBrains Mono has no CJK glyphs by design).\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Archivo+Black&family=Space+Grotesk:wght@300..700&family=JetBrains+Mono:wght@400..500&family=Noto+Serif+SC:wght@400;900&display=swap\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Archivo Black\", \"Noto Serif SC\", sans-serif;\n  --font-body: \"Space Grotesk\", \"Noto Serif SC\", sans-serif;\n  --font-mono: \"JetBrains Mono\", ui-monospace, monospace;\n}\n/* Display headlines use Noto Serif SC 900; body uses NSC 400. */\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.55 (from 1.4) — Hanzi need more vertical breathing than Latin lowercase. For display NSC 900 at 100–220px, keep line-height tight at ~1.0 (NSC heavy weight at display size needs less leading than Archivo Black).\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (negative tracking that flatters Archivo Black caps jams Hanzi strokes together). Keep tight tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any display/label/mono when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick a single weight of Noto Serif SC for a given text run, never two inside one phrase.\n\n### Aesthetic Notes\n\nCreative Mode's neo-brutalist register depends on Archivo Black's extreme density at 100–220px — there is no Hanzi face that matches this exact mass, so Noto Serif SC at weight 900 is the closest available substitute. NSC 900's modulated serif strokes will read as more literary than the punk-zine Archivo Black voice, but the four-color block palette, 4px ink borders, and hard 24px offset shadows do most of the brutalist work — the typography becomes one component of a louder system rather than the system itself. The \"uppercase always\" rule for Archivo Black is meaningless for Hanzi (no case), so drop both `text-transform: uppercase` and the -0.01em tracking when content switches to Chinese — NSC 900 stands on size and color alone. JetBrains Mono chrome (topbar pill, slide-meta, axis ticks, kicker block) intentionally stays Latin/digit-only: render `04 / 08` slide counters in mono, but render any Chinese descriptor label in NSC 400 inside the meta footer. The four accents (green / pink / orange / yellow), stat-cell color blocks, table treatment, and decorative geometry (stamp, badge, stacked blocks) are all content-agnostic.\n\n### Known CJK Gap\n\n**Heavy Latin display has no exact CJK equivalent.** Archivo Black's brutalist density at 220px is the system's signature — Noto Serif SC 900 is the heaviest commonly available Hanzi weight, but it reads as a literary serif rather than a poster-grotesk. Chinese decks built with Creative Mode will feel ~30% less \"punk-zine\" than the Latin original; compensate by leaning harder on the accent color blocks, the hard offset shadows, and the rotated badge / stamp elements. Avoid the alternative of `Smiley Sans Oblique` for display — its oblique cut conflicts with the system's strict orthogonal rectangle geometry. NSC has no italic axis, but the system doesn't use italic anywhere — no loss. The mono chrome's \"technical spec\" voice is best preserved by keeping all JetBrains Mono content in Latin/digit and reserving NSC for headline and body roles only.\n\n## Iteration Guide\n\n1. New slide layouts must respect the chrome frame: topbar at top:48px left:64px, slide-meta at bottom:40px left:64px.\n2. Content begins at 96px from each side edge.\n3. When adding a data section (chart, table, grid), pair a display headline above with JetBrains Mono labels inside.\n4. Pick two or three accent fills per slide. Never mix all four on a single slide.\n5. Hard shadows go on featured single elements only (marker, featured block). Grid cells do not get individual shadows.\n6. New step/stat cards follow the existing color-sequence pattern: alternate cream with accents, end the sequence on green.\n7. All borders are 4px solid ink. Internal sub-borders within a table or axis are 3px solid ink.\n8. Rotated elements (badge, stamp) use single fixed angles (-4deg, -6deg). Do not introduce other angles.\n9. Icons and illustrations are CSS-only geometric shapes (divs, borders, pseudo-elements). No external images or SVGs needed.\n\n## Known Gaps\n\n- The `deck-stage.js` script (slide advancement, keyboard nav) is an external dependency not documented here.\n- Animation and transition between slides is not in scope for this template; all slides are static.\n- The title slide poster contains a decorative toggle switch illustration built from nested divs; it has no functional state.\n- Chart data (bar heights, values, labels) is hardcoded as inline styles and placeholder content — there is no data-binding layer.\n- Table data is all placeholder; no dynamic population is supported.\n- The `--rule` CSS variable (#0F0F0F, identical to `--ink`) is defined but not used explicitly — it is reserved for horizontal rule elements and can be considered an alias for ink.\n- Font fallback for Archivo Black is `sans-serif` — the font must be loaded from Google Fonts for the design to render correctly.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/creative-mode/preview.md (Tokens: ~1029 | Category: anthropic-skill) -->\n# Creative Mode Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/creative-mode/design.md`\n- Preview card: `bold-template-pack/templates/creative-mode/preview.md`\n\n## Selection Metadata\n\n- Slug: `creative-mode`\n- Tagline: Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display.\n- Mood: creative, confident, playful, design-led\n- Tone: graphic, expressive, modern\n- Formality: medium\n- Density: medium-high\n- Scheme: light\n- Best for: Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews. Also a great unexpected pick for a tech talk, research findings, or finance review when the speaker wants to lead with taste rather than convention.\n- Avoid for: Contexts that demand institutional restraint and a quiet authority — the saturated multi-accent palette will read as expressive, not formal.\n\n## Visual Snapshot\n\nA neo-brutalist editorial presentation system built for 1920x1080 slides. The deck anchors on a warm cream canvas with heavy 4px ink borders, hard offset drop-shadows, and a bold four-color accent palette (forest green, hot pink, burnt orange, sunshine yellow). Display headlines run Archivo Black in pure uppercase — aggressive, loud, zero letter-spacing softness. Monospace labels in JetBrains Mono echo a typesetting rule-sheet. Body copy sits in Space Grotesk. Every slide uses flat color-blocking with no gradients, no rounded cards, and no subtlety. The aesthetic is part Bauhaus grid, part punk zine, part Swiss editorial.\n\nCreative Mode is a neo-brutalist editorial slide system for 1920x1080 presentations. The foundational aesthetic choice is restraint of technique paired with aggression of expression: no rounded cards, no gradients, no shadows that suggest light sources — only flat color-blocking and hard offset drop-shadows (the \"Risograph\" or \"screen-print\" kind where the shadow is a sold same-color offset).\n\n## Preview Ingredients\n\n- Palette: cream #EFE9D9; cream-2 #E4DCC4; ink #0F0F0F; ink-2 #2A2A2A; green #1F8A4C; green-dark #136636; pink #F06CA8; pink-dark #D14E8B\n- Typography: Archivo Black; Space Grotesk; JetBrains Mono\n- Signature move: Cream canvas ({colors.cream} — #EFE9D9) as the universal background; green ({colors.green} — #1F8A4C) used for the closing slide only.\n- Signature move: 4px solid ink borders on every structural element — cards, panels, table cells, chart axes.\n- Signature move: Hard offset box-shadows in place of blurred drops: 24px 24px 0 color, 24px 24px 0 4px ink on featured blocks.\n- Signature move: Archivo Black display type in uppercase with 0.92 line-height for extreme tightness.\n- Signature move: Four accent colors used as flat fills; each slide uses two or three of the four, never all simultaneously.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/design.md (Tokens: ~9895 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Daisy Days\ndescription: A cheerful, childlike presentation system built around the chunky display face Fredoka One and the rounded humanist sans Quicksand. The palette is a sunny garden — cream canvas, turquoise, soft pink, butter yellow, mint, lavender, peach, sky blue, and a single coral accent — with charcoal-brown 2D outlines wrapping every shape. Hard offset shadows in dark charcoal, generous border-radius, and hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) anchor the aesthetic somewhere between a children's storybook spread and a sticker-sheet kawaii zine.\n\ncolors:\n  cream: \"#F5F0E6\"\n  turquoise: \"#7ECDC0\"\n  soft-pink: \"#F7C8D4\"\n  butter: \"#FDE68A\"\n  mint: \"#A8E6CF\"\n  lavender: \"#D4A5E8\"\n  peach: \"#FFCBA4\"\n  sky: \"#A8D8F0\"\n  coral: \"#F8635F\"\n  text-dark: \"#2D2D2D\"\n  text-muted: \"#6B6B6B\"\n  white: \"#FFFFFF\"\n\nborders:\n  primary: \"3px solid {colors.text-dark}\"\n  thin: \"2px solid {colors.text-dark}\"\n\nshadows:\n  default: \"6px 6px 0 {colors.text-dark}\"\n  small: \"4px 4px 0 {colors.text-dark}\"\n  text-headline: \"3px 3px 0 {colors.text-dark}\"\n  text-headline-soft: \"3px 3px 0 rgba(0,0,0,0.2)\"\n\ntypography:\n  display:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(3.2rem, 7vw, 6.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0.02em\n  headline:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(2.5rem, 5vw, 4.5rem)\"\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0.02em\n  title:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.8rem, 3.5vw, 3rem)\"\n    fontWeight: 400\n    lineHeight: 1.15\n    letterSpacing: 0.02em\n  subtitle:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.3rem, 2vw, 1.8rem)\"\n    fontWeight: 400\n    lineHeight: 1.2\n    letterSpacing: 0.02em\n  label-display:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1rem, 1.5vw, 1.3rem)\"\n    fontWeight: 400\n    lineHeight: 1.3\n    letterSpacing: 0.02em\n  quote:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"clamp(1.3rem, 2.5vw, 2rem)\"\n    fontWeight: 400\n    lineHeight: 1.35\n  body:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.3vw, 1.15rem)\"\n    fontWeight: 500\n    lineHeight: 1.6\n  body-strong:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.95rem, 1.4vw, 1.15rem)\"\n    fontWeight: 600\n    lineHeight: 1.5\n  meta:\n    fontFamily: \"'Quicksand', sans-serif\"\n    fontSize: \"clamp(0.8rem, 1.1vw, 0.95rem)\"\n    fontWeight: 600\n    lineHeight: 1.45\n  badge:\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"0.85rem\"\n    fontWeight: 400\n    letterSpacing: 0.02em\n\nspacing:\n  pad-slide: \"40px 60px\"\n  pad-card-lg: \"48px 56px\"\n  pad-card-md: \"32px 40px\"\n  pad-card-sm: \"16px 24px\"\n  gap-grid-lg: \"28px\"\n  gap-grid-md: \"24px\"\n  gap-grid-sm: \"14px\"\n  radius: \"20px\"\n  radius-lg: \"28px\"\n  radius-pill: \"50px\"\n  radius-round: \"50%\"\n\ncanvas:\n  width: 100vw\n  height: 100vh\n\ncomponents:\n  card:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius}\"\n    boxShadow: \"{shadows.default}\"\n  card-lg:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-lg}\"\n    boxShadow: \"{shadows.default}\"\n  badge-pill:\n    display: \"inline-block\"\n    padding: \"8px 20px\"\n    borderRadius: \"{spacing.radius-pill}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    fontSize: \"0.85rem\"\n    background: \"{colors.butter}\"\n  framed-header:\n    description: \"A two-part stacked card: a colored header strip (any accent surface) with rounded top corners and no bottom border, sitting flush above a white body with rounded bottom corners. The pair reads as a single unit with a tonal cap.\"\n    headerBackground: \"any accent surface\"\n    headerBorderRadius: \"{spacing.radius-lg} {spacing.radius-lg} 0 0\"\n    bodyBackground: \"{colors.white}\"\n    bodyBorderRadius: \"0 0 {spacing.radius-lg} {spacing.radius-lg}\"\n    border: \"3px solid {colors.text-dark}\"\n    boxShadow: \"{shadows.default}\"\n  circle-dot:\n    width: \"48px\"\n    height: \"48px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    color: \"{colors.white}\"\n    description: \"Outlined colored disc holding a numeral or single letter. Used as timeline node, step marker, or list bullet anchor.\"\n  circle-icon:\n    width: \"44px\"\n    height: \"44px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    background: \"any accent surface\"\n    description: \"Smaller cousin of circle-dot used as a card icon at the top of an info card.\"\n  step-circle-lg:\n    width: \"90px\"\n    height: \"90px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    fontFamily: \"'Fredoka One', cursive\"\n    color: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    description: \"Oversized outlined disc used as a process step marker. Carries a hard offset shadow.\"\n  avatar-circle:\n    width: \"100px\"\n    height: \"100px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"3px solid {colors.text-dark}\"\n    background: \"{colors.white}\"\n    boxShadow: \"{shadows.small}\"\n    overflow: \"hidden\"\n  bullet-dot:\n    width: \"20px\"\n    height: \"20px\"\n    borderRadius: \"{spacing.radius-round}\"\n    border: \"2px solid {colors.text-dark}\"\n    background: \"{colors.butter}\"\n    description: \"Small outlined disc used as a ::before bullet for body list items, anchored 4px from the top of the line.\"\n  list-dash:\n    description: \"A simple muted-text dash character used as a ::before bullet for compact in-card lists (day-card body).\"\n  legend-swatch:\n    width: \"18px\"\n    height: \"18px\"\n    border: \"2px solid {colors.text-dark}\"\n    borderRadius: \"4px\"\n  decoration:\n    position: \"absolute\"\n    pointerEvents: \"none\"\n    zIndex: 1\n    description: \"Hand-drawn SVG sticker (daisy, star, sun, cloud, rainbow) placed at slide corners and edges as atmospheric ornament. Often crops past the slide edge.\"\n  nav-dots:\n    position: \"fixed\"\n    placement: \"right edge, vertically centered\"\n    dotSize: \"12px\"\n    dotBorder: \"2px solid {colors.text-dark}\"\n    activeBackground: \"{colors.butter}\"\n    activeTransform: \"scale(1.2)\"\n  slide-counter:\n    position: \"fixed\"\n    placement: \"bottom center\"\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-pill}\"\n    padding: \"6px 20px\"\n    fontFamily: \"'Fredoka One', cursive\"\n    boxShadow: \"{shadows.small}\"\n  chart-container:\n    background: \"{colors.white}\"\n    border: \"3px solid {colors.text-dark}\"\n    borderRadius: \"{spacing.radius-lg}\"\n    boxShadow: \"{shadows.default}\"\n    padding: \"{spacing.pad-card-md}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nDaisy Days is a **cheerful childlike presentation system** rooted in a single typographic pairing: the chubby rounded display face **Fredoka One** for every headline, and the friendly humanist sans **Quicksand** for every line of body and meta text. The visual language descends from picture-book illustration and sticker-sheet kawaii: every shape carries a charcoal 2D outline, every elevated element casts a solid offset shadow, and every surface is a pastel from a sunny garden palette.\n\nThe color philosophy is **multi-pastel with a single warm pop**. The background canvas alternates between a soft cream (`{colors.cream}`) and the saturated pastels (`{colors.turquoise}`, `{colors.soft-pink}`, `{colors.butter}`, `{colors.mint}`, `{colors.lavender}`, `{colors.peach}`, `{colors.sky}`). The lone high-saturation accent is `{colors.coral}` — used sparingly on small marker dots and headline strokes, never as a full surface. Headlines on top of a colored surface get a 3px charcoal text-shadow, which gives display text the same outlined appearance as the shapes around it; headlines on cream stay flat. Body text never leaves `{colors.text-dark}` or `{colors.text-muted}`.\n\nDepth is **2D and graphic**, not photographic. Every elevated element gets a `{shadows.default}` or `{shadows.small}` — a solid charcoal block offset to the bottom-right, with zero blur. The combination of thick charcoal outline plus hard offset shadow gives the system its sticker-on-paper feel. There are no gradients, no glow, no glass effects.\n\nThe signature treatment is the **hand-drawn SVG decoration layer**. Every region carries 3–7 absolutely-positioned ornaments — yellow-centered daisies, multi-color stars, smiling suns, fluffy clouds, arched rainbows — that cluster at the corners and edges, often cropping past the slide boundary at `top:-30px / right:-20px`. These decorations sit on a `z-index:1` layer behind the content (`z-index:2`) and carry the same 2px-ish charcoal stroke as the rest of the system, unifying ornament with structure.\n\n**Density philosophy: full but not crowded.** This system reads as authoritative when every slide carries one focused content region (a card, a frame, a grid) at the center plus a generous wreath of corner ornaments at the edges. An empty corner with no decoration reads as broken — the ornaments are part of the structural composition, not optional garnish. Conversely, dense overlapping content panels read as anxious; the system wants one main subject, framed and surrounded, not three competing ones. Aim for one bordered/shadowed container per slide, with the corner decorations doing the work of filling the rest of the canvas.\n\n**Key Characteristics:**\n- Cream (`{colors.cream}`) default canvas with rotating pastel surfaces — every slide may pick a different surface color.\n- Fredoka One for all headline / display / quote text; Quicksand 500/600 for all body and meta text.\n- Every shape and card carries a 3px solid charcoal outline (`{colors.text-dark}`) plus a hard offset shadow (`{shadows.default}` or `{shadows.small}`).\n- Generous border-radius: 20px on standard cards, 28px on featured cards, pill (`{spacing.radius-pill}`) on badges, full circle on dots and avatars.\n- Hand-drawn SVG ornaments (daisies, stars, suns, clouds, rainbows) cluster at corners and crop past slide edges as atmospheric layer.\n- Headlines on colored surfaces always carry a 3px solid charcoal text-shadow; headlines on cream sit flat.\n- Bullets are colored outlined dots (`{components.bullet-dot}`), not glyphs. Lists feel hand-set.\n- One main content container per slide, surrounded by 3–7 ornaments. Empty corners are wrong.\n\n## Colors\n\n### Palette\n- **Cream** (`{colors.cream}` — #F5F0E6): The default canvas. A warm off-white that reads as paper-stock rather than digital white. Used as the deck's neutral surface — title openings, info-card slides, anything that wants to feel like a storybook page.\n- **Turquoise** (`{colors.turquoise}` — #7ECDC0): A medium-saturation teal-green. The boldest of the surface pastels; loud enough that headlines on top need the charcoal text-shadow to stay legible.\n- **Soft Pink** (`{colors.soft-pink}` — #F7C8D4): A bubblegum blush. Used as a full surface, a header-strip color, a day-marker fill, and the quote-mark accent inside a quote card.\n- **Butter** (`{colors.butter}` — #FDE68A): A buttery pastel yellow. The active-state color for nav dots, the default badge fill, and the default bullet-dot fill. It is the system's \"highlight\" color when something needs to feel marked.\n- **Mint** (`{colors.mint}` — #A8E6CF): A cool celadon green. A surface color, a header-strip color, a circle-icon fill, and a timeline-dot color.\n- **Lavender** (`{colors.lavender}` — #D4A5E8): A muted purple. Surface, header-strip, marker-dot, day-marker — same role flexibility as mint and soft-pink.\n- **Peach** (`{colors.peach}` — #FFCBA4): A warm pastel orange. Used as a surface (typically on process or sequence slides) and an accent.\n- **Sky** (`{colors.sky}` — #A8D8F0): A pastel blue. Surface and accent color, often paired with cloud decorations.\n- **Coral** (`{colors.coral}` — #F8635F): The single saturated accent. Used only as a marker fill (a numbered dot, a timeline node, a step circle) and a day-header — never as a full slide surface. Coral is the system's \"look here\" color and loses its punch if overused.\n- **Text Dark** (`{colors.text-dark}` — #2D2D2D): The structural color. Every border, every body text run on light surfaces, every shadow, every SVG stroke. Slightly warmer than pure black — reads charcoal, not jet.\n- **Text Muted** (`{colors.text-muted}` — #6B6B6B): The de-emphasized text color. Subtitles, descriptions under headlines, list-dash bullets, role labels.\n- **White** (`{colors.white}` — #FFFFFF): The default card fill — every card, every avatar, every chart-container interior. Cards on a cream canvas still get white interiors so the card edge reads cleanly.\n\n### Defaults\n- **Default slide background**: `{colors.cream}`. Use a saturated pastel surface (turquoise, soft-pink, mint, butter, lavender, peach, sky) when the slide wants a tonal personality; default to cream when it doesn't.\n- **Default card background**: `{colors.white}` — on any surface, including pastel surfaces. White-on-pastel is the standard card treatment.\n- **Default headline color**: `{colors.text-dark}` — always.\n- **Default body color**: `{colors.text-dark}` for primary body, `{colors.text-muted}` for descriptions, role labels, captions, and sublines.\n- **Default border color**: `{colors.text-dark}` — always. There are no colored borders anywhere.\n- **Default shadow color**: `{colors.text-dark}` — always. Shadows are never pastel.\n- **Default badge fill**: `{colors.butter}`.\n- **Default marker / accent fill** when an element needs a single \"attention\" color: `{colors.coral}`. When a sequence of markers is needed, rotate through the full pastel set (coral → mint → sky → lavender → butter) for sequence steps and dots.\n- **Default header-strip color** on a framed-header component: any pastel surface — pick whichever harmonizes with the slide's surface color.\n\nThe pastels are interchangeable at the surface level — they do not carry fixed semantic meaning (mint is not \"success\", coral is not \"warning\"). Pick the surface that best serves the slide's emotional register. The one rule: coral is reserved for small high-contrast accents, not surfaces.\n\n## Typography\n\n### Font Family\nThe system loads exactly two web fonts from Google Fonts: **Fredoka One** (a single-weight rounded display face) and **Quicksand** (a humanist sans available at 400/500/600/700). The pairing is the entire typographic identity.\n\nFredoka One is a chunky single-weight display face — it has no italic, no lighter variants, no condensed cuts. The display weight reads as 400 by spec but visually behaves as a heavy weight because the letterforms are so rounded and full. Every headline, every title, every step number, every quote in the system runs in Fredoka One. There is no exception — using Quicksand for a heading or Fredoka One for a body paragraph breaks the system instantly.\n\nQuicksand carries everything else: paragraphs, list items, role labels, captions, day-card body lists, legend text. Quicksand 500 is the body default; 600 is the \"slightly stronger\" variant used for emphasized body (welcome-list items, info-card descriptions, legend labels); 700 is used sparingly for quote-author attribution.\n\n### Display, Body, and Marker Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display}` | clamp(3.2rem, 7vw, 6.5rem) | Fredoka One | 400 | Cover / opening hero headline |\n| `{typography.headline}` | clamp(2.5rem, 5vw, 4.5rem) | Fredoka One | 400 | Primary slide headline |\n| `{typography.title}` | clamp(1.8rem, 3.5vw, 3rem) | Fredoka One | 400 | Section title or framed-header title |\n| `{typography.quote}` | clamp(1.3rem, 2.5vw, 2rem) | Fredoka One | 400 | Pull-quote body text |\n| `{typography.subtitle}` | clamp(1.3rem, 2vw, 1.8rem) | Fredoka One | 400 | Sub-headline, in-card title |\n| `{typography.label-display}` | clamp(1rem, 1.5vw, 1.3rem) | Fredoka One | 400 | Small Fredoka labels — day-card header, step title |\n| `{typography.body-strong}` | clamp(0.95rem, 1.4vw, 1.15rem) | Quicksand | 600 | Emphasized body — welcome lists, info-card descriptions |\n| `{typography.body}` | clamp(0.95rem, 1.3vw, 1.15rem) | Quicksand | 500 | Standard paragraph body |\n| `{typography.meta}` | clamp(0.8rem, 1.1vw, 0.95rem) | Quicksand | 600 | Compact secondary text — day-card lists, step descriptions, legend rows |\n| `{typography.badge}` | 0.85rem | Fredoka One | 400 | Text inside a pill badge |\n\n### Defaults\n- **Default size for a primary slide headline**: `{typography.headline}` (clamp 2.5–4.5rem).\n- **Default size for a cover-level title moment**: `{typography.display}` (clamp 3.2–6.5rem).\n- **Default size for a paragraph**: `{typography.body}` (clamp 0.95–1.15rem) in Quicksand 500.\n- **Default size for emphasized list items**: `{typography.body-strong}` (Quicksand 600).\n- **Default size for a description under a card title or a meta caption**: `{typography.meta}` in `{colors.text-muted}`.\n- **Default size for a section / framed-header title**: `{typography.title}`.\n- **Default family for any text larger than ~1.3rem**: Fredoka One. Default family for any text smaller than that: Quicksand. The size threshold roughly tracks the Fredoka / Quicksand role boundary.\n\nWhen unsure, reach for `{typography.headline}` for the slide's main text moment, not `{typography.subtitle}` or `{typography.title}` (which are intra-content titles, not the primary slide voice).\n\n### Signature Treatments\nThese are **non-optional whenever the corresponding element type is used**:\n\n- **Every Fredoka One headline placed on a saturated pastel surface carries a 3px charcoal text-shadow** (`{shadows.text-headline}` on bold surfaces like turquoise / mint, `{shadows.text-headline-soft}` on softer surfaces like pink / lavender). Headlines on cream sit flat without the shadow. The text-shadow is what makes the headline read as \"outlined\" in the same vocabulary as the rest of the system. Skipping it on a colored surface reads as broken.\n- **Headlines placed on saturated surfaces switch text color to `{colors.white}`**; headlines on cream and on light pastel cards stay `{colors.text-dark}`. The pairing is white-on-saturated, dark-on-cream-or-card.\n- **Every body list item uses an outlined colored disc as its bullet, not a glyph.** Default fill is `{colors.butter}`. The bullet is rendered as a `::before` 20px circle with 2px charcoal border, positioned 4px from the top of the first line.\n- **Every quote uses the Fredoka quote-mark treatment**: an oversized `\"` glyph in `{colors.soft-pink}` sits above the quoted text. Quotes never appear without a quote-mark anchor.\n- **Quicksand body text never goes uppercase.** No display-style ALL-CAPS treatments on body. Fredoka has its own personality and doesn't need shouting.\n\n### Typography Principles\nThe size ladder is the rhythm. Fredoka One does not get italicized, underlined, or rendered in alternate weights — Fredoka has one weight, full stop. Quicksand stays inside the 500 / 600 / 700 ladder; do not introduce 400 or 800 even if available. Letter-spacing on Fredoka stays at the spec default of `0.02em`. Letter-spacing on Quicksand stays at 0.\n\nMixing Quicksand into a headline (e.g. for an italicized phrase) is not supported in this system — the headline runs in one face. If a headline needs a different emotional register, the size and color do the work, not the font swap.\n\n## Layout\n\n### Canvas System\nThe system targets full viewport — every `.slide` is `100vw × 100vh` with `padding: 40px 60px` (default slide padding). Slides are stacked vertically inside a `.slides-container` that uses CSS scroll-snap (`scroll-snap-type: y mandatory`) to lock each slide to the viewport. Navigation is handled via fixed right-edge nav dots, a fixed bottom-center counter pill, keyboard arrows / spacebar, and intersection-observer-driven dot state.\n\n### Padding and Gap Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.pad-slide}` | 40px 60px | Outer slide padding |\n| `{spacing.pad-card-lg}` | 48px 56px | Large featured cards (quote box, welcome body) |\n| `{spacing.pad-card-md}` | 32px 40px | Standard cards (chart container, framed-header body) |\n| `{spacing.pad-card-sm}` | 16px 24px | Compact cards (timeline card, day-card body) |\n| `{spacing.gap-grid-lg}` | 28px | Major grid gaps (team grid, info-card grid) |\n| `{spacing.gap-grid-md}` | 24px | Standard grid gaps |\n| `{spacing.gap-grid-sm}` | 14px | Tight grid gaps (weekly day-card grid) |\n\n### Border-Radius Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.radius}` | 20px | Standard cards, day-cards, timeline cards |\n| `{spacing.radius-lg}` | 28px | Featured cards (chart container, welcome frame, quote box) |\n| `{spacing.radius-pill}` | 50px | Badges, slide counter |\n| `{spacing.radius-round}` | 50% | All circles (avatars, bullet dots, marker dots, step circles, icons) |\n\nEvery visible region carries some radius. There are zero square corners in this system besides the SVG decorations themselves.\n\n### Content Centering\nSlide content is flex-centered both vertically and horizontally inside the slide padding. The main content container has a max-width that varies by composition (typically 700–1100px) and never spans the full slide width — there is always margin between content and slide edge for the decorations to occupy.\n\n## Depth and Elevation\n\n### Hard Offset Shadow (Only Technique)\nEvery elevated element uses one of two shadow values:\n- **`{shadows.default}`** = `6px 6px 0 {colors.text-dark}` — standard offset for cards, frames, chart containers, badges, the slide counter.\n- **`{shadows.small}`** = `4px 4px 0 {colors.text-dark}` — lighter offset for smaller elevated elements (day-cards, timeline-cards, info-cards, step circles, avatars).\n\nThe shadow is **solid charcoal, zero blur, fixed bottom-right offset**. There is no rgba shadow, no blur, no soft elevation. An element either casts a hard offset shadow in `{colors.text-dark}` or it casts no shadow.\n\n### Text Shadow for Display Type\nA separate text-shadow treatment lives only on display headlines placed over saturated pastel surfaces:\n- **`{shadows.text-headline}`** = `3px 3px 0 {colors.text-dark}` for bold pastel surfaces (turquoise, butter, peach).\n- **`{shadows.text-headline-soft}`** = `3px 3px 0 rgba(0,0,0,0.2)` for softer pastel surfaces (soft-pink, mint) where the full charcoal would feel too heavy.\n\nHeadlines on cream get no text-shadow.\n\n### Decorative Z-Index Layer\nThe atmospheric SVG decorations live on `z-index: 1` with `pointer-events: none`. Content sits on `z-index: 2`. This means decorations may visually overlap content rectangles, but never block interaction. Decorations frequently crop past the slide edge with negative offsets like `top:-30px / left:-30px`, which gives the layout a \"stickers reaching off the page\" feel.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **3px solid `{colors.text-dark}`** — the universal structural border. Cards, framed headers, badges, marker circles, step circles, avatars, chart containers, the slide counter.\n- **2px solid `{colors.text-dark}`** — the lighter border used only on small elements at the bullet / nav-dot / legend-swatch / day-header divider scale.\n- **~2.1px solid `#232323` or `#000`** — the SVG stroke weight used inside the daisy / star / cloud / sun decorations. This matches the perceived weight of the 3px structural border at the SVG's natural scale.\n\nBorders are never colored. Borders are never dashed. The only line style in the system is solid charcoal.\n\n### Decorative Element Types\n\n**Daisy** — A six-petal white-petal / yellow-center daisy in two paired stem positions. The system's signature ornament. Place at corners (typically `top-left`, `top-right`, `bottom-left`, `bottom-right`), often cropped past the edge at `top:-30px` or `right:-20px`. Two daisies plus 2–3 stars is the most common decoration cluster.\n\n**Star** — A puffy five-pointed sticker star in a solid pastel fill (pink, yellow, mint, lavender, white) with charcoal outline. Used as scattered accents between the larger daisy / sun / cloud ornaments. Vary fill color across instances on the same slide; do not use all-white or all-yellow stars.\n\n**Sun** — A smiling round sun in butter yellow with rays. Used as a single feature ornament, typically at top-left or bottom-right.\n\n**Cloud** — A puffy white-and-blue cloud with optional smaller cloud variant. Used in sequences (two clouds at opposing corners) or as a single ornament on slides that want a sky atmosphere.\n\n**Rainbow** — An arched four-band rainbow (coral / yellow / mint / sky) with the standard charcoal outline. Used as a single feature ornament, typically at top-right or bottom-right.\n\n**Framed Header** (`{components.framed-header}`) — A two-part stacked card: a colored header strip (any pastel) sits flush above a white body. The pair shares one rounded outer corner radius and one continuous 3px border, and the whole unit casts a single offset shadow. Used as a featured info container.\n\n**Badge Pill** (`{components.badge-pill}`) — A short rounded-pill chip with 3px border and butter (default) fill. Used as a section tag or small label. Pill text is Fredoka One at 0.85rem.\n\n**Marker Circle Set** — Three sizes (`{components.bullet-dot}` 20px, `{components.circle-dot}` 48px, `{components.circle-icon}` 44px, `{components.step-circle-lg}` 90px). All are outlined circles in a pastel fill, all carry charcoal border. Numerals or single letters inside larger marker circles are always Fredoka One in white text (except on butter-yellow, where text returns to dark).\n\n**Avatar Circle** — A 100px outlined white circle holding a small character SVG portrait or initial. Carries `{shadows.small}`.\n\n**Quote Mark** — An oversized `\"` glyph in Fredoka One at ~4rem in `{colors.soft-pink}`, placed above the quote body inside a quote card.\n\n**Process Arrow** — A simple `→` glyph in Fredoka One at ~2rem in `{colors.text-dark}`, sat between process steps.\n\n**Legend Swatch** — A 18px square with 4px rounded corners and a 2px border. Holds a fill color matched to a corresponding data series.\n\n## Do's and Don'ts\n\n### Do\n- Pair Fredoka One with Quicksand strictly by role — Fredoka for every headline and display moment, Quicksand for every paragraph and meta line. The two-face contrast is the system's voice.\n- Set the default canvas to `{colors.cream}`. Reach for a saturated pastel surface (turquoise, soft-pink, mint, etc.) when the slide wants a tonal mood, but cream is the safe default for content-heavy moments.\n- Apply a 3px solid charcoal outline plus a `{shadows.default}` or `{shadows.small}` hard offset shadow to every elevated container. The outline + offset shadow combo is the system's signature elevation.\n- Apply the `{shadows.text-headline}` text-shadow to every Fredoka One headline placed over a saturated pastel surface. Skip it only on cream.\n- Cluster 3–7 hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) around every slide's edges, often cropping past the boundary. Empty corners look broken in this system.\n- Use outlined colored discs as list bullets — never bare hyphens or asterisks. The `{components.bullet-dot}` with `{colors.butter}` fill is the default.\n- Reserve `{colors.coral}` for small high-attention markers (step numbers, timeline dots, day-headers). Coral as a full slide surface breaks the warmth-balance and reads aggressive.\n- Center the main content container with a max-width well inside the slide padding. The decorations need room at the edges; full-bleed content blocks the ornament layer.\n- Rotate marker / dot colors through the pastel set (coral → mint → sky → lavender → butter) when a sequence needs distinct steps. Do not use a single color for all steps.\n\n### Don't\n- Don't use any font other than Fredoka One and Quicksand. The system loads only those two faces from Google Fonts. Adding a third face breaks the storybook voice.\n- Don't put Quicksand into a headline or Fredoka One into a paragraph. The role / face mapping is strict.\n- Don't use square corners. Every card, every badge, every marker has some radius — the smallest radius in the system is 4px (legend swatch), and most are 20px or larger.\n- Don't use blurred or rgba shadows. The system uses solid charcoal offsets only. `0 4px 12px rgba(0,0,0,0.1)` does not exist here.\n- Don't use colored borders. All borders are charcoal `{colors.text-dark}`.\n- Don't use coral as a full slide surface. Coral is the system's high-attention spot color; it loses power if it covers a region.\n- Don't render Fredoka One in italic, underline, or stretched weights. Fredoka has one weight — that's the design.\n- Don't omit the text-shadow on Fredoka headlines that sit on a saturated pastel surface. The shadow is what unifies headline weight with the outlined-shape vocabulary.\n- Don't leave a slide's corners empty of decorations. The ornament layer is part of the composition, not optional dressing.\n- Don't pile two cards on top of each other without separation. The system reads as one main content region per slide, surrounded by ornament — not as a stack of competing panels.\n\n## Responsive Behavior\n\nThe system targets a viewport-fluid layout (everything sized in `clamp()` or `vw`), but is tuned for desktop / projector at roughly 1280–1920 width. Two responsive breakpoints adapt the grids:\n\n- **`@media (max-width: 768px)`**: Slide padding tightens to `24px 20px`. Multi-column grids collapse: the 5-column weekly grid drops to 3, the 4-column team grid drops to 2, the 2-column info-card grid drops to 1, the horizontal process flow stacks vertically with rotated arrows, and the horizontal donut layout stacks. The right-edge nav dots hide. Decoration opacity drops to 0.6 so they don't overwhelm the cramped layout.\n- **`@media (max-width: 480px)`**: The 3-column weekly grid drops further to 2. Decoration opacity drops to 0.4.\n\n### Presenter Behavior\n- Scroll-snap-y mandatory locks each slide to the viewport on vertical scroll.\n- Keyboard: ArrowDown / ArrowRight / Space / PageDown advance; ArrowUp / ArrowLeft / PageUp reverse; Home jumps to first; End jumps to last.\n- Right-edge nav dots show current slide and accept click-to-jump.\n- A bottom-center counter pill displays `N / total` and updates via IntersectionObserver.\n\n### Print / Export\nThere is no `@media print` rule defined. Print export will inherit the scroll-container layout, which may not paginate cleanly. Treat this as a screen-first system; a separate print stylesheet would be needed for PDF export.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Latin font | Recommended Chinese pairing | Source |\n|---|---|---|---|\n| Display / Headline (Fredoka One 400) | Fredoka One | 站酷小薇体 ZCOOL XiaoWei | Google Fonts |\n| Body (Quicksand 500–600) | Quicksand | 悠哉字体 Yozai | cn-fontsource CDN |\n\n### Mixed-Content Strategy\n\nUse **Strategy A — single-font-stack with fallback**: declare ZCOOL XiaoWei *after* Fredoka One and Yozai *after* Quicksand in the same `font-family` stack so Latin glyphs render in the Latin face and CJK glyphs fall through to the Chinese face automatically. One CSS rule per role, no manual class switching.\n\n### Loading\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Fredoka+One&family=Quicksand:wght@400..700&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n<link href=\"https://cdn.jsdelivr.net/npm/cn-fontsource-yozai-regular/font.css\" rel=\"stylesheet\">\n```\n\n```css\n:root {\n  --font-display: \"Fredoka One\", \"ZCOOL XiaoWei\", cursive;\n  --font-body: \"Quicksand\", \"Yozai\", sans-serif;\n}\n```\n\n### Universal CJK Adjustments\n\n- **Line-height**: bump CJK body line-height to ~1.75 (from 1.6) — Hanzi need more vertical breathing than Latin lowercase.\n- **Letter-spacing**: zero out `letter-spacing` on Hanzi runs (the 0.02em Fredoka tracking jams Hanzi strokes together). Keep Latin tracking only on Latin spans.\n- **Text-transform**: drop `text-transform: uppercase` on any badge/label when content is Hanzi — Chinese has no case; forcing uppercase does nothing for Hanzi but breaks the rendering of any mixed Latin acronyms inside.\n- **Punctuation**: use Chinese full-width punctuation (，。：；「」) for Chinese sentences, half-width (`,.:;\"\"`) for Latin. Never mix half-width punctuation into a Chinese sentence.\n- **No period on headlines**: Chinese headline convention omits the terminal 。 — strip it from display strings.\n- **Pangu spacing**: insert a thin space (or a regular space) between adjacent Hanzi and Latin/digit runs (e.g. `2026 年`, `AI 产品`). Improves readability of mixed runs.\n- **One font per sentence**: don't switch CJK families mid-sentence. Pick ZCOOL XiaoWei *or* Yozai for a given text run based on its role, never both inside one phrase.\n\n### Aesthetic Notes\n\nZCOOL XiaoWei's rounded soft display register is the closest Hanzi analogue to Fredoka One's chubby storybook voice — it carries the same \"friendly children's-book\" mood at headline scale without becoming saccharine. Yozai's open counters and modest stroke contrast match Quicksand's humanist warmth, so body paragraphs and meta lines feel continuous with the pastel-garden aesthetic. The 3px charcoal text-shadow on headlines that sit on saturated pastel surfaces works identically on ZCOOL XiaoWei — apply `{shadows.text-headline}` to Chinese headlines on turquoise / butter / peach surfaces, and `{shadows.text-headline-soft}` on soft-pink / mint, exactly as the Latin rule prescribes. The colored bullet-dots, hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows), framed-header cap-and-body pattern, and pastel marker rotation are all content-agnostic. The single-weight constraint of Fredoka One maps cleanly to ZCOOL XiaoWei's single-weight constraint — neither face supports italic, underline, or weight axis variation, which preserves the system's \"one weight, one face per role\" discipline.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is a single-weight display face with limited glyph coverage compared to Noto family — exotic or technical Hanzi (rare surnames, classical characters, simplified-only variants outside GB2312) may fall back to system font. For Traditional Chinese decks, swap Yozai for `LXGW WenKai TC` (Google Fonts) which has fuller TC coverage and a similar friendly humanist register. ZCOOL XiaoWei reads slightly more literary-formal than Fredoka One's chubby chunky personality — Chinese decks built with Daisy Days will feel ~20% more \"calm pastel\" and ~20% less \"sticker-sheet kawaii\" than the Latin original. The hand-drawn SVG ornaments (daisy, star, sun, cloud, rainbow) carry the storybook mood that the typography slightly loses, so on Chinese decks consider clustering 5–7 ornaments per slide (the upper end of the 3–7 range) to recover the playful weight.\n\n## Iteration Guide\n\n1. Any new container is rounded (20px / 28px / pill / circle), bordered in 3px charcoal, and shadowed with `{shadows.default}` or `{shadows.small}`. Never ship a flat rectangle with square corners.\n2. Any new headline is Fredoka One. If it sits on a saturated pastel surface, it gets a 3px charcoal text-shadow and switches color to `{colors.white}`. If it sits on cream or on a white card, it stays `{colors.text-dark}` and skips the shadow.\n3. Any new paragraph is Quicksand 500 by default; Quicksand 600 when the paragraph needs emphasis.\n4. Any new bullet is an outlined colored disc (`{components.bullet-dot}`), not a glyph. The default fill is butter, but circle bullets can rotate through the pastel set.\n5. Any new sequence of markers (steps, timeline nodes, day labels) rotates through the pastel set (`coral → mint → sky → lavender → butter`) rather than reusing one color.\n6. Any new slide needs 3–7 SVG decorations clustered at corners and edges. Draw from the established ornament types (daisy, star, sun, cloud, rainbow) — do not introduce a new ornament style (e.g. line-art arrows, photo cutouts).\n7. Any new accent surface picks one of the eight pastels. Do not introduce a ninth color.\n8. Coral stays a small-marker color only. Do not make a coral surface, a coral card, or a coral headline.\n9. Any list bullet sits 4px from the top of the first text line, vertically aligned with x-height, not the line baseline.\n10. When a new component needs a \"two-part frame\" feel, reach for the `{components.framed-header}` pattern (colored cap + white body) rather than nesting two separate cards.\n\n## Known Gaps\n\n- The two Google Fonts (Fredoka One, Quicksand) are loaded via `<link>` from Google Fonts CDN. Offline rendering will fall back to `cursive` and `sans-serif` system defaults, which collapses the entire typographic identity. Self-hosting the fonts is required for offline / print reliability.\n- The hand-drawn SVG decorations (daisy, star, sun, cloud, rainbow) are inline SVG with their stroke colors hardcoded to `#232323` or `#2D2D2D`. There is no programmatic way to recolor them to match a new palette — extending the decoration library requires authoring new SVG sources.\n- The system uses scroll-snap navigation (not absolute-positioned slides). It does not have a dedicated print stylesheet; PDF export of the deck will not paginate one-slide-per-page out of the box.\n- The nav-dots / slide-counter / keyboard / observer JavaScript is embedded inline and hardcodes the slide count via the `<div class=\"nav-dot\">` array. Adding a new slide requires manually adding a corresponding nav-dot div.\n- The pastel surfaces (turquoise, mint, peach) have varying perceived brightness; the text-shadow treatment for headlines must be tuned per-surface (the system already does this — full charcoal for bold surfaces, 20%-opacity charcoal for soft surfaces). New surface colors will require a similar tuning decision.\n- The `--text-muted` color (#6B6B6B) is used for subtitles and captions but has limited contrast against pastel surfaces. Reserve muted text for use on cream or on white cards, not on pastel surfaces directly.\n- The decoration SVGs include a placeholder comment string `SVG created with Arrow, by QuiverAI (https://quiver.ai)` — this is the original authoring tool credit and can be stripped without affecting rendering.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/daisy-days/preview.md (Tokens: ~1051 | Category: anthropic-skill) -->\n# Daisy Days Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/daisy-days/design.md`\n- Preview card: `bold-template-pack/templates/daisy-days/preview.md`\n\n## Selection Metadata\n\n- Slug: `daisy-days`\n- Tagline: Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm.\n- Mood: cheerful, playful, warm, sunny, wholesome\n- Tone: friendly, soft, encouraging, approachable, lighthearted\n- Formality: low\n- Density: medium\n- Scheme: light\n- Best for: Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration. Also lovely for an unexpected playful internal kickoff, a wedding planning deck, or any moment where warmth is the message — including across tech or business contexts.\n- Avoid for: Contexts where the audience explicitly expects authority and precision — the hand-drawn pastel SVG decorations are the opposite of buttoned-up.\n\n## Visual Snapshot\n\nA cheerful, childlike presentation system built around the chunky display face Fredoka One and the rounded humanist sans Quicksand. The palette is a sunny garden — cream canvas, turquoise, soft pink, butter yellow, mint, lavender, peach, sky blue, and a single coral accent — with charcoal-brown 2D outlines wrapping every shape. Hard offset shadows in dark charcoal, generous border-radius, and hand-drawn SVG decorations (daisies, stars, suns, clouds, rainbows) anchor the aesthetic somewhere between a children's storybook spread and a sticker-sheet kawaii zine.\n\nDaisy Days is a cheerful childlike presentation system rooted in a single typographic pairing: the chubby rounded display face Fredoka One for every headline, and the friendly humanist sans Quicksand for every line of body and meta text. The visual language descends from picture-book illustration and sticker-sheet kawaii: every shape carries a charcoal 2D outline, every elevated element casts a solid offset shadow, and every surface is a pastel from a sunny garden palette.\n\n## Preview Ingredients\n\n- Palette: cream #F5F0E6; turquoise #7ECDC0; soft-pink #F7C8D4; butter #FDE68A; mint #A8E6CF; lavender #D4A5E8; peach #FFCBA4; sky #A8D8F0\n- Typography: See full design doc after selection.\n- Signature move: Cream ({colors.cream}) default canvas with rotating pastel surfaces — every slide may pick a different surface color.\n- Signature move: Fredoka One for all headline / display / quote text; Quicksand 500/600 for all body and meta text.\n- Signature move: Every shape and card carries a 3px solid charcoal outline ({colors.text-dark}) plus a hard offset shadow ({shadows.default} or {shadows.small}).\n- Signature move: Generous border-radius: 20px on standard cards, 28px on featured cards, pill ({spacing.radius-pill}) on badges, full circle on dots and avatars.\n- Signature move: Hand-drawn SVG ornaments (daisies, stars, suns, clouds, rainbows) cluster at corners and crop past slide edges as atmospheric layer.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/design.md (Tokens: ~9952 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Editorial Forest\ndescription: A serif-led editorial presentation system in the register of a literary quarterly or art-book monograph. Display type runs in Source Serif 4 at weight 500 with optical-size axis engaged, scaling up to 220px for cover and stat moments. The palette pairs a deep forest green (#2e4a2a) with a dusty rose pink (#e89cb1) over an oat-cream paper ground (#efe7d4), with JetBrains Mono as the editorial chrome (labels, captions, axis ticks). The aesthetic is closer to a Penguin classic, Apartamento spread, or quiet annual report than a tech keynote — confident, paper-feeling, and committed to a small color vocabulary.\n\ncolors:\n  green: \"#2e4a2a\"\n  green-deep: \"#243a21\"\n  green-lite: \"#3a5a36\"\n  pink: \"#e89cb1\"\n  pink-deep: \"#d27e96\"\n  cream: \"#efe7d4\"\n  cream-2: \"#e6dcc4\"\n  ink: \"#1a1a17\"\n\ntypography:\n  display-hero:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 220\n    fontWeight: 500\n    lineHeight: 0.92\n    letterSpacing: -0.02em\n  display:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 140\n    fontWeight: 500\n    lineHeight: 1.02\n    letterSpacing: -0.02em\n  headline-xl:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 96\n    fontWeight: 500\n    lineHeight: 0.96\n    letterSpacing: -0.02em\n  headline:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 84\n    fontWeight: 500\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  headline-sm:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 80\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.02em\n  title-card-lg:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 84\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.01em\n  title-card:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 68\n    fontWeight: 500\n    lineHeight: 0.96\n    letterSpacing: -0.01em\n  title-card-sm:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 56\n    fontWeight: 500\n    lineHeight: 0.98\n    letterSpacing: -0.01em\n  figure-caption-serif:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 56\n    fontWeight: 500\n    lineHeight: 1.05\n  name:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 44\n    fontWeight: 600\n    lineHeight: 1.0\n  meta-value:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 32\n    fontWeight: 500\n  body-lg:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 32\n    fontWeight: 400\n    lineHeight: 1.32\n  body:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 30\n    fontWeight: 400\n    lineHeight: 1.38\n  body-card:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 26\n    fontWeight: 400\n    lineHeight: 1.34\n  label:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-tight:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  caption-mono:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 24\n    fontWeight: 500\n    letterSpacing: 0.14em\n    textTransform: uppercase\n  axis-mono:\n    fontFamily: \"'JetBrains Mono', ui-monospace, Menlo, monospace\"\n    fontSize: 26\n    fontWeight: 500\n    letterSpacing: 0.08em\n  stat-figure:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 220\n    fontWeight: 500\n    lineHeight: 0.92\n    letterSpacing: -0.03em\n  stat-figure-unit:\n    fontFamily: \"'Source Serif 4', 'Source Serif Pro', Georgia, serif\"\n    fontSize: 110\n    fontWeight: 500\n    lineHeight: 0.92\n\nspacing:\n  slide-pad-default: \"96px 120px\"\n  slide-pad-narrow: \"100px 120px\"\n  slide-pad-wide: \"100px 140px\"\n  slide-pad-statement: \"130px 160px\"\n  grid-gap-cards: 28\n  grid-gap-topics: 24\n  grid-gap-kpi: 60\n  rule-weight: \"2px\"\n  rule-weight-card: \"2.5px\"\n  radius-card: \"6px\"\n  radius-card-step: \"8px\"\n  radius-bar-top: \"3px 3px 0 0\"\n  radius-mark-circle: \"50%\"\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  topic-tile:\n    description: \"Bordered or filled rectangular region holding a mono ordinal, a serif title, optional body, and a mono foot. Background may be green / green-lite / pink / cream-2-with-green-border. Corner radius 6px.\"\n    borderRadius: \"{spacing.radius-card}\"\n    padding: \"40px 40px 36px\"\n  step-tile:\n    description: \"Vertical card carrying a mono ordinal, a serif title, body paragraph, and a mono marker row separated by a top rule. Background fills: cream-with-green-border, solid green, or solid pink.\"\n    borderRadius: \"{spacing.radius-card-step}\"\n    padding: \"40px 32px 32px\"\n    minHeight: \"470px\"\n    border: \"2.5px solid currentColor-region\"\n  monogram-circle:\n    width: \"130px\"\n    height: \"130px\"\n    borderRadius: \"{spacing.radius-mark-circle}\"\n    border: \"2px solid {colors.pink}\"\n    fontFamily: \"JetBrains Mono\"\n    fontSize: 28\n    letterSpacing: 0.1em\n    fontWeight: 500\n    description: \"Outlined round mark holding a short mono monogram. The system's signature identity stamp.\"\n  topbar:\n    placement: \"top edge of slide\"\n    layout: \"flex space-between, baseline-aligned\"\n    content: \"{components.label} on the left, monogram-circle or counter on the right\"\n  footline:\n    position: \"absolute\"\n    placement: \"bottom edge of slide, full-width between slide padding\"\n    layout: \"flex space-between\"\n    typography: \"{typography.caption-mono}\"\n  meta-dl:\n    description: \"Three-column definition list separated by a top rule (2px {colors.green}). Each entry has a mono dt label and a serif dd value.\"\n    columns: 3\n    gap: \"36px\"\n    topBorder: \"2px solid {colors.green}\"\n  bar:\n    width: \"56px\"\n    borderRadius: \"{spacing.radius-bar-top}\"\n    description: \"Vertical chart bar in pink, cream, or green. Value label printed above bar in mono.\"\n  chart-axis:\n    border: \"2px solid currentColor\"\n    description: \"Y-axis and x-axis use a single 2px rule on the inner edges of the plot region; no full axis box.\"\n  rule-thin:\n    description: \"Hairline 2px rule, used as section separator above kpi rows, summary grids, meta dls. Color follows region (green on cream, pink on green).\"\n  legend-swatch:\n    display: \"inline-block\"\n    width: \"26px\"\n    height: \"26px\"\n    borderRadius: \"2px\"\n    description: \"Small filled square preceding a mono legend label. 2px corner radius is the smallest radius in the system.\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nEditorial Forest is a **serif-led editorial presentation system** in the tonal register of a Penguin classic, a quiet annual report, or an art-book spread. The system's foundational premise is a single, confident typographic voice — Source Serif 4 — used at extreme scale (up to 220px) for headlines and stat figures, with JetBrains Mono playing the supporting role of editorial chrome (labels, captions, axis ticks, page footlines).\n\nThe serif is run at **weight 500** for nearly every display moment — never the more familiar 400 or 700. The 500 weight is the system's most distinctive typographic choice: heavy enough to feel authored, light enough to keep the page calm. Optical-size axis is engaged (`opsz` 8..60), which means the same Source Serif 4 face renders with subtly different letterforms at 26px caption sizes versus 220px display sizes — the small sizes pick up extra contrast and finer details automatically. JetBrains Mono runs at 500 in uppercase with 0.14em–0.18em letter-spacing, used for every label, tag, caption, axis tick, and footer line. The system never mixes a third typeface.\n\nThe palette is a tight five-color editorial set built around three primary surfaces: a **deep forest green** (`{colors.green}` — #2e4a2a), a **dusty rose pink** (`{colors.pink}` — #e89cb1), and an **oat cream paper** (`{colors.cream}` — #efe7d4). Two near-duplicates round out the set: `{colors.green-deep}` for green-on-pink text contrast, `{colors.green-lite}` for tile fills that need a second green shade, `{colors.pink-deep}` for pink-on-pink borders, and `{colors.cream-2}` for tiles that sit on the main cream surface. Body text everywhere is `{colors.ink}` (#1a1a17) — a warm near-black — except when sat on a green or pink surface, where it switches to the surface's complementary color (cream or pink on green; green-deep or cream on pink).\n\nDepth is **flat and paper-based**. There are no drop shadows, no glows, no gradients, no overlays. Elevation is communicated entirely through color-block contrast, 2px hairline rules, and the difference between a filled region and a bordered region. The 6px and 8px card radii are the only roundness in the system besides the monogram circle. The page feels printed, not glassy.\n\n**Density philosophy: spacious and committed.** Each slide carries one strong subject — a headline, a quote, a chart, a stat row, a card grid — surrounded by deep negative space. The slide padding of 96–140px is generous; the top of the slide carries a mono topbar (label + monogram or counter), the bottom carries a mono footline, and the middle holds the main subject at scale. A slide that crams two competing content blocks reads as broken; a slide with one display headline + supporting cards + breathing room reads as authoritative. Reach for fewer elements at larger sizes rather than more elements at smaller sizes.\n\n**Key Characteristics:**\n- Three-color editorial palette: deep forest green, dusty rose pink, oat cream paper. Two surface tones per slide is typical; three is loud.\n- Source Serif 4 at weight 500 for every headline, body, and display moment. Optical-size axis engaged for size-aware letterforms.\n- JetBrains Mono at weight 500 uppercase with wide tracking (0.14em–0.18em) for every label, caption, axis tick, and footline.\n- Display type scales to 220px for cover and stat-figure moments; 96px for primary headlines; 56–84px for card titles.\n- 2px hairline rules separate stacked sections — never thicker, never colored beyond region context.\n- Card radius is 6px for topic tiles and 8px for step tiles. The monogram circle is the only fully round shape.\n- Every slide carries a topbar (label + monogram or counter) and most carry a footline (mono caption row). The chrome anchors the editorial feel.\n- No shadows, no gradients, no glows. Elevation is color-block + rule.\n\n## Colors\n\n### Palette\n- **Green** (`{colors.green}` — #2e4a2a): The deep forest primary. Used as a slide surface, a tile fill, a card border, a meta-dl rule color, and a primary text color on cream surfaces. The most distinctive surface in the system.\n- **Green Deep** (`{colors.green-deep}` — #243a21): A darker green used almost exclusively as text color on pink surfaces, where pure green would lack contrast. Also used as text color on pink tiles.\n- **Green Lite** (`{colors.green-lite}` — #3a5a36): A lighter green used as a tile fill when two greens need to sit beside each other (e.g., a primary green tile next to a secondary green-lite tile in the same grid). Carries pink text.\n- **Pink** (`{colors.pink}` — #e89cb1): A dusty rose. Used as a slide surface, a tile fill, the on-green text color, a bar-chart series color, and the monogram circle border color. The system's primary accent.\n- **Pink Deep** (`{colors.pink-deep}` — #d27e96): A slightly darker rose used only as a border color on pink-filled tiles where the same-color border needs to differentiate from the fill.\n- **Cream** (`{colors.cream}` — #efe7d4): The oat paper surface. The default slide background on non-cover slides, the on-green body text color, and the cream bar-chart series color.\n- **Cream 2** (`{colors.cream-2}` — #e6dcc4): A subtly darker cream used as a tile fill on the cream slide surface. Pairs with a 2px green border so the tile reads as distinct from the slide ground.\n- **Ink** (`{colors.ink}` — #1a1a17): The body text color on cream surfaces. A warm near-black; never pure #000.\n\n### Defaults\n- **Default slide background**: `{colors.cream}` for content-heavy slides; `{colors.green}` for cover, statement-data, summary, and any moment that needs gravity.\n- **Default headline color on `{colors.cream}` surface**: `{colors.green}`.\n- **Default headline color on `{colors.green}` surface**: `{colors.cream}` for primary headlines, `{colors.pink}` for hero / cover-scale headlines.\n- **Default headline color on `{colors.pink}` surface**: `{colors.green-deep}`.\n- **Default body color on `{colors.cream}` surface**: `{colors.ink}`.\n- **Default body color on `{colors.green}` surface**: `{colors.cream}`.\n- **Default body color on `{colors.pink}` surface**: `{colors.green-deep}`.\n- **Default label / caption color**: matches the region's accent (label is pink on green, green on cream, green-deep on pink).\n- **Default tile fill on a cream slide**: choose from the rotation — solid green (with pink text), solid pink (with green-deep text), green-lite (with pink text), or cream-2 with a 2px green border (with green text). A single grid typically mixes 3 of these 4.\n- **Default rule color**: green on cream, pink on green, green-deep on pink. The 2px hairline always picks up the region's accent.\n\nThe palette is intentionally tight. Introducing a fourth chromatic family (a yellow, a blue, an additional rose) breaks the editorial discipline. Stick to the green / pink / cream triad and let the contrast between filled and bordered tiles do the variation work.\n\n## Typography\n\n### Font Family\nThe system loads exactly two web fonts: **Source Serif 4** (with the full optical-size axis 8..60 and weights 300–800) and **JetBrains Mono** (weights 400, 500, 700). Source Serif 4 carries every editorial moment — headlines, body, captions in serif, names, figures. JetBrains Mono carries every piece of chrome — labels, taglines, axis ticks, footlines, ordinals on tiles.\n\nThe mono / serif pairing is the system's typographic identity. Mono never tries to be the headline; serif never tries to be the caption. The roles are inverted from a typical \"sans for chrome, serif for body\" stack — here it's \"mono for chrome, serif for body and display.\"\n\nSource Serif 4 is run at **weight 500** for nearly every moment. Weight 400 appears only for body paragraphs (where the lighter weight reads better at small scale). Weight 600 appears once, for the attribution name on the statement slide — its slightly heavier set distinguishes a proper name from surrounding mono labels. Weight 700 is not used.\n\n### Display, Body, and Chrome Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-hero}` | 220px | Source Serif 4 | 500 | Cover-scale or closing-scale headline |\n| `{typography.display}` | 140px | Source Serif 4 | 500 | Pull-quote / big-idea statement |\n| `{typography.headline-xl}` | 96px | Source Serif 4 | 500 | Primary section headline on cream |\n| `{typography.headline}` | 84px | Source Serif 4 | 500 | Primary section headline on green |\n| `{typography.headline-sm}` | 80px | Source Serif 4 | 500 | Stat-row introductory headline |\n| `{typography.title-card-lg}` | 84px | Source Serif 4 | 500 | Title inside a hero topic tile (largest tile in a grid) |\n| `{typography.title-card}` | 68px | Source Serif 4 | 500 | Title inside a step tile |\n| `{typography.title-card-sm}` | 56px | Source Serif 4 | 500 | Title inside a standard topic tile |\n| `{typography.figure-caption-serif}` | 56px | Source Serif 4 | 500 | Centered figure / image-placeholder caption |\n| `{typography.stat-figure}` | 220px | Source Serif 4 | 500 | KPI numeral |\n| `{typography.stat-figure-unit}` | 110px | Source Serif 4 | 500 | Unit suffix on a KPI numeral (e.g. \"%\") |\n| `{typography.name}` | 44px | Source Serif 4 | 600 | Personal name in an attribution row |\n| `{typography.meta-value}` | 32px | Source Serif 4 | 500 | Definition-list value in a meta row |\n| `{typography.body-lg}` | 32px | Source Serif 4 | 400 | Primary body paragraph in a summary or stat description |\n| `{typography.body}` | 30px | Source Serif 4 | 400 | Standard body paragraph |\n| `{typography.body-card}` | 26px | Source Serif 4 | 400 | Body inside a card or tile |\n| `{typography.label}` | 26px | JetBrains Mono | 500 / 0.18em | Eyebrow or section label in topbar |\n| `{typography.label-tight}` | 26px | JetBrains Mono | 500 / 0.14em | Caption row, foot line, attribution row, tile ordinal |\n| `{typography.caption-mono}` | 24px | JetBrains Mono | 500 / 0.12–0.16em | Tile foot, tile marker, kpi tag, meta-dl term |\n| `{typography.axis-mono}` | 26px | JetBrains Mono | 500 / 0.08em | Chart axis ticks and labels |\n\n### Defaults\n- **Default size for a primary section headline**: `{typography.headline-xl}` (96px) on cream surfaces, `{typography.headline}` (84px) on green surfaces.\n- **Default size for a cover-scale or closing-scale moment**: `{typography.display-hero}` (220px).\n- **Default size for a quote / big-idea statement**: `{typography.display}` (140px).\n- **Default size for a body paragraph**: `{typography.body}` (30px) in serif weight 400.\n- **Default size for a body paragraph inside a card / tile**: `{typography.body-card}` (26px).\n- **Default size for a meta dt label or tile ordinal**: `{typography.caption-mono}` (24px) in JetBrains Mono uppercase.\n- **Default size for a topbar label / eyebrow**: `{typography.label}` (26px) in JetBrains Mono uppercase with 0.18em tracking.\n- **Default weight for any serif moment**: 500. (400 is reserved for body paragraphs; 600 only for a proper name in attribution.)\n- **Default weight for any mono moment**: 500.\n\nWhen unsure, reach for `{typography.headline-xl}` (96px) for the slide's primary headline on cream, not the larger display sizes. The 140–220px tier is reserved for statement, stat-figure, and hero/closing moments — using it for routine headlines flattens the system's hierarchy.\n\n### Signature Treatments\nThese treatments are **non-optional whenever the corresponding element type is used**:\n\n- **Every JetBrains Mono element is UPPERCASE with letter-spacing of at least 0.08em.** Mono in sentence case or without tracking reads as code, not editorial chrome. The wide tracking is what makes mono feel like a caption row in a magazine, not a terminal.\n- **Every Source Serif 4 display element uses negative letter-spacing (-0.01em to -0.03em).** Tighter tracking pulls the large serif glyphs into a single mass and is essential for the 96–220px sizes. Display serif at default tracking reads loose and untreated.\n- **Display headlines use line-height between 0.92 and 1.02.** Tight line-height is part of the system's display voice. Larger headlines run tighter (0.92 at 220px); smaller headlines (84–96px) run at 0.96–1.0.\n- **Body paragraphs use serif weight 400, not 500.** The weight drop from headline to body is the system's reading rhythm. Body at 500 reads heavy.\n- **Every slide carries a topbar (mono label + monogram or counter on the opposite edge).** The topbar is the system's universal chrome anchor.\n- **Hairline rules between sections are always 2px solid.** Never 1px (reads as web app), never 3px+ (reads as poster).\n\n### Typography Principles\nThe weight 500 + optical-size + tight tracking combination is the system's display voice — switching any of those three properties (e.g., serif weight 700, or default tracking, or no opsz) reads as a different design system. The serif/mono role split is strict: mono never appears at headline scale, serif never appears at axis-tick scale.\n\nItalics are not used anywhere in the system. Underline is not used. Emphasis is communicated through size and color contrast, not type variants.\n\n## Layout\n\n### Canvas System\nThe system targets a fixed **1920×1080** canvas. Slides are `<section>` elements at exact width/height; rendering relies on `deck-stage.js` to scale the canvas to fit the viewport. The canvas is paper, not a viewport — designed for projector, printer, or PDF export.\n\n### Slide Padding Scale\n| Token | Value | Use |\n|---|---|---|\n| `{spacing.slide-pad-default}` | 96px 120px | Standard slide padding |\n| `{spacing.slide-pad-narrow}` | 100px 120px | Data, framework, stats slides — slightly taller top padding |\n| `{spacing.slide-pad-wide}` | 100px 140px | Cover, summary slides — extra side padding for hero headlines |\n| `{spacing.slide-pad-statement}` | 130px 160px | Statement slide — most generous padding for the display-quote moment |\n\nPick the padding that matches the content gravity. Statement-class moments get the widest padding; everyday content slides use the default 96×120.\n\n### Chrome Anatomy\nEvery slide carries (at minimum) a **topbar** at the top edge — a flex-row with a JetBrains Mono `{typography.label}` on one side and either a `{components.monogram-circle}` or a mono counter / location string on the other. Heavier slides (cover, data, summary) also carry a **footline** absolutely positioned at `bottom: 60–80px` with a mono caption row spanning the slide width between the padding.\n\nThe topbar is the system's spine. Without it, a slide reads as untreated.\n\n### Card Radii\n| Value | Use |\n|---|---|\n| 2px | Legend swatch only (smallest radius in the system) |\n| 3px 3px 0 0 | Top corners of bar-chart bars |\n| 6px | Topic tile (agenda-style grid) |\n| 8px | Step tile (framework-style grid) |\n| 50% | Monogram circle |\n\nCards are subtly rounded — never sharp-cornered, never heavily-rounded. The 6–8px radius gives the system its paper-not-plastic feel.\n\n## Depth and Elevation\n\n### Flat, No Shadows\nThere are **no shadows in this system**. Not on cards, not on tiles, not on text, not on the monogram circle. Elevation is communicated entirely through:\n\n1. **Color-block contrast** — a green tile on a cream slide reads as elevated because the dark green block separates from the paper ground.\n2. **2px hairline rules** — section separators (above kpi rows, summary grids, meta dls) sit on a 2px line in the region's accent color.\n3. **Border vs fill** — a cream-2 tile with a 2px green border reads as a different elevation than a solid-fill tile beside it.\n\nThe absence of shadow is itself the elevation language. Adding `box-shadow: 0 4px 12px rgba(0,0,0,0.1)` would shatter the editorial feel.\n\n### Paper-Surface Rule\nEvery surface in the system reads as paper, not as a digital pane. The cream tones (`{colors.cream}`, `{colors.cream-2}`) carry that quality literally. The green and pink surfaces inherit it by association — used at full saturation, surrounded by cream chrome, never with shadow or glow, they read as printed ink on stock.\n\n## Shapes and Treatment\n\n### Border Weight and Style\n- **2px solid** — the universal hairline. Section separator rules above kpi rows / summary grids / meta dls / chart axes; the border on cream-2 tiles; the border on the monogram circle.\n- **2.5px solid** — step-tile borders. Slightly heavier so the tile reads as a separate object from a hairline rule.\n\nBorders take the region's accent color (`{colors.green}` on cream, `{colors.pink}` on green, `{colors.green-deep}` or `{colors.pink-deep}` on pink).\n\n### Decorative Element Types\n\n**Monogram Circle** (`{components.monogram-circle}`) — A 130px outlined circle with a 2px pink border, holding a 2–3-character JetBrains Mono monogram at 28px. Lives in the top-right of cover and summary slides. The system's identity stamp.\n\n**Topbar** (`{components.topbar}`) — A flex row spanning the top of every slide. A JetBrains Mono label on one side, a monogram or counter or location string on the other. The topbar establishes which surface family the slide belongs to (label color tells you).\n\n**Footline** (`{components.footline}`) — An absolutely positioned flex row at `bottom: 60–80px` spanning the slide between padding. Two mono caption strings (e.g., a section name on the left, a page number on the right). Used on cover, data, summary, and any slide that wants to feel like a printed page.\n\n**Topic Tile** (`{components.topic-tile}`) — A 6px-radius rectangular region holding a mono ordinal, a serif title, optional body, and a mono foot string. Background fills rotate through green, green-lite, pink, or cream-2-with-green-border. A grid of these tiles is the agenda / table-of-contents pattern.\n\n**Step Tile** (`{components.step-tile}`) — An 8px-radius vertical card with 2.5px border, holding a mono ordinal, a serif title (68px), a body paragraph, and a mono marker row separated by a top rule. Background fills: cream-with-green-border, solid green, or solid pink. A row of 3–4 step tiles is the framework / process pattern.\n\n**KPI Block** — A vertical stack: mono tag (24px) on top, oversized serif figure (220px) with optional 110px unit, then a serif description paragraph (30px). Sits inside a row separated above by a 2px pink rule on green surfaces.\n\n**Bar (chart)** — A 56px-wide rectangle with top corners rounded at 3px, filled in pink, cream, or green. The value label is mono 24px, absolutely positioned 38px above the bar.\n\n**Meta Definition List** (`{components.meta-dl}`) — A three-column dt/dd grid with a 2px top border. The dt is mono 24px uppercase tracked, the dd is serif 32px weight 500. Used as a credits / specs / details row at the bottom of a two-column slide.\n\n**Legend Row** — A horizontal flex of mono uppercase items, each preceded by a 26×26px filled swatch with 2px corner radius. Used in chart and data contexts.\n\n## Do's and Don'ts\n\n### Do\n- Run every display headline in Source Serif 4 at weight 500 with negative letter-spacing (-0.01em to -0.03em) and tight line-height (0.92–1.0). The combination is the system's voice.\n- Run every label, caption, tag, axis tick, and footline in JetBrains Mono at weight 500 uppercase with 0.08em–0.18em letter-spacing.\n- Place a topbar (mono label + monogram or counter) on every slide. The topbar is the system's spine.\n- Pick a single dominant surface per slide (green, pink, or cream) and let it carry the whole canvas. Two surface colors per slide is the maximum.\n- Pair tile fills in a grid: rotate through green + pink + green-lite + cream-2-with-green-border rather than reusing one fill across all tiles.\n- Use 2px solid hairline rules to separate stacked sections (kpi rows, summary grids, meta dls). The hairline is the system's separator language.\n- Scale display type aggressively when content allows — 140–220px for statement, hero, and closing moments. The system rewards bigness when there's room.\n- Use generous slide padding (96–160px). Negative space is part of the editorial register; cramped padding reads as broken.\n- Reserve the monogram circle for cover and summary moments. Using it on every slide dilutes its function as an identity stamp.\n\n### Don't\n- Don't add box-shadow to any element. The system is shadow-free; adding shadow shatters the paper feel.\n- Don't introduce a third typeface. Only Source Serif 4 and JetBrains Mono. No Inter, no system stack.\n- Don't run serif text in italic or underline. Emphasis is size and color, not type variant.\n- Don't render JetBrains Mono in sentence case or without letter-spacing. Mono without uppercase + tracking reads as code, not chrome.\n- Don't introduce a fourth chromatic family (yellow, blue, lavender). The green / pink / cream triad is the entire palette.\n- Don't use heavy borders (4px+) or thin hairlines (1px). The system has 2px and 2.5px — pick one.\n- Don't pile two competing content blocks on one slide. One subject per slide; expand or split.\n- Don't use rgba transparency for surface colors. Each surface is solid ink-on-paper.\n- Don't run serif body text at weight 500 — it reads heavy. Body is weight 400; display is weight 500.\n- Don't omit the topbar. A slide without the mono label at the top loses its editorial spine.\n\n## Responsive Behavior\n\nThis is a **fixed 1920×1080 presentation system** rendered through `deck-stage.js`. The canvas is not responsive in the web sense — there are no media queries, no breakpoints, no fluid sizing. Every measurement is in fixed pixels at 1920×1080.\n\n### Scaling Behavior\nThe `deck-stage.js` script wraps each `<section>` and scales the 1920×1080 canvas uniformly to fit the browser viewport, letterboxing as needed. Type, padding, gaps, and rule weights are all in pixels and scale proportionally with the canvas. Borders that read as 2px at 1920px will read as 1px at 960px viewport width — this is acceptable inside the system's tolerance.\n\n### Presenter Behavior\nNavigation is delegated to whatever wrapper `deck-stage.js` provides — there is no inline keyboard handler. Treat each `<section>` as a slide; the runtime handles transitions.\n\n### Print / Export\nBecause every measurement is fixed-pixel inside a 1920×1080 canvas, the system exports cleanly to PDF at the same aspect ratio (16:9). Source Serif 4 with the optical-size axis renders well at print resolution because the small-sized variants pick up the print-appropriate letterform detail automatically.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display headline (220 / 140 / 96 / 84px) | 霞鹜文楷 LXGW WenKai (Noto Serif SC fallback) | 400 | Literary, handwritten-ish brushwork; matches the Penguin-classic register of Source Serif 4 |\n| Body paragraph (26 / 30 / 32px) | 思源宋体 Noto Serif SC | 400 | Reads as the printed body voice of a literary quarterly |\n| Stat figure (220px) | 思源宋体 Noto Serif SC | 700 | Mincho weight 700 gives the numeric mass that Source Serif 4 weight 500 provides in Latin |\n| Mono label / caption / footline (24–26px) | 思源等宽 Noto Sans Mono CJK SC | 500 | JetBrains Mono has no CJK glyphs; Noto Sans Mono CJK SC preserves the typewriter-chrome quality |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Source Serif 4 as the Latin face and fall back to LXGW WenKai (for headlines / display) or Noto Serif SC (for body / stats) for CJK glyphs. This is the right call for Editorial Forest because the Source Serif 4 optical-size axis is a signature of the system; replacing it wholesale with a Mincho would flatten the Penguin-classic register that defines the deck. The font-family stack puts the Latin face first, then the CJK fallback, then the generic serif:\n\n```css\nfont-family: 'Source Serif 4', 'Source Serif Pro', 'LXGW WenKai TC', 'Noto Serif SC', Georgia, serif;\n```\n\nBrowsers per-glyph fall back: Latin characters render in Source Serif 4 at weight 500 with opsz engaged, Chinese characters render in LXGW WenKai (display) or Noto Serif SC (body). The baseline mismatch at display sizes (96–220px) is the main thing to watch — LXGW WenKai sits slightly higher than Source Serif 4 in optical baseline, so a mixed-script line like \"Designed in 北京\" may show a 1–2px vertical wobble. Acceptable for slide content; for printed export, prefer all-CJK or all-Latin lines.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>` (or as a second link tag):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=LXGW+WenKai+TC&family=Noto+Serif+SC:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n```\n\nLXGW WenKai TC is the version served on Google Fonts (the Simplified-Chinese build `LXGW+WenKai+SC` is not yet on the Google CDN — TC ships both traditional and simplified glyphs and works for both).\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.92–1.0 on display, 1.32–1.38 on body) read as cramped in Chinese. Bump display to 1.0–1.1 and body to 1.5–1.6.\n- **Remove negative letter-spacing on CJK headlines.** Source Serif 4 display uses -0.01em to -0.03em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Latin portion was meant to be capitalized.\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between LXGW WenKai and Noto Serif SC inside the same sentence — pick the face that matches the size tier (display = LXGW WenKai, body = Noto Serif SC) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nEditorial Forest's whole voice is \"Penguin classic / quiet annual report\" — a serif at weight 500 with the optical-size axis doing the size-aware letterform work. The Chinese equivalent of that register is **LXGW WenKai for display moments** (it has the same hand-set, slightly informal warmth as Source Serif 4 at 500) and **Noto Serif SC at 400 for body** (the calm Mincho voice that reads like a literary journal). Avoid Noto Sans SC for body — the sans face flips the system into \"tech report\" rather than \"monograph spread.\"\n\nThe system's mono / serif role split (JetBrains Mono for chrome, Source Serif 4 for everything else) maps cleanly onto Chinese. Use Noto Sans Mono CJK SC for the topbar label, footline strings, tile ordinals, and axis ticks — keep them uppercase-equivalent (i.e., 0.14em–0.18em letter-spacing on Latin labels, and for Chinese, the Mono CJK face at 500 weight provides the same chrome quality). Do not run Chinese labels in LXGW WenKai or Noto Serif SC; the editorial chrome would lose its typewriter feel.\n\n### Known CJK Gap\n\nLXGW WenKai's brushwork warmth is its strength at large display sizes, but at body scale (26–32px) the same brushwork reads slightly noisy. The system bumps body to Noto Serif SC (a cleaner Mincho) to avoid this, but the visual handoff between a 96px LXGW WenKai headline and a 30px Noto Serif SC paragraph below it is the system's biggest CJK seam — the two faces have different stroke contrast profiles. If the seam reads loud, use Noto Serif SC for both display and body (sacrifices warmth for consistency), or use LXGW WenKai for both (sacrifices body legibility for consistency). The default split is the right trade-off for most decks, but worth a manual check on cover and statement slides.\n\n## Iteration Guide\n\n1. Any new headline is Source Serif 4 weight 500 with negative letter-spacing. Pick the size from the display ladder (220 / 140 / 96 / 84 / 80 / 68 / 56) — do not invent a new size.\n2. Any new label, caption, or tag is JetBrains Mono weight 500 uppercase with 0.08em–0.18em letter-spacing. Pick the size from the mono ladder (26 / 24).\n3. Any new slide carries a topbar at the top. The mono label color follows the surface (pink-on-green, green-on-cream, green-deep-on-pink).\n4. Any new card uses 6px (topic tile) or 8px (step tile) radius. The monogram circle is the only fully round shape; do not introduce a fourth radius.\n5. Any new section separator is a 2px hairline rule in the region's accent color. No 1px rules, no 3px rules.\n6. Any new fill color must come from the existing palette (`{colors.green}`, `{colors.green-lite}`, `{colors.pink}`, `{colors.cream}`, `{colors.cream-2}`). Do not introduce a yellow, blue, or third pink.\n7. Any new body paragraph is serif weight 400 at 26–32px. Do not run body at weight 500.\n8. Any new KPI figure is `{typography.stat-figure}` (220px). Smaller KPI sizes are not in the system — if the layout can't accommodate 220px, restructure the slide.\n9. Any new chart uses the bar treatment (pink / cream / green fills, mono axes, 2px axis rules) on a green surface. The data composition is part of the system identity.\n10. When in doubt, reach for fewer elements at larger sizes. The system's editorial register collapses when crowded.\n\n## Known Gaps\n\n- The system depends on `deck-stage.js` for canvas scaling and slide navigation. The script is not described in this design.md — treat it as a runtime dependency.\n- Source Serif 4 and JetBrains Mono are loaded from Google Fonts via `<link>`. Offline rendering will fall back to Georgia serif and Menlo mono respectively, which will preserve the rough character but lose the optical-size axis and the JetBrains Mono identity. Self-hosting recommended for offline / print reliability.\n- The Source Serif 4 optical-size axis (`opsz` 8..60) is critical to the system's quality — using a non-opsz fallback face flattens the size-aware letterform contrast.\n- The bar chart uses hand-set bar heights (`%` of a fixed 520px plot region). There is no data-binding — extending the chart requires manually computing heights.\n- The monogram circle, footline strings, and tile counters carry hardcoded text in the source. Replacing them with a deck's actual identity is required per-deck.\n- The system has no `@media print` rule and no responsive breakpoints — it is fixed 1920×1080 and relies on `deck-stage.js` for any viewport adaptation.\n- The green-on-pink and pink-on-green text contrast ratios are sufficient at the display sizes used (84px+) but would fail WCAG AA at body-text sizes. Do not put 26px body text in pink-on-green or green-on-pink — keep small text in cream-on-green or ink-on-cream.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-forest/preview.md (Tokens: ~1033 | Category: anthropic-skill) -->\n# Editorial Forest Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/editorial-forest/design.md`\n- Preview card: `bold-template-pack/templates/editorial-forest/preview.md`\n\n## Selection Metadata\n\n- Slug: `editorial-forest`\n- Tagline: Forest green, dusty pink, and warm cream meet Source Serif 4 in a quiet, intentional quarterly-review deck.\n- Mood: editorial, quiet, considered, warm, intentional\n- Tone: literary, thoughtful, warm, low-pressure\n- Formality: medium\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel like a considered editorial — quarterly reviews, internal readouts, studio updates, creative-agency presentations. Equally good for any deck that wants to feel warm and unhurried rather than corporate, including research recaps, book or program announcements, and team retrospectives.\n- Avoid for: Contexts that need to feel urgent, punchy, or sales-driven — the palette and rhythm are intentionally quiet.\n\n## Visual Snapshot\n\nA serif-led editorial presentation system in the register of a literary quarterly or art-book monograph. Display type runs in Source Serif 4 at weight 500 with optical-size axis engaged, scaling up to 220px for cover and stat moments. The palette pairs a deep forest green (#2e4a2a) with a dusty rose pink (#e89cb1) over an oat-cream paper ground (#efe7d4), with JetBrains Mono as the editorial chrome (labels, captions, axis ticks). The aesthetic is closer to a Penguin classic, Apartamento spread, or quiet annual report than a tech keynote — confident, paper-feeling, and committed to a small color vocabulary.\n\nEditorial Forest is a serif-led editorial presentation system in the tonal register of a Penguin classic, a quiet annual report, or an art-book spread. The system's foundational premise is a single, confident typographic voice — Source Serif 4 — used at extreme scale (up to 220px) for headlines and stat figures, with JetBrains Mono playing the supporting role of editorial chrome (labels, captions, axis ticks, page footlines).\n\n## Preview Ingredients\n\n- Palette: green #2E4A2A; green-deep #243A21; green-lite #3A5A36; pink #E89CB1; pink-deep #D27E96; cream #EFE7D4; cream-2 #E6DCC4; ink #1A1A17\n- Typography: JetBrains Mono\n- Signature move: Three-color editorial palette: deep forest green, dusty rose pink, oat cream paper. Two surface tones per slide is typical; three is loud.\n- Signature move: Source Serif 4 at weight 500 for every headline, body, and display moment. Optical-size axis engaged for size-aware letterforms.\n- Signature move: JetBrains Mono at weight 500 uppercase with wide tracking (0.14em–0.18em) for every label, caption, axis tick, and footline.\n- Signature move: Display type scales to 220px for cover and stat-figure moments; 96px for primary headlines; 56–84px for card titles.\n- Signature move: 2px hairline rules separate stacked sections — never thicker, never colored beyond region context.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/design.md (Tokens: ~8851 | Category: anthropic-skill) -->\n---\nversion: alpha\nname: Editorial Tri-Tone\ndescription: A literary magazine-meets-annual-report presentation system built on a strict three-color palette — blush pink, golden butter, and deep burgundy wine. Despite having eleven CSS variable names, only three hex values exist in the entire system; every alias is a semantic rename of one of those three. Headlines run Bricolage Grotesque (a variable grotesque with an optical-size axis) at extreme weights and negative letter-spacing. Instrument Serif (italic-cut only) appears as the expressive accent face for chapter numerals, pull-quotes, years, and signatures. JetBrains Mono carries all metadata, labels, and section markers at tight uppercase tracking. The aesthetic is \"independent arts publication\" — the kind with a colophon, hand-numbered editions, and an editorial desk.\n\ncolors:\n  pink: \"#F2B6C6\"\n  butter: \"#F2D86A\"\n  burgundy: \"#7A1F35\"\n\ncolor-aliases:\n  pink-deep: pink\n  sky: pink\n  cream: butter\n  lime: butter\n  terracotta: butter\n  navy: burgundy\n  forest: burgundy\n  ink: burgundy\n\ntypography:\n  display-wordmark:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 300px\n    fontWeight: 800\n    lineHeight: 0.82\n    letterSpacing: -0.04em\n  display-closer:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 320px\n    fontWeight: 700\n    lineHeight: 0.82\n    letterSpacing: -0.05em\n  display-stat:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 540px\n    fontWeight: 700\n    lineHeight: 0.78\n    letterSpacing: -0.06em\n  display-stat-unit:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 220px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  chapter-num:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 240px\n    fontWeight: 400\n    lineHeight: 0.9\n    letterSpacing: 0\n  quote-mark:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 200px\n    fontWeight: 400\n    lineHeight: 0.6\n    letterSpacing: 0\n  display-xl:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 84px\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.02em\n  display-lg:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 76px\n    fontWeight: 700\n    lineHeight: 0.95\n    letterSpacing: -0.02em\n  signature:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 64px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  endorsement-num:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 56px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n    color: pink\n  timeline-year:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 56px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  subhead-serif:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 48px\n    fontWeight: 400\n    lineHeight: 1.1\n    letterSpacing: 0\n  lede:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 56px\n    fontWeight: 500\n    lineHeight: 1.05\n    letterSpacing: -0.02em\n  cover-pill:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 44px\n    fontWeight: 500\n    lineHeight: 1.0\n    letterSpacing: 0\n  chart-title:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 40px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0\n  card-title:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 40px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  quote-heading:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 56px\n    fontWeight: 600\n    lineHeight: 1.0\n    letterSpacing: -0.02em\n  body-lg:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 28px\n    fontWeight: 400\n    lineHeight: 1.45\n    letterSpacing: 0\n  body-md:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 26px\n    fontWeight: 400\n    lineHeight: 1.4\n    letterSpacing: 0\n  body-sm:\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.45\n    letterSpacing: 0\n  label:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  label-wide:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.18em\n    textTransform: uppercase\n  label-mid:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.12em\n    textTransform: uppercase\n  label-tight:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.10em\n    textTransform: uppercase\n  footer:\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    fontWeight: 400\n    lineHeight: 1.0\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    opacity: 0.75\n\nspacing:\n  slide-pad: 96px\n  chrome-gutter: 64px\n  section-gap: 48px\n  card-pad: 28px 28px 30px\n  chart-pad: 48px 48px 56px\n  footer-bottom: 36px\n  grid-gap: 24px\n  endorsement-pad: 20px 0\n\ncanvas:\n  width: 1920px\n  height: 1080px\n\ncomponents:\n  pill:\n    borderRadius: 999px\n    padding: 0.35em 0.9em\n    fontFamily: \"Bricolage Grotesque, sans-serif\"\n    fontWeight: 500\n    lineHeight: 1.0\n  cover-pill:\n    borderRadius: 999px\n    padding: 16px 38px\n    fontSize: 44px\n    fontWeight: 500\n  closer-pill:\n    borderRadius: 999px\n    padding: 12px 28px\n    fontSize: 22px\n  value-card:\n    borderRadius: 28px\n    padding: 28px 28px 30px\n    height: 340px\n  value-card-dark:\n    background: \"{colors.burgundy}\"\n    color: \"{colors.butter}\"\n  value-card-light:\n    background: \"{colors.butter}\"\n    color: \"{colors.burgundy}\"\n  chart-card:\n    background: \"{colors.butter}\"\n    color: \"{colors.burgundy}\"\n    borderRadius: 32px\n    padding: 48px 48px 56px\n  timeline-ribbon:\n    background: \"{colors.burgundy}\"\n    color: \"{colors.butter}\"\n    borderRadius: 999px\n    padding: 24px 44px\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 24px\n    letterSpacing: 0.15em\n    textTransform: uppercase\n  timeline-ribbon-accent:\n    fontFamily: \"Instrument Serif, serif\"\n    fontSize: 30px\n    fontWeight: 400\n    letterSpacing: 0\n    textTransform: none\n    color: \"{colors.pink}\"\n  footer-chrome:\n    position: absolute\n    left: 64px\n    right: 64px\n    bottom: 36px\n    fontFamily: \"JetBrains Mono, monospace\"\n    fontSize: 16px\n    letterSpacing: 0.12em\n    textTransform: uppercase\n    opacity: 0.75\n  footer-dot:\n    width: 8px\n    height: 8px\n    borderRadius: 999px\n    background: currentColor\n    opacity-inactive: 0.3\n    opacity-active: 1.0\n  swatch-circle:\n    width: 36px\n    height: 36px\n    borderRadius: 999px\n  stat-breakdown-bar:\n    height: 10px\n    borderRadius: 999px\n    background: \"rgba(246,237,220,0.15)\"\n  stat-breakdown-divider:\n    borderTop: \"1px solid rgba(246,237,220,0.25)\"\n  endorsement-divider:\n    borderTop: \"1px solid rgba(246,237,220,0.30)\"\n  avatar:\n    width: 72px\n    height: 72px\n    borderRadius: 999px\n    background: \"{colors.burgundy}\"\n    border: \"3px solid {colors.burgundy}\"\n  timeline-axis:\n    height: 4px\n    background: \"{colors.burgundy}\"\n    opacity: 0.15\n  timeline-dot:\n    width: 28px\n    height: 28px\n    borderRadius: 999px\n    border: \"4px solid {colors.butter}\"\n    background: \"{colors.burgundy}\"\n---\n\n## Frontend Slides Fixed-Stage Policy\n\nWhen this design system is used by the `frontend-slides` skill, generate the final deck as a **fixed 1920×1080 stage** that scales uniformly to the browser viewport. The deck should preserve a 16:9 slide canvas on every screen, including phones; it may letterbox or pillarbox, but it should not reflow slide content for mobile.\n\nThis policy has higher priority than any source-template responsive behavior described later in this file. If a later section says the original template is viewport-fluid, treat that as source history only, not as the target generation model for `frontend-slides`.\n\nThis policy applies even if the source template was originally implemented with viewport-fluid CSS such as `100vw`, `100vh`, `vw`, `vh`, or `clamp()`. Treat those values as design proportions to translate into 1920×1080 stage coordinates, not as live responsive rules in the generated deck.\n\nUse `deck-stage.js` or an equivalent inline stage scaler for final output: render each slide at 1920×1080, scale the whole stage with one transform, and verify rendered screenshots for both text overflow and panel overlap.\n\n\n## Overview\n\nEditorial Tri-Tone is a **literary magazine presentation system** built on the strictest possible palette: three hex values, eleven CSS variable names. The naming system reveals editorial intent — `--pink` and `--sky` point at the same blush; `--cream`, `--butter`, `--lime`, and `--terracotta` all resolve to the same golden yellow; `--burgundy`, `--navy`, `--forest`, and `--ink` all collapse to the same deep wine. The aliases exist to communicate the role of the color in context, not to introduce variation.\n\nThe typeface stack is a deliberate three-way conversation:\n1. **Bricolage Grotesque** — a variable grotesque with an optical-size axis. Used at weights 500, 600, 700, and 800 for all display and body sans text.\n2. **Instrument Serif** — used exclusively in weight 400, often in its italic guise. Reserved for chapter numerals, pull-quote marks, timeline years, signatures, endorsement ordinals, and stat percentage symbols.\n3. **JetBrains Mono** — all metadata, labels, section markers, footnotes, footer chrome.\n\nThe editorial voice is that of an independent magazine with a colophon — the deck's last slide is literally called \"Colophon.\" Section markers use the section sign (§) followed by a number and a title. The tone is measured, literary, and warm rather than corporate or high-energy.\n\n**Key Characteristics:**\n- Three-color palette with semantic aliases: blush pink (#F2B6C6), golden butter (#F2D86A), deep burgundy (#7A1F35).\n- Mixed typography: Bricolage Grotesque grotesque for display and body; Instrument Serif for expressive accent numerals, quotes, and years; JetBrains Mono for all labels.\n- The `em` tag within Bricolage Grotesque headlines always triggers a switch to Instrument Serif italic — the system's primary typographic mix.\n- Pills (border-radius 999px) are the universal tag component; used at three different sizes across cover, chart legend, and closer.\n- Value cards have a generous 28px border-radius — soft, rounded, not brutalist.\n- Dividers on dark surfaces use low-opacity rgba (0.25–0.30) rather than solid colors — whispered separators.\n- Footer dot row: a progress indicator using 8px circles at 30% opacity (inactive) and 100% opacity (active).\n- The sole SVG chart combines four series types on a single canvas: filled area, vertical bars, connected circles, dotted line.\n\n## Colors\n\n### The Three Actual Colors\nDespite many CSS variable names, the palette is:\n\n| Name | Hex | Role |\n|---|---|---|\n| Blush Pink | #F2B6C6 | Accent / highlight on dark surfaces; stat figure color; quote mark glow |\n| Golden Butter | #F2D86A | Warm mid-tone; background for light slides; accent text on dark surfaces |\n| Deep Burgundy | #7A1F35 | Primary dark surface; ink color; structural tone |\n\n### Alias Map\nAll aliases resolve to one of the three values above. The alias name signals context:\n\n| Alias | Points to | Context of use |\n|---|---|---|\n| `--pink` | #F2B6C6 | Default accent label |\n| `--pink-deep` | #F2B6C6 | (unused distinct value — same as pink) |\n| `--sky` | #F2B6C6 | Segment D bar in breakdown |\n| `--cream` | #F2D86A | Light surface background |\n| `--butter` | #F2D86A | Accent text on dark; card backgrounds |\n| `--lime` | #F2D86A | Ribbon accent text; kicker label on dark surfaces |\n| `--terracotta` | #F2D86A | Italic em highlights in lede or body |\n| `--navy` | #7A1F35 | Alternate label for dark surface contexts |\n| `--forest` | #7A1F35 | Dark panel or column background |\n| `--burgundy` | #7A1F35 | Structural background color |\n| `--ink` | #7A1F35 | All text color |\n\n\n## Typography\n\n### Font Families\n- **Bricolage Grotesque**: The primary typeface. Variable with optical-size axis (opsz 12..96) and weights from 400 to 800. The weight range is the expressive tool — 400 for body, 500 for lede, 600 for card titles and quote headers, 700 for section headlines, 800 for the wordmark.\n- **Instrument Serif**: Weight 400 only, italic variant loaded. Functions as the expressive counterpoint to Bricolage Grotesque. Never used for body copy; always for large numerals, quotation marks, signatures, years, endorsement ordinals, and the stat percentage symbol. The key insight is that the system never uses Instrument Serif for \"normal\" running text — only for moments of human expressiveness.\n- **JetBrains Mono**: Weights 400 and 500. All labels are uppercase with 0.10–0.18em letter-spacing. Always secondary information: section markers, metadata, footnotes, legend categories, kickers, footer chrome.\n\n### The `em` Rule\nWithin any Bricolage Grotesque headline, an `<em>` tag triggers a switch to Instrument Serif at weight 400. This is the system's primary in-line typographic mix — a grotesque headline interrupted by a serif aside. Example: \"A short trajectory, told in *five stops*.\" The em portion reads as a quieter, more reflective counterpoint.\n\n### The `b` Rule (Quote Slide Only)\nWithin Instrument Serif blockquotes, a `<b>` tag triggers a switch back to Bricolage Grotesque weight 600 in burgundy. The reverse of the em rule — a serif quote punctuated by a grotesk emphasis.\n\n### Display Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.display-stat}` | 540px | Bricolage Grotesque | 700 | Full-bleed oversized stat or number figure |\n| `{typography.display-closer}` | 320px | Bricolage Grotesque | 700 | Jumbo title or closing wordmark |\n| `{typography.display-wordmark}` | 300px | Bricolage Grotesque | 800 | Primary wordmark or deck title |\n| `{typography.display-stat-unit}` | 220px | Instrument Serif | 400 | Accent symbol alongside a stat figure |\n| `{typography.chapter-num}` | 240px | Instrument Serif | 400 | Large chapter or section numeral |\n| `{typography.quote-mark}` | 200px | Instrument Serif | 400 | Decorative large quotation mark |\n| `{typography.display-xl}` | 84px | Bricolage Grotesque | 700 | Section headline for data or chart layouts |\n| `{typography.display-lg}` | 76px | Bricolage Grotesque | 700 | Section headlines |\n| `{typography.signature}` | 64px | Instrument Serif | 400 | Signature or sign-off element |\n| `{typography.lede}` | 56px | Bricolage Grotesque | 500 | Lede or opening statement |\n| `{typography.quote-heading}` | 56px | Bricolage Grotesque | 600 | Panel heading or editorial subhead |\n| `{typography.endorsement-num}` | 56px | Instrument Serif | 400 | Endorsement or list ordinals |\n| `{typography.timeline-year}` | 56px | Instrument Serif | 400 | Year stamps or large ordinal accents |\n| `{typography.subhead-serif}` | 48px | Instrument Serif | 400 | Secondary subheads on dark surfaces |\n| `{typography.cover-pill}` | 44px | Bricolage Grotesque | 500 | Large tag cloud or keyword pills |\n| `{typography.chart-title}` | 40px | Instrument Serif | 400 | Card or panel title |\n| `{typography.card-title}` | 40px | Bricolage Grotesque | 600 | Card or value title |\n\n### Body and Label Scale\n\n| Token | Size | Family | Weight | Use |\n|---|---|---|---|---|\n| `{typography.body-lg}` | 28px | Bricolage Grotesque | 400 | Manifesto right-column body |\n| `{typography.body-md}` | 26px | Bricolage Grotesque | 600/400 | Attribution name, endorsement body |\n| `{typography.body-sm}` | 24px | Bricolage Grotesque | 400 | Card descriptions, stat annotation, closer index |\n| `{typography.label}` | 24px | JetBrains Mono | 400 | Standard section labels (0.15em tracking) |\n| `{typography.label-wide}` | 24px | JetBrains Mono | 400 | Kickers on dark slides (0.18em tracking) |\n| `{typography.label-mid}` | 24px | JetBrains Mono | 400 | Manifesto bottom meta (0.12em) |\n| `{typography.label-tight}` | 24px | JetBrains Mono | 400 | Legend categories, breakdown labels (0.10em) |\n| `{typography.footer}` | 16px | JetBrains Mono | 400 | Page footer chrome (0.12em, opacity 0.75) |\n\n### Principles\nBricolage Grotesque's optical-size axis makes the face significantly more expressive at large sizes and more legible at small sizes without changing weight. At 540px and 300px (stat and wordmark), the display renders with wide, open letterforms; at 24px (body), it compresses. Both are weight 700 or 800 at display; both are weight 400 at body. The face is never used in intermediate sizes (48–72px) — that zone belongs to Instrument Serif.\n\nLetter-spacing on Bricolage Grotesque is always negative at display: -0.04em at 300px, -0.05em at 320px, -0.06em at 540px. At body sizes (24–28px), no letter-spacing is applied.\n\nJetBrains Mono label tracking is always positive and varies by use: 0.10em for dense data contexts, 0.12em for secondary meta, 0.15em for standard section labels, 0.18em for headline kickers on dark slides.\n\n## Layout\n\n### Canvas System\nEvery slide is exactly 1920×1080px. The `deck-stage` custom element handles centering and scaling.\n\n### Gutter System\n- **Chrome gutter** (64px left/right): Used by footer chrome and most content edges.\n- **Generous slide padding** (96px): Most slides use `padding: 96px 64px` — the top/bottom pad is larger than the sides, giving a portrait-publication feel even on landscape slides.\n- **Wide slide padding** (88px top on chart slide): Slight reduction to accommodate the two-column layout.\n\n\n### Slide Internal Spacing Pattern\nEach slide follows a top-to-bottom reading order:\n1. Section marker (`§ XX — Title`, JetBrains Mono, 24px, label tracking)\n2. Headline or major content\n3. Body / grid content\n4. Footer meta (absolute, bottom 36px)\n\n## Elevation and Depth\n\nThe system uses **no box shadows at all**. Depth comes entirely from:\n\n### Color Surface Contrast\nThe burgundy/butter/pink trio creates its own depth hierarchy:\n- Butter surfaces feel \"forward\" (warm, light)\n- Pink feels \"accented\" (warm, mid)\n- Burgundy feels \"recessed\" (dark, anchoring)\n\nAlternating surface colors within split slides (cream left / burgundy right on manifesto; lime left / burgundy right on quote) creates depth through edge contrast rather than shadow.\n\n### Opacity Dividers\nOn dark (burgundy) surfaces, all dividers and structural lines use rgba rather than solid colors:\n- Row separators in stat breakdown: `rgba(246,237,220,0.25)`\n- Endorsement rows in quote slide: `rgba(246,237,220,0.30)`\n- Timeline axis: `opacity: 0.15` on solid burgundy\n\nThe cream values (246,237,220) in those rgba strings approximate the butter color at full opacity — dividers feel like recessed etchings rather than drawn lines.\n\n### Chart Card Lift\nThe chart card (slide 6) achieves its \"lifted\" feeling through border-radius 32px on a butter card placed over a burgundy background. No shadow — the rounded corner on a contrasting surface signals elevation.\n\n## Shapes and Treatment\n\n### Border Radius Scale\n| Value | Use |\n|---|---|\n| 999px | All pills, timeline ribbon, swatch circles, avatar, breakdown bars, timeline dots, footer dots, chart data circles |\n| 32px | Chart card (slide 6) |\n| 28px | Value cards (slide 3) |\n| 4px | SVG chart bars (rx=\"4\") |\n| 0px | Section headlines, grid cells (no rounding) |\n\nThe system has a strong binary: either fully rounded (pills, circles) or square (content blocks). The exception is the chart card (32px) and value cards (28px) — large enough radius to feel \"soft\" but geometric rather than circular.\n\n### Pill System\nPills are the universal label/tag component. Three size variants:\n- **Cover pills**: 44px font, 16px 38px padding — large enough to read as headline elements in the tag cloud\n- **Standard pills** (section labels, legend items): 22–24px font, 10–12px 24–28px padding\n- **Color assignments** alternate: burgundy-bg/pink-text and butter-bg/burgundy-text on cover; burgundy/cream or lime/ink on closer\n\n### SVG Chart (Slide 6)\nThe inline SVG chart at 720×380 viewBox combines four series types deliberately to demonstrate the range of a single chart surface:\n- **Area series** (Series A): Filled path with pink fill at 0.85 opacity, burgundy stroke at weight 3\n- **Bar series** (Series C): Burgundy rectangles with rx=\"4\"\n- **Connected circle series** (Series B): Butter circles (r=8) with burgundy stroke/fill on a burgundy line at weight 3\n- **Dotted line** (Series D): Burgundy dashed stroke (stroke-dasharray=\"2 10\", stroke-linecap=\"round\") at 60% opacity\n\nY-axis labels are JetBrains Mono 24px at 60% opacity, left-aligned to x=0.\n\n## Do's and Don'ts\n\n### Do\n- Treat the three hex values as a closed system. Every element uses pink, butter, or burgundy — no neutrals, no grays, no white.\n- Use Instrument Serif only for moments of human expressiveness: numerals, years, signatures, quotation marks, endorsement ordinals. Never for running body text.\n- Use the `em` tag in Bricolage Grotesque headlines to trigger the serif switch. This is the system's primary inline mix and its clearest editorial voice.\n- Give all label text (JetBrains Mono) positive letter-spacing between 0.10em and 0.18em. Monospace without tracking reads as code, not editorial.\n- Alternate surface colors across the two-column split slides. One side is always butter, the other always burgundy.\n- Keep body text in Bricolage Grotesque at weights 400 (text) and 500–600 (emphasized labels). The weight axis is the tonal dial.\n- Use pills at multiple sizes — the pill is the universal tag and its size signals context: 44px for headline-level categorization, 22–24px for utility labels.\n- Section markers follow the pattern `§ NN — Title` in JetBrains Mono — every slide opens with this convention.\n\n### Don't\n- Don't introduce a fourth color. The tri-tone constraint is the design premise.\n- Don't use Instrument Serif at small sizes or in body paragraphs. It is purely an accent face.\n- Don't break the em rule — using Bricolage Grotesque italic instead of Instrument Serif for inline emphasis loses the typographic mix.\n- Don't use letter-spacing on Bricolage Grotesque at display sizes — only negative tracking via `letter-spacing: -0.02em` to `-0.06em` depending on size.\n- Don't add solid-color dividers on dark (burgundy) surfaces. All structural lines on dark backgrounds must use low-opacity rgba.\n- Don't apply box shadows. The system has none. Depth comes from surface contrast and border-radius on contrasting backgrounds.\n- Don't round large content containers (section panels, grid backgrounds). Rounding applies only to pill-scale and card-scale elements (value cards, chart card).\n- Don't use Bricolage Grotesque weight 800 except in the wordmark. The weight 800 is reserved for the single largest typographic moment.\n\n## Responsive Behavior\n\nThis template is designed **exclusively for 1920x1080 presentation display**. The `deck-stage` web component handles viewport scaling via CSS transforms; the 1920x1080 canvas scales proportionally to any screen without layout changes.\n\n### Presenter Behavior\n- Slide advancement via keyboard or presentation clicker (handled by `deck-stage.js`).\n- No hover states are defined.\n- No interactive elements.\n\n### Print / Export\n- At 96dpi, 1920x1080 maps to a 20x11.25 inch frame.\n- The stat figure at 540px renders at ~405pt — suitable for large-format print.\n- The three-color palette is print-safe; burgundy is a deep PMS-range wine tone, butter is a warm yellow, pink is a muted blush — all reproduce well in CMYK offset.\n\n## CJK & International Content\n\n### Recommended Chinese Pairing\n\n| Role | Chinese Face | Weight | Why |\n|---|---|---|---|\n| Display wordmark / closer / stat (300–540px) | 站酷小薇体 ZCOOL XiaoWei | 400 | A literary decorative serif with the same expressive personality as Bricolage Grotesque + Instrument Serif italic at extreme scale |\n| Section headlines (76–84px) | 思源黑体 Noto Sans SC | 700 | The grotesque equivalent in CJK — carries the Bricolage Grotesque structural weight |\n| Chapter numerals / quote marks / years (200–240px) | 霞鹜文楷 LXGW WenKai | 400 | Hand-set warmth that matches Instrument Serif's expressive accent role |\n| Body paragraph (24–28px) | 思源宋体 Noto Serif SC | 400 | Mincho body voice; literary register |\n| Lede / quote-heading (56px) | 思源黑体 Noto Sans SC | 500–600 | Matches Bricolage Grotesque weight 500/600 |\n| Mono label / section marker / footer | 思源等宽 Noto Sans Mono CJK SC | 400–500 | Preserves the JetBrains Mono chrome quality for `§ NN — Title` markers |\n\n### Mixed-Content Strategy\n\nUse **Strategy C** — keep Bricolage Grotesque (display, body) and Instrument Serif (italic accents) as the Latin faces and fall back to the Chinese stack only for CJK glyphs. The literary-magazine identity of Editorial Tri-Tone depends on Bricolage Grotesque's optical-size axis and Instrument Serif's italic cut as part of the brand voice; replacing them wholesale with a CJK family would flatten the system into \"generic Chinese editorial.\" Stack:\n\n```css\n/* Bricolage Grotesque roles (display, body) */\nfont-family: 'Bricolage Grotesque', 'Noto Sans SC', sans-serif;\n/* Instrument Serif roles (chapter-num, quote-mark, year, signature) */\nfont-family: 'Instrument Serif', 'LXGW WenKai TC', serif;\n/* JetBrains Mono roles (labels, section markers) */\nfont-family: 'JetBrains Mono', 'Noto Sans Mono CJK SC', monospace;\n```\n\nThe system's signature `<em>` rule (Bricolage Grotesque → Instrument Serif italic inline) is what carries the editorial tone in Latin. The CJK equivalent: an `<em>` inside a 思源黑体 (Noto Sans SC) headline should switch to **站酷小薇体 (ZCOOL XiaoWei)** — a decorative literary serif with the same softness contrast as Instrument Serif italic. Add a CSS rule:\n\n```css\nh1 em, h2 em, .lede em, .quote-heading em {\n  font-family: 'Instrument Serif', 'ZCOOL XiaoWei', 'LXGW WenKai TC', serif;\n  font-style: italic; /* Latin only — CJK ignores font-style */\n}\n```\n\nWatch for baseline mismatch at display sizes (300–540px): Bricolage Grotesque at -0.04em to -0.06em tracking sits visually tighter than Noto Sans SC, so a mixed-script wordmark like `INTO 中国` may feel uneven. For hero / wordmark moments, prefer single-script lines and let the second script live on its own line below.\n\n### Loading\n\nAdd to the existing Google Fonts `<link>` (or as a second link tag):\n\n```html\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700&family=Noto+Serif+SC:wght@400;500;700&family=LXGW+WenKai+TC&family=ZCOOL+XiaoWei&display=swap\" rel=\"stylesheet\">\n```\n\nZCOOL XiaoWei is the decorative-terminal serif used for the em-switch role; it's hosted on Google Fonts at weight 400 only.\n\n### Universal CJK Adjustments\n\nThese adjustments apply to **every CJK block** in this system, regardless of size or role:\n\n- **Loosen line-height by 0.05–0.08.** CJK glyphs are full-width squares with more visual weight than Latin letterforms; line-heights tuned for Latin (0.78–0.92 on display, 1.4–1.45 on body) read as cramped in Chinese. Bump display to 0.95–1.05 and body to 1.5–1.6.\n- **Remove negative letter-spacing on CJK headlines.** Bricolage Grotesque display uses -0.04em to -0.06em tracking, which collides Chinese glyphs into each other. For CJK runs, set `letter-spacing: 0` — or a tiny positive `0.02em` if the headline feels visually packed.\n- **Never `text-transform: uppercase` on CJK text.** Chinese has no case; the CSS property does nothing on Han glyphs but will silently break any mixed-script line where the Latin portion was meant to be capitalized.\n- **Use Chinese full-width punctuation** (`，。：；！？「」『』（）`) inside Chinese sentences, not the Latin equivalents (`,.:;!?\"\"''()`). Mixing punctuation systems within one sentence reads as a typesetting error.\n- **No period (。) at the end of CJK headlines.** Chinese headlines follow the same rule as Latin — title-style lines drop terminal punctuation. Body paragraphs keep their 。\n- **Apply Pangu spacing (盘古之白) at the boundary between CJK and Latin runs.** A space (or 0.25em margin) belongs between a Chinese character and an adjacent Latin word or digit, e.g. `2026 年 5 月` not `2026年5月`. Either type the spaces manually or use a `pangu.js`-style auto-spacer.\n- **One font per sentence.** Don't switch between Noto Sans SC, Noto Serif SC, and ZCOOL XiaoWei inside the same sentence — pick the face that matches the role (headline = Noto Sans SC, body = Noto Serif SC, em-accent = ZCOOL XiaoWei) and commit to it for the whole run.\n\n### Aesthetic Notes for This System\n\nEditorial Tri-Tone's literary-magazine voice depends on the typographic contrast between Bricolage Grotesque (structural) and Instrument Serif italic (expressive). In Chinese, that same contrast lives in the **思源黑体 ↔ 站酷小薇体** pairing — a clean grotesque set against a literary decorative serif. The em-rule inside headlines should switch from 思源黑体 to **站酷小薇体** specifically (not 霞鹜文楷, which is warmer but less \"literary-decorative\"); this preserves the typographic mix that defines the system.\n\nFor the system's signature display moments — the 300px wordmark, the 540px stat figure, the 240px chapter numeral — Chinese is at its loudest. Reach for **站酷小薇体** when the moment is decorative (a chapter ordinal \"第一章\" rendered in literary serif) and **思源黑体 weight 700** when the moment is structural (a section headline like \"我们的方法\"). The 200px quote-mark glyph is harder in Chinese — Chinese quotation marks (「」) don't carry the same decorative weight as Latin 'curly quotes', so consider rendering the entire quote moment in the Latin glyph (using the `Instrument Serif` face on the punctuation character itself) and let the body text below switch to 思源宋体.\n\nThe section marker convention `§ NN — Title` works in Chinese: `§ 02 — 我们的承诺`. Keep the section sign and the numeral in JetBrains Mono / Noto Sans Mono CJK SC; the title text can switch to 思源黑体 weight 400 with 0.05em tracking to preserve the chrome quality.\n\n### Known CJK Gap\n\nZCOOL XiaoWei is the right aesthetic match for the em-switch role, but it ships as **weight 400 only with no italic cut**. Chinese has no italic concept (slanted Han glyphs read as broken, not emphasized), so the lack of italic is fine — but the visual softness contrast that Instrument Serif italic provides in Latin (a slanted, more flowing letterform) cannot be exactly replicated in Chinese. The decorative-terminal serif quality of ZCOOL XiaoWei provides the closest equivalent, but the contrast against 思源黑体 is **face-based, not slant-based**. Decks with heavy reliance on the em-rule should test the visual rhythm in Chinese before committing — if the contrast feels muted, increase the em-portion font-size by 4–8px to compensate.\n\n## Iteration Guide\n\n1. Section labels always use the `§ NN — Title` convention in JetBrains Mono with `{typography.label}` tracking.\n2. Every headline with an em/italic moment uses `<em>` to trigger Instrument Serif. Never use `font-style: italic` on Bricolage Grotesque directly.\n3. Value card alternation: odd-numbered cards (c1, c3, c5, c7) are dark (burgundy/butter); even-numbered (c2, c4, c6, c8) are light (butter/burgundy).\n4. New dark-surface sections use `rgba(246,237,220,0.25)` for dividers — not `{colors.butter}` at full opacity.\n5. New pills follow the existing alternation: burgundy-bg/pink-text and butter-bg/burgundy-text for variety in clusters.\n6. Adding a chart series: use the four established visual encodings (area, bars, circles, dotted line) before inventing a new one.\n7. All section backgrounds must be one of the three palette colors — never mix (no half-pink half-butter).\n8. Footer chrome is shared across all slides: `position:absolute; left:64px; right:64px; bottom:36px; font-family:JetBrains Mono; font-size:16px; opacity:0.75`.\n\n## Known Gaps\n\n- The `deck-stage.js` script is an external dependency not documented here.\n- The footer dot-row progress indicator (`.footer .dotrow`) is rendered in the HTML but the dots are all styled with class \"on\" or left as inactive — a presenter would need to update slide state dynamically.\n- The SVG chart uses hardcoded paths, coordinates, and placeholder values — no data-binding layer exists.\n- The breakdown bars in slide 4 use inline `width: XX%` as a style — percentages must be set manually.\n- The timeline stop dots (`.stop .dot`) have `display: none` — they are styled but not visible. A presenter populating this slide would enable them via CSS.\n- Instrument Serif italic is loaded as a font variant but is not explicitly called with `font-style: italic` in every context — in some cases the browser selects it from the variable font's italic axis automatically based on surrounding context.\n- Color swatch circles on slide 4 reference `--terracotta` and `--sky`, which resolve identically to `--butter` and `--pink` — the visual distinction exists only semantically in the source, not visually.\n\n<!-- File: plugins/frontend-slides/skills/frontend-slides/bold-template-pack/templates/editorial-tri-tone/preview.md (Tokens: ~1061 | Category: anthropic-skill) -->\n# Editorial Tri-Tone Preview Card\n\nUse this small file for title-slide previews only. For final deck generation, read the full design doc listed below.\n\n## Files\n\n- Full design doc: `bold-template-pack/templates/editorial-tri-tone/design.md`\n- Preview card: `bold-template-pack/templates/editorial-tri-tone/preview.md`\n\n## Selection Metadata\n\n- Slug: `editorial-tri-tone`\n- Tagline: Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif.\n- Mood: editorial, warm, intentional, moody\n- Tone: literary, warm, considered, stylish\n- Formality: medium-high\n- Density: medium\n- Scheme: mixed\n- Best for: Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews. Equally good for any deck — including tech, research, or business — that wants tri-tone discipline and serif/sans contrast instead of the usual neutrals.\n- Avoid for: Decks that need to read as soft or comforting — the burgundy/pink/cream tri-tone is intentionally high-contrast and styled.\n\n## Visual Snapshot\n\nA literary magazine-meets-annual-report presentation system built on a strict three-color palette — blush pink, golden butter, and deep burgundy wine. Despite having eleven CSS variable names, only three hex values exist in the entire system; every alias is a semantic rename of one of those three. Headlines run Bricolage Grotesque (a variable grotesque with an optical-size axis) at extreme weights and negative letter-spacing. Instrument Serif (italic-cut only) appears as the expressive accent face for chapter numerals, pull-quotes, years, and signatures. JetBrains Mono carries all metadata, labels, and section markers at tight uppercase tracking. The aesthetic is \"independent arts publication\" — the kind with a colophon, hand-numbered editions, and an editorial desk.\n\nEditorial Tri-Tone is a literary magazine presentation system built on the strictest possible palette: three hex values, eleven CSS variable names. The naming system reveals editorial intent — --pink and --sky point at the same blush; --cream, --butter, --lime, and --terracotta all resolve to the same golden yellow; --burgundy, --navy, --forest, and --ink all collapse to the same deep wine. The aliases exist to communicate the role of the color in context, not to introduce variation.\n\n## Preview Ingredients\n\n- Palette: pink #F2B6C6; butter #F2D86A; burgundy #7A1F35\n- Typography: Bricolage Grotesque; Instrument Serif; JetBrains Mono\n- Signature move: Three-color palette with semantic aliases: blush pink (#F2B6C6), golden butter (#F2D86A), deep burgundy (#7A1F35).\n- Signature move: Mixed typography: Bricolage Grotesque grotesque for display and body; Instrument Serif for expressive accent numerals, quotes, and years; JetBrains Mono for all labels.\n- Signature move: The em tag within Bricolage Grotesque headlines always triggers a switch to Instrument Serif italic — the system's primary typographic mix.\n- Signature move: Pills (border-radius 999px) are the universal tag component; used at three different sizes across cover, chart legend, and closer.\n- Signature move: Value cards have a generous 28px border-radius — soft, rounded, not brutalist.\n\n## International / CJK Preview Note\n\n- If the preview uses Chinese or other CJK text, keep CJK letter-spacing at 0, loosen line-height, and avoid uppercase transforms on CJK runs.\n- Use the full `design.md` CJK section after selection for exact font pairings and script-specific adjustments.\n\n## Preview Rules\n\n- Build exactly one title slide at 1920x1080 inside the fixed-stage model.\n- Preserve the palette, type roles, surface rhythm, and decorative vocabulary described above.\n- Use the user's real title/subtitle/context; do not copy demo slide content.\n- The rendered preview must look like a real first slide, not a template-selection card.\n- Never place internal workflow text on the slide: no `preview`, `generated from`, `preview.md`, `template`, `preset`, `style option`, `Option A/B/C`, file names, paths, or source-doc labels.\n- Never place the template name or slug on the slide itself; mention it only in the chat message.\n- Never place user requirement notes such as desired vibe, audience, or internal-use labels on the slide unless the user explicitly wants those exact words in the deck.\n- Use only real deck content for visible chrome: deck title, real section title, date, author, company, page number, or genuine content phrases from the user material.\n- Do not read `template.html` for preview generation.\n- Do not read other templates' `design.md` files.\n- After the user picks this template for the full deck, read the full design doc before generating final slides.\n\n<!-- ... +47 more modular skills available via /api/skills/zarazhangrui/frontend-slides?path={path} -->\n</yakaai_skills>"}