ERB Firsts

ERBFirsts.com Version Log  v0.96

ERBFirsts.com Version Log

================================================================================
VERSION v0.96 — 2026-04-15  [rebuild_pass26.py — mobile auth Sign In/Sign Out fix]
================================================================================
RESULTS FROM v0.95:
- Firestore block rendering working correctly on generated pages.
- Forum index deployed with working search, online counts, title bar.
FIXED:
- Item 1: Mobile hamburger menu now shows "Sign In" (not logged in),
    "Sign Out" (member), "Admin" + "Sign Out" (admin). Fixed double-brace
    bug in auth_script_html() that produced invalid JS on all generated
    pages. Fixed text on all 11 static/forum pages. Removed duplicate
    mob_admin block from static pages.
- Item 2: Forum index magnifying glass 🔍 now far-right on Total members
    line. Moved button outside inner div to be direct flex child of
    forum-online-bar (justify-content:space-between).
- Item 3: Forum index mobile title bar: "Sign In" button right-aligned on
    same line as "ERBfirsts Forum". JS updates to "Sign Out" when logged in.
- Item 6: Layout Editor v4.4 → v4.5. Save button is now gray when clean,
    gold when dirty (unsaved changes). dirty class added/removed at
    markDirty(), saveBook() success, loadBook(), and _reloadBlocksForMode().
- Item 7: Version log updated. Entries added for pass24, pass25, pass26.
GENERATOR: rebuild_pass26.py
--
================================================================================
VERSION v0.95b — 2026-04-14  [rebuild_pass25.py — static page auth updates]
================================================================================
RESULTS FROM v0.95:
- Firestore block rendering working on generated pages.
FIXED:
- All 11 static/forum pages updated with mobile hamburger menu Admin and
    Log Out auth logic (sessionStorage-cached role check).
- Forum index deployed with corrected layout and auth.
GENERATOR: rebuild_pass25.py
--
================================================================================
VERSION v0.95a — 2026-04-13  [rebuild_pass24.py — hamburger on static pages]
================================================================================
RESULTS FROM v0.94:
- Auth/login working correctly on generated book pages.
FIXED:
- Mobile hamburger menu added to all static and forum pages
    (erb-dj, erb-feast, erb-signatures, erb-sell, erb-erblinks, erb-misc,
    erb-inscription, forum-index, forum-members, forum-admin, forum-login).
- Mobile menu positioned outside erb-header (position:fixed) per
    architecture requirement.
GENERATOR: rebuild_pass24.py
--
================================================================================
VERSION v0.95 — 2026-04-13  [rebuild_pass23.py — Firestore block rendering]
================================================================================
RESULTS FROM v0.94:
- All auth/login fixes working: Google sign-in completes, redirects to
    originating page, nav switches to Admin after login.
FIXED:
- Generator now reads block layout data from Firestore books/{bookId} at
    build time. Books with saved editor data render identifier and photos
    sections from Firestore blocks. All other books fall back to hardcoded
    data unchanged. Phase 1: text, image, label_image, photo, dj block types.
- Layout Editor v2.6: added Copy Blocks button (copies blocks JSON to
    clipboard for debugging and data inspection).
- Firestore rules: books collection read access changed to public (allows
    generator to fetch without credentials).
GENERATOR: rebuild_pass23.py
--
================================================================================
VERSION v0.94 — 2026-04-12  [rebuild_pass23.py — auth domain + returnUrl nav fix]
================================================================================
RESULTS FROM v0.93:
- Google sign-in redirect not completing: getRedirectResult returning null
    due to cross-origin storage issue between erbfirsts.com and
    erbfirsts-d5f0b.firebaseapp.com. Auth session never established after
    Google redirect, onAuthStateChanged fired with null user. Nav stayed on
    My Account instead of switching to Admin.
- Generated pages missing returnUrl onclick on My Account nav link, so
    returnUrl always defaulted to https://erbfirsts.com regardless of
    originating page.
- DeployERBFirsts BAT closing on Step 2 when filename had Windows duplicate
    suffix e.g. (4) — parentheses in filename broke cmd pipe parsing.
FIXED:
- authDomain changed from erbfirsts-d5f0b.firebaseapp.com to erbfirsts.com
    on all pages (15 static/forum + all 80 generated). Auth redirect now
    stays on erbfirsts.com domain via Firebase Hosting /__/auth/handler,
    resolving cross-origin storage issue. Sign-in completes correctly,
    Admin nav updates after login.
- returnUrl onclick added to nav-account-link on all generated pages
    (cover pages + detail pages) in nav_html(). returnUrl now correctly
    encodes originating page URL.
- DeployERBFirsts v22: strip (N) duplicate suffix and -vX.Y version suffix
    moved to top of ROUTEFILE before any echo/pipe commands.
- erb-forum-login.html footer changed from forum category links to
    standard site footer (Home / Tarzan / MPV / Other)
GENERATOR: rebuild_pass23.py
--
================================================================================
VERSION v0.93 — 2026-04-12  [rebuild_pass22.py — nav layout editor link]
================================================================================
RESULTS FROM v0.92:
- Page Layout Editor nav link had href="#" (placeholder) on all pages
FIXED:
- nav_html() updated: Page Layout Editor now links to erb-layout-editor.html
    target="_blank" on all generator-produced pages (covers + detail pages)
- Full regeneration of all 80 cover/detail pages
================================================================================

================================================================================

================================================================================
VERSION v0.92 — 2026-04-11  [erb-rebuild_pass22.py — generator renamed]
================================================================================
FIXED:
- Generator renamed to erb-rebuild_pass22.py so BAT can accept it as a
    single file deploy or in a zip. BAT strips erb- prefix when saving to
    project root. All unnecessary BAT complexity reverted.
================================================================================

================================================================================
VERSION v0.91 — 2026-04-11  [rebuild_pass22.py — auto-run verification on expand]
================================================================================
FIXED:
- erb-claude-chats.html: clicking New Chat Verification auto-runs check
    immediately on expand — no separate Run button needed
================================================================================

================================================================================
VERSION v0.90 — 2026-04-11  [rebuild_pass22.py — embed verification in Claude Chats]
================================================================================
FIXED:
- erb-claude-chats.html: New Chat Verification now expands inline on same
    page (like Chat Registry) instead of linking to separate erb-verify.html
- erb-verify.html kept for direct URL access but no longer in nav
================================================================================

================================================================================
VERSION v0.89 — 2026-04-11  [rebuild_pass22.py — session persistence fix]
================================================================================
FIXED:
- erb-forum-login.html: set browserSessionPersistence so login session clears
    when browser tab/window is closed — prevents next user seeing prior
    user's account and posting under their identity
================================================================================

================================================================================
VERSION v0.88 — 2026-04-11  [rebuild_pass22.py — nav visibility + returnUrl]
================================================================================
FIXED:
- erb-forum-index.html: sessionStorage script wrapped in DOMContentLoaded
    so nav-last-item visibility is set correctly after element exists in DOM
- erb-forum-login.html: after login redirects to returnUrl parameter if
    present, otherwise falls back to forum index
- All pages: My Account link passes current page URL as returnUrl so user
    returns to originating page after login
================================================================================

================================================================================
VERSION v0.87 — 2026-04-11  [rebuild_pass22.py — fix login redirect]
================================================================================
FIXED:
- erb-forum-login.html: after Google login, redirect now uses absolute URL
    https://erbfirsts.com/forum/erb-forum-index.html instead of relative URL
    which was keeping users on erbfirsts-d5f0b.web.app (old cached version)
================================================================================

================================================================================
VERSION v0.86 — 2026-04-11  [rebuild_pass22.py — Claude Chats page redesign]
================================================================================
FIXED:
- erb-claude-chats.html: two stacked buttons (Chat Registry, New Chat
    Verification) each with blurb to the right; Chat Registry expands to
    show table with Add Chat button below
================================================================================

================================================================================
VERSION v0.85 — 2026-04-11  [rebuild_pass22.py — nav cleanup]
================================================================================
FIXED:
- All pages: Removed "New Chat Verification" from Admin dropdown — it's now
    accessible via the Claude Chats page only
- Admin dropdown order: FORUM, WEB label, Claude Chats, Page Layout Editor,
    Version Log, My Account
================================================================================

================================================================================
VERSION v0.84 — 2026-04-11  [rebuild_pass22.py — Claude Chats page]
================================================================================
FIXED:
- erb-claude-chats.html: new standalone page with Chat Registry (compat SDK,
    no db.collection error) and New Chat Verification button
- Admin nav: "Claude Chats" added to Web submenu on all pages
- erb-forum-admin.html: Site Verification and Chat Registry sections removed
================================================================================

================================================================================
VERSION v0.83 — 2026-04-11  [rebuild_pass22.py — Chat Registry]
================================================================================
FIXED:
- erb-forum-admin.html: Chat Registry section added (section 8) — track
    Claude chat sessions by name and conversation ID with add/edit/delete/
    reorder. Stored in Firestore site/chats document.
- Rule 11 updated: new chat detection, verification, chat registration flow
================================================================================

