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/72.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 - Chapter Excerpt</title>
<link rel="stylesheet" href="book-page.css">
</head>
<body>
<div class="chapter-context">
<p style="font-size: 0.8em;"><strong>Page numbers/Context markers:</strong> 71 | W | 22 THE WORLD</p>
</div>
<h1>CHAPTER 9: DEICIDE</h1>
<p>It might seem strange to so directly discuss the subject of killing a god, since <em>Fabula Ultima</em> draws its inspiration from a long video game tradition where the final antagonist is often a god-like entity with almost unlimited divine powers. However, in the natural fantasy genre, this dynamic is often turned upside down: the destruction of a god isnt a rightful act of rebellion against a destiny that someone else already wrote, but rather a violent, ignorant and selfish act, showing a lack of empathy toward the spiritual world and driven by fear or greed.</p>
<div class="example">
<strong>Example:</strong> After ransacking the villages of the Great Taiga, the Shōgun didnt find the fabled iron mines he was looking for. However, his agents sighted a creature known as <strong>Ōtetsuguma</strong>: a massive bear with metallic fur, who defeated scores of soldiers and mercenaries sent to capture her. Bent on defeating this threat and bringing a new trophy to his master, the Shōgun ignores the fact that the protector god of the region lives inside the bear: if she is killed before finding a successor, she wont be able to awaken the spirits of flora and fauna in spring, condemning the Great Taiga to a never-ending winter.
</div>
<h2>FEAR OF DEATH</h2>
<p>One of the finest examples of the desire to control magic and nature is, without any shadow of a doubt, the quest for immortality, which often drives the actions of the main antagonist or is the foundation of one or more mysteries or threats. This endeavor is as futile as it is reckless: denying the reality of death or attempting to trick it and push it away, pollutes the cycle of life, causing spiritual stagnation and unleashing upon the world a calamity that will snuff out future generations.</p>
<div class="example">
<strong>Example:</strong> Ten thousand years ago, humanity fell victim to a fearsome epidemic. Fearing extinction, scientists dismembered the ancient <strong>Kalpavriksha</strong> tree and developed a synthetic forest to separate bodies and souls: instead of returning to the spiritual stream of the planet, these souls were put in stasis inside the network, waiting for it to birth a generation of clones, completely immune to the disease, to host them. However, the research team grossly underestimated humanitys knack for survival: now, their descendants live in harmony with generations of clones discarded by the system, who developed individual souls in the meantime. Trapped in their stasis, the original souls became corrupted, making the resynchronization erratic and turning them into malevolent shape-shifting spirits.
</div>
<div class="quote-block">
<blockquote>
“He looked for immortality and it was granted to him.<br>He broke the peace and peace was forever taken from him.”
</blockquote>
</div>
</body>
</html>