Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .impeccable/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"rule": "cramped-padding",
"value": "*",
"files": [
"site/index.html"
"docs/index.html"
],
"createdAt": "2026-09-23T18:40:39.129Z",
"reason": "agent: sections, table cells and plates pad with clamp()/nested padding the static scan can't resolve; checked in screenshots"
Expand All @@ -16,7 +16,7 @@
"rule": "cramped-padding",
"value": "*",
"files": [
"site/install.html"
"docs/install.html"
],
"createdAt": "2026-09-23T18:40:39.262Z",
"reason": "agent: sections, table cells and plates pad with clamp()/nested padding the static scan can't resolve; checked in screenshots"
Expand All @@ -25,7 +25,7 @@
"rule": "cramped-padding",
"value": "*",
"files": [
"site/faq.html"
"docs/faq.html"
],
"createdAt": "2026-09-23T18:40:39.393Z",
"reason": "agent: sections, table cells and plates pad with clamp()/nested padding the static scan can't resolve; checked in screenshots"
Expand All @@ -34,7 +34,7 @@
"rule": "cramped-padding",
"value": "*",
"files": [
"site/troubleshooting.html"
"docs/troubleshooting.html"
],
"createdAt": "2026-09-23T18:40:39.530Z",
"reason": "agent: sections, table cells and plates pad with clamp()/nested padding the static scan can't resolve; checked in screenshots"
Expand All @@ -43,7 +43,7 @@
"rule": "flat-type-hierarchy",
"value": "*",
"files": [
"site/404.html"
"docs/404.html"
],
"createdAt": "2026-09-23T18:40:39.661Z",
"reason": "agent: 404 loads /MixedStorage/assets/style.css by absolute path (a site-test contract), which the static scan can't read"
Expand Down
20 changes: 10 additions & 10 deletions .impeccable/design.json
Original file line number Diff line number Diff line change
Expand Up @@ -474,37 +474,37 @@
"materials": [
{
"name": "walnut",
"file": "site/assets/textures/walnut.webp",
"file": "docs/assets/textures/walnut.webp",
"size": "720x180",
"use": "background-size 720px auto; tiles both ways; per-drawer background-position offsets so neighbours don't repeat grain; fallback #3a2416 (carcass) / #5d3c28 (drawer)."
},
{
"name": "kraft",
"file": "site/assets/textures/kraft.webp",
"file": "docs/assets/textures/kraft.webp",
"size": "200x200",
"use": "background-size 200px; tiles both ways; label cards, step numbers, toc cards, pressed split."
},
{
"name": "brass",
"file": "site/assets/textures/brass.webp",
"file": "docs/assets/textures/brass.webp",
"size": "512x64",
"use": "background-size auto 100%, centred; Download plate and note tabs."
},
{
"name": "holder",
"file": "site/assets/textures/holder.png",
"file": "docs/assets/textures/holder.png",
"size": "112x56",
"use": "nine-slice: border-image-slice 16, stretch; border-width 11px 14px (holder), 8px 9px (steps), 7px 9px (toc); background-clip padding-box over kraft."
},
{
"name": "pull",
"file": "site/assets/textures/pull.png",
"file": "docs/assets/textures/pull.png",
"size": "96x40",
"use": "single image, contain; 60x25 on drawers, 38x16 on accordions."
},
{
"name": "generator",
"file": "site/assets/textures/make_textures.py",
"file": "docs/assets/textures/make_textures.py",
"use": "numpy + Pillow, fixed seed 1200, no source images, no generative model."
}
],
Expand Down Expand Up @@ -585,8 +585,8 @@
{
"name": "In-game panel replica",
"files": [
"site/assets/game-panel.css",
"site/assets/demo.js"
"docs/assets/game-panel.css",
"docs/assets/demo.js"
],
"note": "Reproduces the mod's panel in the game's colours, frames and Noto Sans; reads only --ink, --muted, --edge and --orange from the site. Not site style: don't reuse it or restyle it."
}
Expand Down Expand Up @@ -676,7 +676,7 @@
],
"narrative": {
"northStar": "The Apothecary Drawer Cabinet",
"overview": "The site is one walnut cabinet standing against a painted wall. Every drawer is a good, and each drawer's height is that good's share of the building. Brass label holders carry kraft cards, brass cup pulls sit under them, and the goods keep the game's own icons. The idea is literal: the hero cabinet redraws its drawers with the mod's own rounding, and the rules section draws the same share at three capacities at true scale, with a leader line and a dimension bracket, like a measured folio drawing.\n\nMaterials are real and made, not faked. Walnut, brass and kraft are procedural textures (`site/assets/textures/make_textures.py`, fixed seed, no source images, no generative model). Walnut tiles so a drawer of any height keeps its grain, the brass label holder is a nine-slice border image, and the pull is one image used on every drawer face and every accordion. CSS supplies only edge lines, recesses and cast shadows over those textures. The wall behind the cabinet is plain paint: sage limewash by day, deep verdigris by lamplight. Walnut, brass and kraft keep their values in both modes, because they are materials, not themes.\n\nDensity is calm and reading-first. Type is split by job. Alegreya SC, engraved brass-label small caps, names things: the wordmark, headings, labels, buttons, counts. The system face carries every sentence. The in-game panel replica (`game-panel.css`, `demo.js`) is a contained exception. It reproduces the mod's panel in the game's own look and is not part of this system.",
"overview": "The site is one walnut cabinet standing against a painted wall. Every drawer is a good, and each drawer's height is that good's share of the building. Brass label holders carry kraft cards, brass cup pulls sit under them, and the goods keep the game's own icons. The idea is literal: the hero cabinet redraws its drawers with the mod's own rounding, and the rules section draws the same share at three capacities at true scale, with a leader line and a dimension bracket, like a measured folio drawing.\n\nMaterials are real and made, not faked. Walnut, brass and kraft are procedural textures (`docs/assets/textures/make_textures.py`, fixed seed, no source images, no generative model). Walnut tiles so a drawer of any height keeps its grain, the brass label holder is a nine-slice border image, and the pull is one image used on every drawer face and every accordion. CSS supplies only edge lines, recesses and cast shadows over those textures. The wall behind the cabinet is plain paint: sage limewash by day, deep verdigris by lamplight. Walnut, brass and kraft keep their values in both modes, because they are materials, not themes.\n\nDensity is calm and reading-first. Type is split by job. Alegreya SC, engraved brass-label small caps, names things: the wordmark, headings, labels, buttons, counts. The system face carries every sentence. The in-game panel replica (`game-panel.css`, `demo.js`) is a contained exception. It reproduces the mod's panel in the game's own look and is not part of this system.",
"keyCharacteristics": [
"One metaphor, used to the letter: capacity is a cabinet, a share is a drawer's height.",
"Produced material textures (walnut, brass, kraft), tiled or nine-sliced, never imitated with gradients.",
Expand Down Expand Up @@ -722,7 +722,7 @@
}
],
"dos": [
"Do take walnut, brass and kraft from the produced textures in `site/assets/textures/` (regenerate with `make_textures.py`). Tile walnut at 720px, kraft at 200px, and fit brass to the element's height.",
"Do take walnut, brass and kraft from the produced textures in `docs/assets/textures/` (regenerate with `make_textures.py`). Tile walnut at 720px, kraft at 200px, and fit brass to the element's height.",
"Do frame kraft cards with the brass holder nine-slice (`border-image: url(textures/holder.png) 16`) and `background-clip: padding-box`. Scale the border width to the element (7–11px vertical).",
"Do use the brass cup pull as the one \"this opens\" sign, on drawers and accordions alike.",
"Do set every count, capacity and percentage in tabular figures, and draw proportions at true share.",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
version: 1
slug: "site-index-html"
primary_target: "site/index.html"
related_targets: ["site/install.html","site/troubleshooting.html","site/faq.html","site/404.html"]
primary_target: "docs/index.html"
related_targets: ["docs/install.html","docs/troubleshooting.html","docs/faq.html","docs/404.html"]
---

# Surface brief: MixedStorage site (site/index.html with install, troubleshooting, faq, 404)
# Surface brief: MixedStorage site (docs/index.html with install, troubleshooting, faq, 404)

Scope: site/. Home: Persuade. Guides: Read. Audience: Timberborn players short on storage; mostly single player, some Stability Fork co-op. Action: understand the percentage mechanism, download the right zip, install right, set up a first mixed building. Proof: the working panel replica, real in-game screenshots (panel.webp, world.webp), exact rounding. Constraints: tests/test-site.mjs contracts (download buttons, /releases/latest fallbacks, hidden stays hidden, 404 absolute paths, same release.js config); release.js byte-identical; describe the mod as it is now; decided by the agent under the maintainer's delegation (no question rounds).
Scope: docs/. Home: Persuade. Guides: Read. Audience: Timberborn players short on storage; mostly single player, some Stability Fork co-op. Action: understand the percentage mechanism, download the right zip, install right, set up a first mixed building. Proof: the working panel replica, real in-game screenshots (panel.webp, world.webp), exact rounding. Constraints: tests/test-site.mjs contracts (download buttons, /releases/latest fallbacks, hidden stays hidden, 404 absolute paths, same release.js config); release.js byte-identical; describe the mod as it is now; decided by the agent under the maintainer's delegation (no question rounds).

## Direction contract

Expand Down
Loading