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

36
html/28.html Normal file
View File

@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The World Guide - Sleepy Hamlet</title>
<link rel="stylesheet" href="book-page.css">
</head>
<body>
<h1>THE WORLD</h1>
<h2>CHAPTER NINE: TYPICAL FEATURES</h2>
<p>The typical Sleepy Hamlet should include at least one of these features:</p>
<ul>
<li>A gentle, soothing landscape.</li>
<li>An eager population, although unaware of the outside world.</li>
<li>A wise person of few words.</li>
<li>A small shrine tied to a forgotten legend.</li>
</ul>
<h2>POSITION</h2>
<p>The Sleepy Hamlet is a starting location par excellence it could even be the birthplace of one or all protagonists (perhaps with the exception of one of them, an outsider whose sudden arrival puts events into motion). Our heroes might expect a happy welcome, unless some negative event undermines the locals trust. Even then, it should be possible to rebuild it.</p>
<h2>THE VILLAINS' PLANS</h2>
<p>A place like Breezeburg is rarely relevant in the antagonists plans, unless they were born and raised there. Perhaps they were childhood friends of the eldest among Player Characters. More often, an antagonist might be looking for an item or a person that lives here, or the Hamlet might suffer collateral damage in the wake of the Villains plan or the catastrophe they unleashed.</p>
<h2>POSSIBLE QUESTIONS FOR THE GROUP</h2>
<p>These questions can seed conflict and mystery:</p>
<ul>
<li>Breezeburg is isolated, but not forgotten there is just nothing too remarkable here. Is it really such a happy place? What is about to change?</li>
<li>Creatures that couldnt live anywhere else proliferate here, thanks to the untouched wilderness. What makes them unique?</li>
<li>The villagers live in harmony with the land, the flora, the fauna, and every other natural element. Where does this tradition come from?</li>
<li>A gentle breeze keeps the windmills blades in constant motion. What traditions stem from this unusual situation?</li>
<li>Although welcoming, the locals are very narrow-minded and suspicious about innovations. Why?</li>
</ul>
</body>
</html>