Dated record of what changed, where, and why. Updated as the design evolves.
blog.html, the nav.js footer, and the next-link on Post 33. New image images/posts/hippo-lipstick.jpeg placed under the adage line and promoted to the blog.html thumbnail; post_34_vulture.jpg stays at the close of the post. Backup of the previous version at posts/post-34.html.bak.post_34_hippos.jpg (also the blog thumbnail) and post_34_betrayal.jpg. post_34_vulture.jpg stays on Post 34. Filenames unchanged — the paths simply point across. Wired: blog.html top entry, nav.js footer (Post 30 dropped), next-link from Post 34.workbench/tile_wireframes_model_comparison.html. Not yet printed; every budget in it is arithmetic until it is.rooms-data.jstrigger:'entry' means the first time this run — the same word, opposite meanings, 34 rooms using ours.shape field carries dead end / straight / L / T / 4-way, and it is the field to use for artwork: a count cannot tell a straight room from an L, and that is precisely what the September 18 photo-read got wrong on the Bedroom — right count, wrong geometry. doorsVerified stays false on all 85; a wiki agreeing with the data is corroboration, not a physical check.design_deviations.html (Frozen Accounts, Furnace Thawing, Frozen Items in the Room — the last Removed, revisit only if a Key-scarcity challenge needs a gated Key source), and the existing Freezer — Frozen Box row marked Overturned where it still said a Furnace on the board thaws them. The assistant twice reported no Freezer or Furnace rows existed; there were two, missed by searching the rendered table of a page whose table is built by JavaScript.rooms-data.js labelled Expansion, still listed in the glossary, which gains an Expansion filter. Bag is now 64; quick_reference.html updated. Consequence recorded: the cut removes the Babbage staff notice, which is the pointer in the Shelter time-lock chain — it reads “Entrance Hall clock stopped at half past one” and sends the player to that tile. The assistant first called the notice a duplicate of the Entrance Hall’s clock line; it is not, it is what makes that line mean anything. Neither half is built — the notice was designed and never made, and QQ confirms the clock line is an experiment he has not killed — so nothing working broke, but the 1:30 clue now has no delivery at all. Both open notes written onto the Entrance Hall and Security rows.room_glossary.html no longer holds its own copy of the rooms: it loads rooms-data.js like nav.js and shows the new columns (doors, dig, trunk, item roll, tile front, tile back, open) with a Default-bag filter and an open-questions filter. No build step. To change a room: edit the table, regenerate the file.quick_reference.html: five-step turn (Drawing Board gone), lock table names the never-locked hallways and the Great Hall, reminders for Dinner, Hallways, Dig spots, Red rooms, Silver Key; 65 tiles. item_spawn_reference.html: rebuilt — Trunks / Dig spots / Item roll callouts, 21 take-on-entry rooms, 8 roll-first rooms, the four physical decks as counted (35 / 22 / 16 / 17). room_setup_reference.html: Gallery and Room 8 in the bag, the three expansion rooms marked, red-die and bell notes gone. campaign_sheet.html: Frozen box, Coat Check line, Clock Tower Keys blank, West Gate tick, four clue-piece ticks, Vestibule dropped. first_run_tutorial.html: face-up tiles, Lock Pick and Silver Key, d6 4+ rolls, category descriptions, deck names. how_to_win.html: east path is Model 1, key sources are the Archived Keychain sources, each path names its clue piece. inventory.html, production_guide.html, tomorrow_room_cards.html: bell removed; once-today marker listed as not yet designed; Campaign Sheet replaces the Carry-Forward card.workbench/room_rules_first_pass.html and a Decided / Proposed / Open tag; front line and back text are the review table’s untested proposals. Decided by QQ today: the back is anonymous. No room name, no colour, nothing the front already says. First step against information overload is removing duplicates. The Greenhouse back carries four things — placement, dig count, the full rule, the lever line — and fits the safe zone at a rule-text size of 2.0mm (≈5.7pt as drawn); the print test decides legibility. Open questions the drawing surfaced: rotation (a dead-end tile placed in any of four orientations puts the name upside down from the seat), which side is up out of the bag (decides where gem cost lives), and the undesigned table-distance icon. The Sept 17 decisions themselves are in the Sept 17 entries below.images/posts/: post_34_betrayal.jpg (both editions of Betrayal on the shelf, in place) — post_34_hippos.jpg and post_34_vulture.jpg (both since added to the repo). Wired: blog.html top entry, nav.js footer (Post 28 dropped), next-link from Post 33.definition_of_done.html (“All tiles are self-explanatory”), teach script beat 3 (“Whatever the room says happens the moment you enter”), table card step 5 (“Do what the room says now”). Don’t trust the tile: design_documentation.html Section 7, twice (“do not rely on the tile art … refer to this table”), teach script beat 5 (“the reference sheet has every room. Look there first”), table card sidebar, Item Reference §6. first_run_tutorial.html says both. The fix had been designed twice and never built: design_deviations.html row 1, “Room Tile Visual Redesign” (May 28, High), and workbench/tile_text_suggestions.html (June 3, all 88 rooms rewritten at twenty characters). The 110-tile print order shipped three weeks later with the video game’s captions. Counting the glossary and the September room grid, the room text has been written three separate times — never on the tile. Caption count (from the June sheet against the room grid; QQ still to check it himself): of 80 default-bag captions that can be sorted, 31 state the whole rule and are correct; 20 are correct but incomplete (the “2 items” kind); 16 describe a mechanic this game cut or changed; 13 have no text. 49 of 80 can’t be acted on from the front. An earlier “about a third” figure was wrong. The paperwork drifted the same way. Four lookup sheets disagree with each other and with the September rules: item_spawn_reference.html, design doc Sections 7 and 16, quick_reference.html, the Protospiel room grid. rooms-data.js is loaded by no page; room_glossary.html carries its own inline copy of 86 records; item_spawn_reference.html, design_documentation.html, room_setup_reference.html, the Item Reference, difficulty_curve_comparison.html and the June sheet each hold a hand-typed room table. Nothing flows from anything, which is why the Sept 10 always-locked-trunk decision reached the workbench sheets and nothing else. The printed card decks don’t match their files (counted from photos): Resource Items printed 35 (file 30; Post 30 says 29); Special Items 22 (Post 30: 21); Trunk Contents 16 (file 12–15); Dig Results 17, with junk cards and turnips the file doesn’t have. The physical decks are the truth; the files get regenerated from them.quick_reference.html, design_documentation.html, CLAUDE.md and DEV 15; remove in the doc pass. DEV 3 and DEV 15 contradicted each other; this resolves to row 3. The dealer towers stay as objects (Post 32) but are not the draft mechanism.design_deviations.html (51 rows). Six were logged, several Locked. The Library Key and Bunk Room decisions were made on that false premise and are flagged RECONFIRM above. Special Items deck facts (from the photos): Sledge Hammer 3 of 22, Shovel 3 of 22; duplicate cards for single tokens (3 Shovels, 3 Sledge Hammers, 2 Salt Shakers, 2 Metal Detectors, 2 Magnifying Glasses, 2 Broken Levers) have no “already holding it” rule — needs one line like the Keychain’s “box empty → take 3 Keys”; the Metal Detector card (draw one Resource card each time a new room is drafted) is the strongest card on the table and isn’t logged; three Banana cards say +2 steps where the rule is +3 — misprint, reprint later.images/posts/ (packed box, banner, table with the “Players Wanted” balloon, the tile-back sketch, the “Claude lied” illustration). Wired: blog.html top entry, nav.js footer, next-link from Post 32. The post states the caption count as unverified and the Great Hall as undecided.rooms-data.js roll d6 on draft, 4–6 = trunk. This was decided in conversation months ago but never reached the files — quick_reference.html, item_spawn_reference.html, design_documentation.html, room_glossary.html and every roll: field in rooms-data.js still describe the old blue-die lock roll. Those files are not yet updated — see punch list. The Protospiel table sheets (workbench) carry the new rule.design_documentation.html Section 8 table on six rooms (Courtyard, Wine Cellar, Cloister, Dovecote, Secret Garden, Foundation), from room_setup_reference.html (Courtyard 3), and from rooms-data.js (Terrace 2, Cloister 2, Wine Cellar d6). Wiki check (blueprince.wiki.gg) found the VG has no fixed counts — rooms have “a random or definite chance” — so the table is a BPBG abstraction, not transcription. Three findings need design_deviations.html entries: (1) VG Cloister dig spots are sealed and inaccessible; the Solarium–Cloister unlock is a BPBG invention, not canon; (2) VG Closet has no dig spots; (3) VG base Courtyard has no dig spots (only the upgraded variant). The dig strip is the source of truth until the docs are reconciled.workbench/, all plain-language, all reflecting the always-locked trunk rule and the new dig counts: 5-Minute Teach (one page, six timed beats, do/don’t strip); Table Card (landscape: five-step turn loop + answers to the core questions); Dig Spots on Draft strip (two per sheet); Room Grid (four landscape sheets, 84 rooms, one square each: color, gem cost, dig, trunk, items, action). Built from rooms-data.js, item_spawn_reference.html and quick_reference.html. Not linked from the site; not production rules.posts/ checked for title, date, placeholders, missing images, broken links, name leaks, and prev/next. Findings: post 29 was listed on blog.html only inside an HTML comment (never live); post 30 (July 16) finished but never listed; four -DRAFT files with [QQ: …] prompts; prev/next links dead after post 7; footer “Dev Log” frozen on posts 23–27; homepage “Building in Public” frozen on posts 3–8 since April; post 12 dated Apr 18 on the index vs Apr 17 in the post; a stale duplicate post-29.html at repo root. No real-name or initial leaks in any post.posts/post-29.html → posts/post-29-DRAFT.html to match the other drafts; commented-out blog.html entry removed; stale root-level copy moved to _to_delete/post-29-old-root-copy.html. The numbered sequence now goes 28 → 30.posts/story1-fonts-DRAFT.html (new “The card type system” section; QQ’s angle for that post is respecting the source material — Mt. Holly’s own type). Five catalogue deck sections (Resource Items, Trunk Contents, Lever Clues, Treasure Maps, Kitchen/Meal) compressed into one section, “The other six,” keeping their card images. Dig Results caption “That’s the joke” removed. Typo confession trimmed. Meal Cards back path fixed (back-dinner.png → dinner-back.png). Header is the deck-back grid, post_30_backs_web.jpg (2400×657, 173 KB, resized from the 3.2 MB original which is kept alongside). Added to blog.html as the top entry.drafting-both-web.mp4, VG draft screen above the tower below, autoplay muted loop, caption “Same snappy feel.” Dealer-demo clip removed; VG draft clip kept. New paragraph makes the feel claim explicit: the tower's slide-out is the closest physical match to the VG draft screen in the prototype. Maker credited: Inspired Tabletop (Etsy, Chicago). Rarity-towers idea kept to one paragraph linking Post 26 and the new Model D entry, with an inline SVG of a by-rank button recipe (placeholder ratios, labelled as such). Closing pull is the dare plus the “property of a good mechanism” line. Also cut today: a 14.6 s silent montage of the dealer footage, dealer_montage_15s.mp4 / _web.mp4, not used in the post. Wired: blog.html top entry (thumb = hero poster), footer, homepage, chain 31 → 32.story2-materials-DRAFT.html became two posts. Post 31 (dated Sept 10): the materials tour — chests, telescope, dig tokens, coins, deck backs, meal cards, Entrance Hall clue, green-room family, tile generations, the two key props. All twelve [QQ] prompts resolved in conversation: chests are two different minis (large detailed one vs small paintable one), neither used — the solid gold cube won; Telescope was the first mini painted (purple spray); Secret Garden Key is the iam8bit replica; Archives keychain is expansion material; the 1:30 clock line is the only tile text QQ wrote himself; Tunnel block and Alzara sections cut; Closet-pair figure cut (it was old-vs-new, duplicating the three-room generations photo). New images: post_31_tile_generations.jpg (from IMG_6452) and a three-up row of the produced tiles (post_31_tiles_antechamber/grid/spread.jpg) above the closing pull. Opening rewritten to carry the summer-quiet frame and point at post 30. Post 32 took the dealer-tower section (hero video drafting-both-web.mp4, 1280px, 2.2 MB, silent, from the 41 MB original, with poster) — see its own entry above. post-31-DRAFT.html (the abandoned fork) retired to _to_delete/. 46 HEIC photos in images/posts converted to JPG (2000px); originals moved to _to_delete/heic/.post-nav block in the same position: ← previous title / next title →, first post has only next, last has only previous, chain skips the 29 draft. Titles pulled from each post’s own h1. Verified programmatically: 56 links, all resolve, div counts balance. nav.js footer Dev Log column now 30, 28, 27, 26, 25. index.html “Building in Public” now 30, 28, 27, 26, 25, 24. Post 12 date on blog.html corrected to April 17.index.html had not changed shape since spring: a still hero, stat strip, a “Building in Public” row that sat on posts 3–8 for five months, and a long About. Rebuilt on the same site.css tokens. Hero is the 15-second dealer-tower montage (dealer_montage_15s_web.mp4, autoplay muted loop, poster fallback), same three CTAs. Stats corrected: 110 room tiles, 131 cards in 10 decks. New “What’s on the table right now” section: a nine-photo gallery grid, every photo a link into the post where it happened, with a one-line caption and month — dealer tower (32), produced tiles (31), the two chests (31), 131 Faces (30), the green rooms (31), Secret Garden Key (31), Session 3 (21), the spinner (23), Room 46 (31). Dev Log now shows the three most recent posts with thumbnails instead of six text cards. Play it: four cards (First Run, Quick Reference, Print & Play, Room Glossary) plus “All documents” to rules.html. About shortened to one paragraph and a fact grid (40 mm tiles, drawstring-bag draft, solo/2-player, ~45 min) linking to about.html. Ten new 1200×675 crops in images/home/. “Dev Log” label kept — the Blog-vs-Dev-Log naming question is parked. Rendered at 1400 and 400 px; no horizontal scroll, all image and link targets exist on disk. Follow-ups same night: hero now plays the montage once per tab and rests on the all-tiles still (a refresh shows the still; a new tab replays), reduced-motion users get the still only; the four Play it cards got hand-drawn inline SVG icons — sneaker (Steps), magnifying glass, print-and-cut card, manor grid with the Antechamber lit.f248029). Still local at time of writing: the rebuilt index.html, the images/home/ crops, and small edits to posts/post-24.html, posts/post-32.html and this changelog. One more commit and push puts the homepage live.section-blocks (5 decks each) to fill the vacated row and balance the grid. All ten *-print.html links preserved; the second column uses a dimmed “cont.” continuation header. Campaign Sheet (the only Tracking Sheets item) remains linked from the nav.js footer and tracking.html, so it is not orphaned.nav.js footer “Print & Play” column linked the retired alzara_cards.html and treasure_map_cards.html sheets; repointed to resource-items-print.html and special-items-print.html (Campaign Sheet kept). The nav-highlight isActive([…]) array still listed stale deck stems (alzara, tomorrow, commissary, special_items, dig_results, trunk_results, meal_cards, treasure_map), a duplicate campaign_sheet, and the never-existed player_sheet; simplified to ['print','tracking','campaign_sheet','constellations'] — the 'print' stem matches all ten *-print.html pages with no false positives. Verified: zero stale old-deck links site-wide, all ten current print links resolve. Left untouched (verified legit, not stale): kitchen_menu_card.html (the in-game Kitchen Menu Card in the Reference section — distinct from the Kitchen Menu print deck) and the meal_cards.html mention in posts/post-07.html (editorial prose).section-block) separate from print.html; the July 10 rebuild updated print.html but missed this one. It still showed the pre-rebuild decks: old links (common_items_cards.html, trunk_results_cards.html, etc.), old names (“Common Items Deck”, “Trunk Result Cards”, “Dig Result Cards”), old counts (30/24/21/12…), the retired “Tomorrow Room Cards” deck, and a “9 decks” header. Rewritten to mirror print.html exactly: the ten current decks with new *-print.html links, new names (Resource Items, Trunk Contents, Dig Results, …), corrected counts, Lever Clues + Kitchen Menu in place of Tomorrow Room, and a “10 decks” header. Verified all ten links resolve and no old *_cards.html links remain on the page. (The only surviving old-page reference site-wide is editorial prose in posts/post-07.html auditing the old meal_cards.html — left as historical record.)nav.js each carried a padlock icon on their design_documentation.html link. Because nav.js renders on every page, these two icons appeared site-wide (including the footer on index.html) — and were missed by every prior pass because those passes grepped page HTML only, never the shared injected component. Both icons commented out of nav.js. Also deleted nav_fix.js, an unreferenced git-tracked duplicate of nav.js that still held two lock icons (dead file, not loaded by any page). This is the same postmortem failure repeating: check the thing that renders on every page, not just the pages. Verified: the padlock SVG path now appears in zero live files (HTML/JS/CSS).display:none!important CSS rules. In practice the icons were still visible to the user on index.html. Switched to commenting the SVG/badge markup out of the DOM entirely (<!-- lock icon removed --> / <!-- lock badge removed -->), which does not depend on the cascade, cache, or selector matching. Removed this way: index.html — 4 doc-linked padlock SVGs (hero & featured "rules" buttons, Design Documentation carousel card, doc-list link); design.html — 10 padlock SVGs on doc-entry-title plus the 🔒 PASSWORD text badge. Verified: 0 <svg> and 0 rendered 🔒 in both files; site-wide the padlock SVG path no longer appears in any file. The old display:none rules on design.html are left as harmless dead code with an updated comment. To restore: un-comment the <!-- lock icon/badge removed --> markup (and the gate <script> blocks); delete the dead CSS rules.display:none rule matched the icons and declared victory — but never confirmed they were actually invisible in a rendered browser. The rule looked correct on paper (stylesheet !important should beat inline non-!important), so I trusted the theory over the user's direct observation that the icons were still there. Analysis is not verification. (2) Grepped for one signature, not the concept. Early passes searched only for the padlock <svg> path, so the 🔒 PASSWORD text badge and the 🔒 emoji suffixes in posts/post-26.html were invisible to the search and surfaced only on later, broader sweeps. A “lock indicator” is a concept with several representations (SVG icon, emoji badge, emoji suffix, gate text), and each pass widened the net only after the previous one missed something. (3) String-matching fragility. One index.html icon survived a bulk find/replace because its SVG abutted </span> with no leading space while my search string assumed a leading space — the count said 1 remained, catching it, but it should have been anticipated. Lesson: for “make X not appear,” verify the rendered result (0 elements in the DOM), enumerate every representation of X before searching, and prefer removing markup over relying on CSS to suppress it.index.html (“The Audit” and “The House That Already Exists”) and four in prev/next post-navigation links (posts/post-04.html, posts/post-06.html ×2, posts/post-10.html). These pointed at other blog posts, not locked docs, so the padlock was meaningless. Nav links now read cleanly (e.g. ← The Gem Desert, The Audit →). This is a permanent fix, independent of the temporary gate-off state — no restore step. A broader indicator audit also found two 🔒 emoji suffixes on sidebar links in posts/post-26.html (“Difficulty Curve Models 🔒”, “Design Ideas 🔒”); the emoji were removed outright (also permanent). After cleanup the padlock SVG survives only where policy allows: design.html (10, on doc-entry-title) and index.html (4, all pointing to the locked design_documentation.html); both sets — plus the 🔒 PASSWORD badge on design.html — are currently temp-hidden while the gate is off. All blog posts are now indicator-free.room46 / bp_doc_auth) was temporarily switched off on all eleven protected pages so they render without a prompt: design_documentation, definition_of_done, production_guide, shopping_list, design_deviations, room_setup_reference, difficulty_curve_comparison, changelog, design_ideas, blue_prince_expansion_list, and the-case. On each page the gate <script> block was wrapped in an HTML comment marked PASSWORD GATE TEMPORARILY DISABLED — remove this comment wrapper to restore; the code is intact and reversible. The lock icons were hidden via temporary CSS rules (same restore marker): on design.html (.doc-entry-title svg) and on index.html, where four lock icons point at locked docs (hero/featured "rules" buttons, the Design Documentation carousel card, and the doc-list link — .btn-outline svg,.carousel-card-title svg,.section-block-list a svg). The index.html rule deliberately does NOT touch the two lock icons on blog post titles (lines ~226/238) — those are a pre-existing policy violation, tracked separately. A follow-up audit (July 14) also found a 🔒 PASSWORD text badge on the Design Documentation entry in design.html that the SVG rule missed; it is now hidden by the same temporary rule (.doc-entry-tag span). No file content or gate logic was deleted. To restore: remove the comment wrappers on the eleven pages and delete the three temporary CSS rules (.doc-entry-title svg and .doc-entry-tag span in design.html; the button/carousel/list rule in index.html).coomissary-stock-back → commissary-stock-back).<deck>-print.html), each tiling the deck's PNG faces nine-up on US Letter with a matching card-back sheet for duplex printing, a Print button, and a ZIP download link. Each deck also packaged as a ZIP of its individual PNGs in images/cards-for-print/zips/. print.html rewritten to list exactly these ten decks with both "Print sheet" and "Download ZIP" actions. Retired the old hand-built card sheet-pages and the Tracking/Reference/Tomorrow Room entries from the Print & Play index (these ten decks are now the full home-print set). nav.js wired into every new page.images/ root into subfolders: posts/, playtests/, tokens/, lore/, metaclues/, win/, room-cards/, art-assets/, promo/, misc/, icons/, fonts/. All HTML file image paths updated across the full site. Verified clean via deadlinkchecker.com — 232 OK. Five remaining flagged items are intentional placeholder slots in interview2.html with onerror fallback handlers. Global broken image handler added to nav.js — any failed img tag now shows a navy "Image Unavailable" placeholder automatically.posts/ subfolder. Internal paths updated with ../ prefix (site.css, nav.js, images/, blog.html back link, root page links). Root-level files updated: blog.html, index.html, design.html, and nav.js footer links all point to posts/post-XX.html. nav.js converted from relative to root-relative hrefs (href="index.html" → href="/index.html") so nav renders correctly from any subfolder depth._meta/ folder gitignored — session handoff files, private notes, and design docs never push to Netlify. production/ gitignored. Font subfolders gitignored. *.zip, *.eml, .DS_Store gitignored.<link rel="stylesheet" href="site.css">, so the nav injected by nav.js had no styles to apply. Added the site.css link, the standard body { padding-top: 0 !important } override to prevent the page's own 24px body padding from pushing the nav down, and a margin-top: 32px on .print-label so the first content element sits below the nav with breathing room rather than hugging it. Print media already hides the nav via site.css's @media print rules, so the print layout is unaffected. Visually confirmed in browser. Removed from the punch list.common_items_cards.html, kitchen_menu_card.html, loop_card.html, rank_track_card.html, alzara_cards.html, card_backs.html, commissary_stock_cards.html, dig_results_cards.html, meal_cards.html, special_items_all_sheets.html, tile_backs.html, tomorrow_room_cards.html, treasure_map_cards.html, trunk_results_cards.html. Note these may be intentionally standalone for print use without nav — audit should check whether each page is intended to be browsable from the site or purely a print artifact.blue_prince_rules, how_to_win, first_run_tutorial, production_guide, campaign_sheet, shopping_list, book_effects_reference, item_spawn_reference, and the paper-styled docs (room_setup_reference, constellations, blue_prince_expansion_list, difficulty_curve_comparison). These use a body { padding: 40px 20px } + .page border frame pattern. Each doc's layout is substantially unique (different table structures, callouts, badges, content flow) — the shared surface between them is maybe 30% of their CSS, mostly the outer .page frame and doc-header styles. Decision: leave these alone. The maintainability win from centralizing the frame across 10 files wouldn't justify the risk of per-file regressions when each doc is structurally distinct. Net impact of stopping: about 100–150 more lines that stay duplicated across those files but don't create active maintenance cost until the paper-doc design itself is revisited..page-hero suite (hero + inner + h1 + p), .page-body (1100px container), .doc-entry suite (doc-list card pattern used on section hubs), .intro-block (gold-bordered callout), .section-divider (small-caps eyebrow separator), and a site-wide scroll-margin-top rule so anchor-link jump targets don't hide behind the sticky nav. Unified four legacy hero class names — .section-hero, .cl-hero, .blog-hero, .gloss-hero — into a single .page-hero class. Migrated 12 files: rules, reference, print, design, blog, changelog, design_deviations, design_ideas, inventory, room_glossary, rollout_plan, tracking. Per-file visual quirks preserved via small inline overrides (tighter hero padding on docs, 900px width on tracking, font-size tweaks on inventory, etc.) — no visual changes intended. Net reduction: 73 lines of inline CSS across the 12 files. Site.css grew by ~200 lines (one-time). Remaining Phase 4 targets: the "big inline doc" pattern (rules doc, how_to_win, first_run_tutorial, production_guide, campaign_sheet, etc.) — those use a body { padding: 40px 20px } + .page border pattern that needs careful per-file handling..post-prose wrapper for body text — but the hero itself had no such wrapper, so the dek and title stretched the full 1100px while the body text wrapped at 760px. Posts 08–13 used 780px everywhere with no inner wrapper. Neither pattern had the dek and body text aligned at the same width within a single post. Option A chosen from the two standardization options: apply the newer "wide hero + prose column" design everywhere. Each post now has a .post-prose wrapper inside .post-hero-inner containing the back link, meta, title, and dek — constraining them to 760px with left alignment — matching the .post-prose wrapper already used inside .post-body. Hero text and body text now start at the same x-position and wrap at the same width. The 1100px navy hero background with blueprint grid still spans the full wide area; only the text inside is constrained. Posts 08–13 also had their 780px width overrides removed from inline CSS since those values now conflict with the standard layout. Affects all 13 blog posts plus their inline CSS..run-log variant with opacity: .6 on labels in posts 11–12 overrides the default). The body { padding-top: 0 !important } nav-offset fix stays inline in the 10 posts that have it — not hoisted site-wide because it would affect non-post pages. Posts 01–03 don't have it; that's an unresolved gutter issue predating this pass, flagged for the punch list.position: sticky so it stays in view while scrolling through dated entries. On narrow viewports (under 900px), the sidebar collapses below the changelog as a single column. Seeded with two user-flagged items (Dev Log spacing issue, Loop Card → Complete Turn Loop Card rename) plus five carry-forward items from prior sessions (typography bump, Kennel dig-spot, Maid's Chamber mechanic, verified-alignment retrofit, gem-cost sweep, rules doc intro update, spacing tokens discussion).--navy-900 alias to purpose tokens like --color-bg-hero, so one primitive change propagates site-wide), typography tokens (h1-hub, h1-post, h1-hero, prose, meta, eyebrow, micro sizes; line heights; letter spacing), container width tokens (--container-wide: 1100px, --container-prose: 760px), and color-mix() in oklch for derived tints/shades (Baseline Widely Available 2026). Legacy aliases like --navy, --gold, --bg are preserved so all existing inline CSS keeps working unchanged. Spacing scale deferred per user direction. Cascade layers were initially wrapped around the rules but caused a real regression: pages with inline * { margin: 0; padding: 0; } resets (like the rules doc) had those unlayered resets override the layered component styles, collapsing the nav's padding. Unlayered styles always win over layered ones by design, which is incompatible with a codebase where every page has its own inline reset. Traditional specificity-based cascade reverted. The tokens provide the maintainability win the cleanup was aimed at; the layer wrapping would only matter if inline styles were eliminated first, which is a later phase.clamp(28px, 5vw, 48px) compared to the section hubs (Rules, Reference, Print & Play, Design) at clamp(24px, 4vw, 40px). Changelog was slightly smaller at clamp(24px, 4vw, 38px). Both normalized to the section-hub standard clamp(24px, 4vw, 40px). The Home page hero stays largest at 64px (intentional — it's the marketing hero, not a section hub). Individual blog posts keep their 44px treatment — appropriate for article titles. This pass is specifically about section-hub consistency.position: relative on the <li> with padding-left: 34px to reserve space, plus position: absolute on the ::before pseudo-element to place the badge in that reserved space. This keeps the <li> as a normal block container — text and <strong> tags flow as inline content and wrap at word boundaries the way text always does. The fix applies to both .steps (numbered steps) and .bullets (bulleted lists) in the rules doc..roll-num badge style (navy pill with number) for numeric outcomes — visually distinct from the OPEN/LOCKED badges used for lock dice, so the two die systems are immediately tellable apart..lead preamble ("Roll blue die:") and each outcome on its own line via .outcome spans instead of <br>-heavy markup. The "What's in Each Deck" section splits internally into two columns (Common | Special) using CSS multi-columns for the item lists, preserving compact density without forcing the whole page into a cramped grid. Dead .section-wide CSS removed. Also corrected two lingering stale bits on this page that had been missed in prior sweeps: the White die label ("Ranks 1–4" → "Rank 4" — Ranks 1–3 are never locked) and an added italic note under the die pills stating "Ranks 1–3 are never locked — no die roll needed."#0D253D) at 10% opacity — which, on a cream background, desaturated to a gray appearance rather than a clearly blue one. The other color badges (Purple, Green, Red, Yellow) all held their hue better at the same opacity because they're more chromatically saturated. Swapped Blue to a cobalt (rgba(37,99,235,.14) background / #1e3a8a text) with a slightly higher fill opacity matching the treatment Yellow already uses. Now reads immediately as blue at a glance.constellations.html as a single printable reference card in the style of rank_track_card.html and loop_card.html: cream background with blueprint grid, all nine constellations (1, 2, 3, 4, 7, 8, 11, 15, 50 stars) with their effects, a Planetarium aside, and a 50-box tally grid with gold-bordered milestones at the unlock thresholds. Linked from print.html under a new "Reference Cards" section and from the Observatory section of the rules doc (the "consult the constellation booklet" reference now points to this card). nav.js updated so the Print & Play tab highlights on the new page.site.css are always 1100px. This caused visible "jumping" when navigating between pages — content would suddenly narrow or widen while the nav stayed the same. Standardized outer containers at 1100px to match site chrome. Narrow reading-width content (blog post prose, changelog dek, How to Win's document-style page) is now wrapped in an inner container at 760px so line lengths stay readable while the outer container aligns with nav/footer. How to Win specifically uses a .page-wrap outer container so its 760px paper-style document remains visually intact.<link rel="stylesheet" href="site.css"> after its embedded <style> block, plus a small override snippet to normalize body padding for the fixed navbar. how_to_win.html was missing both — nav.js was still injecting the navbar/footer HTML into the page, but without site.css the navigation rendered unstyled. Added the standard two-line block to match the pattern used by rank_track_card.html, loop_card.html, and the rest of the reference docs.<table> tag on the previous line 610 that was producing an empty second table element..steps li selector was a descendant selector rather than a direct-child selector, so the nested <ul> inside step 5 inherited the numbered-badge treatment — causing steps 6 through 10 in the rendered output to actually be step 5's sub-items. Also caused awkward word-wrap because the flex layout applied to nested text. Scoped the selector to .steps > li and added proper nested list styling (gold diamond bullets, indented, no counter). Nine numbered steps now render correctly with step 5's five sub-items indented beneath.design_ideas.html tracks proposed mechanics through their lifecycle: Proposed → Under Review → Prototyping → Adopted / Rejected. Structure mirrors Design Deviations — filterable table with status, affects-category, and VG alignment columns. First entry filed: Sledgehammer → Secret Garden double door — carrying the Sledgehammer into the Secret Garden opens a second Antechamber door (East) in addition to the West door the room already opens. Matches the VG's Power Hammer behavior. Sledgehammer is not consumed but the East-door effect fires once per run. Status: Proposed. Linked from design.html's Project Record section.changelog.html — a dated, filterable ledger of every change made session by session. Tracks bug fixes, renames, deferrals, additions, and cleanup. Linked from design.html's Project Record section. Retroactive entries populated for Sessions 4 and 5 when creating.room_glossary.html (truth source) and room_setup_reference.html. Three rooms disagreed: Secret Garden was listed as Found Floorplan but is actually an Event Addition (enters bag when Secret Garden Key is used); The Foundation was listed as Active Draft but is a Fixed Floor Plan (with a setup nuance — it starts in the bag, then becomes permanent at first placement); Security was named "Security Room" in setup but "Security" in the glossary and VG. All three fixed. Cross-check now shows zero disagreements.</div> with one simple mechanical function...) where the Security section's opening had been deleted but the tail left behind. Section rebuilt clean as part of the deferral above.b-yellow badge style. Dining Room also flipped — it had been incorrectly tagged as Shop, but the VG catalogs it as a Blueprint. Now Blue with no shop tag.color for the room's actual border color, category for its structural role (Fixed Floor Plan, Found Floorplan, Outer Room, Event Addition, Studio Addition). Display renders both badges; filter dropdown now has separate color and category filters. Affects 28 rooms that previously carried one confused tag.color2 field. Entry text describes the item-icon suppression mechanic, but the design itself is flagged as not fully settled — pending confirmation or redesign.