Masthead map r3: card inventory, two questions, seven cut specs, target r2 proposal

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-10-02 17:48:59 +02:00
commit 4d3db6c828
8 changed files with 1354 additions and 2 deletions

View file

@ -1,10 +1,13 @@
# Masthead campaign: the masthead on the ground, the pills gone
# Masthead campaign: the masthead on the ground, the pills gone, no cards
Imagination map, revision 2, written 2026-10-02 against `gamecult-site@90c2d94`
and `GameCult-Quartz@ef43df0`. Revision 1 put three options to the operator;
the operator dismissed the questions and ruled the nav direction, so this
revision carries rulings, not forks. The Self admits the campaign, target and
rulings; this file is the long form the cut specs point at.
rulings; this file is the long form the cut specs point at. Revision 3
(2026-10-02, against `410485e`, after `lean-masthead`) is the section
"Cards: inventory and cuts" at the end: the campaign's scope grew from the
masthead to every card surface on the site.
## The operator's words, verbatim
@ -385,3 +388,194 @@ not clipped, capped or scrolled; the `h1` is untouched.
4. `thing` / `deck-page-edges` and `site-masthead` / `ritual-phone-width`:
independent of each other and of the other-pills cut; either order. Both
are based on `87f2942`; they touch disjoint lines of `custom.scss`.
## Cards: inventory and cuts (map revision 3, 2026-10-02, against `410485e`)
Written after `lean-masthead` landed (`site-masthead:cut_report:cut-lean-masthead.h1`,
`77ecff0..410485e`). Line numbers below are from `custom.scss` at `410485e`;
every spec says to re-read by selector, since each cut shifts the file.
### The operator's words, verbatim
With a phone screenshot of `/` showing the intro text in a card nested inside
another card, alongside the nav and icon cut:
> Looks a bit disjointed on mobile.
Asked about the nested cards on the home page:
> I would indeed prefer to get rid of cards, unless they're containing
> something that floats, like a captioned image
Admitted as `site-masthead:ruling:operator-no-cards-except-floats`. Also in
force: `operator-no-card-no-pills`, `self-masthead-pills-first` (the
`.gamecult-repo-link` and `.gamecult-action` pills wait for their own cut), and
the follow-up `full-width-content` ("the content should do the same, where
reasonable").
### What the operator saw
On `/` at phone width the DOM is `article` (card: 24px radius, gradient fill,
sky border, 52px shadow, `1057-1067`) containing `.gamecult-home-hero`
containing `section.gamecult-hero-panel` (card: 20px radius, same recipe,
`2084-2113`) containing the intro copy. Beside it, `figure.gamecult-media-card`
(card) containing `img` (its own 16px radius and border). Three nested boxes
before the first word, four around the mascot. The masthead above them is
already on the ground, so the first card edge is the first thing that looks
like chrome.
### Inventory
A card is any rule that gives a content box its own fill, border, radius or
shadow. Classes: **flatten** (a layout box with no floating content),
**keep** (it holds something that floats: a captioned image, a figure, an
embed's own edge, a floating overlay), **dead** (no element on the built site
carries the class), **pill** (deferred to the pills cut), **question** (a real
fork, below), **not a card** (listed because the brief asked).
| # | Selector | Lines | Pages | Class |
|---|---|---|---|---|
| 1 | `.page > #quartz-body .center > article` (+ mobile `1462-1465`; undone by ritual `150-154`, Thing `1169-1173`, tour/Pitch `1595-1599`, colossus padding `1206`) | 1057-1067 | every page but Thing, tour, Pitch, the ritual essays | flatten |
| 2 | `.gamecult-hero-panel` (shared card `2084-2098`, home radial `2100-2109`, paddings `2111`, `2293`, `2486`) | 2084-2113 | `/`, `/Projects` | flatten |
| 3 | `.gamecult-feature-card` (base card `2084`; studio override already a hairline `2350-2357`) | 2233-2253 | `/` | flatten (collapse: the hairline becomes the base) |
| 4 | `.gamecult-evidence-note` fill (left rule stays) | 2175-2183, 2324-2332 | `/`, `/Projects` | flatten |
| 5 | `figure.gamecult-media-card` (+ `img` edge `2384-2391`; ritual variant `455-474`) | 2084, 2375-2391 | `/`, four studio pages, small-ritual-of-reach | **keep** (the operator's example) |
| 6 | `.gamecult-embed-frame` outer box; the `iframe` inside keeps its 14px edge | 2084, 2393-2405 | CultPong, cat-and-the-chocolate-factory | flatten outer, keep inner |
| 7 | `.gamecult-repo-fact` tiles | 956-965 | nine project pages | flatten |
| 8 | `.gamecult-repo-link` | 928-947 | ten project pages | pill (pending) |
| 9 | `.gamecult-action` | 2148-2173, 2315-2322 | `/`, `/Projects`, Site-Architecture | pill (pending) |
| 10 | `.gamecult-outtake` pull quote (box, tilt, second bar `::before`) | 1073-1114, 1467-1478 | four blog posts | flatten (keep the hang and one orange rule) |
| 11 | `.toc, .backlinks` | 1225-1238 (ritual undo `166-169`) | standard content pages | flatten |
| 12 | `.gamecult-overview-sidebar-inner` | 1257-1272, 1489-1491 | `/`, `/Projects`, pages with `sidebarGroups` | flatten |
| 13 | `.page-listing .section-li > .section` (engine folder listing) | 1364-1380 | `/Docs`, tag pages | flatten |
| 14 | `.gamecult-blog-index-intro`, `.gamecult-blog-card` (+ hover fill, engine `AutoIndexFolder`) | 827-873 | `/Blog` | flatten |
| 15 | `.integrated-dossier-hero`; `dl div`, `-note`, `-table`, `-glossary` | 2779-2906 | `/dossier`, `/stichting` | flatten |
| 16 | `.ritual-paper-page` sheet, badges, `blockquote`, `-abstract`, `-method-card`, `-results-strip`, `-page-number` | 198-240, 360-424, 523-538 | three ritual essays | **question** `ritual-sheet` |
| 17 | `.katex-display` (ritual) | 483-491 | ritual essays | question `code-blocks` (same answer) |
| 18 | engine `pre` (border, 5px radius), inline `code` fill | GameCult-Quartz `base.scss` 445-510 | fifteen pages with fences | **question** `code-blocks` |
| 19 | engine `.callout` | GameCult-Quartz `callouts.scss` | none (no content uses `> [!`) | not a card on this site; nothing to cut |
| 20 | tables | engine `th`/`tr` hairlines only | 99 pages | not a card (already the mechanism) |
| 21 | `footer` | engine `footer.scss`: text at .7 opacity | every page | not a card |
| 22 | Graph page | `GameCultGraphSpaShell` paints no box; engine `.graph-outer` unused | `/Graph` | not a card |
| 23 | Sai player on tour/Pitch: `.sai-speaker-stage` (the 100svh page itself, border 0), `.sai-dom-card`, `.sai-speaker-card`, avatar shell | 1633-1799 | `/tour`, `/Pitch` | keep: Sai's player chrome tinted by the site; the DOM cards float over a scene, like the Thing deck's own design |
| 24 | `.swarm-domain-card > header img`, `.swarm-avatar-fallback` (4.5rem portrait edge) | 2943-2953 | `/Projects` | keep (an image's own edge, like `img` in a media card) |
| 25 | `.swarm-badge` (bordered label, .4rem radius; `forming` dashed) | 2980-2991 | `/Projects` | pill-shaped: add to the pills cut's scope |
| 26 | `.gamecult-project-group`, `.gamecult-link-card`/`-grid` (+ tour/Pitch hiders), `.gamecult-flow-step`, the composite shell/header (`compositeSections` is set by no page), `.portfolio-dossier-*` block, `.gamecult-vn-source-card`/`doc-tree` (clipped to 1px on their only pages) | 782-819, 1494-1549, 1801-1925, 1931-2074, 2185-2224, 2458-2508, 2515-2725 | none visible | dead |
| 27 | engine `.popover` (link previews), search modal | GameCult-Quartz | floating UI | keep (floats) |
Counts: flatten 12 (rows 1-4, 6, 7, 10-15), keep 5 (5, 23, 24, 27, and the
embed's inner edge), dead 1 group of about 640 lines (26), pill 3 (8, 9, 25),
question 2 (16/17, 18), not a card 4 (19-22).
### What replaces the card: one mechanism
Whitespace, typographic hierarchy, and **the hairline rule**: `1px solid
var(--gamecult-rule)` on the top edge of a section or row, named by the mono
uppercase tracked label the brand doc already calls the signature. Asides
(evidence note, pull quote, dossier notes, ritual blockquote) keep a left rule
in the accent, which is the engine's own `blockquote` treatment. Hover is a
colour change to `--secondary`, never a fill.
The site already does this in three places with two literal colours:
`.gamecult-studio-page .gamecult-feature-card` (`2353`) and
`.swarm-domain-card` (`2932`) use `rgba(148,163,184,.22)`;
`.gamecult-overview-group` (`1313`) uses sky `.08`. `home-flat` names the grey
as `--gamecult-rule` on `body`, and the later cuts replace both literals. The
ritual variant uses its own `--ritual-paper-rule` and the amber its boxes
already carried, so the paper stays in its own colours.
The deleted cards' inner padding is not replaced. Content runs to the column's
edge, which is what `full-width-content` asks for; the width caps themselves
(`1680px`, `980px`, `760px`, `68ch`) remain that follow-up's audit.
### Questions
Two real forks. Everything else is a classification, not a choice.
**`ritual-sheet`.** The brand doc names Ritual Paper as a deliberate scoped
variant with `--ritual-paper-sheet` and `--ritual-paper-panel` tokens. The
sheet is a layout card holding the whole essay; it already drops its radius
on phones (`594`). Options:
- `keep-sheet`: the variant is the brand doc's named exception; the sheet,
abstract box, method card, results strip, blockquote box and the two badge
pills all stay.
- `flatten-sheet-keep-paper` (**recommended**): the sheet and the boxes
become cobalt and amber rules; PREPRINT, WORKING PAPER and the page number
become mono labels; the Georgia body, two-column rule, keyline, h2 top
rules, footer rule and captioned figures stay. The paper's identity is its
type, columns, rules and accents, not its drop shadow, and the essays'
ground (`119-123`) is already the near-black-violet the doc names, so there
is no seam the sheet hides.
- `flatten-all`: as above, and the keyline, column rule and h2 rules go too.
Spec `docs/masthead-cut-ritual-sheet.spec.json` is written for the
recommendation and waits.
**`code-blocks`.** Fenced code (fifteen pages) is framed by the engine: `pre`
has a 1px `--lightgray` border and 5px radius; inline `code` has a fill. The
ritual `.katex-display` follows the same answer. Options:
- `keep-engine-frame` (**recommended**): a code block is a scrolling
container, not a card; its border marks the scroll region. The rule is the
engine's and ships to nine sites; the brand doc's Surfaces section names it
as "containing", not "card".
- `site-unframe`: a site override, `pre { border: 0; border-radius: 0 }` with
a left rule or fill only; gamecult-site only.
- `engine-unframe`: the same in GameCult-Quartz `base.scss`; nine sites on
their next deploy.
### Cut order (smallest risk first; all based on `410485e`)
1. `home-flat` (`docs/masthead-cut-home-flat.spec.json`): the article card
on every page, the hero panels, feature cards and evidence fills on `/` and
`/Projects`; names `--gamecult-rule`; brand doc gains `## Surfaces`. What
the operator saw is gone after this one.
2. `dead-card-css` (`docs/masthead-cut-dead-card-css.spec.json`): about 640
lines with no element, each proven absent from the built site first; the
VN source cards are checked in the live DOM of `/tour` because Sai clones
`[data-sai-dom-source]` nodes into its overlay.
3. `sidebars-lists` (`docs/masthead-cut-sidebars-lists.spec.json`): TOC,
backlinks, overview sidebar, folder listing rows, Blog index.
4. `project-pages` (`docs/masthead-cut-project-pages.spec.json`): fact tiles,
embed frame.
5. `blog-asides` (`docs/masthead-cut-blog-asides.spec.json`): the pull quote.
6. `dossier-flat` (`docs/masthead-cut-dossier-flat.spec.json`): `/dossier`,
`/stichting`.
7. `ritual-sheet` (`docs/masthead-cut-ritual-sheet.spec.json`): after the two
questions are ruled.
Cuts 3-6 depend only on `home-flat` (the token) and touch disjoint lines;
any order among them. The pills cut (`self-masthead-pills-first`) is mapped
separately once the operator has seen `home-flat`; `.swarm-badge` joins its
scope. Follow-up for the Self, not a cut here: the `compositeSections` branch
of `GameCultCompositeContent.tsx` is reached by no page after its CSS goes.
### Target r2 proposal
Invariants r1 keeps: `masthead-on-ground`, `nav-text-links`,
`brand-doc-agrees`, `site-green`. r2 adds:
- `no-cards`: no content box on the site carries its own fill, border, radius
or shadow unless it holds something that floats in the flow (a captioned
image or figure, an embed's own edge, a floating overlay). Grouping is
whitespace, type hierarchy and the hairline rule `--gamecult-rule`; asides
carry one left rule; hover is a colour, not a fill.
- `one-rule-token`: every site-owned hairline separator resolves from
`--gamecult-rule` (the ritual variant from `--ritual-paper-rule`); no
literal hairline colour survives in `custom.scss`.
`not_in_scope` r2: the pills (`.gamecult-repo-link`, `.gamecult-action`,
`.swarm-badge`) until their cut; the engine's `pre`/`code` frame until
`code-blocks` is ruled; the Thing deck's and Sai player's own chrome; the
width caps (`full-width-content`); `scrollbar-fix-home`.
`canonical_implementations` r2 adds `docs/brand-design-language.md ##
Surfaces` and the `--gamecult-rule` token on `body` in `custom.scss`.
Rename: recommend **keeping the slug `site-masthead`**. Fifteen admitted
documents cite it as their key prefix; a rename is a new campaign plus a
resolution closing this one, and buys only a nicer name. Retitle instead: the
campaign and target r2 titles become "Site chrome: the masthead on the ground,
the pills gone, no cards", and this file's heading already reads so. If the
Self prefers a clean slug, the cuts above are unchanged and move to it.

View file

@ -0,0 +1,127 @@
{
"campaign": "site-masthead",
"cut": "blog-asides",
"revision": 1,
"title": "Blog pull quotes flat: .gamecult-outtake becomes a typeset pull quote hanging into the margin with one orange rule, no box, no tilt",
"repo": "GameCult/gamecult-site",
"branch": "main",
"base": "410485e",
"depends_on": ["home-flat"],
"first": [
"Map: docs/masthead-campaign.md, section 'Cards: inventory and cuts (map revision 3)'. Ruling: operator-no-cards-except-floats. Line numbers from 410485e; re-read by selector.",
"Surface: aside.gamecult-outtake on four posts (borrowed-witness-priced-risk, gpt-5-6-sol-wrote-a-50000-word-novella-in-8-hours, love-is-how-the-colossus-wakes, purge-the-heretek-from-our-daemonic-swarm). Rules: 1073-1097 (a 34rem box hanging 14rem into the right margin, tilted 0.35deg, orange border .26, orange left rule .28rem, radius 18px, gradient fill, shadow, italic Ubuntu 300 at 1.08rem), 1099-1106 (a second sky bar as ::before), 1108-1114 (under 1280px: narrower, less hang), 1467-1478 (mobile: full width, no transform, radius 16px, its ::before).",
"It is text, not a float, so the card goes. What is kept is the editorial device: the quote hangs into the margin, set larger and italic, marked by one orange rule on its left, like the engine's blockquote (base.scss: border-left 3px var(--secondary)). The tilt only read against a box edge and goes with it; the ::before bar is a second rule inside a card and goes.",
"The ritual essays' blockquote and the dossier notes are other left-ruled asides, handled in their own cuts; this cut is the four posts only."
],
"deletes": [
{
"path": "site/quartz/styles/custom.scss",
"lines": 10,
"note": "1073-1097 .gamecult-outtake: transform (1080), border (1081), border-radius (1083), background (1084-1086, 3 lines), box-shadow (1087-1089, 3 lines) deleted. border-left (1082) stays."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 8,
"note": "1099-1106 .gamecult-outtake::before deleted whole."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 1,
"note": "1112: the transform in the max-width 1280px variant deleted; width and margin-right stay."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 5,
"note": "1467-1478 mobile: transform: none (1471), border-radius (1472) deleted; 1476-1478 the mobile ::before rule deleted whole."
}
],
"keeps_moves": [
".gamecult-outtake keeps position, box-sizing, width min(34rem, 44vw), max-width, the margin hang (3.1rem -14rem 3.2rem auto), border-left 0.28rem orange, color, font-family, size, style, weight, letter-spacing, line-height; padding becomes 0.2rem 0 0.2rem 1.4rem.",
"The 1280px variant keeps width min(32rem, 88%) and margin-right -4rem; mobile keeps max-width 100%, margin 2.2rem 0 2.3rem, font-size 1rem; its padding becomes 0.1rem 0 0.1rem 1.1rem.",
"The four posts' markup is unchanged."
],
"adds": [
"custom.scss .gamecult-outtake padding: 0.2rem 0 0.2rem 1.4rem (replacing 1.35rem 1.65rem 1.45rem 2rem); mobile padding: 0.1rem 0 0.1rem 1.1rem (replacing 1.1rem 1.15rem 1.2rem 1.45rem)."
],
"file_changes": [
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1073, "end_line": 1114 },
"change": "outtake: box, tilt and ::before deleted; padding left-only."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1467, "end_line": 1478 },
"change": "mobile outtake: radius, transform none and ::before deleted; padding left-only."
}
],
"authority_map": {
"owner": "custom.scss owns the pull quote's one mark, the orange left rule, and its hang; the post markup owns which paragraph is pulled.",
"inputs": [
"--secondary (the rule's colour, already a literal orange at .84 in the rule; keep as is)",
"the article column's width (the hang is relative to it)"
],
"outputs": [
"a pull quote on four posts: larger italic text, one orange rule on its left, hanging into the right margin on wide screens, full width on phones"
],
"derived_state": [
"the quote's position is derived from the margin hang only; no transform remains"
],
"forbidden_writers": [
"no background, border (other than border-left), border-radius, box-shadow, transform or ::before on .gamecult-outtake at any width",
"no change to the posts, the pills, the masthead or the engine"
],
"shared_paths": [
"the same left-rule treatment as the engine's blockquote and the home evidence note; the same Deploy Quartz workflow"
],
"deletion_line": "The box, the tilt and the ::before bar are deleted before the new padding is written."
},
"verification": {
"builds": [
"Deploy Quartz green on the landing commit: gh run list -R GameCult/gamecult-site -w \"Deploy Quartz\" -L 1"
],
"tests": [
{
"name": "/Blog/love-is-how-the-colossus-wakes at 1920, 1280 and 375: the outtake has one orange left rule and no box, tilt or ::before",
"pins": ".gamecult-outtake has border-left 0.28rem orange, no other border, background transparent, border-radius 0, box-shadow none, transform none; getComputedStyle(el, '::before').content is 'none'."
},
{
"name": "at 1920 the outtake's right edge is to the right of the article's content box (the hang survives); at 375 it is inside the viewport (scrollWidth == innerWidth)",
"pins": "the editorial device kept, no overflow on phones."
},
{
"name": "git diff base..head --stat: custom.scss only, net about -22",
"pins": "subtraction."
}
],
"negative": [
{
"pattern": "gamecult-outtake[^{]*\\{[^}]*(transform|box-shadow|border-radius|background|border:)",
"scope": "site/quartz/styles/custom.scss, multiline: no match."
},
{
"pattern": "gamecult-outtake::before",
"scope": "site/quartz/styles/custom.scss: no match."
},
{
"pattern": "gamecult-action|gamecult-repo-link|gamecult-titlebar|GameCult-Quartz",
"scope": "git diff base..head changed lines and --name-only: no match."
}
],
"operator": [
"read the Colossus post on a wide screen and say whether the pull quote still earns its hang without the box"
]
},
"estimate": {
"lines_added": 2,
"lines_removed": 24,
"dependencies_added": [],
"dependencies_removed": [],
"formats_added": [],
"formats_removed": [],
"targets_added": [],
"targets_removed": []
},
"rulings": [
"site-masthead:ruling:operator-no-cards-except-floats"
],
"questions": []
}

View file

@ -0,0 +1,176 @@
{
"campaign": "site-masthead",
"cut": "dead-card-css",
"revision": 1,
"title": "Dead card CSS deleted: portfolio-dossier block, project groups, link cards, flow steps, composite shell and header, hidden VN source cards; each class proven absent from the built site first",
"repo": "GameCult/gamecult-site",
"branch": "main",
"base": "410485e",
"depends_on": ["home-flat"],
"first": [
"Map: docs/masthead-campaign.md, section 'Cards: inventory and cuts (map revision 3)', class 'dead'. These card rules have no element on the built site: no content file, component or generator emits the class. Deleting them is pure subtraction, so this cut is second; it has no visual outcome if the proof holds. Line numbers are from 410485e and shift after home-flat; re-read by selector.",
"Proof before deletion, per class: grep -rn <class> GameCult site/quartz scripts (excluding custom.scss) is empty, and after a local build (.\\scripts\\quartz\\quartz.ps1 build) grep -rl <class> public is empty. A class with a hit stays and is reported as a deviation. Expected dead at 410485e: gamecult-project-groups, gamecult-project-group, gamecult-link-grid, gamecult-link-card, gamecult-flow, gamecult-flow-step, gamecult-composite-page, gamecult-composite-jump, gamecult-composite-sections, gamecult-composite-section, gamecult-composite-divider, gamecult-composite-shell, gamecult-composite-media, gamecult-composite-copy, gamecult-composite-header, gamecult-composite-body, portfolio-dossier-page and every portfolio-dossier-* and portfolio-* class, gamecult-doc-tree-* (the generator writes repo-doc-tree.js/json under static, not markup).",
"gamecult-composite-overview is live: GameCult/tour.md 62 sets it in cssclasses, so the rule at 1937-1940 (> h2, > ul hidden) stays. The composite branch of site/quartz/components/GameCultCompositeContent.tsx (compositeSections) is reached by no content file; it is not cut here and is listed as a follow-up for the Self, since removing a component is a product decision, not a card.",
"The VN source cards on /tour and /Pitch (GameCult/tour.md 76-140, Pitch.md): section.gamecult-vn-source is clipped to 1px by custom.scss 1607-1617 (inside the tour/Pitch block) and again, identically, by 1620-1631 outside it. The Sai player clones each [data-sai-dom-source] node into its overlay (.sai-dom-card). Hands checks the live DOM on /tour after the player has shown a DOM card: if a .sai-dom-card descendant carries class gamecult-vn-source-card, the rule at 1808-1814 is a card inside Sai's floating card and is flattened (border, border-radius, background deleted; padding stays; h2/p/img rules stay); if not, 1801-1925 is dead on screen and is deleted whole. Either way the duplicate clip rule 1620-1631 is deleted.",
"Rulings: operator-no-cards-except-floats. Pills untouched. Masthead untouched. The engine is not edited."
],
"deletes": [
{
"path": "site/quartz/styles/custom.scss",
"lines": 38,
"note": "782-819: .gamecult-project-groups, .gamecult-project-group and its h2, ul, li + li rules."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 55,
"note": "1494-1532: .gamecult-link-grid, .gamecult-link-card and its strong/span; 1534-1549: the tour/Pitch rules hiding h2/h3:has(+ .gamecult-link-grid) and the grid (no grid exists)."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 12,
"note": "1620-1631: the duplicate .gamecult-vn-source clip rule outside the tour/Pitch block; the copy inside the block (1607-1617) stays."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 125,
"note": "1801-1925: .gamecult-vn-source grid, .gamecult-vn-source-card (+h2, p, p + p, img), .gamecult-vn-doc-tree-card, .gamecult-doc-tree-* rules, if the live-DOM check finds no cloned class; otherwise only the card declarations at 1811-1813 go (see first)."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 160,
"note": "1931-1935 .gamecult-composite-page; 1942-2074 composite jump, sections, section, divider, shell (+has-media), media (+figure rules), copy, header (+h2, children), body and the @container rule; 2464-2484 the mobile composite rules (header, body, shell, divider, header align). 1937-1940 (.gamecult-composite-overview > h2, > ul) stays."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 46,
"note": "2185-2224 .gamecult-flow and .gamecult-flow-step (+span, h3, p); 2458-2460 and 2506-2508 the two media-query flow rules."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 211,
"note": "2515-2725: the whole .portfolio-dossier-page block and the .portfolio-dossier-* / .portfolio-term / .portfolio-signal rules that follow it, including the @media (max-width: 720px) table rules. No content file carries portfolio-dossier-page; scripts/render-public-infrastructure-dossier.py renders a PDF with reportlab and reads no CSS."
}
],
"keeps_moves": [
".gamecult-composite-overview > h2, > ul { display: none } (1937-1940): live on /tour.",
"The tour/Pitch block (1551-1618) including its .gamecult-vn-source clip rule; the Sai player overrides (1633-1799): untouched. Those are Pitch/tour surfaces the site tints on Sai's player, not site cards; see the map.",
".gamecult-media-card, .gamecult-embed-frame, .gamecult-repo-fact, .toc/.backlinks, overview sidebar, blog index, outtake, dossier rules: untouched here; each has its own cut.",
"GameCultCompositeContent.tsx: untouched (follow-up)."
],
"adds": [],
"file_changes": [
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 782, "end_line": 819 },
"change": "project group rules deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1494, "end_line": 1549 },
"change": "link grid/card rules and their tour/Pitch hiders deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1620, "end_line": 1631 },
"change": "duplicate clip rule deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1801, "end_line": 1925 },
"change": "VN source card rules deleted, or flattened if cloned into Sai's overlay."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1931, "end_line": 2074 },
"change": "composite rules deleted except the overview hider."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2185, "end_line": 2224 },
"change": "flow rules deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2458, "end_line": 2508 },
"change": "media-query flow and composite rules deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2515, "end_line": 2725 },
"change": "portfolio-dossier block deleted."
}
],
"authority_map": {
"owner": "The content files and components own which classes exist; custom.scss carries a rule only for a class that is emitted. The built site (public/) is the proof of emission.",
"inputs": [
"grep of GameCult, site/quartz and scripts for each class",
"grep of the local build output for each class",
"the live DOM of /tour after a DOM card is shown (for the VN source cards)"
],
"outputs": [
"a custom.scss with no rule for a class that no page emits",
"a deviation entry for any class found live, with the rule left in place"
],
"derived_state": [
"nothing on screen changes; every deleted rule matched no element"
],
"forbidden_writers": [
"no rule deleted without both greps empty (or, for the VN cards, the DOM check)",
"no change to a live rule: .gamecult-composite-overview hider, the Sai overrides, the media card, the embed frame, the pills, the masthead",
"no component or content file edited; no engine edit"
],
"shared_paths": [
"deploy is the same Deploy Quartz workflow; the local build is the same quartz.ps1 build"
],
"deletion_line": "This cut is only deletion; the proof greps run first and are quoted in the report."
},
"verification": {
"builds": [
"local build before and after: .\\scripts\\quartz\\quartz.ps1 build succeeds; grep -rlE 'gamecult-(project-group|link-card|link-grid|flow|composite-(page|jump|sections|section|divider|shell|media|copy|header|body))|portfolio-dossier|gamecult-doc-tree' public is empty before the deletion",
"Deploy Quartz green on the landing commit: gh run list -R GameCult/gamecult-site -w \"Deploy Quartz\" -L 1"
],
"tests": [
{
"name": "pixel/DOM parity on /, /Projects, /Blog, /Blog/hello-world, /Projects/CultPong, /dossier, /tour, /Pitch, /Thing at 1440 and 375 before and after",
"pins": "deleting dead rules changes nothing: for each page, the set of computed (background-image, background-color, border, border-radius, box-shadow) over all elements with a class starting gamecult-, swarm-, integrated- or sai- is identical before and after."
},
{
"name": "/tour plays: the Sai player renders, a DOM card can be shown, and the clipped .gamecult-vn-source is still 1px",
"pins": "the VN source rules decided nothing visible; the clip rule inside the tour/Pitch block still applies after the duplicate goes."
},
{
"name": ".gamecult-composite-overview > h2 on /tour is display none",
"pins": "the live hider survived the composite deletion."
},
{
"name": "git diff base..head --stat: only site/quartz/styles/custom.scss, net about -640 (or about -520 if the VN rules are flattened instead of deleted)",
"pins": "pure subtraction, one file."
}
],
"negative": [
{
"pattern": "gamecult-(project-group|link-card|link-grid|flow|composite-(page|jump|sections|section|divider|shell|media|copy|header|body))|portfolio-(dossier|term|signal)|gamecult-doc-tree",
"scope": "site/quartz/styles/custom.scss after the cut: no match."
},
{
"pattern": "gamecult-composite-overview",
"scope": "site/quartz/styles/custom.scss after the cut: exactly one rule (the h2/ul hider)."
},
{
"pattern": "clip-path: inset\\(50%\\)",
"scope": "site/quartz/styles/custom.scss after the cut: exactly one match."
},
{
"pattern": "gamecult-action|gamecult-repo-link|gamecult-titlebar|GameCult-Quartz|\\.tsx|\\.md",
"scope": "git diff base..head --name-only: only custom.scss; no changed line touches a pill or masthead rule."
}
],
"operator": []
},
"estimate": {
"lines_added": 0,
"lines_removed": 640,
"dependencies_added": [],
"dependencies_removed": [],
"formats_added": [],
"formats_removed": [],
"targets_added": [],
"targets_removed": []
},
"rulings": [
"site-masthead:ruling:operator-no-cards-except-floats"
],
"questions": []
}

