Mushroom Alien Games Get in touch

Mushroom Alien Games — Website Devlog

Append-only. New entries at the bottom.


2026-08-26 — Phase 1 session

Branch: redesign Changed:

Decisions flagged:

DoD check (Phase 1, per BUILD_BRIEF.md):

Gotchas:

2026-08-26 — Phase 1 follow-up: badge-only crop

Branch: redesign Changed:

Decisions flagged:

2026-08-26 — Phase 1 follow-up: header wordmark restored beside badge

Branch: redesign Changed:

Decisions flagged:

2026-08-27 — Fix: .wrap/.hero padding-shorthand collision (zero horizontal margin on real devices)

Branch: redesign Changed: root cause confirmed by Willem — .wrap{ padding: 0 var(--sp-24); }’s 2-value shorthand explicitly zeroes padding-top/padding-bottom, not just the intended horizontal gutter. Combined with .hero{ padding: var(--sp-64) 0 var(--sp-48); } on the same element (<section class="hero wrap">), both are single-class selectors at tied specificity, so source order decides — .hero is declared later in the file and wins outright, zeroing left/right in the process. Result: hero content had no horizontal margin on real devices.

Verification: rebuild is clean. Padding math confirmed by hand-tracing CSS cascade/specificity rules for every affected selector pair (not guessed) — no browser available in this container to render and confirm at an actual 375px viewport, so Willem is checking that directly against the running jekyll serve instance rather than me claiming a render I can’t produce.

Contrast re-check, computed (WCAG 2.1 relative luminance, same method as DESIGN_SYSTEM.md’s table):

teal on substrate         11.01  (AA-body pass, UI pass)
teal-faded on substrate     4.99  (AA-body pass, UI pass)
orange on substrate         3.64  (AA-body fail, UI pass) — orange only ever used at UI/large-text size, confirmed
teal on panel               10.05 (AA-body pass, UI pass)
teal-faded on panel          4.55 (AA-body pass, UI pass) — tightest margin introduced this session (.caption/.game-card p/.update-excerpt/.game-more inside .panel); worth a visual gut-check on preview
orange on panel              3.32 (AA-body fail, UI pass) — not actually used anywhere
substrate on orange          3.64 (AA-body fail, UI pass) — .cta-button text, UI-component sized, consistent with the locked exception

2026-08-27 — Phase 1 Amendment: dark background revision (DESIGN_SYSTEM.md v0003)

Branch: redesign Changed:

Selector-by-selector reclassification (assets/css/main.css unless noted):

Selector Context New value
body background page var(--ink)
body color page-bg text var(--substrate)
a (global fallback — live via the homepage’s “All updates →” link) page-bg var(--cream-faded)
header.site background header bar var(--ink)
.brand-wordmark header, dark bar var(--substrate)
nav.site-links a header, dark bar var(--cream-faded)
nav.site-links a:hover/:focus-visible header, dark bar var(--substrate)
.sticky-cta background explicit ask var(--ink)
.cta-button:hover/:focus-visible background self-contained button fill, not a page/panel text role unchanged, var(--teal-faded)
.caption (base) shared — split base var(--cream-faded); new .panel .caption{ color: var(--teal-faded); }
.eyebrow hero, page-bg var(--cream-faded)
h1.tagline hero, page-bg var(--substrate)
.hook hero, page-bg var(--cream-faded)
h2.section-title page-bg var(--substrate)
.lede page-bg var(--cream-faded)
.label-facts dt page-bg var(--cream-faded)
.label-facts dd page-bg var(--substrate)
.game-card:hover/:focus-visible border-color panel border unchanged, var(--teal-faded)
.game-card h3 panel var(--ink)
.game-card p panel unchanged, var(--teal-faded)
.game-card .game-more panel unchanged, var(--teal-faded)
.update-tag (base) shared — split base var(--cream-faded); new .panel .update-tag{ color: var(--teal-faded); }
.update-item h3 a panel var(--ink)
.update-item h3 a:hover/:focus-visible panel unchanged, var(--teal-faded)
.update-item .update-excerpt panel unchanged, var(--teal-faded)
.post-header h1 page-bg var(--substrate)
.post-body (+ h2/h3) page-bg var(--substrate)
.post-body a page-bg var(--cream-faded)
.footer-contact (+ a) footer inherits body bg (--ink) var(--cream-faded)

.fig-label and h1.tagline em (orange) untouched — no --teal/--teal-faded involved, already vetted per DESIGN_SYSTEM.md.

Decisions flagged:

DoD check (this session’s Acceptance criteria):

Gotchas:

2026-08-27 — Phase 1 session: field-texture SVG replacement

