{
  "$generated": "Built from the open pattern library by scripts/build-patterns.mjs — DO NOT EDIT BY HAND. Run `npm run patterns:build` after changing ../unpaper-html/patterns or the demo-slide mapping. Also published as the static agent endpoint /patterns.json.",
  "version": 1,
  "source": "unpaper-html/patterns@c83811e",
  "families": [
    {
      "id": "consulting",
      "label": "Consulting / strategy",
      "rule": "Action titles: each slide title is a full-sentence finding, and the titles read top-to-bottom as the whole argument. One message per slide. Answer first (pyramid), then MECE support, then next steps. Evidence sits beside its claim; every data slide carries a 'Source:' line. Colour directs attention, it does not decorate.",
      "demoTemplate": "/templates/slides-consulting.html"
    },
    {
      "id": "standard",
      "label": "Standard",
      "rule": "Soft Cards: light and warm, rounded cards with soft shadows, gentle fills, a friendly sans, one warm accent. One idea per slide; a few soft cards beat a crowded grid — clear hierarchy, never dense.",
      "demoTemplate": "/templates/slides.html"
    },
    {
      "id": "design",
      "label": "Design",
      "rule": "Keynote Spotlight: a near-black stage, bold sans display type, ONE idea per slide, deep negative space, a single accent. No dense grids, no paragraphs, few words — every slide a keynote moment.",
      "demoTemplate": "/templates/slides-design.html"
    },
    {
      "id": "editorial",
      "label": "Editorial",
      "rule": "A printed journal: left masthead rail, hairline rules, large serif type, oversized serif numerals. No cards, boxes, shadows or rounded corners; at most ONE big visual block per slide.",
      "demoTemplate": "/templates/slides-editorial.html"
    }
  ],
  "patterns": [
    {
      "id": "C01",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Cover / document title",
      "label": "Cover",
      "job": "Set topic, client, date, confidentiality",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L1",
      "ready": true,
      "compact": "Cover: the document title slide — a short topic title (one accent word via <em>), a one-line subtitle, and client/date/confidentiality in the corners. Set the scene; no body content.",
      "tokens": 46,
      "primitives": [
        "h1.cover-title",
        "cover-lede"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "cover"
    },
    {
      "id": "C02",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Executive summary",
      "label": "Executive summary",
      "job": "State the recommendation and 3-5 reasons",
      "tier": 1,
      "mvp": true,
      "support": "partial",
      "level": "L2",
      "ready": true,
      "compact": "Executive summary: open with the recommendation in one bold line, then 3-5 supporting findings as a numbered list or a stat row. State the answer first; the rest of the deck defends it.",
      "tokens": 47,
      "primitives": [
        "h2.title",
        "data-unpaper-lay=2l",
        ".stats",
        "ol/li"
      ],
      "elements": [
        "stat row",
        "split"
      ],
      "useWhen": [
        "The audience is senior and time-poor — they want the conclusion before the build-up.",
        "The deck makes a single recommendation that a handful of reasons support.",
        "You want the storyline auditable: each summary point maps to a later evidence slide."
      ],
      "dontUse": [
        "There is no single answer yet (the deck explores rather than recommends) — use an",
        "The reasons are themselves numbers worth charting — lead with C06/C10."
      ],
      "demoKind": "exec-summary"
    },
    {
      "id": "C03",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Agenda / storyline",
      "label": "Agenda",
      "job": "Preview the argument structure",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Agenda / storyline: preview the argument as 3-6 numbered sections with action-oriented names (a claim each, not a label) — reading them should sketch the whole story. A simple numbered list.",
      "tokens": 48,
      "primitives": [
        "ol/li",
        ".eyebrow"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C04",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Section divider",
      "label": "Section divider",
      "job": "Mark a chapter shift",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L1",
      "ready": true,
      "compact": "Section divider: a full-slide chapter break — a large section number plus a short section title on a clean field. Marks a shift; carries no evidence.",
      "tokens": 38,
      "primitives": [
        ".divider",
        ".eyebrow"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "divider"
    },
    {
      "id": "C05",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Action-title evidence slide",
      "label": "Action-title evidence",
      "job": "Put one claim and its proof together",
      "tier": 1,
      "mvp": true,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Action-title evidence slide: the title states the finding as a full sentence; use data-unpaper-lay='2l' with a short so-what (2-3 bullets) on the left and ONE proof object (chart or table) on the right; put a 'Source:' line directly under the evidence.",
      "tokens": 63,
      "primitives": [
        "h2.title",
        "data-unpaper-lay=2l",
        "data-unpaper-chart",
        "table",
        ".source"
      ],
      "elements": [
        "chart",
        "table",
        "split"
      ],
      "useWhen": [
        "You have one point to make and one piece of evidence that makes it — the default",
        "You want a reader to be able to flip through the deck reading only the titles and"
      ],
      "dontUse": [
        "The slide carries two unrelated proofs — split it (one idea per slide).",
        "There is no evidence yet, only an assertion — either find the proof or cut the slide."
      ],
      "demoKind": "split"
    },
    {
      "id": "C06",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Single chart proof",
      "label": "Single chart proof",
      "job": "One chart carries the point",
      "tier": 1,
      "mvp": true,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": "Single chart proof: one data-unpaper-chart carries the whole point; the title states what the chart proves; one source line below; no second visual.",
      "tokens": 37,
      "primitives": [
        "data-unpaper-chart",
        "h2.title",
        ".source"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [
        "A single trend, comparison, or distribution is the entire message.",
        "The chart is strong enough to stand alone — it earns the full canvas."
      ],
      "dontUse": [
        "You need to compare several cuts of the same measure — use small multiples (C07).",
        "The point is qualitative — use a scorecard (C16) or a 2×2 (C12)."
      ],
      "demoKind": "chart"
    },
    {
      "id": "C07",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Small multiples",
      "label": "Small multiples",
      "job": "Compare several charts on one scale",
      "tier": 2,
      "mvp": true,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": "Small multiples: 2-4 charts of the SAME type and identical scale side by side (data-unpaper-lay='2' or '3') to compare segments or periods; one shared source line.",
      "tokens": 41,
      "primitives": [
        "data-unpaper-lay=2|3",
        "data-unpaper-chart",
        ".source"
      ],
      "elements": [
        "chart",
        "split"
      ],
      "useWhen": [
        "You compare the same measure across segments, regions, cohorts, or periods.",
        "The comparison lives in the shape of each series, not in one headline number."
      ],
      "dontUse": [
        "One chart already makes the point — use C06.",
        "The cuts use different units or scales — a shared scale is what makes this honest;"
      ],
      "demoKind": "small-multiples"
    },
    {
      "id": "C08",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Waterfall / bridge",
      "label": "Waterfall / bridge",
      "job": "Explain change from baseline to outcome",
      "tier": 3,
      "mvp": true,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": "Waterfall/bridge (.wf block): walk a total from start to end through +/- steps. Position each bar by its running total in baked px (baseline at the plot bottom, scale ~2.5px/unit; .up green / .down red / .total dark); join steps with thin .wf-conn lines at the pre-step total; label each delta (+/-) and the start/end totals. Copy the Value-bridge slide's geometry and keep the plot within the slide so it converts to native shapes.",
      "tokens": 108,
      "primitives": [
        ".wf",
        ".wf-bar.up/.down/.total",
        ".wf-conn",
        ".wf-val/.wf-cat"
      ],
      "elements": [
        "waterfall"
      ],
      "useWhen": [
        "You explain how a total changed, decomposed into the moves that drove it.",
        "The audience needs to see which step helped and which hurt, and by how much."
      ],
      "dontUse": [
        "You only need the start and end totals — use two stats (C10).",
        "The parts are a static composition of a whole, not a sequence of changes — use a"
      ],
      "demoKind": "waterfall"
    },
    {
      "id": "C09",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Variance decomposition",
      "label": "Variance decomposition",
      "job": "Break a total into drivers",
      "tier": 3,
      "mvp": false,
      "support": "partial",
      "level": "L3",
      "ready": true,
      "compact": "Variance decomposition: break a total change into its drivers — a waterfall (.wf) or a chart plus a .stats row naming each driver contribution. Show what moved the number and by how much.",
      "tokens": 47,
      "primitives": [
        ".wf",
        ".stats",
        "data-unpaper-chart"
      ],
      "elements": [
        "chart",
        "stat row",
        "waterfall"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C10",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "KPI stat row",
      "label": "KPI stat row",
      "job": "Anchor the story in 2-4 numbers",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "KPI stat row (.stats): anchor the story in 2-4 big numbers, each with a tiny label and optional delta. One row of native text — the headline metrics, not a table.",
      "tokens": 41,
      "primitives": [
        ".stats"
      ],
      "elements": [
        "stat row"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "stats"
    },
    {
      "id": "C11",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Benchmark ranking",
      "label": "Benchmark ranking",
      "job": "Rank companies, countries, segments, options",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": "Benchmark ranking: rank companies / countries / segments / options on one metric — a sorted horizontal bar chart (data-unpaper-chart) or a ranked table, highest to lowest, with the leader called out. Keep labels short.",
      "tokens": 55,
      "primitives": [
        "data-unpaper-chart",
        "table"
      ],
      "elements": [
        "chart",
        "table"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C12",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Market map / 2x2",
      "label": "2x2 matrix",
      "job": "Position options on two axes",
      "tier": 2,
      "mvp": true,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "2x2 matrix: position options on two named axes using the matrix block (.matrix.axes) with four quadrants, clear axis labels, and the priority cell marked; plot 4-8 items max.",
      "tokens": 44,
      "primitives": [
        ".matrix.axes",
        ".quad",
        ".mxlabel"
      ],
      "elements": [
        "2×2 matrix"
      ],
      "useWhen": [
        "Two dimensions genuinely drive the decision and you can name them.",
        "You have 4–8 items to place, and where they fall is the insight."
      ],
      "dontUse": [
        "One axis really decides it — use a ranked bar (C11).",
        "You have many criteria — use an option comparison table (C15) or a scorecard (C16).",
        "The axes are vague or chosen to flatter a predetermined answer."
      ],
      "demoKind": "framework"
    },
    {
      "id": "C13",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Issue tree",
      "label": "Issue tree",
      "job": "Break a problem into MECE branches",
      "tier": 2,
      "mvp": true,
      "support": "partial",
      "level": "L2",
      "ready": true,
      "compact": "Issue tree: break the question into MECE branches (a parent box over 2-4 child boxes, each splitting further if needed) using the org/tree block; branches must be mutually exclusive and collectively exhaustive.",
      "tokens": 53,
      "primitives": [
        ".orgtree",
        ".org-node"
      ],
      "elements": [
        "tree"
      ],
      "useWhen": [
        "You need to show the problem was decomposed rigorously, not cherry-picked.",
        "The decomposition itself reassures the audience (board, client, regulator)."
      ],
      "dontUse": [
        "The branches overlap or leave gaps — fix the logic before drawing it (a non-MECE",
        "It would run past two levels on one slide — split or summarise (it gets unreadable)."
      ],
      "demoKind": "issue-tree"
    },
    {
      "id": "C14",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Driver tree / equation",
      "label": "Driver tree",
      "job": "Show how value decomposes",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Driver tree / value equation: use the .dt idiom — absolute .dt-node boxes (root left, levers right; give each data-unpaper-cx=\"id\"), joined by .dt-cx svg polylines tagged data-unpaper-connect=\"fromId toId\" (route edge-midpoint to edge-midpoint, bend at the horizontal midpoint), with .dt-op chips (× + −) between sibling boxes. Keep the tree ≤10 boxes and ≤344px tall. Every box converts to a movable native shape and every line to a REAL PowerPoint connector that re-routes when a box is dragged.",
      "tokens": 125,
      "primitives": [
        ".dt",
        ".dt-node (absolute, data-unpaper-cx id)",
        ".dt-cx svg polyline (data-unpaper-connect)",
        ".dt-op operator chip"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "driver-tree"
    },
    {
      "id": "C15",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Option comparison",
      "label": "Option comparison",
      "job": "Compare options by criteria",
      "tier": 1,
      "mvp": true,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Option comparison: a real <table> with options as rows and criteria as columns (<=6 columns); mark the recommended row or column; one source line below.",
      "tokens": 38,
      "primitives": [
        "table.tbl",
        "thead",
        "tbody"
      ],
      "elements": [
        "table"
      ],
      "useWhen": [
        "2–5 options are judged on the same set of concrete criteria.",
        "The values are precise (numbers, durations, yes/no) — not qualitative ratings."
      ],
      "dontUse": [
        "The ratings are judgements (high/medium/low) — use a Harvey-ball scorecard (C16).",
        "There is only one criterion — rank with a bar (C11)."
      ],
      "demoKind": "table"
    },
    {
      "id": "C16",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Scorecard / Harvey balls",
      "label": "Scorecard (Harvey balls)",
      "job": "Rate options qualitatively across criteria",
      "tier": 2,
      "mvp": true,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": "Scorecard: a scorecard grid of options x criteria; each cell a Harvey-ball rating (data-unpaper-rating 0-1, drawn as a filled-pie SVG: empty, quarter, half, three-quarter, full) or a RAG colour; add a one-line legend and a source line. Use the .scorecard grid, not a native <table>, so each ball stays a movable shape.",
      "tokens": 80,
      "primitives": [
        ".scorecard",
        "data-unpaper-rating",
        "inline svg pie",
        ".legend",
        ".source"
      ],
      "elements": [
        "cards",
        "harvey ball"
      ],
      "useWhen": [
        "The decision rests on how options stack up across multiple criteria.",
        "The ratings are judgements (high / medium / low), not precise numbers."
      ],
      "dontUse": [
        "The values are precise numbers — use C15 (option comparison) or a chart.",
        "There is only one criterion — use a ranked bar (C11).",
        "Every cell would carry the same rating — the table then says nothing."
      ],
      "demoKind": "scorecard"
    },
    {
      "id": "C17",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Maturity ladder",
      "label": "Maturity ladder",
      "job": "Show levels from current to target state",
      "tier": 2,
      "mvp": false,
      "support": "partial",
      "level": "L2",
      "ready": true,
      "compact": "Maturity ladder: levels from current to target state — 3-5 stacked rungs (cards or a vertical .timeline), each a level name plus a one-line descriptor, with today level marked. Show the climb.",
      "tokens": 48,
      "primitives": [
        ".cards",
        ".timeline"
      ],
      "elements": [
        "cards",
        "timeline"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C18",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Roadmap / phases",
      "label": "Roadmap / phases",
      "job": "Sequence work over time",
      "tier": 2,
      "mvp": true,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Roadmap: 3-5 phases over time using the timeline block, each with a date/label and 1-2 outcomes, laid out left to right.",
      "tokens": 30,
      "primitives": [
        ".timeline",
        ".tl-step",
        ".when"
      ],
      "elements": [
        "timeline"
      ],
      "useWhen": [
        "The plan unfolds in distinct phases with a clear order.",
        "The audience needs the sequence and the timing, not task-level detail."
      ],
      "dontUse": [
        "Activities run in parallel across lanes — use a workplan / Gantt-lite (C19).",
        "There is no real time dimension — use a process flow (C20) instead."
      ],
      "demoKind": "timeline"
    },
    {
      "id": "C19",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Workplan / Gantt-lite",
      "label": "Workplan (swimlanes)",
      "job": "Show activities across phases",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Workplan / swimlanes (Gantt-lite): use the .wp idiom — absolute-positioned .wp-lane labels down the left, quarter .wp-tick headers with .wp-grid lines, one .wp-bar per phase (left/width in baked px: plot spans x 130-1050, one quarter = 230px; alternate .wp-bar and .wp-bar.soft), a .wp-ms dot + .wp-mslabel for a milestone. Keep the plot <=250px tall. Every bar converts to a movable native shape.",
      "tokens": 100,
      "primitives": [
        ".wp",
        ".wp-lane",
        ".wp-bar (absolute, baked px)",
        ".wp-ms milestone dot",
        ".wp-tick/.wp-grid"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "workplan"
    },
    {
      "id": "C20",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Process flow",
      "label": "Process flow",
      "job": "Explain ordered steps",
      "tier": 2,
      "mvp": true,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Process flow: 3-5 ordered steps joined by arrows using the flow block; one short label per step; arrows in the accent colour.",
      "tokens": 32,
      "primitives": [
        ".flow",
        ".node",
        "svg.arrow"
      ],
      "elements": [
        "flow"
      ],
      "useWhen": [
        "A process or method runs in a fixed order, step depending on the one before.",
        "3–5 steps tell the whole story."
      ],
      "dontUse": [
        "The steps are timed phases — use a roadmap (C18).",
        "Steps branch or loop heavily — a flow line oversimplifies; consider a diagram."
      ],
      "demoKind": "flow"
    },
    {
      "id": "C21",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Operating model",
      "label": "Operating model",
      "job": "Show capabilities, roles, interfaces",
      "tier": 3,
      "mvp": false,
      "support": "partial",
      "level": "L2",
      "ready": true,
      "compact": "Operating model: capabilities, roles and interfaces — a grid of capability boxes (cards) grouped into layers, or an .orgtree of functions. Show the structure, not a process.",
      "tokens": 44,
      "primitives": [
        ".cards",
        ".orgtree"
      ],
      "elements": [
        "cards",
        "tree"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C22",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Org / governance",
      "label": "Org / governance",
      "job": "Show accountability and escalation",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Org / governance (.orgtree): show accountability and escalation — a small hierarchy of boxes (sponsor to lead to workstreams). Native boxes plus connectors; keep to 2-3 levels.",
      "tokens": 44,
      "primitives": [
        ".orgtree"
      ],
      "elements": [
        "tree"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C23",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Initiative portfolio",
      "label": "Initiative portfolio",
      "job": "Sort initiatives by impact, effort, status",
      "tier": 2,
      "mvp": true,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Initiative portfolio: sort ~6-8 initiatives by impact x effort on a 2x2, or as status-tagged cards; mark the quick wins.",
      "tokens": 30,
      "primitives": [
        ".matrix.axes",
        ".cards",
        ".ci"
      ],
      "elements": [
        "cards",
        "2×2 matrix"
      ],
      "useWhen": [
        "You have ~6–8 initiatives and need to prioritise them, not just list them.",
        "The decision is \"which first\" — and impact vs. effort (or status) is what sorts them."
      ],
      "dontUse": [
        "There's only one initiative — it's a recommendation (C30), not a portfolio.",
        "You're comparing options on many criteria — use a table (C15) or scorecard (C16)."
      ],
      "demoKind": null
    },
    {
      "id": "C24",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Business case / value sizing",
      "label": "Business case",
      "job": "Explain value pool and financial impact",
      "tier": 3,
      "mvp": false,
      "support": "partial",
      "level": "L3",
      "ready": true,
      "compact": "Business case / value sizing: size the value and its financials — a waterfall (.wf) bridging from baseline to the value pool, plus an assumptions table. State the number and what it rests on.",
      "tokens": 48,
      "primitives": [
        ".wf",
        "table"
      ],
      "elements": [
        "table",
        "waterfall"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C25",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Risk and mitigation",
      "label": "Risk & mitigation",
      "job": "Pair risks with controls and actions",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Risk and mitigation: pair each risk with its control — a table (Risk | Likelihood | Impact | Mitigation | Owner) or paired cards. One row per risk; rate likelihood/impact with words or Harvey balls.",
      "tokens": 50,
      "primitives": [
        "table",
        ".cards",
        "data-unpaper-rating"
      ],
      "elements": [
        "table",
        "cards",
        "harvey ball"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C26",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Stakeholder map",
      "label": "Stakeholder map",
      "job": "Show influence, interest, ownership",
      "tier": 3,
      "mvp": false,
      "support": "partial",
      "level": "L2",
      "ready": true,
      "compact": "Stakeholder map: place stakeholders on influence x interest — a 2x2 (data-unpaper-lay=quad / .matrix.axes) with named dots per quadrant and a one-line engagement note per zone.",
      "tokens": 44,
      "primitives": [
        ".matrix.axes",
        "data-unpaper-lay=quad"
      ],
      "elements": [
        "2×2 matrix"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C27",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Customer journey",
      "label": "Customer journey",
      "job": "Show stages, pain points, moments",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Customer journey: use the .jy idiom — a .jy-line spine with a .jy-grid of 4-5 .jy-stage columns; each stage a numbered .jy-dot, an h3 stage name, a .jy-pain line (bold the pain itself), and a .jy-mo panel (\"Moment that matters\" + one line). The title states where the journey breaks. Dots and panels convert to movable native shapes.",
      "tokens": 84,
      "primitives": [
        ".jy",
        ".jy-line spine",
        ".jy-dot (numbered ellipse)",
        ".jy-pain",
        ".jy-mo moment panel"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "journey"
    },
    {
      "id": "C28",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Segment / persona comparison",
      "label": "Segment comparison",
      "job": "Compare customer or market segments",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Segment / persona comparison: compare 2-4 customer or market segments across the same few attributes — a table with one column per segment (or cards), so differences read across a row.",
      "tokens": 46,
      "primitives": [
        "table",
        ".cards"
      ],
      "elements": [
        "table",
        "cards"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C29",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Case example",
      "label": "Case example",
      "job": "Show one proof point or vignette",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Case example: one proof point or vignette — a short narrative beside a pulled-out result, via data-unpaper-lay=2l or a .callout. Make the abstract concrete with a single real case.",
      "tokens": 45,
      "primitives": [
        "data-unpaper-lay=2l",
        ".callout"
      ],
      "elements": [
        "split",
        "callout"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C30",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Recommendation / decision",
      "label": "Recommendation close",
      "job": "Close with the ask, decision, next step",
      "tier": 1,
      "mvp": true,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Recommendation close: the decision/ask in one bold line, the 2-3 reasons, and the first concrete next step with an owner and a date.",
      "tokens": 33,
      "primitives": [
        "h2.title",
        ".bignum",
        "ol/li",
        ".callout"
      ],
      "elements": [
        "stat row",
        "callout"
      ],
      "useWhen": [
        "The deck has built its case and now needs a decision or an approval.",
        "You can name a specific first action, not just \"next steps to be defined.\""
      ],
      "dontUse": [
        "The work is exploratory with no ask yet — close on findings, not a decision.",
        "The \"next step\" is vague — make it concrete first, or the slide rings hollow."
      ],
      "demoKind": "closing"
    },
    {
      "id": "C31",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Appendix data table",
      "label": "Appendix table",
      "job": "Preserve detailed evidence",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Appendix data table: preserve the detailed evidence — a compact, dense table with many rows, small type and clear headers. For backup; not a headline slide.",
      "tokens": 39,
      "primitives": [
        "table"
      ],
      "elements": [
        "table"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C32",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Methodology / sources",
      "label": "Methodology",
      "job": "Explain the research basis",
      "tier": 3,
      "mvp": false,
      "support": "partial",
      "level": "L2",
      "ready": true,
      "compact": "Methodology / sources: explain the research basis — a short list of method steps and the data sources used, as bullets or a .callout. Builds trust; keep it brief.",
      "tokens": 41,
      "primitives": [
        ".callout",
        "ul/li",
        ".source"
      ],
      "elements": [
        "callout"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C33",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Assumptions / limitations",
      "label": "Assumptions",
      "job": "State model boundaries",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Assumptions / limitations: state the model boundaries — a short bulleted list or .callout of the key assumptions and what the analysis does not cover. Be explicit and honest.",
      "tokens": 44,
      "primitives": [
        ".callout",
        "ul/li"
      ],
      "elements": [
        "callout"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C34",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Glossary / definitions",
      "label": "Glossary",
      "job": "Define terms",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Glossary / definitions: define the terms — a two-column list of term plus short definition (a table or definition list). Alphabetical; one line each.",
      "tokens": 38,
      "primitives": [
        "table",
        "dl"
      ],
      "elements": [
        "table"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C35",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Before / after",
      "label": "Before / after",
      "job": "Show current vs target state",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": "Before / after: current state vs target state side by side — data-unpaper-lay=2 with Today on the left and Target on the right, the same dimensions in each, so the gap is obvious.",
      "tokens": 45,
      "primitives": [
        "data-unpaper-lay=2"
      ],
      "elements": [
        "split"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C36",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Recommendation tree",
      "label": "Recommendation tree",
      "job": "Link recommendation to actions",
      "tier": 3,
      "mvp": false,
      "support": "partial",
      "level": "L2",
      "ready": true,
      "compact": "Recommendation tree: link the recommendation to its actions — an .orgtree (or rows) from the headline recommendation down to 2-4 supporting actions/owners. Show how the ask decomposes into moves.",
      "tokens": 49,
      "primitives": [
        ".orgtree",
        "ol/li"
      ],
      "elements": [
        "tree"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "C37",
      "family": "consulting",
      "familyLabel": "Consulting / strategy",
      "name": "Mixed-chart dashboard",
      "label": "Mixed-chart dashboard",
      "job": "Several different chart types answer one question together",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": "Mixed-chart dashboard: charts of DIFFERENT types on one slide — a doughnut share beside a bar ranking (.charts.c2), or a quad grid (data-unpaper-lay='quad') of small bar / line / doughnut tiles plus one big .stat number for a KPI review. One message per tile with its own small label, direct labels over legends, and the action title states the combined so-what; each data-unpaper-chart wrapper holds ONLY its svg.",
      "tokens": 104,
      "primitives": [
        "data-unpaper-lay=quad",
        ".charts.c2",
        "data-unpaper-chart",
        ".stat"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [
        "Two lenses carry the point better than one chart: a doughnut share beside a",
        "A status or board review needs the period \"on one screen\": 3 small charts of"
      ],
      "dontUse": [
        "One chart already makes the point — use C06.",
        "The panels compare the same measure across cuts — that is C07 (same type,",
        "The tiles would not share a question; four unrelated charts is a data dump,"
      ],
      "demoKind": "dashboard"
    },
    {
      "id": "S01",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Cover",
      "label": "Cover",
      "job": "Open with the title and one accent word",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "h1.cover-title",
        "p.cover-lede"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "cover"
    },
    {
      "id": "S02",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Big statement",
      "label": "Big statement",
      "job": "Land one message in huge type",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "statement display text"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "statement"
    },
    {
      "id": "S03",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Section divider",
      "label": "Section divider",
      "job": "Mark a chapter shift",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".dnum",
        ".dtitle"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "divider"
    },
    {
      "id": "S04",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Numbered list",
      "label": "Numbered list",
      "job": "Walk an ordered set of points",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "ol numbered list"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "list"
    },
    {
      "id": "S05",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Two-column split",
      "label": "Two-column split",
      "job": "Pair a message with its proof object",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "data-unpaper-lay=2",
        "card",
        "data-unpaper-chart"
      ],
      "elements": [
        "chart",
        "cards",
        "split"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "split"
    },
    {
      "id": "S06",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Soft cards",
      "label": "Soft cards",
      "job": "Group 2-3 parallel ideas as cards",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".cards",
        ".card",
        "data-unpaper-lay=3"
      ],
      "elements": [
        "cards"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "cards"
    },
    {
      "id": "S07",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Single chart",
      "label": "Single chart",
      "job": "Let one chart carry the point",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "data-unpaper-chart",
        ".chart",
        ".source"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "chart"
    },
    {
      "id": "S08",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Comparison table",
      "label": "Comparison table",
      "job": "Compare options across criteria",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "table.tbl",
        "thead",
        "tbody"
      ],
      "elements": [
        "table"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "table"
    },
    {
      "id": "S09",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "2×2 framework",
      "label": "2×2 framework",
      "job": "Position choices on two axes",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".matrix.axes",
        ".quad",
        ".mxlabel"
      ],
      "elements": [
        "2×2 matrix"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "framework"
    },
    {
      "id": "S10",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Pull quote",
      "label": "Pull quote",
      "job": "Let a voice make the point",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".pull quote",
        ".quote-by"
      ],
      "elements": [
        "callout"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "quote"
    },
    {
      "id": "S11",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Stat cards",
      "label": "Stat cards",
      "job": "Anchor the story in 2-3 numbers",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".stats",
        ".stat .v"
      ],
      "elements": [
        "stat row"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "stats"
    },
    {
      "id": "S12",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Process flow",
      "label": "Process flow",
      "job": "Show ordered steps",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".flow",
        "arrow connectors"
      ],
      "elements": [
        "flow"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "flow"
    },
    {
      "id": "S13",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Agenda",
      "label": "Agenda",
      "job": "Preview the deck's structure",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "numbered rows"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "agenda"
    },
    {
      "id": "S14",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Callout card",
      "label": "Callout card",
      "job": "Highlight one line worth remembering",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".callout",
        ".ci"
      ],
      "elements": [
        "callout"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "callout"
    },
    {
      "id": "S15",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Big number",
      "label": "Big number",
      "job": "One headline figure carries the slide",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".bignum .v",
        "bignum"
      ],
      "elements": [
        "stat row"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "bignum"
    },
    {
      "id": "S16",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Trend line",
      "label": "Trend line",
      "job": "Show change over time",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "data-unpaper-chart line",
        ".chart"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "chart-line"
    },
    {
      "id": "S17",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Share of whole",
      "label": "Share of whole",
      "job": "Show parts of a total",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "data-unpaper-chart doughnut",
        ".chart"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "chart-pie"
    },
    {
      "id": "S18",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Small multiples",
      "label": "Small multiples",
      "job": "Several charts, one scale",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".charts c3",
        "data-unpaper-chart"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "chart-multi"
    },
    {
      "id": "S19",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Chart pair",
      "label": "Chart pair",
      "job": "Two chart types answer one question",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".charts c2",
        "data-unpaper-chart"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "chart-pair"
    },
    {
      "id": "S20",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "KPI dashboard",
      "label": "KPI dashboard",
      "job": "One review slide, several visuals",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "data-unpaper-lay=quad",
        "data-unpaper-chart",
        ".stat"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "dashboard"
    },
    {
      "id": "S21",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Quad cards",
      "label": "Quad cards",
      "job": "Four parallel points in a 2×2",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "data-unpaper-lay=quad",
        "card"
      ],
      "elements": [
        "cards"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "quad-cards"
    },
    {
      "id": "S22",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Timeline / roadmap",
      "label": "Timeline / roadmap",
      "job": "Sequence work over time",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".timeline",
        ".tl-step",
        ".when"
      ],
      "elements": [
        "timeline"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "timeline"
    },
    {
      "id": "S23",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Before / after",
      "label": "Before / after",
      "job": "Contrast current and target",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "data-unpaper-lay=2",
        "two cards"
      ],
      "elements": [
        "cards",
        "split"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "before-after"
    },
    {
      "id": "S24",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Pros & cons",
      "label": "Pros & cons",
      "job": "Weigh a decision's trade-offs",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".proscons",
        ".pc.pro",
        ".pc.con"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "proscons"
    },
    {
      "id": "S25",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Free canvas",
      "label": "Free canvas",
      "job": "Compose freely inside the frame",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "bare frame",
        "absolute composition"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "canvas"
    },
    {
      "id": "S26",
      "family": "standard",
      "familyLabel": "Standard",
      "name": "Closing",
      "label": "Closing",
      "job": "End with the ask and next step",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "closing block"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "closing"
    },
    {
      "id": "D01",
      "family": "design",
      "familyLabel": "Design",
      "name": "Cover",
      "label": "Cover",
      "job": "Two or three words open the show",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "h1.cover-title",
        "p.cover-lede"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "cover"
    },
    {
      "id": "D02",
      "family": "design",
      "familyLabel": "Design",
      "name": "Spotlight",
      "label": "Spotlight",
      "job": "One huge line, one idea",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".spot",
        ".spot .sub"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "statement"
    },
    {
      "id": "D03",
      "family": "design",
      "familyLabel": "Design",
      "name": "Three principles",
      "label": "Three principles",
      "job": "Three numbered ideas, no boxes",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".principles",
        ".pr",
        ".pn"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "cards"
    },
    {
      "id": "D04",
      "family": "design",
      "familyLabel": "Design",
      "name": "Stat trio",
      "label": "Stat trio",
      "job": "Two or three big numbers on the stage",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".stats",
        ".stat .v"
      ],
      "elements": [
        "stat row"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "stats"
    },
    {
      "id": "D05",
      "family": "design",
      "familyLabel": "Design",
      "name": "Split moment",
      "label": "Split moment",
      "job": "A bold claim beside its support",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "data-unpaper-lay=2"
      ],
      "elements": [
        "split"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "split"
    },
    {
      "id": "D06",
      "family": "design",
      "familyLabel": "Design",
      "name": "Pull quote",
      "label": "Pull quote",
      "job": "A voice in lights",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".pull quote",
        ".quote-by"
      ],
      "elements": [
        "callout"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "quote"
    },
    {
      "id": "D07",
      "family": "design",
      "familyLabel": "Design",
      "name": "Section divider",
      "label": "Section divider",
      "job": "A quiet chapter break",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".dnum",
        ".dtitle"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "divider"
    },
    {
      "id": "D08",
      "family": "design",
      "familyLabel": "Design",
      "name": "Accent panel",
      "label": "Accent panel",
      "job": "A color panel stands in for an image",
      "tier": null,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".spotpanel",
        ".lab"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "D09",
      "family": "design",
      "familyLabel": "Design",
      "name": "Big number",
      "label": "Big number",
      "job": "One giant figure, one line under it",
      "tier": null,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "giant display numeral",
        "bignum"
      ],
      "elements": [
        "stat row"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": null
    },
    {
      "id": "D10",
      "family": "design",
      "familyLabel": "Design",
      "name": "Free canvas",
      "label": "Free canvas",
      "job": "Compose freely on the dark stage",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "bare frame",
        "absolute composition"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "canvas"
    },
    {
      "id": "D11",
      "family": "design",
      "familyLabel": "Design",
      "name": "Closing",
      "label": "Closing",
      "job": "End the show with the ask",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "closing block"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "closing"
    },
    {
      "id": "E01",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Cover",
      "label": "Cover",
      "job": "A masthead opens the issue",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".masthead",
        "h1.cover-title",
        ".cover-stand"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "cover"
    },
    {
      "id": "E02",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Contents",
      "label": "Contents",
      "job": "A numbered table of contents",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".contents",
        ".entry",
        ".en"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "contents"
    },
    {
      "id": "E03",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Section plate",
      "label": "Section plate",
      "job": "Full-bleed chapter plate, giant numeral",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".plate",
        ".pnum",
        ".ptitle"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "divider"
    },
    {
      "id": "E04",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Feature article",
      "label": "Feature article",
      "job": "A drop-cap article carries the argument",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".kicker",
        ".headline",
        ".dropcap",
        ".body"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "feature"
    },
    {
      "id": "E05",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Split feature",
      "label": "Split feature",
      "job": "An article beside its figure",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "data-unpaper-lay=2",
        ".figs"
      ],
      "elements": [
        "split"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "split"
    },
    {
      "id": "E06",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "The figures",
      "label": "The figures",
      "job": "The 2-3 numbers that matter",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".figs",
        ".fig .v"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "stats"
    },
    {
      "id": "E07",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Chart spread",
      "label": "Chart spread",
      "job": "A wide data spread for one chart",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".spread",
        "data-unpaper-chart",
        ".runhead"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "chart"
    },
    {
      "id": "E08",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Table spread",
      "label": "Table spread",
      "job": "A real table on a wide spread",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".spread",
        "table.tbl",
        "caption"
      ],
      "elements": [
        "table"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "table"
    },
    {
      "id": "E09",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Crossing-rule 2×2",
      "label": "Crossing-rule 2×2",
      "job": "One cross, four quadrants, no boxes",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".cross",
        ".cq",
        ".axlabel",
        "matrix"
      ],
      "elements": [
        "2×2 matrix"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "framework"
    },
    {
      "id": "E10",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Trend line",
      "label": "Trend line",
      "job": "Show change over time, journal-style",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "data-unpaper-chart line",
        ".chart"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "chart-line"
    },
    {
      "id": "E11",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Share of whole",
      "label": "Share of whole",
      "job": "Parts of a total, one clean chart",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "data-unpaper-chart doughnut",
        ".chart"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "chart-pie"
    },
    {
      "id": "E12",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Small multiples",
      "label": "Small multiples",
      "job": "Three small charts on one spread",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L3",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".spread",
        "data-unpaper-chart"
      ],
      "elements": [
        "chart"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "chart-multi"
    },
    {
      "id": "E13",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Big figure",
      "label": "Big figure",
      "job": "One oversized serif numeral",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".bignum .v",
        "bignum serif"
      ],
      "elements": [
        "stat row"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "bigfigure"
    },
    {
      "id": "E14",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Chronology",
      "label": "Chronology",
      "job": "A dated sequence — the editorial timeline",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "date rows",
        "kicker date",
        "timeline"
      ],
      "elements": [
        "timeline"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "chronology"
    },
    {
      "id": "E15",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Methodology",
      "label": "Methodology",
      "job": "State the research basis",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".body",
        "source notes"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "methodology"
    },
    {
      "id": "E16",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Pull quote",
      "label": "Pull quote",
      "job": "A serif line with one accent word",
      "tier": 2,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        ".bigquote",
        ".byline",
        "pull"
      ],
      "elements": [
        "callout"
      ],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "quote"
    },
    {
      "id": "E17",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Free canvas",
      "label": "Free canvas",
      "job": "Compose freely inside the journal frame",
      "tier": 3,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "bare frame",
        "absolute composition"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "canvas"
    },
    {
      "id": "E18",
      "family": "editorial",
      "familyLabel": "Editorial",
      "name": "Closing",
      "label": "Closing",
      "job": "Close the issue with the ask",
      "tier": 1,
      "mvp": false,
      "support": "native",
      "level": "L2",
      "ready": true,
      "compact": null,
      "tokens": null,
      "primitives": [
        "closing block"
      ],
      "elements": [],
      "useWhen": [],
      "dontUse": [],
      "demoKind": "closing"
    }
  ],
  "elements": [
    {
      "id": "chart-bar",
      "label": "Bar chart",
      "version": 1,
      "desc": "One bar chart: an inline SVG that renders and prints, with the numbers carried on data-unpaper-chart so the converter rebuilds it as a real chart.",
      "converts": "a native, data-editable PowerPoint bar chart with an embedded Excel sheet",
      "fragment": "<div class=\"chart\" data-unpaper-chart='{\"type\":\"bar\",\"categories\":[\"FY22\",\"FY23\",\"FY24\"],\"series\":[{\"name\":\"Enterprise ARR\",\"values\":[12,19,31],\"color\":\"15508C\"}],\"axis\":{\"min\":0,\"max\":35}}'>\n            <svg viewBox=\"0 0 420 300\"><line class=\"cgrid\" x1=\"0\" y1=\"250\" x2=\"420\" y2=\"250\" stroke-width=\"1.5\"/><rect class=\"cbar\" x=\"40\" y=\"164\" width=\"80\" height=\"86\" rx=\"2\"/><rect class=\"cbar\" x=\"170\" y=\"114\" width=\"80\" height=\"136\" rx=\"2\"/><rect class=\"cbar\" x=\"300\" y=\"28\" width=\"80\" height=\"222\" rx=\"2\"/><text class=\"ctick\" x=\"80\" y=\"276\" text-anchor=\"middle\">FY22</text><text class=\"ctick\" x=\"210\" y=\"276\" text-anchor=\"middle\">FY23</text><text class=\"ctick\" x=\"340\" y=\"276\" text-anchor=\"middle\">FY24</text></svg>\n          </div>",
      "usedBy": {
        "consulting": [
          "chart"
        ],
        "standard": [
          "chart"
        ]
      }
    },
    {
      "id": "chart-doughnut",
      "label": "Doughnut chart",
      "version": 1,
      "desc": "A share-of-whole doughnut: SVG drawn with the pathLength=100 dasharray recipe so the drawn shares match the data, which rides on data-unpaper-chart.",
      "converts": "a native, data-editable PowerPoint doughnut chart",
      "fragment": "<div class=\"chart\" data-unpaper-chart='{\"type\":\"doughnut\",\"categories\":[\"Enterprise\",\"Mid-market\",\"SMB\"],\"series\":[{\"name\":\"Share\",\"values\":[54,31,15]}],\"colors\":[\"15508C\",\"6E9BC5\",\"C7D6E6\"]}' style=\"flex:none;width:200px\">\n                <svg viewBox=\"0 0 42 42\" role=\"img\" aria-label=\"Revenue share by segment\">\n                  <circle cx=\"21\" cy=\"21\" r=\"15.9\" fill=\"none\" stroke=\"#C7D6E6\" stroke-width=\"6\"/>\n                  <circle cx=\"21\" cy=\"21\" r=\"15.9\" fill=\"none\" stroke=\"#6E9BC5\" stroke-width=\"6\" stroke-dasharray=\"31 69\" stroke-dashoffset=\"-54\" transform=\"rotate(-90 21 21)\"/>\n                  <circle cx=\"21\" cy=\"21\" r=\"15.9\" fill=\"none\" stroke=\"#15508C\" stroke-width=\"6\" stroke-dasharray=\"54 46\" transform=\"rotate(-90 21 21)\"/>\n                </svg>\n              </div>",
      "usedBy": {
        "consulting": [
          "chart-pair"
        ],
        "standard": [
          "chart-pie"
        ]
      }
    },
    {
      "id": "stat-row",
      "label": "Stat row",
      "version": 1,
      "desc": "Two to four big numbers with one-line captions — the fastest way to anchor a story in figures.",
      "converts": "native text boxes (each value and caption separately editable)",
      "fragment": "<div class=\"stats\">\n          <div class=\"stat\"><div class=\"v\">18%</div><div class=\"k\">Revenue growth, year on year.</div></div>\n          <div class=\"stat\"><div class=\"v\">3.2x</div><div class=\"k\">Enterprise ARR since FY22.</div></div>\n          <div class=\"stat\"><div class=\"v\">−40%</div><div class=\"k\">Cost to serve, after automation.</div></div>\n        </div>",
      "usedBy": {
        "consulting": [
          "stats"
        ],
        "standard": [
          "stats"
        ]
      }
    },
    {
      "id": "table",
      "label": "Comparison table",
      "version": 1,
      "desc": "A real <table> with thead/tbody — options × criteria, fills and borders.",
      "converts": "one native PowerPoint table object (cells, fills, borders, merges)",
      "fragment": "<table class=\"tbl\">\n          <thead><tr><th>Option</th><th>Cost</th><th class=\"num\">Time</th><th>Risk</th></tr></thead>\n          <tbody>\n            <tr><td>Build in-house</td><td>High</td><td class=\"num\">9 mo</td><td>High</td></tr>\n            <tr><td>Buy a platform</td><td>Medium</td><td class=\"num\">3 mo</td><td>Low</td></tr>\n            <tr><td>Partner</td><td>Low</td><td class=\"num\">6 mo</td><td>Medium</td></tr>\n          </tbody>\n        </table>",
      "usedBy": {
        "consulting": [
          "table"
        ]
      }
    },
    {
      "id": "scorecard",
      "label": "Harvey-ball scorecard",
      "version": 1,
      "desc": "Options × criteria with qualitative ratings: each cell carries data-unpaper-rating (0–1) plus an inline SVG ball drawn to match.",
      "converts": "native recolorable ring + pie freeforms per ball, native text labels",
      "fragment": "<div class=\"scorecard\">\n          <div class=\"sc-r sc-head\"><div class=\"sc-opt\">Option</div><div>Cost</div><div>Speed</div><div>Risk</div><div>Fit</div></div>\n          <div class=\"sc-r\"><div class=\"sc-opt\">Build in-house</div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"0.25\"></span></div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"0.25\"></span></div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"0.5\"></span></div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"1\"></span></div></div>\n          <div class=\"sc-r\"><div class=\"sc-opt\">Buy a platform</div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"0.5\"></span></div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"1\"></span></div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"0.75\"></span></div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"0.5\"></span></div></div>\n          <div class=\"sc-r\"><div class=\"sc-opt\">Partner</div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"1\"></span></div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"0.5\"></span></div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"0.5\"></span></div><div class=\"sc-cell\"><span class=\"hb\" data-unpaper-rating=\"0.75\"></span></div></div>\n        </div>",
      "usedBy": {
        "consulting": [
          "scorecard"
        ]
      }
    },
    {
      "id": "waterfall",
      "label": "Waterfall / bridge",
      "version": 1,
      "desc": "Running-total bars with thin connectors — baseline to outcome. Bars are positioned divs with baked px geometry (the running-total math is authored, not computed).",
      "converts": "native movable shapes per bar and connector, native text labels",
      "fragment": "<div class=\"wf\">\n          <!-- Start 90 → level 225 -->\n          <div class=\"wf-bar total\" style=\"left:55px;bottom:0;height:225px\"></div>\n          <div class=\"wf-val\" style=\"left:55px;bottom:229px\">90</div>\n          <div class=\"wf-cat\" style=\"left:55px\">Start</div>\n          <!-- Price +14: 90→104 (225→260) -->\n          <div class=\"wf-conn\" style=\"left:145px;width:90px;bottom:225px\"></div>\n          <div class=\"wf-bar up\" style=\"left:235px;bottom:225px;height:35px\"></div>\n          <div class=\"wf-val\" style=\"left:235px;bottom:264px\">+14</div>\n          <div class=\"wf-cat\" style=\"left:235px\">Price</div>\n          <!-- Mix -6: 104→98 (260→245) -->\n          <div class=\"wf-conn\" style=\"left:325px;width:90px;bottom:260px\"></div>\n          <div class=\"wf-bar down\" style=\"left:415px;bottom:245px;height:15px\"></div>\n          <div class=\"wf-val\" style=\"left:415px;bottom:264px\">&minus;6</div>\n          <div class=\"wf-cat\" style=\"left:415px\">Mix</div>\n          <!-- Volume +10: 98→108 (245→270) -->\n          <div class=\"wf-conn\" style=\"left:505px;width:90px;bottom:245px\"></div>\n          <div class=\"wf-bar up\" style=\"left:595px;bottom:245px;height:25px\"></div>\n          <div class=\"wf-val\" style=\"left:595px;bottom:274px\">+10</div>\n          <div class=\"wf-cat\" style=\"left:595px\">Volume</div>\n          <!-- Cost -8: 108→100 (270→250) -->\n          <div class=\"wf-conn\" style=\"left:685px;width:90px;bottom:270px\"></div>\n          <div class=\"wf-bar down\" style=\"left:775px;bottom:250px;height:20px\"></div>\n          <div class=\"wf-val\" style=\"left:775px;bottom:274px\">&minus;8</div>\n          <div class=\"wf-cat\" style=\"left:775px\">Cost</div>\n          <!-- End 100 → level 250 -->\n          <div class=\"wf-conn\" style=\"left:865px;width:90px;bottom:250px\"></div>\n          <div class=\"wf-bar total\" style=\"left:955px;bottom:0;height:250px\"></div>\n          <div class=\"wf-val\" style=\"left:955px;bottom:254px\">100</div>\n          <div class=\"wf-cat\" style=\"left:955px\">End</div>\n        </div>",
      "usedBy": {
        "consulting": [
          "waterfall"
        ]
      }
    },
    {
      "id": "flow",
      "label": "Process flow",
      "version": 1,
      "desc": "Ordered step nodes with arrows between them.",
      "converts": "native node shapes + arrow freeforms + native text",
      "fragment": "<div class=\"flow\">\n          <div class=\"node\"><div class=\"ci\">Step 1</div><h3>Diagnose</h3></div>\n          <svg class=\"arrow\" viewBox=\"0 0 64 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"2\" y1=\"12\" x2=\"54\" y2=\"12\"/><polyline points=\"46 5 56 12 46 19\"/></svg>\n          <div class=\"node\"><div class=\"ci\">Step 2</div><h3>Pilot</h3></div>\n          <svg class=\"arrow\" viewBox=\"0 0 64 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"2\" y1=\"12\" x2=\"54\" y2=\"12\"/><polyline points=\"46 5 56 12 46 19\"/></svg>\n          <div class=\"node\"><div class=\"ci\">Step 3</div><h3>Scale</h3></div>\n          <svg class=\"arrow\" viewBox=\"0 0 64 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"2\" y1=\"12\" x2=\"54\" y2=\"12\"/><polyline points=\"46 5 56 12 46 19\"/></svg>\n          <div class=\"node\"><div class=\"ci\">Step 4</div><h3>Embed</h3></div>\n        </div>",
      "usedBy": {
        "consulting": [
          "flow"
        ],
        "standard": [
          "flow"
        ]
      }
    },
    {
      "id": "matrix",
      "label": "2×2 matrix",
      "version": 1,
      "desc": "Four quadrants on two labeled axes — the classic prioritisation frame.",
      "converts": "native quadrant shapes + native text (axis labels included)",
      "fragment": "<div class=\"matrix axes\">\n          <div class=\"quad hot\"><div class=\"ql\">High value · Low effort</div><h4>Do now</h4><p>The obvious wins — start here.</p></div>\n          <div class=\"quad\"><div class=\"ql\">High value · High effort</div><h4>Plan</h4><p>Worth it, but resource it properly.</p></div>\n          <div class=\"quad\"><div class=\"ql\">Low value · Low effort</div><h4>Maybe</h4><p>Fill-ins, only if idle capacity.</p></div>\n          <div class=\"quad\"><div class=\"ql\">Low value · High effort</div><h4>Drop</h4><p>Politely decline.</p></div>\n          <div class=\"mxlabel top\">Higher value &uarr;</div>\n          <div class=\"mxlabel low\">Lower effort</div>\n          <div class=\"mxlabel high\">Higher effort</div>\n        </div>",
      "usedBy": {
        "consulting": [
          "framework"
        ],
        "standard": [
          "framework"
        ]
      }
    }
  ]
}