================================================================================
VERSION v0.82 — 2026-04-10  [rebuild_pass22.py — fix EXPECTED variable name]
================================================================================
FIXED:
- erb-verify.html: column header rename had incorrectly renamed JS variable
    EXPECTED to "FIREBASE VALUE" (with space) — invalid identifier, crashed
    script silently. Restored JS variable to EXPECTED; HTML header stays
    "Firebase Value"
================================================================================

================================================================================
VERSION v0.81 — 2026-04-10  [rebuild_pass22.py — verify fix + BAT Firestore update]
================================================================================
FIXED:
- erb-verify.html: fixed snap.exists() -> snap.exists (compat SDK property,
    not function) — was crashing script silently on load, causing button to
    do nothing
- DeployERBFirsts_17.bat: now automatically updates Firestore site/verification
    document after every successful deploy via REST API
================================================================================

================================================================================
VERSION v0.80 — 2026-04-10  [rebuild_pass22.py — fix Admin blink on Forum Index]
================================================================================
FIXED:
- erb-forum-index.html: removed duplicate nav-last-item visibility line from
    onAuthStateChanged callback — was causing Admin to blink on page load
================================================================================

================================================================================
VERSION v0.79 — 2026-04-10  [rebuild_pass22.py — verify compat + Forum dropdown]
================================================================================
FIXED:
- erb-verify.html: converted to Firebase compat SDK (no type=module) so
    Run Verification button works correctly
- All pages: Forum nav item now shows arrow and hover dropdown (Forum Index,
    Members) matching all other nav items
- Forum pages: removed onclick="return false;" so Forum dropdown works on hover
================================================================================

================================================================================
VERSION v0.78 — 2026-04-10  [rebuild_pass22.py — verify UI fixes]
================================================================================
FIXED:
- erb-verify.html + erb-forum-admin.html: column headers renamed —
    "Current Value" -> "Live Site Count", "Expected" -> "Firebase Value"
- Both files: version regex fixed to match text-muted span correctly
================================================================================

================================================================================
VERSION v0.77 — 2026-04-10  [rebuild_pass22.py — fix onclick in module scripts]
================================================================================
FIXED:
- erb-verify.html: exposed runVerification to window scope so onclick works
    with type="module" script
- erb-forum-admin.html: exposed runVerification and saveVerificationToFirestore
    to window scope for same reason
================================================================================

================================================================================
VERSION v0.76 — 2026-04-10  [rebuild_pass22.py — Firestore verification]
================================================================================
FIXED:
- erb-verify.html: now reads expected values from Firestore site/verification
    document; falls back to hardcoded defaults if unavailable; fixed version
    regex that was returning "not found"
- erb-forum-admin.html: Verification section now has "Save as New Expected
    Values" button that writes current values to Firestore so erb-verify.html
    always compares against the latest deployed state
================================================================================

================================================================================
VERSION v0.75 — 2026-04-10  [rebuild_pass22.py — nav closing div fix]
================================================================================
FIXED:
- All static pages: missing closing </div> tags after </nav> causing page
    content to render inside header. Affected all 10 static pages.
================================================================================

================================================================================
VERSION v0.74 — 2026-04-09  [rebuild_pass22.py — Admin nav flat list]
================================================================================
FIXED:
- All pages: Admin dropdown now flat list — FORUM (clickable), WEB label
    (non-clickable), New Chat Verification / Page Layout Editor / Version Log
    (indented), My Account at bottom
- Applied to all static, forum, generated pages
================================================================================

================================================================================
VERSION v0.73 — 2026-04-09  [rebuild_pass22.py — Admin nav restructure + Verification page]
================================================================================
FIXED:
- All pages: Admin dropdown restructured — Web submenu (Version Log,
    New Chat Verification, Page Layout Editor) + Forum submenu (Forum Admin)
- erb-verify.html: new standalone verification page with Run button showing
    version #, generator, CSS lines, index.html lines, page counts by series
- Submenu CSS added to erb-style.css
- All static pages, forum pages, and generated pages nav updated
================================================================================

================================================================================
VERSION v0.72 — 2026-04-09  [rebuild_pass22.py — Admin Verification tab]
================================================================================
FIXED:
- erb-forum-admin.html: Verification section added — click Run Verification
    to check version #, generator, CSS lines, index.html lines, page counts
    by series. Compare against Claude's start-of-chat verification report.
================================================================================

================================================================================
VERSION v0.71 — 2026-04-08  [rebuild_pass22.py — o28 float fix]
================================================================================
FIXED:
- erb-o28.html: removed display:flex from float outer div (was overriding float)
    Images now 550px height, no clear:both — text flows left of float correctly
================================================================================

================================================================================
VERSION v0.70 — 2026-04-08  [rebuild_pass22.py — o28 final layout fix]
================================================================================
FIXED:
- erb-o28.html: o28-custom moved to first ident_paras item so all 3 text
    paragraphs flow LEFT alongside right-floated images
- erb-o28.html: both images now height:400px;width:auto — same height
================================================================================

================================================================================
VERSION v0.69 — 2026-04-08  [rebuild_pass22.py — o28 layout fix]
================================================================================
FIXED:
- erb-o28.html: images (o20_ext + o20_ext1) side by side in flex row at top
    of right float column (50% width); ERBville text paragraph below images
    inside same float column; left text flows alongside
================================================================================

================================================================================
VERSION v0.68 — 2026-04-08  [rebuild_pass22.py — o19/o28 fixes]
================================================================================
FIXED:
- erb-o19.html: dj_cap now renders correctly in photos section
- erb-o28.html: o20_ext + o20_ext1 float right at 50% width alongside
    ERBville text paragraph; fixed from grid layout that wasn't working
================================================================================

================================================================================
VERSION v0.67 — 2026-04-08  [rebuild_pass22.py — o19/o23/o26 fixes]
================================================================================
FIXED:
- erb-o19.html: dj_cap added — Fine laminated jacket
- erb-o23.html: "Above book is the Trade Version." caption now centered
- erb-o26.html: 4-paragraph text, o21_ext.jpg at 50% width floated right
    with centered caption "Above is the 1966 House of Greystoke edition."
================================================================================

================================================================================
VERSION v0.92 — 2026-04-11  [erb-rebuild_pass22.py — generator renamed]
================================================================================
FIXED:
- Generator renamed to erb-rebuild_pass22.py so BAT can accept it as a
    single file deploy or in a zip. BAT strips erb- prefix when saving to
    project root. All unnecessary BAT complexity reverted.
================================================================================

================================================================================
VERSION v0.91 — 2026-04-11  [rebuild_pass22.py — auto-run verification on expand]
================================================================================
FIXED:
- erb-claude-chats.html: clicking New Chat Verification auto-runs check
    immediately on expand — no separate Run button needed
================================================================================

================================================================================
VERSION v0.90 — 2026-04-11  [rebuild_pass22.py — embed verification in Claude Chats]
================================================================================
FIXED:
- erb-claude-chats.html: New Chat Verification now expands inline on same
    page (like Chat Registry) instead of linking to separate erb-verify.html
- erb-verify.html kept for direct URL access but no longer in nav
================================================================================

================================================================================
VERSION v0.89 — 2026-04-11  [rebuild_pass22.py — session persistence fix]
================================================================================
FIXED:
- erb-forum-login.html: set browserSessionPersistence so login session clears
    when browser tab/window is closed — prevents next user seeing prior
    user's account and posting under their identity
================================================================================

================================================================================
VERSION v0.88 — 2026-04-11  [rebuild_pass22.py — nav visibility + returnUrl]
================================================================================
FIXED:
- erb-forum-index.html: sessionStorage script wrapped in DOMContentLoaded
    so nav-last-item visibility is set correctly after element exists in DOM
- erb-forum-login.html: after login redirects to returnUrl parameter if
    present, otherwise falls back to forum index
- All pages: My Account link passes current page URL as returnUrl so user
    returns to originating page after login
================================================================================

================================================================================
VERSION v0.87 — 2026-04-11  [rebuild_pass22.py — fix login redirect]
================================================================================
FIXED:
- erb-forum-login.html: after Google login, redirect now uses absolute URL
    https://erbfirsts.com/forum/erb-forum-index.html instead of relative URL
    which was keeping users on erbfirsts-d5f0b.web.app (old cached version)
================================================================================

================================================================================
VERSION v0.86 — 2026-04-11  [rebuild_pass22.py — Claude Chats page redesign]
================================================================================
FIXED:
- erb-claude-chats.html: two stacked buttons (Chat Registry, New Chat
    Verification) each with blurb to the right; Chat Registry expands to
    show table with Add Chat button below
================================================================================

================================================================================
VERSION v0.85 — 2026-04-11  [rebuild_pass22.py — nav cleanup]
================================================================================
FIXED:
- All pages: Removed "New Chat Verification" from Admin dropdown — it's now
    accessible via the Claude Chats page only
- Admin dropdown order: FORUM, WEB label, Claude Chats, Page Layout Editor,
    Version Log, My Account
================================================================================

