{
 "version": 1,
 "canvas": {
  "shorts": [
   1080,
   1920
  ],
  "long_form": [
   1920,
   1080
  ]
 },
 "palette": {
  "stage": "#F1F1EF",
  "ink": "#111113",
  "muted": "#A6A6A1",
  "card": "#FFFFFF",
  "dark_stage": "#0E0F12",
  "accents": {
   "blue": "#2F5BFF",
   "mint": "#12A67A",
   "amber": "#E8950C",
   "violet": "#7B5CFF",
   "rose": "#EE3F6E",
   "teal": "#0A9BB0",
   "ink": "#111113"
  }
 },
 "fonts": [
  "Inter Tight",
  "JetBrains Mono"
 ],
 "scenes": [
  {
   "id": 1,
   "name": "Bold question hook",
   "category": "Hook",
   "duration_s": 4,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Open a short with a pain question the viewer answers \"yes\" to.",
   "preview_url": "play.html?id=1",
   "beats": [
    "0.1s Kinetic text: \"Still building / reports / by hand?\"",
    "0.9s Decor: spark",
    "1.1s Decor: spark"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "Still building|{xl}**reports**|{m}by ~hand?~",
     "at_s": 0.1,
     "opts": {
      "size": "m"
     }
    },
    {
     "kind": "decor",
     "type": "spark",
     "at_s": 0.9,
     "props": {
      "size": 150,
      "spin": 1
     },
     "opts": {
      "pos": [
       18,
       22
      ]
     }
    },
    {
     "kind": "decor",
     "type": "spark",
     "at_s": 1.1,
     "props": {
      "size": 90,
      "c": "amber"
     },
     "opts": {
      "pos": [
       84,
       74
      ]
     }
    }
   ]
  },
  {
   "id": 2,
   "name": "Shock stat hook",
   "category": "Hook",
   "duration_s": 4.5,
   "accent": "rose",
   "accent_hex": "#EE3F6E",
   "dark": false,
   "purpose": "Lead with one surprising number.",
   "preview_url": "play.html?id=2",
   "beats": [
    "0.1s Kinetic text: \"Teams waste\"",
    "0.5s stat: \"every week on busywork\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "Teams waste",
     "at_s": 0.1,
     "opts": {
      "size": "m"
     }
    },
    {
     "kind": "visual",
     "type": "stat",
     "at_s": 0.5,
     "props": {
      "value": 9.3,
      "dec": 1,
      "suf": " hrs",
      "label": "every week on busywork",
      "ac": 1
     }
    }
   ]
  },
  {
   "id": 3,
   "name": "Stop doing this",
   "category": "Hook",
   "duration_s": 4,
   "accent": "ink",
   "accent_hex": "#111113",
   "dark": false,
   "purpose": "Pattern interrupt: tell the viewer to stop a habit.",
   "preview_url": "play.html?id=3",
   "beats": [
    "0.1s Kinetic text: \"Stop / paying for / 5 tools / that do one job\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{l}**Stop**|{m}paying for|{xl}==5 tools==|{m}that do ~one job~",
     "at_s": 0.1
    }
   ]
  },
  {
   "id": 4,
   "name": "Hidden tool reveal",
   "category": "Hook",
   "duration_s": 5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Tease a tool \"nobody talks about\" with a floating product card.",
   "preview_url": "play.html?id=4",
   "beats": [
    "0.1s Kinetic text: \"The tool / nobody is talking about\"",
    "1.1s hero in browser (tilted): \"Ship docs 10x faster\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "The tool|{l}**nobody** is talking about",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "hero",
     "at_s": 1.1,
     "props": {
      "url": "nimbus.app",
      "kicker": "Just launched",
      "title": "Ship docs 10x faster",
      "sub": "AI that writes, links and updates your docs."
     },
     "opts": {
      "tilt": "r",
      "float": 1
     }
    }
   ]
  },
  {
   "id": 5,
   "name": "Price drop hook",
   "category": "Hook",
   "duration_s": 4.5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Show an expensive price crossed out and the free price.",
   "preview_url": "play.html?id=5",
   "beats": [
    "0.1s Kinetic text: \"It used to cost\"",
    "0.4s strike: \"and it is open source\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "It used to cost",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "strike",
     "at_s": 0.4,
     "props": {
      "old": "$499/mo",
      "now": "Free",
      "label": "and it is open source"
     }
    }
   ]
  },
  {
   "id": 6,
   "name": "Replaced 5 apps",
   "category": "Hook",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "One product replaces a stack of apps.",
   "preview_url": "play.html?id=6",
   "beats": [
    "0.1s Kinetic text: \"This one app / replaced 5 of mine\"",
    "1.0s logos"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "This one app|{l}**replaced 5** of mine",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "logos",
     "at_s": 1,
     "props": {
      "items": [
       "notebook-pen",
       "kanban-square",
       "message-square",
       "calendar",
       "file-spreadsheet",
       "mail",
       "bar-chart-3",
       "folder"
      ],
      "cols": 4
     }
    }
   ]
  },
  {
   "id": 7,
   "name": "Notification flood",
   "category": "Hook",
   "duration_s": 4.5,
   "accent": "rose",
   "accent_hex": "#EE3F6E",
   "dark": false,
   "purpose": "App icon badge counts up fast: overload.",
   "preview_url": "play.html?id=7",
   "beats": [
    "0.1s appicon",
    "0.9s Kinetic text: \"If this is your / Monday\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "appicon",
     "at_s": 0.1,
     "props": {
      "icon": "message-square",
      "n": 248
     }
    },
    {
     "kind": "text",
     "text": "{m}If this is your|{xl}**Monday**",
     "at_s": 0.9
    }
   ]
  },
  {
   "id": 8,
   "name": "Yes-man bubbles",
   "category": "Hook",
   "duration_s": 5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Dialogue in black speech bubbles to set up a relatable problem.",
   "preview_url": "play.html?id=8",
   "beats": [
    "0.1s Kinetic text: \"Your dashboard is a / yes-man\"",
    "1.0s bubbles"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "Your dashboard is a|{l}==yes-man==",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "bubbles",
     "at_s": 1,
     "props": {
      "items": [
       "Are we growing?",
       "Yes. Everything is great.",
       "Wait... are we?"
      ]
     }
    }
   ]
  },
  {
   "id": 9,
   "name": "Countdown hook",
   "category": "Hook",
   "duration_s": 4.5,
   "accent": "teal",
   "accent_hex": "#0A9BB0",
   "dark": false,
   "purpose": "Time-bound promise: set up in 60 seconds.",
   "preview_url": "play.html?id=9",
   "beats": [
    "0.1s ring: \"to set up\"",
    "0.8s Kinetic text: \"From signup to / first insight\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "ring",
     "at_s": 0.1,
     "props": {
      "pct": 60,
      "suf": "s",
      "label": "to set up"
     }
    },
    {
     "kind": "text",
     "text": "{m}From signup to|{l}**first insight**",
     "at_s": 0.8
    }
   ]
  },
  {
   "id": 10,
   "name": "Save this video",
   "category": "Hook",
   "duration_s": 4,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Bookmark prompt to push saves.",
   "preview_url": "play.html?id=10",
   "beats": [
    "0.1s icon",
    "0.5s Kinetic text: \"Save this / before you forget / you will need it\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "icon",
     "at_s": 0.1,
     "props": {
      "name": "bookmark",
      "plain": 1
     }
    },
    {
     "kind": "text",
     "text": "{m}Save this|{l}**before you forget**|{s}~you will need it~",
     "at_s": 0.5
    }
   ]
  },
  {
   "id": 11,
   "name": "Everyone gets this wrong",
   "category": "Hook",
   "duration_s": 4.5,
   "accent": "ink",
   "accent_hex": "#111113",
   "dark": false,
   "purpose": "Contrarian opener with big highlighted words.",
   "preview_url": "play.html?id=11",
   "beats": [
    "0.1s Kinetic text: \"Most founders / track / the wrong metric\"",
    "1.2s Decor: spark"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Most founders|{xl}**track**|{l}the ++wrong++ metric",
     "at_s": 0.1
    },
    {
     "kind": "decor",
     "type": "spark",
     "at_s": 1.2,
     "props": {
      "size": 120,
      "c": "rose",
      "spin": 1
     },
     "opts": {
      "pos": [
       80,
       20
      ]
     }
    }
   ]
  },
  {
   "id": 12,
   "name": "Split question",
   "category": "Hook",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Two options, viewer picks. Good for polls and A/B hooks.",
   "preview_url": "play.html?id=12",
   "beats": [
    "0.1s Kinetic text: \"Which one are you?\"",
    "0.6s compare"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "Which one are you?",
     "at_s": 0.1,
     "opts": {
      "size": "m"
     }
    },
    {
     "kind": "visual",
     "type": "compare",
     "at_s": 0.6,
     "props": {
      "left": [
       "Spreadsheet team",
       [
        "Copy, paste, repeat",
        "Numbers from last week",
        "Who changed this?"
       ]
      ],
      "right": [
       "Automated team",
       [
        "Live numbers",
        "Alerts on change",
        "One source of truth"
       ]
      ]
     }
    }
   ]
  },
  {
   "id": 13,
   "name": "Tab chaos",
   "category": "Problem",
   "duration_s": 4.5,
   "accent": "rose",
   "accent_hex": "#EE3F6E",
   "dark": false,
   "purpose": "Too many browser tabs: context switching pain.",
   "preview_url": "play.html?id=13",
   "beats": [
    "0.1s Kinetic text: \"Your workday: / 18 tabs open\"",
    "0.8s tabs in browser"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Your workday:|{l}**18 tabs** open",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "tabs",
     "at_s": 0.8,
     "props": {
      "n": 18
     },
     "opts": {
      "frame": "browser",
      "w": 900
     }
    }
   ]
  },
  {
   "id": 14,
   "name": "Spreadsheet errors",
   "category": "Problem",
   "duration_s": 5,
   "accent": "rose",
   "accent_hex": "#EE3F6E",
   "dark": false,
   "purpose": "Broken spreadsheet with #REF! errors popping.",
   "preview_url": "play.html?id=14",
   "beats": [
    "0.1s sheet in card (tilted)",
    "1.4s Kinetic text: \"One broken formula / and the whole report lies\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "sheet",
     "at_s": 0.1,
     "opts": {
      "tilt": "r"
     }
    },
    {
     "kind": "text",
     "text": "{m}One broken formula|{l}and the **whole report** lies",
     "at_s": 1.4
    }
   ]
  },
  {
   "id": 15,
   "name": "Time drain clock",
   "category": "Problem",
   "duration_s": 4.5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Fast spinning clock for wasted time.",
   "preview_url": "play.html?id=15",
   "beats": [
    "0.1s clock",
    "0.6s Kinetic text: \"Hours gone on / manual updates\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "clock",
     "at_s": 0.1
    },
    {
     "kind": "text",
     "text": "{m}Hours gone on|{l}**manual updates**",
     "at_s": 0.6
    }
   ]
  },
  {
   "id": 16,
   "name": "Cost stack",
   "category": "Problem",
   "duration_s": 5,
   "accent": "rose",
   "accent_hex": "#EE3F6E",
   "dark": false,
   "purpose": "Stacked subscription costs add up.",
   "preview_url": "play.html?id=16",
   "beats": [
    "0.1s Kinetic text: \"Your tool bill\"",
    "0.5s table in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Your tool bill",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "table",
     "at_s": 0.5,
     "props": {
      "head": [
       "Tool",
       "Seats",
       "Cost"
      ],
      "rows": [
       [
        "Docs app",
        "12",
        "$144"
       ],
       [
        "Chat app",
        "12",
        "$96"
       ],
       [
        "Tasks app",
        "12",
        "$120"
       ],
       [
        "BI tool",
        "4",
        "$280"
       ],
       [
        "Total",
        "",
        [
         "$640/mo",
         "bad"
        ]
       ]
      ]
     }
    }
   ]
  },
  {
   "id": 17,
   "name": "Churn chart drop",
   "category": "Problem",
   "duration_s": 5,
   "accent": "rose",
   "accent_hex": "#EE3F6E",
   "dark": false,
   "purpose": "Line chart trending down, red delta.",
   "preview_url": "play.html?id=17",
   "beats": [
    "0.1s Kinetic text: \"Then this happens\"",
    "0.5s chart in card: \"Active customers\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Then this happens",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "chart",
     "at_s": 0.5,
     "props": {
      "label": "Active customers",
      "value": 812,
      "pre": "",
      "delta": "-24%",
      "bad": 1,
      "data": [
       90,
       88,
       91,
       84,
       80,
       76,
       71,
       66,
       60,
       52
      ]
     }
    }
   ]
  },
  {
   "id": 18,
   "name": "Message overload",
   "category": "Problem",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Toast notifications pile in.",
   "preview_url": "play.html?id=18",
   "beats": [
    "0.1s toasts",
    "1.8s Kinetic text: \"Sound familiar?\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "toasts",
     "at_s": 0.1,
     "props": {
      "items": [
       [
        "message-circle",
        "#general",
        "43 new messages",
        "#7B5CFF"
       ],
       [
        "mail",
        "Inbox",
        "112 unread",
        "#EE3F6E"
       ],
       [
        "bell",
        "Reminder",
        "Weekly report is late",
        "#E8950C"
       ],
       [
        "alert-triangle",
        "Alert",
        "Sync failed again",
        "#E5484D"
       ]
      ],
      "step": 0.35
     }
    },
    {
     "kind": "text",
     "text": "{m}Sound familiar?",
     "at_s": 1.8
    }
   ]
  },
  {
   "id": 19,
   "name": "Missed deadline",
   "category": "Problem",
   "duration_s": 4.5,
   "accent": "rose",
   "accent_hex": "#EE3F6E",
   "dark": false,
   "purpose": "Calendar with the due date flagged.",
   "preview_url": "play.html?id=19",
   "beats": [
    "0.1s Kinetic text: \"And the launch / slips again\"",
    "0.7s calendar in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}And the launch|{l}**slips again**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "calendar",
     "at_s": 0.7,
     "props": {
      "badge": "Overdue",
      "on": 11,
      "month": "Launch week"
     }
    }
   ]
  },
  {
   "id": 20,
   "name": "Copy paste loop",
   "category": "Problem",
   "duration_s": 5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Manual loop between apps shown as a chain.",
   "preview_url": "play.html?id=20",
   "beats": [
    "0.1s Kinetic text: \"Every Friday:\"",
    "0.5s chain",
    "2.2s Kinetic text: \"for 3 hours\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Every Friday:",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "chain",
     "at_s": 0.5,
     "props": {
      "items": [
       [
        "sheet",
        "Export"
       ],
       [
        "clipboard",
        "Copy"
       ],
       [
        "presentation",
        "Paste"
       ],
       [
        "repeat",
        "Repeat",
        "rose"
       ]
      ]
     }
    },
    {
     "kind": "text",
     "text": "{s}~for 3 hours~",
     "at_s": 2.2
    }
   ]
  },
  {
   "id": 21,
   "name": "Sad mascot",
   "category": "Problem",
   "duration_s": 4,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Mascot with sad face to humanize the pain.",
   "preview_url": "play.html?id=21",
   "beats": [
    "0.1s pip: \"Meet Sam\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "pip",
     "at_s": 0.1,
     "props": {
      "mood": "sad",
      "label": "Meet Sam",
      "sub": "Sam updates 4 dashboards by hand"
     }
    }
   ]
  },
  {
   "id": 22,
   "name": "Limit reached",
   "category": "Problem",
   "duration_s": 4.5,
   "accent": "rose",
   "accent_hex": "#EE3F6E",
   "dark": false,
   "purpose": "Usage meter maxed out: plan limits.",
   "preview_url": "play.html?id=22",
   "beats": [
    "0.1s Kinetic text: \"Right when you grow / you hit the wall\"",
    "0.8s meter in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Right when you grow|{l}you hit **the wall**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "meter",
     "at_s": 0.8
    }
   ]
  },
  {
   "id": 23,
   "name": "Data silos",
   "category": "Problem",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Apps floating apart, not connected.",
   "preview_url": "play.html?id=23",
   "beats": [
    "0.1s Kinetic text: \"Your data lives in / 12 places\"",
    "0.8s logos"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Your data lives in|{l}**12 places**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "logos",
     "at_s": 0.8,
     "props": {
      "items": [
       "database",
       "sheet",
       "mail",
       "slack",
       "github",
       "credit-card",
       "users",
       "cloud",
       "figma",
       "trello",
       "calendar",
       "phone"
      ],
      "cols": 4
     },
     "opts": {
      "anim": "fade"
     }
    }
   ]
  },
  {
   "id": 24,
   "name": "Nobody reads it",
   "category": "Problem",
   "duration_s": 4.5,
   "accent": "ink",
   "accent_hex": "#111113",
   "dark": false,
   "purpose": "Report sent, zero opens: quiet frustration.",
   "preview_url": "play.html?id=24",
   "beats": [
    "0.1s inbox in card: \"Sent\"",
    "1.2s Kinetic text: \"and nobody opens it\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "inbox",
     "at_s": 0.1,
     "props": {
      "title": "Sent",
      "badge": "0 opens",
      "items": [
       [
        "Weekly Report",
        "Q3 KPIs - please review",
        "Unread",
        ""
       ],
       [
        "Weekly Report",
        "Q3 KPIs v2",
        "Unread",
        ""
       ],
       [
        "Weekly Report",
        "Q3 KPIs FINAL",
        "Unread",
        ""
       ]
      ]
     }
    },
    {
     "kind": "text",
     "text": "{m}and **nobody** opens it",
     "at_s": 1.2
    }
   ]
  },
  {
   "id": 25,
   "name": "Name pill reveal",
   "category": "Reveal",
   "duration_s": 4,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Introduce the product name as a chip.",
   "preview_url": "play.html?id=25",
   "beats": [
    "0.1s Kinetic text: \"It is called\"",
    "0.6s pill: \"Pulse\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}It is called",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "pill",
     "at_s": 0.6,
     "props": {
      "icon": "activity",
      "label": "Pulse",
      "c": "blue"
     },
     "opts": {
      "sc": 1.5
     }
    }
   ]
  },
  {
   "id": 26,
   "name": "Browser hero reveal",
   "category": "Reveal",
   "duration_s": 5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Landing page in a browser frame rises in, tilted.",
   "preview_url": "play.html?id=26",
   "beats": [
    "0.1s Kinetic text: \"Meet / Nimbus\"",
    "0.8s hero in browser (tilted): \"Docs that write themselves\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Meet|{xl}**Nimbus**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "hero",
     "at_s": 0.8,
     "props": {
      "url": "nimbus.app",
      "kicker": "AI docs",
      "title": "Docs that write themselves",
      "sub": "Connect your repo. Get living docs."
     },
     "opts": {
      "tilt": "l",
      "float": 1
     }
    }
   ]
  },
  {
   "id": 27,
   "name": "Phone app reveal",
   "category": "Reveal",
   "duration_s": 5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Mobile app mock slides in with floating motion.",
   "preview_url": "play.html?id=27",
   "beats": [
    "0.1s mobile in phone",
    "1.0s Kinetic text: \"Your whole business / in your pocket\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "mobile",
     "at_s": 0.1,
     "opts": {
      "float": 1,
      "w": 480
     }
    },
    {
     "kind": "text",
     "text": "{m}Your whole business|{l}in your **pocket**",
     "at_s": 1
    }
   ]
  },
  {
   "id": 28,
   "name": "Dashboard reveal",
   "category": "Reveal",
   "duration_s": 5.5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Main dashboard with counting KPIs and drawn chart.",
   "preview_url": "play.html?id=28",
   "beats": [
    "0.1s Kinetic text: \"One screen. / Every number.\"",
    "0.7s dash in card (tilted)"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}One screen.|{l}**Every number.**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "dash",
     "at_s": 0.7,
     "opts": {
      "tilt": "x"
     }
    }
   ]
  },
  {
   "id": 29,
   "name": "Orbit integrations",
   "category": "Reveal",
   "duration_s": 6,
   "accent": "teal",
   "accent_hex": "#0A9BB0",
   "dark": false,
   "purpose": "Product at center, integrations orbiting.",
   "preview_url": "play.html?id=29",
   "beats": [
    "0.1s Kinetic text: \"Plugs into / everything you use\"",
    "0.6s orbit"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Plugs into|{l}**everything** you use",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "orbit",
     "at_s": 0.6,
     "props": {
      "center": "hexagon"
     },
     "opts": {
      "sc": 0.95
     }
    }
   ]
  },
  {
   "id": 30,
   "name": "One-line definition",
   "category": "Reveal",
   "duration_s": 4.5,
   "accent": "ink",
   "accent_hex": "#111113",
   "dark": false,
   "purpose": "Plain definition in kinetic type.",
   "preview_url": "play.html?id=30",
   "beats": [
    "0.1s Kinetic text: \"Think of it as a / co-pilot / for your whole revenue team\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Think of it as a|{xl}**co-pilot**|{m}for your ~whole~ ^revenue team^",
     "at_s": 0.1
    }
   ]
  },
  {
   "id": 31,
   "name": "Mascot intro",
   "category": "Reveal",
   "duration_s": 4.5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Mascot introduces itself as the AI assistant.",
   "preview_url": "play.html?id=31",
   "beats": [
    "0.1s pip: \"Hi, I am Pip\"",
    "0.8s Decor: spark",
    "1.0s Decor: spark"
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "pip",
     "at_s": 0.1,
     "props": {
      "label": "Hi, I am Pip",
      "sub": "I do the boring parts"
     }
    },
    {
     "kind": "decor",
     "type": "spark",
     "at_s": 0.8,
     "props": {
      "size": 110,
      "c": "amber"
     },
     "opts": {
      "pos": [
       22,
       30
      ]
     }
    },
    {
     "kind": "decor",
     "type": "spark",
     "at_s": 1,
     "props": {
      "size": 70
     },
     "opts": {
      "pos": [
       80,
       62
      ]
     }
    }
   ]
  },
  {
   "id": 32,
   "name": "Tagline zoom",
   "category": "Reveal",
   "duration_s": 4,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Big tagline with zooming highlight.",
   "preview_url": "play.html?id=32",
   "beats": [
    "0.1s Kinetic text: \"Less busywork. / More building.\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{l}Less busywork.|{xl}=+More building.=+",
     "at_s": 0.1
    }
   ]
  },
  {
   "id": 33,
   "name": "Before/after split",
   "category": "Reveal",
   "duration_s": 5.5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Two columns: without vs with the product.",
   "preview_url": "play.html?id=33",
   "beats": [
    "0.1s Kinetic text: \"Here is the difference\"",
    "0.5s compare"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Here is the difference",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "compare",
     "at_s": 0.5
    }
   ]
  },
  {
   "id": 34,
   "name": "Dark mode reveal",
   "category": "Reveal",
   "duration_s": 5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": true,
   "purpose": "Dark stage product reveal for premium feel.",
   "preview_url": "play.html?id=34",
   "beats": [
    "0.1s Kinetic text: \"Built for teams who / ship fast\"",
    "0.7s dash in card: \"Deploys\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Built for teams who|{l}**ship fast**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "dash",
     "at_s": 0.7,
     "props": {
      "title": "Deploys",
      "icon": "rocket",
      "kpis": [
       [
        "Deploys",
        142,
        "+31%"
       ],
       [
        "Lead time",
        2.4,
        "-38%",
        "",
        "h",
        1
       ],
       [
        "Failures",
        0.8,
        "-0.5%",
        "",
        "%",
        1
       ]
      ],
      "bars": 1
     },
     "opts": {
      "frame": "card"
     }
    }
   ]
  },
  {
   "id": 35,
   "name": "Stacked screens",
   "category": "Reveal",
   "duration_s": 6,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Three product screens fan in, layered.",
   "preview_url": "play.html?id=35",
   "beats": [
    "0.1s inbox in card (tilted) (placed absolutely)",
    "0.5s chart in card (tilted) (placed absolutely)",
    "0.9s pricing in card (placed absolutely)"
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "inbox",
     "at_s": 0.1,
     "opts": {
      "pos": [
       36,
       34
      ],
      "lpos": [
       30,
       42
      ],
      "tilt": "s",
      "w": 700
     }
    },
    {
     "kind": "visual",
     "type": "chart",
     "at_s": 0.5,
     "opts": {
      "pos": [
       62,
       52
      ],
      "lpos": [
       55,
       55
      ],
      "tilt": "s2",
      "w": 700
     }
    },
    {
     "kind": "visual",
     "type": "pricing",
     "at_s": 0.9,
     "opts": {
      "pos": [
       44,
       72
      ],
      "lpos": [
       78,
       50
      ],
      "w": 560
     }
    }
   ]
  },
  {
   "id": 36,
   "name": "Chain of value",
   "category": "Reveal",
   "duration_s": 5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Input to AI to output chain.",
   "preview_url": "play.html?id=36",
   "beats": [
    "0.1s Kinetic text: \"Drop in your data. / Get answers\"",
    "0.9s chain"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Drop in your data.|{l}Get **answers**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "chain",
     "at_s": 0.9,
     "props": {
      "items": [
       [
        "database",
        "Your data"
       ],
       [
        "sparkles",
        "Pulse AI",
        "blue"
       ],
       [
        "message-square-text",
        "Answers"
       ]
      ]
     }
    }
   ]
  },
  {
   "id": 37,
   "name": "Feature icon list",
   "category": "Feature",
   "duration_s": 5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Three benefits appear one by one.",
   "preview_url": "play.html?id=37",
   "beats": [
    "0.1s Kinetic text: \"What you get\"",
    "0.5s list"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}What you get",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "list",
     "at_s": 0.5,
     "props": {
      "items": [
       [
        "zap",
        "Live dashboards"
       ],
       [
        "bell-ring",
        "Smart alerts"
       ],
       [
        "file-bar-chart",
        "Auto reports"
       ]
      ],
      "c": "blue"
     }
    }
   ]
  },
  {
   "id": 38,
   "name": "No-no-no list",
   "category": "Feature",
   "duration_s": 5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Negation list: no code, no setup, no training.",
   "preview_url": "play.html?id=38",
   "beats": [
    "0.1s list",
    "1.6s Kinetic text: \"Just results\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "list",
     "at_s": 0.1,
     "props": {
      "items": [
       [
        "x",
        "No code"
       ],
       [
        "x",
        "No setup calls"
       ],
       [
        "x",
        "No learning curve"
       ]
      ],
      "c": "rose"
     }
    },
    {
     "kind": "text",
     "text": "{m}Just **results**",
     "at_s": 1.6
    }
   ]
  },
  {
   "id": 39,
   "name": "Kanban drag",
   "category": "Feature",
   "duration_s": 5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Card dragged across board columns.",
   "preview_url": "play.html?id=39",
   "beats": [
    "0.1s Kinetic text: \"Plan work where / it moves itself\"",
    "0.6s kanban in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Plan work where|{l}it **moves itself**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "kanban",
     "at_s": 0.6
    }
   ]
  },
  {
   "id": 40,
   "name": "Automation flow",
   "category": "Feature",
   "duration_s": 5.5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Trigger -> action nodes with animated connectors.",
   "preview_url": "play.html?id=40",
   "beats": [
    "0.1s Kinetic text: \"Set it once. / It runs forever\"",
    "0.7s flow"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Set it once.|{l}It runs **forever**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "flow",
     "at_s": 0.7
    }
   ]
  },
  {
   "id": 41,
   "name": "Smart inbox",
   "category": "Feature",
   "duration_s": 5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Inbox rows sorted and tagged by AI.",
   "preview_url": "play.html?id=41",
   "beats": [
    "0.1s inbox in card",
    "1.2s Kinetic text: \"Your inbox, / already sorted\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "inbox",
     "at_s": 0.1,
     "props": {
      "sel": 0
     }
    },
    {
     "kind": "text",
     "text": "{m}Your inbox,|{l}**already sorted**",
     "at_s": 1.2
    }
   ]
  },
  {
   "id": 42,
   "name": "Auto scheduling",
   "category": "Feature",
   "duration_s": 5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Calendar fills with events automatically.",
   "preview_url": "play.html?id=42",
   "beats": [
    "0.1s Kinetic text: \"Meetings book / themselves\"",
    "0.6s calendar in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Meetings book|{l}**themselves**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "calendar",
     "at_s": 0.6
    }
   ]
  },
  {
   "id": 43,
   "name": "Instant search",
   "category": "Feature",
   "duration_s": 5,
   "accent": "teal",
   "accent_hex": "#0A9BB0",
   "dark": false,
   "purpose": "Natural language search typed and results appear.",
   "preview_url": "play.html?id=43",
   "beats": [
    "0.1s search in card",
    "2.2s Kinetic text: \"Ask like a human. / Find anything\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "search",
     "at_s": 0.1
    },
    {
     "kind": "text",
     "text": "{m}Ask like a human.|{l}Find **anything**",
     "at_s": 2.2
    }
   ]
  },
  {
   "id": 44,
   "name": "Command palette",
   "category": "Feature",
   "duration_s": 4.5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Keyboard-first power user command menu.",
   "preview_url": "play.html?id=44",
   "beats": [
    "0.1s Kinetic text: \"Everything is / one shortcut away\"",
    "0.6s palette in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Everything is|{l}**one shortcut** away",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "palette",
     "at_s": 0.6,
     "opts": {
      "frame": "card"
     }
    }
   ]
  },
  {
   "id": 45,
   "name": "Settings toggles",
   "category": "Feature",
   "duration_s": 4.5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Switches flip on in sequence.",
   "preview_url": "play.html?id=45",
   "beats": [
    "0.1s toggles in card",
    "1.8s Kinetic text: \"Turn it on. / Done.\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "toggles",
     "at_s": 0.1
    },
    {
     "kind": "text",
     "text": "{m}Turn it on.|{l}**Done.**",
     "at_s": 1.8
    }
   ]
  },
  {
   "id": 46,
   "name": "File upload",
   "category": "Feature",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Files upload with progress bars and checkmarks.",
   "preview_url": "play.html?id=46",
   "beats": [
    "0.1s Kinetic text: \"Drop your files. / We handle the rest\"",
    "0.6s upload in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Drop your files.|{l}We **handle the rest**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "upload",
     "at_s": 0.6
    }
   ]
  },
  {
   "id": 47,
   "name": "Live notifications",
   "category": "Feature",
   "duration_s": 4.5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Positive event toasts: payments, signups, reviews.",
   "preview_url": "play.html?id=47",
   "beats": [
    "0.1s toasts",
    "1.6s Kinetic text: \"Know the moment / it happens\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "toasts",
     "at_s": 0.1
    },
    {
     "kind": "text",
     "text": "{m}Know the moment|{l}**it happens**",
     "at_s": 1.6
    }
   ]
  },
  {
   "id": 48,
   "name": "Team collaboration",
   "category": "Feature",
   "duration_s": 4.5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Avatars stack in, team joins.",
   "preview_url": "play.html?id=48",
   "beats": [
    "0.1s avatars",
    "0.9s Kinetic text: \"Bring the / whole team\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "avatars",
     "at_s": 0.1,
     "props": {
      "more": 12
     }
    },
    {
     "kind": "text",
     "text": "{m}Bring the|{l}**whole team**",
     "at_s": 0.9
    }
   ]
  },
  {
   "id": 49,
   "name": "Integrations wall",
   "category": "Feature",
   "duration_s": 5,
   "accent": "teal",
   "accent_hex": "#0A9BB0",
   "dark": false,
   "purpose": "Grid of integration icons popping in.",
   "preview_url": "play.html?id=49",
   "beats": [
    "0.1s Kinetic text: \"200+ integrations\"",
    "0.6s logos"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{l}**200+** integrations",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "logos",
     "at_s": 0.6
    }
   ]
  },
  {
   "id": 50,
   "name": "Developer API",
   "category": "Feature",
   "duration_s": 5.5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Code snippet in a dark editor card.",
   "preview_url": "play.html?id=50",
   "beats": [
    "0.1s Kinetic text: \"Developers get a / clean API\"",
    "0.7s code in dark card (tilted): \"track.ts\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Developers get a|{l}**clean API**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "code",
     "at_s": 0.7,
     "props": {
      "title": "track.ts"
     },
     "opts": {
      "tilt": "l"
     }
    }
   ]
  },
  {
   "id": 51,
   "name": "One-command install",
   "category": "Feature",
   "duration_s": 5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Terminal types install command, success lines.",
   "preview_url": "play.html?id=51",
   "beats": [
    "0.1s Kinetic text: \"Install in / one command\"",
    "0.6s terminal in dark card: \"Terminal\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Install in|{l}**one command**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "terminal",
     "at_s": 0.6,
     "props": {
      "title": "Terminal",
      "lines": [
       "$ npx relay init",
       "> Detecting framework... Next.js",
       "> Creating relay.config.ts",
       "✓ Ready. Open localhost:3000"
      ]
     }
    }
   ]
  },
  {
   "id": 52,
   "name": "Email composer",
   "category": "Feature",
   "duration_s": 5.5,
   "accent": "rose",
   "accent_hex": "#EE3F6E",
   "dark": false,
   "purpose": "AI writes and sends a campaign email.",
   "preview_url": "play.html?id=52",
   "beats": [
    "0.1s mail in card",
    "2.6s Kinetic text: \"Campaigns that / write themselves\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "mail",
     "at_s": 0.1
    },
    {
     "kind": "text",
     "text": "{m}Campaigns that|{l}**write themselves**",
     "at_s": 2.6
    }
   ]
  },
  {
   "id": 53,
   "name": "CRM pipeline",
   "category": "Feature",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Pipeline board with deal moved to Won.",
   "preview_url": "play.html?id=53",
   "beats": [
    "0.1s Kinetic text: \"Deals move / while you sleep\"",
    "0.6s kanban in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Deals move|{l}while you **sleep**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "kanban",
     "at_s": 0.6,
     "props": {
      "cols": [
       [
        "Lead",
        [
         "Globex",
         "Umbrella"
        ]
       ],
       [
        "Demo",
        [
         "Initech"
        ]
       ],
       [
        "Won",
        [
         "Acme Co",
         "Hooli"
        ]
       ]
      ],
      "moving": "Northwind - $24k"
     }
    }
   ]
  },
  {
   "id": 54,
   "name": "Invoice paid",
   "category": "Feature",
   "duration_s": 5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Invoice with amount counting and status flipping to Paid.",
   "preview_url": "play.html?id=54",
   "beats": [
    "0.1s Kinetic text: \"Get paid / 2x faster\"",
    "0.6s invoice in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Get paid|{l}**2x faster**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "invoice",
     "at_s": 0.6
    }
   ]
  },
  {
   "id": 55,
   "name": "Security shield",
   "category": "Feature",
   "duration_s": 5,
   "accent": "teal",
   "accent_hex": "#0A9BB0",
   "dark": false,
   "purpose": "Security trust: shield icon plus checklist.",
   "preview_url": "play.html?id=55",
   "beats": [
    "0.1s icon",
    "0.7s list"
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "icon",
     "at_s": 0.1,
     "props": {
      "name": "shield-check",
      "fill": 1
     }
    },
    {
     "kind": "visual",
     "type": "list",
     "at_s": 0.7,
     "props": {
      "items": [
       [
        "check",
        "SOC 2 Type II"
       ],
       [
        "check",
        "SSO + SCIM"
       ],
       [
        "check",
        "Data stays in your region"
       ]
      ],
      "sm": 1,
      "c": "teal"
     }
    }
   ]
  },
  {
   "id": 56,
   "name": "Uptime status",
   "category": "Feature",
   "duration_s": 5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Status bars fill with uptime percent.",
   "preview_url": "play.html?id=56",
   "beats": [
    "0.1s Kinetic text: \"It just / stays up\"",
    "0.6s uptime in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}It just|{l}**stays up**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "uptime",
     "at_s": 0.6
    }
   ]
  },
  {
   "id": 57,
   "name": "Multi-language",
   "category": "Feature",
   "duration_s": 4.5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Language chips pop in.",
   "preview_url": "play.html?id=57",
   "beats": [
    "0.1s Kinetic text: \"Speaks your / customers' language\"",
    "0.7s chips"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Speaks your|{l}**customers' language**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "chips",
     "at_s": 0.7,
     "props": {
      "items": [
       [
        "English",
        "globe"
       ],
       "Español",
       "Deutsch",
       "Français",
       "日本語",
       "Português",
       "हिन्दी",
       "Italiano"
      ],
      "on": 0
     }
    }
   ]
  },
  {
   "id": 58,
   "name": "Templates",
   "category": "Feature",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Category chips then template cards.",
   "preview_url": "play.html?id=58",
   "beats": [
    "0.1s Kinetic text: \"Start from / 100+ templates\"",
    "0.6s chips",
    "1.4s skeleton in card: \"Launch campaign\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Start from|{l}**100+ templates**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "chips",
     "at_s": 0.6,
     "props": {
      "items": [
       "Sales",
       "Support",
       "Marketing",
       "Finance",
       "HR",
       "Ops"
      ],
      "on": 2
     }
    },
    {
     "kind": "visual",
     "type": "skeleton",
     "at_s": 1.4,
     "props": {
      "title": "Launch campaign",
      "icon": "megaphone"
     },
     "opts": {
      "w": 700
     }
    }
   ]
  },
  {
   "id": 59,
   "name": "Reports export",
   "category": "Feature",
   "duration_s": 5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Report ready with export chips.",
   "preview_url": "play.html?id=59",
   "beats": [
    "0.1s Kinetic text: \"Board-ready reports / in one click\"",
    "0.6s chart in card: \"Q3 revenue by month\"",
    "1.6s chips"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Board-ready reports|{l}in **one click**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "chart",
     "at_s": 0.6,
     "props": {
      "type": "bar",
      "label": "Q3 revenue by month",
      "value": 312400
     }
    },
    {
     "kind": "visual",
     "type": "chips",
     "at_s": 1.6,
     "props": {
      "items": [
       [
        "PDF",
        "file-text"
       ],
       [
        "Slides",
        "presentation"
       ],
       [
        "CSV",
        "sheet"
       ]
      ]
     }
    }
   ]
  },
  {
   "id": 60,
   "name": "Onboarding checklist",
   "category": "Feature",
   "duration_s": 5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Checklist ticks off setup tasks.",
   "preview_url": "play.html?id=60",
   "beats": [
    "0.1s checklist in card",
    "2.1s Kinetic text: \"Set up in / under 5 minutes\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "checklist",
     "at_s": 0.1
    },
    {
     "kind": "text",
     "text": "{m}Set up in|{l}**under 5 minutes**",
     "at_s": 2.1
    }
   ]
  },
  {
   "id": 61,
   "name": "AI prompt to result",
   "category": "AI",
   "duration_s": 5.5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Prompt typed, result tiles appear.",
   "preview_url": "play.html?id=61",
   "beats": [
    "0.1s Kinetic text: \"Just describe it\"",
    "0.5s prompt in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Just **describe it**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "prompt",
     "at_s": 0.5,
     "props": {
      "text": "Make 3 ad visuals for our spring sale",
      "hue": 3
     }
    }
   ]
  },
  {
   "id": 62,
   "name": "AI chat answer",
   "category": "AI",
   "duration_s": 6.5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "User asks, AI streams an answer.",
   "preview_url": "play.html?id=62",
   "beats": [
    "0.1s chat in card",
    "3.2s Kinetic text: \"Ask your data / anything\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "chat",
     "at_s": 0.1,
     "props": {
      "bot": "Pulse AI"
     }
    },
    {
     "kind": "text",
     "text": "{m}Ask your data|{l}**anything**",
     "at_s": 3.2
    }
   ]
  },
  {
   "id": 63,
   "name": "AI writes the doc",
   "category": "AI",
   "duration_s": 5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Prompt produces written text lines.",
   "preview_url": "play.html?id=63",
   "beats": [
    "0.1s prompt in card",
    "2.4s Kinetic text: \"First draft in / seconds\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "prompt",
     "at_s": 0.1,
     "props": {
      "text": "Draft release notes from this sprint",
      "result": "text"
     }
    },
    {
     "kind": "text",
     "text": "{m}First draft in|{l}**seconds**",
     "at_s": 2.4
    }
   ]
  },
  {
   "id": 64,
   "name": "AI agents team",
   "category": "AI",
   "duration_s": 5.5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Grid of mascots = a team of AI agents.",
   "preview_url": "play.html?id=64",
   "beats": [
    "0.1s Kinetic text: \"You get / 15 specialised / AI agents\"",
    "0.8s pipgrid"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{s}You get|{m}**15 specialised**|{l}AI agents",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "pipgrid",
     "at_s": 0.8,
     "props": {
      "n": 15,
      "size": 130,
      "multi": 1
     }
    }
   ]
  },
  {
   "id": 65,
   "name": "Agent roles",
   "category": "AI",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "One mascot with role label, e.g. \"The Analyst\".",
   "preview_url": "play.html?id=65",
   "beats": [
    "0.1s Kinetic text: \"The Analyst\"",
    "0.4s pip",
    "0.2s Decor: rings"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}**The Analyst**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "pip",
     "at_s": 0.4,
     "props": {
      "c": "amber",
      "sub": "finds the leak in your funnel"
     }
    },
    {
     "kind": "decor",
     "type": "rings",
     "at_s": 0.2,
     "props": {
      "size": 360
     },
     "opts": {
      "pos": [
       50,
       50
      ]
     }
    }
   ]
  },
  {
   "id": 66,
   "name": "Picks the right model",
   "category": "AI",
   "duration_s": 5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Router: one input to several model options.",
   "preview_url": "play.html?id=66",
   "beats": [
    "0.1s Kinetic text: \"It picks the / right AI for each task\"",
    "0.8s list"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}It picks the|{l}**right AI** for each task",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "list",
     "at_s": 0.8,
     "props": {
      "items": [
       [
        "bar-chart-3",
        "Analysis model"
       ],
       [
        "pen-line",
        "Writing model"
       ],
       [
        "image",
        "Image model",
        "mu"
       ]
      ],
      "sm": 1,
      "c": "violet"
     }
    }
   ]
  },
  {
   "id": 67,
   "name": "Wink mascot tip",
   "category": "AI",
   "duration_s": 4,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Mascot wink with a pro tip line.",
   "preview_url": "play.html?id=67",
   "beats": [
    "0.1s pip",
    "0.7s Kinetic text: \"Pro tip: / ask it to explain the why\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "pip",
     "at_s": 0.1,
     "props": {
      "mood": "wink",
      "c": "mint"
     }
    },
    {
     "kind": "text",
     "text": "{s}Pro tip:|{m}ask it to **explain the why**",
     "at_s": 0.7
    }
   ]
  },
  {
   "id": 68,
   "name": "Memory context",
   "category": "AI",
   "duration_s": 5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Arrow list of what the AI remembers.",
   "preview_url": "play.html?id=68",
   "beats": [
    "0.1s Kinetic text: \"It remembers you\"",
    "0.6s list"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}It **remembers** you",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "list",
     "at_s": 0.6,
     "props": {
      "items": [
       [
        "arrow-right",
        "Your brand"
       ],
       [
        "arrow-right",
        "Your customers"
       ],
       [
        "arrow-right",
        "Your past reports"
       ],
       [
        "arrow-right",
        "Your tone",
        "mu"
       ]
      ],
      "sm": 1,
      "step": 0.35
     }
    }
   ]
  },
  {
   "id": 69,
   "name": "AI suggestion toast",
   "category": "AI",
   "duration_s": 4.5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Proactive AI insight appears as a card.",
   "preview_url": "play.html?id=69",
   "beats": [
    "0.1s toasts",
    "0.9s Kinetic text: \"It tells you / what to do next\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "toasts",
     "at_s": 0.1,
     "props": {
      "items": [
       [
        "sparkles",
        "Insight",
        "Trials from ads convert 3x better on Tuesdays",
        "#7B5CFF"
       ]
      ]
     }
    },
    {
     "kind": "text",
     "text": "{m}It tells you|{l}**what to do next**",
     "at_s": 0.9
    }
   ]
  },
  {
   "id": 70,
   "name": "Human vs AI",
   "category": "AI",
   "duration_s": 5,
   "accent": "ink",
   "accent_hex": "#111113",
   "dark": false,
   "purpose": "Horizontal bars comparing time for human vs AI.",
   "preview_url": "play.html?id=70",
   "beats": [
    "0.1s Kinetic text: \"Weekly report time\"",
    "0.6s hbars"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Weekly report time",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "hbars",
     "at_s": 0.6,
     "props": {
      "items": [
       [
        "With AI",
        8,
        "4 min"
       ],
       [
        "By hand",
        100,
        "3 hrs"
       ]
      ]
     }
    }
   ]
  },
  {
   "id": 71,
   "name": "Big counter",
   "category": "Proof",
   "duration_s": 4,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Single metric counts up big.",
   "preview_url": "play.html?id=71",
   "beats": [
    "0.1s stat: \"teams use it daily\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "stat",
     "at_s": 0.1,
     "props": {
      "value": 12000,
      "suf": "+",
      "label": "teams use it daily"
     }
    }
   ]
  },
  {
   "id": 72,
   "name": "Growth chart",
   "category": "Proof",
   "duration_s": 5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "MRR line chart draws upward.",
   "preview_url": "play.html?id=72",
   "beats": [
    "0.1s Kinetic text: \"After 90 days\"",
    "0.5s chart in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}After 90 days",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "chart",
     "at_s": 0.5
    }
   ]
  },
  {
   "id": 73,
   "name": "X times faster",
   "category": "Proof",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Speed comparison bars vs competitors.",
   "preview_url": "play.html?id=73",
   "beats": [
    "0.1s Kinetic text: \"4x faster / than the old way\"",
    "0.7s hbars"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{l}**4x faster**|{m}than the old way",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "hbars",
     "at_s": 0.7
    }
   ]
  },
  {
   "id": 74,
   "name": "Testimonial card",
   "category": "Proof",
   "duration_s": 5.5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Star rating quote card.",
   "preview_url": "play.html?id=74",
   "beats": [
    "0.1s quote in card (tilted)",
    "1.2s Kinetic text: \"Do not take / our word for it\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "quote",
     "at_s": 0.1,
     "opts": {
      "tilt": "s"
     }
    },
    {
     "kind": "text",
     "text": "{m}Do not take|{l}**our word** for it",
     "at_s": 1.2
    }
   ]
  },
  {
   "id": 75,
   "name": "Time saved ring",
   "category": "Proof",
   "duration_s": 4.5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Donut ring fills to percent saved.",
   "preview_url": "play.html?id=75",
   "beats": [
    "0.1s ring: \"less admin time\"",
    "1.0s Kinetic text: \"Give your team / its week back\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "ring",
     "at_s": 0.1,
     "props": {
      "pct": 72,
      "label": "less admin time"
     }
    },
    {
     "kind": "text",
     "text": "{m}Give your team|{l}**its week back**",
     "at_s": 1
    }
   ]
  },
  {
   "id": 76,
   "name": "Customer world map",
   "category": "Proof",
   "duration_s": 5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Dot map lights up customer locations.",
   "preview_url": "play.html?id=76",
   "beats": [
    "0.1s Kinetic text: \"Used in / 64 countries\"",
    "0.6s world"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Used in|{l}**64 countries**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "world",
     "at_s": 0.6
    }
   ]
  },
  {
   "id": 77,
   "name": "Stat trio",
   "category": "Proof",
   "duration_s": 5,
   "accent": "teal",
   "accent_hex": "#0A9BB0",
   "dark": false,
   "purpose": "Three KPIs in a dashboard card.",
   "preview_url": "play.html?id=77",
   "beats": [
    "0.1s Kinetic text: \"The numbers\"",
    "0.5s dash in card: \"Customer results\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}The numbers",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "dash",
     "at_s": 0.5,
     "props": {
      "title": "Customer results",
      "range": "Avg. first 6 months",
      "kpis": [
       [
        "Hours saved",
        320,
        "/mo"
       ],
       [
        "Faster close",
        38,
        "cycle",
        "",
        "%"
       ],
       [
        "ROI",
        5.2,
        "x",
        "",
        "x",
        1
       ]
      ],
      "bars": 1
     }
    }
   ]
  },
  {
   "id": 78,
   "name": "Leaderboard",
   "category": "Proof",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Ranked table with the product on top.",
   "preview_url": "play.html?id=78",
   "beats": [
    "0.1s Kinetic text: \"Rated #1 in its category\"",
    "0.6s table in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Rated **#1** in its category",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "table",
     "at_s": 0.6,
     "props": {
      "head": [
       "Rank",
       "Tool",
       "Rating"
      ],
      "rows": [
       [
        "1",
        "Pulse",
        [
         "4.9",
         "ok"
        ]
       ],
       [
        "2",
        "Tool B",
        "4.3"
       ],
       [
        "3",
        "Tool C",
        "4.1"
       ],
       [
        "4",
        "Tool D",
        "3.8"
       ]
      ]
     }
    }
   ]
  },
  {
   "id": 79,
   "name": "Avatars social proof",
   "category": "Proof",
   "duration_s": 4.5,
   "accent": "rose",
   "accent_hex": "#EE3F6E",
   "dark": false,
   "purpose": "Avatar stack plus \"join 12,000 teams\".",
   "preview_url": "play.html?id=79",
   "beats": [
    "0.1s avatars",
    "0.9s Kinetic text: \"Join 12,000 teams\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "avatars",
     "at_s": 0.1,
     "props": {
      "names": [
       "JD",
       "AK",
       "MR",
       "LS",
       "TP",
       "EW"
      ],
      "more": "12k"
     }
    },
    {
     "kind": "text",
     "text": "{m}Join **12,000** teams",
     "at_s": 0.9
    }
   ]
  },
  {
   "id": 80,
   "name": "Review toasts",
   "category": "Proof",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Stream of 5-star reviews.",
   "preview_url": "play.html?id=80",
   "beats": [
    "0.1s toasts"
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "toasts",
     "at_s": 0.1,
     "props": {
      "items": [
       [
        "star",
        "Maria, COO",
        "\"Paid for itself in a week\"",
        "#E8950C"
       ],
       [
        "star",
        "Dev, founder",
        "\"We cancelled 3 tools\"",
        "#E8950C"
       ],
       [
        "star",
        "Ana, PM",
        "\"The team actually uses it\"",
        "#E8950C"
       ]
      ],
      "step": 0.5
     }
    }
   ]
  },
  {
   "id": 81,
   "name": "Before after numbers",
   "category": "Proof",
   "duration_s": 5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Old number strikes out, new number pops.",
   "preview_url": "play.html?id=81",
   "beats": [
    "0.1s Kinetic text: \"Report time\"",
    "0.3s strike: \"per week, per person\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Report time",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "strike",
     "at_s": 0.3,
     "props": {
      "old": "3 hrs",
      "now": "4 min",
      "label": "per week, per person"
     }
    }
   ]
  },
  {
   "id": 82,
   "name": "Stars rating",
   "category": "Proof",
   "duration_s": 4,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Big 4.9 rating with stars.",
   "preview_url": "play.html?id=82",
   "beats": [
    "0.1s stat: \"from 2,300 reviews\"",
    "0.8s quote in card"
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "stat",
     "at_s": 0.1,
     "props": {
      "value": 4.9,
      "dec": 1,
      "label": "from 2,300 reviews"
     }
    },
    {
     "kind": "visual",
     "type": "quote",
     "at_s": 0.8,
     "props": {
      "text": "Setup took 6 minutes. No joke.",
      "name": "Omar Haddad",
      "role": "Founder, Tiny Labs",
      "init": "OH",
      "c": "#12A67A"
     },
     "opts": {
      "w": 760
     }
    }
   ]
  },
  {
   "id": 83,
   "name": "Pricing card",
   "category": "Pricing",
   "duration_s": 5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Single plan card with features.",
   "preview_url": "play.html?id=83",
   "beats": [
    "0.1s Kinetic text: \"All of it for\"",
    "0.5s pricing in card (tilted)"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}All of it for",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "pricing",
     "at_s": 0.5,
     "props": {
      "badge": "Most popular"
     },
     "opts": {
      "tilt": "r"
     }
    }
   ]
  },
  {
   "id": 84,
   "name": "Free plan badge",
   "category": "Pricing",
   "duration_s": 4,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Emphasize free tier with big button.",
   "preview_url": "play.html?id=84",
   "beats": [
    "0.1s Kinetic text: \"And it is / free / for up to 5 users\"",
    "1.2s bigbtn: \"Start free\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}And it is|{xxl}**free**|{s}~for up to 5 users~",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "bigbtn",
     "at_s": 1.2,
     "props": {
      "label": "Start free",
      "ac": 1
     }
    }
   ]
  },
  {
   "id": 85,
   "name": "Us vs them pricing",
   "category": "Pricing",
   "duration_s": 5.5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Competitor price vs ours in bars.",
   "preview_url": "play.html?id=85",
   "beats": [
    "0.1s Kinetic text: \"Per seat, per month\"",
    "0.6s hbars"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Per seat, per month",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "hbars",
     "at_s": 0.6,
     "props": {
      "items": [
       [
        "Pulse",
        24,
        "$12"
       ],
       [
        "Tool B",
        70,
        "$35"
       ],
       [
        "Tool C",
        100,
        "$50"
       ]
      ]
     }
    }
   ]
  },
  {
   "id": 86,
   "name": "Plan cards fan",
   "category": "Pricing",
   "duration_s": 6,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Three plan cards stacked and angled.",
   "preview_url": "play.html?id=86",
   "beats": [
    "0.1s pricing in card (tilted) (placed absolutely)",
    "0.4s pricing in card (tilted) (placed absolutely)",
    "0.8s pricing in card (placed absolutely)"
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "pricing",
     "at_s": 0.1,
     "props": {
      "plan": "Starter",
      "price": 0,
      "sub": "For solo builders",
      "features": [
       "3 projects",
       "Community support"
      ],
      "cta": "Start free"
     },
     "opts": {
      "pos": [
       30,
       42
      ],
      "lpos": [
       26,
       50
      ],
      "tilt": "s",
      "w": 520
     }
    },
    {
     "kind": "visual",
     "type": "pricing",
     "at_s": 0.4,
     "props": {
      "plan": "Scale",
      "price": 79,
      "sub": "For larger teams",
      "features": [
       "SSO",
       "Audit logs"
      ],
      "cta": "Talk to sales"
     },
     "opts": {
      "pos": [
       70,
       42
      ],
      "lpos": [
       74,
       50
      ],
      "tilt": "s2",
      "w": 520
     }
    },
    {
     "kind": "visual",
     "type": "pricing",
     "at_s": 0.8,
     "props": {
      "plan": "Pro",
      "price": 29,
      "badge": "Best value"
     },
     "opts": {
      "pos": [
       50,
       55
      ],
      "lpos": [
       50,
       52
      ],
      "w": 580,
      "z": 3
     }
    }
   ]
  },
  {
   "id": 87,
   "name": "Hidden costs",
   "category": "Pricing",
   "duration_s": 5,
   "accent": "rose",
   "accent_hex": "#EE3F6E",
   "dark": false,
   "purpose": "Invoice with add-on lines that surprise.",
   "preview_url": "play.html?id=87",
   "beats": [
    "0.1s Kinetic text: \"Other tools charge / for every add-on\"",
    "0.7s invoice in card"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Other tools charge|{l}for **every add-on**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "invoice",
     "at_s": 0.7,
     "props": {
      "no": "Their invoice",
      "to": "Surprise fees included",
      "amount": 12480
     }
    }
   ]
  },
  {
   "id": 88,
   "name": "ROI calculator",
   "category": "Pricing",
   "duration_s": 5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Form with numbers producing savings.",
   "preview_url": "play.html?id=88",
   "beats": [
    "0.1s form in card: \"Savings calculator\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "form",
     "at_s": 0.1,
     "props": {
      "title": "Savings calculator",
      "fields": [
       [
        "Team size",
        "25 people"
       ],
       [
        "Hours on reports / week",
        "3"
       ]
      ],
      "cta": "You save $41,000 / year"
     }
    }
   ]
  },
  {
   "id": 89,
   "name": "Annual toggle",
   "category": "Pricing",
   "duration_s": 4.5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Monthly/yearly switch flips with discount tag.",
   "preview_url": "play.html?id=89",
   "beats": [
    "0.1s toggles in card: \"Billing\"",
    "0.9s stat"
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "toggles",
     "at_s": 0.1,
     "props": {
      "title": "Billing",
      "items": [
       [
        "Pay yearly - save 20%",
        "badge-percent"
       ]
      ]
     }
    },
    {
     "kind": "visual",
     "type": "stat",
     "at_s": 0.9,
     "props": {
      "value": 23,
      "pre": "$",
      "suf": "/mo",
      "from": 29,
      "dur": 1,
      "ac": 1
     }
    }
   ]
  },
  {
   "id": 90,
   "name": "Money-back guarantee",
   "category": "Pricing",
   "duration_s": 4,
   "accent": "teal",
   "accent_hex": "#0A9BB0",
   "dark": false,
   "purpose": "Shield icon + guarantee line.",
   "preview_url": "play.html?id=90",
   "beats": [
    "0.1s icon",
    "0.6s Kinetic text: \"Try it for 30 days / or get every cent back\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "icon",
     "at_s": 0.1,
     "props": {
      "name": "badge-check",
      "fill": 1
     }
    },
    {
     "kind": "text",
     "text": "{m}Try it for **30 days**|{m}or get ^every cent^ back",
     "at_s": 0.6
    }
   ]
  },
  {
   "id": 91,
   "name": "Three steps",
   "category": "How-to",
   "duration_s": 5.5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Numbered 3-step timeline.",
   "preview_url": "play.html?id=91",
   "beats": [
    "0.1s Kinetic text: \"How it works\"",
    "0.5s steps"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}How it works",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "steps",
     "at_s": 0.5
    }
   ]
  },
  {
   "id": 92,
   "name": "Sign-up form",
   "category": "How-to",
   "duration_s": 5.5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Form fields typed, button pressed.",
   "preview_url": "play.html?id=92",
   "beats": [
    "0.1s Kinetic text: \"Step 1\"",
    "0.4s form in card: \"Create your workspace\"",
    "3.0s Cursor glides in and clicks"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Step 1",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "form",
     "at_s": 0.4,
     "props": {
      "title": "Create your workspace"
     }
    },
    {
     "kind": "cursor",
     "type": "cursor",
     "at_s": 3,
     "props": {
      "to": [
       50,
       76
      ]
     }
    }
   ]
  },
  {
   "id": 93,
   "name": "Connect sources",
   "category": "How-to",
   "duration_s": 5,
   "accent": "teal",
   "accent_hex": "#0A9BB0",
   "dark": false,
   "purpose": "Chain of connections: sources to product.",
   "preview_url": "play.html?id=93",
   "beats": [
    "0.1s Kinetic text: \"Step 2: connect / your data\"",
    "0.7s flow"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Step 2: connect|{l}your **data**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "flow",
     "at_s": 0.7,
     "props": {
      "dir": "h",
      "nodes": [
       [
        "credit-card",
        "Payments"
       ],
       [
        "database",
        "Database"
       ],
       [
        "activity",
        "Pulse"
       ]
      ]
     }
    }
   ]
  },
  {
   "id": 94,
   "name": "Deploy button",
   "category": "How-to",
   "duration_s": 4.5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Cursor clicks the big launch button.",
   "preview_url": "play.html?id=94",
   "beats": [
    "0.1s Kinetic text: \"Step 3\"",
    "0.4s bigbtn: \"Go live\"",
    "0.5s Cursor glides in and clicks"
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Step 3",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "bigbtn",
     "at_s": 0.4,
     "props": {
      "label": "Go live",
      "icon": "rocket",
      "ac": 1,
      "press": 1.5
     }
    },
    {
     "kind": "cursor",
     "type": "cursor",
     "at_s": 0.5,
     "props": {
      "to": [
       62,
       52
      ],
      "from": [
       85,
       80
      ]
     }
    }
   ]
  },
  {
   "id": 95,
   "name": "Progress setup",
   "category": "How-to",
   "duration_s": 4.5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Setup progress bar fills to 100%.",
   "preview_url": "play.html?id=95",
   "beats": [
    "0.1s icon",
    "0.4s progress",
    "2.2s Kinetic text: \"That is it.\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "icon",
     "at_s": 0.1,
     "props": {
      "name": "loader",
      "plain": 1,
      "size": 180
     }
    },
    {
     "kind": "visual",
     "type": "progress",
     "at_s": 0.4,
     "opts": {
      "w": 820
     }
    },
    {
     "kind": "text",
     "text": "{m}**That is it.**",
     "at_s": 2.2
    }
   ]
  },
  {
   "id": 96,
   "name": "Invite team flow",
   "category": "How-to",
   "duration_s": 5,
   "accent": "amber",
   "accent_hex": "#E8950C",
   "dark": false,
   "purpose": "Command palette invite then avatars.",
   "preview_url": "play.html?id=96",
   "beats": [
    "0.1s palette in card",
    "1.8s avatars"
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "palette",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "avatars",
     "at_s": 1.8,
     "props": {
      "names": [
       "YO",
       "AL",
       "BK"
      ],
      "more": 4
     }
    }
   ]
  },
  {
   "id": 97,
   "name": "Comment keyword CTA",
   "category": "CTA",
   "duration_s": 5,
   "accent": "violet",
   "accent_hex": "#7B5CFF",
   "dark": false,
   "purpose": "Comment a keyword to get a free guide.",
   "preview_url": "play.html?id=97",
   "beats": [
    "0.1s Kinetic text: \"Comment / \"PLAYBOOK\"\"",
    "0.7s cover",
    "1.6s Kinetic text: \"and I will send you the free guide\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}Comment|{xl}**\"PLAYBOOK\"**",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "cover",
     "at_s": 0.7,
     "opts": {
      "anim": "rise"
     }
    },
    {
     "kind": "text",
     "text": "{s}and I will send you the **free guide**",
     "at_s": 1.6
    }
   ]
  },
  {
   "id": 98,
   "name": "Follow for more",
   "category": "CTA",
   "duration_s": 4,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Follow prompt with mascot.",
   "preview_url": "play.html?id=98",
   "beats": [
    "0.1s pip",
    "0.6s Kinetic text: \"Follow for / one tool a day\"",
    "1.0s Decor: spark"
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "pip",
     "at_s": 0.1,
     "props": {
      "mood": "wink"
     }
    },
    {
     "kind": "text",
     "text": "{m}Follow for|{l}**one tool a day**",
     "at_s": 0.6
    },
    {
     "kind": "decor",
     "type": "spark",
     "at_s": 1,
     "props": {
      "size": 110,
      "c": "amber",
      "spin": 1
     },
     "opts": {
      "pos": [
       78,
       26
      ]
     }
    }
   ]
  },
  {
   "id": 99,
   "name": "Recap list",
   "category": "CTA",
   "duration_s": 5.5,
   "accent": "mint",
   "accent_hex": "#12A67A",
   "dark": false,
   "purpose": "Recap of key benefits then CTA.",
   "preview_url": "play.html?id=99",
   "beats": [
    "0.1s Kinetic text: \"So, recap:\"",
    "0.5s list",
    "2.0s bigbtn: \"Link in bio\""
   ],
   "elements": [
    {
     "kind": "text",
     "text": "{m}So, recap:",
     "at_s": 0.1
    },
    {
     "kind": "visual",
     "type": "list",
     "at_s": 0.5,
     "props": {
      "items": [
       [
        "check",
        "One workspace"
       ],
       [
        "check",
        "AI does the busywork"
       ],
       [
        "check",
        "Free to start"
       ]
      ],
      "c": "mint"
     }
    },
    {
     "kind": "visual",
     "type": "bigbtn",
     "at_s": 2,
     "props": {
      "label": "Link in bio"
     }
    }
   ]
  },
  {
   "id": 100,
   "name": "End card",
   "category": "CTA",
   "duration_s": 5,
   "accent": "blue",
   "accent_hex": "#2F5BFF",
   "dark": false,
   "purpose": "Logo + tagline + URL end card.",
   "preview_url": "play.html?id=100",
   "beats": [
    "0.1s icon",
    "0.6s Kinetic text: \"Pulse / Your metrics, explained.\"",
    "1.4s pill: \"pulse.io\""
   ],
   "elements": [
    {
     "kind": "visual",
     "type": "icon",
     "at_s": 0.1,
     "props": {
      "name": "activity",
      "fill": 1
     }
    },
    {
     "kind": "text",
     "text": "{xl}**Pulse**|{m}~Your metrics, explained.~",
     "at_s": 0.6
    },
    {
     "kind": "visual",
     "type": "pill",
     "at_s": 1.4,
     "props": {
      "icon": "globe",
      "label": "pulse.io",
      "c": "ink"
     }
    }
   ]
  }
 ]
}