Branch: redesign Changed: Replaced .field-texture’s diagonal crosshatch (repeating-linear-gradient ×2, main.css:50-60) with a new SVG asset assets/img/brand/field-texture-tile.svg (512×512 viewBox). Composition: Cluster A (spore-burst/star-cluster, center 120,150) — 5 irregular-angle rays (20-30px, #C9BFA6 stroke, opacity 0.35) each ending in a tiny dot (r1.8, opacity 0.4), plus a centre dot (r1.5, #B7AE94, opacity 0.3). Cluster B — same idea, center 380,340, 4 rays. One orbital arc: quadratic curve M 24,486 Q 320,170 488,26, #B7AE94 stroke, opacity 0.3. 11 individually-placed scattered dots (r1.1-2.2, opacity 0.18-0.3), alternating the two colours, not grid-aligned. No orange, no gradients, no <defs>. Colours are the literal hex of --rule (#C9BFA6) and --cream-faded (#B7AE94) rather than var(...) — a standalone SVG loaded via background-image: url() has no access to the host page’s CSS custom properties. Wired in via background-image: url("/assets/img/brand/field-texture-tile.svg") + background-repeat: repeat, replacing the old gradient declarations. Also changed .field-texture from position: fixed to position: absolute (now scrolls with the page rather than staying pinned — keeps clear of the “no parallax” rule) and moved the fade control from container-level opacity (was 0.5) into per-element SVG opacities (container opacity now 1, single dial instead of two multiplying). Documented in DESIGN_SYSTEM.md: new asset-inventory row for field-texture-tile.svg, new .field-texture entry in the Components section. Decisions flagged: SVG hardcodes literal --rule/--cream-faded hex rather than var() — needs a manual re-point if either token’s hex value ever changes (noted in DESIGN_SYSTEM.md’s asset row). Per-element opacities (0.18-0.4 range) are a starting point per the brief, not locked — flag back after a real visual look if it reads too busy or too faint. Did not touch legacy-game.css’s .legacy-navy-gold .field-texture override (still its own independent gradient/opacity, out of scope) or Salt & Stone’s page body. DoD check: .field-texture no longer uses the crosshatch gradient — confirmed via curl against the already-running bundle exec jekyll serve --host 0.0.0.0 (auto-regenerated cleanly): served main.css shows the new rule, field-texture-tile.svg returns 200, and class="field-texture" is present in the rendered HTML of /, /games/, and /updates/ (sitewide via _layouts/default.html, not page-specific). Not a visual/rendered check — no browser tooling in this container, so whether the pattern actually reads as sparse organic marks (vs. too busy/too faint) at real tile size hasn’t been seen. Needs Willem’s preview pass over Tailscale, specifically: does the pattern read as organic rather than a repeating technical grid, are the two clusters/arc/scattered dots legible at normal viewport size, and do the opacity values (0.18-0.4) feel right or need tuning.

2026-08-28 — Phase 1 fix: field-texture full-page height

Branch: redesign Changed: Willem’s preview caught that .field-texture (position: absolute, inset: 0) was sizing to viewport height only, not full document height — with no positioned ancestor, an absolutely-positioned element’s containing block is the initial containing block (viewport), not the document. Fixed by adding position: relative to body (main.css, body{} rule), making body the containing block so inset:0 now stretches .field-texture to body’s actual rendered (full-page) height. Decisions flagged: Checked every other position: declaration in main.css and legacy-game.css before making the change, to confirm nothing relied on body staying unpositioned — header.site/.hero/section/footer are each position: relative purely for their own z-index stacking above .field-texture, self-contained regardless of body; .sticky-cta is position: fixed (viewport-relative, unaffected since body gets no transform/filter/perspective); legacy-game.css’s .face{position:absolute; inset:0;} is scoped inside its own position: relative ancestor (.flip-card button), independent of body. No side effects found. No other changes — composition, colours, opacity, tile size unchanged from the prior entry. DoD check: Confirmed via curl against the running server that main.css serves the updated body{} rule (position: relative present) with no syntax breakage and .field-texture’s rule is unchanged. Per Willem’s instruction, server-side inspection was sufficient for this fix — visual confirmation of full-page coverage is his to do.

2026-08-28 — Phase 1 fix: field-texture-tile.svg orbital arc seam

Branch: redesign Changed: Willem’s preview caught visible breaks at tile boundaries where the orbital arc repeated — the old arc (M 24,486 Q 320,170 488,26) started/ended near but not exactly at the tile edges with no wraparound continuity authored, so each repeated tile drew a disconnected copy at the seam. Fixed by redrawing the arc fully inside the tile interior instead of attempting edge-to-edge wraparound geometry: new path is M 60,450 Q 170,240 300,320 (assets/img/brand/field-texture-tile.svg). Same stroke/colour/opacity as before (#B7AE94, stroke-width 1.2, opacity 0.3, round linecap) — only the coordinates changed. Decisions flagged: New arc’s three control points (start/control/end) all sit within x:[60,300], y:[240,450] — since a quadratic Bezier’s x(t)/y(t) are convex combinations of its control points, the curve never leaves that bounding box, giving a guaranteed minimum margin of 60px from the left/bottom edges (512px tile) and well over 200px from top/right — comfortably past the requested ~40-50px minimum. Positioned in the open lower-left area so it doesn’t overlap either spore cluster (Cluster A’s rays stay above y=180; Cluster B sits at x≥354) — some overlap with a few scattered dots in that area is fine, reads as organic layering rather than a seam artifact. Both clusters, all scattered dots, colours, opacity, and tile size are unchanged from the prior entries — this was a contained, single-element fix. DoD check: Confirmed via curl against the running server that the SVG serves (200) with the new <path> element present and well-formed. Per Willem’s instruction, server-side inspection was sufficient — visual confirmation that the seam is actually gone at tile boundaries is his to do.

2026-08-28 — Phase 1 rework: field-texture switched to two-layer parallax-free tiling

Branch: redesign Changed: Willem flagged that the single-tile field-texture-tile.svg (three rounds in) still read as an obvious repeating stamp — same motifs, same spacing, easy to pattern-match. Switched construction entirely: deleted field-texture-tile.svg (untracked, never committed — safe to remove) and replaced it with two independently-sized SVGs layered via CSS multiple backgrounds so their repeat periods don’t align:

2026-08-28 — Phase 1 fix: constellation tile enlarged + multi-curve, mycelium/constellation brightness bumped

Branch: redesign Changed: Willem flagged the constellation tile’s single repeating arc as still pattern-matchable (same line reappearing). Enlarged field-texture-constellation.svg from 460×460 to 727×727 and replaced the one arc with 4 distinct curves — different curvature direction, scale, and quadrant, all ≥50px clear of every edge (verified: minimum observed margin ~60px on curve 1, others 77-327px):