View file

@ -0,0 +1,146 @@
{
"campaign": "site-masthead",
"cut": "dossier-flat",
"revision": 1,
"title": "Dossier pages flat: the integrated-dossier hero, fact cells, notes, table and glossary on /dossier and /stichting become ruled sections and left-ruled asides",
"repo": "GameCult/gamecult-site",
"branch": "main",
"base": "410485e",
"depends_on": ["home-flat"],
"first": [
"Map: docs/masthead-campaign.md, section 'Cards: inventory and cuts (map revision 3)'. Ruling: operator-no-cards-except-floats. --gamecult-rule exists after home-flat. Line numbers from 410485e; re-read by selector. The portfolio-dossier block (2515-2725) is dead and is deleted in dead-card-css, not here.",
"Pages: GameCult/dossier.md and GameCult/stichting.md (cssclasses integrated-dossier-page; scripts/render-integrated-dossier.mjs emits the same classes). Surfaces in the .integrated-dossier-page block and after it: .integrated-dossier-hero (2779-2790: border, radius 8px, gradient fill, shadow, big padding); the shared card rule for .integrated-dossier-hero dl div, .integrated-dossier-note, .integrated-dossier-table, .integrated-dossier-glossary (2824-2831: border, radius, fill); dl div padding (2833-2835); note padding and shadow (2852-2856); .integrated-dossier-lead border-color (2862-2864); the table's own display/overflow rules (2866-2898: the engine's th/tr hairlines already separate rows; no change needed to those); glossary padding (2900-2902).",
"Mechanism: the hero is type on the ground closed by a bottom rule; each dl cell is a ruled column (top rule, like the project fact row); a note is a left-ruled aside in the dossier's blue (the lead note in orange), like the engine's blockquote; the table is the engine's table (rows ruled by th/tr); the glossary is a dl whose dt rows carry the top rule.",
"The dossier's own tokens (--integrated-panel, --integrated-panel-soft, --integrated-border) lose their last readers in this cut and are deleted; --integrated-blue and --integrated-orange stay."
],
"deletes": [
{
"path": "site/quartz/styles/custom.scss",
"lines": 3,
"note": "2728-2730: --integrated-panel, --integrated-panel-soft, --integrated-border deleted (no reader after this cut)."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 9,
"note": "2779-2790 .integrated-dossier-hero: border, border-radius, background (3 lines), box-shadow (3 lines) deleted; margin stays; padding replaced (adds)."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 8,
"note": "2824-2831: the shared card rule (dl div, note, table, glossary: border, radius, background) deleted whole."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 1,
"note": "2855: .integrated-dossier-note box-shadow deleted."
}
],
"keeps_moves": [
"The dossier type rules (2734-2777: Ubuntu 300 body, Montserrat headings, h2 bottom rule in --integrated-border -> becomes var(--gamecult-rule) at 2750), kicker/source, h1, lead paragraph, dl grid (2817-2822), dt/dd type (2837-2850), note strong colour, table display/overflow/tbody/th/td rules (2866-2898), glossary dd + dt spacing: unchanged except the token swap.",
"The two markdown files and the render script: unchanged."
],
"adds": [
"custom.scss .integrated-dossier-hero: padding: 0 0 1.6rem; border-bottom: 1px solid var(--gamecult-rule);",
"custom.scss .integrated-dossier-hero dl div: padding: 0.6rem 0 0; border-top: 1px solid var(--gamecult-rule); (replacing padding 0.8rem 0.9rem)",
"custom.scss .integrated-dossier-note: padding: 0.1rem 0 0.1rem 1rem; border-left: 2px solid var(--integrated-blue); (replacing padding 1rem 1.1rem and the shadow). .integrated-dossier-lead: border-left-color: var(--integrated-orange); (replacing border-color).",
"custom.scss .integrated-dossier-glossary: padding: 0; and .integrated-dossier-glossary dt { padding-top: 0.6rem; border-top: 1px solid var(--gamecult-rule); } with the existing dd + dt margin-top 1rem reduced to 0.6rem.",
"custom.scss 2750: article h2 border-bottom colour var(--gamecult-rule) in place of var(--integrated-border)."
],
"file_changes": [
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2727, "end_line": 2732 },
"change": "panel and border tokens deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2747, "end_line": 2753 },
"change": "h2 rule colour uses --gamecult-rule."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2779, "end_line": 2790 },
"change": "hero: box deleted; bottom rule and padding written."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2824, "end_line": 2864 },
"change": "shared card rule deleted; dl cell top rule, note left rule, lead colour written."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2900, "end_line": 2906 },
"change": "glossary: padding 0, dt top rule."
}
],
"authority_map": {
"owner": "custom.scss owns the dossier pages' grouping through --gamecult-rule and the two dossier accents; the markdown (and the render script that emits it) owns the content and section order.",
"inputs": [
"--gamecult-rule, --integrated-blue, --integrated-orange",
"the dossier markup's hero, dl, note, table and glossary"
],
"outputs": [
"/dossier and /stichting as ruled sections: hero closed by a rule, ruled fact cells, left-ruled notes, the engine's table, a ruled glossary"
],
"derived_state": [
"every separator on the dossier pages is derived from --gamecult-rule; the dossier's own border and panel tokens are gone"
],
"forbidden_writers": [
"no background, border-radius or box-shadow on any .integrated-dossier-* element; no border other than border-top on dl div and dt, border-bottom on the hero and h2, border-left on notes, and the engine's th/tr rules",
"no change to the markdown, the render script, the pills, the masthead or the engine"
],
"shared_paths": [
"the same token and left-rule treatment as the rest of the site; the same Deploy Quartz workflow"
],
"deletion_line": "The hero box, the shared card rule, the note shadow and the three tokens are deleted before the rule declarations are written."
},
"verification": {
"builds": [
"Deploy Quartz green on the landing commit: gh run list -R GameCult/gamecult-site -w \"Deploy Quartz\" -L 1"
],
"tests": [
{
"name": "/dossier and /stichting at 1440 and 375: no element with a class starting integrated-dossier- has a background-image, a non-transparent background-color, a border-radius or a box-shadow",
"pins": "no cards on the dossier pages."
},
{
"name": "the hero's bottom rule, the dl cell and glossary dt top rules, and the notes' left rules are present on /dossier and /stichting",
"pins": "hero border-bottom 1px at the token's colour; each dl div and each glossary dt border-top at it; each .integrated-dossier-note border-left 2px rgb(89,183,255), the lead note rgb(255,138,42). The replacements use the shared token and the two accents."
},
{
"name": "the table still scrolls horizontally at 375 (tbody min-width 42rem; .integrated-dossier-table overflow-x auto) and its rows are separated by the engine's tr rule",
"pins": "the table's container behaviour is untouched."
},
{
"name": "git diff base..head --stat: custom.scss only, net about -15",
"pins": "subtraction with rules written in place."
}
],
"negative": [
{
"pattern": "integrated-(panel|panel-soft|border)",
"scope": "site/quartz/styles/custom.scss: no match."
},
{
"pattern": "integrated-dossier[^{]*\\{[^}]*(box-shadow|border-radius|background)",
"scope": "site/quartz/styles/custom.scss, multiline: no match."
},
{
"pattern": "gamecult-action|gamecult-repo-link|gamecult-titlebar|GameCult-Quartz|\\.md$|\\.mjs$",
"scope": "git diff base..head changed lines and --name-only: no match."
}
],
"operator": [
"open /dossier and say whether the memo reads as a document rather than a stack of panels"
]
},
"estimate": {
"lines_added": 12,
"lines_removed": 24,
"dependencies_added": [],
"dependencies_removed": [],
"formats_added": [],
"formats_removed": [],
"targets_added": [],
"targets_removed": []
},
"rulings": [
"site-masthead:ruling:operator-no-cards-except-floats"
],
"questions": []
}

