The Storyline section is now a set of hand-written chapters. /storyline
lists them; /storyline/{slug} renders one inside a shell with a sticky
chapter nav and prev/next pager. Chapters are declared in
StorylineController::CHAPTERS, each pointing at a Twig partial under
templates/storyline/chapters/.
First chapter is the Brackenford Campaign Overview: the campaign-bible
text laid out as a long-form reading page -- numbered section headers,
a "by the numbers" / "the cast" quick-reference strip, pull-quotes for
in-world lines, GM callouts for the ticking clocks and the red herring,
and the escalation ladder. Storyline styles added to app.css.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
32 lines
1.4 KiB
Twig
32 lines
1.4 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. Start with the overview for the whole
|
|
arc; later chapters will cover sessions, locations and the people of the village.
|
|
</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">{{ loop.index }}</span>
|
|
<span class="storyline-chapter-body">
|
|
<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 %}
|