================================================================================
VERSION v0.84 — 2026-04-11  [rebuild_pass22.py — Claude Chats page]
================================================================================
FIXED:
- erb-claude-chats.html: new standalone page with Chat Registry (compat SDK,
    no db.collection error) and New Chat Verification button
- Admin nav: "Claude Chats" added to Web submenu on all pages
- erb-forum-admin.html: Site Verification and Chat Registry sections removed
================================================================================

================================================================================
VERSION v0.83 — 2026-04-11  [rebuild_pass22.py — Chat Registry]
================================================================================
FIXED:
- erb-forum-admin.html: Chat Registry section added (section 8) — track
    Claude chat sessions by name and conversation ID with add/edit/delete/
    reorder. Stored in Firestore site/chats document.
- Rule 11 updated: new chat detection, verification, chat registration flow
================================================================================

================================================================================
VERSION v0.82 — 2026-04-10  [rebuild_pass22.py — fix EXPECTED variable name]
================================================================================
FIXED:
- erb-verify.html: column header rename had incorrectly renamed JS variable
    EXPECTED to "FIREBASE VALUE" (with space) — invalid identifier, crashed
    script silently. Restored JS variable to EXPECTED; HTML header stays
    "Firebase Value"
================================================================================

================================================================================
VERSION v0.81 — 2026-04-10  [rebuild_pass22.py — verify fix + BAT Firestore update]
================================================================================
FIXED:
- erb-verify.html: fixed snap.exists() -> snap.exists (compat SDK property,
    not function) — was crashing script silently on load, causing button to
    do nothing
- DeployERBFirsts_17.bat: now automatically updates Firestore site/verification
    document after every successful deploy via REST API
================================================================================

================================================================================
VERSION v0.80 — 2026-04-10  [rebuild_pass22.py — fix Admin blink on Forum Index]
================================================================================
FIXED:
- erb-forum-index.html: removed duplicate nav-last-item visibility line from
    onAuthStateChanged callback — was causing Admin to blink on page load
================================================================================

================================================================================
VERSION v0.79 — 2026-04-10  [rebuild_pass22.py — verify compat + Forum dropdown]
================================================================================
FIXED:
- erb-verify.html: converted to Firebase compat SDK (no type=module) so
    Run Verification button works correctly
- All pages: Forum nav item now shows arrow and hover dropdown (Forum Index,
    Members) matching all other nav items
- Forum pages: removed onclick="return false;" so Forum dropdown works on hover
================================================================================

================================================================================
VERSION v0.78 — 2026-04-10  [rebuild_pass22.py — verify UI fixes]
================================================================================
FIXED:
- erb-verify.html + erb-forum-admin.html: column headers renamed —
    "Current Value" -> "Live Site Count", "Expected" -> "Firebase Value"
- Both files: version regex fixed to match text-muted span correctly
================================================================================

================================================================================
VERSION v0.77 — 2026-04-10  [rebuild_pass22.py — fix onclick in module scripts]
================================================================================
FIXED:
- erb-verify.html: exposed runVerification to window scope so onclick works
    with type="module" script
- erb-forum-admin.html: exposed runVerification and saveVerificationToFirestore
    to window scope for same reason
================================================================================

================================================================================
VERSION v0.76 — 2026-04-10  [rebuild_pass22.py — Firestore verification]
================================================================================
FIXED:
- erb-verify.html: now reads expected values from Firestore site/verification
    document; falls back to hardcoded defaults if unavailable; fixed version
    regex that was returning "not found"
- erb-forum-admin.html: Verification section now has "Save as New Expected
    Values" button that writes current values to Firestore so erb-verify.html
    always compares against the latest deployed state
================================================================================

================================================================================
VERSION v0.75 — 2026-04-10  [rebuild_pass22.py — nav closing div fix]
================================================================================
FIXED:
- All static pages: missing closing </div> tags after </nav> causing page
    content to render inside header. Affected all 10 static pages.
================================================================================

================================================================================
VERSION v0.74 — 2026-04-09  [rebuild_pass22.py — Admin nav flat list]
================================================================================
FIXED:
- All pages: Admin dropdown now flat list — FORUM (clickable), WEB label
    (non-clickable), New Chat Verification / Page Layout Editor / Version Log
    (indented), My Account at bottom
- Applied to all static, forum, generated pages
================================================================================

================================================================================
VERSION v0.73 — 2026-04-09  [rebuild_pass22.py — Admin nav restructure + Verification page]
================================================================================
FIXED:
- All pages: Admin dropdown restructured — Web submenu (Version Log,
    New Chat Verification, Page Layout Editor) + Forum submenu (Forum Admin)
- erb-verify.html: new standalone verification page with Run button showing
    version #, generator, CSS lines, index.html lines, page counts by series
- Submenu CSS added to erb-style.css
- All static pages, forum pages, and generated pages nav updated
================================================================================

================================================================================
VERSION v0.72 — 2026-04-09  [rebuild_pass22.py — Admin Verification tab]
================================================================================
FIXED:
- erb-forum-admin.html: Verification section added — click Run Verification
    to check version #, generator, CSS lines, index.html lines, page counts
    by series. Compare against Claude's start-of-chat verification report.
================================================================================

================================================================================
VERSION v0.71 — 2026-04-08  [rebuild_pass22.py — o28 float fix]
================================================================================
FIXED:
- erb-o28.html: removed display:flex from float outer div (was overriding float)
    Images now 550px height, no clear:both — text flows left of float correctly
================================================================================

================================================================================
VERSION v0.70 — 2026-04-08  [rebuild_pass22.py — o28 final layout fix]
================================================================================
FIXED:
- erb-o28.html: o28-custom moved to first ident_paras item so all 3 text
    paragraphs flow LEFT alongside right-floated images
- erb-o28.html: both images now height:400px;width:auto — same height
================================================================================

================================================================================
VERSION v0.69 — 2026-04-08  [rebuild_pass22.py — o28 layout fix]
================================================================================
FIXED:
- erb-o28.html: images (o20_ext + o20_ext1) side by side in flex row at top
    of right float column (50% width); ERBville text paragraph below images
    inside same float column; left text flows alongside
================================================================================

================================================================================
VERSION v0.68 — 2026-04-08  [rebuild_pass22.py — o19/o28 fixes]
================================================================================
FIXED:
- erb-o19.html: dj_cap now renders correctly in photos section
- erb-o28.html: o20_ext + o20_ext1 float right at 50% width alongside
    ERBville text paragraph; fixed from grid layout that wasn't working
================================================================================

================================================================================
VERSION v0.67 — 2026-04-08  [rebuild_pass22.py — o23/o27/o28 fixes]
================================================================================
FIXED:
- erb-o23.html: "Slip case" caption now shows below o22b.jpg; Trade Version
    caption centered under right group
- erb-o27.html: full identifier text with all 11 story titles + illustrator
- erb-o28.html: two-col layout — text LEFT, o20_ext+o20_ext1 RIGHT at ~50%
    ERBville blurb in text column; two-col-imgs caption support added
================================================================================

================================================================================
VERSION v0.66 — 2026-04-08  [rebuild_pass22.py — o18/o19/o20 fixes]
================================================================================
FIXED:
- erb-o18.html: images now stacked vertically (o26_ext2 top, o26_ext below)
- erb-o19.html: identifier text updated — 22 headpieces, laminated/unlaminated DJ
- erb-o20.html: 4-paragraph text, o18_ext.jpg floated right at 33% width
================================================================================

================================================================================
VERSION v0.65 — 2026-04-08  [rebuild_pass22.py — o16/o18 fixes]
================================================================================
FIXED:
- erb-o16.html: dj_cap added — original non-laminated FINE condition
- erb-o18.html: identifier text updated with Aug 1974 BB#40 reprint info
- erb-o18.html: image order swapped — o26_ext2 (magazine) now first
================================================================================

================================================================================
VERSION v0.64 — 2026-04-08  [rebuild_pass22.py — o15 update]
================================================================================
FIXED:
- erb-o15.html: 4-paragraph identifier text updated with G&D spine/title page
    correction and 1938 reprint description
- erb-o15.html: dj_cap added — Very Good + grade, spine fade and edge tears
- erb-o15.html: photo_extras — o14_ext1 + o14_ext at 400px height side by side
    LEFT, yellow hl-box with G&D reprint description RIGHT
================================================================================

================================================================================
VERSION v0.63 — 2026-04-08  [rebuild_pass22.py — o3/o13/o14 fixes]
================================================================================
FIXED:
- erb-o3.html: o7_ext3.jpg increased to height:550px;width:auto
- erb-o13.html: identifier text updated with print-run note; dj_cap added
- erb-o14.html: dj_cap added — "Very Good +" grade with edge chips note
================================================================================

================================================================================
VERSION v0.62 — 2026-04-08  [rebuild_pass22.py — o3/o9/o12 fixes]
================================================================================
FIXED:
- erb-o3.html: o7_ext3.jpg natural size 346x420px (was width:100% stretching)
- erb-o9.html: "The book below..." text now above both hr and Photographs heading
- erb-o12.html: Identifier text corrected — dark green lettering, J. Allen
    St. John title page illustration, removed incorrect frontispiece reference
