TYPOGRAPHY — Courier New was the wrong register. Replaced with proper
Blade Runner UI stack matching the rest of the repo:
Orbitron (500/700/900) — title, timer, section headers, stats,
NPC/PC names, dashboard tile labels,
progress bar, act tabs, story titles
Rajdhani (300-700) — body, nav, card titles, hooks, story
prose. Condensed sans, very 2049.
Share Tech Mono — readouts, stat labels, code, clue meta,
handout IDs, role lines. Mono with
attitude vs. Courier's typewriter feel.
Noto Sans JP (400/500/700) — kanji/katakana decoration
All four loaded via Google Fonts CDN with system fallbacks (matches
pattern used in event-91, event-93, event-95 apps).
KANJI / KATAKANA DECORATION — the LA-2037 worldbuilding signature:
Header:
ロサンゼルス・2037 (Los Angeles 2037 in katakana, subtitle)
指令 第19号 (Directive Number 19, kanji mark beside title)
Section titles get their own kanji on the right:
Story 物語 (monogatari, tale)
NPCs 人物 (jinbutsu, characters)
Clues 手掛り (tegakari, clue)
Handouts 資料 (shiryō, materials)
Players 捜査官 (sōsakan, investigators)
Reference 参照 (sanshō, reference)
Act tabs get theatrical numerals:
Act I · 第一幕 / Act II · 第二幕 / Act III · 第三幕
Story chapters get traditional chapter numerals:
Chapter One · 第一章 ... Coda · 終章
SIZE BUMPS — slight upticks to make the heavier display fonts breathe:
title 22 → 26px, timer 30 → 32px, section titles 22 → 22px (font
weight 700, letter-spacing 5px), NPC names 19 → 20px, PC names 18 →
19px. Letter-spacing increased across all uppercase headers.
Modal handouts kept in Share Tech Mono (terminal/typewriter feel is
correct for in-fiction documents).
Three layered CRT motion effects, all subtle, all GPU-cheap:
1. SCANLINE DRIFT — the scanlines slowly migrate downward by 4px over
9 seconds, looping. Imperceptible at first glance, builds the
'this screen is alive' sense over a session.
2. CRT TEAR — every 13s the scanline layer briefly shifts horizontally
by 1-2px at four irregular moments (18.5%, 47.5%, 72.6-73%, 91.5%
of cycle). The 72.6% tear also dims opacity slightly — a stronger
'glitch' beat among smaller ones. Cadence designed to feel random,
not metronomic.
3. REFRESH SWEEP — a 180px-tall faint amber band rolls from top to
bottom of the viewport every 17 seconds. Mimics the CRT refresh
pass. Opacity capped at 0.045 — present, not distracting.
All three use prime-ish durations (9, 13, 17) so the layered effects
never sync back into the same pattern within a session.
AESTHETIC PASS
- Warmer sodium-amber dominant palette (bg shifted from cool blue-black
to warm dark, amber from #ffb84a to #ff9818 for stronger LA-2049 feel)
- Neon glow text-shadow on title, timer, section headers, active nav,
amber elements throughout
- Title flicker animation (subtle 6s irregular cycle)
- CRT scanline overlay (subtle horizontal lines, mix-blend multiply)
- 2049-style chamfered corner clip-paths on dashboard tiles, NPC cards,
PC cards, header buttons
- Sodium-glow body background gradient (warm top, cool rain bottom)
- Active progress bar segments get amber under-glow accent line
- All section titles get '▸' leading caret + neon glow + amber border
- Replicant magenta shifted to richer pink-magenta (#ff5fbc) with own glow
NEW STORY SCREEN
- 'The Story' added to sidebar (second position, after Home) with
📖 icon, and as home dashboard tile
- New screen: full prose narrative read-through in five chapters:
The Past · The Players Arrive · The Hunt · The Tower · The Closing
- Bookish typography: amber drop-cap first letter of each chapter,
pulled-quote callouts for key beats, replicant-name highlighting
in magenta with glow, justified body text, max-width 720px
- Each chapter card uses angular clip-path with amber accent bar at
top-left and amber-glow chapter number caption
- New STORY data object (5 chapters, ~1600 words total)
- New renderStory() function called in init
Net: +394 lines, -84 lines. File now 2372 lines, 127KB.
New system folder: scenario-library/blade-runner-rpg/
Scenario: Directive 19 — LA 2037, six Blade Runners, 3.5hr
- Pure-investigation Act One (no combat)
- Action Act Two (Halden, Wren passes through, Sera ambush, salt flats)
- Tower showdown Act Three with structural Wren escape on the terrace
- 8 NPCs with stat blocks: Greer, Lin Ai, Marisol Yu, Halden, Wren, Sera,
Hara, Cortez
- 6 pre-gens with personal hooks: Iris/Marc/Saoirse/Dmitri/Talia/Cole
(3 human, 2 Nexus-9 replicant, 1 ambiguous senior)
- Full clue trail (8 essential + 3 optional + 1 special + 6 fallbacks)
- 6 handouts written: crime scene report, Lin Ai's list of nine,
Voss bank statement, salt-flats ledger, Wren's note, the broadcast
- The Tangent: Marc's stolen memory of Hashem Lin (Saoirse's father),
Halden surviving for campaign follow-up
- Full GM Notes covering tone, restraint on Halden, the terrace scene
GM HTML app: scenario-library/blade-runner-rpg/apps/directive-19/index.html
- Single-file, offline, tablet-friendly (2062 lines)
- Dark blue-black + amber/cyan/magenta palette
- Sidebar nav: Home / Acts / NPCs / Clues / Handouts / Players / Reference
- Timer with hard-checkpoint alerts at 0:15, 1:00, 1:15, 1:40, 2:00,
2:20, 2:45, 3:15, 3:30
- Clue tracker (pending/found/missed cycle) with progress bar
- Handout modal with 5 paper styles (terminal/aged/handwritten/bank/broadcast)
- NPC cards with REVEAL GM NOTES classified-eyes-only sections
- PC cards with replicant/human visual distinction
- BR RPG reference: core mechanic, skill mapping, stress dice triggers,
V-K use, combat quick ref, Promotion vs Humanity table
- localStorage persistence across sessions (clues, classified, timer)
Updated top-level README and scenario-library README to include the
new system folder.
scenarios/gm-docs/synopsis-*.pdf
Covers all ChaosiumCon 2026 events:
Event 91 — BRP: The Night Crawler
Event 92 — CoC 1980s: Last Train to Coney Island
Event 93 — CoC 1920s: Not Another Telegram
Event 95 — Ringworld: A Question of Singularity
Event 96 — Ringworld: Is Love the Answer?
Event 159 — BRP: Day One (London Falls)
Stormbringer — The Storm Pact
Each PDF is exactly 2 A4 pages: GM truth, act-by-act breakdown,
NPC stats, player character hooks, handout reference, SAN tables,
pacing triggers and fallback notes.
WEAPONS — damage column word-wrap:
Before: character-count split at 14 chars (broke 'paralytic' → 'paralyti/c')
After: textwrap.wrap() at word boundaries, width=17
Long values: two lines, both at correct baselines with proper spacing
BACK PAGE — equipment removed:
Before: equipment listed again (solid black block, white text) — duplicate of front
After: full-width white SESSION NOTES area with ruled lines for writing
ARMOUR COLUMN — now populated from character data:
Yashti Korr: Chest AP 2, Abdomen AP 2 (body armour torso)
RR'raan: AP 1 all locations (natural Kzin hide)
Tomas Veld: AP 1 all locations (hard environment suit)
Dr. Mira Chen: no armour
Whisper-of-Distant-Worlds: no armour
Sola Reyes: no armour
Armour cells: green tint when protection present, white when none
WEAPONS SECTION — proper 4-column layout:
Before: Name (left) | Skill% (right large) + DMG/RNG buried in small sub-line
After: NAME | SKILL % | DAMAGE | RANGE — each in its own column
- Column dividers with proportional widths (38/14/25/23%)
- Weapon name + notes (italic sub-line) in col 1
- Skill% centred in col 2, accent colour
- Damage bold and prominent in col 3 (two-line for long values)
- Range in col 4, monospace
PRINTER-FRIENDLY (less solid black/dark blocks):
Stats band: INK (#06060e) → PALE (#e8e8f4), values INK not white
Derived stats: #0e0e1e → #eeeef8, cell fill #1a1a2e → #f8f8ff
HP tracker: #0a0a18 → white
Equipment: solid INK → white + accent outline border, text INK not #ccccee
Personality: solid accent fill → white + accent outline, text INK not white
Footer: INK → #f0f0f8 pale
Back page: #0a0a18 → #13132a (kept dark for sci-fi but lighter)
Table rows: #0e0e22/#09090f → #1a1a3a/#121228 (slightly lighter)
HPTrack: BOX=17 → BOX=14, y_start top-20 → top-29, height 20+rows*(B+G) → 29+rows*(B+G)
Result: 2pt clear gap between label baseline and box top (was 10pt INTO the label)
Box number font: Helvetica-Bold 9pt → 8pt to fit 14pt box cleanly
Page count unchanged: 14 pages
Root cause: box top (y_start+BOX) was above label baseline (top-13),
causing the first row of boxes to render over the SANITY/HP text.
Fix:
- BOX 15→12: smaller boxes give more vertical clearance per row
- y_start: top-20 → top-28: pushes first box row 8pt lower
- height formula: 20+rows*(B+G) → 28+rows*(B+G)
- Box number font: 8pt → 7pt (fits cleanly in 12pt box)
- Net result: 3pt clear gap between label baseline and box top
- Page count: unchanged at 15 (BOX=12 keeps row heights same or smaller)
StatBlock: BOX_H 44→52, HDR_H 14→18
- 7pt clear gap between value cap and header bottom (was negative)
- Stat values: Anton 13pt → DJVSCondBold 14pt (no ascender bleed)
- Labels: hot orange → white #F5F2E8 (removes colour confusion)
- Red accent divider line at header/value boundary — explicit split
- Flowable height 68→72 to accommodate taller box
Typography:
- Character names: Anton (condensed all-caps display — 70s poster/headline)
- Section banners: DejaVu Sans Condensed Bold (clean, functional, no serifs)
- Body text: Liberation Sans (sans-serif — breaks completely from 1920s parchment feel)
- Stats: Anton numerals + Condensed Bold labels
Visual design:
- Jet black backgrounds (#080808) — not dark mahogany
- MTA transit red accent (#CC2800) — not antique gold
- Hot orange secondary (#FF6030) — neon contrast, very 70s
- Cool newsprint page background (#EDEAE0) — not warm parchment
- Bold left red spine bar on all headers (replaces corner diamonds)
- Square corners throughout (no roundRect — brutalist/urban feel)
- Double-rule OrnRule: thick + thin (no Art Deco diamond ornaments)
- Cover: true black + bold red band + Anton display type
Feels like: NYC transit authority × wanted poster × punk zine × Warriors
1. Removed ×5 percentile from stat headers (CoC stats are already percentages)
2. Combat skill audit — all investigators now have minimum 40% on all combat
and Dodge skills, and at least one meaningful combat option:
- Helen Cross: Brawl 25→40%, added Derringer .22 (Firearms 20→40%)
- Dr. Graves: Brawl 35→40%, Scalpel 35→40%, Dodge 35→40%
- Vivienne: Revolver 35→40%, Brawl 15→40%
- Prof. Finch: Brawl 25→40%, Walking Stick 25→40%, Dodge 35→40%
Mickey Doyle and Louis Beaumont unchanged (already above threshold)
6 pre-generated investigators for NYC 1924 one-shot:
Helen Cross — The Reporter (Fast Talk 75%, Spot Hidden 60%)
Dr. Edmund Graves — The Doctor (Medicine 80%, First Aid 75%)
Mickey Doyle — The Private Eye (Spot Hidden 70%, Firearms 65%)
Louis 'Lucky' Beaumont — The Jazz Musician (Trumpet 85%, Charm 75%)
Vivienne St. Claire — The Heiress (Charm 75%, Credit Rating 90%)
Prof. Walter Finch — The Academic (Library Use 80%, Occult 70%, Mythos 20%)
14 pages: cover + 6x2 character pages + reference page
Art Deco 1920s theme: parchment, mahogany, antique gold
Root cause: tally_y was calculated from unc_y upward, but the table +
unconscious banner consumed more space than the 130mm section allowed,
pushing tally_y below hloc_y_bot. The combat reference section's accent
bar then painted over the circles.
Fix: hloc_h 130→148mm; tally_y now anchored at hloc_y_bot+12mm
(from the section bottom) so circles are always 12mm clear of any
overlapping bar regardless of table row count.
- tbl_y pushed 20pt below header bar in all three sections
(regular hloc, puppeteer hloc) so no text ascenders reach the bar
- Combat reference sub-headers also shifted down 4pt extra
- HP tally: squares replaced with 20 small white circles (r=5pt)
with tiny numbers 1-20 below each; white fill so crossable with pen
- CURR HP and ARMOUR write-in boxes: dark → white fill with
accent border so they can be marked/crossed in black pen
- hloc section expanded 100mm → 130mm to fill available space
- Body diagram labels: 5pt → 9-11pt, HP values 5pt → 10-11pt,
D20 ranges 5pt → 8-9pt; all shapes scaled up proportionally
- Section header bar now 3mm clear of masthead — no text bleed
- Table rows: 9pt height → 14mm; location names 8→11pt;
HP values 8→14pt OrbB; write-in boxes 8pt → 16mm×10mm
- Added CURR HP and ARMOUR column headers with larger write-in boxes
- HP tally boxes 7.5pt → 11mm each, numbered in Orbitron
- Puppeteer (Whisper) matching overhaul — 8 location rows,
Bezier neck curves with fill, heads, legs all scaled up
Fixes:
- Weapons section: rows were missing — loop reinserted, 2-line format
(name + skill% top / DMG · RNG · Notes bottom in mono)
- Stats: labels 6→9pt, values 18→23pt, strip 22→26mm height
- Text bleed: all text on accent-colour backgrounds changed to white
(header name/role, section headers, skill category bars, personality)
- Puppeteer (Whisper): separate hit location diagram with correct anatomy
— oval barrel body, two curved necks, two heads, two forelegs, rear leg
— D20 table: Body 01-07, R Fore 08-10, L Fore 11-12, Rear Leg 13-14,
R Neck 15-16, L Neck 17-18, R Head 19, L Head 20
— HP split: Body 40%, Heads 25%, Necks 20%, Forelegs 20%, Rear 25%
Stat block (BRP v4 + Stormbringer):
- HDR_H reduced 20→16pt, light cell grows 10→14pt
- Value baseline moved to y=16: cap top y=26, header bottom y=28 → 1.9pt clearance
- ×5 baseline moved to y=30: cap top y=34.7, divider y=36 → 1.3pt clearance
- No overlap between main stat and ×5 percentile at any value 1-20
Cover quick-reference table:
- D1 cover_rule_body was #2A2A2A on #2A2A2A rows — 1:1 contrast, completely invisible
- NC cover_rule_body was #C0D8F0 (fine contrast but unreliable font rendering)
- Both changed to colors.white on dark rows: 14-17:1 contrast
- cover_rule style font changed to Helvetica-Bold 8.5pt for reliable glyph rendering
StatBlock updated in both BRP (v4) and Stormbringer build scripts:
- Header band now 20pt (was 12pt), split into two zones
- Upper zone: stat label (STR, CON, SIZ etc.) in white/gold
- Thin accent divider line
- Lower zone: stat×5 percentile ('55%', '80%' etc.) same style
- Main stat value in light cell unchanged
- Page budget: +8pt per character, well within buffer on all sheets
Affects all six characters in all three scenarios:
Night Crawler, Day One, Stormbringer Kelen's Pact
6 Midjourney prompts for Sable Kress, Juno Rhee, Viktor Drav,
Tal Morgan, Reina Vasquez, Petra Amis.
Art direction: cinematic neo-noir, painterly digital oil painting,
augments subtle and grounded (NOT generic sci-fi neon-overload).
Includes PDF swap-in instructions and style drift correction notes.
Night Crawler:
- Rajdhani Bold font for all headers/character names
- ShareTechMono for stats/body — technical terminal aesthetic
- Complete colour audit: all contrast ratios 6:1+ (was 1.2:1 for some NC pairs)
- Cyan ONLY used on dark backgrounds; dark navy on all light backgrounds
- Dark derived-stats strip so cyan labels are always readable
Both scenarios:
- HP and SAN tracks now full-width, stacked, not side-by-side
- Box size 20pt (was 15pt), numbers 9pt bold (was 7pt)
- No milestone text below boxes (was causing 3pt clearance = visual overlap)
- Every 5th box shaded differently for quick orientation
- Portrait placeholder column (Midjourney art can be swapped in)
- Augment/What You Know moved to back page for better front-page breathing room
Event 91 (Night Crawler): 6 neo-noir operatives for Neo-Ashford 2087
- Sable Kress (Fixer), Juno Rhee (Ghost), Viktor Drav (Muscle)
- Tal Morgan (Tech), Reina Vasquez (Medic), Petra Amis (Analyst)
- Each with augment section, HP + Sanity tracks side by side
Event 159 (Day One): 6 London survivors for 17 May 2026
- Kira, Dev, Maggie, Olu, Priya, Tom
- Each with 'What You Know' section, HP + Sanity tracks
- Two-page layout: front (stats/skills/equip/special/tracks), back (background/hook/notes)
Theme system: night_crawler (electric cyan on dark navy) vs day_one (emergency red on near-black/parchment)
- HP track Flowable with numbered boxes, milestone markers
- Front page: stats/skills/portrait/equipment/demon/HP track
- Back page: physical description/background/hook/quote/notes
- Fixed cover thumbnail overflow (95pt fixed width)
- Corrected HP formula throughout (Stormbringer 1e rule)
HP = CON modified by SIZ (not CON+SIZ):
- SIZ 9-12: no modifier
- SIZ above 12: +1 per point above 12
- SIZ below 9: -1 per point below 9
Corrected HP values:
- Davin Kell: 28 -> 16 (CON 14, SIZ 14 +2)
- Ysolde: 21 -> 11 (CON 11, SIZ 10 +0)
- Cray: 21 -> 12 (CON 12, SIZ 9 +0)
- Sarath: 24 -> 13 (CON 13, SIZ 11 +0)
- Brenn: 28 -> 16 (CON 15, SIZ 13 +1)
- Lian: 22 -> 12 (CON 12, SIZ 10 +0)
Portraits for Davin Kell, Ysolde of Vilmir, Cray, Sarath the Twice-Turned,
Captain Brenn, and Lian. Each prompt includes demon-bound item detail and
matches the established Young Kingdoms art direction (1970s painterly,
Michael Whelan style, jewel tones and deep shadow).
6 pre-generated characters with full stats, skills, equipment, backgrounds,
and demon-bound items. Characters: Davin Kell (mercenary), Ysolde of Vilmir
(scholar-sorcerer), Cray (cutpurse), Sarath the Twice-Turned (former cultist),
Captain Brenn (sailor), Lian (devotee of Law).
New art assets for Is Love the Answer:
09 Serenthis — second image, different pose/scene
10 Mira Chen — NPC portrait, human xenobiologist
11 RR'raan — player character portrait, Kzin reconnaissance
12 Foolish Endeavour rising from Ringworld surface
13 Survey vessel descending toward Ringworld
14 Wide Ringworld inner surface landscape
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Scene art added:
91-ART-01 Cover: aerial Neo-Ashford, arcology towers / Undertow neon
91-ART-02 The Slab: dystopian market, child and the note
91-ART-03 Reth's squat: wall of notes, corkboard, the photograph
91-ART-04 The Junction: filament hub, six figures tiny below
91-ART-05 Three bodies: Feed Corridor, ribcages opened like flowers
91-ART-06 Primary node: through gallery glass, entity spreading
Combined with existing 5 NPC portraits — scenario now has complete art coverage
- scenarios/art/event-92/ — all 11 images, named and indexed in README
- apps/event-92-last-train/assets/ — same set, ready for app embedding
- scenarios/midjourney-prompts-master.md — master prompts for all 8 scenarios
Art covers:
01 Cover (tunnel run / Conductor)
02 Van Cortlandt murder
03 Platform sprint
04 Reflection vision
05 Lester Creed portrait
06 The Black Conductor (entity)
07 Third Rail Choir sigil
08 Sister Marion Vale portrait
09 Stillwell Avenue terminal
10 Brass token (prop/handout)
11 Subway car interior (bonus)
Single-file HTML GM tool for the Thursday 2pm ChaosiumCon UK 2026 session.
Covers timer, act pacing, NPC cards, clue tracker, handouts, player stat tracker (HP/POW/PP), reference tables, and pinboard.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>