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>
52 lines
2.4 KiB
Twig
52 lines
2.4 KiB
Twig
{% extends 'base.html.twig' %}
|
|
|
|
{% block title %}{{ chapter.title }} · Storyline · dmtools{% endblock %}
|
|
|
|
{% block body %}
|
|
<div class="row g-4 storyline-layout">
|
|
<nav class="col-lg-3 order-lg-2">
|
|
<div class="storyline-toc">
|
|
<a href="{{ path('app_storyline') }}" class="text-decoration-none small d-inline-block mb-2">← All chapters</a>
|
|
<div class="text-uppercase small text-body-secondary fw-semibold mb-2" style="letter-spacing:.08em">Chapters</div>
|
|
<ol class="list-unstyled mb-0">
|
|
{% for s, c in chapters %}
|
|
<li>
|
|
<a href="{{ path('app_storyline_chapter', {slug: s}) }}"
|
|
class="storyline-toc-link{{ s == slug ? ' is-active' }}">
|
|
<span class="storyline-toc-num">{{ loop.index }}</span>{{ c.title }}
|
|
</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ol>
|
|
</div>
|
|
</nav>
|
|
|
|
<div class="col-lg-9 order-lg-1">
|
|
<article class="storyline-doc">
|
|
<header class="storyline-doc-head">
|
|
<div class="storyline-eyebrow">Storyline · Chapter {{ number }}</div>
|
|
<h1>{{ chapter.title }}</h1>
|
|
<p class="storyline-standfirst">{{ chapter.summary }}</p>
|
|
</header>
|
|
|
|
{{ include(chapter.template) }}
|
|
</article>
|
|
|
|
<nav class="storyline-pager">
|
|
{% if prev %}
|
|
<a href="{{ path('app_storyline_chapter', {slug: prev}) }}" class="storyline-pager-link">
|
|
<span class="storyline-pager-dir">← Previous</span>
|
|
<span class="storyline-pager-title">{{ chapters[prev].title }}</span>
|
|
</a>
|
|
{% else %}<span></span>{% endif %}
|
|
{% if next %}
|
|
<a href="{{ path('app_storyline_chapter', {slug: next}) }}" class="storyline-pager-link text-lg-end">
|
|
<span class="storyline-pager-dir">Next →</span>
|
|
<span class="storyline-pager-title">{{ chapters[next].title }}</span>
|
|
</a>
|
|
{% else %}<span></span>{% endif %}
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|