================================================================================

================================================================================
VERSION v0.61 — 2026-04-08  [rebuild_pass22.py — o9/o10 fixes]
================================================================================
FIXED:
- erb-o9.html: "The book below..." text now appears ABOVE Photographs heading
- erb-o10.html: Full identifier text restored — 3 paragraphs including
    Grosset & Dunlap reprint info and corrected printing details
================================================================================

================================================================================
VERSION v0.60 — 2026-04-08  [rebuild_pass22.py — o9 text moved]
================================================================================
FIXED:
- erb-o9.html: "The book below is of the second state..." moved from
    identifier section to just below Photographs heading, after date photos
================================================================================

================================================================================
VERSION v0.59 — 2026-04-08  [rebuild_pass22.py — o1/o3 fixes]
================================================================================
FIXED:
- erb-o1.html: ERBzine link now opens in new tab (target="_blank")
- erb-o3.html: 3rd/4th section — yellow box centered at 50% width above
    paragraph text in LEFT column, o7_ext3.jpg in RIGHT column
================================================================================

================================================================================
VERSION v0.58 — 2026-04-08  [rebuild_pass22.py — o1 ERBzine link added]
================================================================================
FIXED:
- erb-o1.html: Added ERBzine link before "The photo below..." —
    "This story is available to read on another great ERB site,
    Click here if you'd like to read it."
    Links to https://www.erbzine.com/mag0/0030.html
================================================================================

================================================================================
VERSION v0.57 — 2026-04-08  [rebuild_pass22.py — o23 image size fix]
================================================================================
FIXED:
- erb-o23.html: all three identifier images (o22b, o22, o22s) now at exact
    height:391px;width:auto matching their natural pixel dimensions
================================================================================

================================================================================
VERSION v0.56 — 2026-04-08  [rebuild_pass22.py — o3/o24 layout fixes]
================================================================================
FIXED:
- erb-o3.html: 5th/6th/7th section o7_ext.jpg + o7_ext1.jpg now side by side
    in flex row on LEFT, text on RIGHT
- erb-o24.html: o23_ext3.jpg + o23_exts.jpg side by side, yellow caption
    below spine image only (nested flex column for spine+caption)
================================================================================

================================================================================
VERSION v0.55 — 2026-04-08  [rebuild_pass22.py — o24 image layout fix]
================================================================================
FIXED:
- erb-o24.html: o23_ext3.jpg and o23_exts.jpg now side by side in flex row
    at height:528px;width:auto — float div widened to 55% with flex layout
    Yellow caption below both images
================================================================================

================================================================================
VERSION v0.54 — 2026-04-08  [rebuild_pass22.py — o24 image size fix]
================================================================================
FIXED:
- erb-o24.html: o23_ext3.jpg and o23_exts.jpg now display at height:528px
    with width:auto for proportionate scaling
================================================================================

================================================================================
VERSION v0.53 — 2026-04-08  [rebuild_pass22.py — o3 image fixes]
================================================================================
RESULTS FROM v0.52: o3 had wrong images in photo_extras sections, ext_side
  image too small, ext-side CSS max-width overriding inline width.

FIXED:
- erb-o3.html: o7_ext2.jpg now displays at exact 352px width (from original HTML)
- erb-o3.html: 3rd/4th printing section now uses o7_ext3.jpg (correct image)
- erb-o3.html: 5th/6th/7th section now uses o7_ext.jpg + o7_ext1.jpg side by side
- DETAIL_STYLE: .ext-side max-width removed so inline width is honored
================================================================================

================================================================================
VERSION v0.52 — 2026-04-08  [rebuild_pass22.py — o3/o23/o24 image fixes]
================================================================================
RESULTS FROM v0.51: o23 wrong images used (o22a/o22 swapped), o24 images
  side by side instead of stacked, o3 two images in 5th/6th/7th instead of one.

FIXED:
- erb-o23.html: o22b (slip case) LEFT, o22 (trade cover) + o22s (spine) RIGHT
    in identifier; o22c horizontal spine + o22a (leather cover) in Photos
- erb-o24.html: o23_ext3 (signature) stacked above o23_exts (trade spine)
    floated right with yellow caption box below spine image
- erb-o3.html: 5th/6th/7th section uses only o7_ext1.jpg (not two images)
================================================================================

================================================================================
VERSION v0.51 — 2026-04-08  [rebuild_pass22.py — o3/o9/o23/o24 layout fixes]
================================================================================
RESULTS FROM v0.50: o3 comparison sections in wrong place. o9 missing images
  and wrong layout. o23 missing third image and wrong spine. o24 wrong image
  arrangement. Spine images not matching cover width.

FIXED:
- All pages: spine-wrap img now width:100% matching cover width
- erb-o3.html: comparison printing sections moved to Photos section after
    spine/cover via new photo_extras field. Frontispiece floated right.
- erb-o9.html: o8ext floated right para 1, o8ext1 floated right para 2,
    o8ext3/o8ext4/o8ext5 three equal columns with yellow caption boxes
- erb-o23.html: three images side by side (o22b, o22a, o22s) with captions,
    o22c horizontal spine strip in Photos section
- erb-o24.html: o23_ext3 + o23_exts side by side floated right alongside
    text with caption under spine image. o23s + o23 in Photos section.
- New layout types: three-col-hl, two-col-float, photo_extras field
================================================================================

================================================================================
VERSION v0.50 — 2026-04-08  [rebuild_pass22.py — o3 layout + new layout system]
================================================================================
RESULTS FROM v0.49: o3/o9/o23/o24 text updated but o3 layout still didn't
  match old site — images below paragraphs instead of beside them.

FIXED:
- DETAIL_STYLE: 3 new layout CSS classes added:
    .hl-box / .hl-box-center — yellow highlight box (inline or centered)
    .two-col-hl — yellow box one side, large image other side (grid)
    .two-col-imgs — image group one side, text other side (grid)
- ident_paras renderer: 3 new layout types supported:
    layout:"two-col-hl" — highlight box + image two-column
    layout:"hl-center"  — centered yellow highlight box
    layout:"two-col-imgs" — images + text two-column
- erb-o3.html: rebuilt to match old site layout exactly:
    Frontispiece photo (o7_ext2.jpg) floated right alongside main text
    Two-col: yellow box LEFT + o7_ext.jpg large RIGHT (3rd/4th printing)
    Full-width text (2nd/3rd/4th printing detail)
    Centered yellow box (5th/6th/7th heading)
    Two-col: o7_ext1.jpg + o7_ext3.jpg LEFT + text RIGHT
================================================================================

================================================================================
VERSION v0.49 — 2026-04-07  [rebuild_pass22.py — layout fixes o3/o9/o23/o24]
================================================================================
RESULTS FROM v0.48: Four Other series pages had incorrect/truncated identifier
  text and wrong image layouts compared to original site.

FIXED:
- erb-o3.html (The Girl from Hollywood): expanded to full 7-printing detail
    matching original site — bold headings for 3rd/4th and 5th/6th/7th
    printing groups, full "he said" frontispiece research, DJ variations
- erb-o9.html (The Mad King): expanded to 3-state detail matching original
    site — page 92 tipped-in photo with caption, date comparison photos
    (Cave Girl / Mad King / Outlaw of Torn) with individual captions
- erb-o23.html (Minidoka): slip case + trade version shown side-by-side
    with captions in identifier section; "Below book is leather bound"
    text; spine + large cover in photos section
- erb-o24.html (Marcia of the Doorstep): signature page floated right
    alongside text; spine shown with "Above Spine is of Trade Edition"
    caption; large black cover full width
- Other series builder: ext_side_maxw now applied correctly
================================================================================

================================================================================
VERSION v0.48 — 2026-04-07  [rebuild_pass22.py — footer + spine image fixes]
================================================================================
RESULTS FROM v0.47: Footer green bar full viewport width on all main site
  pages. Spine images on detail pages stretched to full content width.

FIXED:
- erb-style.css: footer restored to padding:4px with max-width:var(--content-width)
    and margin:0 auto — green bar now constrained to content width, matching
    forum pages (same fix as v0.26 which was incorrectly reverted)
- rebuild_pass22.py: spine images now use spine-wrap class instead of
    full-img-wrap — .spine-wrap img uses width:auto;max-height:500px so
    spine images display at natural proportions, not stretched to full width
- All generated pages rebuilt with both fixes
================================================================================

================================================================================
VERSION v0.47 — 2026-04-07  [index.html exact rebuild]
================================================================================
RESULTS FROM v0.46: Bookshelf still at bottom — extra </div> in sig section
  was breaking home-layout grid.

FIXED:
- index.html: rebuilt from live source with exactly 2 changes only:
    1. visibility:hidden on nav-last-item (matches all other pages)
    2. sessionStorage auth script appended before </body>
    All other content byte-for-byte identical to working v0.23 source
================================================================================

================================================================================
VERSION v0.46 — 2026-04-07  [footer CSS fix — bookshelf layout restored]
================================================================================
RESULTS FROM v0.45: Bookshelf on Home page appearing large at bottom of page
  instead of in right column. Caused by footer CSS change during forum build.

