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:
parent
410485e50c
commit
4d3db6c828
8 changed files with 1354 additions and 2 deletions
|
|
@ -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.
|
||||
|
|
|
|||
127
docs/masthead-cut-blog-asides.spec.json
Normal file
127
docs/masthead-cut-blog-asides.spec.json
Normal 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": []
|
||||
}
|
||||
176
docs/masthead-cut-dead-card-css.spec.json
Normal file
176
docs/masthead-cut-dead-card-css.spec.json
Normal 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": []
|
||||
}
|
||||
146
docs/masthead-cut-dossier-flat.spec.json
Normal file
146
docs/masthead-cut-dossier-flat.spec.json
Normal 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": []
|
||||
}
|
||||
231
docs/masthead-cut-home-flat.spec.json
Normal file
231
docs/masthead-cut-home-flat.spec.json
Normal 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": []
|
||||
}
|
||||
126
docs/masthead-cut-project-pages.spec.json
Normal file
126
docs/masthead-cut-project-pages.spec.json
Normal 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": []
|
||||
}
|
||||
179
docs/masthead-cut-ritual-sheet.spec.json
Normal file
179
docs/masthead-cut-ritual-sheet.spec.json
Normal 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"
|
||||
]
|
||||
}
|
||||
173
docs/masthead-cut-sidebars-lists.spec.json
Normal file
173
docs/masthead-cut-sidebars-lists.spec.json
Normal 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": []
|
||||
}
|
||||
Loading…
Reference in a new issue