Chapters now carry an eyebrow ("Overview", "Prologue", ...) and a short
tag for the list/sidebar badge, instead of a bare running number, so
non-numbered entries read correctly.
New chapter: "Prologue - The Long Road to Brackenford", the session
outline formatted as a runnable document -- an at-a-glance metadata band
(levels, duration, locations, hook), the in-world courier notice as a
posted handout, numbered scenes, GM callouts for the "ask the players"
prompts, label/body rows for the skill-check clues and travel-day
prompts, a three-stage encounter block, dramatic beat lines, and a
before/after panel for the legend the party's own retelling becomes.
Cross-links the Hearthburrow to Enemies and the closing line to the
overview's "Five and the Five".
Tests: render every chapter partial headless (no HTTP/DB) so a broken
variable or path() fails loudly, check each registered chapter has its
template file, and assert the /storyline routes sit behind the login gate.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
34 lines
1.6 KiB
Twig
34 lines
1.6 KiB
Twig
{% extends 'base.html.twig' %}
|
|
|
|
{% block title %}Storyline · dmtools{% endblock %}
|
|
|
|
{% block body %}
|
|
<div class="storyline-index">
|
|
<header class="mb-4">
|
|
<div class="text-uppercase small text-body-secondary fw-semibold" style="letter-spacing:.08em">Storyline</div>
|
|
<h1 class="display-6 mb-2">Brackenford</h1>
|
|
<p class="text-body-secondary mb-0" style="max-width:60ch">
|
|
The campaign bible, split into chapters. The overview lays out the whole arc;
|
|
the prologue is the first session. More chapters — sessions, locations and the
|
|
people of the village — will follow.
|
|
</p>
|
|
</header>
|
|
|
|
<ol class="storyline-chapter-list list-unstyled">
|
|
{% for slug, chapter in chapters %}
|
|
<li>
|
|
<a href="{{ path('app_storyline_chapter', {slug: slug}) }}" class="storyline-chapter-card">
|
|
<span class="storyline-chapter-num">{{ chapter.tag }}</span>
|
|
<span class="storyline-chapter-body">
|
|
<span class="storyline-chapter-kicker">{{ chapter.eyebrow }}</span>
|
|
<span class="storyline-chapter-title">{{ chapter.title }}</span>
|
|
<span class="storyline-chapter-summary">{{ chapter.summary }}</span>
|
|
</span>
|
|
<span class="storyline-chapter-go" aria-hidden="true">→</span>
|
|
</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ol>
|
|
</div>
|
|
{% endblock %}
|