View file

@ -0,0 +1,231 @@
{
"campaign": "site-masthead",
"cut": "home-flat",
"revision": 1,
"title": "Home flat: the article card deleted on every page; the home and Projects hero panels and feature cards become type on the ground with one hairline rule; only the captioned media card stays on /",
"repo": "GameCult/gamecult-site",
"branch": "main",
"base": "410485e",
"depends_on": [],
"first": [
"Map: docs/masthead-campaign.md, section 'Cards: inventory and cuts (map revision 3)'. Ruling in force: site-masthead:ruling:operator-no-cards-except-floats, operator's words: \"I would indeed prefer to get rid of cards, unless they're containing something that floats, like a captioned image\". A card is any box with its own fill, border, radius or shadow around content. Line numbers below are read from 410485e; re-read by selector before editing.",
"What the operator saw on a phone on /: the intro text in .gamecult-hero-panel (card, custom.scss 2084-2098 and 2100-2113) nested inside the article card (.page > #quartz-body .center > article, 1057-1067). Both go. The figure.gamecult-media-card beside the hero (index.md 72-75: an img and a caption) is the operator's own example of a card that stays.",
"The one replacement mechanism, site-wide: whitespace, typographic hierarchy, and the hairline rule, 1px solid var(--gamecult-rule), on the top edge of a section or row, with the existing mono/uppercase/tracked label (.gamecult-kicker, .gamecult-repo-fact-label) naming it. The site already uses this hairline in three places with two literal colours: .gamecult-studio-page .gamecult-feature-card 2353 and .swarm-domain-card 2932 (rgba(148,163,184,.22)), .gamecult-overview-group 1313 (rgba(89,183,255,.08)). This cut names the token and uses the grey value; later cuts switch the sky literal to it.",
"Pages after this cut: every page's article sits on the ground (body wash, a scoped variant's ground, or the Thing hero) with no box; / and /Projects show title, tagline, kicker, hero copy, action pills (untouched, pending) and the evidence note as a left-ruled aside; the two feature cards on / are ruled sections. The deleted card's padding (1.45rem 1.7rem) is not replaced: content runs to the column's edge, which is the full-width-content direction.",
"Pills (.gamecult-action, .gamecult-repo-link) are a separate pending item under self-masthead-pills-first; not touched here. The masthead is not touched. Deploy: push to main -> Deploy Quartz -> GitHub Pages; CI is the verifier; measure with the browser pane's viewport emulation."
],
"deletes": [
{
"path": "site/quartz/styles/custom.scss",
"lines": 11,
"note": "1057-1067: the article card rule (.page > #quartz-body .center > article: background, border, border-radius, box-shadow, padding) deleted whole. 1069-1071 (> :first-child margin-top 0) stays."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 4,
"note": "1462-1465 inside @media ($mobile): the article's mobile padding and 20px radius, deleted whole."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 15,
"note": "The three unstylers that only existed to beat the article card, now dead: ritual block 150, 152-154 (padding: 0; border: 0; background: transparent; box-shadow: none; keep position, max-width, margin, color, font); Thing block 1169-1173 (background none, border 0, border-radius 0, box-shadow none, padding 0; keep grid-area and min-width); tour/Pitch block 1595-1599 (padding 0, border 0, border-radius 0, background transparent, box-shadow none; keep height, margin, overflow). Colossus block 1206 (padding: 1rem) deleted; margin-top and overflow stay."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 10,
"note": "2100-2109: the home hero's orange radial on .gamecult-hero-panel and .gamecult-media-card, deleted whole. The media card keeps the shared card fill from 2084."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 9,
"note": "The hero panel's three padding rules: 2111-2113 (.gamecult-hero-panel), 2293-2295 (.gamecult-studio-page .gamecult-hero-panel), 2486-2488 (@media mobile .gamecult-hero-panel). A section with no box has no inset."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 8,
"note": "2350-2357: .gamecult-studio-page .gamecult-feature-card (the hairline override of the card). Its declarations move into the base .gamecult-feature-card rule; the override has nothing left to override."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 2,
"note": "2179 and 2328: the background fills on .gamecult-evidence-note and its studio variant. The orange left rule stays; the note is an aside like the engine's blockquote (base.scss: border-left 3px, no fill)."
}
],
"keeps_moves": [
"figure.gamecult-media-card keeps its card (2084-2098 shared rule, 2375-2391): image plus caption is the ruled exception. .gamecult-embed-frame also stays in that selector list for now; it is cut in project-pages.",
".gamecult-home-hero grid (2076-2082), .gamecult-kicker, .gamecult-hero-title, .gamecult-action-row, .gamecult-action (pills, pending), .gamecult-feature-grid, swarm directory rules: unchanged except the token swap at 2932.",
"The masthead rules (641-780) and GameCultMasthead.tsx: untouched.",
"The Thing block's grid stack, --thing-inset, --thing-frame; the tour/Pitch 100svh frame; the ritual essays' ground, grid and article width: unchanged apart from the dead declarations named in deletes.",
"The engine (GameCult-Quartz) is not edited."
],
"adds": [
"custom.scss body (10-29): one token, --gamecult-rule: rgba(148, 163, 184, 0.22); the hairline the site groups with. Declared on body so every scoped variant inherits it.",
"custom.scss .gamecult-feature-card (2233-2235) becomes: padding: 1.15rem 0 0; border-top: 1px solid var(--gamecult-rule); (the moved declarations; border: 0, border-radius: 0, background: transparent, box-shadow: none are not written, there is no card to undo). Its h3/p rules at 2237-2253 and the studio h3/p variants at 2359-2373 stay.",
"custom.scss 2084-2098: the selector list loses .gamecult-hero-panel and .gamecult-feature-card and reads .gamecult-media-card, .gamecult-embed-frame { ... } with the same declarations.",
"custom.scss .gamecult-evidence-note (2175-2183): padding becomes 0 0 0 0.9rem; studio variant (2324-2332): padding becomes 0 0 0 1rem. Everything else in both rules stays.",
"custom.scss 2353 and 2932: the two literal rgba(148, 163, 184, 0.22) become var(--gamecult-rule).",
"docs/brand-design-language.md: a new section '## Surfaces' between '## Masthead' (ends 95) and '## Ritual Paper' (97): the site has no cards; a content box never carries its own fill, border, radius or shadow unless it holds something that floats in the flow (a captioned image or figure; an embed's own edge; a popover). Grouping is whitespace, type hierarchy and the hairline rule --gamecult-rule on the top edge of a section or row, named by the mono uppercase tracked label. Six to ten lines, by selector and token, no line numbers. In '## Applying this outside the site' (137-144) the 'Panels #16212c' phrase becomes 'rules rgba(148,163,184,.22), no panels'. The 'Written' line (15) already says revised 2026-10-02.",
"GameCult/Docs/Site-Architecture.md 32-33: 'hero panels' becomes 'hero sections' and the sentence no longer promises panels; one-line edit."
],
"file_changes": [
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 10, "end_line": 29 },
"change": "--gamecult-rule declared on body."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 146, "end_line": 158 },
"change": "ritual article: padding 0, border 0, background transparent, box-shadow none deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1057, "end_line": 1071 },
"change": "article card rule deleted; the :first-child margin reset stays."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1166, "end_line": 1174 },
"change": "Thing article: the five card-undo declarations deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1204, "end_line": 1208 },
"change": "colossus article: padding 1rem deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1462, "end_line": 1465 },
"change": "mobile article padding and radius deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1592, "end_line": 1601 },
"change": "tour/Pitch article: the five card-undo declarations deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2084, "end_line": 2113 },
"change": "shared card selector reduced to media card and embed frame; home radial deleted; hero padding deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2175, "end_line": 2183 },
"change": "evidence note: fill deleted, padding left-only."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2233, "end_line": 2235 },
"change": "feature card becomes the ruled section."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2293, "end_line": 2357 },
"change": "studio hero padding, evidence fill and feature override deleted; studio evidence padding left-only."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2486, "end_line": 2488 },
"change": "mobile hero padding deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2932, "end_line": 2932 },
"change": "swarm card hairline uses the token."
},
{
"location": { "path": "docs/brand-design-language.md", "line": 96, "end_line": 97 },
"change": "'## Surfaces' section inserted; 'Panels' line amended."
},
{
"location": { "path": "GameCult/Docs/Site-Architecture.md", "line": 32, "end_line": 33 },
"change": "'hero panels' becomes 'hero sections'."
}
],
"authority_map": {
"owner": "The page's ground owns what is behind content on every page (body wash, a scoped variant's ground, the Thing hero); custom.scss owns grouping through one token, --gamecult-rule, and the section rules that use it; index.md and Projects/index.md own the copy and the order of sections.",
"inputs": [
"the brand tokens in quartz.config.ts and the one new token --gamecult-rule",
"the studio pages' markup (hero section, feature grid, evidence note, media figure)"
],
"outputs": [
"every page's article on the ground with no box, content at the column's edge",
"/ and /Projects: hero copy, ruled feature sections, a left-ruled evidence note, and one captioned media card"
],
"derived_state": [
"the article's inset is derived from .page and #quartz-body gutters only; the card's padding is gone and not replaced",
"the feature card's rule colour is derived from --gamecult-rule; no literal hairline colour remains in the studio or swarm rules"
],
"forbidden_writers": [
"no rule paints background, border, border-radius or box-shadow on .page > #quartz-body .center > article, .gamecult-hero-panel, .gamecult-feature-card or .gamecult-evidence-note (the evidence note keeps border-left only)",
"no scoped block (ritual, Thing, tour/Pitch, colossus) undoes a card that no longer exists: no border: 0, background: transparent/none or box-shadow: none on article in those blocks",
"no new padding, max-width or inset added to article to stand in for the card's padding",
"no change to .gamecult-action, .gamecult-repo-link, the masthead rules, the engine, or any content copy"
],
"shared_paths": [
"every page renders article through the one engine .center > article rule; the three scoped blocks stop being exceptions to a card",
"deploy is the same Deploy Quartz workflow"
],
"deletion_line": "The article card (1057-1067, 1462-1465), its three unstylers, the home radial, the hero paddings and the studio feature override are deleted in the first commit, before --gamecult-rule and the ruled feature-card rule are written."
},
"verification": {
"builds": [
"Deploy Quartz green on the landing commit: gh run list -R GameCult/gamecult-site -w \"Deploy Quartz\" -L 1",
"optional: .\\scripts\\quartz\\quartz.ps1 build succeeds locally"
],
"tests": [
{
"name": "no painted ancestor between body and the hero copy on / and /Projects at 1440 and 375",
"pins": "the operator's screenshot: walk from .gamecult-hero-title up to body; expect no element with a computed background-image other than none, background-color other than transparent/rgba(0,0,0,0), border-width other than 0 or box-shadow other than none, except body's own wash."
},
{
"name": "article has no box on /, /Projects, /Blog/hello-world, /Projects/CultPong, /Docs, /Graph, the three ritual essays, the colossus post and /Thing at 1440 and 375",
"pins": "computed style of .center > article: background-image none, background-color transparent, border 0, border-radius 0, box-shadow none, padding 0 (colossus and ritual included)."
},
{
"name": "figure.gamecult-media-card on / keeps its card",
"pins": "the ruled exception: computed border-width 1px, border-radius 20px, a background-image; its img keeps 16px radius."
},
{
"name": "the two .gamecult-feature-card on / have border-top 1px rgb(148,163,184) at .22 and no other border, fill or shadow; .swarm-domain-card border-top matches",
"pins": "the one mechanism: getComputedStyle(...).borderTopColor equals the token's resolved rgba on both; --gamecult-rule resolves on body."
},
{
"name": ".gamecult-evidence-note on / and /Projects: border-left 2px orange, background transparent, padding-left 0.9rem (1rem on the studio page), no top/bottom padding",
"pins": "an aside, not a card."
},
{
"name": "at 375x812 on /: no horizontal overflow (scrollWidth == innerWidth) and the article's left edge equals .center's left edge",
"pins": "content at the column's edge; nothing stands in for the card's padding."
},
{
"name": "git diff base..head --stat: custom.scss, docs/brand-design-language.md and GameCult/Docs/Site-Architecture.md only; custom.scss net about -45",
"pins": "a subtraction cut with one token and one moved rule."
}
],
"negative": [
{
"pattern": "\\.center > article\\s*\\{[^}]*(background|border|box-shadow|padding)",
"scope": "site/quartz/styles/custom.scss, multiline: no match outside the Thing block's grid-area/min-width rule and the colossus block's margin-top/overflow rule (those two rules match none of the four words)."
},
{
"pattern": "gamecult-hero-panel[^{]*\\{[^}]*(background|border|box-shadow|padding)",
"scope": "site/quartz/styles/custom.scss, multiline: no match."
},
{
"pattern": "rgba\\(148, 163, 184, 0\\.22\\)",
"scope": "site/quartz/styles/custom.scss: exactly one match, the --gamecult-rule declaration on body."
},
{
"pattern": "gamecult-action|gamecult-repo-link|gamecult-titlebar|gamecult-nav-link|GameCult-Quartz",
"scope": "git diff base..head: no match in changed lines; --name-only has no engine or component file."
}
],
"operator": [
"look at / on a phone and say whether the intro now reads as one page instead of a box in a box"
]
},
"estimate": {
"lines_added": 14,
"lines_removed": 59,
"dependencies_added": [],
"dependencies_removed": [],
"formats_added": [],
"formats_removed": [],
"targets_added": [],
"targets_removed": []
},
"rulings": [
"site-masthead:ruling:operator-no-cards-except-floats",
"site-masthead:ruling:operator-no-card-no-pills",
"site-masthead:ruling:self-masthead-pills-first"
],
"questions": []
}

