207 lines
15 KiB
JSON
207 lines
15 KiB
JSON
{
|
|
"campaign": "site-masthead",
|
|
"cut": "flat-nav",
|
|
"revision": 2,
|
|
"title": "The masthead sits on the page ground on every page: the card and its shadow deleted, the nav pills replaced by Ubuntu text links with orange hover and active, as on Delvehold; the brand doc amended",
|
|
"repo": "GameCult/gamecult-site",
|
|
"branch": "main",
|
|
"base": "90c2d94",
|
|
"depends_on": [],
|
|
"first": [
|
|
"Map: docs/masthead-campaign.md r2, sections 'The operator's words', 'Rulings in force', 'Body facts' B1-B5 and B9, 'The shape' > 'The masthead without the card' and 'The nav', 'The authority map'. The operator's words, verbatim: 'no card site-wide and let's get rid of those overused pill buttons while we're at it' and 'Ubuntu text links with brand orange hover, we've already done this with the Delvehold site'.",
|
|
"Rulings in force: operator-ground-behind-masthead, operator-no-card-no-pills, operator-nav-ubuntu-links, self-masthead-pills-first (masthead pills only; .gamecult-repo-link and .gamecult-action are not touched here). No question is open for this cut; scrollbar-fix-home is deferred and is not in this cut.",
|
|
"deck-page-fixes (thing campaign) landed at 8fb3dff and 90c2d94, so this cut has no dependency; the line numbers below are read from 90c2d94. That cut grew the body[data-slug=\"Thing\"] block (1148-) by 34 lines, which is why the $mobile numbers differ from r1. If main moves again before Hands starts, re-read by selector.",
|
|
"Precedent: Delvehold c43d504, site/quartz/styles/custom.scss:115-131 (.delvehold-nav: flex wrap, gap 0.4rem 1.2rem; a { color: var(--darkgray); font-size: 0.92rem; font-weight: 500; white-space: nowrap }; a:hover, a.active { color: accent }) and site/quartz/components/DelveholdMasthead.tsx:27-32 (class active and aria-current=\"page\" on the active route). Two substitutions, both ruled: font-family var(--bodyFont) (Ubuntu) for Delvehold's header font, and var(--secondary) #ff8a2a for Delvehold's purple. Ubuntu 500 is loaded (site/quartz.config.ts:36). Delvehold does not set text-decoration; the engine's base a rule has it none, so this cut does not set it either.",
|
|
"Brand sources are canonical: site/quartz.config.ts configuration.theme (body Ubuntu 300 400 500 700; secondary #ff8a2a, tertiary #59b7ff, darkgray #b7c7d9, dark #eef5ff) and custom.scss. The brand doc docs/brand-design-language.md is a guide and is amended by this cut because it will otherwise be silent on a decision the operator made.",
|
|
"The masthead component is site/quartz/components/GameCultMasthead.tsx; the nav anchor is rendered at lines 181-188 with class gamecult-nav-chip (active appended) at 184 and target/rel for external routes at 185-186. The engine's Header.css sets header { display:flex; align-items:center; margin:2rem 0; gap:1.5rem }, which the site must still beat for the masthead with display:block and its own margin.",
|
|
"Deploy is push to main -> workflow 'Deploy Quartz' -> GitHub Pages at gamecult.org; small commits; CI is the verifier. A local .\\scripts\\quartz\\quartz.ps1 build is optional on Starfire."
|
|
],
|
|
"deletes": [
|
|
{
|
|
"path": "site/quartz/styles/custom.scss",
|
|
"lines": 18,
|
|
"note": "Lines 646-665, the masthead card: position, align-items, padding, border, border-radius 22px, the radial+linear background, box-shadow, overflow are deleted. The rule survives as two declarations only: display: block; margin: 0 0 1.2rem (what beats the engine's header rule)."
|
|
},
|
|
{
|
|
"path": "site/quartz/styles/custom.scss",
|
|
"lines": 22,
|
|
"note": "Lines 730-751, .gamecult-nav-chip and its :hover/.active rule: deleted whole (999px radius, sky border and fill, Montserrat 300, orange hover fill). Replaced by the .gamecult-nav-link rules in adds."
|
|
},
|
|
{
|
|
"path": "site/quartz/styles/custom.scss",
|
|
"lines": 3,
|
|
"note": "The $mobile card padding rule, .page > #quartz-body .center > .page-header > header { padding: 0.95rem 0.95rem 1rem } (1473-1475): deleted; there is no card to pad."
|
|
}
|
|
],
|
|
"keeps_moves": [
|
|
"The masthead's structure and content are unchanged: title, tagline, community links (Patreon wordmark, GitHub, Discord with their sky glow), the nine routes, their external target/rel, and pickActiveRoute. Only the nav anchor's class and aria, and the surrounding styles, change.",
|
|
".gamecult-titlebar, -top, -copy, -title, -tagline, -nav, -community, -wordmark and -icon rules (custom.scss 667-721, 753-811) and their $mobile variants are unchanged. .gamecult-titlebar-links (722-728) keeps its rule; only its gap changes.",
|
|
"The page-header margin-top rules (638, 1469) are unchanged; the masthead's distance from the top of the page is theirs.",
|
|
"The ritual-paper essays, the colossus post, Graph, Thing, tour and Pitch keep their slug blocks; none of them styled the card or the chips, so none changes here.",
|
|
".gamecult-repo-link (960) and .gamecult-action (2206) keep their pill recipe under self-masthead-pills-first."
|
|
],
|
|
"adds": [
|
|
"GameCultMasthead.tsx line 184: class becomes gamecult-nav-link (active appended as before), and the anchor carries aria-current={active ? \"page\" : undefined}. No other change to the component.",
|
|
"custom.scss 722-728: .gamecult-titlebar-links gap becomes 0.4rem 1.2rem (Delvehold's); display, flex-wrap, min-width, align-items stay.",
|
|
"custom.scss, where the chip rules were (730-751): .gamecult-nav-link { color: var(--darkgray); font-family: var(--bodyFont); font-size: 0.92rem; font-weight: 500; white-space: nowrap; } .gamecult-nav-link:hover, .gamecult-nav-link:focus-visible, .gamecult-nav-link.active { color: var(--secondary); } Nothing else: no padding, border, radius, fill, underline, transform or ::after.",
|
|
"custom.scss 646: the surviving header rule reads .page > #quartz-body .center > .page-header > header { display: block; margin: 0 0 1.2rem; } and nothing else.",
|
|
"docs/brand-design-language.md, a new section '## Masthead' inserted before the '## Ritual Paper' heading (line 86, after the Palette section's closing paragraph): the masthead sits directly on the page ground on every page, no card, border, radius or shadow; the nav is Ubuntu 500 at 0.92rem in --darkgray, hover and active in the orange accent and nothing else (no rule, fill or underline), after the Delvehold site's nav; the active route also carries aria-current=\"page\"; the title stays Montserrat 200 uppercase tracked. Six to ten lines; reference the rules by selector, not line number. The 'Written' line (15) gains ', revised 2026-10-02'."
|
|
],
|
|
"file_changes": [
|
|
{
|
|
"location": {
|
|
"path": "site/quartz/styles/custom.scss",
|
|
"line": 646,
|
|
"end_line": 665
|
|
},
|
|
"change": "the card rule reduced to display: block; margin: 0 0 1.2rem."
|
|
},
|
|
{
|
|
"location": {
|
|
"path": "site/quartz/styles/custom.scss",
|
|
"line": 722,
|
|
"end_line": 751
|
|
},
|
|
"change": ".gamecult-titlebar-links gap becomes 0.4rem 1.2rem; the .gamecult-nav-chip rules are replaced by the .gamecult-nav-link rules."
|
|
},
|
|
{
|
|
"location": {
|
|
"path": "site/quartz/styles/custom.scss",
|
|
"line": 1473,
|
|
"end_line": 1475
|
|
},
|
|
"change": "the $mobile card padding rule deleted."
|
|
},
|
|
{
|
|
"location": {
|
|
"path": "site/quartz/components/GameCultMasthead.tsx",
|
|
"line": 181,
|
|
"end_line": 188
|
|
},
|
|
"change": "class gamecult-nav-link (+ active); aria-current=\"page\" on the active route."
|
|
},
|
|
{
|
|
"location": {
|
|
"path": "docs/brand-design-language.md",
|
|
"line": 86,
|
|
"end_line": 86
|
|
},
|
|
"change": "new '## Masthead' section inserted before '## Ritual Paper'; the 'Written' line (15) dated."
|
|
}
|
|
],
|
|
"authority_map": {
|
|
"owner": "custom.scss owns the masthead's look: one header rule that beats the engine's, the .gamecult-titlebar* rules and the .gamecult-nav-link rules. GameCultMasthead.tsx owns the masthead's content and the active route. The page's own ground (the body wash, a scoped variant's wash, the Thing hero) owns what is behind the masthead; the masthead paints none.",
|
|
"inputs": [
|
|
"the route list and the current slug (GameCultMasthead.tsx)",
|
|
"the page's tagline (gamecult.ts headerTagline)",
|
|
"the brand tokens: --bodyFont, --titleFont, --darkgray, --secondary"
|
|
],
|
|
"outputs": [
|
|
"one masthead DOM on every page with <a class=\"gamecult-nav-link\"> routes and aria-current=\"page\" on the active one",
|
|
"the masthead's type sitting on the page ground on /, /Projects, /Blog/*, the three ritual-paper essays, /Graph, the colossus post and /Thing"
|
|
],
|
|
"derived_state": [
|
|
"the active route, derived from the slug by pickActiveRoute (unchanged); its only marks are the active class and aria-current, both set in the component",
|
|
"the hover and active colour, derived from --secondary; no second orange is written"
|
|
],
|
|
"forbidden_writers": [
|
|
"no rule paints a background, border, border-radius or box-shadow on .page-header > header or on .gamecult-titlebar",
|
|
"no gamecult-nav-chip class in the component or the stylesheet; no radius, border, fill, padding, underline or ::after in the .gamecult-nav-link rules",
|
|
"no slug-scoped masthead variant: every page gets the one masthead",
|
|
"no engine edit (Header.tsx keeps its bare header rule; the site beats it with display:block and margin; the base a rule supplies text-decoration none)",
|
|
"no change to .gamecult-repo-link or .gamecult-action under self-masthead-pills-first",
|
|
"no scrollbar fix (html width) in this cut; scrollbar-fix-home is deferred"
|
|
],
|
|
"shared_paths": [
|
|
"every page renders the one GameCultMasthead through the engine's Header",
|
|
"the same Deploy Quartz workflow and Pages origin"
|
|
],
|
|
"deletion_line": "the card declarations (646-665), the mobile card padding (1473-1475) and the chip rules (730-751) are deleted in the first commit, with the component's class rename in the same commit, before the .gamecult-nav-link rules and the brand doc section are written."
|
|
},
|
|
"verification": {
|
|
"builds": [
|
|
"Deploy Quartz on GameCult/gamecult-site green for 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": "computed style of .page-header > header on /, /Projects, /Blog/small-ritual-of-reach, /Graph, the colossus post and /Thing",
|
|
"pins": "Pins operator-no-card-no-pills on every page type, including the scoped variants. Expect: computed style of .page > #quartz-body .center > .page-header > header on /, /Projects, /Blog/small-ritual-of-reach, /Graph, /Blog/the-sleeping-colossus-refuses-the-throne and /Thing: background-image none, background-color transparent, border-style none, border-radius 0px, box-shadow none, padding 0px, display block."
|
|
},
|
|
{
|
|
"name": "screenshots of /, /Projects and /Blog/small-ritual-of-reach at 1440 and 375",
|
|
"pins": "Pins operator-ground-behind-masthead. Expect: the title, tagline, community icons and nav sit on the page's own wash (the ritual essay's violet ground shows through where the navy card was); on /Thing, after deck-page-fixes, the hero's ground and rays run up behind the masthead."
|
|
},
|
|
{
|
|
"name": "computed styles of the .gamecult-nav-link anchors on /Projects, active and inactive",
|
|
"pins": "Pins operator-nav-ubuntu-links. Expect: computed style of a .gamecult-nav-link on /Projects: font-family starts with Ubuntu, font-size 14.72px, font-weight 500, white-space nowrap, text-transform none, text-decoration-line none, border-radius 0px, border-style none, background-color transparent, padding 0px; the Projects link has class active, aria-current=\"page\" and color rgb(255, 138, 42); the Studio link's color is rgb(183, 199, 217) and on :hover (emulated) rgb(255, 138, 42)."
|
|
},
|
|
{
|
|
"name": "document.querySelectorAll('.gamecult-nav-chip').length is 0 on every page sampled; '.gamecult-nav-link' is 9; exactly one carries aria-current on /Projects and none on /Thing",
|
|
"pins": "no chip survives; the active page is told to assistive tech the way Delvehold tells it."
|
|
},
|
|
{
|
|
"name": "at 375 wide on /Projects: the nav wraps into at most three rows, no link is clipped or broken mid-word, no horizontal scrollbar; the title is 1.9rem as before",
|
|
"pins": "mobile behaviour: wrap, nowrap labels, nothing hidden."
|
|
},
|
|
{
|
|
"name": "pickActiveRoute behaviour by sampling: / marks Studio, /Open-Source-Model marks Studio, /Projects/CultPong marks Projects, /Blog/project-thing marks Blog, /Thing marks nothing",
|
|
"pins": "the active route is derived exactly as before; the component change is class and aria only."
|
|
},
|
|
{
|
|
"name": "git diff base..head --stat for this cut's commits: only site/quartz/styles/custom.scss, site/quartz/components/GameCultMasthead.tsx and docs/brand-design-language.md; custom.scss net lines negative",
|
|
"pins": "a subtraction cut: the card and chips leave, less comes back."
|
|
},
|
|
{
|
|
"name": "docs/brand-design-language.md has a '## Masthead' section that names the no-card and Ubuntu-link decisions, the Delvehold precedent, and matches the live rules by selector",
|
|
"pins": "the brand doc is not silent on a decision the operator made."
|
|
}
|
|
],
|
|
"negative": [
|
|
{
|
|
"pattern": "gamecult-nav-chip",
|
|
"scope": "site/: no match in any file."
|
|
},
|
|
{
|
|
"pattern": "border-radius: 22px|box-shadow:\\s*\\n?\\s*0 20px 44px",
|
|
"scope": "site/quartz/styles/custom.scss: no match (the card's radius and shadow are gone; 22px elsewhere is .gamecult-overview-sidebar-inner at 1286 and stays)."
|
|
},
|
|
{
|
|
"pattern": "gamecult-nav-link[^{]*\\{[^}]*(border|background|padding|radius|text-transform|letter-spacing|::after|titleFont|codeFont)",
|
|
"scope": "site/quartz/styles/custom.scss, multiline: no match (the link is type and colour only, in the body font)."
|
|
},
|
|
{
|
|
"pattern": "page-header > header\\s*\\{[^}]*(background|border|box-shadow|padding)",
|
|
"scope": "site/quartz/styles/custom.scss, multiline: no match."
|
|
},
|
|
{
|
|
"pattern": "gamecult-repo-link|gamecult-action|width: auto|100vw",
|
|
"scope": "git diff base..head of this cut's commits: no match (other pills and the scrollbar fix are out of this cut)."
|
|
},
|
|
{
|
|
"pattern": "GameCult-Quartz|quartz/components/Header",
|
|
"scope": "git diff --name-only base..head: no engine file."
|
|
}
|
|
],
|
|
"operator": [
|
|
"look at https://gamecult.org/, /Projects and /Thing on a desktop and a phone and say whether the masthead on the ground reads as the site's, and whether the Ubuntu links are the Delvehold treatment you meant"
|
|
]
|
|
},
|
|
"estimate": {
|
|
"lines_added": 22,
|
|
"lines_removed": 43,
|
|
"dependencies_added": [],
|
|
"dependencies_removed": [],
|
|
"formats_added": [],
|
|
"formats_removed": [],
|
|
"targets_added": [],
|
|
"targets_removed": []
|
|
},
|
|
"rulings": [
|
|
"site-masthead:ruling:operator-ground-behind-masthead",
|
|
"site-masthead:ruling:operator-no-card-no-pills",
|
|
"site-masthead:ruling:operator-nav-ubuntu-links",
|
|
"site-masthead:ruling:self-masthead-pills-first"
|
|
],
|
|
"questions": []
|
|
}
|