feat: Add book viewer at /book with shared design system

- Add html/index.html: book viewer with auto-discovering sidebar,
  prev/next navigation, keyboard shortcuts, and URL hash persistence
- Add html/book-page.css: shared stylesheet for all book pages derived
  from fabula-ultima-sheet.css (dark theme, CSS variables, Cinzel/
  Crimson Text fonts, common class styles)
- Add book.js entry point so webpack injects the shared CSS into the
  book viewer; update webpack.config.js for two entry points, split
  CSS chunk, CopyWebpackPlugin for book pages, and /book dev server
  rewrite rule
- Add scripts/strip_watermark.py: removes "Guest Customer (Order
  #52072168)" watermark artifacts from all 210 book pages
- Add scripts/restyle_book.py: strips per-page <style> blocks and
  injects <link rel="stylesheet" href="book-page.css"> into all pages
- Update Justfile deploy to scp -r dist/* for the new /book subtree

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-06 03:36:35 +00:00
parent 58552b536f
commit c75cd188c1
220 changed files with 12685 additions and 10 deletions

60
html/31.html Normal file
View File

@@ -0,0 +1,60 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The Haunted Isle of Candle Bay</title>
<link rel="stylesheet" href="book-page.css">
</head>
<body>
<header>
<h1>The Haunted Isle</h1>
<h2>Candle Bay</h2>
</header>
<!-- Descriptive Lore -->
<section id="introduction">
<p>A haunted isle of steep inlets and rocky cliffs, Candle Bay is home to countless mysteries and legends. The island owes its name to flocks of ominous will-o-wisps that light up its nights, creating a somber and enigmatic atmosphere. Strange rumours abound of this grim and equally fascinating landscape, but even an unsettling childrens tale can conceal glimmers of truth...</p>
</section>
<!------------------------->
<!-- CANDLE BAY AT A GLANCE -->
<!------------------------->
<section id="at-a-glance">
<h2>Candle Bay At A Glance</h2>
<p class="section-title">Keywords: ghosts, isolation, transgression.</p>
<ul>
<li><strong>Terrain:</strong> thic*kets*, tombstones, reefs. Common elements: <strong aria-label="B I D">BID</strong></li>
<li><strong>Travel Roll:</strong> d10. Rare elements: <strong aria-label="A L">AL</strong></li>
</ul>
<div class="section-title" style="margin-top: 20px;">Elements of the Island</div>
<ul>
<li><strong>Dangers:</strong> A wrathful ghost that cant find a way back, or a small abandoned temple infested with trickster spirits.</li>
<li><strong>Discoveries:</strong> A good luck charm, an ancient holy place, or a remote well that allows communication with the dead for a price.</li>
</ul>
<div class="section-title" style="margin-top: 20px;">Themes</div>
<ul>
<li>Disturbed balance, respect for the past, and exploitation of resources.</li>
</ul>
</section>
<!-- THE HAUNTED ISLAND REPEAT (Decorative/Structural Break) -->
<section id="lore-repeat">
<h2>THE HAUNTED ISLAND</h2>
<p style="font-style: italic; font-size: 0.9em;">(A repeated or decorative title element)</p>
</section>
<!------------------------->
<!-- CUSTOMER METADATA -->
<!------------------------->
<div class="metadata-box">
<h3>Visitor Information</h3>
<p style="margin-top: 10px; font-size: 0.9em;">Candle Bay (The Haunted Isle)</p>
</div>
</body>
</html>