View file

@ -0,0 +1,126 @@
{
"campaign": "site-masthead",
"cut": "project-pages",
"revision": 1,
"title": "Project pages flat: the four repo-fact tiles become a ruled fact row, and the embed frame's outer card goes so the iframe's own edge is the only one",
"repo": "GameCult/gamecult-site",
"branch": "main",
"base": "410485e",
"depends_on": ["home-flat"],
"first": [
"Map: docs/masthead-campaign.md, section 'Cards: inventory and cuts (map revision 3)'. Ruling: operator-no-cards-except-floats. --gamecult-rule exists after home-flat. Line numbers from 410485e; re-read by selector.",
"Surfaces: .gamecult-repo-fact (956-965; nine project pages, four tiles each: Started, Last Public Push, Stack, Status, with a mono-style uppercase label at 967-974); .gamecult-embed-frame (in the shared card selector at 2084 after home-flat, plus 2393-2397; /Projects/CultPong wraps a YouTube iframe, /Blog/cat-and-the-chocolate-factory wraps the interactive fiction applet). The iframe inside (2399-2405) has its own radius 14px and ground: that is the embed's own edge, like the img inside a media card, and stays. The frame around it is a card around a card.",
"The repo-link pills (.gamecult-repo-link, 928-947) sit directly above the facts on the same pages; pending under self-masthead-pills-first, not touched.",
"Mechanism: the facts grid (949-954, auto-fit minmax(9rem, 1fr)) stays; each fact becomes a ruled column: border-top var(--gamecult-rule), padding-top, no inset. The embed frame keeps its margin and loses its box and padding."
],
"deletes": [
{
"path": "site/quartz/styles/custom.scss",
"lines": 8,
"note": "956-965 .gamecult-repo-fact: padding, border, border-radius, background (5 lines) deleted; replaced by the two lines in adds."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 3,
"note": "2084: .gamecult-embed-frame removed from the shared card selector, leaving .gamecult-media-card { ... }. 2393-2397 .gamecult-embed-frame: padding and overflow: hidden deleted; margin stays."
}
],
"keeps_moves": [
".gamecult-repo-facts grid, .gamecult-repo-fact-label and -value: unchanged.",
".gamecult-embed-frame iframe (2399-2405): width, min-height, border 0, border-radius 14px, background unchanged; mobile min-height (2510-2512) unchanged.",
".gamecult-repo-links and .gamecult-repo-link: untouched (pills, pending).",
"figure.gamecult-media-card: the only rule left in the shared card selector; unchanged."
],
"adds": [
"custom.scss .gamecult-repo-fact: padding: 0.6rem 0 0; border-top: 1px solid var(--gamecult-rule);",
"custom.scss .gamecult-embed-frame: margin: 1.2rem 0 1.4rem; (the one declaration left)."
],
"file_changes": [
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 956, "end_line": 965 },
"change": "repo fact: box deleted, top rule written."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2084, "end_line": 2098 },
"change": "shared card selector is .gamecult-media-card only."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 2393, "end_line": 2397 },
"change": "embed frame: padding and overflow deleted."
}
],
"authority_map": {
"owner": "custom.scss owns the fact row's grouping through --gamecult-rule; the embed's own edge is owned by the iframe rule; the project markdown owns the facts' content.",
"inputs": [
"--gamecult-rule",
"the project pages' repo-facts and embed-frame markup"
],
"outputs": [
"a ruled four-column fact row on nine project pages",
"one edge around each embed, the iframe's"
],
"derived_state": [
"the embed's radius is the iframe's; the frame contributes no box",
"fact separators derived from --gamecult-rule"
],
"forbidden_writers": [
"no background, border (other than border-top), border-radius or box-shadow on .gamecult-repo-fact or .gamecult-embed-frame",
"no change to .gamecult-repo-link, the masthead, the engine or content"
],
"shared_paths": [
"the same token and the same Deploy Quartz workflow"
],
"deletion_line": "The fact tile box and the embed frame's card and padding are deleted before the top rule is written."
},
"verification": {
"builds": [
"Deploy Quartz green on the landing commit: gh run list -R GameCult/gamecult-site -w \"Deploy Quartz\" -L 1"
],
"tests": [
{
"name": "/Projects/CultPong at 1440 and 375: ruled fact row, no box on the embed frame, the iframe keeps its edge",
"pins": "each .gamecult-repo-fact has border-top 1px at the token's colour, no other border, no fill, no radius; .gamecult-embed-frame has no box or padding; its iframe keeps radius 14px and its ground. One edge per embed."
},
{
"name": "/Blog/cat-and-the-chocolate-factory: the applet iframe renders at the frame's full width with no box around it",
"pins": "same mechanism on the second embed page."
},
{
"name": "figure.gamecult-media-card on / unchanged (border 1px, radius 20px, fill)",
"pins": "the selector edit kept the media card."
},
{
"name": "git diff base..head --stat: custom.scss only, net about -9",
"pins": "subtraction."
}
],
"negative": [
{
"pattern": "(gamecult-repo-fact|gamecult-embed-frame)[^{]*\\{[^}]*(box-shadow|border-radius|background|border:)",
"scope": "site/quartz/styles/custom.scss, multiline: no match (the iframe rule's selector contains 'iframe' and is excluded by eye; report it)."
},
{
"pattern": "gamecult-repo-link|gamecult-action|gamecult-titlebar|GameCult-Quartz",
"scope": "git diff base..head changed lines and --name-only: no match."
}
],
"operator": [
"open /Projects/CultPong on a phone and say whether the facts and the video read cleanly"
]
},
"estimate": {
"lines_added": 3,
"lines_removed": 11,
"dependencies_added": [],
"dependencies_removed": [],
"formats_added": [],
"formats_removed": [],
"targets_added": [],
"targets_removed": []
},
"rulings": [
"site-masthead:ruling:operator-no-cards-except-floats",
"site-masthead:ruling:self-masthead-pills-first"
],
"questions": []
}

