Files
RingBRP/docs/scenarios/CLEAN_GROUND_HANDOUTS.html
T
slaguru666andClaude Opus 5 fa30909dc9 handouts: the print rule zeroed the padding the slug depended on
Rendering the pack to PDF to print it showed the GM filing slug printed on top
of the first line of three of the four sheets — both almanac tables and the
minute's "Copy 3 of 4" line.

The cause is one declaration. .slug is position:absolute at top:6mm, and what
kept sheet content clear of it was .sheet's 18mm screen padding. The print
block then said padding: 0, so in print — and only in print — content started
at the very top and ran under the slug. On screen the pack looked perfect,
which is why it survived being built, checked and shipped.

Fixed by keeping a top padding in print: padding: 11mm 0 0. Side and bottom
margins still come from @page, so nothing else moves.

check-handouts could not see this and is not at fault for it: it holds the
pack's STRUCTURE — the two almanac sheets sharing one class and one set of
columns, every line reading 41 mi, nothing under 11pt — and a collision between
an absolutely positioned element and the flow is a property of the rendering,
not the markup. It took rendering the file and looking at the pages.

The almanac trick itself is unaffected and was verified in the PDF: H03a and
H03b print identically but for their dates and their counts, forty-one against
fifty-three.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 22:59:39 +01:00

378 lines
17 KiB
HTML

