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

23
html/173.html Normal file
View File

@@ -0,0 +1,23 @@
<link rel="stylesheet" href="book-page.css">
<div class="document-container">
<h1>Natural Fantasy Villains</h1>
<p>When you create a natural fantasy antagonist, the information on page 254 of the Core Rulebook is an excellent starting point, but there are a few extra things to remember, just as there are for Player Characters.</p>
<h2>Basic Principles</h2>
<p>The natural fantasy genre presents a significant variety of archetypal Villains, but we can still infer some common key traits:</p>
<ul>
<li><strong>A link to the past.</strong> These antagonists have one or more elements that link them to the past of the setting: some are obsessed by ancient legends; others crave power and authority lent by millennia-old magics and technologies, or want to wipe out every last trace of them; finally, some are entities who survived an ancient calamity or were created in the distant past.</li>
<li><strong>Familiar concepts.</strong> A natural fantasy antagonists motivations and origin are often linked to needs, feelings, doubts, or emergencies that you might have had a brush with at least once in your personal life. As much as this might unsettle you, a part of you should be able to understand, perhaps at an instinctual level, what these Villains represent.</li>
<li><strong>Catastrophic results.</strong> When a natural fantasy Villain reaches their goals, the consequences are devastating: be it the awakening of a truly ancient danger, a permanent alteration to the ecosystem, or the extermination of entire communities, the Villains victory will tear open a wound in this world.</li>
</ul>
<p>The Game Master is given three main tools for introducing these Villains into the narrative and diving deep into their origins and objectives:</p>
<ul>
<li><strong>Stories, relics and traditions.</strong> If a Villain is the incarnation of an ancient danger, references to their existence should gradually appear during the campaign: these sources are often vague or partly contradictory fertile ground for studies and speculations.</li>
<li><strong>Game Master scenes.</strong> Above all else, these scenes are useful to add depth to the antagonists, revealing their doubts and hesitations. When dealing with Villains that are closer in nature to a cataclysm or a supernatural presence, these scenes can show omens of their arrival and a growing sense of foreboding.</li>
<li><strong>Conflicts.</strong> During conflicts, natural fantasy Villains tend to fully embrace one of two extremes: some speak openly with the protagonists, explaining their reasons, while others march forward, undeterred and silent, toward their objective.</li>
</ul>
</div>