FIXED:
- erb-style.css: footer padding restored to 2rem 1.5rem, max-width and
    margin:0 auto removed — these were causing the home-layout grid to
    render incorrectly, pushing the aside/bookshelf out of position
- Forum pages have their own inline footer style so unaffected
================================================================================

================================================================================
VERSION v0.45 — 2026-04-07  [index.html properly rebuilt]
================================================================================
RESULTS FROM v0.44: index.html bookshelf/aside/footnote/wip sections still
  missing due to Cloudflare email truncation in source file.

FIXED:
- index.html: rebuilt from live site source — all sections restored:
    bookshelf, aside, footnote, wip, correct footer, sessionStorage auth
================================================================================

================================================================================
VERSION v0.44 — 2026-04-07  [index.html rebuild + nav final fixes]
================================================================================
RESULTS FROM v0.43: index.html bookshelf missing (truncated by Cloudflare).
  Login page showing Patrick instead of Admin. Forum Admin dropdown missing
  Version Log. Home page not keeping Admin state.

FIXED:
- index.html: rebuilt from scratch — bookshelf restored, correct nav,
    sessionStorage auth, clean footer
- erb-forum-login.html: removed navLink.textContent = name
    Nav now handled entirely by sessionStorage — stays on Admin
- All 6 forum pages: Version Log added to Admin dropdown
================================================================================

================================================================================
VERSION v0.43 — 2026-04-07  [rebuild_pass21.py — nav flicker + shift final fix]
================================================================================
RESULTS FROM v0.42: Nav redrew on every page click. html overflow-y:scroll
  missing from deployed CSS (overwritten by generator). Version Log page had
  old nav without nav-last-item or Admin/My Account.

FIXED:
- rebuild_pass21.py: html{overflow-y:scroll} added to CSS — permanent
- Auth script: sessionStorage caching added to all pages
    On load: reads sessionStorage instantly — no Firebase wait, no flicker
    Firebase confirms in background — only updates DOM if role changed
    Sign-out: clears sessionStorage so My Account shows correctly
- erb-versionlog.html: nav rebuilt to current correct structure
- All static + forum pages: new sessionStorage auth applied
================================================================================

================================================================================
VERSION v0.42 — 2026-04-07  [rebuild_pass20.py — nav flicker fix]
================================================================================
RESULTS FROM v0.41: "My Account" briefly visible before switching to "Admin"
  on every page load. Some main site pages still missing auth script.

FIXED:
- rebuild_pass20.py: nav-last-item hidden initially (visibility:hidden)
    Revealed after auth resolves — either as My Account or Admin
    Eliminates flash/flicker on every page load
- All generated pages regenerated with hidden+reveal pattern
- All static pages updated with same hidden+reveal
- All forum pages: hidden+reveal added to auth blocks
- erb-versionlog.html: auth script added
================================================================================

================================================================================
VERSION v0.41 — 2026-04-07  [rebuild_pass20.py — auth baked into generator]
================================================================================
RESULTS FROM v0.40: Main site pages (Home, First Editions, book detail pages)
  missing Firebase auth script entirely — always showed My Account even when
  admin logged in. Forum Members page still showed person's name.

FIXED:
- rebuild_pass20.py: auth_script_html() function added to generator
    Auth script now baked into ALL generated pages (covers + detail pages)
    Single onAuthStateChanged: only switches to Admin for admin role, never name
- index.html: auth script added
- forum/erb-forum-members.html: name reference removed, admin nav fixed
================================================================================

================================================================================
VERSION v0.40 — 2026-04-07  [auth nav final fix]
================================================================================
RESULTS FROM v0.39: Forum pages still showing person's name (Patrick) in nav
  due to old auth code that set textContent = name still present. Admin
  nav block was empty on forum index. Multiple auth patterns conflicting.

FIXED:
- All 7 forum pages: auth blocks audited and corrected
    Single onAuthStateChanged per page
    Never sets person's name in nav
    Correctly switches My Account to Admin dropdown for admin role
    Admin page: switches nav before showing admin content
================================================================================

================================================================================
VERSION v0.39 — 2026-04-07  [forum nav click fix + auth consolidation]
================================================================================
RESULTS FROM v0.38: Clicking Forum ▾ on forum pages caused page reload,
  redrawing all icons and cycling My Account/Admin. Duplicate auth listeners
  on forum pages caused flickering.

FIXED:
- All 7 forum pages: Forum ▾ link changed to href="#" onclick="return false;"
    Clicking Forum label or arrow opens dropdown only, no navigation/reload
- All 7 forum pages: duplicate onAuthStateChanged listener removed
    Each page now has exactly one auth listener — no more cycling
================================================================================

================================================================================
VERSION v0.38 — 2026-04-07  [nav fixes + login centering]
================================================================================
RESULTS FROM v0.37: Auth script showed person's name causing nav width shift.
  Login page not centered. Misc dropdown still had Version Log on feast/misc.
  index.html and versionlog missing auth script. Nav shift on dropdown open.

FIXED:
- erb-style.css: html { overflow-y:scroll } — prevents scrollbar shift
- erb-style.css: #nav-last-item { min-width:90px } — prevents text-change shift
- All pages: auth script simplified — only switches to Admin for admin role,
    never shows person's name — My Account stays until admin detected
- erb-forum-login.html: login box centered with flexbox
- erb-feast.html, erb-misc.html: Version Log removed from Misc dropdown
- index.html, erb-versionlog.html: auth script added
================================================================================

================================================================================
VERSION v0.37 — 2026-04-07  [rebuild_pass19.py + nav last item]
================================================================================
RESULTS FROM v0.36: Nav layout shifted when Forum Index loaded because
  hidden Admin nav item appeared, changing nav width. Two nav items
  (My Account button + Login nav) duplicated same function.

FIXED:
- rebuild_pass19.py: last nav slot always visible
    Logged out / regular member: shows "My Account" linking to login page
    Admin logged in: switches to "Admin ▾" dropdown in place (no layout shift)
    Admin dropdown (main site): Version Log + My Account
    Admin dropdown (forum pages): Forum Admin + Moderation Queue + My Account
- All static pages: same last nav slot + Firebase auth script added
- All 7 forum pages: same last nav slot, old forum nav cleanup
- All generated pages: Firebase auth script added for nav admin detection
================================================================================

================================================================================
VERSION v0.36 — 2026-04-07  [rebuild_pass18.py + forum nav restructure]
================================================================================
RESULTS FROM v0.35: Forum pages had separate green nav bar inconsistent
  with main site. Admin nav had no dropdown. Search was a nav item
  taking up space in the forum nav.

FIXED:
- rebuild_pass18.py: Forum nav = plain link on non-forum pages
    Admin nav = dropdown with Version Log (web context)
- All static pages: same Forum + Admin nav updates
- All 7 forum pages: forum-specific nav bar removed entirely
    Replaced with main site nav (Home/First Editions/Research/Misc/Forum/Admin)
    Forum nav item = dropdown with Forum Index + Members (forum context)
    Admin nav item = dropdown with Forum Admin + Moderation Queue (forum context)
    Both use ../ prefix correctly for forum subfolder
- erb-forum-index.html: search moved from nav to online bar
    Search icon (magnifying glass) on right side of online bar
    Clicking reveals inline search input that redirects to search page
================================================================================

================================================================================
VERSION v0.35 — 2026-04-07  [no generator — forum alerts + search + members]
================================================================================
RESULTS FROM v0.34: All forum pages still using browser alert() dialogs
  for errors, warnings and notifications. Search and Members pages
  not yet built.

FIXED:
- erb-forum-category.html: all alert() replaced with inline notify bar
    Styled by type: error (red), warn (yellow), success (green), pending (blue)
    Auto-dismisses after 5 seconds except pending messages
- erb-forum-topic.html: same inline notify bar for all alerts
- erb-forum-search.html: new search page
    Keyword search across topic titles
    Filter by category dropdown (loaded from Firestore)
    Results show title with highlighted match, author, date, reply/view counts
    Supports ?q= URL parameter for direct search links
- erb-forum-members.html: new members page
    Lists all non-banned members from Firestore users collection
    Shows avatar, name, role badge, join date, post count
    Search by name, sort by join date / post count / name
    Column headers clickable to sort
================================================================================

================================================================================
VERSION v0.34 — 2026-04-07  [no generator — forum admin fixes]
================================================================================
RESULTS FROM v0.33: Admin panel delete used browser confirm() dialog.
  Admin nav item missing on admin page itself.

FIXED:
- erb-forum-admin.html: delete category replaced with inline confirmation row
    Shows "Delete [name]? This cannot be undone" with Yes/Cancel buttons
    in the categories table — no browser dialogs
- erb-forum-admin.html: reject post replaced with inline confirmation
    in the moderation queue card — no browser dialogs
- erb-forum-admin.html: Admin nav always visible and marked active
    on the admin page itself
================================================================================