<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta charset="utf-8">
<title>CLEAN GROUND — handout pack</title>
<style>
/* ─────────────────────────────────────────────────────────────────────────
CLEAN GROUND — print-ready handout pack. A4, four sheets, one per page.
Print from a browser with BACKGROUND GRAPHICS ON, scale 100%, margins
"default". The cream of H02 and the ruled paper of H03 are backgrounds; with
them off, H02 prints on white and the almanac loses its rules, which does not
destroy either handout but does cost most of the effect.
THE ONE RULE THIS FILE EXISTS TO ENFORCE. H03a and H03b must be
indistinguishable except for their dates and figures — that is the entire
trick, and it dies the moment one of them is styled a hair differently from
the other. So they are not two designs that happen to match: they share one
class, `.almanac`, and every dimension they use comes from a variable defined
once below. There is deliberately no `.almanac-a` or `#h03b` anywhere in this
file. If you want to change the look of the almanac, change the variable and
both move together; if you find yourself adding a selector that names only one
of them, that is the bug, and `check-handouts` will fail the build for it.
───────────────────────────────────────────────────────────────────────── */
:root {
/* Body copy never goes below 11pt — convention halls are dim and eyes are
tired. Everything here is at or above that. */
--body: 11.5pt;
--lead: 1.45;
/* The almanac's entire appearance, in one place, used by both pages. Swap the
face here if a handwriting font is installed — it changes BOTH, which is the
point. Keep it monospaced-by-metrics or the columns stop aligning, and the
columns aligning IS the reveal. */
--almanac-font: "Courier New", Courier, monospace;
--almanac-size: 11.5pt;
--almanac-lead: 26px; /* also the ruled-line pitch — one value, both uses */
--almanac-ink: #1a2a4a; /* fountain-pen blue-black */
--almanac-paper: #fbfaf3;
--almanac-rule: #b9c6d8;
--almanac-margin-rule: #d4a8a8;
/* Where the red margin rule sits, measured from the sheet edge, and therefore
where the writing has to start. Used by both the rule and the indent so they
cannot drift apart. Sheet padding is 16mm, so the indent makes up the rest. */
--almanac-margin-x: 26mm;
}
@page { size: A4 portrait; margin: 16mm 15mm; }
html, body { margin: 0; padding: 0; background: #6e6e6e; }
body {
font-family: Georgia, "Times New Roman", serif;
font-size: var(--body);
line-height: var(--lead);
color: #111;
}
/* One sheet = one A4 page. On screen they float on grey; in print they are the
page itself. */
.sheet {
box-sizing: border-box;
width: 210mm;
min-height: 297mm;
margin: 10mm auto;
padding: 18mm 16mm;
background: #fff;
box-shadow: 0 2px 14px rgba(0,0,0,.45);
page-break-after: always;
position: relative;
}
.sheet:last-of-type { page-break-after: auto; }
/* The slug is for the GM's pile, not the players. It is small, grey, and sits
outside the fiction — every sheet says what it is and when it is given. */
.slug {
position: absolute; top: 6mm; right: 16mm;
font-family: -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
font-size: 8pt; letter-spacing: .09em; text-transform: uppercase;
color: #8b8b8b;
}
.slug b { color: #5a5a5a; letter-spacing: .12em; }
/* ── CG-H01 — coroner's note. White, official, dull on purpose. ───────────── */
.official {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: var(--body);
line-height: 1.5;
}
.official .letterhead {
border-bottom: 2.5pt solid #000;
padding-bottom: 3mm; margin-bottom: 2mm;
display: flex; justify-content: space-between; align-items: baseline;
font-weight: 700; letter-spacing: .04em; font-size: 11.5pt;
}
.official .letterhead .doctype { font-weight: 700; font-size: 11pt; }
.official .refline {
display: flex; justify-content: space-between;
font-size: 11pt; color: #333;
border-bottom: .75pt solid #666;
padding-bottom: 4mm; margin-bottom: 6mm;
}
.official dl { display: grid; grid-template-columns: 30mm 1fr; gap: 1.5mm 4mm; margin: 0 0 7mm; }
.official dt { font-weight: 700; letter-spacing: .05em; font-size: 11pt; }
.official dd { margin: 0; }
.official p { margin: 0 0 4.5mm; max-width: 155mm; }
.official .signoff { margin-top: 12mm; padding-left: 95mm; line-height: 1.35; }
.official .signoff .name { font-family: Georgia, serif; font-style: italic; font-size: 14pt; }
.official .signoff .role { font-size: 11pt; color: #333; }
/* ── CG-H02 — 1962 committee minute. Cream, typewriter, twice-copied. ─────── */
.minute {
font-family: "Courier New", Courier, monospace;
font-size: 11.5pt;
line-height: 1.62;
color: #241f1a;
}
/* The cream is on the SHEET so it reaches the paper edge in print. */
.sheet--cream { background: #f3ecd9; }
/* Photocopy grain: faint, uneven, and cheap. Two overlapping gradients rather
than an image, so this file stays self-contained and prints the same anywhere. */
.sheet--cream::before {
content: ""; position: absolute; inset: 0; pointer-events: none;
background:
repeating-linear-gradient(92deg, rgba(0,0,0,.035) 0 1px, transparent 1px 4px),
radial-gradient(120% 80% at 8% 4%, rgba(0,0,0,.07), transparent 55%),
radial-gradient(90% 70% at 96% 98%, rgba(0,0,0,.05), transparent 60%);
mix-blend-mode: multiply;
}
.minute > * { position: relative; }
.minute .head {
display: flex; justify-content: space-between;
font-weight: 700; letter-spacing: .05em;
}
.minute .head .classification { letter-spacing: .3em; }
.minute .subhead {
display: flex; justify-content: space-between;
border-bottom: 1pt solid #4a4038;
padding-bottom: 3mm; margin-bottom: 7mm;
}
.minute h2 {
font-family: inherit; font-size: 12.5pt; font-weight: 700;
letter-spacing: .12em; text-align: center;
margin: 0 0 9mm; text-decoration: underline;
}
.minute ol { margin: 0; padding: 0; list-style: none; counter-reset: para; }
.minute ol li {
counter-increment: para;
display: grid; grid-template-columns: 9mm 1fr; gap: 3mm;
margin-bottom: 6mm;
}
.minute ol li::before { content: counter(para) "."; font-weight: 700; }
.minute .signoff {
margin-top: 12mm; padding-left: 68mm;
display: grid; grid-template-columns: 26mm 1fr; gap: 1mm 3mm;
}
.minute .signoff .lab { color: #3b332c; }
/* ── CG-H03a / CG-H03b — Ivy's almanac. ONE class, used twice. ────────────
Every value comes from the variables above. Nothing below names a or b. */
.sheet--almanac { background: var(--almanac-paper); }
.almanac {
font-family: var(--almanac-font);
font-size: var(--almanac-size);
color: var(--almanac-ink);
line-height: var(--almanac-lead);
/* Ruled paper: the pitch IS the line-height, so writing sits on the rules. */
background:
linear-gradient(to bottom, transparent calc(var(--almanac-lead) - 1px),
var(--almanac-rule) calc(var(--almanac-lead) - 1px), var(--almanac-rule) var(--almanac-lead));
background-size: 100% var(--almanac-lead);
padding-top: 2px;
/* 16mm of that is the sheet's own padding; this is the remainder. */
padding-left: calc(var(--almanac-margin-x) - 16mm);
}
/* The red margin rule, down the left of the sheet, both pages alike. */
.sheet--almanac::before {
content: ""; position: absolute; top: 0; bottom: 0; left: var(--almanac-margin-x);
border-left: 1pt solid var(--almanac-margin-rule);
}
.almanac table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.almanac th, .almanac td {
text-align: left; font-weight: 400; padding: 0;
line-height: var(--almanac-lead); height: var(--almanac-lead);
white-space: nowrap; overflow: hidden;
}
.almanac th { border-bottom: 1px solid var(--almanac-ink); }
/* Fixed columns so both pages align to the millimetre — the identical "41 mi"
column is the reveal and it only lands if it lines up across two sheets. */
.almanac col.day { width: 10%; }
.almanac col.weather { width: 22%; }
.almanac col.walked { width: 12%; }
.almanac col.clean { width: 24%; }
.almanac col.notes { width: 32%; }
.almanac .count { margin-top: calc(var(--almanac-lead) * 2); }
@media print {
html, body { background: #fff; }
/* Side and bottom margins come from @page; the TOP padding must survive, because the
slug is absolutely positioned at top:6mm and the screen rule's 18mm padding is what
kept sheet content clear of it. Zeroing padding here printed the slug on top of the
first line of three of the four sheets — both almanac tables and the minute's
"Copy 3 of 4". Found by rendering the pack to PDF and looking at it, which no
structural check can do. */
.sheet { margin: 0; box-shadow: none; width: auto; min-height: 0; padding: 11mm 0 0; }
.sheet--cream, .sheet--almanac { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
.screen-only { display: none !important; }
}
.screen-only {
max-width: 210mm; margin: 10mm auto 0; padding: 6mm 8mm;
background: #fffbe6; border: 1pt solid #d8cf9a;
font-family: -apple-system, "Segoe UI", Helvetica, Arial, sans-serif; font-size: 11pt;
}
.screen-only h1 { font-size: 12pt; margin: 0 0 3mm; letter-spacing: .05em; }
.screen-only li { margin-bottom: 2mm; }
</style>
</head>
<body>
<div class="screen-only">
<h1>CLEAN GROUND — handout pack · print instructions</h1>
<ul>
<li><b>A4 portrait, scale 100%, background graphics ON.</b> Without backgrounds, H02 prints white and the almanac loses its rules.</li>
<li><b>Four sheets, one per page</b>, in handing order: H01 (Act One), H03a (Act Two), H02 (Act Three, depot), H03b (Act Three, laid beside H03a).</li>
<li><b>H03a and H03b must come off the same printer, same tray, same session.</b> Two different papers and the trick dies before anyone reads a word.</li>
<li><b>Staging:</b> H03a is given in Act Two and nothing is said about it. H03b goes down <i>flat on the table beside it</i> in Act Three. Do not explain. The table will do it out loud.</li>
<li>Body text is 11.5pt throughout. Do not scale below 100% to fit.</li>
</ul>
</div>
<!-- ══ CG-H01 ══ Act One, once Braithwaite has looked ═══════════════════════ -->
<section class="sheet">
<div class="slug"><b>CG-H01</b> · Act One</div>
<div class="official">
<div class="letterhead">
<span>HM CORONER — NORTH NORTHUMBERLAND</span>
<span class="doctype">PRELIMINARY NOTE</span>
</div>
<div class="refline">
<span>Ref: NN/1174/26</span>
<span>Not for release</span>
</div>
<dl>
<dt>DECEASED</dt><dd>Unidentified male</dd>
<dt>FOUND</dt><dd>29 August, stone sheep pen, Sike Head march</dd>
<dt>BY</dt><dd>Mrs M. Swinburne, of Sike Head</dd>
</dl>
<p>Estimated age at death, from dentition and general condition: forty to forty-five
years.</p>
<p>Bone density, joint surfaces and vascular condition are those of a man in his
ninetieth year. I have written that sentence three times and I am content with it.</p>
<p>No dental record answers to this mouth. No fingerprint record answers to these
hands. Enquiries with the National Insurance index return nothing. He is not a missing
person anywhere I can reach.</p>
<p>Dressed in wool and cotton of good but old manufacture, mended repeatedly and
competently by hand. The boots have been resoled, by my count, nine times, and not by
a tradesman.</p>
<p>Lungs, turn-ups and hair carry a fine grey particulate which I am not equipped to
identify and have sent onward.</p>
<p>Cause of death: exhaustion, on a body that had no reserve left to draw on. There is
no injury. Nobody did this to him.</p>
<p>I would be glad to be told what this was, in due course, if anyone is ever able to
tell me.</p>
<div class="signoff">
<div class="name">J. A. Corbridge</div>
<div class="role">Assistant Pathologist</div>
</div>
</div>
</section>
<!-- ══ CG-H03a ══ Act Two, when she decides to trust them ═══════════════════ -->
<section class="sheet sheet--almanac">
<div class="slug"><b>CG-H03a</b> · Act Two</div>
<div class="almanac">
<table>
<colgroup>
<col class="day"><col class="weather"><col class="walked"><col class="clean"><col class="notes">
</colgroup>
<thead>
<tr><th>DAY</th><th>WEATHER</th><th>WALKED</th><th>TO CLEAN GROUND</th><th>NOTES</th></tr>
</thead>
<tbody>
<tr><td>Mon</td><td>low cloud</td><td>7 mi</td><td>41 mi</td><td>Ground softer.</td></tr>
<tr><td>Tue</td><td>dry, cold</td><td>8 mi</td><td>41 mi</td><td>Passed the lorry.</td></tr>
<tr><td>Wed</td><td>rain</td><td>5 mi</td><td>41 mi</td><td>Rested at noon.</td></tr>
<tr><td>Thu</td><td>dry</td><td>8 mi</td><td>41 mi</td><td>Thursday again.</td></tr>
<tr><td>Fri</td><td>low cloud</td><td>7 mi</td><td>41 mi</td><td>Alec is tired.</td></tr>
<tr><td>Sat</td><td>rain</td><td>6 mi</td><td>41 mi</td><td>Passed the lorry.</td></tr>
<tr><td>Sun</td><td>dry, bright</td><td>9 mi</td><td>41 mi</td><td>Good day. Sang.</td></tr>
</tbody>
</table>
<div class="count">Counted this morning: forty-one.</div>
</div>
</section>
<!-- ══ CG-H02 ══ Act Three, in the buried depot ═════════════════════════════ -->
<section class="sheet sheet--cream">
<div class="slug"><b>CG-H02</b> · Act Three</div>
<div class="minute">
<div class="head">
<span>COMMITTEE ON CONTINGENT ARRANGEMENTS</span>
<span class="classification">SECRET</span>
</div>
<div class="subhead">
<span>Minute of the meeting of 26 October 1962</span>
<span>Copy 3 of 4</span>
</div>
<h2>RESERVE ENTRY (NORTHERN) — AUTHORISED</h2>
<ol>
<li>The Committee approved the entry of a reserve holding of ground in the northern
march, of eleven miles and a fraction, to be recorded twice in order that one record
may be drawn upon without disturbance to the other.</li>
<li>The purpose of the reserve is to hold persons displaced by a general exchange, in
a place which is not on any list that an adversary may obtain. Members were reminded
that an unrecorded place cannot be targeted and cannot be requisitioned.</li>
<li>The entry is pegged to the standing boundary oak at Sike Head, being the feature
to which the march was recorded before the survey of 1861 and therefore the older of
the two authorities. The Committee was satisfied that the tree is in good health.</li>
<li>The Registrar drew the Committee's attention to the consequence of paragraph 2.
A place recorded as the place to which the displaced go is a place the record must
afterwards furnish with displaced persons. The Committee noted this and did not
regard it as an obstacle.</li>
<li>The entry is to be reviewed at the rising of the emergency, and cancelled if it
is found not to have been drawn upon.</li>
</ol>
<div class="signoff">
<span class="lab">Signed</span><span>(illegible)<br>Chairman</span>
<span class="lab">Minuted by</span><span>A.E.W.<br>Clerk (Junior)</span>
</div>
</div>
</section>
<!-- ══ CG-H03b ══ Act Three, and not before ═════════════════════════════════ -->
<section class="sheet sheet--almanac">
<div class="slug"><b>CG-H03b</b> · Act Three</div>
<div class="almanac">
<table>
<colgroup>
<col class="day"><col class="weather"><col class="walked"><col class="clean"><col class="notes">
</colgroup>
<thead>
<tr><th>DAY</th><th>WEATHER</th><th>WALKED</th><th>TO CLEAN GROUND</th><th>NOTES</th></tr>
</thead>
<tbody>
<tr><td>Mon</td><td>dry</td><td>8 mi</td><td>41 mi</td><td>Passed the lorry.</td></tr>
<tr><td>Tue</td><td>rain</td><td>6 mi</td><td>41 mi</td><td>Ada's chest again.</td></tr>
<tr><td>Wed</td><td>low cloud</td><td>7 mi</td><td>41 mi</td><td>Ground softer.</td></tr>
<tr><td>Thu</td><td>dry, cold</td><td>8 mi</td><td>41 mi</td><td>Thursday again.</td></tr>
<tr><td>Fri</td><td>dry</td><td>7 mi</td><td>41 mi</td><td>Passed the lorry.</td></tr>
<tr><td>Sat</td><td>low cloud</td><td>6 mi</td><td>41 mi</td><td>Rested at noon.</td></tr>
<tr><td>Sun</td><td>rain</td><td>5 mi</td><td>41 mi</td><td>Nobody sang.</td></tr>
</tbody>
</table>
<div class="count">Counted this morning: fifty-three.</div>
</div>
</section>
</body>
</html>