View file

@ -0,0 +1,179 @@
{
"campaign": "site-masthead",
"cut": "ritual-sheet",
"revision": 1,
"title": "Ritual essays: the sheet, abstract, method, results and blockquote boxes and the badges become rules and mono labels on the essays' ground; paper, columns, keyline and figures stay (waits on ruling)",
"repo": "GameCult/gamecult-site",
"branch": "main",
"base": "410485e",
"depends_on": ["home-flat"],
"first": [
"This spec waits on site-masthead:question:ritual-sheet. It is written for the recommended option flatten-sheet-keep-paper; if the operator rules keep-sheet the cut is withdrawn, if flatten-all the keyline, column rule and h2 top rules go too and the spec is revised. Do not start before the ruling.",
"Map: docs/brand-design-language.md '## Ritual Paper' names the three essays (Blog/small-ritual-of-reach, week-of-nonconsensual-access, witness-authoritative-networking) as a deliberate scoped variant: Georgia body, a near-black-violet ground, cobalt and amber accents, mono labels; its token table lists --ritual-paper-sheet and --ritual-paper-panel. Ruling in force: operator-no-cards-except-floats. Line numbers from 410485e inside the body[data-slug] block at 101-625; re-read by selector.",
"Surfaces: .ritual-paper-page (198-214: the sheet; border, radius 8px, gradient and line fill, 72px shadow, two inset hairlines; cover padding 216-218; mobile 591-595), ::before badges PREPRINT / WORKING PAPER (220-240: pill, border, 999px radius, fill), article blockquote (360-371: card with left rule, fill, shadow, and a 'quoted protocol' label whose panel background masks the border, 373-385), .ritual-paper-abstract (401-409), .ritual-paper-method-card and .ritual-paper-results-strip (416-424), .ritual-paper-page-number (523-538: pill on a gradient with glow). Not touched: .gamecult-media-card ritual variant (455-474: captioned figures, the ruled exception), article code (352-358: inline, not a box), .katex-display (483-491: tied to question code-blocks), the keyline, the column rule at 544, h2 top rules, the page footer's top rule.",
"Mechanism, in the variant's own colours: --ritual-paper-rule replaces the sheet's and boxes' borders as top (and where named, bottom) hairlines; badges and the page number become mono labels in their existing colours; the blockquote keeps its orange left rule only. The essays' ground (119-123) is the paper now, which is why the sheet can go: there is no seam to hide.",
"Pills: the PREPRINT badge and page number are mono labels inside the variant, not nav; they are flattened here, not in the pills cut (campaign map B3)."
],
"deletes": [
{
"path": "site/quartz/styles/custom.scss",
"lines": 16,
"note": "198-214 .ritual-paper-page: border, border-radius, background (5 lines), background-size, box-shadow (4 lines) deleted; position and margin stay; padding replaced. 216-218 .ritual-paper-page-cover padding-top deleted whole. 593-594 mobile padding and border-radius: 0 deleted; margin-bottom stays."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 6,
"note": "220-240 badges: padding (225), border (227), border-radius (228), background (229) deleted; in the WORKING PAPER variant border-color (238) and background (239) deleted, content and color stay."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 10,
"note": "360-371 blockquote: border (364), border-radius (366), background (367-369), box-shadow (370) deleted; border-left stays. 373-385 ::before: position, top, left, padding, background deleted (5 lines); content, color, font, size, tracking, transform stay."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 8,
"note": "401-409 abstract: border, border-radius, background (3 lines) deleted. 416-424 method card and results strip: border, border-radius, background (3 lines) deleted."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 9,
"note": "523-538 page number: min-width, padding, border, border-radius, background, box-shadow (3 lines) deleted; color becomes var(--ritual-paper-yellow)."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 4,
"note": "105-108: --ritual-paper-sheet, --ritual-paper-sheet-2, --ritual-paper-panel, --ritual-paper-panel-2 deleted (no reader after this cut). docs/brand-design-language.md token table (112-125): the sheet and panel rows deleted."
}
],
"keeps_moves": [
"The essays' ground (119-123), grid, hidden left sidebar, right TOC, article width 980px and Georgia type, h1/titleblock, keyline (290-302), h2 top rules (311-317), h3, links, list markers, results-strip internal column rules (441-453), media figures (455-474), katex (483-491, pending code-blocks), page footer top rule (493-502), footnotes, the 1120px two-column rule and column-span list, the 760px single-column rules: unchanged.",
"The badges keep position absolute top/right on wide screens and static inline-block on phones (597-601); they are mono labels now.",
"The three essays' markup: unchanged."
],
"adds": [
"custom.scss .ritual-paper-page: padding: 0; margin: 0 0 2.6rem; (the sheet's inset is the column's now).",
"custom.scss article blockquote: padding: 0.2rem 0 0.2rem 1.35rem; article blockquote::before: display: block; margin-bottom: 0.4rem; (the label sits above the quote, nothing to mask).",
"custom.scss .ritual-paper-abstract: padding: 1rem 0; border-top: 1px solid var(--ritual-paper-rule); border-bottom: 1px solid var(--ritual-paper-rule);",
"custom.scss .ritual-paper-method-card: padding: 0.8rem 0 0; border-top: 1px solid rgba(255, 178, 30, 0.42); .ritual-paper-results-strip: border-top and border-bottom 1px solid rgba(255, 178, 30, 0.42); (the amber the boxes already used, now as rules).",
"docs/brand-design-language.md '## Ritual Paper': the sentence naming the ground becomes: the essays sit on their own near-black-violet ground with no sheet; sections are separated by cobalt and amber rules; PREPRINT, WORKING PAPER and the page number are mono labels. Token rows for sheet and panel removed."
],
"file_changes": [
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 104, "end_line": 117 },
"change": "sheet and panel tokens deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 198, "end_line": 240 },
"change": "sheet box and cover padding deleted; badges become labels."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 360, "end_line": 385 },
"change": "blockquote box deleted; label above the quote."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 401, "end_line": 424 },
"change": "abstract, method card and results strip: boxes become rules."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 523, "end_line": 538 },
"change": "page number becomes a mono label."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 591, "end_line": 595 },
"change": "mobile sheet padding and radius deleted."
},
{
"location": { "path": "docs/brand-design-language.md", "line": 97, "end_line": 133 },
"change": "Ritual Paper section: no sheet; token rows removed."
}
],
"authority_map": {
"owner": "The ritual block in custom.scss owns the essays' ground and their grouping through --ritual-paper-rule and the amber rule; the brand doc describes it. The essays' markup owns the paper's sections.",
"inputs": [
"--ritual-paper-rule, --ritual-paper-yellow, the amber literal the boxes already used",
"the three essays' section markup"
],
"outputs": [
"three essays set as a paper on their own ground: ruled abstract, method and results, a left-ruled quoted protocol, mono labels for PREPRINT, WORKING PAPER and the page number, captioned figures as the only cards"
],
"derived_state": [
"the paper's inset is derived from the column and article width; the sheet's padding is gone",
"the badge and page-number marks are derived from colour and the mono face; no box carries them"
],
"forbidden_writers": [
"no background, border-radius or box-shadow on .ritual-paper-page, the badges, article blockquote, .ritual-paper-abstract, .ritual-paper-method-card, .ritual-paper-results-strip or .ritual-paper-page-number; borders only as the named top/bottom/left rules",
"no --ritual-paper-sheet or --ritual-paper-panel token",
"no change to the media figure rule, the inline code rule, katex (pending code-blocks), the keyline, the columns, the essays' markup, the pills, the masthead or the engine"
],
"shared_paths": [
"the same policy as the rest of the site, in the variant's own colours; the same Deploy Quartz workflow"
],
"deletion_line": "The sheet, the boxes, the badge pills and the four tokens are deleted before the rule declarations and label styles are written."
},
"verification": {
"builds": [
"Deploy Quartz green on the landing commit: gh run list -R GameCult/gamecult-site -w \"Deploy Quartz\" -L 1"
],
"tests": [
{
"name": "the three essays at 1440 and 375: no box on the sheet, blockquote, abstract, method card, results strip, page number or badges",
"pins": ".ritual-paper-page, article blockquote, .ritual-paper-abstract, .ritual-paper-method-card, .ritual-paper-results-strip, .ritual-paper-page-number and the ::before badges have background-image none, background-color transparent, border-radius 0, box-shadow none. No cards in the variant beyond the figures."
},
{
"name": "figure.gamecult-media-card on small-ritual-of-reach keeps border 1px, radius 6px and its fill",
"pins": "the ruled exception stands in the variant."
},
{
"name": "at 1440 on witness-authoritative-networking the paper keeps its two columns, column rule, keyline, h2 top rules and the WORKING PAPER label",
"pins": "the label sits top-right of each section as before; the paper's identity survives the sheet."
},
{
"name": "at 375 on the three essays: no horizontal overflow; code blocks still scroll inside the column (ritual-phone-width's behaviour)",
"pins": "the sheet's removal did not reopen the phone-width finding."
},
{
"name": "git diff base..head --stat: custom.scss and the brand doc only; custom.scss net about -40",
"pins": "subtraction with rules written in place."
}
],
"negative": [
{
"pattern": "ritual-paper-(sheet|panel)",
"scope": "site/quartz/styles/custom.scss and docs/brand-design-language.md: no match."
},
{
"pattern": "(ritual-paper-page|ritual-paper-abstract|ritual-paper-method-card|ritual-paper-results-strip|ritual-paper-page-number|article blockquote)[^{]*\\{[^}]*(box-shadow|border-radius|background)",
"scope": "site/quartz/styles/custom.scss lines 101-625, multiline: no match."
},
{
"pattern": "border-radius: 999px",
"scope": "site/quartz/styles/custom.scss lines 101-625: no match."
},
{
"pattern": "gamecult-action|gamecult-repo-link|gamecult-titlebar|GameCult-Quartz",
"scope": "git diff base..head changed lines and --name-only: no match."
}
],
"operator": [
"read witness-authoritative-networking on a wide screen and say whether it still reads as a paper"
]
},
"estimate": {
"lines_added": 14,
"lines_removed": 53,
"dependencies_added": [],
"dependencies_removed": [],
"formats_added": [],
"formats_removed": [],
"targets_added": [],
"targets_removed": []
},
"rulings": [
"site-masthead:ruling:operator-no-cards-except-floats"
],
"questions": [
"site-masthead:question:ritual-sheet",
"site-masthead:question:code-blocks"
]
}