================================================================================
VERSION v0.33 — 2026-04-07  [no generator — forum dynamic categories]
================================================================================
RESULTS FROM v0.32: Forum categories hardcoded in HTML — adding/removing
  categories in admin panel didn't update forum index or footer links.
  Categories collection in Firestore empty on first load.

FIXED:
- erb-forum-index.html: categories loaded dynamically from Firestore
    On first load: if categories collection empty, auto-seeds 6 default
    categories to Firestore (ERB First Editions, Dust Jackets, Reprint
    Editions, General ERB Discussion, For Sale / Wanted, Site Feedback)
    Category table rows built from Firestore data — topic/post counts live
    Footer links built dynamically from Firestore categories
- erb-forum-category.html: footer links load dynamically from Firestore
- erb-forum-topic.html: footer links load dynamically from Firestore
- erb-forum-login.html: footer links load dynamically from Firestore
- erb-forum-admin.html: footer links load dynamically from Firestore
================================================================================

================================================================================
VERSION v0.32 — 2026-04-06  [no generator — forum New Topic form]
================================================================================
RESULTS FROM v0.31: New Topic used browser prompt() dialog — ugly and
  inconsistent with site styling.

FIXED:
- erb-forum-category.html: replaced prompt() dialogs with inline form
    Form slides open below category header when + New Topic clicked
    Fields: Topic Title (text input) + First Post (textarea)
    Post Topic and Cancel buttons styled to match site
    All existing checks retained: rate limit, link restriction,
      banned/viewOnly block, newUser pending flag
    On success: redirects to new topic page
    On pending: shows message and closes form
================================================================================

================================================================================
VERSION v0.31 — 2026-04-06  [no generator — forum build Pass 7]
================================================================================
RESULTS FROM v0.30: No rate limiting on posts. External links allowed from
  any user regardless of post count. Admin panel missing rate limit settings.

FIXED:
- erb-forum-topic.html: rate limiting added
    Checks lastPostAt timestamp before allowing post
    If within cooldown window: blocks with wait time message
    External link check: blocks links if postCount < minPostsForLinks
    Updates lastPostAt on user record after each post
- erb-forum-category.html: same rate limit + link checks added to New Topic
    Also updates lastPostAt after topic created
- erb-forum-admin.html: two new Forum Settings fields
    Posts per hour limit (default 10)
    Min posts before external links allowed (default 5)
    Both fields saved to Firestore settings/forum and loaded on page open

