Enhance bmad-brainstorming: goal facet, proven grouping, convergence, icon sidecar
Catalog (brain-methods.csv -> 108 methods): - Add provenance / good_for / audience columns (additive, backward-compatible) - Add 8 researched classic methods: How Might We, Job to Be Done, Empathy Map, Backcasting, TRIZ Contradiction, Fishbone Diagram, Build on What Works, Scenario Cross Selector page (brain.py generator): - "Proven & Professional" lead group (29 named methods, cross-category) - Super-group ordering (Structured/Creative/Wild/Introspective) replacing alphabetical - "Great for" goal filter driven by good_for tags - Per-category "Invent a ... technique" cards reusing the invent flow Convergence: - New references/converge.md (diverge -> converge -> finalize); wired into SKILL.md Maintainability: - Extract category + technique icons to assets/brain-icons.json; brain.py loads the sidecar, with logic and fallbacks staying in code (8 new icons added, full coverage) Docs: - Add analysis/ (catalog-analysis.md + method-matrix.csv): the 4-axis review behind these changes All 52 tests pass.
This commit is contained in:
parent
49eda560d9
commit
0e4199afc9
|
|
@ -62,12 +62,16 @@ For **Facilitator** and **Creative Partner**. (In **Ideate for me** you pick and
|
|||
|
||||
Most sessions arrive with a batch already composed on the page — run it as given (each technique's full text is in the paste; no `list`/`show` needed). Two parts of a paste delegate back to you:
|
||||
|
||||
- **`invent N`** (Inventive Flow) — invent N brand-new techniques on the fly; announce the order, log each one's name + description, and offer to save a keeper to `{workflow.additional_techniques}` at wrap-up.
|
||||
- **`invent N`** (Inventive Flow) — invent N brand-new techniques on the fly. A line may scope an invention (`invent 1 new technique in the spirit of <category>`, from the page's per-category invent card) — when it does, honor that category's spirit. Announce the order, log each one's name + description, and offer to save a keeper to `{workflow.additional_techniques}` at wrap-up.
|
||||
- **`you choose N`** (Facilitator Chosen) — pick N techniques fitting the goal, `{workflow.favorite_techniques}` first; confirm exact names with a scoped `python3 {skill-root}/scripts/brain.py --file {workflow.brain_methods} list --category <cat>`. Never pull the library whole into context.
|
||||
|
||||
If they didn't use the page, load `references/in-chat-techniques.md` and pick the batch in chat (**3–4 is the sweet spot**).
|
||||
|
||||
Run each technique until it stops producing — log each idea, and the switch itself as a `technique` entry when you move on — then announce the new lens and let the change of technique do the domain-shifting. When the batch is spent, offer another or go to `## Wrap-Up`.
|
||||
Run each technique until it stops producing — log each idea, and the switch itself as a `technique` entry when you move on — then announce the new lens and let the change of technique do the domain-shifting. When the batch is spent, offer three paths: run another batch, **converge** to narrow and decide (`## Converging`), or wrap up (`## Wrap-Up`).
|
||||
|
||||
## Converging
|
||||
|
||||
The catalog is all *divergent* — built to generate. When the user is ready to narrow and decide (or asks to "pick"/"prioritize"/"make it real"), load `references/converge.md` and follow it; it ends by handing off to `## Wrap-Up`. Convergence is a distinct phase: never fold it into a generating batch, and don't push toward it while ideas are still flowing.
|
||||
|
||||
## Resuming
|
||||
|
||||
|
|
@ -75,4 +79,4 @@ Picking up an existing session instead of starting fresh: load `references/resum
|
|||
|
||||
## Wrap-Up
|
||||
|
||||
Load `references/finalize.md`: synthesis, `status: complete`, artifacts.
|
||||
Load `references/finalize.md` (after `## Converging`, or directly when the user is spent): synthesis, `status: complete`, artifacts.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,239 @@
|
|||
# BMad Brainstorming Catalog — Deep Analysis
|
||||
|
||||
> Analysis of the brainstorming library (`assets/brain-methods.csv`) and the selection
|
||||
> experience (`assets/brain-selector.html`, generated by `scripts/brain.py`). Companion
|
||||
> data: `method-matrix.csv` (every method tagged on 4 axes).
|
||||
>
|
||||
> **Status (implemented, uncommitted for review):** CSV extended with `provenance` /
|
||||
> `good_for` / `audience` columns; 8 researched `classic` methods added (108 total);
|
||||
> `brain.py` now renders a "Proven & Professional" lead group, super-group ordering, a
|
||||
> "Great for" goal filter, and a per-category "Invent a … technique" card; convergence
|
||||
> shipped as `references/converge.md` (diverge → converge → finalize) and wired into
|
||||
> `SKILL.md`. Sections below are the rationale.
|
||||
|
||||
---
|
||||
|
||||
## 1. TL;DR
|
||||
|
||||
The catalog is strong, distinctive, and well-built. The opportunities are not "more methods" so much as **navigation and intent**:
|
||||
|
||||
1. **The selector sorts categories alphabetically.** There is no ordering/grouping layer, so the well-known professional methods (SCAMPER, Six Hats, Five Whys, etc.) are scattered across four categories and buried below `Absurdist` and `Biomimetic`. Enterprise users meet whimsy before they meet anything they recognize. → **Add a grouping + ordering layer; lead with a "Proven & Professional" group.**
|
||||
2. **Nothing connects the user's stated goal to technique choice.** The skill asks for the goal up front but then offers an alphabetical wall. The single highest-value addition is a **goal → technique affinity layer** so "I'm adding a feature to a brownfield app" surfaces a different short-list than "planning a sabbatical."
|
||||
3. **The catalog is 100% divergent (generative).** There is essentially no *convergence* (prioritize / cluster / decide). This is partly a sound principle and partly a real gap — see §5.
|
||||
4. **Real overlap exists**, but it's mostly "same cognitive move, different costume." Four mechanisms (perspective-shift, constraint, analogy, inversion) account for ~60 of 100 methods; sensory, questioning, systems, and time-shift are comparatively thin.
|
||||
5. **Descriptions should stay terse** — the brevity is correct. Only two targeted fixes are warranted: the `collaborative` category silently assumes multiple humans, and ~10 "vibe-only" methods lack an output anchor.
|
||||
6. **Per-category "invent on the fly" is a good idea** — but implement it as a generated synthetic card per section, not 13 near-duplicate CSV rows.
|
||||
|
||||
---
|
||||
|
||||
## 2. Method — how this was analyzed
|
||||
|
||||
Each of the 100 methods was tagged on **four independent axes** (see `method-matrix.csv`). Category alone only captures *aesthetic/mechanism*; these four axes are what expose grouping, overlap, gaps, and the goal-routing opportunity.
|
||||
|
||||
| Axis | Values | Answers |
|
||||
|---|---|---|
|
||||
| **Provenance** | `classic` · `signature` · `playful` | What goes in the enterprise "proven" group? |
|
||||
| **Mechanism** (primary + secondary) | inversion · analogy · perspective · constraint · decomposition · time-shift · systems · sensory · questioning · combination · provocation · convergence | Where is the catalog redundant vs thin? |
|
||||
| **Goal affinity** (multi) | feature · novel · personal · strategy · planning · diagnosis · unstuck | Given the user's goal, what should we recommend? |
|
||||
| **Audience** | solo · group · either | What breaks in a 1:1 user+LLM session? |
|
||||
|
||||
---
|
||||
|
||||
## 3. Findings
|
||||
|
||||
### 3a. Provenance — the "proven & professional" set exists, but is scattered
|
||||
|
||||
The methods an innovation consultant or enterprise facilitator would recognize by name are spread across `structured`, `deep`, `creative`, and `collaborative`. The **canonical core (~22)**:
|
||||
|
||||
> SCAMPER · Six Thinking Hats · Mind Mapping · Lotus Blossom · Crazy 8s · Disney Method ·
|
||||
> Starbursting · Morphological Analysis · Five Whys · Laddering · Causal Loop Mapping ·
|
||||
> First Principles · Reverse Brainstorming · Assumption Reversal · Worst Possible Idea ·
|
||||
> Provocation (PO) · Question Storming · Brainwriting/Round Robin · Yes-And · Random Stimulation ·
|
||||
> Role Playing · Analogical Thinking
|
||||
|
||||
A second tier is *recognizable-adjacent* (Concept Blending, Forced Relationships, Decision Tree, Solution Matrix, Failure Analysis/pre-mortem, Devil's Advocate, 1000x Budget). Everything else is `signature` (BMad-original, serious) or `playful` (the delight layer — `wild`, `absurdist`, `theatrical`, much of `quantum`/`cultural`).
|
||||
|
||||
**Recommendation — lead with "Proven & Professional."** Three ways to implement (pick in review):
|
||||
|
||||
- **Option A — Tag + generated lead section (recommended).** Add a `provenance` column to the CSV. `brain.py` renders a synthetic **"Proven & Professional"** section *first* (pulling all `classic`-tagged methods, cross-category), then the existing categories grouped and ordered (see §7). A method keeps its home category and also appears in the lead group. Pro: zero loss of mechanism categorization; enterprise sees credibility first. Con: those ~22 methods appear twice on the browse page (arguably fine — or filter them out of their home category).
|
||||
- **Option B — New `classic` category.** Move the ~22 into a single first category. Pro: simplest. Con: destroys the mechanism grouping (SCAMPER is *also* structured; Five Whys is *also* deep), and the category becomes a grab-bag.
|
||||
- **Option C — Two-level groups only, no provenance tag.** Reorder the 13 categories into super-groups (§7) so "serious" comes first, but don't pull classics out. Pro: cleanest data model. Con: doesn't actually cluster the *named* methods — they stay scattered within their categories.
|
||||
|
||||
My pick: **A.** It satisfies "professional methods grouped and shown first" literally, without flattening the taxonomy that makes the rest of the catalog shine.
|
||||
|
||||
### 3b. Mechanism — the catalog has four over-served "spines"
|
||||
|
||||
Primary-mechanism distribution across the 100:
|
||||
|
||||
| Mechanism | ~count | Read |
|
||||
|---|---|---|
|
||||
| **perspective-shift** | ~18 | Over-served. Role Playing, Six Hats, Persona, Alien, Ancestor Council, Inner Child, Future Self, Drunk Uncle, Golden Retriever, Infomercial… all "adopt another viewpoint," differentiated only by *who*. |
|
||||
| **constraint** | ~16 | Over-served. What If, the entire `constraint` category, 1000x, Post-Scarcity, Parallel Universe, Zombie, Quantum Tunneling, Permission Giving… all "add/remove/exaggerate a limit." |
|
||||
| **analogy / transfer** | ~12 | Healthy. Analogical, Metaphor, Cross-Pollination, Trait Transfer, Nature's Solutions, Fusion Cuisine, Proverb, Random Stimulation. |
|
||||
| **inversion** | ~11 | Healthy but clustered. Reverse, Assumption Reversal, Worst Idea, Anti-Solution, Failure Analysis, Devil's Advocate, Cursed Genie, Villain's Monologue, Trickster. |
|
||||
| **combination** | ~9 | Fine. |
|
||||
| **decomposition** | ~9 | Fine. |
|
||||
| **systems / emergence** | ~7 | Thin-ish (concentrated in `quantum`/`biomimetic`). |
|
||||
| **time-shift** | ~6 | Thin. |
|
||||
| **questioning** | ~5 | Thin. |
|
||||
| **sensory / intuitive** | ~5 | Thin (all in `introspective_delight`). |
|
||||
| **convergence** | ~1 | **Effectively absent** (only Superposition Collapse). See §5. |
|
||||
|
||||
**Takeaway:** the redundancy is not a defect to delete — the *costume* (a villain's monologue vs. a courtroom vs. "make it worse") is exactly what makes a 30th inversion technique feel fresh to a user. But a curator should know the catalog leans hard on perspective + constraint, and that **convergence is the one genuinely empty cell.** New methods (§6) should target the thin cells, not the spines.
|
||||
|
||||
### 3c. Goal affinity — the headline missing capability
|
||||
|
||||
`SKILL.md` already opens with *"what are we brainstorming, and what's the goal?"* — but that goal never routes technique selection. Mapping the matrix's `goal_affinity` tags gives a ready recommendation table. This is what powers "AI picks N" intelligently and what an enterprise user wants:
|
||||
|
||||
| Goal | Strong default techniques (lead picks **bold**) |
|
||||
|---|---|
|
||||
| **Build a feature** (greenfield/brownfield) | **First Principles**, **SCAMPER**, **Morphological Analysis**, Crazy 8s, Solution Matrix, Reverse Brainstorming, One Feature Only, Ship in 60 Minutes, Chaos Engineering, Cursed Genie (edge cases), Persona Journey, *+ new: Job to Be Done, Follow the Anomaly* |
|
||||
| **Novel concept / new product** | **Concept Blending**, **Cross-Pollination**, **Forced Relationships**, What If, Trait Transfer, Nature's Solutions, Fusion Cuisine, Emerging Tech Collision, Crank the Dial to 11, Quantum Tunneling |
|
||||
| **Personal / life decision** | **Future Self Interview**, **Values Archaeology**, **Laddering**, Six Hats, Ancestor Council, Proverb Mining, Mythic Frameworks, the `introspective_delight` set, *+ new: Build on What Works* |
|
||||
| **Strategy / positioning** | **Six Thinking Hats**, **Failure Analysis** (pre-mortem), Field Lines, Ecosystem Thinking, Utopia vs Dystopia, 1000x Budget, Disney Method, Relativity Frame Shift, Infomercial at 3AM, Predator & Prey |
|
||||
| **Concrete planning** (event/project) | **Mind Mapping**, **Lotus Blossom**, Morphological Analysis, Decision Tree, Six Hats, $0 Mandate, Constraint Roulette, Time Horizon Ladder |
|
||||
| **Root-cause / diagnosis** | **Five Whys**, **Causal Loop Mapping**, Failure Analysis, Constraint Mapping, Question Storming, Starbursting, Anti-Solution, Alien Anthropologist |
|
||||
| **Get unstuck / break fixation** | **Random Stimulation**, **Provocation**, **Worst Possible Idea**, Crank the Dial to 11, Constraint Roulette, Three Rounds of Stupid, Drunk History, most of `wild`/`absurdist`/`theatrical` |
|
||||
|
||||
**Recommendation:** persist this as machine-readable affinity (a `goals` column on the CSV, sourced from `method-matrix.csv`), then (1) have the skill recommend a batch from the up-front goal, and (2) let the composer page filter/highlight "great for: [your goal]." This is the single change that most improves both enterprise and casual use.
|
||||
|
||||
### 3d. Audience — the `collaborative` category quietly assumes a room of people
|
||||
|
||||
5 of the 8 `collaborative` methods (Round Robin, Relay Race, Hot Potato, Fold the Paper, Steal & Upgrade) are written for *multiple humans passing artifacts*. In the default 1:1 user+LLM session they don't translate without the coach silently reinterpreting them. This is the one place the catalog can mislead. Options: tag `audience`, and either (a) add a one-clause solo adaptation to each, or (b) have the skill note "this one shines with a group" when picked solo. Low effort, removes the only real footgun.
|
||||
|
||||
### 3e. Description anchoring — keep terse, fix ~12 specifically
|
||||
|
||||
The deliberate brevity is **right** — the gist + a creative LLM beats over-specification, and it matches the catalog's house style. Do **not** bulk-expand. Two surgical passes only:
|
||||
|
||||
1. **Group-dependent `collaborative` methods** (§3d) — add a short solo-mode clause or an audience tag.
|
||||
2. **~10 "vibe-only" methods** where the *evocation is great but the output is ambiguous*, so different LLM runs would diverge wildly: e.g. **Field Lines**, **Observer Effect**, **Guerrilla Gardening Ideas**, **Emergent Thinking**, **Entanglement Thinking**, **Elemental Forces**. A tiny "…so that ___" outcome clause anchors the deliverable without killing the brevity. Example: *Guerrilla Gardening Ideas* → add "…**so you surface where an unsanctioned, low-visibility pilot could prove the idea before anyone can veto it**."
|
||||
|
||||
Everything crisp (Five Whys, SCAMPER, First Principles, Crazy 8s) stays untouched.
|
||||
|
||||
---
|
||||
|
||||
## 4. Quick wins vs structural changes
|
||||
|
||||
| Change | Effort | Impact | Type |
|
||||
|---|---|---|---|
|
||||
| Goal→technique affinity (`goals` column + recommendation) | Med | **High** | structural |
|
||||
| "Proven & Professional" lead group + category ordering | Med | **High** (enterprise) | structural |
|
||||
| Per-category "invent in the spirit" card (§6) | Low | Med | quick win |
|
||||
| Convergence mini-set (§5) | Low–Med | Med–High | structural (philosophy) |
|
||||
| `audience` tag + collaborative fix (§3d) | Low | Med | quick win |
|
||||
| ~12 description anchors (§3e) | Low | Low–Med | quick win |
|
||||
| New gap-filling methods (§6) | Low | Med | additive |
|
||||
|
||||
---
|
||||
|
||||
## 5. Divergent vs convergent — the answer, and a recommendation
|
||||
|
||||
**What it is.** Divergent = generate (quantity, novelty, breadth). Convergent = evaluate, cluster, prioritize, decide. A complete creative process needs both (cf. the Double Diamond, Osborn-Parnes CPS): diverge wide, *then* converge to a choice.
|
||||
|
||||
**Where the catalog stands.** All 100 methods are divergent. `SKILL.md` explicitly enforces divergence ("resist concluding… the urge to organize is the enemy of divergence"), and the only convergent-flavored technique is Quantum → *Superposition Collapse*. Synthesis is deferred entirely to `references/finalize.md` at wrap-up.
|
||||
|
||||
**Is that a mistake?** Mostly a *good instinct taken to a defensible extreme.* Separating generation from judgment is the foundational brainstorming rule — premature convergence is the #1 killer of ideas, so a divergence-pure generator is legitimate. But the consequence is that the user has **no technique to pick when they're ready to narrow** — they hit "100 ideas" and the tool's stance is "keep going," with only the wrap-up doing light synthesis. For project/feature/life-decision work especially, people *do* want to land.
|
||||
|
||||
**Recommendation — add a small, fenced convergence set, never mixed into the divergent flow.** Keep divergence pure during generation; offer convergence only at wrap-up or on explicit request ("okay, help me narrow"). Concretely: a new `converge` category (4 methods, §6), tagged `mechanism=convergence`, surfaced by `finalize.md` / on demand — not in the default 3–4 sweet-spot batch. This completes the loop while honoring the separate-generation-from-judgment principle. **This is a philosophy decision for you to confirm** — it's the one recommendation that changes what the skill *is*, not just what's in the library.
|
||||
|
||||
---
|
||||
|
||||
## 6. Proposed new methods (fill the thin cells)
|
||||
|
||||
Targeting the under-served mechanisms (§3b), the empty convergence cell (§5), and the goal gaps (§3c). CSV-style (`category, name, description`) so they can drop straight in:
|
||||
|
||||
**Feature/product & enterprise gaps (mechanism: questioning/decomposition):**
|
||||
- `structured, Job to Be Done, "Ask what the user is really hiring this to do; brainstorm around that underlying job, not the feature you assumed"`
|
||||
- `structured, Empathy Map, "Map what the user says, thinks, does, and feels around the problem; mine each quadrant for the unmet need hiding there"`
|
||||
- `deep, Follow the Anomaly, "Start from one surprising number or outlier and ideate only from what would explain it or exploit it"`
|
||||
|
||||
**Strengths-based (the missing positive frame — Appreciative Inquiry is a glaring classic-tier omission):**
|
||||
- `deep, Build on What Works, "Name what's already succeeding and why, then ideate how to amplify and extend it instead of fixing what's broken"`
|
||||
|
||||
**Convergence set (new `converge` category — only if §5 is adopted):**
|
||||
- `converge, Impact Effort Triage, "Plot every idea by impact against effort; harvest the high-impact, low-effort quadrant first and quarantine the rest"`
|
||||
- `converge, Forced Ranking, "Make the ideas fight: each must beat another to survive to a ranked top-N, no ties allowed"`
|
||||
- `converge, NUF Test, "Score each idea New, Useful, Feasible 1-10; the totals expose the quiet winners and the dazzling dead-ends"`
|
||||
- `converge, Affinity Clustering, "Group the raw ideas into themes, name each cluster, then ideate fresh at the theme level"`
|
||||
|
||||
(Optional, lower priority: `structured, Storyboarding` for sequenced/experience ideation.)
|
||||
|
||||
---
|
||||
|
||||
## 7. Category roster & ordering recommendations
|
||||
|
||||
**Ordering (replace alphabetical with a deliberate progression):** add a `CATEGORY_ORDER` + `GROUP` map in `brain.py` (mirroring the existing `_HUES` map — derived for the shipped set, alphabetical fallback for custom catalogs). Proposed super-groups, in order:
|
||||
|
||||
1. **Proven & Professional** — the `classic` lead section (§3a, Option A)
|
||||
2. **Structured & Analytical** — structured, deep
|
||||
3. **Creative & Generative** — creative, biomimetic, cultural, speculative_future, quantum
|
||||
4. **Wild & Playful** — wild, absurdist, theatrical, constraint
|
||||
5. **Introspective & Personal** — introspective_delight, collaborative
|
||||
6. **Decide & Converge** — converge *(if §5 adopted)*
|
||||
|
||||
**Roster notes:**
|
||||
- No category should be deleted. The overlap (§3b) is intentional costume variety.
|
||||
- `quantum` and `cultural` are the most abstract/uneven — a couple of their members (Field Lines, Observer Effect) are the vaguest in the whole set; anchor per §3e rather than cut.
|
||||
- `constraint` is excellent and tight — leave as is.
|
||||
|
||||
---
|
||||
|
||||
## 8. Per-category "invent in the spirit of this category"
|
||||
|
||||
You asked whether each category should also offer an on-the-fly invented technique in its own spirit. **Yes — but don't add 13 near-duplicate rows to the CSV.** The composer already has a global **Invent N** stepper, and `brain.py` already generates section markup from the catalog. So:
|
||||
|
||||
> Have `brain.py` append **one synthetic card per category section** — a dashed "✨ Invent a *{Category}* technique" card. Selecting it emits a paste directive like `invent 1 (in the spirit of {category})`, reused by the existing Inventive-Flow plumbing in `SKILL.md` (which already handles `invent N` and offering keepers to `additional_techniques`).
|
||||
|
||||
Benefits: CSV stays a clean library of *real* techniques; behavior is consistent everywhere; it leverages plumbing that already exists; and it gives the user the "surprise me, but on-theme" affordance per category without library bloat.
|
||||
|
||||
---
|
||||
|
||||
## 9. Open decisions for BMad (in priority order)
|
||||
|
||||
1. **Goal-affinity layer** — adopt the `goals` column + recommendation routing? (Highest impact.)
|
||||
2. **Proven & Professional grouping** — Option A (tag + generated lead section, recommended), B, or C? (§3a)
|
||||
3. **Convergence** — add the fenced `converge` set, or stay divergence-pure? (§5 — philosophy decision.)
|
||||
4. **New methods** — approve the §6 set? Which ones?
|
||||
5. **Per-category invent card** — approve the generated-card approach? (§8)
|
||||
6. **Description anchoring** — approve the targeted ~12 (incl. collaborative fix), keep everything else terse? (§3e)
|
||||
7. **Category ordering / super-groups** — adopt §7?
|
||||
|
||||
Once you mark these, the implementation is: extend the CSV schema (`provenance`, `good_for`, `audience` columns — additive, backward-compatible with `brain.py`'s `DictReader`), add the ordering/grouping + synthetic-card logic to `brain.py`, regenerate `brain-selector.html`, update the relevant `SKILL.md` / `references/*` flow, and run `scripts/tests/`.
|
||||
|
||||
---
|
||||
|
||||
## 10. Revised convergence architecture (per BMad direction)
|
||||
|
||||
**Decision locked:** convergence is **not** a CSV category of selectable cards. It's a **reference phase**, mirroring `references/finalize.md`. The catalog stays a pure *divergent* library; convergence lives in `references/converge.md`.
|
||||
|
||||
**Flow:** diverge (pick & run techniques) → **converge** (`references/converge.md`, on demand or once divergence is spent) → **finalize** (`references/finalize.md`, last). The coach already does ad-hoc convergence implicitly; this makes it an explicit, repeatable phase, and `converge.md` ends by instructing the coach to load `finalize.md` to synthesize and produce artifacts.
|
||||
|
||||
`references/converge.md` contents — a tight set of real, established convergence moves (the coach picks what fits, never dumps a menu):
|
||||
|
||||
- **Affinity Clustering (KJ method)** — group the raw ideas into themes, name each cluster, surface the through-line.
|
||||
- **Dot Voting / Multivoting** — heat-map the favorites; discuss why the hot spots are hot.
|
||||
- **Impact–Effort Matrix** — plot each idea on impact vs effort; harvest high-impact/low-effort first.
|
||||
- **NUF Test** — score New, Useful, Feasible (1–10 each); totals expose quiet winners and dazzling dead-ends.
|
||||
- **PMI (Plus / Minus / Interesting)** — de Bono's fast evaluator for pressure-testing a single strong candidate.
|
||||
- *(optional)* **MoSCoW** (Must/Should/Could/Won't) for product scoping; **Nominal Group Technique** when it's genuinely a group.
|
||||
|
||||
`SKILL.md` change: at the point where a divergent batch is spent, offer "keep diverging / converge & decide / wrap up" — "converge & decide" loads `converge.md`; wrap-up still goes to `finalize.md`.
|
||||
|
||||
## 11. Researched gap-filling additions (real, established methods)
|
||||
|
||||
Web-researched (sources below), chosen to fill the **thin mechanism cells** (questioning, diagnosis, time-shift, empathy) — *not* the over-served spines — and all `classic`-tier, so they also strengthen the "Proven & Professional" group. CSV-style, ready to drop in:
|
||||
|
||||
| Category | Technique | Gist (house style) | Fills |
|
||||
|---|---|---|---|
|
||||
| structured | **How Might We** | "Reframe the problem as a batch of 'How might we…' opportunity questions first, then ideate against the sharpest one" | questioning / problem-framing (design-thinking staple, currently absent) |
|
||||
| deep | **TRIZ Contradiction** | "Name the core contradiction — what only improves by making something else worse — then brainstorm ways to win both instead of trading off" | engineering/feature (no systematic technical method today) |
|
||||
| deep | **Fishbone Diagram** | "Branch the problem's spine into cause categories — people, process, tools, environment — and mine each bone for contributing causes" | diagnosis (named classic complementing Five Whys / Causal Loop) |
|
||||
| structured | **Backcasting** | "Fix the finished future in vivid detail, then work backward step by step to the one move you'd have to make first" | strategy/planning time-shift (serious counterpart to playful future methods) |
|
||||
| speculative_future | **Scenario Cross** | "Pick two high-impact uncertainties, cross them into four futures, and ideate the move that wins in every one" | strategy (2×2 scenario planning — the serious sibling of the playful speculative set) |
|
||||
| structured | **Job to Be Done** | "Ask what the user is really hiring this to do, then ideate around that underlying job, not the feature you assumed" | feature/empathy (enterprise staple) |
|
||||
| structured | **Empathy Map** | "Map what the user says, thinks, does, and feels around the problem; mine each quadrant for the unmet need" | empathy/feature |
|
||||
| deep | **Build on What Works** | "Name what's already succeeding and why, then ideate how to amplify and extend it instead of fixing what's broken" | strengths-based (Appreciative Inquiry — a glaring classic-tier omission) |
|
||||
|
||||
Deliberately **not** added (would deepen an already over-served spine or duplicate): Synectics (≈ analogy/metaphor), SWOT (analysis, not ideation), Rolestorming (≈ Role Playing), Brainwalking/Braindumping (≈ Brainwriting), Pre-mortem (≈ Failure Analysis).
|
||||
|
||||
**Sources:** [IxDF — essential ideation techniques](https://ixdf.org/literature/article/introduction-to-the-essential-ideation-techniques-which-are-the-heart-of-design-thinking) · [Quality Magazine — TRIZ](https://www.qualitymag.com/articles/98566-triz-the-backbone-of-innovation-and-problem-solving) · [ASQ — Fishbone/Ishikawa](https://asq.org/quality-resources/fishbone) · [Futures Platform — 2×2 scenario matrix](https://www.futuresplatform.com/blog/2x2-scenario-planning-matrix-guideline) · [NN/g — Dot Voting](https://www.nngroup.com/articles/dot-voting/) · [Quality Gurus — divergent vs convergent](https://www.qualitygurus.com/divergent-vs-convergent-thinking/)
|
||||
|
|
@ -0,0 +1,109 @@
|
|||
category,technique,provenance,mechanism_primary,mechanism_secondary,goal_affinity,audience
|
||||
collaborative,Yes And Building,classic,combination,perspective,novel|unstuck|planning,group
|
||||
collaborative,Brain Writing Round Robin,classic,combination,decomposition,novel|feature,group
|
||||
collaborative,Random Stimulation,classic,analogy,,unstuck|novel,either
|
||||
collaborative,Role Playing,classic,perspective,,strategy|personal|feature,either
|
||||
collaborative,Ideation Relay Race,playful,combination,,unstuck,group
|
||||
collaborative,Idea Hot Potato,playful,combination,,unstuck,group
|
||||
collaborative,Steal And Upgrade,signature,combination,analogy,novel|unstuck,group
|
||||
collaborative,Fold The Paper,playful,combination,,unstuck|novel,group
|
||||
creative,What If Scenarios,signature,constraint,,novel|strategy|unstuck,either
|
||||
creative,Analogical Thinking,signature,analogy,,feature|novel|diagnosis,either
|
||||
creative,First Principles Thinking,classic,decomposition,,feature|novel|diagnosis|strategy,either
|
||||
creative,Forced Relationships,signature,combination,analogy,novel|unstuck,either
|
||||
creative,Time Shifting,signature,time-shift,perspective,novel|unstuck,either
|
||||
creative,Metaphor Mapping,signature,analogy,,novel|diagnosis,either
|
||||
creative,Cross-Pollination,signature,analogy,,novel|feature|strategy,either
|
||||
creative,Concept Blending,signature,combination,,novel,either
|
||||
creative,Reverse Brainstorming,classic,inversion,,diagnosis|feature|unstuck,either
|
||||
creative,Sensory Exploration,signature,sensory,,novel|unstuck,either
|
||||
deep,Five Whys,classic,questioning,,diagnosis,either
|
||||
deep,Provocation Technique,classic,provocation,inversion,unstuck|novel,either
|
||||
deep,Assumption Reversal,classic,inversion,,novel|diagnosis|strategy,either
|
||||
deep,Question Storming,classic,questioning,,diagnosis|strategy|unstuck,either
|
||||
deep,Constraint Mapping,signature,constraint,decomposition,feature|strategy|diagnosis,either
|
||||
deep,Failure Analysis,signature,inversion,diagnosis,diagnosis|strategy|feature,either
|
||||
deep,Emergent Thinking,signature,systems,,strategy|novel,either
|
||||
deep,Causal Loop Mapping,classic,systems,,diagnosis|strategy,either
|
||||
deep,Morphological Analysis,classic,decomposition,combination,feature|novel|planning,either
|
||||
deep,Laddering,classic,questioning,decomposition,personal|strategy|diagnosis,either
|
||||
introspective_delight,Inner Child Conference,signature,perspective,sensory,personal|unstuck,solo
|
||||
introspective_delight,Shadow Work Mining,signature,sensory,,personal|diagnosis,solo
|
||||
introspective_delight,Values Archaeology,signature,questioning,,personal|strategy,solo
|
||||
introspective_delight,Future Self Interview,signature,perspective,time-shift,personal,solo
|
||||
introspective_delight,Body Wisdom Dialogue,signature,sensory,,personal,solo
|
||||
introspective_delight,Permission Giving,signature,provocation,constraint,personal|unstuck,solo
|
||||
introspective_delight,Secret Wish Confession,signature,sensory,,personal,solo
|
||||
introspective_delight,Mood Weather Report,signature,sensory,,personal|unstuck,solo
|
||||
structured,SCAMPER Method,classic,combination,decomposition,feature|novel,either
|
||||
structured,Six Thinking Hats,classic,perspective,,strategy|diagnosis|planning|personal,either
|
||||
structured,Decision Tree Mapping,signature,decomposition,,planning|strategy|diagnosis,either
|
||||
structured,Solution Matrix,signature,decomposition,,feature|planning,either
|
||||
structured,Trait Transfer,signature,analogy,,novel|feature,either
|
||||
structured,Lotus Blossom,classic,decomposition,,feature|planning|novel,either
|
||||
structured,Worst Possible Idea,classic,inversion,,unstuck|novel,either
|
||||
structured,Disney Method,classic,perspective,,feature|strategy|planning,either
|
||||
structured,Starbursting,classic,questioning,,feature|planning|diagnosis,either
|
||||
structured,Mind Mapping,classic,decomposition,,planning|novel|feature,either
|
||||
structured,Crazy 8s,classic,combination,,feature|novel|unstuck,either
|
||||
theatrical,Time Travel Talk Show,playful,perspective,time-shift,novel|personal,either
|
||||
theatrical,Alien Anthropologist,playful,perspective,,diagnosis|unstuck|strategy,either
|
||||
theatrical,Dream Fusion Laboratory,signature,constraint,time-shift,novel|unstuck,either
|
||||
theatrical,Emotion Orchestra,playful,sensory,perspective,personal|strategy,either
|
||||
theatrical,Parallel Universe Cafe,playful,constraint,,novel|unstuck,either
|
||||
theatrical,Persona Journey,signature,perspective,,feature|strategy,either
|
||||
theatrical,Devil's Advocate Courtroom,signature,inversion,perspective,strategy|diagnosis,group
|
||||
wild,Chaos Engineering,signature,inversion,constraint,feature|diagnosis|strategy,either
|
||||
wild,Guerrilla Gardening Ideas,playful,analogy,,strategy|unstuck,either
|
||||
wild,Pirate Code Brainstorm,playful,combination,analogy,novel|unstuck,either
|
||||
wild,Zombie Apocalypse Planning,playful,constraint,,feature|strategy|unstuck,either
|
||||
wild,Drunk History Retelling,playful,perspective,,unstuck|diagnosis,either
|
||||
wild,Anti-Solution,signature,inversion,,diagnosis|unstuck,either
|
||||
wild,Elemental Forces,playful,perspective,analogy,novel|unstuck,either
|
||||
biomimetic,Nature's Solutions,signature,analogy,,feature|novel,either
|
||||
biomimetic,Ecosystem Thinking,signature,systems,,strategy|diagnosis,either
|
||||
biomimetic,Evolutionary Pressure,signature,systems,,feature|novel,either
|
||||
biomimetic,Predator & Prey,signature,perspective,inversion,strategy|feature,either
|
||||
biomimetic,Metamorphosis Stages,signature,time-shift,decomposition,novel|strategy,either
|
||||
biomimetic,Swarm Logic,signature,systems,,feature|strategy,either
|
||||
quantum,Observer Effect,signature,systems,perspective,strategy|diagnosis,either
|
||||
quantum,Entanglement Thinking,signature,systems,,diagnosis|strategy,either
|
||||
quantum,Superposition Collapse,signature,convergence,decomposition,strategy|diagnosis,either
|
||||
quantum,Relativity Frame Shift,signature,perspective,,strategy|novel,either
|
||||
quantum,Field Lines,signature,systems,,strategy,either
|
||||
quantum,Quantum Tunneling,signature,constraint,,unstuck|novel,either
|
||||
cultural,Indigenous Wisdom,signature,perspective,analogy,personal|strategy|novel,either
|
||||
cultural,Fusion Cuisine,signature,combination,analogy,novel,either
|
||||
cultural,Ritual Innovation,signature,analogy,,novel|personal,either
|
||||
cultural,Mythic Frameworks,signature,analogy,perspective,strategy|personal|novel,either
|
||||
cultural,Proverb Mining,signature,analogy,,personal|strategy,either
|
||||
cultural,Ancestor Council,signature,perspective,,personal|strategy,either
|
||||
cultural,Trickster's Gambit,playful,inversion,provocation,unstuck|strategy,either
|
||||
absurdist,Villain's Monologue,playful,inversion,perspective,diagnosis|strategy|unstuck,either
|
||||
absurdist,Explain It to a Golden Retriever,playful,perspective,,unstuck|diagnosis|feature,either
|
||||
absurdist,Infomercial at 3AM,playful,perspective,,strategy|novel,either
|
||||
absurdist,Drunk Uncle at Thanksgiving,playful,perspective,,unstuck|diagnosis,either
|
||||
absurdist,Cursed Genie,playful,inversion,,diagnosis|feature,either
|
||||
absurdist,Three Rounds of Stupid,playful,provocation,,unstuck|novel,either
|
||||
constraint,Kill the Crown Jewel,signature,constraint,,feature|strategy|unstuck,either
|
||||
constraint,1000x Budget,signature,constraint,,novel|strategy,either
|
||||
constraint,Ship in 60 Minutes,signature,constraint,,feature|planning|unstuck,either
|
||||
constraint,The $0 Mandate,signature,constraint,,planning|strategy|feature,either
|
||||
constraint,One Feature Only,signature,constraint,,feature|strategy,either
|
||||
constraint,Crank the Dial to 11,signature,constraint,,novel|unstuck,either
|
||||
constraint,Constraint Roulette,signature,constraint,,unstuck|feature,either
|
||||
speculative_future,Time Horizon Ladder,signature,time-shift,,strategy|planning|novel,either
|
||||
speculative_future,Post-Scarcity Test,signature,constraint,,novel|strategy,either
|
||||
speculative_future,Utopia vs Dystopia Split-Screen,signature,perspective,inversion,strategy|diagnosis,either
|
||||
speculative_future,Sci-Fi Artifact From the Future,signature,time-shift,perspective,novel|feature,either
|
||||
speculative_future,Emerging Tech Collision,signature,combination,,novel|feature|strategy,either
|
||||
speculative_future,What-If-The-World-Changed Card Flip,signature,constraint,,novel|unstuck,either
|
||||
speculative_future,Future Anthropologist Dig,signature,time-shift,perspective,strategy|novel,either
|
||||
structured,How Might We,classic,questioning,,feature|novel|strategy|diagnosis,either
|
||||
structured,Job to Be Done,classic,perspective,questioning,feature|strategy|novel,either
|
||||
structured,Empathy Map,classic,perspective,,feature|personal,either
|
||||
structured,Backcasting,classic,time-shift,,strategy|planning|novel,either
|
||||
deep,TRIZ Contradiction,classic,inversion,decomposition,feature|novel|diagnosis,either
|
||||
deep,Fishbone Diagram,classic,decomposition,systems,diagnosis,either
|
||||
deep,Build on What Works,classic,perspective,systems,personal|strategy,either
|
||||
speculative_future,Scenario Cross,classic,constraint,systems,strategy|planning,either
|
||||
|
|
|
@ -0,0 +1,166 @@
|
|||
{
|
||||
"categories": {
|
||||
"creative": {
|
||||
"hue": "#6d5cf0",
|
||||
"glyph": "<g stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"><line x1=\"22\" y1=\"6.5\" x2=\"22\" y2=\"12.5\"/><line x1=\"22\" y1=\"31.5\" x2=\"22\" y2=\"37.5\"/><line x1=\"6.5\" y1=\"22\" x2=\"12.5\" y2=\"22\"/><line x1=\"31.5\" y1=\"22\" x2=\"37.5\" y2=\"22\"/><line x1=\"11.3\" y1=\"11.3\" x2=\"15.5\" y2=\"15.5\"/><line x1=\"28.5\" y1=\"28.5\" x2=\"32.7\" y2=\"32.7\"/><line x1=\"32.7\" y1=\"11.3\" x2=\"28.5\" y2=\"15.5\"/><line x1=\"15.5\" y1=\"28.5\" x2=\"11.3\" y2=\"32.7\"/></g><circle cx=\"22\" cy=\"22\" r=\"6.6\" fill=\"currentColor\" fill-opacity=\"0.25\"/><circle cx=\"22\" cy=\"22\" r=\"3.6\" fill=\"currentColor\"/>"
|
||||
},
|
||||
"deep": {
|
||||
"hue": "#4658c9",
|
||||
"glyph": "<g fill=\"none\" stroke=\"currentColor\"><circle cx=\"22\" cy=\"22\" r=\"13\" stroke-width=\"1.5\" stroke-opacity=\"0.4\"/><circle cx=\"22\" cy=\"22\" r=\"9\" stroke-width=\"1.7\" stroke-opacity=\"0.7\"/><circle cx=\"22\" cy=\"22\" r=\"5\" stroke-width=\"1.9\"/></g><circle cx=\"22\" cy=\"22\" r=\"2.4\" fill=\"currentColor\"/>"
|
||||
},
|
||||
"structured": {
|
||||
"hue": "#3b6ea5",
|
||||
"glyph": "<g fill=\"currentColor\"><rect x=\"11\" y=\"11\" width=\"9.5\" height=\"9.5\" rx=\"2\"/><rect x=\"23.5\" y=\"11\" width=\"9.5\" height=\"9.5\" rx=\"2\" fill-opacity=\"0.25\"/><rect x=\"11\" y=\"23.5\" width=\"9.5\" height=\"9.5\" rx=\"2\" fill-opacity=\"0.25\"/><rect x=\"23.5\" y=\"23.5\" width=\"9.5\" height=\"9.5\" rx=\"2\"/></g>"
|
||||
},
|
||||
"quantum": {
|
||||
"hue": "#2b86d9",
|
||||
"glyph": "<g stroke=\"currentColor\" stroke-width=\"1.8\" fill=\"none\"><ellipse cx=\"22\" cy=\"22\" rx=\"14.5\" ry=\"6\" transform=\"rotate(28 22 22)\"/><ellipse cx=\"22\" cy=\"22\" rx=\"14.5\" ry=\"6\" transform=\"rotate(-28 22 22)\"/></g><circle cx=\"22\" cy=\"22\" r=\"6.6\" fill=\"currentColor\" fill-opacity=\"0.18\"/><circle cx=\"22\" cy=\"22\" r=\"3.4\" fill=\"currentColor\"/><circle cx=\"33.2\" cy=\"17.4\" r=\"2\" fill=\"currentColor\"/>"
|
||||
},
|
||||
"speculative_future": {
|
||||
"hue": "#0fb5c9",
|
||||
"glyph": "<g stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"><path d=\"M11 31 L 26.5 15.5\"/><path d=\"M20 14.5 H 28 V 22.5\"/></g><circle cx=\"31\" cy=\"12\" r=\"2.8\" fill=\"currentColor\"/><g stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"><line x1=\"31\" y1=\"6.5\" x2=\"31\" y2=\"8.4\"/><line x1=\"31\" y1=\"15.6\" x2=\"31\" y2=\"17.5\"/><line x1=\"25.5\" y1=\"12\" x2=\"27.4\" y2=\"12\"/><line x1=\"34.6\" y1=\"12\" x2=\"36.5\" y2=\"12\"/></g>"
|
||||
},
|
||||
"collaborative": {
|
||||
"hue": "#15a3a3",
|
||||
"glyph": "<g stroke=\"currentColor\" stroke-width=\"1.8\"><line x1=\"14\" y1=\"16\" x2=\"30\" y2=\"16\"/><line x1=\"14\" y1=\"16\" x2=\"22\" y2=\"30\"/><line x1=\"30\" y1=\"16\" x2=\"22\" y2=\"30\"/></g><g fill=\"currentColor\" fill-opacity=\"0.22\"><circle cx=\"14\" cy=\"16\" r=\"4.6\"/><circle cx=\"30\" cy=\"16\" r=\"4.6\"/><circle cx=\"22\" cy=\"30\" r=\"4.6\"/></g><g fill=\"currentColor\"><circle cx=\"14\" cy=\"16\" r=\"2.4\"/><circle cx=\"30\" cy=\"16\" r=\"2.4\"/><circle cx=\"22\" cy=\"30\" r=\"2.4\"/></g>"
|
||||
},
|
||||
"biomimetic": {
|
||||
"hue": "#1f9d6b",
|
||||
"glyph": "<path d=\"M22 7.5 C 31.5 12.5, 31.5 29, 22 36.5 C 12.5 29, 12.5 12.5, 22 7.5 Z\" fill=\"currentColor\" fill-opacity=\"0.22\"/><path d=\"M22 9 V 35.5\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\"/><g stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"><path d=\"M22 16 l5.6 -2.6\"/><path d=\"M22 16 l-5.6 -2.6\"/><path d=\"M22 22 l6.6 -2.6\"/><path d=\"M22 22 l-6.6 -2.6\"/><path d=\"M22 28 l5.6 -2.6\"/><path d=\"M22 28 l-5.6 -2.6\"/></g>"
|
||||
},
|
||||
"constraint": {
|
||||
"hue": "#d9882b",
|
||||
"glyph": "<g stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"><path d=\"M17 11 H 11 V 17\"/><path d=\"M27 11 H 33 V 17\"/><path d=\"M17 33 H 11 V 27\"/><path d=\"M27 33 H 33 V 27\"/></g><circle cx=\"22\" cy=\"22\" r=\"5\" fill=\"currentColor\" fill-opacity=\"0.25\"/><circle cx=\"22\" cy=\"22\" r=\"2.6\" fill=\"currentColor\"/>"
|
||||
},
|
||||
"wild": {
|
||||
"hue": "#e2562f",
|
||||
"glyph": "<path d=\"M24.5 6.5 L 12.5 24 H 19.5 L 17.5 37.5 L 31.5 18.5 H 24 L 24.5 6.5 Z\" fill=\"currentColor\"/>"
|
||||
},
|
||||
"cultural": {
|
||||
"hue": "#c75b39",
|
||||
"glyph": "<circle cx=\"22\" cy=\"22\" r=\"13.5\" fill=\"currentColor\" fill-opacity=\"0.14\"/><g stroke=\"currentColor\" stroke-width=\"1.6\" fill=\"none\"><circle cx=\"22\" cy=\"22\" r=\"13.5\"/><ellipse cx=\"22\" cy=\"22\" rx=\"6\" ry=\"13.5\"/><line x1=\"8.5\" y1=\"22\" x2=\"35.5\" y2=\"22\"/><path d=\"M11 15 H 33\" stroke-opacity=\"0.55\"/><path d=\"M11 29 H 33\" stroke-opacity=\"0.55\"/></g>"
|
||||
},
|
||||
"theatrical": {
|
||||
"hue": "#cf4d6f",
|
||||
"glyph": "<path d=\"M13 12 H 31 V 22 C 31 30, 27 35, 22 35 C 17 35, 13 30, 13 22 Z\" fill=\"currentColor\" fill-opacity=\"0.18\"/><path d=\"M13 12 H 31 V 22 C 31 30, 27 35, 22 35 C 17 35, 13 30, 13 22 Z\" stroke=\"currentColor\" stroke-width=\"1.8\" fill=\"none\"/><g fill=\"currentColor\"><circle cx=\"18.5\" cy=\"21\" r=\"1.7\"/><circle cx=\"25.5\" cy=\"21\" r=\"1.7\"/></g><path d=\"M18 27 C 20 29.5, 24 29.5, 26 27\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\"/>"
|
||||
},
|
||||
"absurdist": {
|
||||
"hue": "#e0529c",
|
||||
"glyph": "<g transform=\"rotate(-12 22 22)\"><circle cx=\"22\" cy=\"22\" r=\"13\" fill=\"currentColor\" fill-opacity=\"0.14\"/><circle cx=\"22\" cy=\"22\" r=\"13\" stroke=\"currentColor\" stroke-width=\"1.6\" fill=\"none\"/><path d=\"M16 19 q 2 -2.4 4 0\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\"/><circle cx=\"26.5\" cy=\"18.8\" r=\"1.8\" fill=\"currentColor\"/><path d=\"M16.5 26 C 19 30, 25 30, 28 24.5\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\"/></g>"
|
||||
},
|
||||
"introspective_delight": {
|
||||
"hue": "#b15ad6",
|
||||
"glyph": "<circle cx=\"22\" cy=\"13.5\" r=\"4\" fill=\"currentColor\"/><path d=\"M10.5 31 C 12.5 23, 31.5 23, 33.5 31 Z\" fill=\"currentColor\" fill-opacity=\"0.22\"/><path d=\"M10.5 31 C 12.5 23, 31.5 23, 33.5 31\" stroke=\"currentColor\" stroke-width=\"1.7\" fill=\"none\"/><path d=\"M13.5 30 C 16 26.5, 20 25.5, 22 25.5 C 24 25.5, 28 26.5, 30.5 30\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-opacity=\"0.6\"/>"
|
||||
}
|
||||
},
|
||||
"techniques": {
|
||||
"Yes And Building": "<g fill=\"currentColor\"><rect x=\"8\" y=\"27\" width=\"12\" height=\"8\" rx=\"1.5\" fill-opacity=\".8\"/><rect x=\"14\" y=\"19\" width=\"12\" height=\"8\" rx=\"1.5\" fill-opacity=\".5\"/><rect x=\"20\" y=\"11\" width=\"12\" height=\"8\" rx=\"1.5\"/></g>",
|
||||
"Brain Writing Round Robin": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M31 16 A10 10 0 1 0 32.5 22\"/><path d=\"M31 10 L31.5 16.3 L25 16.5\"/></g>",
|
||||
"Random Stimulation": "<rect x=\"11\" y=\"11\" width=\"22\" height=\"22\" rx=\"4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><g fill=\"currentColor\"><circle cx=\"17\" cy=\"17\" r=\"1.8\"/><circle cx=\"27\" cy=\"17\" r=\"1.8\"/><circle cx=\"22\" cy=\"22\" r=\"1.8\"/><circle cx=\"17\" cy=\"27\" r=\"1.8\"/><circle cx=\"27\" cy=\"27\" r=\"1.8\"/></g>",
|
||||
"Role Playing": "<rect x=\"11\" y=\"9\" width=\"22\" height=\"26\" rx=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><circle cx=\"22\" cy=\"19\" r=\"4\" fill=\"currentColor\"/><path d=\"M15.5 30 c2 -4.5 11 -4.5 13 0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>",
|
||||
"Ideation Relay Race": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"31\" x2=\"27\" y2=\"16\"/><line x1=\"8\" y1=\"22\" x2=\"14\" y2=\"22\" stroke-opacity=\".5\"/><line x1=\"8\" y1=\"27\" x2=\"13\" y2=\"27\" stroke-opacity=\".35\"/></g><circle cx=\"29\" cy=\"14\" r=\"3.4\" fill=\"currentColor\"/>",
|
||||
"Idea Hot Potato": "<path d=\"M11 31 Q22 8 33 31\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-dasharray=\"2 3.5\" stroke-linecap=\"round\"/><circle cx=\"22\" cy=\"12.5\" r=\"4.2\" fill=\"currentColor\"/>",
|
||||
"Steal And Upgrade": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 33 V14\"/><path d=\"M13 21 L20 14 L27 21\"/></g><path d=\"M30 27 l1 2.6 2.6 1 -2.6 1 -1 2.6 -1 -2.6 -2.6 -1 2.6 -1 z\" fill=\"currentColor\"/>",
|
||||
"Fold The Paper": "<path d=\"M13 16 L21 12 V28 L13 32 Z\" fill=\"currentColor\" fill-opacity=\".22\"/><path d=\"M21 12 L29 16 V32 L21 28 Z\" fill=\"currentColor\" fill-opacity=\".45\"/><path d=\"M13 16 L21 12 L29 16 M21 12 V28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>",
|
||||
"What If Scenarios": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M18 17 a4 4 0 1 1 4 4 v3\"/></g><circle cx=\"22\" cy=\"30\" r=\"1.6\" fill=\"currentColor\"/>",
|
||||
"Analogical Thinking": "<circle cx=\"15\" cy=\"22\" r=\"6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><rect x=\"25\" y=\"16\" width=\"12\" height=\"12\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M19 20 q2 2 0 4 M23 20 q-2 2 0 4\" stroke=\"currentColor\" stroke-width=\"1.6\" fill=\"none\"/>",
|
||||
"First Principles Thinking": "<g fill=\"currentColor\"><rect x=\"10\" y=\"28\" width=\"8\" height=\"6\" rx=\"1\"/><rect x=\"18.5\" y=\"28\" width=\"8\" height=\"6\" rx=\"1\"/><rect x=\"27\" y=\"28\" width=\"7\" height=\"6\" rx=\"1\"/></g><path d=\"M22 25 L22 11 M16 17 L22 11 L28 17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
|
||||
"Forced Relationships": "<circle cx=\"12\" cy=\"22\" r=\"3.4\" fill=\"currentColor\"/><circle cx=\"32\" cy=\"22\" r=\"3.4\" fill=\"currentColor\"/><path d=\"M15 22 q7 -9 14 0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-dasharray=\"1.5 3\"/>",
|
||||
"Time Shifting": "<circle cx=\"22\" cy=\"22\" r=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M22 15 V22 L27 25\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>",
|
||||
"Metaphor Mapping": "<rect x=\"10\" y=\"14\" width=\"14\" height=\"14\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><circle cx=\"28\" cy=\"25\" r=\"7\" fill=\"currentColor\" fill-opacity=\".22\"/><circle cx=\"28\" cy=\"25\" r=\"7\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>",
|
||||
"Cross-Pollination": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M13 14 H27 a4 4 0 0 1 0 8 H17 a4 4 0 0 0 0 8 H31\"/><path d=\"M28 11 L31.5 14 L28 17 M16 27 L12.5 30 L16 33\"/></g>",
|
||||
"Concept Blending": "<circle cx=\"18\" cy=\"22\" r=\"8\" fill=\"currentColor\" fill-opacity=\".25\"/><circle cx=\"26\" cy=\"22\" r=\"8\" fill=\"currentColor\" fill-opacity=\".25\"/><g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"18\" cy=\"22\" r=\"8\"/><circle cx=\"26\" cy=\"22\" r=\"8\"/></g>",
|
||||
"Reverse Brainstorming": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M13 18 H28 a4 4 0 0 1 0 8 H16\"/><path d=\"M19 15 L13 18 L19 21 M22 23 L16 26 L22 29\"/></g>",
|
||||
"Sensory Exploration": "<path d=\"M10 22 q12 -10 24 0 q-12 10 -24 0 z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"/><circle cx=\"22\" cy=\"22\" r=\"4\" fill=\"currentColor\"/>",
|
||||
"Five Whys": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"14\" cy=\"13\" r=\"2.4\"/><circle cx=\"22\" cy=\"22\" r=\"2.4\"/><circle cx=\"30\" cy=\"31\" r=\"2.4\"/><path d=\"M15.6 14.8 L20.4 20.2 M23.6 23.8 L28.4 29.2\"/></g>",
|
||||
"Provocation Technique": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M24 9 L13 24 H21 L19 35 L31 19 H23 Z\"/></g>",
|
||||
"Assumption Reversal": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M16 14 V30\"/><path d=\"M11.5 25 L16 30 L20.5 25\"/><path d=\"M28 30 V14\"/><path d=\"M23.5 19 L28 14 L32.5 19\"/></g>",
|
||||
"Question Storming": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 16 a3.2 3.2 0 1 1 3.2 3.2 v2\"/><path d=\"M26 13 a3.6 3.6 0 1 1 3.6 3.6 v2.4\"/></g><circle cx=\"17.2\" cy=\"27\" r=\"1.5\" fill=\"currentColor\"/><circle cx=\"29.6\" cy=\"25.6\" r=\"1.6\" fill=\"currentColor\"/>",
|
||||
"Constraint Mapping": "<path d=\"M11 14 L18 12 L26 14 L33 12 V30 L26 32 L18 30 L11 32 Z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"/><path d=\"M18 12 V30 M26 14 V32\" stroke=\"currentColor\" stroke-width=\"1.6\"/>",
|
||||
"Failure Analysis": "<circle cx=\"20\" cy=\"20\" r=\"8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><line x1=\"26\" y1=\"26\" x2=\"33\" y2=\"33\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"/><path d=\"M20 16 V21 M20 24 V24\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>",
|
||||
"Emergent Thinking": "<g fill=\"currentColor\"><circle cx=\"11\" cy=\"31\" r=\"1.6\"/><circle cx=\"17\" cy=\"29\" r=\"1.6\"/><circle cx=\"16\" cy=\"23\" r=\"1.6\"/><circle cx=\"22\" cy=\"24\" r=\"1.8\"/><circle cx=\"23\" cy=\"17\" r=\"1.9\"/><circle cx=\"29\" cy=\"18\" r=\"1.7\"/><circle cx=\"28\" cy=\"12\" r=\"2.1\"/></g>",
|
||||
"Causal Loop Mapping": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M16 16 a9 9 0 1 1 -2 12\"/><path d=\"M16 10.5 L16.5 16.5 L10.5 17\"/><path d=\"M30 28.5 L29.5 22.5 L35 22\"/></g>",
|
||||
"Morphological Analysis": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><rect x=\"11\" y=\"11\" width=\"22\" height=\"22\" rx=\"2\"/><path d=\"M11 18.3 H33 M11 25.6 H33 M18.3 11 V33 M25.6 11 V33\"/></g><rect x=\"18.5\" y=\"18.5\" width=\"7\" height=\"7\" fill=\"currentColor\" fill-opacity=\".4\"/>",
|
||||
"Laddering": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M16 9 V35 M28 9 V35 M16 15 H28 M16 22 H28 M16 29 H28\"/></g>",
|
||||
"Inner Child Conference": "<circle cx=\"22\" cy=\"16\" r=\"6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M22 22 V31\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/><path d=\"M19 34 q3 -3 6 0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\"/><g fill=\"currentColor\"><circle cx=\"20\" cy=\"15\" r=\"1\"/><circle cx=\"24\" cy=\"15\" r=\"1\"/></g>",
|
||||
"Shadow Work Mining": "<circle cx=\"22\" cy=\"22\" r=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M22 10 a12 12 0 0 1 0 24 z\" fill=\"currentColor\" fill-opacity=\".85\"/>",
|
||||
"Values Archaeology": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M10 16 h24\" stroke-opacity=\".4\"/><path d=\"M10 22 h24\" stroke-opacity=\".6\"/></g><path d=\"M22 24 L16 30 L22 36 L28 30 Z\" fill=\"currentColor\"/>",
|
||||
"Future Self Interview": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 10 H30 L24 22 L30 34 H14 L20 22 Z\"/></g><path d=\"M18 14 H26\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>",
|
||||
"Body Wisdom Dialogue": "<path d=\"M22 33 C12 26 9 19 13.5 15 C17 12 21 14 22 17 C23 14 27 12 30.5 15 C35 19 32 26 22 33 Z\" fill=\"currentColor\" fill-opacity=\".22\"/><path d=\"M22 33 C12 26 9 19 13.5 15 C17 12 21 14 22 17 C23 14 27 12 30.5 15 C35 19 32 26 22 33 Z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>",
|
||||
"Permission Giving": "<rect x=\"10\" y=\"14\" width=\"24\" height=\"16\" rx=\"2.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M15 23 L19 27 L28 17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
|
||||
"Secret Wish Confession": "<rect x=\"13\" y=\"20\" width=\"18\" height=\"14\" rx=\"2.5\" fill=\"currentColor\" fill-opacity=\".22\"/><rect x=\"13\" y=\"20\" width=\"18\" height=\"14\" rx=\"2.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M16.5 20 v-3 a5.5 5.5 0 0 1 11 0 v3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>",
|
||||
"Mood Weather Report": "<circle cx=\"17\" cy=\"17\" r=\"4.5\" fill=\"currentColor\" fill-opacity=\".5\"/><path d=\"M22 30 a5 5 0 0 1 0.5 -10 a6 6 0 0 1 11 2.5 a4 4 0 0 1 -1.5 7.5 z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"/>",
|
||||
"SCAMPER Method": "<circle cx=\"22\" cy=\"22\" r=\"5.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><g stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"><path d=\"M22 9 V13.5 M22 30.5 V35 M9 22 H13.5 M30.5 22 H35 M12.8 12.8 L16 16 M28 28 L31.2 31.2 M31.2 12.8 L28 16 M16 28 L12.8 31.2\"/></g>",
|
||||
"Six Thinking Hats": "<path d=\"M14 26 q8 -5 16 0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/><path d=\"M17 26 q-6 1 -8 3 q13 4 26 0 q-2 -2 -8 -3\" fill=\"currentColor\" fill-opacity=\".22\"/><path d=\"M17 26 c-1 -8 11 -8 10 0\" fill=\"currentColor\" fill-opacity=\".5\"/>",
|
||||
"Decision Tree Mapping": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"22\" cy=\"12\" r=\"2.6\"/><circle cx=\"14\" cy=\"32\" r=\"2.6\"/><circle cx=\"30\" cy=\"32\" r=\"2.6\"/><path d=\"M22 14.5 L22 20 M22 20 L14 29.4 M22 20 L30 29.4\"/></g>",
|
||||
"Solution Matrix": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><rect x=\"11\" y=\"11\" width=\"22\" height=\"22\" rx=\"2\"/><path d=\"M11 22 H33 M22 11 V33\"/></g><path d=\"M24.5 14.5 L26.5 16.5 L30.5 12.5\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
|
||||
"Trait Transfer": "<path d=\"M12 16 l1.6 3.4 3.6 .4 -2.7 2.5 .7 3.6 -3.2 -1.8 -3.2 1.8 .7 -3.6 -2.7 -2.5 3.6 -.4 z\" fill=\"currentColor\"/><rect x=\"25\" y=\"23\" width=\"9\" height=\"9\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M17 22 L25 27\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-dasharray=\"1.5 2.5\"/>",
|
||||
"Lotus Blossom": "<g fill=\"currentColor\"><circle cx=\"22\" cy=\"22\" r=\"3.4\"/></g><g fill=\"currentColor\" fill-opacity=\".4\"><circle cx=\"22\" cy=\"13\" r=\"2.8\"/><circle cx=\"22\" cy=\"31\" r=\"2.8\"/><circle cx=\"13\" cy=\"22\" r=\"2.8\"/><circle cx=\"31\" cy=\"22\" r=\"2.8\"/><circle cx=\"15.5\" cy=\"15.5\" r=\"2.5\"/><circle cx=\"28.5\" cy=\"15.5\" r=\"2.5\"/><circle cx=\"15.5\" cy=\"28.5\" r=\"2.5\"/><circle cx=\"28.5\" cy=\"28.5\" r=\"2.5\"/></g>",
|
||||
"Worst Possible Idea": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17 11 v10 h-5 l10 12 10 -12 h-5 v-10 z\"/></g>",
|
||||
"Disney Method": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"14\" cy=\"22\" r=\"4.5\"/><circle cx=\"22\" cy=\"22\" r=\"4.5\"/><circle cx=\"30\" cy=\"22\" r=\"4.5\"/></g>",
|
||||
"Starbursting": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 8 V15 M22 29 V36 M8 22 H15 M29 22 H36 M12 12 L17 17 M27 27 L32 32 M32 12 L27 17 M12 32 L17 27\"/></g><path d=\"M19.5 19 a3.2 3.2 0 1 1 3 4 v1.2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\"/>",
|
||||
"Mind Mapping": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"22\" cy=\"22\" r=\"4\"/><circle cx=\"11\" cy=\"13\" r=\"2.2\"/><circle cx=\"33\" cy=\"13\" r=\"2.2\"/><circle cx=\"10\" cy=\"28\" r=\"2.2\"/><circle cx=\"32\" cy=\"31\" r=\"2.2\"/><path d=\"M19 19.5 L12.5 14.5 M25 19.5 L31.5 14.5 M19 24.5 L11.5 27 M25.5 24 L30.5 29.5\"/></g>",
|
||||
"Crazy 8s": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\"><rect x=\"9\" y=\"12\" width=\"8\" height=\"9\" rx=\"1.5\"/><rect x=\"18\" y=\"12\" width=\"8\" height=\"9\" rx=\"1.5\"/><rect x=\"27\" y=\"12\" width=\"8\" height=\"9\" rx=\"1.5\"/><rect x=\"9\" y=\"23\" width=\"8\" height=\"9\" rx=\"1.5\"/><rect x=\"18\" y=\"23\" width=\"8\" height=\"9\" rx=\"1.5\"/><rect x=\"27\" y=\"23\" width=\"8\" height=\"9\" rx=\"1.5\"/></g>",
|
||||
"Time Travel Talk Show": "<rect x=\"18\" y=\"9\" width=\"8\" height=\"15\" rx=\"4\" fill=\"currentColor\" fill-opacity=\".25\"/><rect x=\"18\" y=\"9\" width=\"8\" height=\"15\" rx=\"4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M14 21 a8 8 0 0 0 16 0 M22 29 V34 M17 34 H27\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>",
|
||||
"Alien Anthropologist": "<ellipse cx=\"22\" cy=\"30\" rx=\"13\" ry=\"4.5\" fill=\"currentColor\" fill-opacity=\".25\"/><path d=\"M22 11 c7 0 10 6 10 11 c0 5 -5 7 -10 7 c-5 0 -10 -2 -10 -7 c0 -5 3 -11 10 -11 z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><g fill=\"currentColor\"><ellipse cx=\"18\" cy=\"22\" rx=\"1.6\" ry=\"2.4\"/><ellipse cx=\"26\" cy=\"22\" rx=\"1.6\" ry=\"2.4\"/></g>",
|
||||
"Dream Fusion Laboratory": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M18 9 H26 M19.5 9 V18 L13 30 a2 2 0 0 0 2 3 H29 a2 2 0 0 0 2 -3 L24.5 18 V9\"/></g><path d=\"M16.5 26 H27.5\" stroke=\"currentColor\" stroke-width=\"2\"/><circle cx=\"20\" cy=\"29\" r=\"1.4\" fill=\"currentColor\"/><circle cx=\"25\" cy=\"28\" r=\"1.1\" fill=\"currentColor\"/>",
|
||||
"Emotion Orchestra": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17 30 V15 L31 12 V27\"/><circle cx=\"14\" cy=\"30\" r=\"3\"/><circle cx=\"28\" cy=\"27\" r=\"3\"/></g>",
|
||||
"Parallel Universe Cafe": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"18\" cy=\"22\" r=\"9\"/><circle cx=\"26\" cy=\"22\" r=\"9\" stroke-dasharray=\"2.5 2.5\"/></g>",
|
||||
"Persona Journey": "<path d=\"M14 33 q-2 -8 6 -9 q8 -1 6 -8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-dasharray=\"0.1 4\"/><circle cx=\"14\" cy=\"33\" r=\"2.4\" fill=\"currentColor\"/><path d=\"M26 16 l3 -5 3 5 z\" fill=\"currentColor\"/>",
|
||||
"Devil's Advocate Courtroom": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 10 V32 M14 32 H30\"/><path d=\"M11 16 H33 M11 16 L8 23 H14 Z M33 16 L30 23 H36 Z\"/></g>",
|
||||
"Chaos Engineering": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 9 L25 18 L34 18 L27 24 L30 33 L22 27 L14 33 L17 24 L10 18 L19 18 Z\"/></g>",
|
||||
"Guerrilla Gardening Ideas": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 33 V21\"/><path d=\"M22 22 c-7 0 -9 -6 -9 -9 c6 0 9 3 9 9 z\"/><path d=\"M22 24 c6 0 8 -4 8 -7 c-5 0 -8 2 -8 7 z\"/></g>",
|
||||
"Pirate Code Brainstorm": "<path d=\"M22 10 c-7 0 -11 5 -11 11 c0 4 2 6 4 7 v4 h3 v-2 h2 v2 h4 v-2 h2 v2 h3 v-4 c2 -1 4 -3 4 -7 c0 -6 -4 -11 -11 -11 z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"/><g fill=\"currentColor\"><circle cx=\"17.5\" cy=\"21\" r=\"2.2\"/><circle cx=\"26.5\" cy=\"21\" r=\"2.2\"/></g>",
|
||||
"Zombie Apocalypse Planning": "<circle cx=\"22\" cy=\"22\" r=\"4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M22 10 a12 12 0 0 1 6 3.5 M32 16 a12 12 0 0 1 0 12 M28 33.5 a12 12 0 0 1 -12 0 M12 28 a12 12 0 0 1 0 -12 M16 10.5 a12 12 0 0 1 6 -0.5\" stroke-dasharray=\"0.1 5.5\"/></g><g fill=\"currentColor\"><circle cx=\"22\" cy=\"11\" r=\"2\"/><circle cx=\"11\" cy=\"22\" r=\"2\"/><circle cx=\"33\" cy=\"22\" r=\"2\"/></g>",
|
||||
"Drunk History Retelling": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M13 12 H31 L25 23 V31 H19 V23 Z\"/><path d=\"M19 31 H25\" /></g><circle cx=\"29\" cy=\"14\" r=\"1.4\" fill=\"currentColor\"/>",
|
||||
"Anti-Solution": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 18 a8 8 0 1 1 -1 8\"/><path d=\"M14 12 L14 18.5 L20 18\"/></g>",
|
||||
"Elemental Forces": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 8 L30 22 H14 Z\"/><path d=\"M14 30 L22 36 L30 30\"/><path d=\"M14 26 H30\"/></g>",
|
||||
"Nature's Solutions": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M16 32 C12 24 12 20 16 12 M28 32 C32 24 32 20 28 12\"/><path d=\"M16 16 L28 14 M16 22 L28 20 M16 28 L28 26\"/></g>",
|
||||
"Ecosystem Thinking": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"22\" cy=\"13\" r=\"2.4\"/><circle cx=\"12\" cy=\"27\" r=\"2.4\"/><circle cx=\"32\" cy=\"27\" r=\"2.4\"/><circle cx=\"22\" cy=\"24\" r=\"2.4\"/><path d=\"M22 15.4 V21.6 M14 26 L20 24.5 M30 26 L24 24.5 M13.6 25.2 L30.4 25.2\"/></g>",
|
||||
"Evolutionary Pressure": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M11 31 H17 M19 31 a6 6 0 0 1 6 -6 M25 25 a5 5 0 0 1 5 -5 M30 20 H33\"/><circle cx=\"11\" cy=\"31\" r=\"2\" fill=\"currentColor\"/><circle cx=\"33\" cy=\"20\" r=\"2.6\" fill=\"currentColor\"/></g>",
|
||||
"Predator & Prey": "<path d=\"M22 9 L33 14 V23 C33 30 28 34 22 36 C16 34 11 30 11 23 V14 Z\" fill=\"currentColor\" fill-opacity=\".18\"/><path d=\"M22 9 L33 14 V23 C33 30 28 34 22 36 C16 34 11 30 11 23 V14 Z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"/>",
|
||||
"Metamorphosis Stages": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 12 V32\"/><path d=\"M22 16 C14 12 10 18 14 22 C10 26 14 32 22 28 C30 32 34 26 30 22 C34 18 30 12 22 16\"/></g>",
|
||||
"Swarm Logic": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 10 L29 14 V22 L22 26 L15 22 V14 Z\"/><path d=\"M15 24 L18 33 M29 24 L26 33 M22 28 V35\" stroke-opacity=\".6\"/></g>",
|
||||
"Observer Effect": "<path d=\"M9 22 q13 -10 26 0 q-13 10 -26 0 z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"/><circle cx=\"22\" cy=\"22\" r=\"4.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><circle cx=\"22\" cy=\"22\" r=\"1.8\" fill=\"currentColor\"/>",
|
||||
"Entanglement Thinking": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"15\" cy=\"22\" r=\"6\"/><circle cx=\"29\" cy=\"22\" r=\"6\"/></g><path d=\"M15 22 h14\" stroke=\"currentColor\" stroke-width=\"2\" stroke-dasharray=\"1.5 2.5\"/><g fill=\"currentColor\"><circle cx=\"15\" cy=\"22\" r=\"1.8\"/><circle cx=\"29\" cy=\"22\" r=\"1.8\"/></g>",
|
||||
"Superposition Collapse": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M11 12 C20 16 24 16 33 12 M11 18 C20 22 24 22 33 18 M11 24 C20 28 24 28 33 24\"/><path d=\"M22 26 V34\"/></g><circle cx=\"22\" cy=\"34\" r=\"2\" fill=\"currentColor\"/>",
|
||||
"Relativity Frame Shift": "<rect x=\"11\" y=\"11\" width=\"22\" height=\"22\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-opacity=\".4\"/><rect x=\"15\" y=\"15\" width=\"18\" height=\"18\" rx=\"2\" transform=\"rotate(-14 22 22)\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>",
|
||||
"Field Lines": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 13 V31 M16 13 C24 18 24 26 16 31 M22 13 C32 18 32 26 22 31\"/></g><circle cx=\"11\" cy=\"22\" r=\"2\" fill=\"currentColor\"/>",
|
||||
"Quantum Tunneling": "<rect x=\"20\" y=\"9\" width=\"5\" height=\"26\" rx=\"1.5\" fill=\"currentColor\" fill-opacity=\".3\"/><path d=\"M10 22 H34\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\"/><path d=\"M28 17 L34 22 L28 27\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
|
||||
"Indigenous Wisdom": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M26 11 C18 16 14 24 13 33 M26 11 C28 18 26 25 20 29\"/><path d=\"M26 11 C24 13 22 14 19 15 M24 16 C22 18 20 19 17 20 M22 21 C20 23 18 24 15 25\"/></g>",
|
||||
"Fusion Cuisine": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10 19 a12 7 0 0 0 24 0 Z\"/><path d=\"M22 19 V32 M16 32 H28\"/></g>",
|
||||
"Ritual Innovation": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 33 V17 a10 10 0 0 1 20 0 V33\"/><path d=\"M12 33 H32 M22 33 V21\"/></g>",
|
||||
"Mythic Frameworks": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 12 h13 a3 3 0 0 1 3 3 v17 l-3 -2 -3 2 -3 -2 -3 2 V15 a3 3 0 0 0 -3 -3 z\"/><path d=\"M14 12 a3 3 0 0 0 -3 3 h6\"/><path d=\"M20 18 H26 M20 23 H26\"/></g>",
|
||||
"Proverb Mining": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 14 C17 10 11 11 11 11 V30 s6 -1 11 3 c5 -4 11 -3 11 -3 V11 s-6 -1 -11 3 z\"/><path d=\"M22 14 V31\"/></g>",
|
||||
"Ancestor Council": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"22\" cy=\"14\" r=\"3.5\"/><circle cx=\"13\" cy=\"19\" r=\"3\"/><circle cx=\"31\" cy=\"19\" r=\"3\"/></g><g fill=\"currentColor\" fill-opacity=\".25\"><path d=\"M16 31 c0 -5 12 -5 12 0 z\"/><path d=\"M8 31 c0 -4 9 -4.5 9 0 z\"/><path d=\"M27 31 c0 -4.5 9 -4 9 0 z\"/></g>",
|
||||
"Trickster's Gambit": "<rect x=\"11\" y=\"12\" width=\"13\" height=\"18\" rx=\"2\" transform=\"rotate(-10 17.5 21)\" fill=\"currentColor\" fill-opacity=\".2\" stroke=\"currentColor\" stroke-width=\"2\"/><rect x=\"20\" y=\"14\" width=\"13\" height=\"18\" rx=\"2\" transform=\"rotate(10 26.5 23)\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M26.5 19 l1.4 3 1.4 -3 -1.4 -1 z\" fill=\"currentColor\"/>",
|
||||
"Villain's Monologue": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 20 C16 18 19 18 22 21 C25 18 28 18 32 20 C30 24 26 24 22 21 C18 24 14 24 12 20 Z\"/></g><circle cx=\"22\" cy=\"14\" r=\"2.4\" fill=\"currentColor\"/>",
|
||||
"Explain It to a Golden Retriever": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 18 C12 12 17 13 18 17 M30 18 C32 12 27 13 26 17\"/><path d=\"M15 19 C13 28 18 33 22 33 C26 33 31 28 29 19 C26 16 18 16 15 19 Z\"/></g><g fill=\"currentColor\"><circle cx=\"19\" cy=\"24\" r=\"1.4\"/><circle cx=\"25\" cy=\"24\" r=\"1.4\"/><circle cx=\"22\" cy=\"28\" r=\"1.6\"/></g>",
|
||||
"Infomercial at 3AM": "<rect x=\"9\" y=\"14\" width=\"26\" height=\"18\" rx=\"2.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M18 9 L22 14 L26 9\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M22 19 l1 2.6 2.8 .2 -2.1 1.9 .7 2.7 -2.4 -1.5 -2.4 1.5 .7 -2.7 -2.1 -1.9 2.8 -.2 z\" fill=\"currentColor\"/>",
|
||||
"Drunk Uncle at Thanksgiving": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M11 16 L20 16 L27 11 V29 L20 24 L11 24 Z\"/><path d=\"M30 16 q3 4 0 8 M33 13 q5 7 0 14\"/></g>",
|
||||
"Cursed Genie": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10 30 h18 a2 2 0 0 0 2 -2 c0 -5 -6 -5 -8 -8 c5 -1 8 -3 8 -3 c-4 -2 -12 -2 -16 1 c-4 3 -5 9 -4 12 z\"/><path d=\"M30 17 L33 14 M31 21 L35 20\" stroke-opacity=\".6\"/></g>",
|
||||
"Three Rounds of Stupid": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M13 30 V20 M9 24 L13 20 L17 24 M22 30 V15 M18 19 L22 15 L26 19 M31 30 V11 M27 15 L31 11 L35 15\"/></g>",
|
||||
"Kill the Crown Jewel": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M11 28 L13 15 L19 22 L22 12 L25 22 L31 15 L33 28 Z\"/><path d=\"M11 28 H33\"/></g><path d=\"M14 12 L30 32\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"/>",
|
||||
"1000x Budget": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><ellipse cx=\"22\" cy=\"14\" rx=\"9\" ry=\"3.5\"/><path d=\"M13 14 V22 a9 3.5 0 0 0 18 0 V14\"/><path d=\"M13 22 V30 a9 3.5 0 0 0 18 0 V22\"/></g>",
|
||||
"Ship in 60 Minutes": "<circle cx=\"22\" cy=\"24\" r=\"11\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M22 24 V17 M22 24 L27 27\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/><path d=\"M18 8 H26 M22 8 V13\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>",
|
||||
"The $0 Mandate": "<circle cx=\"22\" cy=\"22\" r=\"11\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M22 14 V30 M18 18 a4 3 0 0 1 8 0 a4 3 0 0 1 -8 4 a4 3 0 0 0 8 0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\"/><path d=\"M14 30 L30 14\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\"/>",
|
||||
"One Feature Only": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"22\" cy=\"22\" r=\"4.5\"/><path d=\"M22 9 V13 M22 31 V35 M9 22 H13 M31 22 H35\" stroke-opacity=\".35\"/></g><circle cx=\"22\" cy=\"22\" r=\"2\" fill=\"currentColor\"/>",
|
||||
"Crank the Dial to 11": "<path d=\"M11 28 A12 12 0 0 1 33 28\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/><path d=\"M22 28 L31 17\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\"/><circle cx=\"22\" cy=\"28\" r=\"2.6\" fill=\"currentColor\"/>",
|
||||
"Constraint Roulette": "<circle cx=\"22\" cy=\"22\" r=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><circle cx=\"22\" cy=\"22\" r=\"12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-dasharray=\"3 3.7\" stroke-opacity=\".5\"/><circle cx=\"22\" cy=\"22\" r=\"3\" fill=\"currentColor\"/><path d=\"M22 7 L25 12 H19 Z\" fill=\"currentColor\"/>",
|
||||
"Time Horizon Ladder": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 30 H35\"/><path d=\"M14 30 V24 M22 30 V18 M30 30 V12\"/></g><g fill=\"currentColor\"><circle cx=\"14\" cy=\"24\" r=\"2\"/><circle cx=\"22\" cy=\"18\" r=\"2\"/><circle cx=\"30\" cy=\"12\" r=\"2\"/></g>",
|
||||
"Post-Scarcity Test": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 22 a4.5 4.5 0 1 1 4.5 4.5 C16 26.5 14 18 11 18 a3.5 3.5 0 0 0 0 7 c4 0 5 -8 11 -8 a4.5 4.5 0 0 1 0 9 c-3 0 -4 -4.5 -7 -4.5\"/></g>",
|
||||
"Utopia vs Dystopia Split-Screen": "<rect x=\"11\" y=\"11\" width=\"22\" height=\"22\" rx=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M22 11 V33\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M22 11 H33 a0 0 0 0 1 0 0 V33 H22 Z\" fill=\"currentColor\" fill-opacity=\".8\"/>",
|
||||
"Sci-Fi Artifact From the Future": "<path d=\"M22 9 L33 15 V28 L22 35 L11 28 V15 Z\" fill=\"currentColor\" fill-opacity=\".15\"/><path d=\"M22 9 L33 15 V28 L22 35 L11 28 V15 Z M11 15 L22 21 L33 15 M22 21 V35\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"/>",
|
||||
"Emerging Tech Collision": "<rect x=\"15\" y=\"15\" width=\"14\" height=\"14\" rx=\"2\" fill=\"currentColor\" fill-opacity=\".22\"/><rect x=\"15\" y=\"15\" width=\"14\" height=\"14\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><g stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M19 15 V10 M25 15 V10 M19 29 V34 M25 29 V34 M15 19 H10 M15 25 H10 M29 19 H34 M29 25 H34\"/></g>",
|
||||
"What-If-The-World-Changed Card Flip": "<rect x=\"13\" y=\"10\" width=\"18\" height=\"24\" rx=\"2.5\" fill=\"currentColor\" fill-opacity=\".18\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M22 10 V34\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-dasharray=\"2 2.5\"/><path d=\"M27 16 a4 4 0 1 1 4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\"/>",
|
||||
"Future Anthropologist Dig": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 27 a6 6 0 1 1 0.1 0 z\"/><path d=\"M22 23 a2.5 2.5 0 1 0 0.1 0 M19 30 a5 5 0 0 0 6 0\"/></g><path d=\"M12 16 L17 13 M32 16 L27 13\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-opacity=\".5\"/>",
|
||||
"How Might We": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M11 13 H33 a2 2 0 0 1 2 2 V27 a2 2 0 0 1 -2 2 H24 L19 34 V29 H11 a2 2 0 0 1 -2 -2 V15 a2 2 0 0 1 2 -2 Z\"/></g><path d=\"M19 19 a3.2 3.2 0 1 1 3.4 3.4 v1.6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\"/><circle cx=\"22.4\" cy=\"27\" r=\"1.4\" fill=\"currentColor\"/>",
|
||||
"Job to Be Done": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"16\" width=\"26\" height=\"16\" rx=\"2.5\"/><path d=\"M17 16 v-3 a2 2 0 0 1 2 -2 h6 a2 2 0 0 1 2 2 v3\"/><path d=\"M9 23 H35\"/></g><circle cx=\"22\" cy=\"23\" r=\"1.8\" fill=\"currentColor\"/>",
|
||||
"Empathy Map": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><rect x=\"11\" y=\"11\" width=\"22\" height=\"22\" rx=\"2\"/><path d=\"M11 22 H33 M22 11 V33\"/></g><path d=\"M22 27 c-2.6 -2.1 -4.2 -3.4 -4.2 -5.2 a2.1 2.1 0 0 1 4.2 -1 a2.1 2.1 0 0 1 4.2 1 c0 1.8 -1.6 3.1 -4.2 5.2 z\" fill=\"currentColor\"/>",
|
||||
"Backcasting": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M30 11 V33\"/></g><path d=\"M30 13 L20 16.5 L30 20 Z\" fill=\"currentColor\"/><path d=\"M28 27 H14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-dasharray=\"1.5 3\"/><path d=\"M18 23 L14 27 L18 31\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>",
|
||||
"Scenario Cross": "<g stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><path d=\"M22 9 V35 M9 22 H35\"/></g><g fill=\"currentColor\"><circle cx=\"15\" cy=\"15\" r=\"2\"/><circle cx=\"29\" cy=\"15\" r=\"2\"/><circle cx=\"15\" cy=\"29\" r=\"2\"/><circle cx=\"29\" cy=\"29\" r=\"2\"/></g>",
|
||||
"TRIZ Contradiction": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 15 H18 M14.5 11.5 L18 15 L14.5 18.5\"/><path d=\"M35 29 H26 M29.5 25.5 L26 29 L29.5 32.5\"/></g><path d=\"M22 17.5 l1.5 3.4 3.7 .3 -2.8 2.4 .9 3.6 -3.3 -1.9 -3.3 1.9 .9 -3.6 -2.8 -2.4 3.7 -.3 z\" fill=\"currentColor\"/>",
|
||||
"Fishbone Diagram": "<g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 22 H33\"/><path d=\"M33 22 L36 18.5 M33 22 L36 25.5\"/><path d=\"M14 22 L18 15 M14 22 L18 29 M23 22 L27 15 M23 22 L27 29\"/></g><circle cx=\"9\" cy=\"22\" r=\"1.9\" fill=\"currentColor\"/>",
|
||||
"Build on What Works": "<g fill=\"currentColor\"><rect x=\"11\" y=\"24\" width=\"6\" height=\"9\" rx=\"1\"/><rect x=\"19\" y=\"19\" width=\"6\" height=\"14\" rx=\"1\"/><rect x=\"27\" y=\"13\" width=\"6\" height=\"20\" rx=\"1\"/></g><path d=\"M11 19 L18 13 L24 16 L33 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M28 8 H33 V13\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,101 +1,109 @@
|
|||
category,technique_name,description,detail
|
||||
collaborative,Yes And Building,"Never negate; each person opens with ""Yes, and..."" and adds to the last idea, stacking a chain of accepted additions",
|
||||
collaborative,Brain Writing Round Robin,"Everyone writes ideas silently, then passes their sheet; you build on whatever lands in front of you, round after round",
|
||||
collaborative,Random Stimulation,"Pull a random word or image and force a link to the problem: ""how does THIS spark a solution?""",
|
||||
collaborative,Role Playing,"Each person speaks as a different stakeholder, voicing what that role wants, fears, and would demand of the idea",
|
||||
collaborative,Ideation Relay Race,"30-second turns, no pausing: add one idea, slap it to the next person, keep the baton moving before anyone overthinks",
|
||||
collaborative,Idea Hot Potato,"One idea gets tossed around the circle; each catcher must mutate it in 10 seconds before passing, no repeats allowed",
|
||||
collaborative,Steal And Upgrade,"Pick a neighbor's idea you envy, claim it out loud, then make it visibly better before handing it back improved",
|
||||
collaborative,Fold The Paper,"Each person adds one line to a hidden drawing or sentence, sees only the previous fragment, then unfold the surreal whole",
|
||||
creative,What If Scenarios,"Detonate one constraint at a time — unlimited budget, opposite is true, problem vanished — and chase what rushes in",
|
||||
creative,Analogical Thinking,Ask 'this is like what?' and steal the solution pattern from the domain that answers,
|
||||
creative,First Principles Thinking,"Strip every assumption to bedrock facts, then rebuild the solution from scratch on truth alone",
|
||||
creative,Forced Relationships,Grab two unrelated things at random and force a bridge between them until an idea falls out,
|
||||
creative,Time Shifting,"Solve the problem as a 1900s artisan, then a 2150 colonist — harvest the era-bound constraints and tricks",
|
||||
creative,Metaphor Mapping,"Declare the problem IS a chosen metaphor, extend the metaphor fully, map each part back to find insights",
|
||||
creative,Cross-Pollination,"Ask how a wildly different industry — casinos, ERs, beekeeping — would crack this, then adapt their move",
|
||||
creative,Concept Blending,"Fuse two concepts into one new hybrid category and name what the merger becomes, not just combines",
|
||||
creative,Reverse Brainstorming,Generate problems instead of solutions — 'how could we make this fail?' — then mine each for its inverse,
|
||||
creative,Sensory Exploration,"Interrogate the idea through each sense — its taste, smell, sound, texture — to surface non-analytical angles",
|
||||
deep,Five Whys,"Ask ""why?"" five times in a chain, each answer feeding the next, until you hit the root cause beneath the symptom",
|
||||
deep,Provocation Technique,"State something deliberately absurd, then mine it: ""how could this be useful?"" Extract the usable principle hiding inside",
|
||||
deep,Assumption Reversal,"List every assumption baked into the problem, flip each to its opposite, then rebuild a solution on the inverted foundation",
|
||||
deep,Question Storming,"Generate only questions about the problem, zero answers allowed, until the real problem worth solving comes into focus",
|
||||
deep,Constraint Mapping,"Map every constraint, sort real from imagined, then attack each: dissolve it, route around it, or turn it into an asset",
|
||||
deep,Failure Analysis,"Dissect a relevant failure: what broke, why it broke, what lesson it leaves, and how to apply that wisdom here",
|
||||
deep,Emergent Thinking,Stop forcing a solution; watch what patterns the system keeps producing and name what's trying to emerge on its own,
|
||||
deep,Causal Loop Mapping,"Diagram the feedback loops linking causes and effects, find the reinforcing and balancing cycles, and target the leverage point",
|
||||
deep,Morphological Analysis,"List the problem's independent parameters, generate options for each, then combine across them to surface untried configurations",
|
||||
deep,Laddering,"Ask 'and what would that give you?' up the chain until you reach the real underlying need, then ideate fresh at that level",
|
||||
introspective_delight,Inner Child Conference,"Answer as your 7-year-old self: ask naive 'why why why' questions, chase wonder, ban every boring adult thought",
|
||||
introspective_delight,Shadow Work Mining,"Name what you're avoiding, resisting, or scared of about this — then dig there for the buried insight",
|
||||
introspective_delight,Values Archaeology,Keep asking 'why do I care?' until you hit bedrock: the non-negotiable value secretly steering the choice,
|
||||
introspective_delight,Future Self Interview,Interview your wise 80-year-old self about this problem and write down the advice they give you,
|
||||
introspective_delight,Body Wisdom Dialogue,"Scan for the tension, flutter, or gut pull each option triggers; let the body's yes/no drive the ideas",
|
||||
introspective_delight,Permission Giving,"Write yourself an explicit permission slip to think the forbidden, impossible thought — then think it out loud",
|
||||
introspective_delight,Secret Wish Confession,"Whisper the embarrassing thing you secretly want here but won't admit, then build the idea honoring it",
|
||||
introspective_delight,Mood Weather Report,"Name the inner weather right now (fog, storm, sun) and let that exact emotional climate generate the ideas",
|
||||
structured,SCAMPER Method,"Run your idea through seven lenses: Substitute, Combine, Adapt, Modify, Put-to-other-use, Eliminate, Reverse",
|
||||
structured,Six Thinking Hats,"Examine the problem six ways one at a time: facts, feelings, benefits, risks, new ideas, process",
|
||||
structured,Decision Tree Mapping,"Chart every choice point and the paths it forks into, following each branch to its outcome and risk",
|
||||
structured,Solution Matrix,"Grid problem variables against solution approaches, score every cell, hunt the best pairings and empty gaps",
|
||||
structured,Trait Transfer,"Name what makes an unrelated success work, then graft those winning traits onto your own problem",
|
||||
structured,Lotus Blossom,"Put the theme at the center of a 3x3 grid, fill the 8 cells around it, then promote each of those to the center of its own new 3x3",
|
||||
structured,Worst Possible Idea,"Deliberately generate the most terrible solutions you can, then flip each into what it teaches you to do right",
|
||||
structured,Disney Method,"Cycle the idea through three rooms: Dreamer (anything goes), Realist (how we'd build it), Critic (what breaks)",
|
||||
structured,Starbursting,"Interrogate the idea with only questions — who, what, where, when, why, how — exhaust each before answering any",
|
||||
structured,Mind Mapping,"Branch the central topic outward, each node spawning children; follow tangents wherever they pull and let the web sprawl",
|
||||
structured,Crazy 8s,"Eight ideas in eight minutes, one per box, no editing — speed outruns your inner critic",
|
||||
theatrical,Time Travel Talk Show,"Host a talk show interviewing your past, present, and future selves to mine each era for advice on the problem",
|
||||
theatrical,Alien Anthropologist,"Become a baffled alien studying the problem and narrate aloud what seems strange, arbitrary, or insane about it",
|
||||
theatrical,Dream Fusion Laboratory,"Voice the impossible fantasy solution first, then reverse-engineer the bridging steps back to reality",
|
||||
theatrical,Emotion Orchestra,"Run a separate ideation round led by each emotion (rage, joy, fear, hope), then harmonize their conflicting ideas",
|
||||
theatrical,Parallel Universe Cafe,"Rewrite one fundamental rule of reality (physics, economics, social norms) and solve the problem under those laws",
|
||||
theatrical,Persona Journey,"Embody an archetype and solve the problem in-character, naming what that persona sees that you normally miss",
|
||||
theatrical,Devil's Advocate Courtroom,"Stage a trial: prosecute the idea, defend it, then deliver the jury verdict, each role argued fully in character",
|
||||
wild,Chaos Engineering,"Deliberately break your idea every way it could fail, then rebuild only the parts that survive the wreckage",
|
||||
wild,Guerrilla Gardening Ideas,Plant your solution in the least expected place and let it grow underground until it surprises everyone,
|
||||
wild,Pirate Code Brainstorm,"Steal the best bits from anywhere, remix without asking permission, grab what works and run",
|
||||
wild,Zombie Apocalypse Planning,"Society just collapsed — strip your idea to only what survives with no power, no rules, no backup",
|
||||
wild,Drunk History Retelling,"Explain it like you're three drinks in: no filter, no jargon, just the raw stupid-simple truth",
|
||||
wild,Anti-Solution,"Brainstorm how to make the problem spectacularly worse, then invert every sabotage into a fix",
|
||||
wild,Elemental Forces,"Let fire, water, earth, and air each sculpt your idea their own brutal way and see what survives",
|
||||
biomimetic,Nature's Solutions,"Name an organism that already solved your problem, then copy its mechanism into your design",
|
||||
biomimetic,Ecosystem Thinking,"Map your problem as an ecosystem: who eats whom, who partners, what decays, what fills the gaps",
|
||||
biomimetic,Evolutionary Pressure,"Spawn many ugly variants, apply a brutal selection rule, breed the survivors, repeat until it adapts",
|
||||
biomimetic,Predator & Prey,"Pick a threat to your idea, then design the defense, camouflage, or escape an animal would evolve against it",
|
||||
biomimetic,Metamorphosis Stages,"Force your idea through egg, larva, pupa, adult: a radically different form and purpose at each life stage",
|
||||
biomimetic,Swarm Logic,Forbid the master plan: solve it with dumb local rules each agent follows so order emerges from the bottom up,
|
||||
quantum,Observer Effect,"Ask how the act of watching, measuring, or shipping this idea changes the very thing you're trying to capture",
|
||||
quantum,Entanglement Thinking,Pair two distant parts of the problem and insist a change in one instantly flips the other — surface the hidden linkage,
|
||||
quantum,Superposition Collapse,"Hold all rival solutions alive at once, then name the one constraint that collapses them to a single winner",
|
||||
quantum,Relativity Frame Shift,"Re-run the idea from a wildly different observer's reference frame — the slow user, the rival, future-you — and see what warps",
|
||||
quantum,Field Lines,Treat the goal as a charge and map the invisible forces pulling every stakeholder toward or away from it,
|
||||
quantum,Quantum Tunneling,"Assume the idea can pass straight through the 'impossible' barrier instead of over it — what's on the other side, reached cheaply",
|
||||
cultural,Indigenous Wisdom,"Ask how an indigenous or traditional knowledge system would approach this — name the culture, channel its ancestral problem-solving",
|
||||
cultural,Fusion Cuisine,Pick two unrelated cultures and force-blend their approaches; harvest the hybrid that neither alone would invent,
|
||||
cultural,Ritual Innovation,"Redesign the idea as a ceremony — define the threshold, the gestures, the transformation participants undergo",
|
||||
cultural,Mythic Frameworks,"Map the problem onto a myth: name the archetypes, find the parallel tale, let its structure dictate the resolution",
|
||||
cultural,Proverb Mining,"Collect proverbs from many cultures on this theme, then build the solution from the one that clashes hardest with your assumptions",
|
||||
cultural,Ancestor Council,"Convene three ancestors or elders from different traditions, voice each one's verdict on your idea, reconcile their disagreement",
|
||||
cultural,Trickster's Gambit,"Channel the trickster figure — coyote, Anansi, Loki — and solve it by cheating, inverting, or breaking the sacred rule",
|
||||
absurdist,Villain's Monologue,Pitch your problem as an evil mastermind gloating about their scheme; the diabolical plan reveals the real solution,
|
||||
absurdist,Explain It to a Golden Retriever,"Re-pitch the idea to an excitable dog who only cares about treats, balls, and naps; keep only what survives",
|
||||
absurdist,Infomercial at 3AM,"Sell your half-baked idea as a desperate late-night infomercial: 'But wait, there's more!' until features fall out",
|
||||
absurdist,Drunk Uncle at Thanksgiving,"Have your loudest, least-filtered relative rant about the problem; mine the unhinged hot takes for buried truth",
|
||||
absurdist,Cursed Genie,"Make a wish, then let a malicious genie grant it in the most technically-correct disastrous way; patch each loophole",
|
||||
absurdist,Three Rounds of Stupid,"Round 1 absurd ideas, Round 2 make each MORE absurd, Round 3 find the smallest serious thing hiding in the silliest",
|
||||
constraint,Kill the Crown Jewel,"Delete the single best, most beloved feature — now redesign the whole thing to win without it",
|
||||
constraint,1000x Budget,"Pretend money, time, and people are infinite — design the absurd version, then mine it for ideas you can actually steal",
|
||||
constraint,Ship in 60 Minutes,"You launch in one hour with what's already on hand — name what you cut, fake, or borrow to make it real",
|
||||
constraint,The $0 Mandate,"Achieve the goal spending literally nothing — no tools, hires, or ads; only people, favors, and what you own",
|
||||
constraint,One Feature Only,"You may keep exactly ONE capability and nothing else — pick it, then make that single thing unbelievably good",
|
||||
constraint,Crank the Dial to 11,"Pick one dimension and exaggerate it to a ludicrous extreme — fastest, biggest, cheapest, weirdest — and see what breaks open",
|
||||
constraint,Constraint Roulette,"Each round draw a brutal random limit (no screens, half the team, one day) and re-solve under it; survivors become real ideas",
|
||||
speculative_future,Time Horizon Ladder,"Solve the idea for 1 year out, then 10, then 100 — note what survives, breaks, or becomes absurd at each rung",
|
||||
speculative_future,Post-Scarcity Test,"Assume the core constraint (money, energy, time, attention) is now infinite and free — what does the idea become",
|
||||
speculative_future,Utopia vs Dystopia Split-Screen,Write the same future twice: the brochure where it went perfectly and the headline where it went horribly,
|
||||
speculative_future,Sci-Fi Artifact From the Future,"Describe one physical object, ad, or news clip from the world where this idea already won — reverse-engineer it",
|
||||
speculative_future,Emerging Tech Collision,"Force-marry your idea to a frontier tech (AGI, fusion, neural implants, gene edit) and ask what new thing is born",
|
||||
speculative_future,What-If-The-World-Changed Card Flip,"Draw a wild world-shift (no privacy, half population, 200-yr lifespans) and redesign the idea to fit that world",
|
||||
speculative_future,Future Anthropologist Dig,"A scholar in 2200 unearths your idea as a relic — what do they conclude it reveals about us, and what replaced it",
|
||||
category,technique_name,description,detail,provenance,good_for,audience
|
||||
collaborative,Yes And Building,"Never negate; each person opens with ""Yes, and..."" and adds to the last idea, stacking a chain of accepted additions",,classic,novel|unstuck|planning,group
|
||||
collaborative,Brain Writing Round Robin,"Everyone writes ideas silently, then passes their sheet; you build on whatever lands in front of you, round after round",,classic,novel|feature,group
|
||||
collaborative,Random Stimulation,"Pull a random word or image and force a link to the problem: ""how does THIS spark a solution?""",,classic,unstuck|novel,either
|
||||
collaborative,Role Playing,"Each person speaks as a different stakeholder, voicing what that role wants, fears, and would demand of the idea",,classic,strategy|personal|feature,either
|
||||
collaborative,Ideation Relay Race,"30-second turns, no pausing: add one idea, slap it to the next person, keep the baton moving before anyone overthinks",,playful,unstuck,group
|
||||
collaborative,Idea Hot Potato,"One idea gets tossed around the circle; each catcher must mutate it in 10 seconds before passing, no repeats allowed",,playful,unstuck,group
|
||||
collaborative,Steal And Upgrade,"Pick a neighbor's idea you envy, claim it out loud, then make it visibly better before handing it back improved",,signature,novel|unstuck,group
|
||||
collaborative,Fold The Paper,"Each person adds one line to a hidden drawing or sentence, sees only the previous fragment, then unfold the surreal whole",,playful,unstuck|novel,group
|
||||
creative,What If Scenarios,"Detonate one constraint at a time — unlimited budget, opposite is true, problem vanished — and chase what rushes in",,signature,novel|strategy|unstuck,either
|
||||
creative,Analogical Thinking,Ask 'this is like what?' and steal the solution pattern from the domain that answers,,signature,feature|novel|diagnosis,either
|
||||
creative,First Principles Thinking,"Strip every assumption to bedrock facts, then rebuild the solution from scratch on truth alone",,classic,feature|novel|diagnosis|strategy,either
|
||||
creative,Forced Relationships,Grab two unrelated things at random and force a bridge between them until an idea falls out,,signature,novel|unstuck,either
|
||||
creative,Time Shifting,"Solve the problem as a 1900s artisan, then a 2150 colonist — harvest the era-bound constraints and tricks",,signature,novel|unstuck,either
|
||||
creative,Metaphor Mapping,"Declare the problem IS a chosen metaphor, extend the metaphor fully, map each part back to find insights",,signature,novel|diagnosis,either
|
||||
creative,Cross-Pollination,"Ask how a wildly different industry — casinos, ERs, beekeeping — would crack this, then adapt their move",,signature,novel|feature|strategy,either
|
||||
creative,Concept Blending,"Fuse two concepts into one new hybrid category and name what the merger becomes, not just combines",,signature,novel,either
|
||||
creative,Reverse Brainstorming,Generate problems instead of solutions — 'how could we make this fail?' — then mine each for its inverse,,classic,diagnosis|feature|unstuck,either
|
||||
creative,Sensory Exploration,"Interrogate the idea through each sense — its taste, smell, sound, texture — to surface non-analytical angles",,signature,novel|unstuck,either
|
||||
deep,Five Whys,"Ask ""why?"" five times in a chain, each answer feeding the next, until you hit the root cause beneath the symptom",,classic,diagnosis,either
|
||||
deep,Provocation Technique,"State something deliberately absurd, then mine it: ""how could this be useful?"" Extract the usable principle hiding inside",,classic,unstuck|novel,either
|
||||
deep,Assumption Reversal,"List every assumption baked into the problem, flip each to its opposite, then rebuild a solution on the inverted foundation",,classic,novel|diagnosis|strategy,either
|
||||
deep,Question Storming,"Generate only questions about the problem, zero answers allowed, until the real problem worth solving comes into focus",,classic,diagnosis|strategy|unstuck,either
|
||||
deep,Constraint Mapping,"Map every constraint, sort real from imagined, then attack each: dissolve it, route around it, or turn it into an asset",,signature,feature|strategy|diagnosis,either
|
||||
deep,Failure Analysis,"Dissect a relevant failure: what broke, why it broke, what lesson it leaves, and how to apply that wisdom here",,signature,diagnosis|strategy|feature,either
|
||||
deep,Emergent Thinking,Stop forcing a solution; watch what patterns the system keeps producing and name what's trying to emerge on its own,,signature,strategy|novel,either
|
||||
deep,Causal Loop Mapping,"Diagram the feedback loops linking causes and effects, find the reinforcing and balancing cycles, and target the leverage point",,classic,diagnosis|strategy,either
|
||||
deep,Morphological Analysis,"List the problem's independent parameters, generate options for each, then combine across them to surface untried configurations",,classic,feature|novel|planning,either
|
||||
deep,Laddering,"Ask 'and what would that give you?' up the chain until you reach the real underlying need, then ideate fresh at that level",,classic,personal|strategy|diagnosis,either
|
||||
introspective_delight,Inner Child Conference,"Answer as your 7-year-old self: ask naive 'why why why' questions, chase wonder, ban every boring adult thought",,signature,personal|unstuck,solo
|
||||
introspective_delight,Shadow Work Mining,"Name what you're avoiding, resisting, or scared of about this — then dig there for the buried insight",,signature,personal|diagnosis,solo
|
||||
introspective_delight,Values Archaeology,Keep asking 'why do I care?' until you hit bedrock: the non-negotiable value secretly steering the choice,,signature,personal|strategy,solo
|
||||
introspective_delight,Future Self Interview,Interview your wise 80-year-old self about this problem and write down the advice they give you,,signature,personal,solo
|
||||
introspective_delight,Body Wisdom Dialogue,"Scan for the tension, flutter, or gut pull each option triggers; let the body's yes/no drive the ideas",,signature,personal,solo
|
||||
introspective_delight,Permission Giving,"Write yourself an explicit permission slip to think the forbidden, impossible thought — then think it out loud",,signature,personal|unstuck,solo
|
||||
introspective_delight,Secret Wish Confession,"Whisper the embarrassing thing you secretly want here but won't admit, then build the idea honoring it",,signature,personal,solo
|
||||
introspective_delight,Mood Weather Report,"Name the inner weather right now (fog, storm, sun) and let that exact emotional climate generate the ideas",,signature,personal|unstuck,solo
|
||||
structured,SCAMPER Method,"Run your idea through seven lenses: Substitute, Combine, Adapt, Modify, Put-to-other-use, Eliminate, Reverse",,classic,feature|novel,either
|
||||
structured,Six Thinking Hats,"Examine the problem six ways one at a time: facts, feelings, benefits, risks, new ideas, process",,classic,strategy|diagnosis|planning|personal,either
|
||||
structured,Decision Tree Mapping,"Chart every choice point and the paths it forks into, following each branch to its outcome and risk",,signature,planning|strategy|diagnosis,either
|
||||
structured,Solution Matrix,"Grid problem variables against solution approaches, score every cell, hunt the best pairings and empty gaps",,signature,feature|planning,either
|
||||
structured,Trait Transfer,"Name what makes an unrelated success work, then graft those winning traits onto your own problem",,signature,novel|feature,either
|
||||
structured,Lotus Blossom,"Put the theme at the center of a 3x3 grid, fill the 8 cells around it, then promote each of those to the center of its own new 3x3",,classic,feature|planning|novel,either
|
||||
structured,Worst Possible Idea,"Deliberately generate the most terrible solutions you can, then flip each into what it teaches you to do right",,classic,unstuck|novel,either
|
||||
structured,Disney Method,"Cycle the idea through three rooms: Dreamer (anything goes), Realist (how we'd build it), Critic (what breaks)",,classic,feature|strategy|planning,either
|
||||
structured,Starbursting,"Interrogate the idea with only questions — who, what, where, when, why, how — exhaust each before answering any",,classic,feature|planning|diagnosis,either
|
||||
structured,Mind Mapping,"Branch the central topic outward, each node spawning children; follow tangents wherever they pull and let the web sprawl",,classic,planning|novel|feature,either
|
||||
structured,Crazy 8s,"Eight ideas in eight minutes, one per box, no editing — speed outruns your inner critic",,classic,feature|novel|unstuck,either
|
||||
theatrical,Time Travel Talk Show,"Host a talk show interviewing your past, present, and future selves to mine each era for advice on the problem",,playful,novel|personal,either
|
||||
theatrical,Alien Anthropologist,"Become a baffled alien studying the problem and narrate aloud what seems strange, arbitrary, or insane about it",,playful,diagnosis|unstuck|strategy,either
|
||||
theatrical,Dream Fusion Laboratory,"Voice the impossible fantasy solution first, then reverse-engineer the bridging steps back to reality",,signature,novel|unstuck,either
|
||||
theatrical,Emotion Orchestra,"Run a separate ideation round led by each emotion (rage, joy, fear, hope), then harmonize their conflicting ideas",,playful,personal|strategy,either
|
||||
theatrical,Parallel Universe Cafe,"Rewrite one fundamental rule of reality (physics, economics, social norms) and solve the problem under those laws",,playful,novel|unstuck,either
|
||||
theatrical,Persona Journey,"Embody an archetype and solve the problem in-character, naming what that persona sees that you normally miss",,signature,feature|strategy,either
|
||||
theatrical,Devil's Advocate Courtroom,"Stage a trial: prosecute the idea, defend it, then deliver the jury verdict, each role argued fully in character",,signature,strategy|diagnosis,group
|
||||
wild,Chaos Engineering,"Deliberately break your idea every way it could fail, then rebuild only the parts that survive the wreckage",,signature,feature|diagnosis|strategy,either
|
||||
wild,Guerrilla Gardening Ideas,Plant your solution in the least expected place and let it grow underground until it surprises everyone,,playful,strategy|unstuck,either
|
||||
wild,Pirate Code Brainstorm,"Steal the best bits from anywhere, remix without asking permission, grab what works and run",,playful,novel|unstuck,either
|
||||
wild,Zombie Apocalypse Planning,"Society just collapsed — strip your idea to only what survives with no power, no rules, no backup",,playful,feature|strategy|unstuck,either
|
||||
wild,Drunk History Retelling,"Explain it like you're three drinks in: no filter, no jargon, just the raw stupid-simple truth",,playful,unstuck|diagnosis,either
|
||||
wild,Anti-Solution,"Brainstorm how to make the problem spectacularly worse, then invert every sabotage into a fix",,signature,diagnosis|unstuck,either
|
||||
wild,Elemental Forces,"Let fire, water, earth, and air each sculpt your idea their own brutal way and see what survives",,playful,novel|unstuck,either
|
||||
biomimetic,Nature's Solutions,"Name an organism that already solved your problem, then copy its mechanism into your design",,signature,feature|novel,either
|
||||
biomimetic,Ecosystem Thinking,"Map your problem as an ecosystem: who eats whom, who partners, what decays, what fills the gaps",,signature,strategy|diagnosis,either
|
||||
biomimetic,Evolutionary Pressure,"Spawn many ugly variants, apply a brutal selection rule, breed the survivors, repeat until it adapts",,signature,feature|novel,either
|
||||
biomimetic,Predator & Prey,"Pick a threat to your idea, then design the defense, camouflage, or escape an animal would evolve against it",,signature,strategy|feature,either
|
||||
biomimetic,Metamorphosis Stages,"Force your idea through egg, larva, pupa, adult: a radically different form and purpose at each life stage",,signature,novel|strategy,either
|
||||
biomimetic,Swarm Logic,Forbid the master plan: solve it with dumb local rules each agent follows so order emerges from the bottom up,,signature,feature|strategy,either
|
||||
quantum,Observer Effect,"Ask how the act of watching, measuring, or shipping this idea changes the very thing you're trying to capture",,signature,strategy|diagnosis,either
|
||||
quantum,Entanglement Thinking,Pair two distant parts of the problem and insist a change in one instantly flips the other — surface the hidden linkage,,signature,diagnosis|strategy,either
|
||||
quantum,Superposition Collapse,"Hold all rival solutions alive at once, then name the one constraint that collapses them to a single winner",,signature,strategy|diagnosis,either
|
||||
quantum,Relativity Frame Shift,"Re-run the idea from a wildly different observer's reference frame — the slow user, the rival, future-you — and see what warps",,signature,strategy|novel,either
|
||||
quantum,Field Lines,Treat the goal as a charge and map the invisible forces pulling every stakeholder toward or away from it,,signature,strategy,either
|
||||
quantum,Quantum Tunneling,"Assume the idea can pass straight through the 'impossible' barrier instead of over it — what's on the other side, reached cheaply",,signature,unstuck|novel,either
|
||||
cultural,Indigenous Wisdom,"Ask how an indigenous or traditional knowledge system would approach this — name the culture, channel its ancestral problem-solving",,signature,personal|strategy|novel,either
|
||||
cultural,Fusion Cuisine,Pick two unrelated cultures and force-blend their approaches; harvest the hybrid that neither alone would invent,,signature,novel,either
|
||||
cultural,Ritual Innovation,"Redesign the idea as a ceremony — define the threshold, the gestures, the transformation participants undergo",,signature,novel|personal,either
|
||||
cultural,Mythic Frameworks,"Map the problem onto a myth: name the archetypes, find the parallel tale, let its structure dictate the resolution",,signature,strategy|personal|novel,either
|
||||
cultural,Proverb Mining,"Collect proverbs from many cultures on this theme, then build the solution from the one that clashes hardest with your assumptions",,signature,personal|strategy,either
|
||||
cultural,Ancestor Council,"Convene three ancestors or elders from different traditions, voice each one's verdict on your idea, reconcile their disagreement",,signature,personal|strategy,either
|
||||
cultural,Trickster's Gambit,"Channel the trickster figure — coyote, Anansi, Loki — and solve it by cheating, inverting, or breaking the sacred rule",,playful,unstuck|strategy,either
|
||||
absurdist,Villain's Monologue,Pitch your problem as an evil mastermind gloating about their scheme; the diabolical plan reveals the real solution,,playful,diagnosis|strategy|unstuck,either
|
||||
absurdist,Explain It to a Golden Retriever,"Re-pitch the idea to an excitable dog who only cares about treats, balls, and naps; keep only what survives",,playful,unstuck|diagnosis|feature,either
|
||||
absurdist,Infomercial at 3AM,"Sell your half-baked idea as a desperate late-night infomercial: 'But wait, there's more!' until features fall out",,playful,strategy|novel,either
|
||||
absurdist,Drunk Uncle at Thanksgiving,"Have your loudest, least-filtered relative rant about the problem; mine the unhinged hot takes for buried truth",,playful,unstuck|diagnosis,either
|
||||
absurdist,Cursed Genie,"Make a wish, then let a malicious genie grant it in the most technically-correct disastrous way; patch each loophole",,playful,diagnosis|feature,either
|
||||
absurdist,Three Rounds of Stupid,"Round 1 absurd ideas, Round 2 make each MORE absurd, Round 3 find the smallest serious thing hiding in the silliest",,playful,unstuck|novel,either
|
||||
constraint,Kill the Crown Jewel,"Delete the single best, most beloved feature — now redesign the whole thing to win without it",,signature,feature|strategy|unstuck,either
|
||||
constraint,1000x Budget,"Pretend money, time, and people are infinite — design the absurd version, then mine it for ideas you can actually steal",,signature,novel|strategy,either
|
||||
constraint,Ship in 60 Minutes,"You launch in one hour with what's already on hand — name what you cut, fake, or borrow to make it real",,signature,feature|planning|unstuck,either
|
||||
constraint,The $0 Mandate,"Achieve the goal spending literally nothing — no tools, hires, or ads; only people, favors, and what you own",,signature,planning|strategy|feature,either
|
||||
constraint,One Feature Only,"You may keep exactly ONE capability and nothing else — pick it, then make that single thing unbelievably good",,signature,feature|strategy,either
|
||||
constraint,Crank the Dial to 11,"Pick one dimension and exaggerate it to a ludicrous extreme — fastest, biggest, cheapest, weirdest — and see what breaks open",,signature,novel|unstuck,either
|
||||
constraint,Constraint Roulette,"Each round draw a brutal random limit (no screens, half the team, one day) and re-solve under it; survivors become real ideas",,signature,unstuck|feature,either
|
||||
speculative_future,Time Horizon Ladder,"Solve the idea for 1 year out, then 10, then 100 — note what survives, breaks, or becomes absurd at each rung",,signature,strategy|planning|novel,either
|
||||
speculative_future,Post-Scarcity Test,"Assume the core constraint (money, energy, time, attention) is now infinite and free — what does the idea become",,signature,novel|strategy,either
|
||||
speculative_future,Utopia vs Dystopia Split-Screen,Write the same future twice: the brochure where it went perfectly and the headline where it went horribly,,signature,strategy|diagnosis,either
|
||||
speculative_future,Sci-Fi Artifact From the Future,"Describe one physical object, ad, or news clip from the world where this idea already won — reverse-engineer it",,signature,novel|feature,either
|
||||
speculative_future,Emerging Tech Collision,"Force-marry your idea to a frontier tech (AGI, fusion, neural implants, gene edit) and ask what new thing is born",,signature,novel|feature|strategy,either
|
||||
speculative_future,What-If-The-World-Changed Card Flip,"Draw a wild world-shift (no privacy, half population, 200-yr lifespans) and redesign the idea to fit that world",,signature,novel|unstuck,either
|
||||
speculative_future,Future Anthropologist Dig,"A scholar in 2200 unearths your idea as a relic — what do they conclude it reveals about us, and what replaced it",,signature,strategy|novel,either
|
||||
structured,How Might We,"Reframe the problem as a batch of 'How might we...' opportunity questions first, then ideate against the sharpest one",,classic,feature|novel|strategy|diagnosis,either
|
||||
structured,Job to Be Done,"Ask what the user is really hiring this to do, then ideate around that underlying job, not the feature you assumed",,classic,feature|strategy|novel,either
|
||||
structured,Empathy Map,"Map what the user says, thinks, does, and feels around the problem, then mine each quadrant for the unmet need",,classic,feature|personal,either
|
||||
structured,Backcasting,"Fix the finished future in vivid detail, then work backward step by step to the one move you'd have to make first",,classic,strategy|planning|novel,either
|
||||
deep,TRIZ Contradiction,"Name the core contradiction (what only improves by making something else worse), then brainstorm ways to win both instead of trading off",,classic,feature|novel|diagnosis,either
|
||||
deep,Fishbone Diagram,"Branch the problem's spine into cause categories (people, process, tools, environment) and mine each bone for contributing causes",,classic,diagnosis,either
|
||||
deep,Build on What Works,"Name what's already succeeding and why, then ideate how to amplify and extend it instead of fixing what's broken",,classic,personal|strategy,either
|
||||
speculative_future,Scenario Cross,"Pick two high-impact uncertainties, cross them into four futures, and ideate the move that wins in every one",,classic,strategy|planning,either
|
||||
|
|
|
|||
|
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,24 @@
|
|||
# Converging: Narrow & Decide
|
||||
|
||||
Load this when divergence is spent and the user wants to narrow the field — or asks to "decide," "prioritize," "pick," or "make it real." The whole catalog is *divergent* by design (it generates); this is the deliberate opposite phase, and keeping the two apart is the point. Never run convergence while ideas are still flowing, and never let it leak into a generating batch — premature judgment is what kills good ideas. `{doc_workspace}/.memlog.md` is the canonical record; everything here works from it. Communicate in `{communication_language}`.
|
||||
|
||||
**Mode holds.** In **Facilitator** you run the convergence *on the user's verdicts* — you structure and prompt, they judge; never rank for them. In **Creative Partner** you weigh in too, each call logged by author. In **Ideate for me** you converge yourself and show the result, then offer to keep going.
|
||||
|
||||
## How to run it
|
||||
|
||||
First, reflect the field back: pull the live candidates from the memlog (include the odd and buried ones, not just the recent obvious ones) so there's a concrete set to work on. Then pick **one** convergence move that fits the goal — don't hand the user a menu of methods; choose the one that suits *this* decision and name it. Run it to a result, log the outcome, and stop when a clear short-list or single direction emerges.
|
||||
|
||||
Pick by what the decision needs:
|
||||
|
||||
- **Affinity Clustering** — when there are many scattered ideas: group them into themes, name each cluster, and surface the through-line. Often the right *first* move, to turn a pile into a handful.
|
||||
- **Impact–Effort** — when the goal is action: place each candidate on impact vs effort; harvest high-impact / low-effort first, park the rest.
|
||||
- **NUF Test** — when novelty matters: score each New, Useful, Feasible (1–10 each); the totals expose the quiet winners and the dazzling-but-doomed.
|
||||
- **Forced Ranking / Dot Vote** — when you just need a ranked top-N: make the ideas compete, no ties; (a literal dot-vote when it's genuinely a group).
|
||||
- **PMI (Plus / Minus / Interesting)** — when one strong candidate needs pressure-testing before commitment: list its pluses, minuses, and the merely-interesting, then judge.
|
||||
- **MoSCoW** — when scoping a build: sort into Must / Should / Could / Won't-this-time.
|
||||
|
||||
Log the surviving directions and the reasoning with `python3 {skill-root}/scripts/memlog.py append --type decision --text "<one-line gist>"` (use `--by` in Creative Partner mode). Two or three convergence moves chained is fine (e.g. cluster → score the clusters); more than that is usually over-processing.
|
||||
|
||||
## Then finalize
|
||||
|
||||
Once a short-list or direction is settled, **load `references/finalize.md`** and run it last — synthesis, `status: complete`, and artifacts build on the decisions you just logged. Convergence narrows; finalize captures and ships. Do not set `status: complete` here — that belongs to finalize.
|
||||
|
|
@ -38,15 +38,22 @@ import sys
|
|||
from pathlib import Path
|
||||
|
||||
DEFAULT_FILE = Path(__file__).resolve().parent.parent / "assets" / "brain-methods.csv"
|
||||
FIELDS = ("category", "technique_name", "description", "detail")
|
||||
FIELDS = ("category", "technique_name", "description", "detail", "provenance", "good_for", "audience")
|
||||
# Optional columns beyond the original four — absent in older CSVs and in --extra
|
||||
# overlays, so always read through .get/setdefault. `provenance` (classic|signature|
|
||||
# playful) drives the "Proven & Professional" lead group; `good_for` (a |-separated
|
||||
# list of goal tags) drives the browse page's goal filter; `audience` (solo|group|either)
|
||||
# is advisory.
|
||||
OPTIONAL_FIELDS = ("detail", "provenance", "good_for", "audience")
|
||||
|
||||
|
||||
def load(file: Path) -> list[dict]:
|
||||
with open(file, newline="", encoding="utf-8") as f:
|
||||
rows = list(csv.DictReader(f))
|
||||
for r in rows:
|
||||
r.setdefault("detail", "")
|
||||
r["detail"] = (r.get("detail") or "").strip()
|
||||
for k in OPTIONAL_FIELDS:
|
||||
r.setdefault(k, "")
|
||||
r[k] = (r.get(k) or "").strip()
|
||||
return rows
|
||||
|
||||
|
||||
|
|
@ -64,6 +71,9 @@ def load_extra(file: Path) -> list[dict]:
|
|||
"technique_name": str(item.get("technique_name", "")).strip(),
|
||||
"description": str(item.get("description", "")).strip(),
|
||||
"detail": str(item.get("detail") or "").strip(),
|
||||
"provenance": str(item.get("provenance") or "").strip(),
|
||||
"good_for": str(item.get("good_for") or "").strip(),
|
||||
"audience": str(item.get("audience") or "").strip(),
|
||||
})
|
||||
return rows
|
||||
|
||||
|
|
@ -140,145 +150,41 @@ def pretty(cat: str) -> str:
|
|||
return cat.replace("_", " ").replace("-", " ").title()
|
||||
|
||||
|
||||
# --- card visuals: a crafted duotone icon + hue per category ---------------
|
||||
# Each card shows its category's icon (drawn in `currentColor`, which the CSS sets
|
||||
# to the category hue) plus a per-technique accent seeded by the technique name, so
|
||||
# every card is unique while staying on-theme. Hues span the wheel so categories
|
||||
# stay distinguishable; an unknown (user-added) category gets a hash-derived hue and
|
||||
# a generic glyph, so custom catalogs still render.
|
||||
# --- card visuals: a crafted duotone icon + hue per category, plus a per-technique icon ---
|
||||
# The hues and SVG glyphs are *data*, not logic: they live in the icon sidecar
|
||||
# (assets/brain-icons.json) so the catalog's visuals can be edited without touching code.
|
||||
# It maps category slug -> {hue, glyph} and technique name -> svg (inner markup, drawn in
|
||||
# `currentColor` which the CSS sets to the category hue; the shared CHIP frame is added by
|
||||
# the renderer). Anything missing falls back here — an unknown category gets a hash-derived
|
||||
# hue + generic glyph, an unknown/not-yet-iconed technique a neutral mark — so custom
|
||||
# catalogs always render.
|
||||
|
||||
_HUES = {
|
||||
"creative": "#6d5cf0",
|
||||
"deep": "#4658c9",
|
||||
"structured": "#3b6ea5",
|
||||
"quantum": "#2b86d9",
|
||||
"speculative_future": "#0fb5c9",
|
||||
"collaborative": "#15a3a3",
|
||||
"biomimetic": "#1f9d6b",
|
||||
"constraint": "#d9882b",
|
||||
"wild": "#e2562f",
|
||||
"cultural": "#c75b39",
|
||||
"theatrical": "#cf4d6f",
|
||||
"absurdist": "#e0529c",
|
||||
"introspective_delight": "#b15ad6",
|
||||
}
|
||||
ICON_FILE = DEFAULT_FILE.parent / "brain-icons.json"
|
||||
|
||||
CHIP = '<rect x="1.5" y="1.5" width="41" height="41" rx="12" fill="currentColor" fill-opacity="0.12"/>'
|
||||
|
||||
_GLYPHS = {
|
||||
# idea starburst
|
||||
"creative": (
|
||||
'<g stroke="currentColor" stroke-width="2.4" stroke-linecap="round">'
|
||||
'<line x1="22" y1="6.5" x2="22" y2="12.5"/><line x1="22" y1="31.5" x2="22" y2="37.5"/>'
|
||||
'<line x1="6.5" y1="22" x2="12.5" y2="22"/><line x1="31.5" y1="22" x2="37.5" y2="22"/>'
|
||||
'<line x1="11.3" y1="11.3" x2="15.5" y2="15.5"/><line x1="28.5" y1="28.5" x2="32.7" y2="32.7"/>'
|
||||
'<line x1="32.7" y1="11.3" x2="28.5" y2="15.5"/><line x1="15.5" y1="28.5" x2="11.3" y2="32.7"/></g>'
|
||||
'<circle cx="22" cy="22" r="6.6" fill="currentColor" fill-opacity="0.25"/>'
|
||||
'<circle cx="22" cy="22" r="3.6" fill="currentColor"/>'
|
||||
),
|
||||
# nested depth rings
|
||||
"deep": (
|
||||
'<g fill="none" stroke="currentColor">'
|
||||
'<circle cx="22" cy="22" r="13" stroke-width="1.5" stroke-opacity="0.4"/>'
|
||||
'<circle cx="22" cy="22" r="9" stroke-width="1.7" stroke-opacity="0.7"/>'
|
||||
'<circle cx="22" cy="22" r="5" stroke-width="1.9"/></g>'
|
||||
'<circle cx="22" cy="22" r="2.4" fill="currentColor"/>'
|
||||
),
|
||||
# 2x2 blocks, diagonal filled
|
||||
"structured": (
|
||||
'<g fill="currentColor">'
|
||||
'<rect x="11" y="11" width="9.5" height="9.5" rx="2"/>'
|
||||
'<rect x="23.5" y="11" width="9.5" height="9.5" rx="2" fill-opacity="0.25"/>'
|
||||
'<rect x="11" y="23.5" width="9.5" height="9.5" rx="2" fill-opacity="0.25"/>'
|
||||
'<rect x="23.5" y="23.5" width="9.5" height="9.5" rx="2"/></g>'
|
||||
),
|
||||
# atom
|
||||
"quantum": (
|
||||
'<g stroke="currentColor" stroke-width="1.8" fill="none">'
|
||||
'<ellipse cx="22" cy="22" rx="14.5" ry="6" transform="rotate(28 22 22)"/>'
|
||||
'<ellipse cx="22" cy="22" rx="14.5" ry="6" transform="rotate(-28 22 22)"/></g>'
|
||||
'<circle cx="22" cy="22" r="6.6" fill="currentColor" fill-opacity="0.18"/>'
|
||||
'<circle cx="22" cy="22" r="3.4" fill="currentColor"/>'
|
||||
'<circle cx="33.2" cy="17.4" r="2" fill="currentColor"/>'
|
||||
),
|
||||
# upward arrow to a twinkling star
|
||||
"speculative_future": (
|
||||
'<g stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" fill="none">'
|
||||
'<path d="M11 31 L 26.5 15.5"/><path d="M20 14.5 H 28 V 22.5"/></g>'
|
||||
'<circle cx="31" cy="12" r="2.8" fill="currentColor"/>'
|
||||
'<g stroke="currentColor" stroke-width="1.4" stroke-linecap="round">'
|
||||
'<line x1="31" y1="6.5" x2="31" y2="8.4"/><line x1="31" y1="15.6" x2="31" y2="17.5"/>'
|
||||
'<line x1="25.5" y1="12" x2="27.4" y2="12"/><line x1="34.6" y1="12" x2="36.5" y2="12"/></g>'
|
||||
),
|
||||
# three linked nodes
|
||||
"collaborative": (
|
||||
'<g stroke="currentColor" stroke-width="1.8">'
|
||||
'<line x1="14" y1="16" x2="30" y2="16"/><line x1="14" y1="16" x2="22" y2="30"/>'
|
||||
'<line x1="30" y1="16" x2="22" y2="30"/></g>'
|
||||
'<g fill="currentColor" fill-opacity="0.22">'
|
||||
'<circle cx="14" cy="16" r="4.6"/><circle cx="30" cy="16" r="4.6"/><circle cx="22" cy="30" r="4.6"/></g>'
|
||||
'<g fill="currentColor">'
|
||||
'<circle cx="14" cy="16" r="2.4"/><circle cx="30" cy="16" r="2.4"/><circle cx="22" cy="30" r="2.4"/></g>'
|
||||
),
|
||||
# leaf
|
||||
"biomimetic": (
|
||||
'<path d="M22 7.5 C 31.5 12.5, 31.5 29, 22 36.5 C 12.5 29, 12.5 12.5, 22 7.5 Z" fill="currentColor" fill-opacity="0.22"/>'
|
||||
'<path d="M22 9 V 35.5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" fill="none"/>'
|
||||
'<g stroke="currentColor" stroke-width="1.5" stroke-linecap="round">'
|
||||
'<path d="M22 16 l5.6 -2.6"/><path d="M22 16 l-5.6 -2.6"/>'
|
||||
'<path d="M22 22 l6.6 -2.6"/><path d="M22 22 l-6.6 -2.6"/>'
|
||||
'<path d="M22 28 l5.6 -2.6"/><path d="M22 28 l-5.6 -2.6"/></g>'
|
||||
),
|
||||
# corner brackets framing a point
|
||||
"constraint": (
|
||||
'<g stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" fill="none">'
|
||||
'<path d="M17 11 H 11 V 17"/><path d="M27 11 H 33 V 17"/>'
|
||||
'<path d="M17 33 H 11 V 27"/><path d="M27 33 H 33 V 27"/></g>'
|
||||
'<circle cx="22" cy="22" r="5" fill="currentColor" fill-opacity="0.25"/>'
|
||||
'<circle cx="22" cy="22" r="2.6" fill="currentColor"/>'
|
||||
),
|
||||
# lightning bolt
|
||||
"wild": (
|
||||
'<path d="M24.5 6.5 L 12.5 24 H 19.5 L 17.5 37.5 L 31.5 18.5 H 24 L 24.5 6.5 Z" fill="currentColor"/>'
|
||||
),
|
||||
# globe
|
||||
"cultural": (
|
||||
'<circle cx="22" cy="22" r="13.5" fill="currentColor" fill-opacity="0.14"/>'
|
||||
'<g stroke="currentColor" stroke-width="1.6" fill="none">'
|
||||
'<circle cx="22" cy="22" r="13.5"/><ellipse cx="22" cy="22" rx="6" ry="13.5"/>'
|
||||
'<line x1="8.5" y1="22" x2="35.5" y2="22"/>'
|
||||
'<path d="M11 15 H 33" stroke-opacity="0.55"/><path d="M11 29 H 33" stroke-opacity="0.55"/></g>'
|
||||
),
|
||||
# theatre mask
|
||||
"theatrical": (
|
||||
'<path d="M13 12 H 31 V 22 C 31 30, 27 35, 22 35 C 17 35, 13 30, 13 22 Z" fill="currentColor" fill-opacity="0.18"/>'
|
||||
'<path d="M13 12 H 31 V 22 C 31 30, 27 35, 22 35 C 17 35, 13 30, 13 22 Z" stroke="currentColor" stroke-width="1.8" fill="none"/>'
|
||||
'<g fill="currentColor"><circle cx="18.5" cy="21" r="1.7"/><circle cx="25.5" cy="21" r="1.7"/></g>'
|
||||
'<path d="M18 27 C 20 29.5, 24 29.5, 26 27" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" fill="none"/>'
|
||||
),
|
||||
# off-kilter winking grin
|
||||
"absurdist": (
|
||||
'<g transform="rotate(-12 22 22)">'
|
||||
'<circle cx="22" cy="22" r="13" fill="currentColor" fill-opacity="0.14"/>'
|
||||
'<circle cx="22" cy="22" r="13" stroke="currentColor" stroke-width="1.6" fill="none"/>'
|
||||
'<path d="M16 19 q 2 -2.4 4 0" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" fill="none"/>'
|
||||
'<circle cx="26.5" cy="18.8" r="1.8" fill="currentColor"/>'
|
||||
'<path d="M16.5 26 C 19 30, 25 30, 28 24.5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" fill="none"/></g>'
|
||||
),
|
||||
# meditating figure
|
||||
"introspective_delight": (
|
||||
'<circle cx="22" cy="13.5" r="4" fill="currentColor"/>'
|
||||
'<path d="M10.5 31 C 12.5 23, 31.5 23, 33.5 31 Z" fill="currentColor" fill-opacity="0.22"/>'
|
||||
'<path d="M10.5 31 C 12.5 23, 31.5 23, 33.5 31" stroke="currentColor" stroke-width="1.7" fill="none"/>'
|
||||
'<path d="M13.5 30 C 16 26.5, 20 25.5, 22 25.5 C 24 25.5, 28 26.5, 30.5 30" stroke="currentColor" stroke-width="1.5" fill="none" stroke-opacity="0.6"/>'
|
||||
),
|
||||
}
|
||||
|
||||
_FALLBACK_GLYPH = (
|
||||
'<circle cx="22" cy="22" r="11" fill="currentColor" fill-opacity="0.16"/>'
|
||||
'<circle cx="22" cy="22" r="11" stroke="currentColor" stroke-width="1.6" fill="none"/>'
|
||||
'<circle cx="22" cy="22" r="3.4" fill="currentColor"/>'
|
||||
)
|
||||
_FALLBACK_TECH = (
|
||||
'<rect x="15" y="15" width="14" height="14" rx="2.5" transform="rotate(45 22 22)" '
|
||||
'fill="none" stroke="currentColor" stroke-width="2"/><circle cx="22" cy="22" r="2.4" fill="currentColor"/>'
|
||||
)
|
||||
|
||||
|
||||
def _load_icons(file: Path = ICON_FILE) -> tuple[dict, dict]:
|
||||
"""Read the icon sidecar: (category slug -> {hue, glyph}, technique name -> svg).
|
||||
A missing or malformed file is non-fatal — everything then uses the fallbacks below."""
|
||||
try:
|
||||
data = json.loads(file.read_text(encoding="utf-8"))
|
||||
except (OSError, ValueError):
|
||||
return {}, {}
|
||||
return (data.get("categories") or {}), (data.get("techniques") or {})
|
||||
|
||||
|
||||
_CATEGORY_STYLES, _TECH_ICONS = _load_icons()
|
||||
|
||||
|
||||
def _hsl_hex(deg: int, s: float, lt: float) -> str:
|
||||
|
|
@ -289,139 +195,14 @@ def _hsl_hex(deg: int, s: float, lt: float) -> str:
|
|||
|
||||
|
||||
def category_style(cat: str) -> tuple[str, str]:
|
||||
"""(hue, glyph markup) for a category — crafted for the shipped set, derived for extras."""
|
||||
if cat in _HUES:
|
||||
return _HUES[cat], _GLYPHS.get(cat, _FALLBACK_GLYPH)
|
||||
"""(hue, glyph markup) for a category — from the sidecar for the shipped set, derived for extras."""
|
||||
style = _CATEGORY_STYLES.get(cat)
|
||||
if style and style.get("hue"):
|
||||
return style["hue"], style.get("glyph") or _FALLBACK_GLYPH
|
||||
deg = int(hashlib.md5(cat.encode("utf-8")).hexdigest(), 16) % 360
|
||||
return _hsl_hex(deg, 0.58, 0.52), _FALLBACK_GLYPH
|
||||
|
||||
|
||||
# A deliberately chosen line-icon depicting each specific technique. Drawn in
|
||||
# `currentColor` (the category hue), consistent 2px stroke. Shown beside the shared
|
||||
# category icon on every card. Unknown (custom) techniques fall back to a neutral mark.
|
||||
_S = '<g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">'
|
||||
_FALLBACK_TECH = (
|
||||
'<rect x="15" y="15" width="14" height="14" rx="2.5" transform="rotate(45 22 22)" '
|
||||
'fill="none" stroke="currentColor" stroke-width="2"/><circle cx="22" cy="22" r="2.4" fill="currentColor"/>'
|
||||
)
|
||||
|
||||
_TECH_ICONS = {
|
||||
# --- collaborative ---
|
||||
"Yes And Building": '<g fill="currentColor"><rect x="8" y="27" width="12" height="8" rx="1.5" fill-opacity=".8"/><rect x="14" y="19" width="12" height="8" rx="1.5" fill-opacity=".5"/><rect x="20" y="11" width="12" height="8" rx="1.5"/></g>',
|
||||
"Brain Writing Round Robin": _S + '<path d="M31 16 A10 10 0 1 0 32.5 22"/><path d="M31 10 L31.5 16.3 L25 16.5"/></g>',
|
||||
"Random Stimulation": '<rect x="11" y="11" width="22" height="22" rx="4" fill="none" stroke="currentColor" stroke-width="2"/><g fill="currentColor"><circle cx="17" cy="17" r="1.8"/><circle cx="27" cy="17" r="1.8"/><circle cx="22" cy="22" r="1.8"/><circle cx="17" cy="27" r="1.8"/><circle cx="27" cy="27" r="1.8"/></g>',
|
||||
"Role Playing": '<rect x="11" y="9" width="22" height="26" rx="3" fill="none" stroke="currentColor" stroke-width="2"/><circle cx="22" cy="19" r="4" fill="currentColor"/><path d="M15.5 30 c2 -4.5 11 -4.5 13 0" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>',
|
||||
"Ideation Relay Race": _S + '<line x1="12" y1="31" x2="27" y2="16"/><line x1="8" y1="22" x2="14" y2="22" stroke-opacity=".5"/><line x1="8" y1="27" x2="13" y2="27" stroke-opacity=".35"/></g><circle cx="29" cy="14" r="3.4" fill="currentColor"/>',
|
||||
"Idea Hot Potato": '<path d="M11 31 Q22 8 33 31" fill="none" stroke="currentColor" stroke-width="2" stroke-dasharray="2 3.5" stroke-linecap="round"/><circle cx="22" cy="12.5" r="4.2" fill="currentColor"/>',
|
||||
"Steal And Upgrade": _S + '<path d="M20 33 V14"/><path d="M13 21 L20 14 L27 21"/></g><path d="M30 27 l1 2.6 2.6 1 -2.6 1 -1 2.6 -1 -2.6 -2.6 -1 2.6 -1 z" fill="currentColor"/>',
|
||||
"Fold The Paper": '<path d="M13 16 L21 12 V28 L13 32 Z" fill="currentColor" fill-opacity=".22"/><path d="M21 12 L29 16 V32 L21 28 Z" fill="currentColor" fill-opacity=".45"/><path d="M13 16 L21 12 L29 16 M21 12 V28" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/>',
|
||||
# --- creative ---
|
||||
"What If Scenarios": _S + '<path d="M18 17 a4 4 0 1 1 4 4 v3"/></g><circle cx="22" cy="30" r="1.6" fill="currentColor"/>',
|
||||
"Analogical Thinking": '<circle cx="15" cy="22" r="6" fill="none" stroke="currentColor" stroke-width="2"/><rect x="25" y="16" width="12" height="12" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><path d="M19 20 q2 2 0 4 M23 20 q-2 2 0 4" stroke="currentColor" stroke-width="1.6" fill="none"/>',
|
||||
"First Principles Thinking": '<g fill="currentColor"><rect x="10" y="28" width="8" height="6" rx="1"/><rect x="18.5" y="28" width="8" height="6" rx="1"/><rect x="27" y="28" width="7" height="6" rx="1"/></g><path d="M22 25 L22 11 M16 17 L22 11 L28 17" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>',
|
||||
"Forced Relationships": '<circle cx="12" cy="22" r="3.4" fill="currentColor"/><circle cx="32" cy="22" r="3.4" fill="currentColor"/><path d="M15 22 q7 -9 14 0" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-dasharray="1.5 3"/>',
|
||||
"Time Shifting": '<circle cx="22" cy="22" r="12" fill="none" stroke="currentColor" stroke-width="2"/><path d="M22 15 V22 L27 25" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>',
|
||||
"Metaphor Mapping": '<rect x="10" y="14" width="14" height="14" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><circle cx="28" cy="25" r="7" fill="currentColor" fill-opacity=".22"/><circle cx="28" cy="25" r="7" fill="none" stroke="currentColor" stroke-width="2"/>',
|
||||
"Cross-Pollination": _S + '<path d="M13 14 H27 a4 4 0 0 1 0 8 H17 a4 4 0 0 0 0 8 H31"/><path d="M28 11 L31.5 14 L28 17 M16 27 L12.5 30 L16 33"/></g>',
|
||||
"Concept Blending": '<circle cx="18" cy="22" r="8" fill="currentColor" fill-opacity=".25"/><circle cx="26" cy="22" r="8" fill="currentColor" fill-opacity=".25"/><g fill="none" stroke="currentColor" stroke-width="2"><circle cx="18" cy="22" r="8"/><circle cx="26" cy="22" r="8"/></g>',
|
||||
"Reverse Brainstorming": _S + '<path d="M13 18 H28 a4 4 0 0 1 0 8 H16"/><path d="M19 15 L13 18 L19 21 M22 23 L16 26 L22 29"/></g>',
|
||||
"Sensory Exploration": '<path d="M10 22 q12 -10 24 0 q-12 10 -24 0 z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/><circle cx="22" cy="22" r="4" fill="currentColor"/>',
|
||||
# --- deep ---
|
||||
"Five Whys": _S + '<circle cx="14" cy="13" r="2.4"/><circle cx="22" cy="22" r="2.4"/><circle cx="30" cy="31" r="2.4"/><path d="M15.6 14.8 L20.4 20.2 M23.6 23.8 L28.4 29.2"/></g>',
|
||||
"Provocation Technique": _S + '<path d="M24 9 L13 24 H21 L19 35 L31 19 H23 Z"/></g>',
|
||||
"Assumption Reversal": _S + '<path d="M16 14 V30"/><path d="M11.5 25 L16 30 L20.5 25"/><path d="M28 30 V14"/><path d="M23.5 19 L28 14 L32.5 19"/></g>',
|
||||
"Question Storming": _S + '<path d="M14 16 a3.2 3.2 0 1 1 3.2 3.2 v2"/><path d="M26 13 a3.6 3.6 0 1 1 3.6 3.6 v2.4"/></g><circle cx="17.2" cy="27" r="1.5" fill="currentColor"/><circle cx="29.6" cy="25.6" r="1.6" fill="currentColor"/>',
|
||||
"Constraint Mapping": '<path d="M11 14 L18 12 L26 14 L33 12 V30 L26 32 L18 30 L11 32 Z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/><path d="M18 12 V30 M26 14 V32" stroke="currentColor" stroke-width="1.6"/>',
|
||||
"Failure Analysis": '<circle cx="20" cy="20" r="8" fill="none" stroke="currentColor" stroke-width="2"/><line x1="26" y1="26" x2="33" y2="33" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"/><path d="M20 16 V21 M20 24 V24" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>',
|
||||
"Emergent Thinking": '<g fill="currentColor"><circle cx="11" cy="31" r="1.6"/><circle cx="17" cy="29" r="1.6"/><circle cx="16" cy="23" r="1.6"/><circle cx="22" cy="24" r="1.8"/><circle cx="23" cy="17" r="1.9"/><circle cx="29" cy="18" r="1.7"/><circle cx="28" cy="12" r="2.1"/></g>',
|
||||
"Causal Loop Mapping": _S + '<path d="M16 16 a9 9 0 1 1 -2 12"/><path d="M16 10.5 L16.5 16.5 L10.5 17"/><path d="M30 28.5 L29.5 22.5 L35 22"/></g>',
|
||||
"Morphological Analysis": '<g fill="none" stroke="currentColor" stroke-width="1.8"><rect x="11" y="11" width="22" height="22" rx="2"/><path d="M11 18.3 H33 M11 25.6 H33 M18.3 11 V33 M25.6 11 V33"/></g><rect x="18.5" y="18.5" width="7" height="7" fill="currentColor" fill-opacity=".4"/>',
|
||||
"Laddering": _S + '<path d="M16 9 V35 M28 9 V35 M16 15 H28 M16 22 H28 M16 29 H28"/></g>',
|
||||
# --- introspective_delight ---
|
||||
"Inner Child Conference": '<circle cx="22" cy="16" r="6" fill="none" stroke="currentColor" stroke-width="2"/><path d="M22 22 V31" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><path d="M19 34 q3 -3 6 0" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><g fill="currentColor"><circle cx="20" cy="15" r="1"/><circle cx="24" cy="15" r="1"/></g>',
|
||||
"Shadow Work Mining": '<circle cx="22" cy="22" r="12" fill="none" stroke="currentColor" stroke-width="2"/><path d="M22 10 a12 12 0 0 1 0 24 z" fill="currentColor" fill-opacity=".85"/>',
|
||||
"Values Archaeology": '<g fill="none" stroke="currentColor" stroke-width="2"><path d="M10 16 h24" stroke-opacity=".4"/><path d="M10 22 h24" stroke-opacity=".6"/></g><path d="M22 24 L16 30 L22 36 L28 30 Z" fill="currentColor"/>',
|
||||
"Future Self Interview": _S + '<path d="M14 10 H30 L24 22 L30 34 H14 L20 22 Z"/></g><path d="M18 14 H26" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>',
|
||||
"Body Wisdom Dialogue": '<path d="M22 33 C12 26 9 19 13.5 15 C17 12 21 14 22 17 C23 14 27 12 30.5 15 C35 19 32 26 22 33 Z" fill="currentColor" fill-opacity=".22"/><path d="M22 33 C12 26 9 19 13.5 15 C17 12 21 14 22 17 C23 14 27 12 30.5 15 C35 19 32 26 22 33 Z" fill="none" stroke="currentColor" stroke-width="2"/>',
|
||||
"Permission Giving": '<rect x="10" y="14" width="24" height="16" rx="2.5" fill="none" stroke="currentColor" stroke-width="2"/><path d="M15 23 L19 27 L28 17" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>',
|
||||
"Secret Wish Confession": '<rect x="13" y="20" width="18" height="14" rx="2.5" fill="currentColor" fill-opacity=".22"/><rect x="13" y="20" width="18" height="14" rx="2.5" fill="none" stroke="currentColor" stroke-width="2"/><path d="M16.5 20 v-3 a5.5 5.5 0 0 1 11 0 v3" fill="none" stroke="currentColor" stroke-width="2"/>',
|
||||
"Mood Weather Report": '<circle cx="17" cy="17" r="4.5" fill="currentColor" fill-opacity=".5"/><path d="M22 30 a5 5 0 0 1 0.5 -10 a6 6 0 0 1 11 2.5 a4 4 0 0 1 -1.5 7.5 z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/>',
|
||||
# --- structured ---
|
||||
"SCAMPER Method": '<circle cx="22" cy="22" r="5.5" fill="none" stroke="currentColor" stroke-width="2"/><g stroke="currentColor" stroke-width="2.4" stroke-linecap="round"><path d="M22 9 V13.5 M22 30.5 V35 M9 22 H13.5 M30.5 22 H35 M12.8 12.8 L16 16 M28 28 L31.2 31.2 M31.2 12.8 L28 16 M16 28 L12.8 31.2"/></g>',
|
||||
"Six Thinking Hats": '<path d="M14 26 q8 -5 16 0" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><path d="M17 26 q-6 1 -8 3 q13 4 26 0 q-2 -2 -8 -3" fill="currentColor" fill-opacity=".22"/><path d="M17 26 c-1 -8 11 -8 10 0" fill="currentColor" fill-opacity=".5"/>',
|
||||
"Decision Tree Mapping": _S + '<circle cx="22" cy="12" r="2.6"/><circle cx="14" cy="32" r="2.6"/><circle cx="30" cy="32" r="2.6"/><path d="M22 14.5 L22 20 M22 20 L14 29.4 M22 20 L30 29.4"/></g>',
|
||||
"Solution Matrix": '<g fill="none" stroke="currentColor" stroke-width="1.8"><rect x="11" y="11" width="22" height="22" rx="2"/><path d="M11 22 H33 M22 11 V33"/></g><path d="M24.5 14.5 L26.5 16.5 L30.5 12.5" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>',
|
||||
"Trait Transfer": '<path d="M12 16 l1.6 3.4 3.6 .4 -2.7 2.5 .7 3.6 -3.2 -1.8 -3.2 1.8 .7 -3.6 -2.7 -2.5 3.6 -.4 z" fill="currentColor"/><rect x="25" y="23" width="9" height="9" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><path d="M17 22 L25 27" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-dasharray="1.5 2.5"/>',
|
||||
"Lotus Blossom": '<g fill="currentColor"><circle cx="22" cy="22" r="3.4"/></g><g fill="currentColor" fill-opacity=".4"><circle cx="22" cy="13" r="2.8"/><circle cx="22" cy="31" r="2.8"/><circle cx="13" cy="22" r="2.8"/><circle cx="31" cy="22" r="2.8"/><circle cx="15.5" cy="15.5" r="2.5"/><circle cx="28.5" cy="15.5" r="2.5"/><circle cx="15.5" cy="28.5" r="2.5"/><circle cx="28.5" cy="28.5" r="2.5"/></g>',
|
||||
"Worst Possible Idea": _S + '<path d="M17 11 v10 h-5 l10 12 10 -12 h-5 v-10 z"/></g>',
|
||||
"Disney Method": '<g fill="none" stroke="currentColor" stroke-width="2"><circle cx="14" cy="22" r="4.5"/><circle cx="22" cy="22" r="4.5"/><circle cx="30" cy="22" r="4.5"/></g>',
|
||||
"Starbursting": _S + '<path d="M22 8 V15 M22 29 V36 M8 22 H15 M29 22 H36 M12 12 L17 17 M27 27 L32 32 M32 12 L27 17 M12 32 L17 27"/></g><path d="M19.5 19 a3.2 3.2 0 1 1 3 4 v1.2" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/>',
|
||||
"Mind Mapping": _S + '<circle cx="22" cy="22" r="4"/><circle cx="11" cy="13" r="2.2"/><circle cx="33" cy="13" r="2.2"/><circle cx="10" cy="28" r="2.2"/><circle cx="32" cy="31" r="2.2"/><path d="M19 19.5 L12.5 14.5 M25 19.5 L31.5 14.5 M19 24.5 L11.5 27 M25.5 24 L30.5 29.5"/></g>',
|
||||
"Crazy 8s": '<g fill="none" stroke="currentColor" stroke-width="1.7"><rect x="9" y="12" width="8" height="9" rx="1.5"/><rect x="18" y="12" width="8" height="9" rx="1.5"/><rect x="27" y="12" width="8" height="9" rx="1.5"/><rect x="9" y="23" width="8" height="9" rx="1.5"/><rect x="18" y="23" width="8" height="9" rx="1.5"/><rect x="27" y="23" width="8" height="9" rx="1.5"/></g>',
|
||||
# --- theatrical ---
|
||||
"Time Travel Talk Show": '<rect x="18" y="9" width="8" height="15" rx="4" fill="currentColor" fill-opacity=".25"/><rect x="18" y="9" width="8" height="15" rx="4" fill="none" stroke="currentColor" stroke-width="2"/><path d="M14 21 a8 8 0 0 0 16 0 M22 29 V34 M17 34 H27" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>',
|
||||
"Alien Anthropologist": '<ellipse cx="22" cy="30" rx="13" ry="4.5" fill="currentColor" fill-opacity=".25"/><path d="M22 11 c7 0 10 6 10 11 c0 5 -5 7 -10 7 c-5 0 -10 -2 -10 -7 c0 -5 3 -11 10 -11 z" fill="none" stroke="currentColor" stroke-width="2"/><g fill="currentColor"><ellipse cx="18" cy="22" rx="1.6" ry="2.4"/><ellipse cx="26" cy="22" rx="1.6" ry="2.4"/></g>',
|
||||
"Dream Fusion Laboratory": _S + '<path d="M18 9 H26 M19.5 9 V18 L13 30 a2 2 0 0 0 2 3 H29 a2 2 0 0 0 2 -3 L24.5 18 V9"/></g><path d="M16.5 26 H27.5" stroke="currentColor" stroke-width="2"/><circle cx="20" cy="29" r="1.4" fill="currentColor"/><circle cx="25" cy="28" r="1.1" fill="currentColor"/>',
|
||||
"Emotion Orchestra": _S + '<path d="M17 30 V15 L31 12 V27"/><circle cx="14" cy="30" r="3"/><circle cx="28" cy="27" r="3"/></g>',
|
||||
"Parallel Universe Cafe": '<g fill="none" stroke="currentColor" stroke-width="2"><circle cx="18" cy="22" r="9"/><circle cx="26" cy="22" r="9" stroke-dasharray="2.5 2.5"/></g>',
|
||||
"Persona Journey": '<path d="M14 33 q-2 -8 6 -9 q8 -1 6 -8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-dasharray="0.1 4"/><circle cx="14" cy="33" r="2.4" fill="currentColor"/><path d="M26 16 l3 -5 3 5 z" fill="currentColor"/>',
|
||||
"Devil's Advocate Courtroom": _S + '<path d="M22 10 V32 M14 32 H30"/><path d="M11 16 H33 M11 16 L8 23 H14 Z M33 16 L30 23 H36 Z"/></g>',
|
||||
# --- wild ---
|
||||
"Chaos Engineering": _S + '<path d="M22 9 L25 18 L34 18 L27 24 L30 33 L22 27 L14 33 L17 24 L10 18 L19 18 Z"/></g>',
|
||||
"Guerrilla Gardening Ideas": _S + '<path d="M22 33 V21"/><path d="M22 22 c-7 0 -9 -6 -9 -9 c6 0 9 3 9 9 z"/><path d="M22 24 c6 0 8 -4 8 -7 c-5 0 -8 2 -8 7 z"/></g>',
|
||||
"Pirate Code Brainstorm": '<path d="M22 10 c-7 0 -11 5 -11 11 c0 4 2 6 4 7 v4 h3 v-2 h2 v2 h4 v-2 h2 v2 h3 v-4 c2 -1 4 -3 4 -7 c0 -6 -4 -11 -11 -11 z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/><g fill="currentColor"><circle cx="17.5" cy="21" r="2.2"/><circle cx="26.5" cy="21" r="2.2"/></g>',
|
||||
"Zombie Apocalypse Planning": '<circle cx="22" cy="22" r="4" fill="none" stroke="currentColor" stroke-width="2"/><g fill="none" stroke="currentColor" stroke-width="2"><path d="M22 10 a12 12 0 0 1 6 3.5 M32 16 a12 12 0 0 1 0 12 M28 33.5 a12 12 0 0 1 -12 0 M12 28 a12 12 0 0 1 0 -12 M16 10.5 a12 12 0 0 1 6 -0.5" stroke-dasharray="0.1 5.5"/></g><g fill="currentColor"><circle cx="22" cy="11" r="2"/><circle cx="11" cy="22" r="2"/><circle cx="33" cy="22" r="2"/></g>',
|
||||
"Drunk History Retelling": _S + '<path d="M13 12 H31 L25 23 V31 H19 V23 Z"/><path d="M19 31 H25" /></g><circle cx="29" cy="14" r="1.4" fill="currentColor"/>',
|
||||
"Anti-Solution": _S + '<path d="M14 18 a8 8 0 1 1 -1 8"/><path d="M14 12 L14 18.5 L20 18"/></g>',
|
||||
"Elemental Forces": _S + '<path d="M22 8 L30 22 H14 Z"/><path d="M14 30 L22 36 L30 30"/><path d="M14 26 H30"/></g>',
|
||||
# --- biomimetic ---
|
||||
"Nature's Solutions": _S + '<path d="M16 32 C12 24 12 20 16 12 M28 32 C32 24 32 20 28 12"/><path d="M16 16 L28 14 M16 22 L28 20 M16 28 L28 26"/></g>',
|
||||
"Ecosystem Thinking": _S + '<circle cx="22" cy="13" r="2.4"/><circle cx="12" cy="27" r="2.4"/><circle cx="32" cy="27" r="2.4"/><circle cx="22" cy="24" r="2.4"/><path d="M22 15.4 V21.6 M14 26 L20 24.5 M30 26 L24 24.5 M13.6 25.2 L30.4 25.2"/></g>',
|
||||
"Evolutionary Pressure": _S + '<path d="M11 31 H17 M19 31 a6 6 0 0 1 6 -6 M25 25 a5 5 0 0 1 5 -5 M30 20 H33"/><circle cx="11" cy="31" r="2" fill="currentColor"/><circle cx="33" cy="20" r="2.6" fill="currentColor"/></g>',
|
||||
"Predator & Prey": '<path d="M22 9 L33 14 V23 C33 30 28 34 22 36 C16 34 11 30 11 23 V14 Z" fill="currentColor" fill-opacity=".18"/><path d="M22 9 L33 14 V23 C33 30 28 34 22 36 C16 34 11 30 11 23 V14 Z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/>',
|
||||
"Metamorphosis Stages": _S + '<path d="M22 12 V32"/><path d="M22 16 C14 12 10 18 14 22 C10 26 14 32 22 28 C30 32 34 26 30 22 C34 18 30 12 22 16"/></g>',
|
||||
"Swarm Logic": _S + '<path d="M22 10 L29 14 V22 L22 26 L15 22 V14 Z"/><path d="M15 24 L18 33 M29 24 L26 33 M22 28 V35" stroke-opacity=".6"/></g>',
|
||||
# --- quantum ---
|
||||
"Observer Effect": '<path d="M9 22 q13 -10 26 0 q-13 10 -26 0 z" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/><circle cx="22" cy="22" r="4.5" fill="none" stroke="currentColor" stroke-width="2"/><circle cx="22" cy="22" r="1.8" fill="currentColor"/>',
|
||||
"Entanglement Thinking": '<g fill="none" stroke="currentColor" stroke-width="2"><circle cx="15" cy="22" r="6"/><circle cx="29" cy="22" r="6"/></g><path d="M15 22 h14" stroke="currentColor" stroke-width="2" stroke-dasharray="1.5 2.5"/><g fill="currentColor"><circle cx="15" cy="22" r="1.8"/><circle cx="29" cy="22" r="1.8"/></g>',
|
||||
"Superposition Collapse": _S + '<path d="M11 12 C20 16 24 16 33 12 M11 18 C20 22 24 22 33 18 M11 24 C20 28 24 28 33 24"/><path d="M22 26 V34"/></g><circle cx="22" cy="34" r="2" fill="currentColor"/>',
|
||||
"Relativity Frame Shift": '<rect x="11" y="11" width="22" height="22" rx="2" fill="none" stroke="currentColor" stroke-width="2" stroke-opacity=".4"/><rect x="15" y="15" width="18" height="18" rx="2" transform="rotate(-14 22 22)" fill="none" stroke="currentColor" stroke-width="2"/>',
|
||||
"Field Lines": _S + '<path d="M12 13 V31 M16 13 C24 18 24 26 16 31 M22 13 C32 18 32 26 22 31"/></g><circle cx="11" cy="22" r="2" fill="currentColor"/>',
|
||||
"Quantum Tunneling": '<rect x="20" y="9" width="5" height="26" rx="1.5" fill="currentColor" fill-opacity=".3"/><path d="M10 22 H34" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/><path d="M28 17 L34 22 L28 27" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>',
|
||||
# --- cultural ---
|
||||
"Indigenous Wisdom": _S + '<path d="M26 11 C18 16 14 24 13 33 M26 11 C28 18 26 25 20 29"/><path d="M26 11 C24 13 22 14 19 15 M24 16 C22 18 20 19 17 20 M22 21 C20 23 18 24 15 25"/></g>',
|
||||
"Fusion Cuisine": _S + '<path d="M10 19 a12 7 0 0 0 24 0 Z"/><path d="M22 19 V32 M16 32 H28"/></g>',
|
||||
"Ritual Innovation": _S + '<path d="M12 33 V17 a10 10 0 0 1 20 0 V33"/><path d="M12 33 H32 M22 33 V21"/></g>',
|
||||
"Mythic Frameworks": _S + '<path d="M14 12 h13 a3 3 0 0 1 3 3 v17 l-3 -2 -3 2 -3 -2 -3 2 V15 a3 3 0 0 0 -3 -3 z"/><path d="M14 12 a3 3 0 0 0 -3 3 h6"/><path d="M20 18 H26 M20 23 H26"/></g>',
|
||||
"Proverb Mining": _S + '<path d="M22 14 C17 10 11 11 11 11 V30 s6 -1 11 3 c5 -4 11 -3 11 -3 V11 s-6 -1 -11 3 z"/><path d="M22 14 V31"/></g>',
|
||||
"Ancestor Council": '<g fill="none" stroke="currentColor" stroke-width="2"><circle cx="22" cy="14" r="3.5"/><circle cx="13" cy="19" r="3"/><circle cx="31" cy="19" r="3"/></g><g fill="currentColor" fill-opacity=".25"><path d="M16 31 c0 -5 12 -5 12 0 z"/><path d="M8 31 c0 -4 9 -4.5 9 0 z"/><path d="M27 31 c0 -4.5 9 -4 9 0 z"/></g>',
|
||||
"Trickster's Gambit": '<rect x="11" y="12" width="13" height="18" rx="2" transform="rotate(-10 17.5 21)" fill="currentColor" fill-opacity=".2" stroke="currentColor" stroke-width="2"/><rect x="20" y="14" width="13" height="18" rx="2" transform="rotate(10 26.5 23)" fill="none" stroke="currentColor" stroke-width="2"/><path d="M26.5 19 l1.4 3 1.4 -3 -1.4 -1 z" fill="currentColor"/>',
|
||||
# --- absurdist ---
|
||||
"Villain's Monologue": _S + '<path d="M12 20 C16 18 19 18 22 21 C25 18 28 18 32 20 C30 24 26 24 22 21 C18 24 14 24 12 20 Z"/></g><circle cx="22" cy="14" r="2.4" fill="currentColor"/>',
|
||||
"Explain It to a Golden Retriever": _S + '<path d="M14 18 C12 12 17 13 18 17 M30 18 C32 12 27 13 26 17"/><path d="M15 19 C13 28 18 33 22 33 C26 33 31 28 29 19 C26 16 18 16 15 19 Z"/></g><g fill="currentColor"><circle cx="19" cy="24" r="1.4"/><circle cx="25" cy="24" r="1.4"/><circle cx="22" cy="28" r="1.6"/></g>',
|
||||
"Infomercial at 3AM": '<rect x="9" y="14" width="26" height="18" rx="2.5" fill="none" stroke="currentColor" stroke-width="2"/><path d="M18 9 L22 14 L26 9" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M22 19 l1 2.6 2.8 .2 -2.1 1.9 .7 2.7 -2.4 -1.5 -2.4 1.5 .7 -2.7 -2.1 -1.9 2.8 -.2 z" fill="currentColor"/>',
|
||||
"Drunk Uncle at Thanksgiving": _S + '<path d="M11 16 L20 16 L27 11 V29 L20 24 L11 24 Z"/><path d="M30 16 q3 4 0 8 M33 13 q5 7 0 14"/></g>',
|
||||
"Cursed Genie": _S + '<path d="M10 30 h18 a2 2 0 0 0 2 -2 c0 -5 -6 -5 -8 -8 c5 -1 8 -3 8 -3 c-4 -2 -12 -2 -16 1 c-4 3 -5 9 -4 12 z"/><path d="M30 17 L33 14 M31 21 L35 20" stroke-opacity=".6"/></g>',
|
||||
"Three Rounds of Stupid": _S + '<path d="M13 30 V20 M9 24 L13 20 L17 24 M22 30 V15 M18 19 L22 15 L26 19 M31 30 V11 M27 15 L31 11 L35 15"/></g>',
|
||||
# --- constraint ---
|
||||
"Kill the Crown Jewel": _S + '<path d="M11 28 L13 15 L19 22 L22 12 L25 22 L31 15 L33 28 Z"/><path d="M11 28 H33"/></g><path d="M14 12 L30 32" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"/>',
|
||||
"1000x Budget": '<g fill="none" stroke="currentColor" stroke-width="2"><ellipse cx="22" cy="14" rx="9" ry="3.5"/><path d="M13 14 V22 a9 3.5 0 0 0 18 0 V14"/><path d="M13 22 V30 a9 3.5 0 0 0 18 0 V22"/></g>',
|
||||
"Ship in 60 Minutes": '<circle cx="22" cy="24" r="11" fill="none" stroke="currentColor" stroke-width="2"/><path d="M22 24 V17 M22 24 L27 27" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><path d="M18 8 H26 M22 8 V13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>',
|
||||
"The $0 Mandate": '<circle cx="22" cy="22" r="11" fill="none" stroke="currentColor" stroke-width="2"/><path d="M22 14 V30 M18 18 a4 3 0 0 1 8 0 a4 3 0 0 1 -8 4 a4 3 0 0 0 8 0" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><path d="M14 30 L30 14" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/>',
|
||||
"One Feature Only": _S + '<circle cx="22" cy="22" r="4.5"/><path d="M22 9 V13 M22 31 V35 M9 22 H13 M31 22 H35" stroke-opacity=".35"/></g><circle cx="22" cy="22" r="2" fill="currentColor"/>',
|
||||
"Crank the Dial to 11": '<path d="M11 28 A12 12 0 0 1 33 28" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><path d="M22 28 L31 17" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/><circle cx="22" cy="28" r="2.6" fill="currentColor"/>',
|
||||
"Constraint Roulette": '<circle cx="22" cy="22" r="12" fill="none" stroke="currentColor" stroke-width="2"/><circle cx="22" cy="22" r="12" fill="none" stroke="currentColor" stroke-width="2" stroke-dasharray="3 3.7" stroke-opacity=".5"/><circle cx="22" cy="22" r="3" fill="currentColor"/><path d="M22 7 L25 12 H19 Z" fill="currentColor"/>',
|
||||
# --- speculative_future ---
|
||||
"Time Horizon Ladder": _S + '<path d="M9 30 H35"/><path d="M14 30 V24 M22 30 V18 M30 30 V12"/></g><g fill="currentColor"><circle cx="14" cy="24" r="2"/><circle cx="22" cy="18" r="2"/><circle cx="30" cy="12" r="2"/></g>',
|
||||
"Post-Scarcity Test": _S + '<path d="M15 22 a4.5 4.5 0 1 1 4.5 4.5 C16 26.5 14 18 11 18 a3.5 3.5 0 0 0 0 7 c4 0 5 -8 11 -8 a4.5 4.5 0 0 1 0 9 c-3 0 -4 -4.5 -7 -4.5"/></g>',
|
||||
"Utopia vs Dystopia Split-Screen": '<rect x="11" y="11" width="22" height="22" rx="3" fill="none" stroke="currentColor" stroke-width="2"/><path d="M22 11 V33" stroke="currentColor" stroke-width="2"/><path d="M22 11 H33 a0 0 0 0 1 0 0 V33 H22 Z" fill="currentColor" fill-opacity=".8"/>',
|
||||
"Sci-Fi Artifact From the Future": '<path d="M22 9 L33 15 V28 L22 35 L11 28 V15 Z" fill="currentColor" fill-opacity=".15"/><path d="M22 9 L33 15 V28 L22 35 L11 28 V15 Z M11 15 L22 21 L33 15 M22 21 V35" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/>',
|
||||
"Emerging Tech Collision": '<rect x="15" y="15" width="14" height="14" rx="2" fill="currentColor" fill-opacity=".22"/><rect x="15" y="15" width="14" height="14" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><g stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M19 15 V10 M25 15 V10 M19 29 V34 M25 29 V34 M15 19 H10 M15 25 H10 M29 19 H34 M29 25 H34"/></g>',
|
||||
"What-If-The-World-Changed Card Flip": '<rect x="13" y="10" width="18" height="24" rx="2.5" fill="currentColor" fill-opacity=".18" stroke="currentColor" stroke-width="2"/><path d="M22 10 V34" stroke="currentColor" stroke-width="1.6" stroke-dasharray="2 2.5"/><path d="M27 16 a4 4 0 1 1 4 4" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/>',
|
||||
"Future Anthropologist Dig": _S + '<path d="M22 27 a6 6 0 1 1 0.1 0 z"/><path d="M22 23 a2.5 2.5 0 1 0 0.1 0 M19 30 a5 5 0 0 0 6 0"/></g><path d="M12 16 L17 13 M32 16 L27 13" stroke="currentColor" stroke-width="1.6" stroke-opacity=".5"/>',
|
||||
}
|
||||
|
||||
|
||||
def tech_icon(name: str) -> str:
|
||||
"""The hand-picked line-icon for a specific technique (neutral mark if unknown)."""
|
||||
return _TECH_ICONS.get(name, _FALLBACK_TECH)
|
||||
|
|
@ -505,6 +286,18 @@ SELECTOR_TEMPLATE = r"""<!DOCTYPE html>
|
|||
.tech .ico { width:40px; height:40px; flex:none; color:var(--c); }
|
||||
.tech .n { font-weight:600; display:block; }
|
||||
.tech .d { color:var(--muted); font-size:13.5px; display:block; margin-top:2px; }
|
||||
.tech .gf { color:var(--accent-ink); font-size:11px; display:block; margin-top:5px; opacity:.85; }
|
||||
.grouphdr { margin:30px 0 12px; font-size:12px; text-transform:uppercase; letter-spacing:.14em; font-weight:700; color:var(--c); opacity:.92; border-bottom:1px solid color-mix(in srgb, var(--c) 22%, var(--line)); padding-bottom:7px; }
|
||||
main > .grouphdr:first-child { margin-top:2px; }
|
||||
:root[data-theme="dark"] .grouphdr { color:color-mix(in srgb, var(--c) 62%, #fff); }
|
||||
.goals { display:flex; gap:7px; flex-wrap:wrap; }
|
||||
.goal { font-size:12px; padding:5px 12px; border-radius:16px; background:var(--control); color:var(--muted); font-weight:600; }
|
||||
.goal:hover { color:var(--ink); }
|
||||
.goal.on { background:var(--accent); color:#fff; }
|
||||
label.tech.invent { border-style:dashed; background:transparent; }
|
||||
label.tech.invent:hover { border-color:var(--c); }
|
||||
label.tech.invent .n { color:var(--c); }
|
||||
label.tech.hidden { display:none; }
|
||||
footer { text-align:center; color:var(--foot); font-size:12px; padding:24px; }
|
||||
</style>
|
||||
</head>
|
||||
|
|
@ -538,6 +331,7 @@ SELECTOR_TEMPLATE = r"""<!DOCTYPE html>
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{{GOALBAR}}
|
||||
<div class="bar">
|
||||
<span class="glabel">Jump to</span>
|
||||
<div class="chips" id="chips">{{CHIPS}}</div>
|
||||
|
|
@ -555,6 +349,8 @@ SELECTOR_TEMPLATE = r"""<!DOCTYPE html>
|
|||
var $ = function(id){ return document.getElementById(id); };
|
||||
var all = Array.prototype.slice;
|
||||
var boxes = all.call(document.querySelectorAll('input[type=checkbox]'));
|
||||
var techBoxes = boxes.filter(function(b){ return b.dataset.name; }); // real technique cards
|
||||
var inventBoxes = boxes.filter(function(b){ return b.dataset.invent; }); // per-category "invent in the spirit of" cards
|
||||
var header = document.querySelector('header');
|
||||
var sections = all.call(document.querySelectorAll('section'));
|
||||
var state = { mode: 'Facilitator', rand: 0, inv: 0, ai: 0 };
|
||||
|
|
@ -605,20 +401,51 @@ SELECTOR_TEMPLATE = r"""<!DOCTYPE html>
|
|||
|
||||
boxes.forEach(function(b){ b.addEventListener('change', update); });
|
||||
|
||||
function checked(){ return boxes.filter(function(b){ return b.checked; }); }
|
||||
// A `classic` technique appears twice (lead "Proven & Professional" group + its home
|
||||
// category), so de-dupe checked picks by name; the lead copy carries data-lead.
|
||||
function checkedTech(){
|
||||
var seen = {}, out = [];
|
||||
techBoxes.forEach(function(b){
|
||||
if (!b.checked || seen[b.dataset.name]) { return; }
|
||||
seen[b.dataset.name] = 1;
|
||||
out.push(b);
|
||||
});
|
||||
return out;
|
||||
}
|
||||
function checkedInvent(){ return inventBoxes.filter(function(b){ return b.checked; }); }
|
||||
|
||||
function update(){
|
||||
$('pickN').textContent = checked().length;
|
||||
$('pickN').textContent = checkedTech().length;
|
||||
$('randN').textContent = state.rand;
|
||||
$('invN').textContent = state.inv;
|
||||
$('aiN').textContent = state.ai;
|
||||
var total = checked().length + state.rand + state.inv + state.ai;
|
||||
var total = checkedTech().length + state.rand + state.inv + checkedInvent().length + state.ai;
|
||||
var t = $('total');
|
||||
t.textContent = 'Total ' + total + ' · 3–4 is the sweet spot';
|
||||
t.classList.toggle('warn', total > 5);
|
||||
}
|
||||
|
||||
function randomPool(){ return boxes.filter(function(b){ return !b.checked; }); }
|
||||
// "Great for" goal filter: clicking a goal narrows visible cards to those tagged with it.
|
||||
var goalBtns = all.call(document.querySelectorAll('.goal'));
|
||||
function activeGoals(){ return goalBtns.filter(function(b){ return b.classList.contains('on'); }).map(function(b){ return b.dataset.goal; }); }
|
||||
function applyFilter(){
|
||||
var act = activeGoals();
|
||||
all.call(document.querySelectorAll('label.tech')).forEach(function(lab){
|
||||
var inp = lab.querySelector('input');
|
||||
if (inp.dataset.invent){ return; } // invent cards aren't goal-tagged — always visible
|
||||
var good = (inp.dataset.good || '').split('|');
|
||||
var show = !act.length || act.some(function(g){ return good.indexOf(g) >= 0; });
|
||||
lab.classList.toggle('hidden', !show);
|
||||
});
|
||||
}
|
||||
goalBtns.forEach(function(b){ b.addEventListener('click', function(){ b.classList.toggle('on'); applyFilter(); }); });
|
||||
|
||||
function randomPool(){
|
||||
var picked = {};
|
||||
checkedTech().forEach(function(b){ picked[b.dataset.name] = 1; });
|
||||
// draw from unchecked, non-lead copies, skipping anything already picked
|
||||
return techBoxes.filter(function(b){ return !b.checked && !b.dataset.lead && !picked[b.dataset.name]; });
|
||||
}
|
||||
|
||||
function sample(arr, n){
|
||||
var a = arr.slice(), out = [];
|
||||
|
|
@ -627,7 +454,7 @@ SELECTOR_TEMPLATE = r"""<!DOCTYPE html>
|
|||
}
|
||||
|
||||
function compose(){
|
||||
var picks = checked().map(function(b){ return { n: b.dataset.name, c: b.dataset.cat, d: b.dataset.desc, r: false }; });
|
||||
var picks = checkedTech().map(function(b){ return { n: b.dataset.name, c: b.dataset.cat, d: b.dataset.desc, r: false }; });
|
||||
var rnd = sample(randomPool(), state.rand).map(function(b){ return { n: b.dataset.name, c: b.dataset.cat, d: b.dataset.desc, r: true }; });
|
||||
var techs = picks.concat(rnd);
|
||||
var L = ["Let's run my brainstorming session.", "", 'Facilitation mode: ' + state.mode + '.'];
|
||||
|
|
@ -640,6 +467,7 @@ SELECTOR_TEMPLATE = r"""<!DOCTYPE html>
|
|||
}
|
||||
var extra = [];
|
||||
if (state.inv > 0){ extra.push('invent ' + state.inv + ' brand-new technique' + (state.inv > 1 ? 's' : '') + ' on the fly'); }
|
||||
checkedInvent().forEach(function(b){ extra.push('invent 1 new technique in the spirit of ' + b.dataset.invent); });
|
||||
if (state.ai > 0){ extra.push('you choose ' + state.ai + ' more technique' + (state.ai > 1 ? 's' : '') + ' that fit my goal'); }
|
||||
if (extra.length){ L.push("", 'Then: ' + extra.join('; and ') + '.'); }
|
||||
if (!techs.length && !extra.length){
|
||||
|
|
@ -692,46 +520,148 @@ SELECTOR_TEMPLATE = r"""<!DOCTYPE html>
|
|||
"""
|
||||
|
||||
|
||||
# --- browse-page layout: a "Proven & Professional" lead group, then super-groups ----------
|
||||
CLASSIC_GROUP = "Proven & Professional"
|
||||
LEAD_HUE = "#3d4f73" # a dignified slate for the professional lead group
|
||||
|
||||
# Super-group order for the shipped categories. Categories not listed (e.g. user-added
|
||||
# via --extra) render last under "More", alphabetically — so custom catalogs always show.
|
||||
CATEGORY_GROUPS = (
|
||||
("Structured & Analytical", ("structured", "deep")),
|
||||
("Creative & Generative", ("creative", "biomimetic", "cultural", "speculative_future", "quantum")),
|
||||
("Wild & Playful", ("wild", "absurdist", "theatrical", "constraint")),
|
||||
("Introspective & Personal", ("introspective_delight", "collaborative")),
|
||||
)
|
||||
|
||||
# Human labels for the `good_for` goal tags; this dict's order is the filter-bar order.
|
||||
GOAL_LABELS = {
|
||||
"feature": "Build a feature",
|
||||
"novel": "Novel concept",
|
||||
"strategy": "Strategy",
|
||||
"planning": "Planning",
|
||||
"diagnosis": "Diagnose",
|
||||
"personal": "Personal / life",
|
||||
"unstuck": "Get unstuck",
|
||||
}
|
||||
|
||||
|
||||
def _good_for_label(good: str) -> str:
|
||||
parts = [GOAL_LABELS.get(g, g) for g in good.split("|") if g]
|
||||
return ("Great for: " + " · ".join(parts)) if parts else ""
|
||||
|
||||
|
||||
def _svg(inner: str) -> str:
|
||||
return f'<svg class="ico" viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg">{CHIP}{inner}</svg>'
|
||||
|
||||
|
||||
def _card(r: dict, lead: bool = False) -> str:
|
||||
"""One technique card. `lead=True` cards live in the cross-cutting professional group;
|
||||
they carry their own category hue (inline --c) and data-lead so selection can de-dupe."""
|
||||
name = html.escape(r["technique_name"])
|
||||
desc = html.escape(r["description"])
|
||||
hue, glyph = category_style(r["category"])
|
||||
disp_cat = html.escape(pretty(r["category"]))
|
||||
good = html.escape(r.get("good_for", ""))
|
||||
prov = html.escape(r.get("provenance", ""))
|
||||
style = f' style="--c:{hue}"' if lead else ""
|
||||
lead_attr = ' data-lead="1"' if lead else ""
|
||||
gf = _good_for_label(r.get("good_for", ""))
|
||||
gf_html = f'<span class="gf">{html.escape(gf)}</span>' if gf else ""
|
||||
return (
|
||||
f'<label class="tech"{style}><input type="checkbox" '
|
||||
f'data-name="{name}" data-cat="{disp_cat}" data-desc="{desc}" data-good="{good}" data-prov="{prov}"{lead_attr}>'
|
||||
f'<span class="ic2">{_svg(glyph)}{_svg(tech_icon(r["technique_name"]))}</span>'
|
||||
f'<span><span class="n">{name}</span><span class="d">{desc}</span>{gf_html}</span></label>'
|
||||
)
|
||||
|
||||
|
||||
def _invent_card(disp_cat: str, glyph: str) -> str:
|
||||
"""A dashed 'invent on the fly, in this category's spirit' card appended to each section."""
|
||||
return (
|
||||
f'<label class="tech invent"><input type="checkbox" data-invent="{disp_cat}">'
|
||||
f'<span class="ic2">{_svg(glyph)}</span>'
|
||||
f'<span><span class="n">✨ Invent a {disp_cat} technique</span>'
|
||||
f'<span class="d">Make up a brand-new technique on the fly, in the spirit of {disp_cat}</span></span></label>'
|
||||
)
|
||||
|
||||
|
||||
def html_doc(rows: list[dict]) -> str:
|
||||
"""Render the self-contained 'browse all techniques' selection page from the catalog.
|
||||
|
||||
Deterministic: categories sorted, techniques in file order — so the shipped asset can
|
||||
be snapshot-tested against the CSV and never silently drifts out of sync.
|
||||
Deterministic ordering so the shipped asset can be snapshot-tested against the CSV:
|
||||
a cross-cutting "Proven & Professional" lead group (every `classic`-tagged row), then
|
||||
the categories in fixed super-group order, then any unlisted/custom categories under
|
||||
"More" alphabetically. Techniques render in file order within a category. A `classic`
|
||||
row appears both in the lead group and its home category; the page de-dupes on select.
|
||||
"""
|
||||
groups: dict[str, list[dict]] = {}
|
||||
for r in rows:
|
||||
groups.setdefault(r["category"], []).append(r)
|
||||
sections, chips = [], []
|
||||
for cat in sorted(groups):
|
||||
|
||||
body: list[str] = []
|
||||
chips: list[str] = []
|
||||
|
||||
def add_section(cat: str) -> None:
|
||||
hue, glyph = category_style(cat)
|
||||
disp = html.escape(pretty(cat))
|
||||
cards = []
|
||||
for r in groups[cat]:
|
||||
name = html.escape(r["technique_name"])
|
||||
desc = html.escape(r["description"])
|
||||
cat_icon = (
|
||||
'<svg class="ico" viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg">'
|
||||
f'{CHIP}{glyph}</svg>'
|
||||
)
|
||||
t_icon = (
|
||||
'<svg class="ico" viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg">'
|
||||
f'{CHIP}{tech_icon(r["technique_name"])}</svg>'
|
||||
)
|
||||
cards.append(
|
||||
'<label class="tech"><input type="checkbox" '
|
||||
f'data-name="{name}" data-cat="{disp}" data-desc="{desc}">'
|
||||
f'<span class="ic2">{cat_icon}{t_icon}</span>'
|
||||
f'<span><span class="n">{name}</span><span class="d">{desc}</span></span></label>'
|
||||
)
|
||||
cards = [_card(r) for r in groups[cat]]
|
||||
cards.append(_invent_card(disp, glyph))
|
||||
chips.append(f'<button type="button" class="chip" data-cat="{disp}" style="--cc:{hue}">{disp}</button>')
|
||||
sections.append(
|
||||
body.append(
|
||||
f'<section data-cat="{disp}" style="--c:{hue}"><h2>{disp}<span class="cnt">{len(groups[cat])}</span></h2>'
|
||||
f'<div class="grid">{"".join(cards)}</div></section>'
|
||||
)
|
||||
|
||||
# 1) lead group — every classic-tagged technique, cross-category (no invent card here)
|
||||
classics = [r for r in rows if r.get("provenance", "").lower() == "classic"]
|
||||
if classics:
|
||||
disp = html.escape(CLASSIC_GROUP)
|
||||
lead_cards = "".join(_card(r, lead=True) for r in classics)
|
||||
chips.append(f'<button type="button" class="chip" data-cat="{disp}" style="--cc:{LEAD_HUE}">{disp}</button>')
|
||||
body.append(
|
||||
f'<section data-cat="{disp}" style="--c:{LEAD_HUE}"><h2>{disp}<span class="cnt">{len(classics)}</span></h2>'
|
||||
f'<div class="grid">{lead_cards}</div></section>'
|
||||
)
|
||||
|
||||
# 2) shipped categories, in super-group order
|
||||
placed = set()
|
||||
for group_title, cats in CATEGORY_GROUPS:
|
||||
present = [c for c in cats if c in groups]
|
||||
if not present:
|
||||
continue
|
||||
hue, _ = category_style(present[0])
|
||||
body.append(f'<h2 class="grouphdr" style="--c:{hue}">{html.escape(group_title)}</h2>')
|
||||
for c in present:
|
||||
add_section(c)
|
||||
placed.add(c)
|
||||
|
||||
# 3) leftover (custom / --extra) categories, alphabetically
|
||||
leftover = sorted(c for c in groups if c not in placed)
|
||||
if leftover:
|
||||
body.append('<h2 class="grouphdr" style="--c:#8a8f9e">More</h2>')
|
||||
for c in leftover:
|
||||
add_section(c)
|
||||
|
||||
# goal-affinity filter bar — only if the catalog actually carries good_for tags
|
||||
present_goals: set[str] = set()
|
||||
for r in rows:
|
||||
for g in (r.get("good_for", "") or "").split("|"):
|
||||
if g:
|
||||
present_goals.add(g)
|
||||
goalbar = ""
|
||||
if present_goals:
|
||||
ordered = [g for g in GOAL_LABELS if g in present_goals] + sorted(present_goals - set(GOAL_LABELS))
|
||||
gchips = "".join(
|
||||
f'<button type="button" class="goal" data-goal="{html.escape(g)}">{html.escape(GOAL_LABELS.get(g, g))}</button>'
|
||||
for g in ordered
|
||||
)
|
||||
goalbar = f'<div class="bar"><span class="glabel">Great for</span><div class="goals" id="goals">{gchips}</div></div>'
|
||||
|
||||
total = html.escape(f"{len(rows)} techniques across {len(groups)} categories.")
|
||||
return (
|
||||
SELECTOR_TEMPLATE.replace("{{BODY}}", "\n".join(sections))
|
||||
SELECTOR_TEMPLATE.replace("{{BODY}}", "\n".join(body))
|
||||
.replace("{{CHIPS}}", "".join(chips))
|
||||
.replace("{{GOALBAR}}", goalbar)
|
||||
.replace("{{TOTAL}}", total)
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue