@thanh01.pmt/presentation-kit 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/skills/catalog.ts","../src/skills/contracts.ts","../src/ai/html/prompt.ts","../src/skills/helper.ts","../src/skills/tools.ts"],"names":[],"mappings":"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","file":"chunk-WNPKREEW.js","sourcesContent":["// ═══════════════════════════════════════════════════════════════════════════════\n// @learnwell/presentation-kit/skills/catalog\n// Curated 34 Templates Catalog & Style Presets from .ref/beautiful-html-templates & frontend-slides\n// GENERATED from .ref/beautiful-html-templates/index.json — regenerate via scripts/gen-catalog.mjs\n// ═══════════════════════════════════════════════════════════════════════════════\n\nexport interface TemplateCatalogItem {\n slug: string;\n name: string;\n tagline: string;\n mood: string[];\n occasion: string[];\n tone: string[];\n formality: 'low' | 'medium-low' | 'medium' | 'medium-high' | 'high';\n density: 'low' | 'medium' | 'medium-high' | 'high';\n scheme: 'light' | 'dark' | 'mixed';\n best_for: string;\n avoid_for: string;\n slide_count: number;\n}\n\nexport interface StylePresetItem {\n id: string;\n name: string;\n vibe: string;\n scheme: 'light' | 'dark';\n typography: {\n display: string;\n body: string;\n mono?: string;\n };\n colors: {\n bg: string;\n text: string;\n accent: string;\n cardBg?: string;\n border?: string;\n textMuted?: string;\n };\n signatureElements: string[];\n}\n\nexport const TEMPLATES_CATALOG: TemplateCatalogItem[] = [\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 \"occasion\": [\n \"gaming pitch\",\n \"hackathon demo\",\n \"web3 / crypto deck\",\n \"indie product launch\",\n \"developer tools\",\n \"synthwave brand\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"exhibition or biennale\",\n \"arts institution programme\",\n \"design or typography conference\",\n \"literary or curatorial publication\",\n \"studio annual report\",\n \"museum season announcement\"\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 \"slide_count\": 8\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 \"occasion\": [\n \"creative agency pitch\",\n \"indie SaaS launch\",\n \"designer portfolio\",\n \"brand redesign\",\n \"modern startup deck\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"B2B SaaS pitch\",\n \"consulting deliverable\",\n \"internal review\",\n \"advisory pitch\",\n \"investor update\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"brand manifesto\",\n \"creative-led pitch\",\n \"magazine / editorial\",\n \"founder vision deck\",\n \"art / culture\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"brand manifesto\",\n \"founder vision deck\",\n \"magazine / cultural pitch\",\n \"design talk\",\n \"bilingual EN/CN deck\",\n \"campaign launch\"\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 \"slide_count\": 20\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 \"occasion\": [\n \"lifestyle brand\",\n \"creator portfolio\",\n \"DTC product launch\",\n \"wellness or beauty pitch\",\n \"Y2K-tinged brand work\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"investment thesis\",\n \"white paper\",\n \"advisory deliverable\",\n \"research report\",\n \"book / longform pitch\",\n \"gallery / cultural\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"design trend or research report\",\n \"studio annual or seasonal bulletin\",\n \"creative agency capabilities deck\",\n \"art or architecture publication\",\n \"academic / curatorial publication\",\n \"newsletter or zine pitch\"\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 \"slide_count\": 8\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 \"occasion\": [\n \"fashion / beauty pitch\",\n \"fitness brand\",\n \"F&B brand deck\",\n \"lifestyle launch\",\n \"creative agency\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"creative agency pitch\",\n \"design studio deck\",\n \"ad shop credentials\",\n \"brand creative review\",\n \"concept presentation\"\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 \"slide_count\": 8\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 \"occasion\": [\n \"education / classroom\",\n \"kids product launch\",\n \"wellness program\",\n \"community workshop\",\n \"creator portfolio (craft / illustration)\",\n \"team kickoff\",\n \"wedding / baby shower planning\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"quarterly review\",\n \"internal readout\",\n \"studio update\",\n \"creative agency deck\",\n \"research recap\"\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 \"slide_count\": 8\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 \"occasion\": [\n \"editorial / magazine pitch\",\n \"fashion brand deck\",\n \"lifestyle media\",\n \"literary / cultural\",\n \"art direction review\"\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 \"slide_count\": 8\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 \"occasion\": [\n \"leadership presentation\",\n \"quarterly review\",\n \"strategy readout\",\n \"planning office deck\",\n \"executive briefing\"\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 \"slide_count\": 8\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 \"occasion\": [\n \"sustainability brand\",\n \"wellness brand\",\n \"outdoor / nature product\",\n \"winery or restaurant\",\n \"literary or arts deck\",\n \"advisory deliverable\",\n \"bilingual EN/CN deck\"\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 \"slide_count\": 12\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 \"occasion\": [\n \"supper club or dinner series\",\n \"event or community gathering\",\n \"small hospitality / restaurant brand\",\n \"creative studio open house\",\n \"membership or subscription pitch\",\n \"wine or food brand catalogue\",\n \"modern lifestyle brand\"\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 \"slide_count\": 8\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 \"occasion\": [\n \"design studio credentials\",\n \"architecture / interior brand\",\n \"ceramics or craft brand\",\n \"furniture pitch\",\n \"advisory deliverable\",\n \"bilingual EN/CN deck\"\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 \"slide_count\": 9\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 \"occasion\": [\n \"user research synthesis\",\n \"white paper\",\n \"longform report\",\n \"academic deck\",\n \"policy brief\",\n \"advisory deliverable\",\n \"bilingual EN/CN deck\"\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 \"slide_count\": 18\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 \"occasion\": [\n \"product launch\",\n \"design review\",\n \"founder pitch\",\n \"brand deck\",\n \"consulting findings\",\n \"conference talk\"\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 \"slide_count\": 13\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 \"occasion\": [\n \"cultural commentary\",\n \"manifesto\",\n \"community / civic deck\",\n \"design talk\",\n \"campaign pitch\",\n \"founder vision\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"research findings with personality\",\n \"qualitative report\",\n \"founder reflection\",\n \"creator essay deck\",\n \"workshop debrief\"\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 \"slide_count\": 11\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 \"occasion\": [\n \"fashion brand deck\",\n \"creator personal brand\",\n \"after-hours product (nightlife / dating / spirits)\",\n \"luxury launch\",\n \"editorial feature\"\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 \"slide_count\": 9\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 \"occasion\": [\n \"creator portfolio\",\n \"indie product launch\",\n \"lifestyle brand\",\n \"small-business pitch\",\n \"newsletter / community\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"startup pitch\",\n \"accelerator demo day\",\n \"founder pitch\",\n \"indie product launch\",\n \"brand deck\",\n \"creator portfolio\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"retro gaming pitch\",\n \"Y2K brand\",\n \"creator portfolio (90s aesthetic)\",\n \"tech-history talk\",\n \"shitpost-but-make-it-fancy deck\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"indie zine / publication\",\n \"music or arts brand\",\n \"creator portfolio\",\n \"small-batch / craft launch\",\n \"cultural / community deck\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"product launch or catalogue\",\n \"indie hardware or analog studio brand\",\n \"music label or release schedule\",\n \"creative studio annual report\",\n \"magazine or zine pitch\",\n \"vintage-flavored brand campaign\"\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 \"slide_count\": 8\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 \"occasion\": [\n \"brainstorm / workshop\",\n \"creative agency credentials\",\n \"design-thinking session\",\n \"ideation pitch\",\n \"art-direction review\"\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 \"slide_count\": 10\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 \"occasion\": [\n \"investor deck\",\n \"consulting deliverable\",\n \"board presentation\",\n \"legal / policy brief\",\n \"academic deck\",\n \"advisory pitch\",\n \"bilingual EN/CN deck\"\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 \"slide_count\": 18\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 \"occasion\": [\n \"editorial feature\",\n \"longform brand story\",\n \"gallery or museum\",\n \"literary pitch\",\n \"advisory deliverable\",\n \"wedding / lifestyle media\"\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 \"slide_count\": 12\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 \"occasion\": [\n \"museum / cultural institution\",\n \"art / architecture brand\",\n \"longform research\",\n \"heritage / craft brand\",\n \"manifesto\"\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 \"slide_count\": 11\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 \"occasion\": [\n \"design studio credentials\",\n \"creative agency pitch\",\n \"brand showcase\",\n \"art-direction review\",\n \"fashion / sneaker brand\",\n \"bilingual EN/CN deck\"\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 \"slide_count\": 12\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 \"occasion\": [\n \"research findings\",\n \"white paper or longform report\",\n \"academic or university deck\",\n \"advisory deliverable\",\n \"literary or editorial pitch\",\n \"founder reflection / vision deck\",\n \"bilingual EN/CN deck\"\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 \"slide_count\": 9\n}\n];\n\nexport const STYLE_PRESETS: StylePresetItem[] = [\n {\n id: \"electric-studio\",\n name: \"Electric Studio\",\n vibe: \"Bold, clean, professional, high contrast\",\n scheme: \"dark\",\n typography: {\n display: \"Space Grotesk, sans-serif\",\n body: \"Inter, sans-serif\",\n mono: \"JetBrains Mono, monospace\"\n },\n colors: {\n bg: \"#0a0a0a\",\n text: \"#ffffff\",\n accent: \"#4361ee\",\n cardBg: \"rgba(255, 255, 255, 0.05)\",\n border: \"rgba(67, 97, 238, 0.3)\",\n textMuted: \"#9ca3af\"\n },\n signatureElements: [\n \"Two-panel split architecture\",\n \"Staggered .reveal entrance transitions\",\n \"High-contrast code cards with macOS traffic lights\",\n \"1920×1080 stage canvas auto-scaling\"\n ]\n },\n {\n id: \"blue-professional\",\n name: \"Blue Professional\",\n vibe: \"Cream paper background with electric cobalt blue accents; clean modern professional\",\n scheme: \"light\",\n typography: {\n display: \"Space Grotesk, sans-serif\",\n body: \"Inter, sans-serif\",\n mono: \"SF Mono, Menlo, monospace\"\n },\n colors: {\n bg: \"#fdfae7\",\n text: \"#111111\",\n accent: \"#1e2bfa\",\n cardBg: \"rgba(30, 43, 250, 0.04)\",\n border: \"rgba(30, 43, 250, 0.2)\",\n textMuted: \"#6b6b6b\"\n },\n signatureElements: [\n \"Warm paper texture and clean typography\",\n \"Cobalt accent underlines and badges\",\n \"Clean 2-column theory vs code blocks\",\n \"3-card Bento grid for architecture breakdown\"\n ]\n },\n {\n id: \"creative-voltage\",\n name: \"Creative Voltage\",\n vibe: \"Bold, creative, energetic, retro-modern\",\n scheme: \"dark\",\n typography: {\n display: \"Syne, sans-serif\",\n body: \"Space Grotesk, sans-serif\",\n mono: \"Space Mono, monospace\"\n },\n colors: {\n bg: \"#1a1a2e\",\n text: \"#ffffff\",\n accent: \"#d4ff00\",\n cardBg: \"rgba(212, 255, 0, 0.05)\",\n border: \"rgba(212, 255, 0, 0.25)\",\n textMuted: \"#a0a0c0\"\n },\n signatureElements: [\n \"Electric neon yellow accents on dark purple void\",\n \"Punchy display typography\",\n \"Dynamic interactive checkpoint quizzes\",\n \"Bento stat counters with glowing outlines\"\n ]\n }\n];\n","// ═══════════════════════════════════════════════════════════════════════════════\n// @learnwell/presentation-kit/skills/contracts\n// Authoritative Skill Markdown Specifications from .ref/frontend-slides\n// ═══════════════════════════════════════════════════════════════════════════════\n\nexport const VIEWPORT_BASE_CSS = `/* ===========================================\n FIXED 16:9 STAGE: MANDATORY BASE STYLES\n Slides are authored at 1920×1080 and scaled as a whole.\n =========================================== */\n\nhtml, body {\n width: 100%;\n height: 100%;\n margin: 0;\n overflow: hidden;\n background: var(--stage-bg, #000);\n}\n\n.deck-viewport {\n position: fixed;\n inset: 0;\n overflow: hidden;\n background: var(--stage-bg, #000);\n}\n\n.deck-stage {\n position: absolute;\n left: 0;\n top: 0;\n width: 1920px;\n height: 1080px;\n overflow: hidden;\n transform-origin: 0 0;\n background: var(--slide-bg, #fff);\n}\n\n.slide {\n position: absolute;\n inset: 0;\n width: 1920px;\n height: 1080px;\n overflow: hidden;\n display: block;\n visibility: hidden;\n opacity: 0;\n pointer-events: none;\n background: var(--slide-bg, #fff);\n}\n\n.slide.active,\n.slide.visible {\n visibility: visible;\n opacity: 1;\n pointer-events: auto;\n z-index: 1;\n}\n\nimg, video, canvas, svg {\n max-width: 100%;\n max-height: 100%;\n}\n\n.reveal {\n opacity: 0;\n transform: translateY(30px);\n transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1),\n transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n.slide.visible .reveal,\n.slide.active .reveal {\n opacity: 1;\n transform: translateY(0);\n}\n\n.reveal:nth-child(1) { transition-delay: 0.08s; }\n.reveal:nth-child(2) { transition-delay: 0.16s; }\n.reveal:nth-child(3) { transition-delay: 0.24s; }\n.reveal:nth-child(4) { transition-delay: 0.32s; }\n.reveal:nth-child(5) { transition-delay: 0.40s; }\n\n@media (prefers-reduced-motion: reduce) {\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n transition-duration: 0.1s !important;\n }\n}\n`;\n\nexport const FRONTEND_SLIDES_CORE_RULES = `\n# FRONTEND SLIDES SKILL & QUALITY INVARIANTS\n\n## 1. Core Principles (Non-Negotiable)\n1. **Zero Dependencies** — Single HTML presentation with inline scoped CSS and JS.\n2. **Fixed 16:9 Stage Canvas** — Every slide is strictly authored inside a fixed 1920×1080 stage canvas (.deck-stage) scaled to the browser viewport. Never reflow slide content for different screen ratios.\n3. **No AI-Slop Design** — Never use generic purple gradients, cliché fonts (Arial, Roboto), or boring corporate bullets. Use curated palettes (Electric Studio, Blue Professional, Cobalt Grid) and distinctive typography (Space Grotesk, Inter, Syne, JetBrains Mono).\n4. **Staggered Reveals** — Use the .reveal class on key elements with transition delays for smooth, cinematic entrance animations.\n5. **No Pixel Coordinates** — NEVER output free-form bounding-box coordinates like \"position\": { \"x\", \"y\" } or \"layout\": \"title_and_content\". Always populate semantic layout slots.\n6. **Full-Stage Composition** — The composition must occupy the full 1920×1080 stage height. No vertical dead band taller than ~150px between blocks: if content is light, scale the type and spacing up or center the whole composition as a hero; never bottom-anchor content under a header (space-between on a full-height root with few children pools all leftover height into one hole).\n\n## 2. Pacing & Pedagogical Structure\nA complete lesson deck MUST have 8 to 12 slides following the Chunky Micro-Cycle:\n1. **Cover (hero-cover):** Lesson title, topic badge, learning goal, author/date.\n2. **Agenda & Roadmap (two-columns-compare or timeline-steps):** Milestones and timing.\n3. **Core Mental Model (split-concept-code):** Definition, analogy, and runnable starter code.\n4. **Visual Architecture (three-cards-grid):** 3-pillar breakdown of mechanisms.\n5. **Syntax & Deep Dive (split-concept-code):** Concrete language syntax, gotchas, and annotated snippet.\n6. **Timeline Execution (timeline-steps):** Step-by-step pipeline or algorithmic flow.\n7. **Interactive Formative Check (checkpoint-quiz):** Multiple-choice diagnostic question with explanation.\n8. **Summary & Next Milestone (summary-takeaways):** 3-4 golden takeaways and preview of next lesson.\n`;\n","// ═══════════════════════════════════════════════════════════════════════════════\n// @learnwell/presentation-kit — AI Slide HTML Prompt Contract\n// ═══════════════════════════════════════════════════════════════════════════════\n\nexport const SLIDE_HTML_PROMPT_CONTRACT = `\n# 🎨 HTML SLIDE ENGINE — AGENT GENERATION CONTRACT\n\nYou are an expert Presentation Designer and Curriculum Architect producing professional, high-impact slide decks.\nInstead of generating free-form HTML or brittle Markdown hacks, you MUST fill structured content into pre-tested **Layout Presets**.\n\n## Available Layout Presets & Required Slots:\n\n1. **hero-cover** (Cover / Title Slide)\n - \\`tag\\` (string): e.g. \"Unit 01 · Lesson 02\"\n - \\`title\\` (string): Main bold headline\n - \\`subtitle\\` (string): Subtitle or 1-sentence learning objective\n - \\`author\\` (string): Instructor / Organization\n - \\`date\\` (string): Course term or date\n\n2. **split-concept-code** (Theory + Code Snippet)\n - \\`tag\\` (string): Section topic tag\n - \\`title\\` (string): Topic heading\n - \\`points\\` (string[]): 3 to 4 concise bullet takeaways\n - \\`code\\` (string): Executable source code\n - \\`language\\` (string): Language name (e.g. \"python\", \"typescript\", \"swift\")\n - \\`codeNote\\` (string, optional): One-line hint or execution output\n\n3. **two-columns-compare** (Comparison / Pros vs Cons)\n - \\`tag\\` (string): Topic tag\n - \\`title\\` (string): Headline\n - \\`col1Title\\` (string): e.g. \"Synchronous I/O\"\n - \\`col1Items\\` (string[]): 3 to 4 points\n - \\`col2Title\\` (string): e.g. \"Asynchronous I/O\"\n - \\`col2Items\\` (string[]): 3 to 4 points\n\n4. **three-cards-grid** (3 Core Pillars / Architecture)\n - \\`tag\\` (string): e.g. \"Core Principles\"\n - \\`title\\` (string): Overview headline\n - \\`cards\\` (array of objects): Exactly 3 cards:\n - \\`badge\\`: e.g. \"01\", \"LAYER 1\"\n - \\`title\\`: Card headline\n - \\`desc\\`: 1-2 sentence description\n - \\`footer\\` (optional): Key takeaway\n\n5. **timeline-steps** (Algorithm / Execution Pipeline)\n - \\`tag\\` (string): e.g. \"Workflow\"\n - \\`title\\` (string): Headline\n - \\`steps\\` (array of objects): 3 to 5 steps:\n - \\`stepNum\\` (number/string): 1, 2, 3...\n - \\`title\\`: Step name\n - \\`desc\\`: What happens at this step\n\n6. **metric-callout** (Key Theorem / Benchmark Statistic)\n - \\`tag\\` (string): e.g. \"Time Complexity\"\n - \\`metric\\` (string): Big stat (e.g. \"O(log N)\", \"99.99%\", \"10x\")\n - \\`metricLabel\\` (string): e.g. \"Lookup Efficiency\"\n - \\`title\\` (string): Main takeaway\n - \\`desc\\` (string): Contextual explanation\n\n7. **checkpoint-quiz** (Interactive Checkpoint)\n - \\`tag\\` (string): e.g. \"Quick Knowledge Check\"\n - \\`question\\` (string): Clear question prompt\n - \\`options\\` (array of objects): 2 to 4 options:\n - \\`label\\`: \"A\", \"B\", \"C\", \"D\"\n - \\`text\\`: Option text\n - \\`explanation\\` (string): Explanatory rationale\n\n8. **summary-takeaways** (Wrap-Up / Next Steps)\n - \\`tag\\` (string): e.g. \"Recap\"\n - \\`title\\` (string): Wrap-up headline\n - \\`takeaways\\` (string[]): 3 to 4 memorable bullet points\n - \\`nextStep\\` (string): Teaser for the next lesson or project\n\n## Aesthetic & Quality Invariants (\"Anti-AI-Slop\"):\n- **Brevity is King (Zero-Scroll Invariant):** Each slide is calibrated for a 1920×1080 canvas. Maximum **35–40 words** per card or column; maximum **15 words** per bullet item. Never write dense multi-sentence paragraphs that cause vertical scrolling.\n- **Pedagogical Pacing:** Start with \\`hero-cover\\`, alternate between \\`split-concept-code\\`, \\`two-columns-compare\\` and \\`three-cards-grid\\`, insert a \\`checkpoint-quiz\\` midway, and finish with \\`summary-takeaways\\`.\n- **Theme Selection:**\n - \\`blue-professional\\`: General academic, clean engineering, trustworthy.\n - \\`cobalt-grid\\`: Advanced tech, algorithms, robotics, cybersecurity.\n - \\`editorial-forest\\`: Thoughtful design, literature, ethics, science.\n - \\`studio\\`: Minimalist product design, modern software.\n - \\`monochrome\\`: Pure high-contrast dark mode.\n\n## 🪄 Step Reveal & Progressive Disclosure:\n- The presentation shell supports sequential step reveal via mouse click or Space/Arrow keys.\n- Bullet lists (\\`points\\`, \\`col1Items\\`, \\`col2Items\\`), cards in \\`three-cards-grid\\`, and steps in \\`timeline-steps\\` reveal progressively one by one before navigating to the next slide.\n- In custom HTML slots, you can attach \\`class=\"step-reveal\"\\`, \\`data-step\\`, \\`data-reveal\\`, or \\`data-auto-reveal=\"true\"\\` on parent containers to enable click-by-click stepped appearance.\n\n## 🎙️ Mandatory 3-Part Presenter Notes Contract:\nEvery single slide MUST include the \\`notes\\` property structured with these 3 explicit components:\n1. **Talk Track:** 2-3 sentences of exact conversational speaking script for the teacher/presenter.\n2. **Cold-Call Check Question:** 1 diagnostic question to check understanding with a named student or attendee.\n3. **Scaffolding Tip:** 1 intuitive analogy or troubleshooting hint in case learners struggle with the concept.\n\nExample Notes:\n\\`\\`\\`markdown\nTalk Track: Here we contrast synchronous blocking I/O with asynchronous event-driven handling. Notice how threads remain idle while waiting for network responses.\nCold-Call: \"Jordan, looking at the left column, what happens to thread pool throughput when network latency quadruples?\"\nScaffolding Tip: Compare it to ordering coffee at a counter (async buzzer) versus waiting at the register until the cup is brewed (sync blocking).\n\\`\\`\\`\n\n## 🧱 MANDATORY JSON DECK OUTPUT STRUCTURE & SCHEMA:\nYou MUST output a single valid JSON object.\nCRITICAL: All layout data MUST be placed inside the \\`slots\\` object of each slide. Never put raw unstructured strings like \\`content: \"...\"\\`!\n\n\\`\\`\\`json\n{\n \"title\": \"Full Lesson Presentation Title\",\n \"theme\": \"blue-professional\",\n \"slides\": [\n {\n \"id\": 1,\n \"layoutId\": \"hero-cover\",\n \"slots\": {\n \"tag\": \"Unit 01 · Lesson 01\",\n \"title\": \"macOS & Xcode Environment Setup\",\n \"subtitle\": \"Master the Apple developer toolchain and build your first SwiftUI application lifecycle\",\n \"author\": \"Curriculum OS\",\n \"date\": \"2026\"\n },\n \"notes\": \"Talk Track: Welcome everyone. Today we establish our core iOS development environment...\\\\nCold-Call: 'Alex, why do we need Xcode Command Line Tools?'\\\\nScaffolding Tip: Think of Xcode as the full workshop and the SDK as the raw materials.\"\n },\n {\n \"id\": 2,\n \"layoutId\": \"split-concept-code\",\n \"slots\": {\n \"tag\": \"Architecture & Syntax\",\n \"title\": \"SwiftUI App Entry Point\",\n \"points\": [\n \"@main attribute designates the entry point of the app\",\n \"App protocol defines the structure and scene hierarchy\",\n \"WindowGroup manages the root view lifecycle across platforms\"\n ],\n \"code\": \"import SwiftUI\\\\n\\\\n@main\\\\nstruct MyApp: App {\\\\n var body: some Scene {\\\\n WindowGroup {\\\\n ContentView()\\\\n }\\\\n }\\\\n}\",\n \"language\": \"swift\",\n \"codeNote\": \"Notice how Scene encapsulates WindowGroup automatically\"\n },\n \"notes\": \"Talk Track: ...\\\\nCold-Call: ...\\\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 3,\n \"layoutId\": \"three-cards-grid\",\n \"slots\": {\n \"tag\": \"Core Pillars\",\n \"title\": \"Three Pillars of App State\",\n \"cards\": [\n { \"badge\": \"01\", \"title\": \"Active State\", \"desc\": \"App is in foreground and responding to user events directly.\" },\n { \"badge\": \"02\", \"title\": \"Inactive State\", \"desc\": \"App is transitioning, interrupted by system dialogs or Control Center.\" },\n { \"badge\": \"03\", \"title\": \"Background State\", \"desc\": \"Executing background tasks or preparing for memory suspension.\" }\n ]\n },\n \"notes\": \"Talk Track: ...\\\\nCold-Call: ...\\\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 4,\n \"layoutId\": \"timeline-steps\",\n \"slots\": {\n \"tag\": \"Step-by-Step\",\n \"title\": \"Xcode Setup Workflow\",\n \"steps\": [\n { \"stepNum\": 1, \"title\": \"Download Xcode\", \"desc\": \"Install latest Xcode from the Mac App Store\" },\n { \"stepNum\": 2, \"title\": \"Command Line Tools\", \"desc\": \"Run xcode-select --install in Terminal\" },\n { \"stepNum\": 3, \"title\": \"Select Simulators\", \"desc\": \"Download iOS 18+ runtime simulators\" },\n { \"stepNum\": 4, \"title\": \"Verify Build\", \"desc\": \"Create a new SwiftUI project and press Cmd+R\" }\n ]\n },\n \"notes\": \"Talk Track: ...\\\\nCold-Call: ...\\\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 5,\n \"layoutId\": \"two-columns-compare\",\n \"slots\": {\n \"tag\": \"Comparison\",\n \"title\": \"SwiftUI vs UIKit Architecture\",\n \"col1Title\": \"SwiftUI (Declarative)\",\n \"col1Items\": [\n \"State drives the UI automatically\",\n \"Lightweight immutable structs\",\n \"Cross-platform unified API\"\n ],\n \"col2Title\": \"UIKit (Imperative)\",\n \"col2Items\": [\n \"Manual view controller manipulation\",\n \"Heavyweight class hierarchies\",\n \"Explicit event-driven updates\"\n ]\n },\n \"notes\": \"Talk Track: ...\\\\nCold-Call: ...\\\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 6,\n \"layoutId\": \"checkpoint-quiz\",\n \"slots\": {\n \"tag\": \"Knowledge Check\",\n \"question\": \"Which SwiftUI modifier is used to observe external observable state objects?\",\n \"options\": [\n { \"label\": \"A\", \"text\": \"@State\" },\n { \"label\": \"B\", \"text\": \"@StateObject / @ObservedObject\" },\n { \"label\": \"C\", \"text\": \"@Binding\" },\n { \"label\": \"D\", \"text\": \"@Environment\" }\n ],\n \"explanation\": \"@StateObject manages the lifecycle of reference-type ObservableObjects, while @State is for value types.\"\n },\n \"notes\": \"Talk Track: ...\\\\nCold-Call: ...\\\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 7,\n \"layoutId\": \"summary-takeaways\",\n \"slots\": {\n \"tag\": \"Recap & Next\",\n \"title\": \"Lesson Summary & Key Takeaways\",\n \"takeaways\": [\n \"Configured complete developer toolchain with Xcode 16+\",\n \"Understood SwiftUI declarative lifecycle and @main entry point\",\n \"Mastered App State transitions between active, inactive, and background\"\n ],\n \"nextStep\": \"Lesson 02: State Management & Reactive Data Flow with @State and @Binding\"\n },\n \"notes\": \"Talk Track: ...\\\\nCold-Call: ...\\\\nScaffolding Tip: ...\"\n }\n ]\n}\n\\`\\`\\`\n\n## 🚫 STRICT ANTI-SLOP CONSTRAINTS:\n1. NEVER output a raw unstructured string like \\`content: \"...\"\\` or \\`content: \"Concept: ... Code snippet: ...\"\\`. All slide content MUST be placed inside the \\`slots\\` object with its specific keys (\\`points\\`, \\`code\\`, \\`cards\\`, \\`steps\\`, \\`options\\`, \\`takeaways\\`).\n2. NEVER use ellipsis \\`...\\` or placeholder comments in \\`code\\`. Every code snippet MUST be real, fully typed, syntax-valid, and pedagogical.\n3. NEVER leave \\`slots\\` empty \\`{}\\`.\n4. Output 6 to 8 substantive, rich slides covering the lesson plan thoroughly.\n`;\n","// ═══════════════════════════════════════════════════════════════════════════════\n// @learnwell/presentation-kit/skills/helper\n// Vercel AI SDK Skill Helper for Frontend Slides & Beautiful HTML Templates\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport { TEMPLATES_CATALOG, STYLE_PRESETS, type TemplateCatalogItem, type StylePresetItem } from './catalog.js';\nimport { FRONTEND_SLIDES_CORE_RULES } from './contracts.js';\nimport { SLIDE_HTML_PROMPT_CONTRACT } from '../ai/html/prompt.js';\n\nexport interface FrontendSlidesSkillOptions {\n mood?: string;\n stylePresetId?: string;\n templateSlug?: string;\n lessonId?: string;\n lessonTitle?: string;\n language?: string;\n}\n\n/**\n * Retrieves the full list of 34 verified HTML templates.\n */\nexport function getTemplatesCatalog(): TemplateCatalogItem[] {\n return TEMPLATES_CATALOG;\n}\n\n/**\n * Searches templates by mood, scheme, or keywords.\n *\n * Scoring semantics (graceful, not hard-AND):\n * - `scheme` and `mood` add weight when they match.\n * - `query` matches against slug/name/tagline/best_for/occasion/tone/avoid_for.\n * - Results are ranked by score and a minimum threshold applies; when NO\n * template clears the threshold the full catalog is returned so LLM agents\n * never dead-end on an over-constrained query.\n */\nexport function searchTemplates(filter?: string | {\n mood?: string;\n scheme?: 'light' | 'dark' | 'mixed';\n query?: string;\n}): TemplateCatalogItem[] {\n if (!filter) return TEMPLATES_CATALOG;\n const opts = typeof filter === 'string' ? { query: filter } : filter;\n\n const queryTokens = (opts.query || '')\n .toLowerCase()\n .split(/[\\s,;]+/)\n .map((t) => t.trim())\n .filter((t) => t.length > 1);\n\n const scored = TEMPLATES_CATALOG.map((tpl) => {\n let score = 0;\n\n if (opts.scheme) {\n if (tpl.scheme === opts.scheme) score += 2;\n }\n\n if (opts.mood) {\n const mood = opts.mood.toLowerCase();\n if (tpl.mood.some((m) => m.toLowerCase().includes(mood))) score += 2;\n else if (tpl.tone.some((t) => t.toLowerCase().includes(mood))) score += 1;\n }\n\n if (queryTokens.length > 0) {\n const haystacks: Array<[string, number]> = [\n [tpl.slug, 3],\n [tpl.name, 3],\n [tpl.tagline, 2],\n [tpl.best_for, 2],\n [tpl.occasion.join(' '), 1],\n [tpl.tone.join(' '), 1],\n [tpl.mood.join(' '), 1],\n [tpl.avoid_for, 1],\n ];\n for (const token of queryTokens) {\n for (const [text, weight] of haystacks) {\n if (text.toLowerCase().includes(token)) {\n score += weight;\n break; // one match per token is enough\n }\n }\n }\n }\n\n return { tpl, score };\n });\n\n const anyFilter = Boolean(opts.scheme || opts.mood || queryTokens.length > 0);\n if (!anyFilter) return TEMPLATES_CATALOG;\n\n const MIN_SCORE = 2;\n const matches = scored\n .filter((s) => s.score >= MIN_SCORE)\n .sort((a, b) => b.score - a.score)\n .map((s) => s.tpl);\n\n // Graceful fallback: never dead-end an agent with a result set that doesn't\n // include the whole catalog — an over-constrained query (nothing clears the\n // threshold) returns everything ranked-neutral instead.\n if (matches.length === 0) return TEMPLATES_CATALOG;\n // A token that matches nothing real (e.g. a typo or an irrelevant keyword)\n // should not silently widen the result to the entire catalog — drop such\n // tokens from the threshold consideration instead: if a query token matches\n // NO template at all, ignore it and rank on the remaining criteria.\n if (queryTokens.length > 0) {\n const tokensWithAnyMatch = queryTokens.filter((token) =>\n scored.some((s) => s.score >= 3) // at least one strong (name/slug) hit\n );\n const allTokensDead = tokensWithAnyMatch.length === 0 &&\n queryTokens.every((token) => !scored.some((s) => s.tpl.best_for.toLowerCase().includes(token)));\n if (allTokensDead) return TEMPLATES_CATALOG;\n }\n return matches;\n}\n\n/**\n * Retrieves a style preset by its ID. Falls back to the first preset\n * (electric-studio) when the ID is unknown — use `getStylePresetById`\n * when a strict match is required (e.g. validating user-provided IDs).\n */\nexport function getStylePreset(id: string): StylePresetItem {\n return STYLE_PRESETS.find((p) => p.id === id) || STYLE_PRESETS[0];\n}\n\n/**\n * Strict variant: returns the exact preset or `undefined` when unknown.\n * Never falls back silently — callers can surface a proper error.\n */\nexport function getStylePresetById(id: string): StylePresetItem | undefined {\n return STYLE_PRESETS.find((p) => p.id === id);\n}\n\n/**\n * Assembles a comprehensive, production-grade Vercel AI SDK system prompt\n * integrating the entire Frontend-Slides Skill, fixed 16:9 stage rules,\n * anti-slop guidelines, and slot contract.\n */\nexport function getFrontendSlidesSkillPrompt(options?: FrontendSlidesSkillOptions): string {\n const preset = options?.stylePresetId ? getStylePreset(options.stylePresetId) : STYLE_PRESETS[0];\n\n return `\nYou are @illustrator, an elite Presentation Designer and Presentation Architect equipped with the **FRONTEND-SLIDES SKILL**.\n\n${FRONTEND_SLIDES_CORE_RULES}\n\n---\n## ACTIVE STYLE PRESET: ${preset?.name || 'Electric Studio'}\n- **Vibe:** ${preset?.vibe}\n- **Color Scheme:** ${preset?.scheme} (Background: ${preset?.colors.bg}, Text: ${preset?.colors.text}, Accent: ${preset?.colors.accent})\n- **Typography:** Display: ${preset?.typography.display} | Body: ${preset?.typography.body} | Code: ${preset?.typography.mono || 'monospace'}\n- **Signature Design Elements:**\n${(preset?.signatureElements || []).map((e) => ` * ${e}`).join('\\n')}\n\n---\n${SLIDE_HTML_PROMPT_CONTRACT}\n`.trim();\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// @learnwell/presentation-kit/skills/tools\n// Vercel AI SDK (v5+/v7) Compatible Tools for Querying Presentation Skills & Templates\n//\n// Uses the modern `inputSchema` field (AI SDK v5+) — directly compatible with\n// `generateText` / `streamText` `tools` parameter. Zod schemas are also exported\n// separately for consumers that build their own tool() wrappers or JSON schemas.\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport { z } from 'zod';\nimport { TEMPLATES_CATALOG, STYLE_PRESETS } from './catalog.js';\nimport { searchTemplates, getStylePresetById } from './helper.js';\n\nexport const querySlideTemplatesSchema = z.object({\n mood: z.string().optional().describe('Mood or feeling keyword: \"professional\", \"technical\", \"editorial\", \"playful\", \"minimal\"'),\n scheme: z.enum(['light', 'dark', 'mixed']).optional().describe('Color scheme: \"light\", \"dark\" or \"mixed\"'),\n query: z.string().optional().describe('Search term e.g. \"python\", \"swift\", \"consulting\", \"hackathon\"'),\n});\n\nexport const getSlideStylePresetSchema = z.object({\n presetId: z.string().describe('Style preset identifier, e.g. \"electric-studio\", \"blue-professional\", \"creative-voltage\"'),\n});\n\n/**\n * Tool definitions that can be directly passed to Vercel AI SDK v5+/v7's\n * `tools` parameter (uses `inputSchema`, not the legacy v4 `parameters`).\n */\nexport const frontendSlidesTools = {\n querySlideTemplates: {\n description: 'Searches the 34 curated HTML slide templates catalog for design inspiration, tone matching, and layout specs.',\n inputSchema: querySlideTemplatesSchema,\n execute: async (args: z.infer<typeof querySlideTemplatesSchema>) => {\n const matches = searchTemplates(args);\n return {\n count: matches.length,\n templates: matches.map((m) => ({\n slug: m.slug,\n name: m.name,\n tagline: m.tagline,\n mood: m.mood,\n tone: m.tone,\n scheme: m.scheme,\n bestFor: m.best_for,\n slideCount: m.slide_count,\n })),\n };\n },\n },\n\n getSlideStylePreset: {\n description: 'Retrieves exact color palette, typography font stack, and signature visual elements for a style preset.',\n inputSchema: getSlideStylePresetSchema,\n execute: async (args: z.infer<typeof getSlideStylePresetSchema>) => {\n const preset = getStylePresetById(args.presetId);\n if (!preset) {\n return {\n error: `Style preset \"${args.presetId}\" not found.`,\n availablePresets: STYLE_PRESETS.map((p) => p.id),\n };\n }\n return preset;\n },\n },\n};\n"]}
@@ -3073,8 +3073,55 @@ function validateBespokeSlideHtml(raw, contract = {}) {
3073
3073
  break;
3074
3074
  }
3075
3075
  }
3076
+ const blockRe = /([.#]([\w-]+))\s*\{([^}]*)\}/g;
3077
+ for (const [, , cls, body] of clean.matchAll(blockRe)) {
3078
+ const fullHeight = /(?:min-)?height:\s*(?:9\d\d|1\d{3})px/.test(body);
3079
+ if (!fullHeight || !/justify-content:\s*space-between/.test(body)) continue;
3080
+ if (countElementChildren(clean, cls) > 4) continue;
3081
+ issues.push(
3082
+ "full-height root uses justify-content:space-between with few children \u2014 leftover height pools into one dead band; give the main block flex:1 or center the composition instead"
3083
+ );
3084
+ break;
3085
+ }
3076
3086
  return { valid: issues.length === 0, issues };
3077
3087
  }
3088
+ function countElementChildren(html, cls) {
3089
+ const rootOpen = new RegExp(`<([a-z]+)[^>]*class="[^"]*\\b${cls}\\b[^"]*"[^>]*>`, "i").exec(html);
3090
+ if (!rootOpen) return 99;
3091
+ const rootTag = rootOpen[1];
3092
+ const start = rootOpen.index + rootOpen[0].length;
3093
+ const tagRe = new RegExp(`<\\/?${rootTag}\\b[^>]*?>`, "gi");
3094
+ tagRe.lastIndex = start;
3095
+ let depth = 1;
3096
+ let end = html.length;
3097
+ for (const m of html.matchAll(tagRe)) {
3098
+ if (m.index < start) continue;
3099
+ depth += m[0][1] === "/" ? -1 : 1;
3100
+ if (depth === 0) {
3101
+ end = m.index;
3102
+ break;
3103
+ }
3104
+ }
3105
+ const inner = html.slice(start, end);
3106
+ const allTags = inner.match(/<\/?[a-z][^>]*?>/gi) || [];
3107
+ const VOID = /* @__PURE__ */ new Set(["br", "img", "hr", "source", "wbr", "col", "area", "embed", "track", "param", "input", "meta", "link", "base"]);
3108
+ let d = 0;
3109
+ let children = 0;
3110
+ for (const t of allTags) {
3111
+ const name = (t.match(/^<\/?([a-z]+)/i) || [])[1]?.toLowerCase() || "";
3112
+ if (t.startsWith("</")) {
3113
+ d = Math.max(0, d - 1);
3114
+ continue;
3115
+ }
3116
+ if (t.endsWith("/>") || VOID.has(name)) {
3117
+ if (d === 0) children++;
3118
+ continue;
3119
+ }
3120
+ if (d === 0) children++;
3121
+ d++;
3122
+ }
3123
+ return children;
3124
+ }
3078
3125
  function buildBespokeSlideMarkup(raw) {
3079
3126
  const { html } = sanitizeSlideHtml(raw);
3080
3127
  return `<div class="bespoke-slide">${html}</div>`;
@@ -3215,5 +3262,5 @@ exports.normalizeSlideSlots = normalizeSlideSlots;
3215
3262
  exports.resolveHtmlTheme = resolveHtmlTheme;
3216
3263
  exports.sanitizeSlideHtml = sanitizeSlideHtml;
3217
3264
  exports.validateBespokeSlideHtml = validateBespokeSlideHtml;
3218
- //# sourceMappingURL=chunk-5WEZOGQA.cjs.map
3219
- //# sourceMappingURL=chunk-5WEZOGQA.cjs.map
3265
+ //# sourceMappingURL=chunk-YO6TN5TA.cjs.map
3266
+ //# sourceMappingURL=chunk-YO6TN5TA.cjs.map