View file

@ -0,0 +1,173 @@
{
"campaign": "site-masthead",
"cut": "sidebars-lists",
"revision": 1,
"title": "Sidebars and lists flat: the TOC and backlinks boxes, the overview sidebar's box, the folder listing rows and the Blog index's intro and post cards become ruled sections on the ground",
"repo": "GameCult/gamecult-site",
"branch": "main",
"base": "410485e",
"depends_on": ["home-flat"],
"first": [
"Map: docs/masthead-campaign.md, section 'Cards: inventory and cuts (map revision 3)'. Ruling: operator-no-cards-except-floats. The token --gamecult-rule exists after home-flat. Line numbers are from 410485e; re-read by selector.",
"Surfaces: .toc, .backlinks (1225-1238; left TOC on desktop, right backlinks on standard content pages); .gamecult-overview-sidebar-inner (1257-1272, mobile 1489-1491; the Studio/Praxis/Participate sidebar on /, /Projects and content pages with sidebarGroups); .page-listing .section-li > .section (1364-1380; the engine folder listing on /Docs and tag pages); .gamecult-blog-index-intro and .gamecult-blog-card (827-873; /Blog, emitted by the engine's AutoIndexFolder with classPrefix gamecult-blog, GameCult-Quartz quartz/components/AutoIndexFolder.tsx 193-223).",
"The ritual block's .right.sidebar .toc (160-170) undoes the TOC card with border 0, border-radius 0, background transparent, box-shadow none; those four lines are dead after this cut and go with it.",
"Mechanism: each box becomes a section with border-top: 1px solid var(--gamecult-rule), no inset, its existing heading as the label. Rows in a list (folder listing, blog posts) each carry the top rule, so the rule is the separator. Hover on a blog post turns its title orange (var(--secondary)) instead of filling the card.",
"Pills untouched; masthead untouched; the engine is not edited (the listing and blog markup are the engine's, only the site's rules change)."
],
"deletes": [
{
"path": "site/quartz/styles/custom.scss",
"lines": 4,
"note": "160-170 ritual TOC: border: 0; border-radius: 0; background: transparent; box-shadow: none (166-169) deleted; sticky, max-height, padding, overflow stay."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 11,
"note": "827-837: the .gamecult-blog-index-intro, .gamecult-blog-card card rule (border, radius, background, shadow) deleted whole; 855-857 .gamecult-blog-card { overflow: clip } deleted; 865-873 .gamecult-blog-card-link:hover fill deleted."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 10,
"note": "1225-1238 .toc, .backlinks: border-radius, border, background (4 lines), padding, box-shadow (3 lines) deleted; replaced by the two lines in adds."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 12,
"note": "1257-1272 .gamecult-overview-sidebar-inner: padding, border-radius, border, background (5 lines), box-shadow (3 lines) deleted; display, flex-direction, gap stay. 1489-1491 (mobile padding) deleted whole."
},
{
"path": "site/quartz/styles/custom.scss",
"lines": 8,
"note": "1368-1380 .page-listing .section-li > .section: padding, border-radius, border, background (6 lines) deleted; display, grid-template-columns, gap stay."
}
],
"keeps_moves": [
".toc h3, .backlinks h3 (1240-1247): the uppercase tracked heading stays as the section's label.",
".gamecult-overview-group (1311-1314) keeps its border-top; its colour becomes var(--gamecult-rule) (was rgba(89,183,255,.08)). .gamecult-overview-group:first-child keeps no rule, because the sidebar's own top rule now sits above it.",
".gamecult-blog-card-head, -meta, -author, -description, .gamecult-blog-index-intro p: unchanged.",
"The engine's listPage.scss and AutoIndexFolder.tsx: untouched."
],
"adds": [
"custom.scss .toc, .backlinks: padding: 0.9rem 0 0; border-top: 1px solid var(--gamecult-rule);",
"custom.scss .gamecult-overview-sidebar-inner: padding: 0.9rem 0 0; border-top: 1px solid var(--gamecult-rule); (on phones the sidebar sits under the article; the rule separates it).",
"custom.scss .page-listing .section-li > .section: padding: 0.9rem 0; border-top: 1px solid var(--gamecult-rule); and .page-listing .section-li { margin-bottom: 0 } (1364-1366) so rows meet at the rule.",
"custom.scss .gamecult-blog-index-intro: padding becomes 0 0 0.4rem (was 1.25rem 1.5rem 1.35rem). .gamecult-blog-card-list gap becomes 0 (851-853). New: .gamecult-blog-card { border-top: 1px solid var(--gamecult-rule); } .gamecult-blog-card-link padding becomes 1.2rem 0 1.3rem (861). New: .gamecult-blog-card-link:hover h2 { color: var(--secondary); } (hover is a colour change, the brand's one accent).",
"docs/brand-design-language.md '## Surfaces': one sentence that list rows (blog index, folder listings) and sidebar sections separate by the same top rule, by selector."
],
"file_changes": [
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 160, "end_line": 170 },
"change": "ritual TOC: four card-undo declarations deleted."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 821, "end_line": 873 },
"change": "blog index: card rule, clip and hover fill deleted; intro padding, list gap, card top rule, link padding and hover colour written."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1225, "end_line": 1238 },
"change": "toc/backlinks: box deleted, top rule written."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1257, "end_line": 1272 },
"change": "overview sidebar: box deleted, top rule written."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1311, "end_line": 1314 },
"change": "overview group rule uses the token."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1364, "end_line": 1380 },
"change": "listing rows: box deleted, top rule written, row margin 0."
},
{
"location": { "path": "site/quartz/styles/custom.scss", "line": 1489, "end_line": 1491 },
"change": "mobile sidebar padding deleted."
},
{
"location": { "path": "docs/brand-design-language.md", "line": 96, "end_line": 110 },
"change": "Surfaces section: lists and sidebars sentence."
}
],
"authority_map": {
"owner": "custom.scss owns the sidebars' and lists' grouping through --gamecult-rule; the engine owns their markup (TOC, Backlinks, FolderContent, AutoIndexFolder) and GameCultOverviewSidebar.tsx owns the overview markup.",
"inputs": [
"--gamecult-rule",
"the engine's section-li and gamecult-blog-* markup"
],
"outputs": [
"TOC, backlinks and overview sidebar as ruled sections on the ground",
"/Docs listing and /Blog index as ruled rows with orange-title hover"
],
"derived_state": [
"every separator colour is derived from --gamecult-rule; the sky .08 literal in the overview group is gone",
"hover state on a blog post is derived from --secondary; no fill is painted"
],
"forbidden_writers": [
"no background, border (other than border-top), border-radius or box-shadow on .toc, .backlinks, .gamecult-overview-sidebar-inner, .page-listing .section, .gamecult-blog-card or .gamecult-blog-index-intro",
"no hover fill on .gamecult-blog-card-link",
"no change to the pills, the masthead, the engine or any content file"
],
"shared_paths": [
"the same --gamecult-rule token as home-flat; the same Deploy Quartz workflow"
],
"deletion_line": "The five box rules and the ritual undo are deleted in the first commit, before the top-rule declarations are written."
},
"verification": {
"builds": [
"Deploy Quartz green on the landing commit: gh run list -R GameCult/gamecult-site -w \"Deploy Quartz\" -L 1"
],
"tests": [
{
"name": "no box on the toc, backlinks, overview sidebar, listing rows, blog cards and blog intro at 1440 and 375",
"pins": "on /, /Projects, /Blog, /Docs, /Projects/CultPong and a ritual essay: .toc, .backlinks, .gamecult-overview-sidebar-inner, .page-listing .section, .gamecult-blog-card, .gamecult-blog-index-intro have computed background-image none, background-color transparent, border-radius 0, box-shadow none; border-top 1px at the token's colour; border-right/bottom/left 0."
},
{
"name": "/Blog: post rows meet at one rule each; hovering a row changes only its h2 colour to rgb(255,138,42)",
"pins": "the hover is a colour, not a fill: background-color of .gamecult-blog-card-link stays transparent under :hover (drive with the pane or assert from source if hover cannot be driven)."
},
{
"name": "/Docs: .section-li margin-bottom 0 and each .section has the top rule",
"pins": "rows separated by rules, not gaps."
},
{
"name": "a ritual essay at 1440: the right-sidebar TOC still sticky with no box",
"pins": "the dead undo's deletion changed nothing."
},
{
"name": "git diff base..head --stat: custom.scss and the brand doc only; custom.scss net about -30",
"pins": "subtraction with top rules written in place."
}
],
"negative": [
{
"pattern": "(\\.toc|\\.backlinks|overview-sidebar-inner|section-li > \\.section|gamecult-blog-card|gamecult-blog-index-intro)[^{]*\\{[^}]*(box-shadow|border-radius|background)",
"scope": "site/quartz/styles/custom.scss, multiline: no match."
},
{
"pattern": "rgba\\(89, 183, 255, 0\\.08\\)",
"scope": "site/quartz/styles/custom.scss lines of the overview, toc, backlinks or listing rules: no match."
},
{
"pattern": "gamecult-action|gamecult-repo-link|gamecult-titlebar|GameCult-Quartz",
"scope": "git diff base..head changed lines and --name-only: no match."
}
],
"operator": [
"open /Blog on a phone and say whether the post list reads as a list"
]
},
"estimate": {
"lines_added": 16,
"lines_removed": 45,
"dependencies_added": [],
"dependencies_removed": [],
"formats_added": [],
"formats_removed": [],
"targets_added": [],
"targets_removed": []
},
"rulings": [
"site-masthead:ruling:operator-no-cards-except-floats"
],
"questions": []
}