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

67
html/135.html Normal file
View File

@@ -0,0 +1,67 @@
<link rel="stylesheet" href="book-page.css">
<div class="document-container">
<h1>NEW CLASSIC CHARACTERS</h1>
<!-- ELEMENTAL ACROBAT -->
<h2>ELEMENTAL ACROBAT</h2>
<p class="class-header-info"><strong>Stats:</strong> Dexterity d10, Insight d6, Might d8, Willpower d8</p>
<ul>
<li><strong>Fury (1 level):</strong> Indomitable Spirit</li>
<li><strong>Invoker (3 levels):</strong> Invocation (SL 2), Ripples</li>
<li><strong>Sharpshooter (1 level):</strong> Barrage</li>
</ul>
<div class="equipment-details">
<strong>Equipment:</strong> Giant chakram (custom weapon, (DEX + MIG), thrown, ranged, accurate, defense boost, powerful), combat tunic. <strong>Zenit Cost:</strong> 120 zenit.
</div>
<!-- FLUTIST MONK -->
<h2>FLUTIST MONK</h2>
<p class="class-header-info"><strong>Stats:</strong> Dexterity d6, Insight d8, Might d8, Willpower d10</p>
<ul>
<li><strong>Invoker (3 levels):</strong> Invocation, Wellspring Expansion (SL 2)</li>
<li><strong>Spiritist (2 levels):</strong> Ritual Spiritism, Spiritual Magic (Cleanse)</li>
</ul>
<div class="equipment-details">
<strong>Equipment:</strong> Staff (described as a magic flute!), sage robe. <strong>Zenit Cost:</strong> 270 zenit.
</div>
<!-- FRONTIER RESEARCHER -->
<h2>FRONTIER RESEARCHER</h2>
<p class="class-header-info"><strong>Stats:</strong> Dexterity d8, Insight d10, Might d6, Willpower d8</p>
<ul>
<li><strong>Loremaster (1 level):</strong> Quick Assessment</li>
<li><strong>Merchant (2 levels):</strong> Ive Heard of It!, Winds of Trade</li>
<li><strong>Sharpshooter (2 levels):</strong> Crossfire, Warning Shot</li>
</ul>
<div class="equipment-details">
<strong>Equipment:</strong> Twin pocket pistols (custom weapon, (DEX + INS), firearm, ranged, accurate, quick), travel garb. <strong>Zenit Cost:</strong> 170 zenit.
</div>
<!-- GRINNING VETERAN -->
<h2>GRINNING VETERAN</h2>
<p class="class-header-info"><strong>Stats:</strong> Dexterity d6, Insight d8, Might d10, Willpower d8</p>
<ul>
<li><strong>Gourmet (3 levels):</strong> Cooking, Knife and Fork, Traveling Cook</li>
<li><strong>Guardian (1 level):</strong> Protect</li>
<li><strong>Weaponmaster (1 level):</strong> Bladestorm</li>
</ul>
<div class="equipment-details">
<strong>Equipment:</strong> Waraxe, runic plate. <strong>Zenit Cost:</strong> 70 zenit.
</div>
<!-- KEEPER OF THE SACRED TREE -->
<h2>KEEPER OF THE SACRED TREE</h2>
<p class="class-header-info"><strong>Stats:</strong> Dexterity d6, Insight d6, Might d10, Willpower d10</p>
<ul>
<li><strong>Arcanist (3 levels):</strong> Bind and Summon (Oak), Emergency Arcanum (SL 2)</li>
<li><strong>Invoker (2 levels):</strong> Invocation, Linked Invocation</li>
</ul>
<div class="equipment-details">
<strong>Equipment:</strong> Staff, travel garb. <strong>Zenit Cost:</strong> 370 zenit.
</div>
<!-- Footer/Metadata -->
<footer>
</footer>
</div>