44 Commits
Author SHA1 Message Date
slaguru666andClaude Opus 5 0852427586 Fix the pause: it would not hide, it was off centre, and it was too small
Three faults in 1.0.4, and the first was the serious one.

  1. It never went away. Core hides the overlay with `#pause { display: none }`
     and shows it with `#pause.paused { display: flex }`. 1.0.4 styled the BARE
     #pause with display:flex, which wins on specificity, so unpausing removed
     the class and changed nothing — GAME PAUSED sat over the table for the rest
     of the session. Every rule here is now scoped to `.paused` and `display` is
     not set anywhere.

  2. It was off centre because I repositioned it. Core already centres it: a
     full-width band at top calc(50vh - 100px), column flex, centred both ways,
     pointer-events none. That layout was correct and 1.0.4 fought it with
     left/bottom/transform. It is left alone now; only the height changes, and
     the top moves up by exactly half the extra so the centring holds.

  3. It was small: a 322x116 panel in the corner. It is now core's full-width
     band at 300px with a 170px dial — against core's own 100px — and the
     caption at 24px to match core's.

Guarded: check-behaviour now parses the stylesheet and fails any rule that sets
display on an unscoped #pause. Verified it bites. It strips CSS comments first,
because the first version of the guard reported the comment explaining the
guard — which is exactly what the template guard did last time, so that is twice
now and the lesson is written down properly.

Verified by driving the real toggle: running → display none, box 0x0, no class;
paused → display flex, 341x302, centre X exactly on the viewport centre;
unpaused again → display none, box 0x0.

Version 1.0.5.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 19:31:35 +01:00
slaguru666andClaude Opus 5 ad771ff2b5 A uniselector for the pause
Foundry's pause is a spinning d20 and a caption. This replaces both from CSS
alone, without touching the markup: figure#pause becomes a small navy panel with
a yellow rule along the top, and the <img> becomes the arm of a uniselector.

A uniselector is the stepping switch inside a telephone exchange — an arm that
clicks round one contact at a time, hunting for a free line. It is the right
object for this game. The department's whole business is a machine that says
where things belong, and OPEN DAY is set inside one. Eleven contacts, because
eleven minutes is the interval this setting keeps returning to.

It STEPS rather than sweeps: steps(11) over 7.7s, so a contact every 700ms. A
continuous spin reads as a loading throbber; a discrete click reads as a machine
working through a list, which is what the department is doing while the table is
out of the room. The arm carries a faint trailing sector, because without it a
700ms step is easy to miss and the stepping is the whole idea.

No new text. Foundry's caption is localised and this only restyles it — a string
hardcoded in a stylesheet would be one the lang file could never reach.

Two things the browser had to be asked rather than assumed:

  - Core pins #pause with BOTH top and bottom, so an auto height stretched it to
    180px for a 16px caption. It is pinned here instead and sized to content.
  - The arm is rotated, so getBoundingClientRect returns the diagonal of its own
    square (75px for a 52px element). The layout takes its size from the flex
    basis and never from the measured box.

prefers-reduced-motion stops the movement and keeps the object — a stepping dial
in the corner of the eye is exactly what that preference is asking about.

Version 1.0.4.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 19:25:12 +01:00
slaguru666andClaude Opus 5 53481bdfc1 Ship the LAST ADMISSION plates as showable images
A third journal in the adventure — LAST ADMISSION — Show the players — holding
the seven scene plates and the floor plan as eight image pages at player
visibility. Right-click, Show Players, done.

title.show is false and there is no caption, on purpose: the table gets the
picture and nothing else. No heading telling them which room this is, no label
naming the thing on the stairs. The page NAMES exist only for the GM's sidebar
so the right one can be found in a hurry under pressure, and the players never
see them.

Ordered by when each comes up, not by asset number, for the same reason.

The builder throws if a plate is missing from disk, because a missing image is
a blank frame on a projector in front of six people.

Verified in Foundry: eight pages import at OBSERVER, the image loads, and the
rendered page contains no headings, no figcaption and no text at all.

Version 1.0.3.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 19:12:35 +01:00
slaguru666andClaude Opus 5 51bd8e618a Audit every remaining sheet and dialog; add the Culland Hall scene
Opened all of it this time, rather than driving the system through its API.

Two more defects of the same family as the NPC sheet, and in the same place —
the types added last:

  - Talent and Art had no TYPES.Item.* label, so their sheets printed the raw
    key "TYPES.Item.talent" under the name.
  - Neither had a branch in item-sheet.hbs or an isTalent/isPower flag, so the
    Detail tab rendered EMPTY over a document holding category, rule, uses per
    case, Coherence cost, push cost and origin. Eleven of thirteen types were
    handled, which is exactly the shape an eye skips.

