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

85
html/179.html Normal file
View File

@@ -0,0 +1,85 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Monster Stat Blocks</title>
<link rel="stylesheet" href="book-page.css">
</head>
<body>
<!-- ABDOMEN STAT BLOCK -->
<div class="stat-block">
<h2>ABDOMEN Lv 5 • MONSTER</h2>
<h3>Core Stats</h3>
<p class="stats-line">
<span class="stat-item">DEX d8</span>
<span class="stat-item">INS d6</span>
<span class="stat-item">MIG d10</span>
<span class="stat-item">WLP d8</span>
</p>
<h3>Vitals & Attributes</h3>
<div class="stats-line" style="font-size: 0.95em;">
<span class="stat-item">HP: <strong>60</strong></span>
<span class="stat-item">MP: <strong>30</strong></span>
<span class="stat-item">DEF: +0</span>
<span class="stat-item">M. DEF: +0</span>
<span class="stat-item">P A R S B IM: d E V U F VU i l T RS</span>
</div>
<h3>Basic Attacks</h3>
<p><strong>Trampling Slam</strong> (DEX + MIG) (HR + 5) physical damage. If the Abdomen is electrified this attack deals <strong style="color: red;">10 extra damage</strong> and all its damage becomes bolt; if the Thorax is dangling, this attack gains multi (2). After this attack is resolved, the Thorax stops dangling and the Abdomen is no longer electrified.</p>
<h3>Spells</h3>
<ul>
<li><strong>Paralyzing Silk</strong> <em style="font-size: 0.9em;">(Cost: 20 MP | Type: Special | Instantaneous)</em><br>Every enemy the Abdomen can see suffers slow.</li>
</ul>
<h3>Special Rules</h3>
<ul class="trait-list">
<li><strong>Electrostatic Spines</strong> After a creature hits the Abdomen with a melee attack, if the Abdomen is electrified, it deals 5 bolt damage to that creature (after the attack has been resolved).</li>
<li><strong>Grounding</strong> If the Abdomen suffers earth damage when electrified, it stops being electrified.</li>
<li><strong>Limb</strong> The Abdomen is immune to dazed, enraged and shaken.</li>
</ul>
</div>
<!-- HEAD STAT BLOCK -->
<div class="stat-block">
<h2>HEAD Lv 5 • MONSTER</h2>
<p style="font-style: italic; color: #777;">Traits: frail, lucifuge, poisonous, protected.</p>
<h3>Core Stats</h3>
<p class="stats-line">
<span class="stat-item">DEX d8</span>
<span class="stat-item">INS d10</span>
<span class="stat-item">MIG d6</span>
<span class="stat-item">WLP d8</span>
</p>
<h3>Vitals & Attributes</h3>
<div class="stats-line" style="font-size: 0.95em;">
<span class="stat-item">HP: <strong>40</strong></span>
<span class="stat-item">MP: <strong>20</strong></span>
<span class="stat-item">DEF: +0</span>
<span class="stat-item">M. DEF: +0</span>
<span class="stat-item">P V U A R S B RS d e f i L T IM</span>
</div>
<h3>Basic Attacks</h3>
<p><strong>Toxic Spit</strong> (DEX + MIG) +3 (HR + 10) poison damage.</p>
<h3>Special Rules</h3>
<ul class="trait-list">
<li><strong>Wall of Legs</strong> During a conflict, as long as the Thorax isnt dangling, the Head is invisible to enemies.</li>
</ul>
</div>
<!-- METADATA / UNRELATED TEXT -->
<div class="metadata">
W ()
</div>
</body>
</html>