Comic-tabloid re-theme (all 7 screens) + Burn'em leader swap#13
Conversation
Captures the three top-level look-and-feel decisions from the 2026-05-19 brainstorm (polish = elevate past mockups; framing = responsive desktop; identity = custom portrait art) plus the full portrait system: master 800x1000 head-and-shoulders assets, a five-step size scale, always-on flag-badge overlay, AI-generated pipeline locked to the Chump reference, and the flag-fill variant for player-slot occupants. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The first draft read as if animation was cancelled. It isn't: Framer Motion plus the Action/Reactions pacing were already settled in the 2026-05-08 design and the mockups. This commit clarifies that this spec adds no NEW animation work but the <Portrait> component must be animation-friendly (motion-wrappable, addressable inner layers) so the existing Phase-5 plan can attach without refactor. Adds a §6 "Animation context (already decided)" reference section. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Design handoff at design_handoff_nuke_game/ becomes the visual source of truth. Slice 1 covers tokens, fonts, SVG portrait system, shared comic primitives, and the Setup screen re-theme. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Prior commit 2a133ca carried the same message but swept in the parallel slice-4 spec during an index.lock race; this commit adds the actual slice-2 spec. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Port design_handoff_nuke_game/tokens.css to src/ui/tokens.css (devnav block dropped per spec) and wire @fontsource imports in main.tsx. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Eight face SVGs ported from the design handoff; Portrait component dispatches AI signature colors vs per-slot human accents, with flag badge and extractFlag/stripFlag helpers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
14 typed components (Panel, Halftone, Tag, Stamp, Bubble, Burst, Btn, Stat, ApMeter, PhaseTrack, DamageBadge, RelBadge, HoldButton, Ribbon) with a barrel export. HoldButton adds rAF cleanup on unmount. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Handoff layout: NUKE! masthead, rotated cast tiles with SVG portraits and PICKED stamps, gag difficulty labels, live opponent count, Begin the End button. Keeps multi-human roster, seed input, and START_GAME wiring; adopts handoff oldest-pick-drop at 4 opponents. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Port of handoff ui.jsx RoundBadge — ink plaque with label + round number, exported from the comic barrel. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ink full-viewport curtain with dot-grid overlay, yellow HOTSEAT HANDOFF tag, giant country flag, PASS TO kicker, yellow display-font leader name, and a primary xl BEGIN MY TURN button. Wiring unchanged: reads state.activeHumanTurn and dispatches BEGIN_PLANNING. The separate country-name text line is dropped per the slice-2 spec (the flag carries it). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Per-AI-leader panels with portraits, live names, verbatim handoff flavour lines, pulsing dots that flip to a green FILED tag on a 2400ms stagger (row i files at (i+1)*2400/n), headline dots cycling every 320ms, and AI_RESOLVE dispatched once at 2900ms. All timers cleared on unmount. Roster comes from game.cast filtered to living AI leaders, same as Planning. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Previously orphaned; now wraps the slice-1 ApMeter and renders the
banking note (Banked AP carries over, cap 4, plus the banked amount
when > 0). Props change from {ap, apBanked} to {used, max, banked}.
Mounted in Planning in the slice-2 rewrite.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
SoftWarnPanel becomes the handoff SOFT WARNINGS panel: always rendered, hand-font magenta warnings with leading warning sign, and the Nothing obviously stupid. Yet. empty state (adopted behavior). describe() messages unchanged. BuildGrid/DefenceGrid cells become Build Yard tiles (2.5px ink border, paper-bright, hard ink shadow, magenta hover offset, emoji + display label + mono magenta AP cost) with the existing +/- steppers kept; stepper buttons gain add/remove aria-labels. LaunchCell becomes a mini comic tile (yellow-soft when queued, 40% opacity when no warheads). All order/AP gating logic untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Header: RoundBadge + full player name / country / flag over a 4px ink rule. Left column: Your Country panel (portrait with chosen- country flag badge, 2x2 live Stat grid, ApBudget wrapping ApMeter) plus the always-on SoftWarnPanel. Centre: The Table opponent cards (TargetRow as alternating-tilt Panels with portraits, mono stat line, segmented people/infra toggle, WOO/PROP mini-buttons, launch tile grids), Build Yard and Civil Defence panels. Right: Your Orders queue (adopted handoff behavior) as a pure view over the orders array with per-row x removal, dashed subtotal with over-budget line, HoldButton seal (SEAL ORDERS, hold 0.6s, disabled while over budget - existing validation preserved), and the ink masthead teaser via pickMasthead. All order/AP/validation behavior, projections, retarget-on-toggle and store dispatches unchanged; every displayed number comes from the engine. Tests: queries moved to role/label/text; new orders-queue and seal-hold suites. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CSS modules localize animation names in the shorthand, so referencing the global @Keyframes pulsedot from tokens.css never resolved and the conferring dots did not animate. Defining the keyframes inside the module makes the localized names match (verified in emitted build CSS). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pure event->display-text formatter for the slice-3 Action re-theme: formatEventCard's switch moved verbatim minus the className field. EventCard still carries its own copy until the Action rewrite deletes it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Stylised political-cartoon map (slice-3 spec section 5): continent paths verbatim from the handoff on an extended 0 0 100 85 viewBox, cast-only country ellipses (actor green / receiver magenta / AI signature color / human slot accent), launch arcs with impact rings and firing pulse, intercept shield, propaganda and woo trails, build icons, final-retal multi-arc. PORTRAIT_META colors become concrete hexes (mirroring tokens.css --c-*) so SVG fill attributes never interpolate undefined var(--c-<leaderId>) custom properties. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paper card with 3px ink border and magenta offset shadow: 56px Disparage portrait, yellow beer-tag, hand-font engine quote (slice-3 spec section 6). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Slice-3 re-theme: the static phase-sectioned event list becomes the handoff's one-step-at-a-time resolution playback driven by real ResolutionEvents. buildPlaybackSteps (exported, pure) keeps the existing phase-cursor + groupPhaseEvents bucketing and attaches engine-emitted DisparageCameo events to the impact step matching their afterImpact pair (cameos never become steps; unmatched cameos drop). Screen: ink background, RoundBadge + ACTION header with pause / fast 3x / skip ctrl-buttons, six-segment PhaseTrack, magenta NOW-phase banner, WorldMap with actor/receiver portrait pins + name pills, speech bubble, burst + damage badge (zero-damage impacts suppress both), ELIMINATED stamp, cameo overlay card, and the detail strip (progress dots, hand-font quote, prev/next, event counter). Auto-advance 2700ms / 1100ms fast; last-step next label is TO THE NEWS -> / TO THE VERDICT -> and dispatches ACTION_DONE. Empty rounds show the quiet-round banner and continue only. EventCard and PhaseTracker are deleted: the formatter lives on as util/eventText, the tracker is replaced by the comic PhaseTrack primitive. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pure section models (forecast tiers, market ticker, box score, news stories with lead selection + DOM ordering, photo caption, corrections/ classifieds pools) computed from live GameState + ResolutionEvents. Copy lifted from the handoff data.jsx as content; nothing imported. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Stylised mushroom-cloud photo lifted from the handoff screens-3.jsx, with per-instance gradient/pattern ids (useId), optional magenta stamp and caption bar. Replaces the P4a placeholder in the next commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Masthead + rule line, giant headline with casualty stamp, mushroom-cloud photo with derived caption, 4-across casualty strip, FROM AROUND THE RUBBLE story flow (lead first), data-driven sidebar (forecast, market, box score, obituaries, classifieds, ad), rotating corrections box and ink continue bar. DisparageColumn restyled as a .side-sec with the disparage portrait; pickHeadline/pickSubhead and all dispatch wiring preserved. Render tests cover masthead, strip values, corrections rotation, Disparage conditional and the NEXT_ROUND button. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Yellow FINAL SCORE tag, ink-soft hero with 200px winner portrait and SURVIVOR/PYRRHIC stamp (apocalypse: radiation panel + NO SURVIVORS), Death Toll panel with portraits, integer % LOST (adopted from handoff) and SURVIVED/ELIMINATED badges, closing 1989-box tagline. pickHeadline, pickSubLine, tollRows sort and newGame/sameCast handlers preserved. Render tests cover sorting, badges, stamps and both button dispatches. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…behavior unchanged
Replaces the Cautious+Scapegoat personality with a placid-by-default planner that flips permanently to full aggression on the first landed hit (persistent grudge), redirecting to the strongest survivor if the provoker dies. A round-6/2-survivor patience fallback prevents the never-attack-first 1v1 stall. Drops the now-unused scapegoat weight.
Burn'em was dominating the 80-seed AI-duel sweep (46/80 wins) by sitting out early fights, compounding AP via a growing factory count while placid, and pouncing on already-weakened survivors once provoked or patience-triggered. BURNEM_PATIENCE_ROUND 6->3 was the dominant lever (attack sooner, before rivals wear each other down); BURNEM_MAX_LAUNCHES 4->2 and the placid factory target 8->6 (flat at his starting count) trim the follow-through. Final breakdown: burnem 18/80 (22.5%), in line with the rest of the cast. Also split the build-plan comment that conflated the missile-before- warheads rationale with the producers-before-consumers batch-ordering rule; the latter now sits next to the orders.push call it documents.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ring line, doc alignment
There was a problem hiding this comment.
🟢 Claude BugBot Analysis
Reviewed the full diff (Starmless→Burn'em leader rework/rename across engine AI, flavor, and types, plus a large comic-style UI retheme across components and screens). Manually verified the new src/engine/ai/burnem.ts logic against aggression.ts's buildToward/launchSalvo signatures and grudge-field usage in resolution.ts/scoring.ts, and dispatched five parallel reviews of the UI component and screen changes (cross-checking prop signatures, event-type unions, useEffect cleanup/lifecycles, and round-number arithmetic against the current repo). No genuine logic errors, null dereferences, off-by-ones, resource leaks, or security issues were found in the added/modified lines.
No bugs were detected in this PR.
What
Two major pieces on one branch (43 commits):
1. Comic-tabloid visual re-theme — all seven screens
Recreates the
design_handoff_nuke_game/hi-fi prototype in the production stack (Vite + React 18 + TS + CSS modules), driven entirely by live engine state:src/ui/tokens.css) + 7 self-hosted @fontsource familiessrc/ui/portraits/,Portrait.tsx) with Groucho-disguise human variant and per-slot accentssrc/ui/components/comic/)docs/superpowers/specs/2026-07-19-comic-retheme-slice{1..4}-design.md; multi-agent implementation with per-phase spec/code review and an overall sign-off vs the handoff2. Starmless → Burn'em leader swap
UK slot replaced with an Andy Burnham parody (research-backed:
docs/superpowers/research/2026-07-19-burnham-research.md):starmlessreferences remain in src/testsdocs/superpowers/specs/2026-07-19-burnem-leader-swap-design.md; SDD execution with per-task reviews + final whole-range review (verdict: ready to merge)Verification
tsc --noEmitclean,vite buildclean🤖 Generated with Claude Code