Both now have a header statline and a full Detail section, and a guard walks
template.json: every declared type must have a label, a flag set in ringbrp.mjs,
and an {{#if isX}} section in the sheet.

One hardening fix: loseCoherence applies the cost and THEN announces it, so
anything that throws in between leaves the actor quietly poorer with no message.
localize() throws on a non-string, which an unrecognised reason key is.

Everything else came back clean, and it is worth recording what was checked so
the next audit knows what "checked" meant: 13 item types opened, all render; the
expedition sheet (4 tabs); all 7 chat cards driven through their real entry
points — roll, coherence, reaction via Combat.rollAll, hit location, weapon
damage, major wound, and contact through a case file that actually has a group;
all 3 dialogs opened by clicking the controls a player clicks. No errors, no raw
localisation keys anywhere.

Also: Culland Hall as a playable Scene. Drawn as SVG rather than generated,
because a room count, a door position and a label are all load-bearing here and
a generator cannot be trusted with any of them — three label-collision passes in
the browser before it was clean, which is the documented cost of doing it this
way. 2800x2000 at 100px to the square so the Foundry grid lands on the grid
drawn into the image; 5ft squares; no walls, because half-done walls are worse
than none and a GM who wants vision can add them in ten minutes.

Verified in Foundry: the scene imports, activates, and draws.

Version 1.0.2.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 19:02:18 +01:00
slaguru666andClaude Opus 5 02ec47a351 Fix every NPC sheet, which has never opened
npc-sheet.hbs line 43 read

    {{#if (lookup ../skillsByCategory key).length}}

and Handlebars cannot read a property off a subexpression. That is a PARSE
error, so the template never compiled, so every NPC sheet in the system threw
on click — Natives & Threats, the starter's enemy roster, and the whole LAST
ADMISSION cast. #if already treats an empty array as falsy, so the .length was
never doing anything in the first place.

It was invisible to all four existing guards, and the reason is worth writing
down: check-rules reads .mjs, check-behaviour says in its own header that it
cannot reach sheets, and every play-through in this project has driven the
system through its API rather than by clicking. Nobody had ever opened an NPC
sheet, including me, in any of the sessions that "played through" scenarios
full of NPCs.

So: check-templates.mjs, a fifth guard, compiling every .hbs in about a tenth
of a second, wired into the build ahead of check-behaviour. It also names the
specific shape — a property read off a subexpression — because the raw parse
error says only where. Verified it bites by reintroducing the bug. Handlebars
is a devDependency now.

Opening the sheet then showed a second thing nobody had seen: the NPC skill
rows carry four children and were using the character sheet's seven-column
grid, so the name landed in a 13px column and the whole list overlapped
itself. The NPC row now has its own four-column template.

Verified by opening all six LAST ADMISSION cast sheets with an error hook
attached: six rendered, no errors, and Old Marrow reads HP 20/20, major wound
10, armour 2, Brawl 60%, Melee Weapon (Polearm) 60%.

Version 1.0.1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 18:42:05 +01:00
slaguru666andClaude Opus 5 c595bf5a33 Tidy the compendium, and release 1.0.0
Three things were untidy, and one of them was a stale declaration of exactly the
kind this project keeps producing.

  - packFolders named ten packs of seventeen. Talents, the Quiet Arts, the
    primer, the rules and all three scenarios were sitting loose in the sidebar
    because the declaration was written when there were ten packs and never
    revisited. It now covers all seventeen in four subfolders under one parent
    — Scenarios, Characters, Equipment, Rules & reference — and the build
    asserts the folder list and the pack list are the same set, so it cannot
    drift again.

  - Labels were off-pattern in three places ("Transport", and the two prologues
    reading "Custodians: Prologue — X"). Everything is "The Custodians · X".

  - Thirty-six pregens in one flat list. The pack now carries three compendium
    folders — Duty roster (16), Before the department (16), Original pregens
    (4) — and every actor is filed. Nothing unfiled.

Worth knowing, and verified against Foundry's own source rather than guessed:
packFolders only assigns a pack that has NO existing entry in the world's
core.compendiumConfiguration, and the routine only runs when the set of active
packs changes. So a world that already has this system installed keeps whatever
layout it had; the new one applies to a new world. The local world was brought
into line by writing the configuration directly.

Version 1.0.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 18:29:44 +01:00
slaguru666andClaude Opus 5 1bf8d7f6fb Playtest LAST ADMISSION: five fixes, one new guard
Played it through in Foundry with the six on their civilian sheets. Five
defects, all of the house's favourite kind — a number written down that nothing
reads.

  1. Pollard and Agyeman were armed and armoured as CIVILIANS. The police trade
     kit carries a revolver and a stab vest, which is right for a serving
     officer and wrong for a British civilian, and it ended the scenario's only
     fight in a single round. expandFromRegister's civilian mode now strips
     firearms and body armour from trade kit as well as induction and standing
     issue, and the build throws if one gets through. Wren Finch keeps her
     knife — a knife is not an issued weapon.

  2. Old Marrow's shears were a utility knife. The page said 1d8+1; the actor
     in the pack held 1d4+2, so a GM running off the token had a different
     fight from the one written down. He now carries a billhook — an actual
     garden tool that is already in the catalogue — and the page says 1d8+2,
     which is what a billhook does.

  3. He was too soft to be the fight the scenario promises. At the original
     numbers he died in an average of 2.4 rounds and in 6 runs of 20 he was
     dead before he ever swung. Retuned over thirty runs to HP 20, armour 2:
     about four and a half rounds, somebody hurt in 28 of 30, somebody dropped
     in 9 of 30. The verification run took four rounds and left Pollard on
     eight hit points.

  4. Two stat lines disagreed with the generated sheets — Marrow 16 against 15,
     Enderby 13 against 12.

  5. Two rolls had no failure written: the body, and Sammy's ankle pull. The
     body is now marked "no roll" outright, because there is no better answer
     to buy. The pull has a fumble result.

New guard: check-behaviour parses the scenario's own fight line out of the page
HTML and compares it to the actor the build will generate — hit points against
hitPoints(CON,SIZ), armour against naturalArmour, and shear damage against the
catalogue entry for whatever he is actually holding. Verified it bites by
reverting the damage to 1d8+1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 18:21:45 +01:00
slaguru666andClaude Opus 5 d063b3c016 Add LAST ADMISSION, a two-hour haunted-house prologue
OPEN DAY was too complex for a first night: a fixed timetable the GM narrates
minute by minute, three things that must be left unresolved, ten serial approach
scenes, and no combat. This is the replacement opener — same premise engine,
a third of the moving parts, and something to hit.

A cheap scare attraction on the last night of its six-week run, in a real empty
hall, with paying public still inside. Three of the ghosts on the poster were
invented in an afternoon by a marketing agency, printed on the tickets and the
wall panel and the call sheets, and performed forty times a night to twelve
thousand people who agreed to believe them for eighteen pounds each. They are
in the building now. They are not ghosts, they are entries, and they have
exactly as much inside them as was written down — a page each, which they do,
and nothing else. That makes them simple to run and simple to stop: hurt them,
or break the script. Both work; the script is faster and cheaper, and a table
that finds it should feel clever.

The fourth name on the panel was copied off a memorial in the parish church
because the layout needed four. Edith Crane was real, died in a real fire here
in 1963, and nobody wrote her a page because nobody had to. She never attacks,
cannot be hurt, and will not speak until she is asked her name. She wants her
name off a poster. The night ends on whether it comes down tonight or on Monday
— and Monday is two performances away.

Written for the second intake specifically, on their civilian sheets, with each
one's job as their way in: Renshaw is IN the show and knows the running order,
Ferriby wired it, Sharrock built the sets, Pollard is on the door, Braithwaite
and Ashcroft paid to get in. Each shortcuts a different part of the middle and
none of them is required.

Art: eight plates commissioned, seven kept. The wall panel plate was cut after
two attempts both produced three frames instead of four — a picture that
contradicts a count the scenario turns on is worse than no picture, so the panel
is a handout the GM shows rather than describes. The freed green-room plate went
onto the Act One page, where the call sheet is.

OPEN DAY stays in the repo as the longer, quieter alternative; both scenarios
say plainly which is which and that nothing depends on the choice.

Verified in Foundry: the adventure imports, six cast, seven GM pages, five
handouts, plates load.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 17:50:52 +01:00
slaguru666andClaude Opus 5 f576c7977d Add a second intake: six more agents, with portraits
Written for the group that actually plays. Three postings and three trades
again, and none of the six repeats a posting or a trade already on the sheet,
so the roster now covers sixteen different jobs and no two players can pick the
same character by accident.

  Gareth Pollard      Night Warden          Field Officer
  Dominic Ashcroft    Anchor Officer        Senior Field Officer
  Neil Braithwaite    Pathology Officer     Field Officer
  Kate Renshaw        Interview Officer     Senior Field Officer
  Danny Sharrock      Construction Worker   Probationary
  Colin Ferriby       IT Specialist         Probationary

Each also gets a before-the-department entry, because without one they cannot
play OPEN DAY — the prologue builds its civilians off the BEFORE table, and the
build throws on a roster agent that has no entry in it. Two of the six were
already trades, so their civilian self is the same job with none of the kit.

Two guards had to be corrected rather than satisfied, both for the same reason:
they had encoded an accident of the roster being exactly ten.

  - "the ten cover all ten trades exactly once" cannot survive a sixteenth
    agent. The property that actually matters is that no trade is missing, so
    that is what it asserts now.
  - "the roster should be half trades" would mean picking characters to satisfy
    a ratio. It now asserts both halves are present and neither dwarfs the
    other, and separately that no job appears twice — which is the check with
    real teeth, and it passes.

The portrait pass caught an arithmetic slip of mine: Sharrock came back looking
early forties against a sheet that said 35, and his biography says twenty years
on sites, which would have him starting at fifteen. He is 42.

Verified in Foundry: 36 pregens in the pack, all twelve import, sheets render
with their portraits.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 17:19:58 +01:00
slaguru666andClaude Opus 5 f185c92088 Add OPEN DAY, the recruitment prologue
Ten civilians, one decommissioned telephone exchange, and eleven minutes during
which the building went back to being on the street it was built on. Nothing
attacks anybody. Nothing wants anything. That is the horror, and it is the whole
design.

The premise was already in the pregens. Wren Finch's biography said she was
inside a building "on the night it stopped being on the street it was on", and
Soraya Rahimi's said she talked a caller down on air "for eleven minutes, and
the recording does not play back the same way twice". Those are two views of one
afternoon, so the scenario is built at the intersection and the other eight
"How they found her/him" lines are the same afternoon from eight more jobs.
Nothing in the prologue contradicts a sheet, because the sheets came first.

The reconciliation pass, which is most of the work:

  - Finch's line said "night". The open day is an afternoon. One word changed on
    the pregen, and both are true. Her line also says she was the only witness
    who could describe the inside, so she is the one who goes into number 11 —
    written into the location note rather than left to chance.
  - Rahimi's line says she was ON AIR. So the disconnected telephone that rings
    at 15:45 is patched through to her outside broadcast, which makes the canon
    line and the scene the same event instead of two coincidences.
  - Okonkwo carries two men out; Nkemdirim's patient has a forearm that healed
    crooked over a break he took six minutes ago. Both seams needed an injury in
    Act Two and there was none, so 15:50 and 15:51 now have one.
  - Sandoval's forty minutes of traffic sit inside an eleven-minute window. That
    is the anomaly, so it is on the handout in those words.
  - "Prine" collided with an NPC already in the world. The engineer is Kearsley.

Structure: 2h15 against the house 3h30, stated in the design intent, because a
prologue exists to make the first real case land. No combat, no antagonist, no
Coherence — the last one is thematic, not a simplification: Coherence is what it
costs to keep looking once you know what you are looking at, and these ten do
not know yet. The Briefing is the first time the word is said aloud.

Ships as docs/scenarios/OPEN_DAY.md (the full GM document) and a Foundry
Adventure in a new `prologue` pack: 8 GM pages, 7 handouts, 5 NPCs, and ten
generated plates. The PCs are the "(before)" pregens already in the Pregens
pack — a second copy here would give a GM two sets of the same ten people and
no way to know which one their notes were on.

Verified in Foundry: the adventure imports, both journals render branded, the
countdown table reads as a table, and all ten plates load.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 17:03:49 +01:00
slaguru666andClaude Opus 5 26ad00174f Add the same ten before the department found them
Ten civilian counterparts, one per roster agent: same person, same
characteristics, same face, no induction and nothing ever issued to them. A
player can hold the two sheets side by side and read exactly what the job did.

Keyed off ROSTER rather than written out again, so the pair cannot drift apart.
The five who joined straight into a posting get the trade they came out of, and
between them the ten now cover all ten trades exactly once — which makes this
set a demonstration of the whole trade half of character creation as well as a
set of characters.

expandFromRegister grows a `civilian` mode: no induction skills, no standing
issue, no tier issue, no trade cant, and nothing anomalous or Coherence-costing.

Three things the build guard caught, each of which would have shipped:

  - Holloway was "carrying issued kit: notebook". Wrong: an interpreter owned a
    notebook long before anyone issued her one. The rule is now kit that could
    ONLY have come from the department.
  - Same again for skills — the linguist's core list contains trade cant,
    because it is a language and she is a linguist.
  - Wren Finch was carrying the black mirror, which is era "anomalous", from a
    transposed tradition, and costs Coherence to look into twice. That is
    something you acquire after the night the department notices you, not
    before. It is the only anomalous item in any trade kit.

The guard runs over the built objects rather than trusting the flag that made
them, because the flag is three call-frames away from the result.

Verified in Foundry: 24 pregens, the before sheets show the civilian job in
place of rank, no armour, nothing readied but fists, and the right face.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 16:19:50 +01:00
slaguru666andClaude Opus 5 4101221eb1 Fill the empty space in the actor sheet header
The header was one flex row — identity, then vitals pinned to the top right.
The identity column is tall (name, rank, marksmanship, the two style hints, two
age fields) and the vitals row is short, so everything under the vitals was
empty blue: roughly a third of the header.

Split it into two columns and stack the status column: vitals, then the derived
numbers, then the readied weapons. Both of those already existed as full-width
bands directly below, so nothing new is on screen — it is the same content
arranged to use the space, and it puts damage modifier and readied weapons next
to hit points, which is where they are read during a fight.

Two sizing traps, both found by measuring rather than looking:

The status column is an auto track, so its width came from max-content — the
readied-weapons line, whose length is whatever the weapon names happen to be.
That crushed identity into a 190px gutter with the name truncated to "Marta
Hollow". width:0 + min-width:100% keeps those panels out of the measurement so
the column is sized by the vitals and they stretch to match.

The vitals row is wide enough on its own to do the same thing, so the columns
are proportional (1fr / 1.6fr) and the vitals now wrap.

Measured at 1020px: header 367px tall before, 266px after, columns 241 and 235
so they end level. At 1400px: 214px tall, columns 189 and 158, vitals unwrapped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 16:12:47 +01:00
slaguru666andClaude Opus 5 c15b13c3b9 Add the duty roster: ten ready-to-play agents with generated portraits
Five postings and five trades, so a group choosing from this sheet meets both
halves of character creation without anyone having to explain them.

Skills and kit are not written out per agent. They are expanded from the
register at build time by the same helper the starter scenario uses, which is
hoisted out of the BLACK PLATFORM block for the purpose — two copies of that
expansion is two places for the induction rule to drift. Ratings sit at the
middle of each band rather than being rolled, because a pregen that varies
between installs is not a pregen.

Portraits are generated art, resized to 512 and stored as webp (12MB of PNG
became 210KB). buildActor now takes a portrait and gives the same face to the
prototype token: a pregen you can recognise on the map is worth more at a
convention table than a correct one you cannot tell apart. It throws on a
portrait that is not on disk, because a broken image on a pregen sheet is the
sort of thing that is first noticed on a projector.

Guard: check-behaviour gains a test that every roster agent names a real
posting or trade and has its portrait on disk, verified to bite. It caught
"archive", which is not a posting — Bhattacharya is Registry.

Verified in a running Foundry: 14 pregens in the pack, sheets render with the
portraits, coherence and hit points fill from the template, no system errors.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 11:06:04 +01:00
slaguru666andClaude Opus 5 7f8355f0d0 Add the player primer and cheat sheet, and brand every journal
Ten pages a player reads before session one, in their own compendium at OBSERVER
ownership: nine of setting, one cheat sheet.

The draft called the organisation "the Bureau"; everything else in the game calls it
the department or the agency, so that is what it is called. Thin areas filled rather
than padded: the seven character principles as a list, the real Coherence band table
instead of a paragraph describing one, and "what continuity is not" pulled out of the
middle of a page because it is the most important sentence for a new player.

The cheat sheet's numbers are computed from rules.mjs and lang/en.json at build time.
A hand-typed one would have been the sixth time this project shipped a number that
disagreed with the code, and the one the players were holding.

R-250: the design tokens were never on :root. Journals rendered as default parchment,
and four things were wrong in sequence — v14's hook is renderJournalEntrySheet; its
`element` is the node, so `[0]` returns the first CHILD and put the class on a header
button; there is no .journal-page-content in v14; and then the real one: with the
selector matching, font-size, line-height and padding all applied while every colour
did not, because the palette is declared on .ringbrp-sheet/.ringbrp-chat/.ringbrp-window
and never on :root. A journal inherited no tokens, so every var() silently became
nothing. A rule that HALF applies is not a specificity problem — I spent three attempts
treating it as one, including a version bump on a cache theory that was wrong.

Branded: primer, rulebook, starter GM text and handouts. Scoped by flag, so other
modules' journals are untouched. Version 0.9.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 10:19:41 +01:00
slaguru666andClaude Opus 5 d9bce12c27 Replace the starter with BLACK PLATFORM, and make the dialogs ask questions
The starter is now an action case: a train running through a station whose rails were
lifted in 1976, two engineers aboard, eleven minutes until it returns. Descend, take the
platform, board, rescue, fight forward along a moving train, stop it.

Simpler than PAPER WINDOW on purpose — one clue scene, no social subsystem — which also
means it cannot reproduce R-248, because there are no groups or standings to leave
unwired.

Every agent can fight, deliberately: floors of firearm 42%, melee 40%, Brawl 40%,
Dodge 40% so nobody is a spectator on their first evening. Floors only RAISE, so a
posting already better stays better — Callum's shield lands at 53, not the floor's 45.

The builder now handles combat floors, extra weapons issued for a case, and a scenario
with NO Borrowed Authority at all; the last was assumed to exist and would have thrown.
Two new tests: every floor names a real skill, and every agent clears the fighting
floors the handout promises.

Sixty-two dialog strings reworded. They were naming mechanics at people: "Situational
modifier %" is now "Anything else helping or hurting? (%)", "Target cover" is "Is the
target behind anything?", "Difficult (÷2)" is "Difficult — half your skill". Labels ask
the question; hints say what it does to the number; notifications say what to do next
rather than what went wrong.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 00:08:07 +01:00
slaguru666andClaude Opus 5 4e28de2a64 Play PAPER WINDOW with the shipped pregens; fix four silent defects
Ran the starter end to end. It closed, and it found four defects in what I shipped an
hour earlier — all in the scenario data, all silent.

R-247: the Borrowed Authority did not work. I wrote scope "operate", which is not one
of the five scope tiers; an unrecognised scope ranks 0 and every action came back
"impossible" with no error. The first scene of the starter is the Borrowed Authority
tutorial. Fixed, guarded in check-kits, and covered by a test that documents the
failure mode.

R-248: the contact subsystem was unreachable in the scenario built around it. The case
file carried a standing for the Returned Clerks and no GROUP ITEM; resolveContact
returns null without one, so READ, SIGNAL and OFFER did nothing. Groups are data now,
and a test asserts every standing on a shipped case file has a group behind it.

R-249: legs wrote `kindId` where resolveLegDialog reads `leg.kind`. It worked only
because the terrain text happens to begin with "Extraction".

Not a defect: phase four went Difficult because Resources hit 0 and destitution makes
every remaining phase Difficult. Best beat in the session.

All four phases failed and the case still closed — Containment 8 to 2, Resources 8 to
0 — which is what the scenario is built to survive. Two of six closing requirements
succeeded and the settlement still completed. The Cancellation Man opened with a
critical against a raised riot shield and went through 10 points of armour, teaching
the shield and graded-defence lessons in one roll.

Also documented: nobody on the starter team can aim the return, because only the Anchor
Officer trains Transposition. The extraction page now says to narrate it rather than
roll six dice that will all fail.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:39:43 +01:00
slaguru666andClaude Opus 5 49c2e9fc7b Add PAPER WINDOW as the starter scenario Adventure
The six-player introductory case ships as a Foundry Adventure in a new `starter` pack,
because a scenario that arrives as nine loose documents a GM has to assemble is a
scenario that gets read rather than run.

One import brings in: the GM scenario in twelve pages; the seven player handouts as
their own journal at OBSERVER ownership so they can be revealed one at a time without
the GM editing permissions first, while the GM text stays hidden; the six pregens built
through the same buildActor path the shipped pregens use, so they arrive with full skill
lists, kit, hit points and linked tokens; the cast, including the Cancellation Man; the
Borrowed Authority as a real credential with scope, Trust 2 and its three red flags; and
the case file already at Containment 8 / Resources 8 / Clearance 6 with its four phases
loaded at the stated difficulties and modifiers.

Pregen ratings are fixed at mid-band rather than rolled — a pregen that varies between
installs is not a pregen. The expansion from posting or trade into a sheet reuses the
register and the induction rule rather than restating them, so the starter cannot drift
from the generator.

Verified by importing it: no errors, the roster resolves through stable keys, handouts
arrive player-visible, Nia has the team's highest Tradecraft as the text requires,
Callum's shield is slung so raising it is still a decision, the three probationers show
the trade/induction split, and phase one runs out of the box.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 23:25:10 +01:00
slaguru666andClaude Opus 5 43508259ac Consolidation pass after a Codex review
Four real defects, each verified against the source before acting on it.

Trade expertise was coupled to agency rank. A probationary burglar came out at 35-50%
and a veteran at 65-80%, as though fifteen years of picking locks were something the
department conferred. TRADE_BANDS is now fixed at 50-65/30-50 at every rank, and
INDUCTION scales with service instead (20-32 probationary to 45-60 veteran) because
that half genuinely is the department's. The two axes were the wrong way round. This
is the thing I flagged myself after PAPER HARBOUR and then left alone — flagging a
defect is not the same as fixing it.

Bonus points were sprayed across every skill in the game. grantFullSkillList runs
immediately before the loop and puts all fifty-nine skills on the sheet, and the loop
picked from actor.items, so a veteran's ninety points landed anywhere. The comment two
hundred lines above has always said "over the core skills"; the code never did.

"Random species" passed "baseline" into generators that support random perfectly well.

No behavioural tests. The strongest point in the review: the three guards are static
and none of them can tell whether a rule is READ, which is the only kind of defect this
project has ever shipped. tools/check-behaviour.mjs now runs 28 deterministic tests,
gated into the build, covering R-231/232/243/245/246, graded defences and the lamp
rule. Proved it bites by re-breaking R-246.

The register moved to postings.mjs, a Foundry-neutral module the engine, rulebook,
guards and tests all import normally — they were previously pulled out of the engine
with a regex and eval, which worked and was a trap. My first version of that used
`export … from`, which re-exports without local bindings, so ROLES was undefined and
the system threw on init: node --check passes that, loading it in Foundry does not.

Also: the contact doc comment still said "only OFFER moves standing"; check-kits
accepted mas/app, which are the DISPLAY names of siz/cha, so a posting declaring one
would have passed and produced an undefined characteristic; package.json disagreed with
the manifest; README counts were three revisions stale and are now generated at build.

Deferred with reasons: splitting the 6,700-line engine into modules. Right, and a
multi-session refactor whose risk is exactly the silent breakage demonstrated above.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 22:57:20 +01:00
slaguru666andClaude Opus 5 c60485de72 Play PAPER HARBOUR with the criminal, and fix R-246
A pier that closed in 1974, a beacon still transmitting, and a probationer recruited
out of a city with a caution the department has quietly lost. The generator's gap —
somebody uses that agent's name before it is given — landed on him in phase 2, and he
held it on Fast Talk 14 against 48 while the Field Lead missed the read.

The case turned on a warrant card: the keepers of the ground want relieving by somebody
official enough to take the duty on, and every agent carries exactly that. Bargain 27,
favourable, rolled 33 — impression -1 to +1. The one unambiguously his moment was the
log the first team locked in behind them: 11 against Sleight of Hand 50.

R-246: a fumbled greeting cost nothing. contactOutcomes has said fumble/signal -1 since
the social pillar was built, and impression was adjusted only inside the `offer` branch
— so the -1 was computed on every botched greeting and thrown away. Impression now
falls on a fumble at any stage and still only rises on an offer; the narrower fix
matters because read's delta counts FACTS LEARNED, not standing, so applying the delta
always would have paid the team impression for doing research.

Also logged: a probationary criminal is out-sneaked by a career Field Lead (47 to 60)
because trade skills use the agency tier bands — defensible, flagged, not changed. And
one invented step of my own: I rolled Transposition to get them home after the
extraction phase had already put them out.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 22:35:37 +01:00
slaguru666andClaude Opus 5 b8430c284b Play PAPER MARGIN with a trade character
A farm in Angus, a person in two places, and a probationary doctor recruited from A&E
alongside two career officers. The generated case turned out to be its own best
argument for trades: the truth is that there is no original left, both are copies, and
telling two identical people apart is a medical question — Medicine on that team reads
42, 1 and 1.

Both halves of the trade design showed up. She was the only one carrying the
department's own vocabulary (Anomaly Lore 37 against 0 and 0, Tradecraft 31 against 5
and 5), and she was hopeless at closing: Persuade 23, rolled 95, read on Insight 60.

The examination failed by three and the bloods came back critical on 02 — both samples
are the same sample. Neither career officer could have found it.

R-226 fired visibly: trained Tradecraft 31 lost the phase lead to trained Navigate 34.
The riot shield issued to Containment two commits ago turned up unprompted and took
Kobe from 7 everywhere to 10 on torso and arms. Coverage applied to the opposition too
— the duplicate died through its bare leg.

One probe error recorded, not a defect: endOfCase returned nothing because my ad-hoc
rolls passed no skillFamilyId, so nothing ticked — the same omission R-222 found in
resolveLegDialog, reproduced by hand. Named properly, Medicine ticked and improved
42 -> 48%.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 21:55:36 +01:00
slaguru666andClaude Opus 5 79acc8227f Ten trades, an induction layer, and rolling the stats yourself
TRADES: ten ordinary jobs the department recruits from — construction worker, doctor,
professor, engineer, law enforcement, IT specialist, scientist, linguist, entertainer,
criminal. They are not postings. A posting is what the department made of you; a trade
is what you were before any of it.

A trade character is built in two halves. The trade is genuine expertise on the same
bands a posting's skills use — a doctor is a proper doctor. INDUCTION goes on top at
25-40%: Tradecraft, Anomaly Lore, First Aid, Firearm (Pistol), Dodge, plus a sidearm, a
vest, cordon kit, a cover identity and a ward. The band is low on purpose; six weeks is
not a career, and that gap is most of what it feels like to play one.

Induction never demotes: a former police officer keeps pistol 58 from the trade rather
than being re-taught it at 26.

The creation dialog gains a "Recruited as" switch with its own trade list and card
(which shows both halves), and check-kits now holds trades and induction to the same
standard as postings — both new guard paths verified by breaking them.

Rolling them yourself: a tickbox that walks the eight characteristics one at a time,
each roll announced to chat so the dice actually fall, "Take them" locked until all
eight are down. A hand-rolled character is taken exactly as it fell — no best-of-three
on the key stat, no species shift. Verified both ways.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 21:48:06 +01:00
slaguru666andClaude Opus 5 53eb72c100 Issue riot shields to Containment and the Night Warden
Both postings draw a riot shield, and both are trained to use it — issuing one without
the skill would have been R-212 again with a different item, the Antiquities Officer
who drew a flintlock and rolled 5% with it.

melee_weapon:shield is SWAPPED into each support list rather than added, so five core
and five support are preserved and the shield arrives without a free power bump.
Containment drops stealth (a posting whose job is being the thing in the doorway was
always the least stealthy in the department); the Night Warden drops navigate (they sit
with one site all night).

check-kits now requires the Shield skill for an issued shield, the same way it has
always required training for an issued weapon. Verified by removing the skill and
watching the build refuse.

Four generated agents: shield skill at 25-30%, nobody encumbered, though a Containment
officer lands at 32.9 of 33 kg. The shield ships slung — raising it is the choice, and
for the Warden it is the difference between 2 points of armour and 5.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 21:37:46 +01:00
slaguru666andClaude Opus 5 0c2636d543 Play the bell tower stair: shields, and what they cost
Two officers, identical kit — riot shield, stab vest, 12 hp, Shield 65% — and one
difference: one holds the shield up, one keeps it slung and shoots. Raised it is most
of their armour (torso 5, arms 3 against torso 2, arms 0 with it down).

Four ordinary blows turned aside cost the shield nothing, which is the right call: at a
point per parry a 5-wear riot shield would have been kindling before the fight started.
Round 8 a CRITICAL halberd was parried, dragged down one step, and the shield took 2
wear for absorbing it while the reduced blow still landed on the covered arm for 7.

Both officers were killed through the gaps a riot shield does not cover — one through
both legs, one through the head for 10 against a location maximum of 5, dead outright
rather than dying (R-227 holding).

The ranged penalty then decided it. Shield up, the survivor shot at 65% less 20% and
rolled 93, 89, 73, 65. That last number is the rule in one figure: 65 hits at 65% and
misses at 45%. The redcap was on 3 of 13 and walked away.

Nothing needed tuning. Full log in docs/REVIEW_LOG.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 21:08:12 +01:00
slaguru666andClaude Opus 5 c61700566c Shields: armour you raise, and the only armour you can defend with
A shield is the one piece of armour you hold, and it protects you exactly as much as
you are currently holding it up. Raised, its points apply to what it covers and it can
parry on a new Shield skill. Lowered, it is weight. The price of keeping it up is that
it occupies a hand and you are shooting around it: -20% to your own ranged attacks,
printed on the card like everything else. Only one shield goes up at a time.

Seven of them, 2-point buckler to 6-point ballistic shield; the pavise and barrier
plate cover legs too because they are walls you carry.

`degradation` finally does something — it has been on every armour item since the packs
were first built and was read by nothing. A blow costs the shield a point of wear for
every step it stood above an ordinary success, so an ordinary hit costs nothing, a
special 1 and a critical 2. At its limit it comes apart, drops, and will not be raised
again.

Two defects found by driving the real functions rather than reading the diff, both
introduced by this change:

- Every shield defence quietly rolled DODGE. "shield" passed through
  defenceTypeAllowed unchanged, so neither parry branch matched and it fell through.
  Invisible in the card; it showed up as eight rolls at a supposed 85% returning six
  failures. Taking a blow on the shield IS a parry, so it is now a flag on a parry
  rather than a defence type of its own.
- The wear rule was unreachable: it fired only on a clean stop, but under graded
  defences only a critical fully stops a critical, so a shield would never have taken
  a scratch. Wear is for what the shield ABSORBED — dragging a critical down to a
  special is exactly when shields splinter.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 18:25:30 +01:00
slaguru666andClaude Opus 5 016ea1c4ab Play the chantry ruin: coverage measured against points
Two officers from the same pregen, same hit points, same Sword and Dodge, armoured so
that the one carrying MORE points carried it in FEWER places: a breaching suit at 7
points on all seven locations against a cuirass and helmet at 9 points on three.
Against a redcap with an 80% halberd, where fourteen of twenty melee locations are
limbs.

The cuirass and helmet stopped fifteen points across three connecting blows and it did
not matter: the two hits that found a bare leg did every point they rolled, destroyed
the leg (12 against a maximum of 6), and started a six-round dying clock. Under the old
rule that leg carried 9 points and both blows would have done nothing.

The suited officer took the same weapon on a limb for zero and went nine rounds
untouched — then a CRITICAL halberd against a successful dodge landed one step down as
a special, halved the armour, and put 9 through a 7-point suit. Full coverage is
resilience, not immunity.

Full log in docs/REVIEW_LOG.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 10:56:31 +01:00
slaguru666andClaude Opus 5 6ed9ded362 Armour covers what it covers, and Coherence moves to the vitals
Asking for the type of armour per location turned out not to be a display request.
Every equipped piece added its points to EVERY location, so a Brodie helmet protected
your shins and a cuirass protected your skull — with a catalogue containing sallets,
lobster-tail helmets and three cuirasses, that could not be printed without the sheet
saying something visibly false.

Armour now declares coverage as a named set rather than a list of locations, because a
piece has to fit whatever body wears it: all, torso, torsoArms, torsoLimbs, head. The
sets expand to location KINDS, so a cuirass covers a baseline torso and a vesh trunk
and ridge without either knowing the other exists. Unstated coverage is `all`, so
anything that does not declare behaves as everything did before. Eighteen of the
twenty-five catalogue pieces are not whole-body and now say so.

The trap was double counting: hitLocationRoll subtracted the global worn total PLUS
the body's own armour at that location, which was right while armour was global and
becomes a double count the moment a location knows its own pieces. It reads the
location's total and nothing else, verified by firing fourteen hits of 10 damage
across every location and asserting damage applied == 10 - that location's armour.

A single ARMOUR number no longer exists, so the header shows the torso with "0-8 by
location" beside it when the rest of you is not that. This is a real difficulty
change: limbs are frequently bare and limbs are 12 of 20 on the melee table.

Coherence moves out of the derived strip into the vitals at hit-point size, with its
band under it and the box reddening as it falls.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 10:33:04 +01:00
slaguru666andClaude Opus 5 3421ed4a2e Reorder the combat tab, and make weapons readyable
There was no way to ready a weapon. The strip under the characteristics reads
`equipped`, and the only toggle-equipped control on the sheet was on the ARMOUR list —
a weapon could only be readied by opening its item sheet and finding the tickbox
there. The weapons table now carries the same toggle, the row is tinted when readied,
and a line above the table says what the control does.

The tab runs in the order it is used: weapons, armour, defend, reaction, body last.
Weapons lead with 40px art and a display-face name, having previously sat below two
screens of anatomy and reaction arithmetic.

The figure is a partial, drawn in three places — header thumbnail, combat tab, anatomy
tab. Three inline copies would have been the template-layer version of the defect
check-rules exists to prevent: a location present in one drawing and missing from
another.

The header carries a 34px figure and every location with its damage and the armour
over it, so "how much armour is on the part that just got hit" is answered on the main
page without changing tab.

Also fixed: `.ringbrp-sheet a` outranks a bare `.rb-equip`, so an unequipped toggle was
painted white and read as lit — true of the armour toggle too, since it was added.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 10:15:16 +01:00
slaguru666andClaude Opus 5 4bfa7110d0 A lamp lights the people standing in it
The goods yard fight made the case: three agents inside the same pool of light shot at
-50% while the fourth, four metres away, shot at -10%.

A lamp now has a reach, per item rather than global, because a weapon lamp and a
vehicle searchlight are not the same offer — 4 m for cold light strips, 6 m for a
weapon lamp, 10 m for the issue field lamp, 30 m for a roof searchlight. Anyone inside
it is in the light and the card names whose lamp it is, so both halves of the rule
travel together: the pool is one position and the whole group is standing in it.

Measured from the tokens. The shot that started this — no lamp of her own, four metres
from somebody else's, in pitch dark — goes from 20% to 60%, while an agent
twenty-five metres out still eats the full -50%.

An UNKNOWN distance is explicitly not lit: Number(null) is 0, so an unmeasured
distance would otherwise have read as standing on top of the lamp and lit any scene
with no tokens placed. The dialog carries a tick instead, pre-set when the canvas could
measure it and the GM's answer when it could not.

Note: template.json is read when Foundry loads the system, so a deployed server needs
a restart and not just a pull before the migration can stamp the new field.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 09:49:30 +01:00
slaguru666andClaude Opus 5 5c640d65cf Fix a fast action firing twice and paying once
Ammunition was charged once before the shot loop rather than once per shot, so the
Webley put two rounds out and the cylinder went down by one. That is the exact
dishonesty the burst rules exist to avoid, and it landed on the mode that is supposed
to cost the most. Charged per shot now, and the loop stops when the weapon runs dry
part way through the action.

Found by playing the four modes side by side in the goods yard — one agent per mode,
all four at 60%, so the fight read the mode and not the shooter. Full log in
docs/REVIEW_LOG.md, including two findings left open: burst options are close to
unselectable once the light is bad, and a lamp currently lights only its carrier while
three agents stand in the same pool of it at -50%.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 09:18:13 +01:00
slaguru666andClaude Opus 5 2e10ecced9 Fire modes, fitted sights and lamps, and a tab rail
Selectable fire, with the modifiers on the choice
  Every weapon has carried a fireMode since the packs were first built and nothing
  read it: a musket could rip a ten-round burst and "rapid" bought a weapon nothing.
  FIRE_MODE now gates the burst rules and carries its own attack modifier — slow +10%
  and then you work for the next one, fast a second shot at -20% to both, rapid
  bursts, beam +5% and it can be held on the target for damage instead of hits. The
  gate lives in burstAttack too, so no macro can route round it. `fast` was on five
  catalogue weapons and was not in the system's list of modes at all, so re-saving one
  of them silently blanked it; the list is derived from the rule now.

  burstAttack shipped complete and was reachable from nothing. It is the resolution
  path the selector chooses, and takes the dialog's whole stack rather than charging
  the player twice for the same burst.

Sights and lamps that apply themselves
  A sight is graded by range band, so a telescopic sight is a -10% liability inside
  ten metres and worth +20% at extreme, and it only counts if it fits. The band is
  already known when the modifier is wanted, so nothing is selected and nothing is
  forgotten. The dark costs something now; a carried lamp buys it back to dim, never
  to daylight, and the card says it shows them exactly where you are. A migration
  fits gear that predates the fields, matched on the stamped key rather than by name.

The damage card
  The last card still wearing Foundry's stock dice styling — it posted a bare Roll and
  let the core template dress it. It renders through the module's own card now, with
  the Roll still on the message so dice stay inspectable.

A rail instead of a strip
  Eight tabs across an 820px sheet compressed to 11px type. They run down the side
  now, one line each, with counts as badges; the sheet is 152px wider to pay for it.

Also fixed: any weapon with a Coherence cost could not be attacked with AT ALL — the
handler re-read the weapon after an await, when currentTarget is already null, and the
attack died on a TypeError with nothing shown. And the duplicate-rule guard failed an
honest table because FIRE_MODE and speedBands share two key names; it wants a majority
now, and prints partial overlaps rather than swallowing them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 08:56:04 +01:00
slaguru666andClaude Opus 5 d4442a55f0 Play SALT COUNTY with the new bestiary
A records office, a revenant as the briefed symptom, and the carrion file as the
cause "elsewhere in the same location". The revenant was resolved without a shot
off its own leverage line. AMENDMENT then removed two trained skills and a talent
permanently, with no roll offered — which is the whole point of that entry.

Burning the file exercised the fire rules on a thing rather than a person: armour
counted on the round it caught and never again. The team burned too.

Closed at Containment 8, Resources 1, Clearance 5; the failed extraction advanced
the window clock and every crossing took the -10%.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 08:17:16 +01:00
slaguru666andClaude Opus 5 ee9e1f5b73 Codex review pass: three real faults corrected
R-228: Ambidextrous was a compulsory build. 0/-20 gave a full-strength main hand
AND a cheap second attack. It now buys consistency, not a free attack: -20 in both
hands against -20/-40 untrained.

R-229: full auto was a firing squad. Ten independent hits off one critical, each
with its own damage, location and Major Wound check. Hits capped at 3/5/7, and a
burst is ONE wounding event however many rounds connect.

R-230: Engines deleted the pressure it existed to create. Guns +2 and Helm +1
against a vent of 3 made a fighting round heat-neutral, so Heat only mattered when
the engineer failed. Venting is now 2/3/4.

Also: falling halving no longer stacks (soft + controlled quartered the drop);
blast has one formula floored once, so the answer no longer depends on call order.

And the structural note — "giving everyone a roll is not the same as giving
everyone a decision". Sensors, Damage Control and Medical now have mutually
exclusive modes that bite in the engine: mark/spoof/read, patch/brace,
restore/steady.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 08:07:58 +01:00
slaguru666andClaude Opus 5 226f853ee6 Hazards, automatic fire, two weapons, a bestiary, and space combat
Stress test first: 150 characters across every posting, tier and species against
fourteen invariants each, then the edges (characteristics at 1/3/21, every
location destroyed, twelve pikes carried, hp set to -99).

R-227: a destroyed head was a nap. The printed effect has always read "For
anything that keeps its brain there, this is death" and the code set unconscious
and stopped. destructionOutcomeFor() now says what destruction means.

THE WORLD: falling (a die per 3 m, armour does not apply), drowning (CON rounds
then a point a round, straight past the Major Wound threshold), fire (a condition
with a size; armour helps on the round you catch and never after), explosives
(one roll at the centre, shared by band, cover beats armour).

AUTOMATIC FIRE: one roll, the success level says how much of the burst arrived,
and the rounds are spent either way. TWO WEAPONS: -20/-40, or 0/-20 with the new
Ambidextrous talent; the off hand takes the lighter weapon and nothing over 2 kg.

BESTIARY: 21 entries in three families — folklore, horror, and what comes back
from further along — each with characteristics, natural armour, tactics and a
POWER written as a rule with a cost.

SPACE: eight stations, each on a skill somebody already has, so the Physician has
a chair. Range is a band; the helm moves one a round, in or out. Heat is the
pressure and took two rounds of playtest tuning to stop being a countdown.

64 rules, 198 spot-checked formulas, a 12-page rulebook in reading order.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 08:02:21 +01:00
slaguru666andClaude Opus 5 79caf143bd R-226: "Tradecraft first" was too literal
My own R-221 fix overshot. A Containment Officer whose Tradecraft had caught a
stray bonus point sat at 12% against a base of 5 — technically trained — and led
every phase ahead of a Rigging Officer on 53% Navigate. Tradecraft still wins ties
and wins when genuinely better; it no longer wins when plainly worse. The
Containment phase went 6% -> 26% on the same team.

Found playing GLASS LANTERN with the historical gear: salvaged polearms and
slings correctly arrive at 5% because nobody trains them, and maille over
brigandine (AR 8) reduced four utility-knife hits to zero damage each.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 23:11:21 +01:00
slaguru666andClaude Opus 5 e2d0ed5bb2 A player briefing, and the historical range
The generator was already writing the timeline, the cast and the texture and
filing all of it behind the GM screen. New PLAYERS page: a read-aloud opening,
what it is like there, what is known so far, who is there and what they want —
but never what they lie about. Page ownership is now declared by the page rather
than guessed from its index, which would have hidden any second player page.

Historical range: 38 weapons (from 6) and 14 armours (from 2), each with its
period stated, from arming swords and longbows through matchlocks and Brown Bess
to the Lee-Enfield and a trench club. Five new skills to hang them on, including
Firearm (Muzzle-loader), because a muzzle-loader is not a rifle.

275 icons; every weapon maps to a real skill and every item has art. Catalogue is
206 items across four eras.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 23:02:20 +01:00
slaguru666andClaude Opus 5 22a5067153 R-225: the extraction spends the way home, not hit points
Every case carries a "window closes" clock whose stated cost is THE WAY HOME and
whose steps are "the margin narrows / the return is Difficult / the return is
aimed at -30%". Nothing ever read it, so the phase whose job is getting out had
no consequence of its own and the GM had to invent one.

Extraction now advances that clock: failure and fumble narrow the window, a
critical opens it back up, and returnCrossing() applies the penalty alongside the
classification modifier and the Coherence band. 0/-10/-20/-30, Difficult from two
steps.

Also: legs now store their `kind`. The extraction check matched on the terrain
prose and worked only because the string begins "Extraction —".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 22:33:49 +01:00
slaguru666andClaude Opus 5 2d0f70329e Play IRON MARGIN: closed socially, no casualties
Four phases, no weapon drawn. The arrangement with the quiet neighbours (standing
0 -> 2) is the win condition on this case. Nobody lost a hit point. A fumbled
Transposition on 99 cost 3 Coherence and delivered an Art, which is the only way
one ever arrives.

Together with LOW VERGE this brackets the death rules honestly: they bite when
the fiction has already gone badly, not by default.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 22:28:23 +01:00
slaguru666andClaude Opus 5 5c114601a9 R-224: a body at zero absorbed damage for free
Hit points clamp at zero, so further damage to somebody already there changed
nothing — and a STABILISED agent absorbed it forever, because the count was held
and there was nothing else left to move. You could empty a magazine into someone
bleeding out and the system would not notice.

Damage at zero now breaks the stabilisation and costs a round of the count, and
hitLocationRoll calls died() when that meets the limit.

Found by playing LOW VERGE until it killed somebody: two agents who were
medically stable died in the water on a failed tidal extraction.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 22:24:55 +01:00
slaguru666andClaude Opus 5 89ce557355 Death at zero, and a case brief that answers the useful questions
R-223: nothing happened at 0 hit points. An agent was marked down and lay there
forever; the only mention of death in the system was flavour text on a destroyed
head. Zero now starts a clock whose length is the agent's own Major Wound
threshold, ticked from the same hook that charges blood loss. First Aid or
Medicine stabilises and stops the count; healing above zero clears it; heal()
refuses the dead. On death, Coherence decides what the record says — from a
proper death in service down to not being recorded as dead at all.

Case generator: four phases instead of five (the arc drew two interchangeable
middles that read as padding). The brief now leads with Where / When /
Classification / Phases, states the opposition in full, and has a "How you get
back" section. place and duration were generated and never printed. The same
facts are on the case file itself. 300 seeds checked for object leaks; one found
and fixed (group taboo/desire are objects with .text).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 22:13:21 +01:00
slaguru666andClaude Opus 5 a360d77b83 Play SHORT ORCHARD on the retuned ramp
Phases read 41/36/31 before the fumble; the fight with the rival desk cost two
agents; the last two phases resolved at 11% and 1% and the card says why —
Wounded: -20%. The wound pipeline reaches case phases, which is correct and now
legible. Closed at Containment 6, Resources 3, Clearance 5.

Confirms R-222: every agent finished with experience ticks from phase and combat
work, where before the fix a case produced none.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 21:17:32 +01:00
slaguru666andClaude Opus 5 1b44fccb79 Retune the case ramp, and let leading a phase earn experience
The ramp made every phase after the first Difficult (halving the lead's skill) and
stacked a cumulative -5% on top. Separated in phaseRampFor() in rules.mjs:
difficulty belongs to the phase (only Containment is Difficult, and it does not
also ramp), the modifier is attrition (-5 a phase, capped at -15).

  lead 55%   was 55 -> 22 -> 17 -> 12 -> 7      now 55 -> 50 -> 45 -> 27 -> 40

Over 20,000 simulated cases with destitution modelled, phases passed roughly
double and destitution incidence roughly halves.

R-222: resolveLegDialog passed no skillFamilyId, so the choke point could not
resolve the skill item and leading a phase never earned a tick — Tradecraft, the
skill the job most uses, could never improve.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 21:12:04 +01:00
slaguru666andClaude Opus 5 1a0bdbd2df R-221: the phase-lead fallback could never fire
bestIn("tradecraft") ?? bestIn("navigate") never reached Navigate, because every
character carries every skill and skillRating() returns the printed base rather
than null — so the first lookup always found somebody. A team of postings that
train Navigate and not Tradecraft was led by whoever had the highest UNTRAINED
Tradecraft, which is 5%, putting phase three at 1%.

TRAINED now means above the printed base. Measured on a Pathology / Overwatch /
Warden / Materials team: lead 5% -> 34%.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 20:44:03 +01:00
slaguru666andClaude Opus 5 cc23fdb7bd Rulebook and compendium refresh
Audited every exported rule in rules.mjs against what the rulebook says and closed
the gaps:

- Dodge starts at DEX x 2 — newly evaluated, and stated nowhere until now
- Encumbrance: free carry, and which skill categories it actually penalises
- Bleeding rates and what stops each kind
- The merge ladder for Borrowed Authority, as a table
- A new page listing all 25 postings, generated from ROLES

The rulebook is now 9 pages and every one is generated from the code it documents.
All packs, 231 icons and the dice textures rebuilt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 20:31:01 +01:00
slaguru666andClaude Opus 5 1734612c06 v0.7.0 — vehicles, Borrowed Authority, and a door for the case generator
Since 0.6.1:

- VEHICLES as their own Item type: crew, seats, cargo, hull, armour, range,
  terrain and the skill that works them, with speed as a band. 14 of them, from
  the pool car and the Custodian van to a sealed crawler and the carriage that is
  already parked outside wherever you were going to go.
- STORES roughly doubled to 118 gear items across four eras — standing issue and
  paperwork, transport stores, and the forward stores Registry will not hand a
  probationary officer. Catalogue now 175 items, 231 icons.
- Agents leave creation properly equipped: standing issue, the posting's kit,
  what seniority adds, and one personal effect that is theirs and not the
  department's.
- All 25 postings now describe themselves in the creation dialog.
- BORROWED AUTHORITY, the access subsystem. No hacking skill and nothing to break
  into: access is a named credential with a scope, a Trust that erodes, and red
  flags describing how its real owner behaves. Inside scope there is no roll. Two
  tiers beyond is impossible at any skill. Coherence widens a record, and pushing
  one past what its Trust will carry merges your file with theirs.
- Defences graded by level, and damage now rolls at the level a blow landed at.
- Dodge's DEX x 2 base is finally evaluated; it read 0% for most postings.
- Brawl is a fallback rather than a peer of the weapon in hand.
- check-lang guard: one key that was both a value and a branch silently
  un-localised the entire system.
- The case generator is reachable from the Actor Directory, and no longer puts
  every character in the world on a new case.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 20:23:52 +01:00
261 changed files with 12417 additions and 831 deletions
+28 -9
View File
@@ -58,14 +58,20 @@ changing underneath a running server.
## What is in the box
<!-- box:start -->
| | |
|---|---|
| **Roles** | 25 postings, each with a key characteristic, trained skills, talents and its own kit |
| **Catalogue** | 175 items — 118 gear, 30 weapons, 13 armour, 14 vehicles |
| **Postings** | 25, each with a key characteristic, trained skills, talents and its own kit |
| **Trades** | 10 ordinary jobs the department recruits from, plus induction |
| **Catalogue** | 236 items — 123 gear, 62 weapons, 32 armour, 19 vehicles |
| **Skills / talents** | 59 skills, 19 talents |
| **Bestiary** | 21 statblocks across folklore, horror and the far side |
| **Eras** | modern, antique, future, anomalous — the agency is old and never abolishes anything |
| **Icons** | 231, all generated from `tools/icons.mjs`; no external art |
| **Compendia** | pregens, NPCs, skills, weapons, armour, gear, vehicles, powers, tables, rules, a starter case |
| **Rules journal** | 8 pages, generated from `rules.mjs` so the book cannot drift from the code |
| **Icons** | 292, all generated from `tools/icons.mjs`; no external art |
| **Starter scenario** | **BLACK PLATFORM**, a six-player action starter, importable as a single Adventure |
| **Compendia** | pregens, NPCs, skills, weapons, armour, gear, vehicles, powers, tables, rules, the starter |
| **Rules journal** | 12 pages, generated from `rules.mjs` so the book cannot drift from the code |
<!-- box:end -->
---
@@ -92,6 +98,16 @@ Only a critical stops a critical.
**Access is a record.** There is no hacking skill and nothing to break into — see
below.
**A weapon's fire mode is a decision.** Slow weapons shoot better and then make you
work; fast ones offer a second shot at the cost of both; rapid ones fire bursts; beams
can be held on the target for damage instead of hits. A weapon that cannot fire a
burst cannot be made to.
**Sights and lamps apply themselves.** A sight is graded by range band — a telescopic
sight is a penalty inside ten metres — and a carried lamp buys the dark back to dim,
never to daylight, and tells everyone where you are. Neither is a thing the player
selects: both are facts about what is in the pack.
---
## Borrowed Authority — the access subsystem
@@ -129,7 +145,7 @@ and nothing in this game spends anything to converge them back.
## Repository layout
```
ringbrp.mjs the system: sheets, engine, hooks (~4,900 lines)
ringbrp.mjs the system: sheets, engine, hooks (~5,500 lines)
rules.mjs THE SINGLE AUTHORITY for every rule formula
system.json Foundry manifest
template.json data model for every Actor and Item type
@@ -162,8 +178,11 @@ one set of numbers and played under another; this makes that impossible to ship.
The build runs all three guards before it writes anything:
<!-- guards:start -->
```
check-rules: 40 rules, 12 files scanned, 132 formulas verified
check-kits: 25 roles, 162 catalogue items, every kit key resolves
check-lang: 738 keys, no leaf/branch collisions
check-rules: OK — 87 rules, 21 files scanned, 3 aliases + 41 constant sets checked, 275 formulas verified
check-kits: OK — 25 roles, 10 trades, 218 catalogue items, every kit key resolves, every posting can use what it carries, every loadout distinct
check-lang: OK — en.json, 945 keys, no leaf/branch collisions
check-behaviour: OK — 46 behavioural tests
```
<!-- guards:end -->
+159
View File
@@ -0,0 +1,159 @@
<svg xmlns="http://www.w3.org/2000/svg" width="2800" height="2000" viewBox="0 0 2800 2000">
<!-- CULLAND HALL — ground floor and grounds, for LAST ADMISSION.
Drawn rather than generated: a generator cannot be trusted with a room count,
a door position or a label, and all three are load-bearing here.
2800x2000 at 100px to the square = 28 x 20 squares of 5ft. -->
<defs>
<style>
.rm { fill:#16215f; stroke:#6674d8; stroke-width:6; }
.rm2 { fill:#101a6e; stroke:#6674d8; stroke-width:6; }
.out { fill:#0f1750; stroke:#4d5ac0; stroke-width:4; }
.wall { stroke:#8f9ae6; stroke-width:10; stroke-linecap:square; }
.door { stroke:#f2ea72; stroke-width:11; stroke-linecap:round; }
.lbl { font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-weight:700;
font-size:34px; fill:#f2ea72; letter-spacing:2px; }
.sub { font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;
font-size:24px; fill:#a8b2e3; letter-spacing:1px; }
.num { font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-weight:700;
font-size:44px; fill:#0c125b; }
.ttl { font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-weight:700;
font-size:54px; fill:#ecefee; letter-spacing:5px; }
.key { font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:26px; fill:#ecefee; }
.grid { stroke:#233073; stroke-width:1; }
</style>
</defs>
<rect width="2800" height="2000" fill="#0c125b"/>
<!-- one-square grid, so the Foundry grid lands on the drawn one -->
<g class="grid">
<path d="M100 0V2000M200 0V2000M300 0V2000M400 0V2000M500 0V2000M600 0V2000M700 0V2000M800 0V2000M900 0V2000M1000 0V2000M1100 0V2000M1200 0V2000M1300 0V2000M1400 0V2000M1500 0V2000M1600 0V2000M1700 0V2000M1800 0V2000M1900 0V2000M2000 0V2000M2100 0V2000M2200 0V2000M2300 0V2000M2400 0V2000M2500 0V2000M2600 0V2000M2700 0V2000"/>
<path d="M0 100H2800M0 200H2800M0 300H2800M0 400H2800M0 500H2800M0 600H2800M0 700H2800M0 800H2800M0 900H2800M0 1000H2800M0 1100H2800M0 1200H2800M0 1300H2800M0 1400H2800M0 1500H2800M0 1600H2800M0 1700H2800M0 1800H2800M0 1900H2800"/>
</g>
<text x="120" y="120" class="ttl">CULLAND HALL</text>
<text x="120" y="160" class="sub">GROUND FLOOR · THE CULLAND HAUNTING · LAST ADMISSION 22:00</text>
<!-- ================= the house ================= -->
<rect x="400" y="300" width="2000" height="1200" class="rm2"/>
<!-- 5 · Long Gallery -->
<rect x="700" y="400" width="430" height="300" class="rm"/>
<circle cx="760" cy="450" r="30" fill="#f2ea72"/><text x="746" y="465" class="num">5</text>
<text x="730" y="560" class="lbl" font-size="30">LONG GALLERY</text>
<text x="730" y="598" class="sub" font-size="21">strobe · mirrors · no cast at all</text>
<!-- 6 · Ballroom -->
<rect x="700" y="720" width="430" height="360" class="rm"/>
<circle cx="760" cy="770" r="30" fill="#f2ea72"/><text x="746" y="785" class="num">6</text>
<text x="730" y="880" class="lbl" font-size="30">BALLROOM</text>
<text x="730" y="918" class="sub" font-size="21">lights up · fire exit · "thanks for coming"</text>
<!-- 1 · Entrance Hall -->
<rect x="1150" y="1100" width="500" height="400" class="rm"/>
<circle cx="1190" cy="1140" r="30" fill="#f2ea72"/><text x="1176" y="1155" class="num">1</text>
<text x="1188" y="1235" class="lbl" font-size="30">ENTRANCE HALL</text>
<text x="1188" y="1275" class="sub" font-size="21">the WALL PANEL — four names</text>
<rect x="1188" y="1300" width="200" height="26" fill="#f2ea72"/>
<text x="1188" y="1372" class="sub" font-size="21">ticket desk · head count</text>
<!-- main stairs (Edith) -->
<rect x="1660" y="1140" width="170" height="250" class="rm2"/>
<g stroke="#6674d8" stroke-width="4">
<path d="M1660 1180H1830M1660 1220H1830M1660 1260H1830M1660 1300H1830M1660 1340H1830"/>
</g>
<text x="1663" y="1168" class="sub" font-size="21">MAIN STAIRS</text>
<circle cx="1745" cy="1260" r="26" fill="#ff7a5c"/>
<path d="M1650 1265H1600" class="door"/>
<text x="1870" y="1268" class="sub" fill="#ff7a5c">EDITH CRANE stands here</text>
<!-- 2 · The Ward, east corridor -->
<rect x="1700" y="900" width="700" height="200" class="rm"/>
<circle cx="1740" cy="940" r="30" fill="#f2ea72"/><text x="1726" y="955" class="num">2</text>
<text x="1786" y="1005" class="lbl" font-size="30">THE WARD — EAST CORRIDOR</text>
<text x="1786" y="1045" class="sub" font-size="21">Sister Enderby counts</text>
<rect x="2320" y="905" width="16" height="190" fill="#ff7a5c"/>
<text x="1990" y="1160" class="sub" fill="#ff7a5c" font-size="21">JOSH PARDOE is behind this wall →</text>
<!-- 3 · Nursery -->
<rect x="1900" y="400" width="500" height="420" class="rm"/>
<circle cx="1940" cy="440" r="30" fill="#f2ea72"/><text x="1926" y="455" class="num">3</text>
<text x="1990" y="530" class="lbl">THE NURSERY</text>
<text x="1990" y="570" class="sub">Sammy in the wall · hole at ankle height</text>
<rect x="1905" y="700" width="60" height="24" fill="#f2ea72"/>
<!-- green room -->
<rect x="450" y="400" width="220" height="300" class="rm"/>
<text x="466" y="446" class="lbl" font-size="20">GREEN</text>
<text x="466" y="472" class="lbl" font-size="20">ROOM</text>
<text x="466" y="508" class="sub" font-size="19">call sheet</text>
<text x="466" y="534" class="sub" font-size="19">costumes</text>
<text x="466" y="560" class="sub" font-size="19">SET PLANS</text>
<text x="466" y="586" class="sub" font-size="19">pinned up</text>
<!-- control room -->
<rect x="450" y="720" width="220" height="180" class="rm"/>
<text x="466" y="768" class="lbl" font-size="22">CONTROL</text>
<text x="466" y="802" class="sub" font-size="19">Ferriby · comms</text>
<!-- kitchens -->
<rect x="450" y="920" width="220" height="300" class="rm"/>
<text x="466" y="966" class="lbl" font-size="22">KITCHENS</text>
<text x="466" y="1000" class="sub" font-size="19">Sharrock's way</text>
<text x="466" y="1026" class="sub" font-size="19">out — NOT on</text>
<text x="466" y="1052" class="sub" font-size="19">the fire plan</text>
<!-- yard -->
<rect x="200" y="980" width="230" height="240" class="out"/>
<text x="220" y="1030" class="lbl" font-size="28">YARD</text>
<text x="220" y="1070" class="sub">skip · taped hasp</text>
<!-- doors -->
<g class="door">
<path d="M1370 1500H1450"/> <!-- front door -->
<path d="M1130 1180H1150"/> <!-- hall to ballroom side -->
<path d="M915 1080V1100"/> <!-- ballroom to hall run -->
<path d="M1650 1000H1700"/> <!-- hall to ward -->
<path d="M2150 900V820"/> <!-- ward to nursery -->
<path d="M670 560H700"/> <!-- green room to gallery -->
<path d="M670 800H700"/> <!-- control to ballroom -->
<path d="M430 1070H450"/> <!-- kitchens to yard -->
<path d="M915 700V720"/> <!-- gallery to ballroom -->
</g>
<!-- ================= grounds ================= -->
<rect x="200" y="1560" width="2400" height="380" class="out"/>
<text x="230" y="1610" class="sub">THE LAWN — ninety feet of it</text>
<!-- marquee -->
<rect x="1150" y="1560" width="500" height="230" class="rm"/>
<text x="1200" y="1650" class="lbl" font-size="30">MARQUEE</text>
<text x="1200" y="1690" class="sub">queue · box office · muster point</text>
<!-- glasshouse -->
<rect x="2000" y="1600" width="560" height="300" class="rm"/>
<circle cx="2040" cy="1640" r="30" fill="#f2ea72"/><text x="2026" y="1655" class="num">4</text>
<text x="2090" y="1720" class="lbl">THE GLASSHOUSE</text>
<text x="2090" y="1760" class="sub">Old Marrow · the taped line</text>
<path d="M2000 1830H2560" stroke="#f2ea72" stroke-width="6" stroke-dasharray="18 14"/>
<text x="2090" y="1880" class="sub" fill="#f2ea72">he stops here — and tonight he does not</text>
<!-- car park -->
<rect x="250" y="1700" width="620" height="220" class="out"/>
<text x="280" y="1760" class="lbl" font-size="28">CAR PARK</text>
<text x="280" y="1800" class="sub">the van · the tea urn · blue lights</text>
<!-- Marrow's ground: he will not come indoors -->
<path d="M700 1545H2600" stroke="#ff7a5c" stroke-width="8" stroke-dasharray="26 18"/>
<text x="700" y="1530" class="sub" fill="#ff7a5c">OLD MARROW WILL NOT CROSS THIS LINE — inside is a complete answer</text>
<!-- key -->
<g transform="translate(2420,120)">
<rect x="-20" y="-40" width="360" height="230" fill="#101a6e" stroke="#4d5ac0" stroke-width="4"/>
<text x="0" y="0" class="key" fill="#f2ea72">KEY</text>
<rect x="0" y="30" width="34" height="14" fill="#f2ea72"/><text x="50" y="44" class="key">door / opening</text>
<circle cx="17" cy="85" r="14" fill="#ff7a5c"/><text x="50" y="94" class="key">a body, or a person</text>
<path d="M0 135H34" stroke="#ff7a5c" stroke-width="7" stroke-dasharray="12 8"/>
<text x="50" y="144" class="key">Marrow's limit</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

+1516
View File
File diff suppressed because it is too large Load Diff
+509
View File
@@ -0,0 +1,509 @@
# Prologue — The Custodians: LAST ADMISSION
> *Twelve thousand people paid to be told this house was haunted. It was listening.*
---
## GM ESSENTIALS
- **System:** d100 roll-under. Under a fifth of the skill is a **special**, under a
twentieth a **critical**. 96–99 always fail. 00 fumbles. Everyone has 1% at anything.
- **Mechanics inline:** `[CUS: Skill — what it gets you]`
- **Two hours.** One house. Four names on a wall. Three of them can be hit.
- **No Coherence is lost.** They do not know what they are looking at yet. The word is
not said until the last scene.
- **Safety:** X-card or open door, stated in 30 seconds at seating.
- **Runs with the six:** Pollard, Ashcroft, Braithwaite, Renshaw, Sharrock, Ferriby —
their **"(before)"** sheets, the civilian ones. Works at 4; drop Ashcroft then Ferriby.
---
## Overview
- **Setting:** Culland Hall, four miles outside Nettlefold. The last Saturday in October,
20:40 to about 23:00.
- **Tone:** A cheap scare attraction, and then the real thing standing in the queue with
everybody else.
- **Runtime:** 2 hours. No break.
- **Content warnings:** jump scares and staged violence; a real death in a fire (1963,
off-screen, discussed); a child character who is not a child; one dead body; brief
fighting; strobe and fog effects described.
### Design intent
1. **One building, one truth, one decision.** Deliberately simpler than OPEN DAY: no
fixed timetable to narrate, no unresolved list, and the players can hit things.
2. **The mystery is "which of these is an actor".** That is the whole investigation and
it explains itself the moment they walk in.
3. **A fight is available and never required.** The three can be stopped by hurting them
or by breaking their script. Both work. The script is faster.
4. **The ending is a decision with a price on both sides**, not a die roll.
5. **They finish attached to the department** because they see it work, not because
somebody explains it to them afterwards.
---
## Session Timing
| Section | Time | Cumulative | Checkpoint |
|---|---|---|---|
| Seating + open | ~10 min | 0:10 | everyone knows why they are at the Hall |
| Act One — Last Admission | ~30 min | 0:40 | they have been through the attraction and something was wrong in it |
| Act Two — Who's Still In There | ~45 min | 1:25 | the three are loose, one PC has been hurt or nearly, the fourth name is found |
| Act Three — The Fourth Name | ~25 min | 1:50 | the panel comes down, or it does not |
| Close — Last Admission | ~10 min | 2:00 | the cards are handed out |
**Hard rule: at 1:25, go to Act Three.**
---
## Plot Summary (GM truth — one page, players never see it)
Culland Hall has been empty since 1998. This autumn a company called Blackwick
Attractions leased it for six weeks and turned it into **THE CULLAND HAUNTING** — timed
entry, twelve people every ten minutes, eighteen actors, fog, a soundtrack, and a story
invented in an afternoon by a marketing agency.
The agency invented three ghosts, wrote them a page of backstory each, printed them on
the tickets, the wall panel, the website and the actors' call sheets, and had eighteen
people perform them forty times a night for six weeks to **twelve thousand paying
visitors who agreed to believe them**, briefly, on purpose, as the price of a good time.
**Reality keeps a record of what belongs where.** It is a good record, and it can be made
to get it wrong by something patient and stupid saying the same wrong thing for a very
long time — or by something loud and clever saying it twelve thousand times in six weeks.
Tonight is the last night of the run. The house now contains what the panel says it
contains.
**The three are not ghosts. They are entries.** They have exactly as much inside them as
was written down, which is a page each, and they do the page. They are cold, they are
solid, and they can be hurt.
**And there is a fourth name on the panel.** The agency's copywriter needed a fourth for
the layout and took one off a photograph of a memorial in Nettlefold parish church:
**EDITH CRANE, 1941–1963**. Edith Crane was a real housemaid who died in a real fire in
the east wing in 1963, and nobody wrote her a page, because nobody had to. She has been
named twelve thousand times alongside three inventions, on a poster, for money.
She is not following a script. She wants her name off the wall.
**Tonight**, at about 21:10, an actor named **Josh Pardoe** — who plays the gardener —
did not come out of the east corridor. What came out finished his shift.
### Timeline
| When | What |
|---|---|
| 1963 | Fire in the east wing. Edith Crane, housemaid, 22, dies. |
| 1998 | The Hall closes. |
| September | Blackwick leases it. The panel goes up. |
| Six weeks | Forty performances a night. Twelve thousand visitors. |
| **21:10 tonight** | Josh Pardoe does not come out of the east corridor. |
| **21:40** | The players' timed entry. |
| **~22:00** | The last group of the run goes in. After that the doors are locked and the house is full. |
### Revelations (7, and that is all)
| # | Revelation |
|---|---|
| R1 | Some of the performers are not performing |
| R2 | The three do exactly what their printed backstory says and nothing else |
| R3 | An actor is missing, and the thing in his costume is not him |
| R4 | Breaking the script — panel, tape, call sheets — stops them |
| R5 | There are **four** names on the wall panel and only **three** on the call sheet |
| R6 | Edith Crane was a real person who really died here |
| R7 | Somebody official is already in the building and is not surprised by any of it |
---
## Player Experience
You paid eighteen quid, or you work here, or you are in the cast. It is the last night of
a cheap haunted-house attraction in a big empty hall, with fog and a soundtrack and a
teenager in a nurse's costume who says the same line to every group. Then the nurse says
it in the wrong room, and she says it to you by name, and she is cold to the touch. There
are three of them on the poster and four names on the wall, and one of those names
belonged to somebody who actually died in this building, and she has been listening to
twelve thousand people say it wrong.
---
## The Six, and why they are at Culland Hall
| PC | Why |
|---|---|
| **Kate Renshaw** — actor | **She is in the show.** Third-billed. She plays Sister Enderby, forty times a night, six weeks. She knows every line of the script that is now walking about. |
| **Danny Sharrock** — site foreman | He built the sets. He is here to start striking them at eleven, because the lease ends Sunday. |
| **Colin Ferriby** — infrastructure engineer | He wired the show — fog, lights, sound, the radios. He is in the control room with a laptop and a headset. |
| **Gareth Pollard** — custody sergeant | Off duty, on the door as paid security, because the money is good and it is one weekend. |
| **Neil Braithwaite** — histopathologist | Dragged along by colleagues who thought it would be funny. It is not funny. |
| **Dominic Ashcroft** — research physicist | Came with a group from the university to laugh at it, and has been quietly unsettled since the car park. |
**Nothing essential lives on one PC.** Renshaw's script knowledge, Ferriby's control room
and Sharrock's set plans each shortcut a different part of the middle. Any one of them is
enough; none is required.
---
## Act One — Last Admission *(~30 minutes)*
> **Goal:** let them enjoy a cheap haunted house for ten minutes, then put one wrong thing
> in it and let them argue about whether it was wrong.
### Opening (read aloud)
> A big cold house with a marquee bolted to the front of it, a smoke machine going in the
> porch, and a queue of about forty people in coats. Somebody's speaker is playing the
> same eleven seconds of organ over and over. A girl in a nurse's costume is taking
> selfies with a hen party.
>
> The board by the door says **LAST ADMISSION 22:00**.
### The attraction — six rooms, ten minutes
Run it fast and lightly. This is meant to be fun. One or two lines a room.
| # | Room | What the show does |
|---|---|---|
| 1 | **The Entrance Hall** | A recorded voice welcomes you and names the three. Fog to knee height. |
| 2 | **The Ward** *(east corridor)* | Sister Enderby walks the corridor counting beds. She has one line. **Renshaw's room.** |
| 3 | **The Nursery** | Sammy, the boy in the wall, laughs and moves behind the panelling. A hand comes out of a hole at ankle height. |
| 4 | **The Glasshouse** | Old Marrow with the shears. He chases you eleven feet and stops at a taped line on the floor. |
| 5 | **The Long Gallery** | Strobe, screaming, a mirror gag. Nothing in it at all. |
| 6 | **The Ballroom** | Everything goes dark and quiet, then the lights come up on the fire exit and a girl thanks you for coming. |
### The one wrong thing
Pick **one** and make it the only strange beat in Act One:
- **Sister Enderby does her line in room 5.** She is not scheduled in room 5. Room 5 has
no cast. *(If Renshaw is dealt, use this one — she knows the running order.)*
- **Old Marrow does not stop at the tape.** He follows the group to the door of the next
room, which is not in the routine, and stands there.
- **Sammy's hand is warm and holds on**, and the hole at ankle height is nine inches
across and there is no room behind that wall.
Let the table talk themselves out of it. That is the correct outcome for Act One. Somebody
will say *"that'll be the actor messing about"*, and they will be right, once.
### Clue trail — Act One
| # | Clue | Where | How | Type |
|---|---|---|---|---|
| 1 | The wall panel by the ticket desk lists **four** names | Entrance hall | **Automatic** to anyone who reads it — it is a poster, it is at eye height | Essential |
| 2 | The call sheet on the green-room door lists **three** | Green room / clipboard | **Automatic** to Renshaw or anyone who goes backstage | Essential |
| 3 | Old Marrow's costume has no radio pack | Anywhere he appears | `[CUS: Spot]` — every performer wears one and Ferriby issued them | Optional |
| 4 | Josh Pardoe has missed two comms checks | Control room | **Automatic** to Ferriby; otherwise the floor manager says it out loud | Essential |
**Fallbacks.** Clue 1: the same four names are on the ticket in their hand. Clue 2: Beata
Nowak is standing at the green-room door shouting for Josh. Clue 4: the floor manager
walks past saying *"has anybody seen Pardoe?"* — she does this every ten minutes until
somebody answers her.
### Pacing note
At 0:40, whatever they have worked out:
> **Fast-track:** the lights on the whole east side go out, the soundtrack keeps playing,
> and Beata Nowak comes through the crowd asking for anyone with first aid.
---
## Act Two — Who's Still In There *(~45 minutes)*
> **Goal:** the show stops, the three do not, and the players find out what a script is
> for. This is where the action lives.
### The situation
The public are being walked out through the marquee — it takes twenty minutes and it is
not orderly. Roughly **thirty people are still inside**: cast in costume, crew, a hen
party who went the wrong way, and three things that are not any of those.
**Josh Pardoe is dead.** He is in the east corridor, behind the false wall, and he has
been for half an hour. He is not marked. **No roll:** nothing killed him that leaves a
sign. Anyone with Medicine or First Aid says cold and cannot say why, and a good roll
does not buy a better answer, because there is not one.
### The three
Each does its printed page and nothing else. Read the page aloud when the players first
get a good look — the page is on the wall, on the ticket and in the programme, so this
is not a secret.
#### Sister Enderby
*"She walked the ward at night and counted the beds, and if the count was wrong she made
it right."*
- **Does:** counts people. Out loud. In a group of six she will say *six*, and then she
will say *five*, and then she will go and make it true.
- **Fight:** cold, strong, ignores pain. **HP 12, armour 0, Brawl 55%, 1d6 damage.** She
does not defend herself. She counts while you hit her.
- **Script break:** she stops the moment the count is right. Put a person back in the
room and she is finished with it. *This is the cheapest kill in the scenario and the
table should be allowed to find it.*
#### Sammy, the boy in the wall
*"He hid where nobody could reach him, and he is still hiding, and he wants someone to
come in and hide with him."*
- **Does:** laughs, moves inside the walls, and takes hold of ankles. He does not hurt
anybody. He pulls, and he is very strong, and the hole is nine inches across.
- **Fight:** you cannot hit him. He is in the wall. **Athletics or Brawl vs STR 17 to get
a leg back**, or somebody else pulls with you for an automatic success. **On a fumble**
they go over on their face and lose whatever was in their hands under the floorboards.
He does not get to keep the leg.
- **Script break:** he is hiding, so he stops when he is *found*. Say his name and open
the panel and he is not there any more.
#### Old Marrow
*"He kept the grounds for forty years and never once came in the house, and he is not
coming in now, but he will see you off it."*
- **Does:** carries the shears, moves at a walk, and will not enter the building. He is
the reason nobody gets to the car park.
- **Fight:** **HP 20, armour 2, shears 1d8+2, Brawl/Melee 60%.** He is the actual fight
in this scenario. He is slow, he never runs, and he is between them and the way out.
Expect about four and a half rounds, and expect somebody to get hurt.
*(Tuned by playing it thirty times — see the playtest note at the foot of this file.)*
- **Script break:** *he will not come in the house.* Going inside is a complete answer
and it costs nothing. Reward it. He waits on the lawn.
### The set-piece — the run to the marquee *(the combat, if they want one)*
Someone has to get thirty people across ninety feet of lawn past Old Marrow.
- **Three ways to run it:** fight him, distract him (he follows anyone off the grass), or
go back inside and out through the kitchens — Sharrock built the sets and knows there
is a door there; the plans are pinned in the green room for anyone else.
- **Rounds:** four or five. He closes at a walk, one attack a round, and he goes for
whoever is furthest from the house. He drops somebody in about one fight in three —
and *dropped* is dropped, not dying.
- **If it goes badly:** he does not pursue anyone indoors and he does not finish anybody
off. He sees them off the grass. That is his whole page.
- **Idle players:** hand them the hen party — six frightened people who need telling what
to do, and who will do it.
### Clue trail — Act Two
| # | Clue | Where | How | Type |
|---|---|---|---|---|
| 5 | Each of the three does exactly what the panel says and nothing else | Anywhere | **Automatic** by the second encounter | Essential |
| 6 | The fourth name has no page — one line, two dates, nothing else | Wall panel | **Automatic** to anyone who goes back and reads it properly | Essential |
| 7 | Josh Pardoe's body is behind the false wall in the east corridor | East corridor | **Automatic** if anyone searches; otherwise Beata finds him at the twenty-minute mark and screams | Essential |
| 8 | EDITH CRANE, 1941–1963 is on a memorial in Nettlefold parish church | Phone, or the local-history board in the entrance hall | `[CUS: Research or Computer Use]`, or automatic to Braithwaite, who has been past that memorial a hundred times | Essential |
| 9 | The 1963 fire was in the east wing, and one person died in it | Local-history board, ticket office | `[CUS: Knowledge]` or asking any local | Optional |
**Fallbacks.** Clue 6: Renshaw says it herself — *"there's only three of us"*. Clue 8:
Mrs Ferrand says it aloud in Act Three if nobody has got there.
### The woman on the stairs
At about 1:10, wherever they are, they see her: a young woman in a housemaid's uniform
of the wrong period for the attraction, standing halfway up the main stairs, doing
nothing at all.
- She is not cold. She is not fast. She does not have a page.
- **She will not speak until she is asked her name.** Then she says it, and she waits.
- Anyone who tries to hurt her will find they cannot make themselves do it. *No roll
resolves this. Say it plainly and move on.*
---
## Act Three — The Fourth Name *(~25 minutes)*
> **Goal:** one decision, priced on both sides. No new information.
### Mrs Ivy Ferrand
*A woman who came in on a nine o'clock ticket, alone, and has not been surprised by
anything since.*
- **Physical:** fifties, a raincoat, a small hard case she has not opened.
- **She has been in the building for two hours.** She is not here to rescue anybody. She
is here to take a statement and decide what the department does on Monday.
- **What she knows and will say:** what the three are and why. That they will stop.
- **What she will not say:** who she works for. *"I'm not able to tell you that tonight."*
Not *"I don't know"* — she is careful about the difference.
- **Key line:** *"Three of them were made up in an afternoon. One of them was a girl of
twenty-two who worked here. Which of those do you think is angry?"*
### The situation
Everyone who is getting out is out. Vic Tunnicliffe wants his last night finished and his
set struck. The panel is screwed to the wall of the entrance hall, four names, and Edith
Crane is standing on the stairs where anyone can see her.
**Taking the name down ends it.** Ferrand says so. She also says the department will do
it on Monday whatever happens tonight, and that Monday is two days away, and that there
are two more performances between now and then, and that the doors open at seven.
### The choices
| Choice | Cost |
|---|---|
| **Take the panel down tonight** | The run ends. Blackwick's licence and bond go with it, Tunnicliffe is finished, forty people including three PCs lose the last of the money, and the town's one profitable weekend of the year is cancelled. The three stop within the hour. Edith goes. |
| **Leave it until Monday** | Two more performances, twelve people every ten minutes, with the three still running and Josh Pardoe still dead. Ferrand will not stop them; she will write it down. |
| **Change the name** *(the table will invent this)* | Unscrew the letters, make the fourth name a fiction like the other three. **It works.** It also does to Edith exactly what was done to her in September, on purpose this time, by people who knew. Ferrand allows it and writes down who suggested it. |
| **Ask her what she wants** | Nobody has. She wants her name off a poster and somebody to write down that she was here. That is all, and it takes four minutes, and it is the best ending. |
### If Tunnicliffe fights for it
He will. He is not a villain — he is a man with a bank loan, forty staff and one dead
employee, and he is holding a screwdriver he has not put down since ten o'clock. He
does not threaten anybody. He asks them not to. `[CUS: Persuade, Insight or Status —
he can be talked round, and the roll is a real one]`
### If someone gets violent
Nothing in the last twenty minutes needs hitting. If they hit Tunnicliffe, Pollard is
paid security and off-duty police and this becomes his scene, and Ferrand watches to see
what he does. She is not judging. She is recruiting.
---
## Close — Last Admission *(~10 minutes)*
Whatever they chose, the ending is the same shape: blue lights in the car park, a
statement each, and a woman in a raincoat going round the six of them one at a time with
a card in her hand.
### Read aloud
> The marquee is coming down at four in the morning because nobody can face leaving it up.
> Somebody has put a tea urn on the tailgate of a van. The board by the door still says
> **LAST ADMISSION 22:00** and somebody has turned it round to face the wall.
>
> The woman in the raincoat has spoken to each of you separately and said nearly the same
> thing to all of you, which is that you wrote down or said out loud one true thing
> tonight that nobody wanted to hear, and that this is rarer than you would think.
>
> There is a card in your coat pocket with a telephone number on it and no name.
### What she says to each
One line each, spoken privately, in front of the table. **Keep it to one line.**
| PC | Her line |
|---|---|
| **Kate Renshaw** | *"You knew it was wrong because you knew the running order. Nobody else in that building was listening that closely to a script they were sick of."* |
| **Danny Sharrock** | *"You got thirty people out through a door that is not on the fire plan. Somebody has to know where the doors are."* |
| **Colin Ferriby** | *"Two missed comms checks and you went to look. Everybody else assumed he'd gone for a cigarette."* |
| **Gareth Pollard** | *"You wrote the times down. On the back of a ticket, in the dark, while it was happening."* |
| **Neil Braithwaite** | *"You said cold, and then you said you didn't know why, and you did not fill the gap in with something that sounded better."* |
| **Dominic Ashcroft** | *"You were frightened from the car park onwards and you went in anyway and you kept saying so. Do you know how useful that is?"* |
### The one true thing
If there is time — and there usually is, because this ends early — she says it:
> *"Reality keeps a record of what belongs where. It is a very good record. It can be made
> to get it wrong by anything patient enough — or by twelve thousand people agreeing to be
> lied to, for six weeks, for eighteen pounds each. That is all a haunting is. Somebody
> wrote it down too many times."*
**Then the word Coherence, once, and then the card.**
---
## NPC Roster (GM quick sheet)
| NPC | Essence | Wants | Key line |
|---|---|---|---|
| **Beata Nowak** | Floor manager holding the whole night together on a radio | Josh found, the house cleared, and to be sick afterwards | *"Has anybody seen Pardoe?"* |
| **Vic Tunnicliffe** | Operator with a bank loan and a dead employee | Two more performances | *"Monday. Just give me Monday."* |
| **Josh Pardoe** | The gardener. Twenty-four. Dead since 21:10 | — | — |
| **Sister Enderby** | An invention that counts | the count to be right | *"…five."* |
| **Sammy** | An invention that hides | somebody to hide with | *(laughing, in the wall)* |
| **Old Marrow** | An invention that will not come indoors | you, off his grass | *(nothing; he walks)* |
| **Edith Crane** | A real housemaid, 22, dead here in 1963 | her name off a poster | *"Edith Crane."* |
| **Mrs Ivy Ferrand** | Recruiting officer on a nine o'clock ticket | to see what you do | *"Which of those do you think is angry?"* |
---
## Artwork
**Showing them at the table.** The adventure ships a third journal,
**LAST ADMISSION — Show the players**, holding these as eight image pages at player
visibility. Right-click a page and *Show Players*: the table gets the picture and
nothing else — no heading, no caption, no label naming what they are looking at. The
page names are for the GM's sidebar and the players never see them.
**Style line:** flat editorial vector, deep navy and pale yellow with warm off-white,
1970s British public-information poster, `--style raw --ar 3:2 --v 6`.
| ID | Description |
|---|---|
| LA-ART-01 | Culland Hall at night with the marquee and the queue |
| ~~LA-ART-02~~ | *Cut.* Two generations both produced three frames instead of four, and a picture that contradicts the count is worse than none. The panel is a handout — show it, do not describe it. |
| LA-ART-03 | The east corridor: fog, hospital beds, red light |
| LA-ART-04 | The nursery: torn panelling and a hole at ankle height |
| LA-ART-05 | The glasshouse: a figure with shears among dead vines |
| LA-ART-06 | The green room: mirrors, costumes, a clipboard on the door — used on the Act One page, where the call sheet is |
| LA-ART-07 | Edith Crane on the stairs |
| LA-ART-08 | The car park afterwards: a van, a tea urn, blue lights |
| LA-MAP-01 | **Culland Hall floor plan** — drawn, not generated (`art/maps/culland-hall.svg`), and shipped as a playable **Scene** in the adventure: 2800×2000 at 100px to the square, 5ft grid, no walls (add them if you want line-of-sight). |
---
## GM Notes
- **Act One is a comedy.** Play the attraction as cheap and likeable and let the players
take the mickey out of it. The scenario only works if they were having a nice time.
- **The three are not clever.** Never have them plan, hide their nature, or exploit
anything. They have a page each. Anything not on the page, they do not do.
- **Say the page out loud.** It is a poster in the entrance hall. Withholding it makes the
scenario a puzzle; giving it away makes it a game about scripts, which is the good one.
- **Let them break the script.** Putting a person back in the room, saying Sammy's name,
or simply going indoors are all complete answers, and a table that finds one should get
it for free and feel clever.
- **Edith is not a monster.** She never attacks, never speaks first, and cannot be hurt.
She is the only thing in the building that is owed something.
- **Cut first:** the Long Gallery, then the glasshouse fight if the clock has gone —
Marrow can simply be standing between them and the cars, and going round him is a
conversation.
- **If they solve it in ninety minutes**, run the close long: let each of them have their
private line as a proper scene.
---
## Which prologue to run
**LAST ADMISSION** is the two-hour opener: one house, one decision, a fight available.
**OPEN DAY** is the longer, quieter one — 2h15, no combat, a fixed timetable — and it is
built for the ten-agent roster rather than these six. Run either. They are alternative
first nights and nothing in the campaign depends on which.
---
## Playtest note — one run, six characters, 12 August
Played through in Foundry with the six on their civilian sheets. Five things came out
of it, all now fixed:
1. **Pollard and Agyeman were armed.** The `police` trade kit contains a revolver and a
stab vest — right for a serving officer, wrong for a British civilian, and it ended
the only fight in one round. The civilian build now strips firearms and body armour
from trade kit, and the build throws if one gets through. Finch keeps her knife.
2. **Old Marrow's shears were a utility knife.** The page said 1d8+1; the actor in the
pack carried 1d4+2. He now carries a billhook — a real garden tool in the catalogue —
and the page says 1d8+2, which is what a billhook does.
3. **He was too soft.** At the original numbers he died in 2.4 rounds and in 6 runs of
20 he was dead before he swung. At **HP 20, armour 2** he lasts about four and a half
rounds, somebody is hurt in 28 runs of 30, and somebody goes down in 9.
4. **Two stat lines disagreed with the sheets** (Marrow 16 vs 15, Enderby 13 vs 12).
Both corrected, and `check-behaviour` now parses this document's fight line and
compares it to the actor the build generates.
5. **Two rolls had no failure written.** The body (now marked *no roll*) and Sammy's
ankle pull (now has a fumble result).
The run itself: Act One's optional Spot clues both missed and cost nothing, because the
essentials are automatic. Ashcroft found Edith Crane on Research. Braithwaite failed the
body twice, which no longer matters. Renshaw broke Sister Enderby by walking the sixth
person back into the room without a die being rolled. Braithwaite fumbled the ankle pull
on a 100 and Sharrock hauled him out. Marrow took four rounds and put Pollard on eight
hit points. Renshaw talked Tunnicliffe down on a Persuade success. Panel down at 23:40.
+857
View File
@@ -0,0 +1,857 @@
# Prologue — The Custodians: OPEN DAY
> *For eleven minutes the building was on a different street. You were inside it.*
---
## GM ESSENTIALS (one glance, any GM)
- **System crash-course:** d100 roll-under a percentage skill. Under a fifth of the
skill is a **special**, under a twentieth a **critical**. 96–99 always fail. 00 is
always a fumble. Everyone has a 1% chance at anything.
- **Mechanics inline:** `[CUS: Skill — what it gets you]`
- **No Coherence is lost in this scenario.** See *The anchoring rule* below. Do not
hand out drift, do not roll for it, do not mention the word until the Briefing.
- **No combat.** There is no antagonist. Nothing in the building wants anything.
- **Hard rule: at 1:35 on the clock, go to Act Three regardless.**
- **Safety:** state the tool in use (X-card / open door) during seating — 30 seconds,
no ceremony. This scenario contains a missing elderly man and no body.
---
## Overview
- **Event:** Session Zero / prologue. Run before BLACK PLATFORM or any first case.
- **System:** The Custodians (BRP d100)
- **Setting:** Marchbank Exchange, Sail Street, Nettlefold — a middling English town.
**Saturday 27 September**, 14:00–16:30. The year is whichever one you need.
- **Tone:** Municipal, warm, then wrong. Bunting and a tea urn, and then the street
outside is the wrong street.
- **Maximum runtime:** 2 hours 15 minutes of play. No break — it is short enough.
- **Players:** 4–6, drawn from the ten **"(before)" pregens** in the *Custodians:
Pregens* compendium. Runs at 3. Every role below is written for all ten, so any
selection works; nothing essential lives on one PC.
- **Content warnings:** an elderly man goes missing and is never found; claustrophobia
and enclosed machine rooms; a child's distress, briefly, off-screen; workplace
injury (non-graphic); institutional pressure to sign something.
- **Art style:** the module's own — flat editorial vector, deep navy and pale yellow,
1970s British public-information poster. **Not** the ink-sketch house style; these
assets sit inside the Foundry module beside the portraits and must match them.
### Design intent (read this first)
1. **This is a prologue, not a slot.** 2h15 against the house 3h30 on purpose: it
exists so that the first real case lands, and a prologue that outstays its welcome
does the opposite.
2. **There is no mystery to solve.** The players are not investigating; they are
*present*. The gameplay is what each character does with eleven minutes of
impossible, and what they write down afterwards.
3. **Recruitment is earned by record-keeping, not heroics.** Every "before" pregen's
biography already ends with a line beginning *How they found her/him*. Those ten
lines are ten views of this one afternoon. Act Three is the department reading
them back.
4. **The ending is a signature, and a refusal is a real ending.** The Epilogue honours
"not yet" — it just gets there by a longer road.
5. **What this is not:** a fight, a puzzle box, or a scenario with a villain. Nothing
in Marchbank Exchange wants anything. That is the horror.
---
## Session Timing Guide
| Section | Duration | Cumulative | GM Checkpoint |
|---|---|---|---|
| Slot Zero + Introduction | ~15 min | 0:15 | Every player has said, in character, why they are at this building today |
| Act One — The Open Day | ~35 min | 0:50 | All PCs have met at least two others; the demonstration has been announced |
| Act Two — Eleven Minutes | ~45 min | 1:35 | They are back on Sail Street; each PC holds one record that disagrees with the others |
| Act Three — The Approach | ~25 min | 2:00 | Every PC has been approached alone and has answered |
| Epilogue — The Briefing | ~15 min | 2:15 | The department has said the one true thing out loud |
Durations are **ceilings, not fills**. **Hard rule:** at 1:35, go to Act Three.
---
## Plot Summary (GM truth — players never see this page)
Marchbank Exchange was built in 1938 as a municipal automatic telephone exchange. Its
entrance faced **Cattle Lane**. In 1971 the borough drove **Sail Street** through the
block, demolished Cattle Lane end to end, and re-addressed the Exchange to its side
elevation. The Post Office never fully re-addressed the *equipment*. For twenty-three
years the selector racks in the frame room went on stating, ten thousand times a night,
in the only language a machine has, that this building stood on Cattle Lane.
Reality keeps a record of what belongs where. A machine that argues with that record
ten thousand times a night, for twenty-three years, is not a haunting. It is a
**submission**. When the last live circuit was pulled in 1994 the argument did not
resolve. It went quiet.
The building was sold for conversion to flats. The civic society got one open day out
of the developer before the strip-out, on the last Saturday in September. Bunting, a
tea urn, a head-count clipboard, and a retired exchange engineer called **Douglas
Kearsley** who had waited thirty years to show somebody how the machine worked.
At **15:41** Kearsley put power to a restored demonstration panel and placed a call
across four racks so the public could hear it connect. It connected. It also
re-energised a selector that still held the old routing.
For **eleven minutes**, the record was contested. The Exchange's address reverted.
Everyone inside was inside a building on Cattle Lane, in a year that is not this one.
Everyone outside saw a door where a door had always been, and did not look twice.
At **15:52** the demonstration fuse failed and the record snapped back.
**Three things did not come back right.**
1. **The head count is one over.** Twenty-seven signed in. Twenty-eight signed out.
Every name on the out-sheet is also on the in-sheet. The department calls the
difference **the Eleventh**, and does not have a better answer than that.
2. **Douglas Kearsley did not come out.** He walked to the far end of the frame room
at 15:49 to pull the fuse himself, and he pulled it, because the fuse is out. He is
on the Cattle Lane side. He has been there for eleven minutes ever since.
3. **The records disagree.** An outside-broadcast tape, a microwave relay log, a
contaminated-land sample sheet, a measured survey, a set of clinical notes, a
pocket notebook, a witness statement. Seven documents describing the same eleven
minutes. Each internally consistent. No two consistent with each other.
**Why anybody came.** The department maintains a standing watch on address
discrepancies — this is most of what Registry does, and it is duller than it sounds.
Between 15:41 and 15:52 the historical address database was queried nine times from a
trunk decommissioned in 1994. The flag was raised on the Monday. A recruiting
officer was in Nettlefold by the Thursday.
**Why these people.** Not because they saw it. Ninety people saw something. Because
they **wrote it down accurately, kept the record when it was inconvenient, and raised
it a second time when nobody answered the first**. That is the entire recruiting
criterion, and the department has never found a better one.
### Timeline (GM reference)
| When | Event |
|---|---|
| 1938 | Marchbank Exchange opens. Address: 4 Cattle Lane. |
| 1971 | Cattle Lane demolished; Sail Street cut through. Building re-addressed. Equipment is not. |
| 1994 | Last live circuit pulled. The argument stops without resolving. |
| Last spring | Sold for conversion. Strip-out scheduled for the Monday after the open day. |
| 14:00 | Open day begins. Head count starts at the trestle table. |
| 15:30 | Last tour of the day goes down to the frame room. |
| **15:41** | **Kearsley powers the demonstration panel. The eleven minutes begin.** |
| **15:52** | **The fuse fails. The record snaps back. Kearsley is not among them.** |
| 16:10 | Police attend. Agyeman's division. A missing-person report with no crime number. |
| Monday | Registry's address flag is raised. |
| Thursday | Mrs Ferrand arrives in Nettlefold. |
| +4 to +11 weeks | The approaches (Act Three), one PC at a time. |
| +12 weeks | The briefing (Epilogue). |
### The anchoring rule (mechanical, and the point of the scenario)
**Nobody loses Coherence in this scenario.** Not a point.
Coherence is not damage from seeing something. It is what it costs to *keep looking
once you know what you are looking at*. These ten do not know. They have the perfect
armour of the uninitiated: they think they are having a strange afternoon.
Say none of this to the players. It pays off the first time they lose a point on a
real case, and it pays off best if the Briefing is the first time they hear the word.
### Revelations (GM checklist — abstracted from where they are found)
| # | Revelation | Expected by | Delivered? |
|---|---|---|---|
| R1 | The building used to face a different street | Act One | |
| R2 | The machine still says so | Act One | |
| R3 | The eleven minutes are happening *to* the building, not to them | Act Two | |
| R4 | Outside is not outside | Act Two | |
| R5 | Someone is walking the aisles who is not on the tour | Act Two | |
| R6 | The head count is one over | Act Two | |
| R7 | Kearsley chose to go and pull the fuse | Act Two | |
| R8 | Their own record does not match anyone else's | Act Two / Three | |
| R9 | Somebody official has read their record — all of it, including the part they only wrote for themselves | Act Three | |
| R10 | The organisation is small, statutory, and appallingly ordinary | Act Three | |
| R11 | Kearsley is not going to be recovered | Epilogue | |
| R12 | Reality keeps a record of what belongs where, and it can be made to get it wrong | Epilogue | |
Anything undelivered by the end of Act Two folds into the Briefing, except R5 and R6,
which are **better left undelivered** if the table did not reach them. The Eleventh is
designed ambiguity. Do not resolve it.
---
## Player Experience
You went to an open day. You had a professional reason — a survey, a sample, a live
link, a shift, a delegation to interpret for, a door nobody was watching — and you
expected to be home by five. At twenty to four an old man in a good jacket switched on
a telephone exchange to show you how it used to work, and for eleven minutes the front
door opened onto a street that was pulled down before you were born. Nothing attacked
you. Nothing spoke to you. You went outside, eventually, onto the right street, and
the head count was one over and the old man was not there. Then you did the thing you
always do: you wrote down exactly what you saw, and you did not cross any of it out.
Some weeks later a woman with a small case sits down opposite you in a place where you
work, orders a tea she does not drink, and quotes your own notes back to you.
---
## The Countdown — The Eleven Minutes
This replaces the antagonist clock. There is no antagonist: **the world moves on a
timetable and nothing the players do alters it.** Advance one row roughly every three
to four minutes of real time, faster if the table is quiet, and *always* advance when
someone tries to stop it.
Read the minute aloud. Say the time. That is the whole engine of Act Two.
| Time | What happens (say the time aloud) |
|---|---|
| **15:41** | The panel takes power. Every light in the building goes one shade warmer. Every watch, phone and wall clock in the frame room reads **15:41**, including the ones that were wrong. |
| **15:42** | The traffic noise from Sail Street stops. It is replaced by different noise: a diesel engine idling, a handcart, and — far off and quite clear — cattle. |
| **15:43** | The front door is open. Beyond it is a narrow lane of soot-black brick with a cooper's yard on the corner. Two members of the public step out onto it, pleasantly, as if the tour continues. |
| **15:44** | The frame room has one more rack than the survey says it has. It is at the far end, and it is running. |
| **15:45** | A telephone rings in the operators' room. It is not connected to anything. It rings until answered — and whoever answers is live on air, because the OB desk has patched it through. There is a frightened person on the line who is calling from inside this building. |
| **15:46** | A well-dressed man asks a PC, courteously and in a language of the GM's choosing, for directions to **11 Cattle Lane**. He is patient. He will wait for an answer. |
| **15:47** | A man in a donkey jacket walks the length of the frame aisle with a tag list, checking racks. He does not see anyone. He is not frightening. He is working. |
| **15:48** | Councillor Odame takes a head count in the hall, because that is what you do. She counts twice. She gets twenty-eight both times. |
| **15:49** | Kearsley says, to nobody in particular, *"Well, that's not right, is it,"* and walks to the far end of the frame room to pull the fuse. |
| **15:50** | The lights fail from the far end backwards, rack by rack, towards the door. Two members of the public go down hard on the basement stairs in the dark. Somebody has to carry them. |
| **15:51** | A child on the tour asks, clearly, in the dark: *"Where's the man gone?"* One of the two men on the stairs has a forearm that is already knitted crooked, over an old break, from a fall he had six minutes ago. |
| **15:52** | Daylight. Sail Street. Buses. Twenty-eight people on the pavement, and Douglas Kearsley is not one of them. |
**If the players try to stop it:** they can. Any of it. Pull the fuse at 15:44, drag
Kearsley back at 15:49, hold the front door shut at 15:43. **It does not change the
timetable.** The lights still fail from the far end backwards. Kearsley is still not
on the pavement at 15:52. Let them succeed at the action and fail at the outcome, and
do not explain why — the Briefing does that, twelve weeks later, in one sentence.
---
## Pre-Game Handouts
| ID | Description | Format | When Given |
|---|---|---|---|
| OD-H01-A | Open day leaflet, Nettlefold Civic Society | A5, two colours | Introduction |
| OD-H02-A | Head-count sheet — IN 27 / OUT 28 | Clipboard photocopy | Act Two, 15:48 or after |
| OD-H03-A | OB transcript, eleven minutes | Typed, timecoded | Act Two end (Rahimi, or any PC) |
| OD-H04-A | Relay log — MARCHBANK/CTL: **forty minutes of traffic inside an eleven-minute window** | Line printer output | Act Two end (Sandoval, or any PC) |
| OD-H05-A | Measured survey, north wall, three figures | Drawing extract | Act Two end (Kowalczyk, or any PC) |
| OD-H06-A | The department's letter | One page, no letterhead | Act Three |
| OD-H07-A | Form CS/1 — the Act, with signature block | One page | Epilogue |
Every "or any PC" above means exactly that: if the table did not pick that pregen, the
document exists anyway and reaches them another way. **Nothing essential lives on one
character.**
---
## Introduction — Trestle Table *(~15 minutes, including Slot Zero)*
### Slot Zero (before the fiction)
1. Seating + safety line (30 seconds).
2. Pitch each "(before)" pregen in one spoken line — the job, and the one odd thing:
*"Court interpreter. Says other people's worst sentences in the first person all
day, and remembers every one."*
3. Players choose, or the GM deals, in ≤5 minutes.
4. Open at the table on the pavement. Everyone signs in. **Make them say their name
aloud as they write it.** That is the head count, and it is a clue nobody notices.
### Opening (read aloud or paraphrase)
> Bunting, a tea urn, and a folding table on the pavement with a clipboard on it. The
> building behind it is municipal brick, 1938, four storeys of frosted window and one
> good brass door. A woman in a council fleece asks you to print your name, and
> underneath it, the reason for your visit.
>
> Write something. She will read it later, and so will somebody else.
### Player briefing (as bullets)
- Nettlefold. Saturday 27 September. Ten past two.
- **Marchbank Exchange**, Sail Street: a decommissioned telephone exchange, sold for
flats. Strip-out starts Monday.
- The civic society got one open day out of the developer. This is it.
- Tours run every half hour. The last one goes down at half past three.
- Everyone has a reason to be here, and every reason is a working one. Nobody is here
because they are brave.
### Atmosphere notes
- **Sound loop:** the tea urn, the traffic on Sail Street, and under both a mains hum
that you stop noticing and then notice again.
- **Smell:** hot dust, floor polish, and the specific smell of an unheated building in
September.
- **Light:** frosted glass. Everything is the colour of weak tea.
### Why each PC is here (use whichever are dealt)
| PC | Reason they are in the building |
|---|---|
| **Marta Holloway** — interpreter | Booked for a twinning delegation the council invited and then forgot to brief. |
| **Ben Okonkwo** — steel erector | On site since seven, propping the second-floor opening before Monday. |
| **Rey Sandoval** — network field engineer | The OB link needs a clear shot to the mast; the roof is the only place it works. |
| **Arun Bhattacharya** — research chemist | Contaminated-land sampling in the battery room. Lead, cadmium, and forty years of acid. *His chain-of-custody sheet comes back from the lab countersigned by a name that is not on the staff list, and never has been.* |
| **Soraya Rahimi** — radio presenter | Outside broadcast, live at four. Van on the double yellow, cable through the side door. |
| **Dr Chidi Nkemdirim** — A&E registrar | Volunteer first-aid cover. Sitting on a stacking chair by the urn, bored. |
| **Marek Kowalczyk** — structural engineer | Measured survey for the conversion. Has three days of drawings that do not close. |
| **Wren Finch** — between things | The side door has been on the latch since Thursday and there is copper in the frame room. |
| **Joseph Agyeman** — detective sergeant | Off duty, with a grandchild, because the leaflet came through the door. |
| **Prof. Åke Lindqvist** — folklorist | Giving the three o'clock talk: *"Streets That Were: Nettlefold's Lost Lanes."* |
### Hook into Act One
The three o'clock talk, the half-past-three tour, or the job they came to do. Offer
all three. Everyone ends up in the frame room by twenty to four regardless, because
Kearsley invites them personally, and he is very hard to say no to.
---
## ACT ONE — The Open Day *(~35 minutes)*
> **Goal:** Make the building ordinary and likeable, put every PC in the frame room by
> 15:41, and plant two facts: **the building used to face a different street**, and
> **the machine still says so.**
### Summary
Tea, bunting, and six small competent jobs happening in parallel. Lindqvist's talk
names Cattle Lane. Kearsley shows anyone who will look how a call used to be
connected, and mentions — as a joke, as an old man's grievance — that the racks were
never re-addressed. Nothing is wrong. That is the entire act.
### Split plan
- **Recommended pairing:** works naturally as three loose pairs by lane — machine
(Sandoval, Kowalczyk, Bhattacharya, Okonkwo), people (Holloway, Rahimi, Agyeman,
Nkemdirim), edges (Finch, Lindqvist). Offer; do not assign.
- **Segments:** ~10 minutes each, cutting between them. End each on a pull line.
- **Cross-team payoff:** the machine half learns *the racks still say Cattle Lane*;
the people half learns *Cattle Lane was pulled down in 1971 and nobody was
rehoused locally*. Neither half is interesting. Together they are the scenario.
### Locations
#### The Trestle Table, Sail Street *(exterior)*
- **First impression:** bunting in two colours, a clipboard on a string, a tea urn
running off an extension lead through a propped fire door. A council fleece.
- **Interactables:** the head-count clipboard — names in, names out, in two columns.
Councillor Odame, who wants the building listed and will corner anyone about it.
A photocopied leaflet (**OD-H01-A**).
- **Hidden:** the leaflet's own map has the building set back from Sail Street by
about four metres. It isn't. `[CUS: Spot — the frontage on the map is not the
frontage in front of you]`
- **Artwork:** OD-ART-01
#### The Public Hall *(former operators' room, ground floor)*
- **First impression:** a long room with a parquet floor worn into two grooves where
the operators' chairs ran, forty years of them, from one end to the other.
- **Interactables:** display boards of borough photographs. The tea urn. A stacking
chair with a first-aid box on it. A black bakelite telephone on a side table, cable
cut, put there for children to pick up.
- **Hidden:** one board photograph, 1968, shows the brass door with **CATTLE LANE**
on the fanlight. `[CUS: Spot — the door is the same door; the street is not]`
- **Artwork:** OD-ART-02
#### The Frame Room *(basement)*
- **First impression:** ten aisles of steel racks, floor to ceiling, each one a
wall of relays and jumper wire in cotton sleeving, cream and red and green. It is
the most beautiful thing any of them have seen this year and none of them expected
that.
- **Interactables:** Kearsley, who will explain anything to anyone. The restored
demonstration panel at aisle one, with a fuse carrier and a hand-lettered card. Rack
ends stencilled with route codes. A tag list on a nail.
- **Hidden:** every rack end carries the route prefix **CTL**. `[CUS: Knowledge or
Repair (Electronics) — CTL is a routing prefix, and it is the old address block]`
- **Artwork:** OD-ART-03
#### The Battery Room *(basement, beyond the frame room)*
- **First impression:** two hundred glass cells on tarred timber staging, all empty,
all still faintly sweet with acid. The floor slopes to a drain in the centre.
- **Interactables:** Bhattacharya's sample points. Kowalczyk's staff and tape. A
stencilled notice: **NO NAKED LIGHTS — MARCHBANK EXCHANGE, 4 CATTLE LANE**.
- **Hidden:** the drain does not appear on the drainage drawing. `[CUS: Engineering
(Field Systems) — it goes somewhere the survey does not]`
- **Artwork:** OD-ART-04
#### The Roof and the Mast
- **First impression:** felt, gravel, a lightning conductor, and a lattice mast with
one live dish on it that the network never got round to taking down. Nettlefold
from above: a ring road, a retail park, and the shape of a street that isn't there
any more, still legible in the backs of the houses.
- **Interactables:** the link equipment. The view. Sandoval's laptop.
- **Hidden:** the dish is aligned on a bearing with nothing at the end of it.
`[CUS: Computer Use — it has been carrying something, on and off, for years]`
- **Artwork:** OD-ART-05
#### The Yard and the Side Door
- **First impression:** a walled yard, a skip, and a steel door on the latch with the
hasp taped over, because the OB cable runs through it and nobody wants to keep
getting up.
- **Interactables:** the skip (cable offcuts, a broken chair, a box of tag lists). The
door. The taped hasp.
- **Hidden:** the tape is fresh. Somebody else taped it before Finch got there.
`[CUS: Spot — two layers of tape, different ages]`
- **Artwork:** OD-ART-06
### NPCs
#### Douglas Kearsley
*A retired exchange engineer who has waited thirty years to show somebody how the
machine worked, and today somebody is finally asking.*
- **Physical:** seventy-one, a good jacket over a work shirt, and a pen in the top
pocket that he uses.
- **Motivation:** to be understood about this one thing before he dies.
- **What he knows:** everything about the Exchange, including that the racks were
never re-addressed — which he raises as an old grievance, twice, to anyone.
- **Disposition:** delighted. Uncomplicated. Genuinely good company.
- **Key line:** *"They moved the street. They never told the machine."*
- **Mechanics:** ordinary man, 71. INT 15, EDU 14, Repair (Electronics) 80%,
Knowledge 65%. No roll resolves anything he does after 15:49.
#### Councillor Hazel Odame
*Chair of the civic society, who wants the building listed and has one day to make
ninety people care.*
- **Physical:** a lanyard, a folder, and reading glasses pushed up into her hair that
she will spend the afternoon looking for.
- **Motivation:** listing. Failing that, a decent photograph in the *Advertiser*.
- **What she knows:** the borough history cold, including the 1971 scheme, and that
the Cattle Lane households were rehoused eleven miles away.
- **Disposition:** brisk, warm, absolutely will not be told the day should stop.
- **Key line:** *"They took the whole lane. Both sides. In a fortnight."*
- **Mechanics:** Persuade 60%, Status 70%. Takes the head count at 15:48 because
that is what you do.
#### Tony Vasey
*The developer's site manager, who wants the day over and the strip-out started
Monday.*
- **Physical:** a good coat over a hard hat he does not need indoors, and a phone he
keeps checking.
- **Motivation:** Monday.
- **What he knows:** the programme, the asbestos survey, and that the frame room was
meant to be sealed today and Kearsley talked him round.
- **Disposition:** not unkind, entirely uninterested, will be the one who says
*"he'll have gone home"* at 16:00 and mean it.
- **Key line:** *"Half three, and then I'm locking it, heritage or no heritage."*
- **Mechanics:** Fast Talk 55%, Status 45%.
### Clue trail — Act One
| # | Clue | Location / Source | How found | What it reveals | Type |
|---|---|---|---|---|---|
| 1 | The building's address was 4 Cattle Lane | Battery room stencil; Lindqvist's talk; Odame | **Automatic** on entering either basement room, or attending the talk | R1 — the building used to face a different street | Essential |
| 2 | Every rack end is prefixed CTL | Frame room | **Automatic** if Kearsley is asked anything at all about routing | R2 — the machine still says so | Essential |
| 3 | Cattle Lane was demolished in 1971 in a fortnight | Odame, or the display boards | **Automatic** on any question about the street | Context for R1 | Essential |
| 4 | The 1968 photograph: same door, different street | Public hall boards | `[CUS: Spot]` | Makes R1 physical rather than administrative | Optional |
| 5 | The leaflet map's frontage is wrong by four metres | OD-H01-A | `[CUS: Spot]` | First hint the record and the building disagree *now* | Optional |
| 6 | The dish is aligned on nothing | Roof | `[CUS: Computer Use]` | Sets up the relay log in Act Two | Optional |
| 7 | Two layers of tape on the hasp | Yard | `[CUS: Spot]` | Somebody else has been coming and going | Optional |
**Fallbacks for the essentials:**
- **Clue 1** — if nobody goes downstairs and nobody attends the talk, Odame says it
at the tea urn while looking for her glasses: *"Four Cattle Lane, this was."*
- **Clue 2** — Kearsley raises it himself, unprompted, as a grievance, at any point
after 15:20. He raises it twice. He is a man with one good complaint.
- **Clue 3** — the display boards carry the 1971 compulsory purchase notice at
readable size.
### Story hooks (if players stall)
- Kearsley comes and finds them personally. He has been told he can run the panel at
twenty to four and he wants an audience, and he asks by name, having read the
clipboard.
- Vasey announces the building shuts at half three, which moves everybody down.
- The child from 15:51 — Agyeman's grandchild, or Odame's, or nobody's — asks a PC
what a telephone exchange *is*, which gets Kearsley across the room in ten seconds.
### Pacing note
Before Act Two: **every PC is in or adjacent to the frame room, and clues 1 and 2 are
delivered.** At 0:50:
> **Fast-track:** Kearsley claps his hands once, says *"Right — who wants to hear it
> connect?"*, and puts his thumb on the fuse carrier. Start the clock at 15:41.
---
## ACT TWO — Eleven Minutes *(~45 minutes)*
> **Goal:** Eleven minutes of a timetable nobody can alter, in a building that is
> somewhere else, and then a pavement with the wrong number of people on it.
### Summary
Run **The Countdown** table. Say each time aloud. Between rows, ask each PC what they
are doing and let them do it — competently, successfully, and without effect on the
timetable. The act ends at 15:52 with daylight, buses, twenty-eight people, and no
Douglas Kearsley.
### How to run it
1. **Say the time.** Every row. *"Fifteen forty-four."* It is the whole engine.
2. **Let them win the actions.** Rolls are real and rolls succeed: they get the door
shut, they get the fuse out, they get hold of Kearsley's sleeve. `[CUS: any
applicable skill — they achieve exactly what they attempted]`
3. **Do not let the outcome change.** Then the next row happens anyway. Never explain.
Never say "you can't". Say what happens.
4. **No Coherence. No horror rolls. No damage.** If a player asks whether they are
going mad, the answer in the fiction is that they are extremely calm, and so is
everyone else, and *that* is the frightening part.
5. **Nothing is hostile.** The man in the donkey jacket is working. The man asking
directions is polite. The building is not haunted; it is filed incorrectly.
### The wrong side — Cattle Lane *(location, exists 15:43–15:52)*
- **First impression:** a lane about four metres wide, black brick, greasy cobbles,
and a cooper's yard on the corner with the hoops stacked. It is late afternoon there
too, but a different late afternoon: colder, and the light comes from the other end.
- **Interactables:** the cooper's yard. A parked van, olive green, with a Nettlefold
Borough crest and no registration you can read. Front doors, numbered — **11 Cattle
Lane** is three along, and the door is ajar.
- **Anyone who steps out** can step back in. Always. Every time. Say so by showing it,
not by promising it: the first PC out gets pulled back in by their coat and nothing
bad happens, and everyone relaxes, and that is the trap the scenario sets and never
springs.
- **11 Cattle Lane.** Wren Finch's biography says she was the only witness who could
describe the inside, so if she is dealt she is the one who goes in — she will not be
able to help herself, and you should let her. If a player insists, they find a hallway,
a hall stand, and a door at the end that is the frame room door, from the other
side. They come back into the frame room. **Nothing happens to them.** Note it on
their sheet and never mention it again. It is worth more unresolved than any
consequence you could write. *(No roll resolves this.)*
- **Artwork:** OD-ART-07
### The far end of the frame room *(15:49–15:52)*
- **First impression:** aisle eleven, which the survey says is aisle ten, running warm
and loud with a rack in it that Kowalczyk has measured and does not have.
- **What is there:** a fuse carrier, and Douglas Kearsley reaching for it, with his pen
still in his top pocket.
- **What happens:** he pulls it. The lights fail from that end backwards. Whoever is
with him is holding his sleeve or is not; either way, at 15:52 they are on the
pavement and he is not, and their hand is closed on nothing.
- **Artwork:** OD-ART-08
### NPCs (Act Two)
#### The man asking directions *(15:46)*
*A courteous stranger who wants to get to 11 Cattle Lane and has all afternoon.*
- **Physical:** a good overcoat and a hat he takes off to speak.
- **He speaks** whichever language the GM likes — this is Holloway's moment if she is
dealt, and any PC's moment if she is not, because he is patient enough to be
understood by gesture.
- **What he knows:** nothing useful. He is asking a genuine question.
- **Disposition:** grateful for any answer, and he takes it, and he goes.
- **Key line:** *"Eleven. Three along, on the left, I think — but you'd know better
than me, you're local."*
- **No roll resolves who he is.** He is not resolved. He is not meant to be.
#### The man in the donkey jacket *(15:47)*
*An exchange engineer on his rounds, checking racks against a tag list.*
- **Physical:** donkey jacket, 1971, and a biro behind his ear.
- **He does not see anyone.** Not menacingly — he simply is not sharing the room. If
spoken to he does not react. If touched, the hand goes through nothing: he is warm,
and solid, and busy, and continues.
- **Key detail:** the tag list in his hand is the same tag list that is hanging on the
nail in aisle one, which a PC may already have handled. `[CUS: Spot — it is the same
list, forty years apart]`
#### Douglas Kearsley *(15:41–15:52)*
Unchanged, and that is what makes it hard. He is enjoying himself until 15:49. He
notices the extra rack, says the thing about it not being right, and goes to deal with
it the way he has dealt with a fault for fifty years — himself, at once, without
drama, because that is the job. **He is not sacrificing himself.** He does not know
he is doing anything. If a PC tries to go instead, he lets them come along and gets
there first, because he knows the aisle in the dark.
### Clue trail — Act Two
| # | Clue | Location / Source | How found | What it reveals | Type |
|---|---|---|---|---|---|
| 8 | Every timepiece in the building reads the same minute | Anywhere, 15:41 | **Automatic** | R3 — this is happening to the building | Essential |
| 9 | The street outside is not Sail Street | Front door, 15:43 | **Automatic** | R4 — outside is not outside | Essential |
| 10 | There is a rack that the survey does not have | Frame room, 15:44 | **Automatic** to any PC who has seen the survey; otherwise Kearsley says it at 15:49 | R7 — this is why Kearsley goes | Essential |
| 11 | The head count is twenty-eight | Odame, 15:48, or the sheet afterwards | **Automatic** if anyone is in the hall; otherwise **OD-H02-A** in Act Three | R6 — one more came out than went in | Essential |
| 12 | A man is walking the aisles who is not on the tour | Frame room, 15:47 | **Automatic** if anyone is in the frame room | R5 | Optional |
| 13 | The tag list is the same list | Frame room, 15:47 | `[CUS: Spot]` | Deepens R5; never explained | Optional |
| 14 | 11 Cattle Lane's back door is the frame room door | Cattle Lane | Only if a PC insists on entering | Nothing. It reveals nothing. That is the point. | Optional |
| 15 | The phone that is not connected rings until answered | Public hall, 15:45 | **Automatic** if anyone is in the hall | Atmosphere; and whoever answers it hears the exchange working | Optional |
**Fallbacks for the essentials:** clues 8 and 9 are automatic and unmissable. Clue 10
arrives in Kearsley's mouth at 15:49 if nowhere else. Clue 11 arrives as a handout in
Act Three if the table was not in the hall — Agyeman's copy, or the one the department
brings.
### Pacing note
At **1:35**, go to Act Three regardless of where the table is.
> **Fast-track:** cut to 15:52 mid-sentence. *"Daylight. Buses. Somebody's radio.
> You are standing on Sail Street and it has been eleven minutes and there are
> twenty-eight of you."* Then go straight to the first approach.
Undelivered revelations fold into the Briefing — **except R5 and R6**. If the table
missed the extra man and the head count, let them stay missed and give the players the
handout at the very end of the Briefing with no comment. It is a better ending than an
explanation.
---
## ACT THREE — The Approach *(~25 minutes)*
> **Goal:** Each PC, alone, in their own working life, four to eleven weeks later, is
> approached by somebody who has read what they wrote. **No new information.** This
> act is confirmation and consequence.
### How to run it
Run each approach as a **two-to-three minute solo scene** in front of the whole table.
Do not go round the table asking for reactions; go to each player, play the scene,
end it, move on. This is the only part of the scenario where spotlight is
deliberately serial, and it works because each scene is short and every player is
watching somebody get read.
**Give OD-H06-A to the first player approached.** They all get the same letter.
### Mrs Ivy Ferrand
*A recruiting officer who has read everything you wrote and has come a long way to
say so gently.*
- **Physical:** fifty-something, a raincoat over something sensible, and a small hard
case she puts on the floor beside her chair and never opens.
- **Motivation:** to establish, in under ten minutes, whether you are a person who
keeps a record when it costs you something. She already believes you are. She is
checking.
- **What she knows:** everything in the written record, including the private part.
Not what happened in the building. She was not there and she says so plainly.
- **Disposition:** kind, unhurried, and completely immovable. She orders tea and does
not drink it. She does not use the word *crossing*, or *coherence*, or *department*.
- **Key line:** *"You wrote it down twice. Most people cross it out the second time."*
- **What she will not answer:** where Kearsley is; who the twenty-eighth person was;
what she works for. To each: *"I'm not able to tell you that today."* Not *"I don't
know."* She is scrupulous about the difference, and a sharp PC will notice.
- **What "no" gets:** a card with a telephone number and no name, and *"That's not a
door that closes."* And she means it — see the Epilogue.
- **Mechanics:** Persuade 75%, Insight 80%, Status 60%. **No roll resolves this
scene.** She is not rolling against them and they cannot roll her away.
- **Artwork:** OD-ART-09
### The approaches, one per pregen
Use whichever were dealt. Each is: **where**, **the line she opens with** (always a
quotation from their own record), and **the offer**.
| PC | Where | She opens with | The offer |
|---|---|---|---|
| **Marta Holloway** | The interpreters' room at the magistrates' court, between listings | *"You wrote down what the gentleman asked for, and then you wrote down what the room did while he asked it. Nobody had asked you to hear either."* | Work where what you heard matters more than what was said. |
| **Ben Okonkwo** | The site canteen, half seven in the morning, everyone else outside | *"You carried two men out and your statement runs to four hundred words and none of them is 'I think'."* | We need people who go in and come out and can say which. |
| **Rey Sandoval** | The foot of a mast, in the rain, while she waits for him to come down | *"Forty minutes of traffic from a site that came out in 1994, and you kept the file. Your employer's IT policy says destroy."* | Somebody has to watch the things that are still transmitting. |
| **Arun Bhattacharya** | The laboratory, ten past six, the only two people in it | *"You raised it in writing. Then you raised it again. Nobody has ever thanked you for that. I'm not going to either."* | A registry, and everything in it read by somebody who notices. |
| **Soraya Rahimi** | The station car park after the mid-morning show | *"Eleven minutes of your tape and it plays differently every time. You still filed it. You could have wiped it and nobody would have known."* | Talking to people on the worst day of their lives, on purpose. |
| **Dr Chidi Nkemdirim** | The relatives' room, empty, at the end of a shift | *"Your notes describe an injury healing in the wrong direction, in the correct clinical language, without one hedge. Your consultant amended them. You didn't."* | Be the doctor for people this happens to. |
| **Marek Kowalczyk** | A pub near the office he has not gone into yet | *"You measured the same wall three times and put all three figures on the drawing. Your practice made you take two off."* — *(his sheet's footbridge is a later job, where he did it again and it cost him)* | Buildings that are wrong, measured properly. |
| **Wren Finch** | An interview room, and she asks the officer to leave | *"You are the only person alive who has been inside number eleven. You could have said nothing at all and walked out of here."* | The caution goes away. The skills do not. |
| **Joseph Agyeman** | His own front room, on a Sunday, by appointment | *"A file with no crime number, worked on your own time, and you got further than you were meant to. Somebody has retired on less."* | Twenty-six years of taking statements, for statements nobody else will take. |
| **Prof. Åke Lindqvist** | His room in the department, among the boxes, after the last tutorial | *"You gave an answer that was too specific. Everyone assumed you'd read it somewhere. You hadn't."* | An answer, eventually, to the only question he has ever cared about. |
### The choices (present plainly; then get out of the way)
- **Sign.** Six weeks' induction, a warrant card, and the rest of it.
- **Ask for time.** She gives it. Genuinely. See *Not yet* in the Epilogue.
- **Refuse.** The card, the number, and *"That's not a door that closes."*
- **Compromise the table will invent:** *"I'll tell you what I know, but I won't
join."* She accepts, takes an excellent statement, thanks them properly — and comes
back in the spring. Write down what they told her; it is theirs, and the department
keeps it.
### If someone gets aggressive
Nobody threatens Mrs Ferrand successfully. She does not escalate, does not call
anyone, and does not leave. She waits. If a PC walks out, she is outside their place
of work the next morning with two teas, and she has brought the head-count sheet, and
she puts it on the wall of the bus shelter and lets them read it. **That works.** It
was always going to work. She has done this two hundred times.
### Pacing note
25 minutes maximum, which is roughly two and a half minutes per player plus slack.
If the table starts debating in a group:
> **Pressure line:** *"Mrs Ferrand looks at the clock behind the bar. 'I've one more
> today,' she says, 'and they're in Carlisle.'"*
---
## Epilogue — The Briefing *(~15 minutes)*
> **Goal:** The department says the one true thing out loud, in a municipal room, with
> the wrong number of chairs.
### The room
A first-floor room above a closed register office. Stacking chairs, a projector on a
trolley, a jug of water and a plate of biscuits nobody touches. There are eleven
chairs out and however many of them there are. Nobody mentions it.
**Artwork:** OD-ART-10
### Mr Bewley
*Registry. Signs things. Has read every word any of them ever wrote about that
afternoon, twice.*
- **Physical:** grey, unremarkable, and wearing a very good watch that he checks
exactly once.
- **Motivation:** to have them understand the one true thing before they sign, because
people who sign without understanding it do not last and the paperwork is dreadful.
- **Disposition:** courteous, dry, faintly apologetic about the building, the chairs
and the biscuits.
- **Mechanics:** none. Nothing in this scene is rolled.
### The briefing (deliver as bullets, in this order)
1. **Who we are.** *"We're a department. We have a statutory basis, a budget line, and
nobody in this room's grade would surprise you. We are not secret. We are
uninteresting, which is much better."*
2. **What we do.** *"We attend when a place stops agreeing about where it is, and we
get it to agree again, and we take a statement."*
3. **The one true thing.** Say it slowly, once, and do not elaborate:
> *"Reality keeps a record of what belongs where. It is a very good record. It is not
> a perfect one, and it can be made to get it wrong — usually by something patient and
> stupid saying the same wrong thing for a very long time. That building spent
> twenty-three years telling the truth about an address that had stopped being true.
> On the twenty-seventh of September, for eleven minutes, it was believed."*
4. **Your own words, read back.** Bewley reads two lines from each PC's own record,
aloud, without comment. *This is the emotional beat of the scenario.* Use their
actual sheet biography line. Then: *"Every one of you wrote what you saw. None of
you wrote the same thing. All of you are correct. Do sit with that."*
5. **Douglas Kearsley.** Asked or not asked, he says it: *"Mr Kearsley pulled the fuse.
That is why you are all here and not still in there. We have not recovered him. I
am not going to tell you we are going to. I will tell you that the file is open and
that it is mine."*
6. **Coherence** — first use of the word in the whole scenario. *"You will find that
knowing costs something. It did not cost you anything that afternoon, because you
did not know. That is over now."*
7. **The anchor.** Each is asked to bring one object, of no value, that is
unambiguously theirs. *This is where each pregen's "Anchor:" line on their AFTER
sheet is chosen — do it at the table, in their own words.*
8. **Form CS/1** (**OD-H07-A**) — one page, and a signature block, and a pen that is
already on the table.
### Outcomes
| Outcome | Trigger | What happens |
|---|---|---|
| **Signed** | Any PC signs at the briefing | Six weeks' induction. Their "before" sheet is retired and their agent sheet is issued. Play BLACK PLATFORM. |
| **Not yet** | A PC asked for time in Act Three | They are at the briefing anyway, as a guest, in the eleventh chair. They sign in the spring, off-screen, and start play at the same rank. **This costs them nothing mechanically.** |
| **Refused outright** | A PC refused and never called | Their agent sheet exists in the compendium and they can be picked up at any later session with no explanation required. The card is still in the drawer. |
| **The whole table refuses** | Rare, and honour it | Bewley thanks them, collects the forms, and leaves. Two years later every one of them gets a Christmas card with no message. Start the campaign there instead. |
### Closing scene (read aloud, adapt to outcome)
> The stacking chairs go back on the trolley. Somebody has to carry the projector
> down. Outside it is the same wet Tuesday it was when you came in, and Sail Street is
> still Sail Street, and the Exchange is flats now — they went up quickly in the end.
>
> There is a card in your wallet with a telephone number on it and no name, and there
> will be for the rest of your life.
>
> You will find, in about a year, that you have stopped saying *eleven minutes* out
> loud. You will still know exactly how long eleven minutes is.
**Early finish:** run *The Tangent*.
---
## NPC Roster Summary (GM quick sheet)
| NPC | Essence | Wants | Key line |
|---|---|---|---|
| **Douglas Kearsley**, 71 | Retired exchange engineer with one afternoon to be understood | An audience for the machine | *"They moved the street. They never told the machine."* |
| **Cllr Hazel Odame** | Civic society chair fighting for a listing | The building saved, or a photograph | *"They took the whole lane. Both sides. In a fortnight."* |
| **Tony Vasey** | Site manager who wants Monday to start | The day over | *"Half three, and then I'm locking it."* |
| **The man asking directions** | A courteous stranger, 15:46 | 11 Cattle Lane | *"Three along, on the left — but you'd know better than me, you're local."* |
| **The man in the donkey jacket** | An engineer on his rounds, 15:47 | To finish his tag list | *(says nothing; does not see you)* |
| **Mrs Ivy Ferrand** | Recruiting officer who has read everything you wrote | To know whether you keep a record when it costs you | *"You wrote it down twice. Most people cross it out the second time."* |
| **Mr Bewley** | Registry; signs things | That you understand before you sign | *"All of you are correct. Do sit with that."* |
| **The Eleventh** | The difference between 27 and 28 | — | *(never appears, never resolved)* |
---
## Artwork Assets
**Art style (direction line, prepend to every prompt):**
flat editorial vector illustration, limited palette of deep navy blue and pale yellow
with warm off-white, 1970s British public-information poster style, clean thick
outlines, large areas of flat colour, no text, no logo, `--style raw --ar 3:2 --v 6`
| Asset ID | Description | Used in | Prompt subject |
|---|---|---|---|
| OD-ART-01 | The frontage | Introduction | a 1930s municipal brick telephone exchange on an English high street, brass door, frosted windows, bunting strung across the pavement, a folding trestle table with a tea urn |
| OD-ART-02 | The public hall | Act One | a long empty room with a worn parquet floor, two dark grooves running its length, display boards of old photographs, a black bakelite telephone on a side table |
| OD-ART-03 | The frame room | Act One / Two | ten aisles of floor-to-ceiling steel telephone exchange racks, dense with relays and cotton-sleeved jumper wire, one aisle lit warmer than the rest |
| OD-ART-04 | The battery room | Act One | two hundred empty glass battery cells on tarred timber staging in a low basement room, floor sloping to a central drain, a stencilled enamel notice |
| OD-ART-05 | The roof | Act One | a flat felt-and-gravel roof with a lattice microwave mast and one dish, an English town below, a ring road, and the ghost outline of a demolished street |
| OD-ART-06 | The yard | Act One | a small walled service yard, a skip, a steel door standing ajar with a taped hasp, a black cable running out through the gap |
| OD-ART-07 | Cattle Lane | Act Two | a narrow soot-black brick lane of terraced doors and greasy cobbles seen through an open doorway, a cooper's yard on the corner with stacked barrel hoops, cold late-afternoon light from the far end |
| OD-ART-08 | The far end | Act Two | the far end of a dark telephone exchange aisle, one rack still lit and running, an elderly man in a good jacket reaching up to a fuse carrier, seen from behind |
| OD-ART-09 | Mrs Ferrand | Act Three | a woman in her fifties in a raincoat seated at a small café table, a hard-sided case on the floor beside her chair, an untouched cup of tea, calm and unhurried |
| OD-ART-10 | The briefing room | Epilogue | a first-floor municipal meeting room with eleven stacking chairs set out, a slide projector on a trolley, a water jug, frosted windows, weak afternoon light |
| OD-MAP-01 | Marchbank Exchange floor plan | GM | **Drawn, not generated** — hand-styled SVG: ground floor and basement, aisles numbered 1–10, the front door on Sail Street, and a dotted second front door on Cattle Lane |
---
## The Tangent
*The thread a later session pulls, and the early-finish bonus scene.*
The flats went up quickly. **Marchbank House, Sail Street**, twenty-two units, and the
developer kept the brass door because the planners insisted. Nine years later a
resident of flat 11 reports, politely and repeatedly, that her hallway is four metres
longer at night, and the department's address watch flags **Marchbank House** because
somebody has been querying the historical address database from inside the building.
Nine queries. Eleven minutes. The same nine, and the same eleven.
Whoever is doing it knows the number of the flat to ask for, and Mr Bewley's file on
Douglas Kearsley is still open, and it is still his.
---
## GM Notes (private)
- **The scenario's whole tonal trick is that nothing is hostile.** Play every NPC in
Act Two as busy, polite, or preoccupied. The moment you make something menacing you
have written a different, worse scenario.
- **Say the time.** If you take one instruction from this document, take that one.
- **Let them succeed.** Every attempt to intervene in Act Two works, mechanically and
visibly, and changes nothing. Do not soften this by having them fail instead —
failing is comforting, because failing implies that succeeding would have helped.
- **Do not resolve the Eleventh.** Do not resolve 11 Cattle Lane. Do not resolve the
man in the donkey jacket. Three unresolved things is exactly the right number; a
fourth is untidy and a second is a mystery the table will try to solve.
- **The Briefing is the scenario's payload.** Read their own biography lines back to
them in Bewley's voice, slowly. If you have their sheets, use the actual text. This
lands harder than anything in Act Two and it costs you nothing to prepare.
- **Cut first:** the roof (OD-ART-05) and the yard, in that order. Both are colour.
Never cut the battery room stencil — it carries an essential clue.
- **If a player asks whether they could have saved him:** *"Yes."* Then move on.
Bewley answers it properly twelve weeks later, and the answer is that the fuse came
out either way. Do not pre-empt him.
+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(344 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(344 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(344 80% 64%)" stroke-width="4"/>
<path d="M14 58h100v12H14z M52 40h12v46H52z" fill="hsl(344 55% 82%)" stroke="none"/>
<path d="M20 46c18 8 18 28 0 36M108 46c-18 8-18 28 0 36" fill="none" stroke="hsl(344 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 565 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(20 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(20 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(20 80% 64%)" stroke-width="4"/>
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(20 55% 82%)" stroke="none"/>
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(20 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 502 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(330 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(330 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(330 80% 64%)" stroke-width="4"/>
<path d="M10 66h96l14-6v8l-14 6v6H62l-10 14H24l10-14H10z" fill="hsl(330 55% 82%)" stroke="none"/>
<path d="M40 70h26v6H40z M66 56l8-8 6 6-8 8z" fill="hsl(330 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 503 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(197 62% 34%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(197 80% 64%)" stroke-width="4"/>
<path d="M64 14l38 12v34c0 30-16 48-38 58-22-10-38-28-38-58V26z" fill="hsl(197 90% 88%)" stroke="none"/>
<path d="M64 14v104 M30 52h68" fill="none" stroke="hsl(197 70% 46%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 510 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(249 62% 34%)"/>
<path d="M96 0H128v32z" fill="hsl(249 80% 64%)" opacity="0.55"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(249 80% 64%)" stroke-width="4"/>
<path d="M64 14l38 12v34c0 30-16 48-38 58-22-10-38-28-38-58V26z" fill="hsl(249 90% 88%)" stroke="none"/>
<path d="M64 14v104 M30 52h68" fill="none" stroke="hsl(249 70% 46%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 102h104" stroke="hsl(249 80% 64%)" stroke-width="2" opacity="0.7"/>
</svg>

After

Width:  |  Height:  |  Size: 654 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(56 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(56 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(56 80% 64%)" stroke-width="4"/>
<path d="M78 12l12 12-44 44-12-12z M40 60l12 12-8 12-16-4z M34 84l10 10-16 16-10-10z" fill="hsl(56 55% 82%)" stroke="none"/>
<path d="M74 22l6 6-38 38-6-6z" fill="hsl(56 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 512 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(50 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(50 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(50 80% 64%)" stroke-width="4"/>
<path d="M52 14h14v106H52z M66 20c22 0 34 14 34 26s-12 24-34 24z" fill="hsl(50 55% 82%)" stroke="none"/>
<path d="M72 30c12 2 18 10 18 16s-6 14-18 16z" fill="hsl(50 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 507 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(324 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(324 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(324 80% 64%)" stroke-width="4"/>
<path d="M12 46h58v10H12z M12 60h58v10H12z M70 44l30 16-30 16z" fill="hsl(324 55% 82%)" stroke="none"/>
<path d="M100 52h16v16h-16z M20 48h14v4H20z" fill="hsl(324 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 508 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(352 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(352 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(352 80% 64%)" stroke-width="4"/>
<path d="M62 8l10 26-10 12-10-12z M58 46h12v74H58z" fill="hsl(352 55% 82%)" stroke="none"/>
<path d="M60 20h8v12h-8z M56 92h16v6H56z" fill="hsl(352 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 493 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(235 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(235 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(235 80% 64%)" stroke-width="4"/>
<path d="M22 34h84v34c0 26-20 46-42 52-22-6-42-26-42-52z" fill="hsl(235 55% 82%)" stroke="none"/>
<path d="M44 56h14M70 56h14" fill="none" stroke="hsl(235 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 550 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(44 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(44 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(44 80% 64%)" stroke-width="4"/>
<path d="M10 66h96l14-6v8l-14 6v6H62l-10 14H24l10-14H10z" fill="hsl(44 55% 82%)" stroke="none"/>
<path d="M40 70h26v6H40z M66 56l8-8 6 6-8 8z" fill="hsl(44 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 498 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(227 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(227 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(227 80% 64%)" stroke-width="4"/>
<path d="M64 20a44 44 0 1 1 0 88 44 44 0 0 1 0-88z" fill="hsl(227 55% 82%)" stroke="none"/>
<path d="M64 50a14 14 0 1 1 0 28 14 14 0 0 1 0-28z" fill="hsl(227 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 503 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(239 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(239 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(239 80% 64%)" stroke-width="4"/>
<path d="M42 22h44l12 16v62H30V38z" fill="hsl(239 55% 82%)" stroke="none"/>
<path d="M64 22v78 M30 54h68" fill="none" stroke="hsl(239 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 529 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(175 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(175 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(175 80% 64%)" stroke-width="4"/>
<path d="M40 20h48l10 18v56a10 10 0 0 1-10 10H40a10 10 0 0 1-10-10V38z" fill="hsl(175 55% 82%)" stroke="none"/>
<path d="M64 20v84 M38 46h20M74 46h20" fill="none" stroke="hsl(175 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 574 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(221 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(221 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(221 80% 64%)" stroke-width="4"/>
<path d="M64 12l40 14v40c0 28-18 44-40 50-22-6-40-22-40-50V26z" fill="hsl(221 55% 82%)" stroke="none"/>
<path d="M64 26l26 10v30c0 18-12 28-26 32-14-4-26-14-26-32V36z" fill="hsl(221 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 527 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(157 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(157 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(157 80% 64%)" stroke-width="4"/>
<path d="M64 12l40 14v40c0 28-18 44-40 50-22-6-40-22-40-50V26z" fill="hsl(157 55% 82%)" stroke="none"/>
<path d="M64 26l26 10v30c0 18-12 28-26 32-14-4-26-14-26-32V36z" fill="hsl(157 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 527 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(72 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(72 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(72 80% 64%)" stroke-width="4"/>
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(72 55% 82%)" stroke="none"/>
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(72 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 502 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(142 62% 34%)"/>
<path d="M96 0H128v32z" fill="hsl(142 80% 64%)" opacity="0.55"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(142 80% 64%)" stroke-width="4"/>
<path d="M52 52h24v24H52z" fill="hsl(142 90% 88%)" stroke="none"/>
<path d="M20 28a14 14 0 1 1 0 4zM94 28a14 14 0 1 1 0 4zM20 96a14 14 0 1 1 0 4zM94 96a14 14 0 1 1 0 4z" fill="hsl(142 70% 46%)" stroke="none"/>
<path d="M34 40l18 12M94 40L76 52M34 88l18-12M94 88L76 76" fill="none" stroke="hsl(142 80% 64%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 102h104" stroke="hsl(142 80% 64%)" stroke-width="2" opacity="0.7"/>
</svg>

After

Width:  |  Height:  |  Size: 786 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(8 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(8 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(8 80% 64%)" stroke-width="4"/>
<path d="M78 12l12 12-44 44-12-12z M40 60l12 12-8 12-16-4z M34 84l10 10-16 16-10-10z" fill="hsl(8 55% 82%)" stroke="none"/>
<path d="M74 22l6 6-38 38-6-6z" fill="hsl(8 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 507 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(44 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(44 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(44 80% 64%)" stroke-width="4"/>
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(44 55% 82%)" stroke="none"/>
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(44 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 502 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(348 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(348 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(348 80% 64%)" stroke-width="4"/>
<path d="M44 100l40-72 14 8-40 72z M84 18a12 12 0 1 1 18 10 12 12 0 0 1-18-10z" fill="hsl(348 55% 82%)" stroke="none"/>
<path d="M52 96l32-58" fill="none" stroke="hsl(348 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 566 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(181 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(181 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(181 80% 64%)" stroke-width="4"/>
<path d="M40 20h48l10 18v56a10 10 0 0 1-10 10H40a10 10 0 0 1-10-10V38z" fill="hsl(181 55% 82%)" stroke="none"/>
<path d="M64 20v84 M38 46h20M74 46h20" fill="none" stroke="hsl(181 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 574 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(189 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(189 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(189 80% 64%)" stroke-width="4"/>
<path d="M42 22h44l12 16v62H30V38z" fill="hsl(189 55% 82%)" stroke="none"/>
<path d="M64 22v78 M30 54h68" fill="none" stroke="hsl(189 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 529 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(358 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(358 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(358 80% 64%)" stroke-width="4"/>
<path d="M62 8l10 26-10 12-10-12z M58 46h12v74H58z" fill="hsl(358 55% 82%)" stroke="none"/>
<path d="M60 20h8v12h-8z M56 92h16v6H56z" fill="hsl(358 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 493 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(169 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(169 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(169 80% 64%)" stroke-width="4"/>
<path d="M64 12l40 14v40c0 28-18 44-40 50-22-6-40-22-40-50V26z" fill="hsl(169 55% 82%)" stroke="none"/>
<path d="M64 26l26 10v30c0 18-12 28-26 32-14-4-26-14-26-32V36z" fill="hsl(169 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 527 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(211 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(211 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(211 80% 64%)" stroke-width="4"/>
<path d="M64 14l38 12v34c0 30-16 48-38 58-22-10-38-28-38-58V26z" fill="hsl(211 55% 82%)" stroke="none"/>
<path d="M64 14v104 M30 52h68" fill="none" stroke="hsl(211 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 559 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(229 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(229 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(229 80% 64%)" stroke-width="4"/>
<path d="M40 20h48l10 18v56a10 10 0 0 1-10 10H40a10 10 0 0 1-10-10V38z" fill="hsl(229 55% 82%)" stroke="none"/>
<path d="M64 20v84 M38 46h20M74 46h20" fill="none" stroke="hsl(229 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 574 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(26 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(26 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(26 80% 64%)" stroke-width="4"/>
<path d="M62 8l10 26-10 12-10-12z M58 46h12v74H58z" fill="hsl(26 55% 82%)" stroke="none"/>
<path d="M60 20h8v12h-8z M56 92h16v6H56z" fill="hsl(26 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 488 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(54 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(54 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(54 80% 64%)" stroke-width="4"/>
<path d="M12 60h84l20-8v12l-14 6v8H60l-8 14H32l8-14H12z" fill="hsl(54 55% 82%)" stroke="none"/>
<path d="M46 66h30v6H46z M84 52h10v8H84z" fill="hsl(54 40% 52%)" stroke="none"/>
<path d="M116 58h6v10h-6z" fill="hsl(54 80% 64%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 558 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(136 62% 34%)"/>
<path d="M96 0H128v32z" fill="hsl(136 80% 64%)" opacity="0.55"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(136 80% 64%)" stroke-width="4"/>
<path d="M44 20h40v88H44z" fill="hsl(136 90% 88%)" stroke="none"/>
<path d="M52 34h24v18H52z" fill="hsl(136 70% 46%)" stroke="none"/>
<path d="M44 62h40M44 78h40" fill="none" stroke="hsl(136 80% 64%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 102h104" stroke="hsl(136 80% 64%)" stroke-width="2" opacity="0.7"/>
</svg>

After

Width:  |  Height:  |  Size: 680 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(247 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(247 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(247 80% 64%)" stroke-width="4"/>
<path d="M22 34h84v34c0 26-20 46-42 52-22-6-42-26-42-52z" fill="hsl(247 55% 82%)" stroke="none"/>
<path d="M44 56h14M70 56h14" fill="none" stroke="hsl(247 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 550 B

+10
View File
@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(223 62% 34%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none"
stroke="hsl(223 80% 64%)" stroke-width="4" stroke-dasharray="26 13" stroke-dashoffset="7"/>
<path d="M64 14a50 50 0 1 1 0 100 50 50 0 0 1 0-100z" fill="hsl(223 90% 88%)" stroke="none"/>
<path d="M64 38a26 26 0 1 1 0 52 26 26 0 0 1 0-52z" fill="hsl(223 70% 46%)" stroke="none"/>
<path d="M64 54a10 10 0 1 1 0 20 10 10 0 0 1 0-20z" fill="hsl(223 80% 64%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 600 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(338 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(338 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(338 80% 64%)" stroke-width="4"/>
<path d="M40 16c30 14 30 82 0 96M36 12v104" fill="none" stroke="hsl(338 55% 82%)" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M40 16l52 48-52 48" fill="hsl(338 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 536 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(12 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(12 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(12 80% 64%)" stroke-width="4"/>
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(12 55% 82%)" stroke="none"/>
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(12 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 502 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(54 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(54 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(54 80% 64%)" stroke-width="4"/>
<path d="M44 100l40-72 14 8-40 72z M84 18a12 12 0 1 1 18 10 12 12 0 0 1-18-10z" fill="hsl(54 55% 82%)" stroke="none"/>
<path d="M52 96l32-58" fill="none" stroke="hsl(54 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 561 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(183 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(183 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(183 80% 64%)" stroke-width="4"/>
<path d="M40 20h48l10 18v56a10 10 0 0 1-10 10H40a10 10 0 0 1-10-10V38z" fill="hsl(183 55% 82%)" stroke="none"/>
<path d="M40 40h12v12H40zM60 40h12v12H60zM80 40h10v12H80zM50 56h12v12H50zM70 56h12v12H70zM40 72h12v12H40zM60 72h12v12H60zM80 72h10v12H80z" fill="hsl(183 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 610 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(64 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(64 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(64 80% 64%)" stroke-width="4"/>
<path d="M78 12l12 12-44 44-12-12z M40 60l12 12-8 12-16-4z M34 84l10 10-16 16-10-10z" fill="hsl(64 55% 82%)" stroke="none"/>
<path d="M74 22l6 6-38 38-6-6z" fill="hsl(64 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 512 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(326 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(326 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(326 80% 64%)" stroke-width="4"/>
<path d="M12 60h84l20-8v12l-14 6v8H60l-8 14H32l8-14H12z" fill="hsl(326 55% 82%)" stroke="none"/>
<path d="M46 66h30v6H46z M84 52h10v8H84z" fill="hsl(326 40% 52%)" stroke="none"/>
<path d="M116 58h6v10h-6z" fill="hsl(326 80% 64%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 564 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(334 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(334 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(334 80% 64%)" stroke-width="4"/>
<path d="M10 66h96l14-6v8l-14 6v6H62l-10 14H24l10-14H10z" fill="hsl(334 55% 82%)" stroke="none"/>
<path d="M40 70h26v6H40z M66 56l8-8 6 6-8 8z" fill="hsl(334 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 503 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(179 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(179 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(179 80% 64%)" stroke-width="4"/>
<path d="M64 14l38 12v34c0 30-16 48-38 58-22-10-38-28-38-58V26z" fill="hsl(179 55% 82%)" stroke="none"/>
<path d="M64 14v104 M30 52h68" fill="none" stroke="hsl(179 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 559 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(164 62% 34%)"/>
<path d="M96 0H128v32z" fill="hsl(164 80% 64%)" opacity="0.55"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(164 80% 64%)" stroke-width="4"/>
<path d="M52 52h24v24H52z" fill="hsl(164 90% 88%)" stroke="none"/>
<path d="M20 28a14 14 0 1 1 0 4zM94 28a14 14 0 1 1 0 4zM20 96a14 14 0 1 1 0 4zM94 96a14 14 0 1 1 0 4z" fill="hsl(164 70% 46%)" stroke="none"/>
<path d="M34 40l18 12M94 40L76 52M34 88l18-12M94 88L76 76" fill="none" stroke="hsl(164 80% 64%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 102h104" stroke="hsl(164 80% 64%)" stroke-width="2" opacity="0.7"/>
</svg>

After

Width:  |  Height:  |  Size: 786 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(58 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(58 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(58 80% 64%)" stroke-width="4"/>
<path d="M62 8l10 26-10 12-10-12z M58 46h12v74H58z" fill="hsl(58 55% 82%)" stroke="none"/>
<path d="M60 20h8v12h-8z M56 92h16v6H56z" fill="hsl(58 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 488 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(6 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(6 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(6 80% 64%)" stroke-width="4"/>
<path d="M52 14h14v106H52z M66 20c22 0 34 14 34 26s-12 24-34 24z" fill="hsl(6 55% 82%)" stroke="none"/>
<path d="M72 30c12 2 18 10 18 16s-6 14-18 16z" fill="hsl(6 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 502 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(2 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(2 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(2 80% 64%)" stroke-width="4"/>
<path d="M52 12h24v92H52z M44 104h40v14H44z" fill="hsl(2 55% 82%)" stroke="none"/>
<path d="M58 24h12v70H58z M52 12l-8-6h40l-8 6z" fill="hsl(2 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 482 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(344 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(344 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(344 80% 64%)" stroke-width="4"/>
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(344 55% 82%)" stroke="none"/>
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(344 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 507 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(172 62% 34%)"/>
<path d="M96 0H128v32z" fill="hsl(172 80% 64%)" opacity="0.55"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(172 80% 64%)" stroke-width="4"/>
<path d="M52 52h24v24H52z" fill="hsl(172 90% 88%)" stroke="none"/>
<path d="M20 28a14 14 0 1 1 0 4zM94 28a14 14 0 1 1 0 4zM20 96a14 14 0 1 1 0 4zM94 96a14 14 0 1 1 0 4z" fill="hsl(172 70% 46%)" stroke="none"/>
<path d="M34 40l18 12M94 40L76 52M34 88l18-12M94 88L76 76" fill="none" stroke="hsl(172 80% 64%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 102h104" stroke="hsl(172 80% 64%)" stroke-width="2" opacity="0.7"/>
</svg>

After

Width:  |  Height:  |  Size: 786 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(235 62% 34%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(235 80% 64%)" stroke-width="4"/>
<path d="M64 14l38 12v34c0 30-16 48-38 58-22-10-38-28-38-58V26z" fill="hsl(235 90% 88%)" stroke="none"/>
<path d="M64 14v104 M30 52h68" fill="none" stroke="hsl(235 70% 46%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 510 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(68 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(68 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(68 80% 64%)" stroke-width="4"/>
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(68 55% 82%)" stroke="none"/>
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(68 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 502 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(163 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(163 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(163 80% 64%)" stroke-width="4"/>
<path d="M22 34h84v34c0 26-20 46-42 52-22-6-42-26-42-52z" fill="hsl(163 55% 82%)" stroke="none"/>
<path d="M44 56h14M70 56h14" fill="none" stroke="hsl(163 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 550 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(176 62% 34%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(176 80% 64%)" stroke-width="4"/>
<path d="M52 12h24v92H52z M44 104h40v14H44z" fill="hsl(176 90% 88%)" stroke="none"/>
<path d="M58 24h12v70H58z M52 12l-8-6h40l-8 6z" fill="hsl(176 70% 46%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 443 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(158 62% 34%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(158 80% 64%)" stroke-width="4"/>
<path d="M56 20a34 34 0 1 1 0 68 34 34 0 0 1 0-68z M80 82l28 28" fill="hsl(158 90% 88%)" stroke="none"/>
<path d="M56 34a20 20 0 1 1 0 40 20 20 0 0 1 0-40z" fill="hsl(158 70% 46%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 467 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(142 62% 34%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(142 80% 64%)" stroke-width="4"/>
<path d="M56 20a34 34 0 1 1 0 68 34 34 0 0 1 0-68z M80 82l28 28" fill="hsl(142 90% 88%)" stroke="none"/>
<path d="M56 34a20 20 0 1 1 0 40 20 20 0 0 1 0-40z" fill="hsl(142 70% 46%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 467 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(194 62% 34%)"/>
<path d="M96 0H128v32z" fill="hsl(194 80% 64%)" opacity="0.55"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(194 80% 64%)" stroke-width="4"/>
<path d="M56 20a34 34 0 1 1 0 68 34 34 0 0 1 0-68z M80 82l28 28" fill="hsl(194 90% 88%)" stroke="none"/>
<path d="M56 34a20 20 0 1 1 0 40 20 20 0 0 1 0-40z" fill="hsl(194 70% 46%)" stroke="none"/>
<path d="M12 102h104" stroke="hsl(194 80% 64%)" stroke-width="2" opacity="0.7"/>
</svg>

After

Width:  |  Height:  |  Size: 611 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(46 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(46 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(46 80% 64%)" stroke-width="4"/>
<path d="M32 20c40 0 24 44 64 44M32 64c40 0 24 44 64 44" fill="none" stroke="hsl(46 55% 82%)" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 477 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(336 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(336 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(336 80% 64%)" stroke-width="4"/>
<path d="M64 8l10 10v58H54V18z M40 76h48v10H40z M58 86h12v34H58z" fill="hsl(336 55% 82%)" stroke="none"/>
<path d="M62 20h4v52h-4z M60 108h8v8h-8z" fill="hsl(336 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 507 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(191 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(191 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(191 80% 64%)" stroke-width="4"/>
<path d="M64 20a44 44 0 1 1 0 88 44 44 0 0 1 0-88z" fill="hsl(191 55% 82%)" stroke="none"/>
<path d="M64 50a14 14 0 1 1 0 28 14 14 0 0 1 0-28z" fill="hsl(191 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 503 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(46 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(46 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(46 80% 64%)" stroke-width="4"/>
<path d="M44 100l40-72 14 8-40 72z M84 18a12 12 0 1 1 18 10 12 12 0 0 1-18-10z" fill="hsl(46 55% 82%)" stroke="none"/>
<path d="M52 96l32-58" fill="none" stroke="hsl(46 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 561 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(354 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(354 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(354 80% 64%)" stroke-width="4"/>
<path d="M44 100l40-72 14 8-40 72z M84 18a12 12 0 1 1 18 10 12 12 0 0 1-18-10z" fill="hsl(354 55% 82%)" stroke="none"/>
<path d="M52 96l32-58" fill="none" stroke="hsl(354 40% 52%)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 566 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(162 62% 34%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(162 80% 64%)" stroke-width="4"/>
<path d="M70 8L28 72h28l-10 48 46-68H62z" fill="hsl(162 90% 88%)" stroke="none"/>
<path d="M64 26L44 62h16z" fill="hsl(162 70% 46%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 419 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(50 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(50 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(50 80% 64%)" stroke-width="4"/>
<path d="M20 60h48l8-8h18v12l-10 6v10H56l-8 14H26l8-14H20z" fill="hsl(50 55% 82%)" stroke="none"/>
<path d="M44 56a10 10 0 1 1 0 20 10 10 0 0 1 0-20z M28 70h14v8H28z" fill="hsl(50 40% 52%)" stroke="none"/>
<path d="M110 58h10v10h-10z" fill="hsl(50 80% 64%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 589 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128">
<rect width="128" height="128" rx="20" fill="hsl(36 38% 30%)"/>
<path d="M0 0h30L0 30z" fill="hsl(36 44% 22%)"/>
<rect x="5" y="5" width="118" height="118" rx="16" fill="none" stroke="hsl(36 80% 64%)" stroke-width="4"/>
<path d="M18 64h44l40-16v10L70 74v8H56l-10 16H22l10-16H18z" fill="hsl(36 55% 82%)" stroke="none"/>
<path d="M56 54l10-8 6 8-8 8z M26 72h16v8H26z" fill="hsl(36 40% 52%)" stroke="none"/>
</svg>

After

Width:  |  Height:  |  Size: 501 B

Some files were not shown because too many files have changed in this diff Show More