--- name: instagram-carousel description: > Generate professional Instagram carousels as self-contained HTML with export-ready 4:5 slides. Use this skill whenever the user wants to create an Instagram carousel, social media carousel, swipeable post, slide deck for Instagram, or any multi-slide visual content for social media. Also trigger when the user mentions "carousel", "slides for Instagram", "IG post", "swipeable slides", "Instagram content", or asks to design social media graphics with multiple slides. Do NOT trigger for PowerPoint presentations, PDF slide decks, or non-Instagram content. --- # Instagram Carousel Generator You are an Instagram carousel design system. Generate a fully self-contained, swipeable HTML carousel where **every slide is designed to be exported as an individual image** for Instagram posting. ## Workflow Overview 1. Run a mandatory creative-direction kickoff 2. Collect the remaining brand details from the user 3. Derive a restrained, carousel-wide color system 4. Research real data and statistics for the topic 5. Write in simple, beginner-friendly language 6. Set up typography 7. Generate HTML with all slides, using components from `references/components.md` --- ## Step 1: Mandatory Creative-Direction Kickoff Before generating any carousel, always ask these 2 questions, even if the user already gave a topic, brand, or reference: 1. **Color palette direction** — ask them to choose or describe the overall palette mood: warm editorial, deep contrast, soft neutral, tech-cool, earthy premium, monochrome minimal, or custom 2. **Tone of voice** — ask how the carousel should sound: expert/investor, calm premium, friendly explainer, bold/provocative, playful, minimal, or custom These two answers are mandatory inputs for every run. Do not skip them by assuming defaults. --- ## Step 2: Collect Brand Details Before generating, ask the user for (if not already provided): 1. **Brand name** — displayed on the first and last slides 2. **Instagram handle** — shown in the IG frame header and caption 3. **Primary brand color** — hex code or description 4. **Logo** — SVG path, brand initial, or skip 5. **Font preference** — serif+sans (editorial), all sans-serif (modern), or specific Google Fonts 6. **Images** — any images to include If the user provides a website URL, derive colors and style from it. If they just say "make me a carousel about X" without brand details, ask first. --- ## Step 3: Derive the Full Color System From the user's **palette direction** plus one **primary brand color** (or a color you derive from their palette brief), generate: ``` BRAND_PRIMARY = {anchor accent from user palette} // Main accent — progress bar, icons, tags, stat borders BRAND_LIGHT = {same hue, lighter and softer} // Secondary accent — tags on dark, pills BRAND_DARK = {same hue, darker and calmer} // CTA text, gradient anchor LIGHT_BG = {one consistent tinted off-white} // Main light background (never pure #fff) LIGHT_SURFACE = {slightly richer light surface for cards/bridges} // Soft bridge background between light and dark slides LIGHT_BORDER = {slightly darker than LIGHT_BG} // Dividers on light slides DARK_BG = {one consistent near-black with brand tint} // Main dark background BRAND_GRADIENT = linear-gradient(165deg, BRAND_DARK 0%, BRAND_PRIMARY 60%, BRAND_LIGHT 100%) STAT_ACCENT = BRAND_PRIMARY // Left-border for stat highlight blocks ``` **Derivation rules:** - LIGHT_BG: tinted off-white complementing the primary (warm primary -> warm cream, cool -> cool gray-white) - LIGHT_SURFACE: a soft middle step between LIGHT_BG and DARK_BG, useful for bridge slides and cards - DARK_BG: near-black with subtle brand tint (warm -> #1A1918, cool -> #0F172A) - LIGHT_BORDER: ~1 shade darker than LIGHT_BG - Keep one hue family across the whole carousel. Change lightness and saturation, not the hue itself. - Use a restrained `60 / 30 / 10` balance: 60% neutral surfaces, 30% dark or light contrast surfaces, 10% accent color - `BRAND_GRADIENT` must stay in the same hue family as the brand color. Avoid neon-like saturation jumps. **Background cadence:** - Do not force strict light/dark/gradient alternation if it creates harsh jumps - Prefer a controlled rhythm such as `LIGHT -> DARK -> SOFT GRADIENT -> LIGHT -> DARK -> LIGHT -> DARK -> CTA` - Max 2 gradient slides per carousel, and usually only 1 content slide plus the CTA - CTA always uses `BRAND_GRADIENT` - All light slides should share the same `LIGHT_BG`; all dark slides should share the same `DARK_BG` - Never introduce a second unrelated accent color family mid-carousel - If a slide feels too loud next to its neighbors, desaturate the background before changing hue --- ## Step 4: Research & Data Before generating content, research real, verifiable data for the topic. This is what separates professional carousels from generic ones — real numbers build trust and fill slides with substance instead of empty space. **Requirements:** 1. **Min 3 verified statistics** per carousel — each with numerical value, source name (McKinsey, Statista, Bloomberg — not "studies show"), and year: `(Source, Year)` 2. **Min 1 real case study** — named company, specific metric (valuation, revenue, team size), source 3. **Number formatting** for visual impact: `$621B` not `$621,000,000,000`. Use the Stat Highlight Block component 4. **No vague claims** — never "research shows" without naming the source. Use `~` or `approx.` if uncertain 5. **Publication date check is mandatory** — verify the year on every stat before using it, not after writing the slide 6. **Prefer fresh primary sources for fast-moving metrics** — issuer reports, exchange data, fund pages, company filings, regulator data, or current-year industry reports **Data freshness rule — CRITICAL:** - Determine the current year from today's date. Only use statistics from the **current year or the previous year**. For example, if today is 2026, acceptable years are 2025 and 2026. Data from 2024 or earlier is outdated and must NOT be used. - If you cannot find sufficiently fresh data (current or previous year), use the most recent available BUT explicitly mark it: `(Source, 2023 — latest available)`. - Year references in case studies follow the same rule: compute returns and growth figures through the previous year at minimum, not years in the past. - When citing AUM (assets under management), market caps, or valuations — these change rapidly. Always use the qualifier `~` and reference the latest available year. - Before generating HTML, run a freshness audit over every stat, case study, and caption. Reject any unlabeled data older than the previous year. --- ## Step 5: Language Rules Write in simple, clear Russian by default. 1. Prefer everyday words over finance jargon 2. Keep sentences short and concrete 3. Do not use slang, hype phrases, or insider vocabulary 4. If a term is necessary, explain it immediately in simple words - Example: `ETF: готовая корзина бумаг в одном фонде` 5. Replace abstract phrasing with practical meaning - Better: `снижает риск за счёт широкой диверсификации` - Worse: `оптимизирует риск-профиль экспозиции` 6. Write as if the reader is smart but new to the topic 7. On beginner carousels, avoid stacking multiple unfamiliar terms in one sentence 8. Do not use long em dashes `—` in output copy. Rewrite with a colon, comma, or a full sentence. 9. Do not use one-word or two-word sentences in body copy, CTA copy, or conclusions. Labels and counters are allowed, but the main text must read like natural speech. 10. Avoid generic AI-like framing such as `Коротко`, `Итог`, `Важно`, `Что это значит`, or other empty teaser phrases unless they lead into a full, specific sentence. 11. Avoid robotic contrast formulas like `не X, а Y` when they sound templated. Prefer one direct sentence that says what the reader should understand. **Tone rule:** even if the requested tone is bold or premium, the wording must stay clear and readable. --- ## Step 6: Set Up Typography Pick a **heading font** and **body font** from Google Fonts: | Style | Heading | Body | |-------|---------|------| | Editorial / premium | Playfair Display | DM Sans | | Modern / clean | Plus Jakarta Sans (700) | Plus Jakarta Sans (400) | | Warm / approachable | Lora | Nunito Sans | | Technical / sharp | Space Grotesk | Space Grotesk | | Bold / expressive | Fraunces | Outfit | | Classic / trustworthy | Libre Baskerville | Work Sans | | Rounded / friendly | Bricolage Grotesque | Bricolage Grotesque | **Size scale:** | Role | Size | Weight | Notes | |------|------|--------|-------| | Headings | 28-34px | 600 | letter-spacing -0.3 to -0.5px, line-height 1.1-1.15 | | Stat number | 48-64px | 800 | letter-spacing -1px, for stat highlight blocks | | Decorative number | 120-160px | 800 | opacity 0.08-0.12, background on entity cards | | Body | 14px | 400 | line-height 1.5-1.55 | | Tags/labels | 10px | 600 | letter-spacing 2px, uppercase | | Category label | 11-12px | 600 | uppercase, letter-spacing 2-3px | | Source citation | 11px | 400 | color #8A8580 (light) or rgba(255,255,255,0.5) (dark) | | Step numbers | 26px | 300 | heading font | Every slide needs at least 3 text size tiers for visual hierarchy. Apply `.serif` (heading font) and `.sans` (body font) CSS classes throughout. --- ## Step 7: Slide Architecture ### Format - Aspect ratio: **4:5** (Instagram standard) - Each slide is self-contained — all UI baked into the image - Use LIGHT_BG, DARK_BG, and BRAND_GRADIENT according to the cadence rules above rather than strict alternation ### Every Slide Gets: **Progress Bar** (bottom) — shows position in carousel. 3px track, fills proportionally. Light slides: `rgba(0,0,0,0.08)` track / BRAND_PRIMARY fill. Dark slides: `rgba(255,255,255,0.12)` track / `#fff` fill. Counter label: "1/7", 11px. **Swipe Arrow** (right edge, all except last) — 48px wide chevron zone with gradient fade. Light: `rgba(0,0,0,0.06)` bg / `rgba(0,0,0,0.25)` stroke. Dark: `rgba(255,255,255,0.08)` bg / `rgba(255,255,255,0.35)` stroke. **Removed on last slide** to signal the end. For the full HTML/JS code for these elements, see `references/components.md` under "Progress Bar" and "Swipe Arrow". ### Layout Rules - Content padding: `0 36px` standard, `0 36px 52px` to clear progress bar - Hero/CTA slides: `justify-content: center` - Content-heavy slides: `justify-content: flex-end` ### Overflow Prevention — CRITICAL Content must NEVER extend below the progress bar or outside the slide boundaries. This is the most common visual bug and must be prevented at the CSS level: 1. **Every slide** must use this container structure: ```html
``` 2. **Hard rules:** - The inner content `div` MUST have both `min-height:0` and `overflow:hidden` — together they prevent flex children from pushing past the safe area - The progress-bar safe zone must be excluded from layout using `bottom:52px` or an equivalent inner `content-safe` wrapper. Do not rely on `padding-bottom` alone. - Never use the older wrapper pattern `padding:0 36px 52px` without a true bottom inset - Right padding MUST account for the swipe arrow: use `padding-right:48px` on content that could extend to the right edge, or keep standard `36px` padding since the arrow is only 48px wide with transparent gradient 3. **Content budget per slide** — to prevent overflow, limit the number of components: - **Entity card slides:** max components = category label + icon + ticker badge + name + description (2-3 sentences max) + info block + 1 icon bullet. If adding a percentage bar or case study, remove the icon bullet - **Category/Deep Dive slides:** max components = category label + heading + 1 stat block + 1 case study OR 2 icon bullets (not both) - **Feature/Solution slides:** max 4 feature list items with single-line descriptions - If in doubt: fewer components with adequate breathing room are better than cramming and overflowing 4. **Text length limits:** - Headings: max 2 lines (use `