Firebase Storage Rules (apply manually in Firebase Console):
  forum/posts/** — read:true, write: authenticated users only
  all other paths — read:true, write: false
================================================================================

================================================================================
VERSION v0.30 — 2026-04-06  [no generator — forum build Pass 6]
================================================================================
RESULTS FROM v0.29: Post Reply button non-functional. Category page showed
  no topics. New Topic button non-functional. Moderation queue wiring
  incomplete.

FIXED:
- erb-forum-topic.html: fully wired to Firestore
    Posts load from Firestore posts collection (pending=false only)
    Topic title, reply count, view count loaded from topics collection
    View count increments on each visit
    Post Reply submits to Firestore with: content, author info, attachments,
      pending flag (true for newUser), reactions map, createdAt timestamp
    File attachments upload to Firebase Storage, URLs stored with post
    Banned/view-only users blocked with clear message
    New users: post saved as pending=true, user shown review message
    Reactions write reaction counts to Firestore
    Lightbox for image attachments
- erb-forum-category.html: fully wired to Firestore
    Topics load from Firestore topics collection ordered by date desc
    New Topic creates topic + first post in Firestore
    Same banned/viewOnly/newUser checks apply
    Topic links correctly pass cat and id params to topic page
================================================================================

================================================================================
VERSION v0.29 — 2026-04-06  [rebuild_pass17.py + forum nav updates]
================================================================================
RESULTS FROM v0.28: Version Log still in Misc dropdown on all pages.
  Admin panel had no nav link — no way to reach it while browsing.
  Admin nav item not visible to admin users.

FIXED:
- rebuild_pass17.py: Version Log removed from Misc dropdown on all
    generator-built pages (cover pages + all detail pages)
- All static pages: Version Log removed from Misc dropdown
- All static pages: Admin nav item added (hidden by default)
- index.html: auth script added — Admin nav shows for admin users
- All forum pages: Admin nav item added to forum nav
- All forum pages: auth scripts updated — Admin nav shows for admin users
- erb-forum-admin.html: Admin nav item added to its own nav
================================================================================

================================================================================
VERSION v0.28 — 2026-04-06  [no generator — forum Pass 5 + email fix]
================================================================================
RESULTS FROM v0.27: Admin panel not yet built. Home page email showing as
  [email protected] due to Cloudflare obfuscation not working on Firebase hosting.

FIXED:
- erb-forum-admin.html: new admin panel with 6 sections:
    Forum Settings (max file size, max attachments, allowed types) → Firestore
    Custom ERB Reactions (4 slots, GIF upload, label, enable/disable) → Firestore
    Categories (add, edit, lock/unlock, delete) → Firestore
    Users (search, ban, view-only, promote/demote moderator) → Firestore
    Moderation Queue (approve/reject pending first posts) → Firestore
    Storage Usage (guidance to check Firebase Console)
    Access control: redirects to login if not authenticated,
    shows Access Denied if not admin role
- index.html: fixed email obfuscation — replaced broken Cloudflare cdn-cgi
    encoding with JavaScript character array decode (works on any static host)
    Both sig email and footer email fixed
- index.html: version comment bumped to v0.27
================================================================================

================================================================================
VERSION v0.27 — 2026-04-06  [no generator — forum build Pass 4]
================================================================================
RESULTS FROM v0.26: Forum pages had no login functionality. Login, reply
  composer, reactions, and New Topic button all static/disabled.

FIXED:
- erb-forum-login.html: new Google Sign-In page
    Google OAuth via Firebase Auth (popup flow)
    On first login: user record created in Firestore users collection
      (uid, displayName, email, photoURL, joinDate, postCount, role,
       banned, viewOnly, newUser flag for moderation queue)
    Already-logged-in state shows user name/avatar + Sign Out button
    Redirects to forum index after successful login
- erb-forum-auth.js: shared Firebase init module
- erb-forum-index.html: nav Login link updates to first name when logged in
- erb-forum-category.html: New Topic button enables when logged in
- erb-forum-topic.html: reply composer and reactions enable when logged in
================================================================================

================================================================================
VERSION v0.26 — 2026-04-06  [rebuild_pass16.py]
================================================================================
RESULTS FROM v0.25: Footer green bar too wide (full viewport width) and too
  much padding (2rem top/bottom) on all pages. Forum page footer also had
  wrong color and excess padding.

FIXED:
- erb-style.css: footer padding reduced from 2rem to 4px
- erb-style.css: footer max-width set to var(--content-width) with margin auto
    — green bar now constrained to content width, not full viewport
- erb-forum-index.html: footer inline style updated to match global footer
    (same dark green #2d4a2d, 4px padding, content-width constrained)
- All generated pages rebuilt with updated CSS
================================================================================

================================================================================
VERSION v0.25 — 2026-04-06  [rebuild_pass16.py]
================================================================================
RESULTS FROM v0.24: Forum nav link on all generator-built pages still pointed
  to old phpbb2 forum. Misc dropdown in generator had old items (ERB Interview,
  Tour of Ekstrom Library) not matching live site. erb-forum-index.html logo
  shifted left due to wrong header structure (erb-title vs logo-nav-wrap).

FIXED:
- rebuild_pass16.py: Forum nav link updated from phpbb2 to
    {prefix}/forum/erb-forum-index.html — works correctly for both
    root-level cover pages (.) and subfolder detail pages (..)
- rebuild_pass16.py: Misc dropdown corrected to match live site:
    For Sale, Links - ERB Related, Media Files, Mystery Inscription, Version Log
- rebuild_pass16.py: pre-existing bug fixed in build_other_detail —
    prev_lk_pn_bot / next_lk_pn_bot variables were missing (NameError)
- erb-forum-index.html: header fixed — logo-nav-wrap replaces erb-title,
    forum-nav-wrap moved inside logo-nav-wrap, <a> wrapper removed from logo
================================================================================

================================================================================
VERSION v0.24 — 2026-04-06  [no generator — forum build Pass 1]
================================================================================
RESULTS FROM v0.23: Forum nav item still linked to old phpBB2 forum at
  erbfirsts.com/phpbb2/. New forum build not yet started.

FIXED:
- Forum Pass 1: static shell pages created for new Firebase-based forum
    erb-forum-index.html — forum index with 6 categories, stats bar,
      who's-online strip, Login to Post prompt, responsive layout
    erb-forum.css — forum-specific styles extending erb-style.css
    Both files use erb-forum-* naming convention for BAT routing
- DeployERBFirsts_17.bat: two additions for forum support
    Added: if not exist "%PUBDIR%orum" mkdir "%PUBDIR%orum"
    Added: erb-forum routing rule — ^erb-forum prefix routes to publicorum\

STILL TO DO:
- Update main site nav Forum link from phpbb2 to forum/erb-forum-index.html
    (deferred until forum is fully built and live)
- Forum Pass 2: category/topics listing page
- Forum Pass 3: topic/post page with reply composer + file attachments
- Forum Pass 4: Google login (Firebase Auth)
- Forum Pass 5: Admin panel + configurable settings
- Forum Pass 6: Moderation queue + ban/view-only controls
- Forum Pass 7: Rate limiting + Firestore security rules
================================================================================

================================================================================
VERSION v0.23 — 2026-04-05 PST  [no generator changes — static pages only]
================================================================================
RESULTS FROM v0.22: F.E.A.S.T. pages updated. No media page existed.
  Buy/Sell box still on home page. Old ERB Interview and Library Tour pages
  separate with no modern styling.

FIXED:
- erb-misc.html rebuilt as "Media Files" page with:
    HTML5 video player for ERB_library_visit.mp4 (960x720 display)
    HTML5 audio player for ERBfirsts_interview.mp3
    Both set to preload=auto for immediate playback on click
    Description text from original pages preserved
- index.html: removed For Sale / Buy ERB box from sidebar
- All modern static pages: Misc dropdown updated —
    removed "ERB Interview" and "Tour of Ekstrom Library"
    added "Media Files" after "Links — ERB Related"
- DeployERBFirsts.bat: added public/media/ folder creation
    added .mp3/.mp4/.wmv routing to public/media/
    retained ROUTING debug lines and rename try/catch fix
================================================================================

================================================================================
VERSION v0.22 — 2026-04-05  [no generator changes — static pages only]
================================================================================
RESULTS FROM v0.21: F.E.A.S.T. report pages were old Word-exported HTML with
  no site styling. Monthly prior report links broken (wrong extensions).
  erb-feast.html section order wrong. No sort functionality.

FIXED:
- All 12 x 2005 monthly FEAST reports rebuilt as clean modern HTML with:
    site fonts (Playfair Display + Source Serif 4), mustard header color (#eec400),
    sticky column header, N/A for Auto-Biography date, $0 values → blank,
    typo fixed (City ofGold → City of Gold)
- All 19 x 2003/2004 monthly FEAST reports rebuilt with same styling
- erb-feast.html section reorder: title → subtitle → meta line → table →
    Prior Reports box → intro paragraph → footnotes → footer
- erb-feast.html: "below" → "above" in intro paragraph
- erb-feast.html: all 2005 monthly links fixed from .htm → .html
- erb-feast.html: all 2004 monthly links fixed from .htm → .html
- erb-feast.html: Prior Reports links open in new tab (target=_blank)
- erb-feast.html: compact meta line — Total left, FINAL REPORT center,
    REPORT DATE right, all on one line
- erb-feast.html: sticky logo/nav (position:sticky on .erb-header)
- erb-feast.html: sticky table header rows offset by nav height via window.load
- erb-feast.html: sortable columns — click to sort asc/desc/default series order;
    # column always shows sequential row number; ▲/▼ sort indicators
- erb-feast.html: sort click scrolls page to table header position below nav
- DeployERBFirsts.bat: rename fix — try/catch suppresses red error when
    ERBFirsts-*.zip already exists in Downloads
- DeployERBFirsts.bat: ROUTING/EXT-CHECK/AFTER-CLEAN debug lines added to
    diagnose why erb-feast.html was not being deployed from zip
================================================================================

================================================================================
VERSION v0.21 — 2026-04-02  [rebuild_pass15.py]
================================================================================
RESULTS FROM v0.20: Research pages (erb-dj, erb-feast, erb-signatures) still had
  old nav missing Version Log in Misc dropdown.

FIXED:
- Nav updated on all 3 Research pages with correct Misc dropdown
================================================================================


================================================================================
VERSION v0.20 — 2026-04-02  [rebuild_pass15.py]
================================================================================
RESULTS FROM v0.19: Version number still showing on home page. Static pages
  (erb-misc, erb-sell, erb-erblinks, erb-inscription, home) had outdated nav
  missing Version Log in Misc dropdown.

FIXED:
- Version number removed from home page footer
- All static pages nav updated with correct Misc dropdown including Version Log
- Consistent nav across all page types (home, covers, detail, static)
================================================================================


================================================================================
VERSION v0.19 — 2026-04-02  [rebuild_pass15.py]
================================================================================
RESULTS FROM v0.18: Version number showing on cover pages and home; home showing
  stale version. Version number should only appear on Version Log page.

FIXED:
- Removed version number from all cover pages (Tarzan, MPV, Other)
- Removed version number from all static pages except home and version log
- Version log page now shows current version number next to heading
- Home page updated to v0.19
================================================================================


================================================================================
VERSION v0.18 — 2026-04-02  [rebuild_pass15.py]
================================================================================
RESULTS FROM v0.17: Reprint anchor working but landing slightly too high (194px).

FIXED:
- scroll-margin-top reduced from 194px to 150px on reprints anchor
================================================================================


================================================================================
VERSION v0.17 — 2026-04-02  [rebuild_pass15.py]
================================================================================
RESULTS FROM v0.16: Reprint anchor landing 1/3 into Burt covers (consistent across
  all books). Bottom nav scroll working. Anchor structure correct but insufficient
  upward offset.

FIXED:
- Reprint anchor: added scroll-margin-top:194px to <a id="reprints"> element
    (calculated from h2+h3+hr+spacing+1/3 image height = ~194px total offset)
- Version number and log updated
================================================================================


================================================================================
VERSION v0.16 — 2026-04-02  [rebuild_pass15.py]
================================================================================
RESULTS FROM v0.15: Reprint button scroll approach wrong. Version log inaccurate.

FIXED:
- Reprint anchor: replaced scroll-margin approach with classic invisible offset
    anchor: <a id="reprints" style="display:block;height:0;visibility:hidden;"></a>
    placed immediately before <h2>Reprint Editions</h2>. Bulletproof HTML.
- Version log: completely rewritten with accurate entries for every version,
    correct version numbers, generator script filename for each version,
    what was fixed and what remained broken
================================================================================

================================================================================
VERSION v0.15 — 2026-04-01  [rebuild_pass14.py — modified]
================================================================================
RESULTS FROM v0.14: Reprint button now lower than before (80px too much).
  Version log had all entries incorrectly renamed to v0.11.

FIXED:
- scroll-margin-top reduced to 8px (nav scrolls away so minimal offset needed)
- Version log txt and HTML files updated (though log entries were still inaccurate)

STILL BROKEN:
- Reprint button still unreliable — scroll-margin-top approach fundamentally wrong
    for this use case
- Version log entries were all labeled v0.11 (corrupted by blanket regex replacement
    in an earlier session)
================================================================================

================================================================================
VERSION v0.14 — 2026-04-01  [rebuild_pass14.py]
================================================================================
RESULTS FROM v0.13: Reprint button barely showing bottom of A.L. Burt text —
  scroll-margin-top:10px not enough offset. Bottom nav landing in middle of page.

FIXED:
- scroll-margin-top on h2#reprints increased to 80px
- Bottom nav scroll: investigated — issue was scroll saving 'bottom' but
    scrollHeight not reached due to timing; confirmed pn-bottom class working
    and JS saving/restoring correctly

STILL BROKEN:
- Reprint button still not landing at "Reprint Editions" heading — scroll-margin-top
    unreliable across browsers (80px overshoots because nav is not fixed/sticky)
================================================================================

================================================================================
VERSION v0.13 — 2026-04-01  [rebuild_pass13.py]
================================================================================
RESULTS FROM v0.12: Acorn caption still below wrong photo. Reprint button still
  not landing at "Reprint Editions" heading. Scroll position not working for
  bottom nav arrows.

FIXED:
- ext_side_cap support added to Tarzan renderer: renders styled italic caption
    in text box below ext_side image
- t1: ext_side_cap set with acorn caption text; ext_side_maxw reduced to 200px;
    caption key removed from ident_paras copyright page item (was wrong location)
- Reprint section: id="reprints" moved from wrapper div to <h2> element directly;
    scroll-margin-top:10px added — clicking button now scrolls to heading
- Scroll position save/restore: clicking top pn-left/pn-right saves window.scrollY
    to sessionStorage; restored on page load
- Bottom nav: pn-bottom class added to bottom bar links; JS saves 'bottom' string;
    on load restores to document.body.scrollHeight

STILL BROKEN:
- Reprint button landing just below "Reprint Editions" heading — scroll-margin-top
    value needs adjustment
- Bottom nav scroll: landing in middle of page not at true bottom
================================================================================

================================================================================
VERSION v0.12 — 2026-04-01  [rebuild_pass12.py]
================================================================================
RESULTS FROM v0.11: Reprint button img path wrong depth. OLD ENGLISH text still
  above image. Acorn caption still wrong photo. t1_ext3 appearing twice.

FIXED:
- Reprint button img path corrected: ../images/ for Tarzan (not ../../images/)
- layout:row renderer updated: text and image now in single flex div together;
    standalone <p> suppressed when layout=row active
- t1 ident_imgs=None: cleared old ident_imgs entry that was causing t1_ext3 duplicate
- caption key added to ident_paras renderer: renders styled italic box below image
- t1: Acorn caption moved to caption key on the ext_side item (t1ext2.jpg);
    removed from ident_paras copyright page item where it was wrongly placed

STILL BROKEN:
- Acorn caption still appearing below copyright page photo not below acorn spine photo
    (ext_side and ident_paras are different rendering paths — caption key was added
    to ident_paras renderer but ext_side doesn't use that path)
- Reprint button scrolling to middle of A.L. Burt text not to "Reprint Editions" heading
================================================================================

================================================================================
VERSION v0.11 — 2026-04-01  [rebuild_pass11.py]
================================================================================
RESULTS FROM v0.10: Version stale on home/covers. Reprint button no hover.
  OLD ENGLISH/GOTHIC text/photo still separate lines. Acorn caption wrong location.
  t24 duplicate caption. erb-o28 photo distortion.

FIXED:
- Version strings updated to v0.11 on all generated pages (VERSION_COMMENT)
- Static files (erb-index, erb-shelf, erb-misc, etc.) version updated directly
- Reprint button replaced with reprint_button.jpg image; data-hover attribute
    for swap to reprint_button_2.jpg on mouseover; placed right of book title
    in header for all books with reprint data; JS hover script added
- layout:row support added to ident_paras renderer — text and image in same flex div
- t1 OLD ENGLISH/GOTHIC: layout:row applied — each label now beside its photo
- t1: Acorn caption moved to caption key on copyright page photo item
- t24: extra= field cleared (removed duplicate label caption)
- erb-o28: converted to ident_paras with both photos (cover + spine) inline

STILL BROKEN:
- Reprint button img path using ../../ (wrong depth for Tarzan pages)
- OLD ENGLISH text appearing above image not beside it (separate <p> tag issue)
- Acorn caption still below wrong photo (copyright page not spine photo)
- t1 ident_imgs still set causing t1_ext3 to render twice
================================================================================

================================================================================
VERSION v0.10 — 2026-04-01  [rebuild_pass10.py]
================================================================================
RESULTS FROM v0.9: Reprint DJs now showing. Several book-specific layout issues.

FIXED:
- Reprint button: green "↓ Reprint Editions" jump button added to identifier section
    for all books with reprint data (t1-t5); id="reprints" anchor on reprint div
- t1: OLD ENGLISH/GOTHIC split into separate ident_paras items with own images
- t5: t5_ext1.jpg enlarged to 320px
- t26: Converted to ident_paras; ASP note text corrected; t26_ext.jpg inline
- t27: Duplicate spine image removed from photos section
- t24: Copyright page variant photos (ext7/1/6/8) moved inline in ident section;
       label photos (ext4/ext3) with individual captions side by side
- erb-o28 (Girl from Farris): Both photos now display side by side inline;
    Other renderer ident_paras support added
- t27: Full Whitman invoice attribution text added (Brian J. Bohnett Dec 2007);
       Canaveral 1963 paragraph added with t26_ext.jpg photo

STILL BROKEN:
- Home showing v0.6, Tarzan covers showing v0.3 (static files not regenerated)
- Reprint button hover animation not working
- OLD ENGLISH/GOTHIC text and photo still on separate lines
- Acorn caption in wrong place (below wrong photo)
================================================================================

================================================================================
VERSION v0.9 — 2026-04-01  [rebuild_pass9.py]
================================================================================
RESULTS FROM v0.8: Reprint DJ images not displaying. t2/t4 photos stacking.

FIXED:
- All 21 reprint DJ filenames corrected to match exact Firebase names:
    Rule confirmed: underscore immediately before "dj" removed everywhere
    e.g. a_toa_g&ddj.jpg, a_bot_burtdj.jpg, a_rot_burt_reprodj.jpg, etc.
- display:inline-block;vertical-align:top added to ident_paras and ident_imgs
    image renderers — photos now display side by side

STILL BROKEN:
- Various layout/content issues across t24/t26/t27/t1/t5/erb-o28 reported next session
================================================================================

================================================================================
VERSION v0.8 — 2026-04-01  [rebuild_pass8.py]
================================================================================
RESULTS FROM v0.7: t27 missing extra photo. t24 missing t24_ext1. t1 copyright
  page too small. t2 Canadian photos duplicating enlarged below content.
  t4 title/copyright photos broken. t5 five-books photo too small + duplicate.

FIXED:
- t27: t27_ext.jpg added as ext_side (main spine photo, 320px float right);
       t27_ext1.jpg in photos section
- t24: ext_pairs corrected — t24_ext1.jpg added, pair order fixed
- t1: Copyright page (t1_ext2.jpg) enlarged to 350px; ext_side enlarged to 340px;
      duplicate copyright page entry removed from ident_imgs
- t2: Canadian photos moved inline in ident_paras at 200px; full-width duplicates
      removed from photos section
- t4: Title/copyright photos moved inline in ident_paras at 320px; removed from
      photos section (ext_pairs cleared)
- t5: Five-books photo (t5ext.jpg) ext_side enlarged to 360px; duplicate ext_pairs
      entry removed
- ext_side_maxw and imgs_maxh support added to renderer

STILL BROKEN:
- Reprint DJ images not showing (wrong filenames in generator)
- t2/t4 photos still stacking vertically instead of side by side
================================================================================

================================================================================
VERSION v0.7 — 2026-04-01  [rebuild_pass7.py]
================================================================================
RESULTS FROM v0.6: DJ captions missing/wrong for most books. t1 DJ filename wrong.
  Reprint G&D images not displaying (& encoding bug in HTML src attribute).

FIXED:
- All 27 Tarzan DJ captions assigned correctly from ASP source:
    12 reproduction DJs (standard caption), 14 original DJs (unique captions),
    t27 confirmed no DJ exists
- t1 DJ filename corrected: t1_dj.jpg → t1dj.jpg
- Reprint src encoding fixed: & literal in src= URL, &amp; only in alt= text
- t6/t7/t8/t10/t11/t13/t26/t28 DJ images added (were None)
- t9/t12/t14/t15/t16/t17/t18/t19/t20/t21/t22/t23/t24 unique DJ captions set

STILL BROKEN:
- t27 missing extra photo; t24 missing t24_ext1.jpg
- t1 copyright page photo too small; t2/t4/t5 photo layout issues
================================================================================

================================================================================
VERSION v0.6 — 2026-03-31  [rebuild_pass6.py]
================================================================================
RESULTS FROM v0.5: Reprint images all same size, not distinguishing covers vs DJs.

FIXED:
- Reprint covers: max-height 130px portrait; spines max-width 45px narrow
- Reprint DJs: max-width 270px landscape, separate row from covers
- Identifier ext-row images: max-height 160px with auto width (proper proportions)
- All applies to t1-t5 reprint sections
================================================================================

================================================================================
VERSION v0.5 — 2026-03-31  [rebuild_pass5.py]
================================================================================
RESULTS FROM v0.4: Ext images still wrong sections on t1/t2/t4/t5.

FIXED:
- t1: OLD ENGLISH and GOTHIC images now inline with correct identifier paragraphs
      using ident_paras; copyright page photo (t1_ext2.jpg) inline
- t2: Canadian edition photos (t2_ext1/2/3) now inline below Canadian paragraph
- t4: Title page and dedication photos (t4ext/t4ext1) inline beside identifier text
- t5: Joe Lukes comparison photo (t5_ext1) now below Joe Lukes paragraph

STILL BROKEN:
- Reprint section image sizing — covers/DJs/spines all same size
================================================================================

================================================================================
VERSION v0.4 — 2026-03-31  [rebuild_pass4.py]
================================================================================
RESULTS FROM v0.3: Shelf links wrong. Index bookshelf link broken. FEAST/ext issues.

FIXED:
- Shelf: Added dynamic JS scaling so image map coordinates scale with image width
- Shelf: Fixed bookshelf image on index.html linking to erb-shelf.html
- t1: FEAST moved after reprint section; OLD ENGLISH/GOTHIC identifier text added;
      t1dj.jpg added; G&D missing images added (a_toa_g&d_2dj, a_toa_g&d_3dj);
      G&D text corrected (1927-1973, artwork change detail)
- t2: FEAST moved after reprint; t2dj.jpg added; Shaun Hoadley credit added
- t3, t4: FEAST moved after reprint
- t5: FEAST moved after reprint; Joe Lukes credit added; DJ caption fixed
- Version log added (this file)

STILL BROKEN:
- t1-t5 ext images still rendering in wrong section or wrong size
================================================================================

================================================================================
VERSION v0.3 — 2026-03-29  [rebuild_pass3.py]
================================================================================
FIRST WORKING BUILD. Basic structure in place.

KNOWN ISSUES:
- Shelf links going to wrong book (image map not scaling with image width)
- Bookshelf image on index.html not linking to shelf page
- t1-t5 FEAST tables in wrong position (should appear after reprint section)
- t1-t5 identifier ext images in wrong section (photos vs identifiers)
- Reprint sections incomplete/missing on some books
================================================================================