From d64909decf0cc39d7d8929f8918d76f52bf6d6e4 Mon Sep 17 00:00:00 2001 From: Abdul Wahab Date: Thu, 23 Jul 2026 08:26:44 +0500 Subject: [PATCH] Reconcile questionnaire branch with main's site split and redesign Post-rebase repairs after main moved 226 commits (site/ split to the private impeccable-site repo, DESIGN.md spec now eight sections, register extraction replaced by extractSectionValue, seed mode rewritten): - document.md: transplant this branch's seed pipeline (assets, interview, visual cues, picker) onto main's rewritten file; adopt the canonical section vocabulary. The interplay with new-work's workshop is left for PR review. - picker: vendor kinpaku tokens/kit CSS, hero art, and favicon under picker/ (site/ no longer exists here); drop the sharp resize step and ship the compressed JPEG directly; declare astro/sharp-free deps. - picker-server: read the register via extractSectionValue('Register') since extractRegister is gone from context.mjs. - palette.mjs / utils.js / test-suites.mjs / package.json / release.mjs: rebuild as main's version plus this branch's additions, undoing hunks the -X theirs replay had clobbered. - craft.md / shape.md: reset to main (this branch's net change was zero). - progress bar: animate transform instead of width (design hook finding). Validation: bun run build green (prose validators clean), bun run test 198/198, picker-server suite 7/7. AI-assisted (agent-implemented, maintainer-directed). Co-authored-by: Cursor --- package.json | 6 +- picker/assets/favicon.svg | 13 + picker/assets/hero-light.jpg | Bin 0 -> 180083 bytes picker/styles/picker.css | 12 +- picker/styles/vendor/kinpaku-kit.css | 1638 +++++++++++++++++++++++ picker/styles/vendor/kinpaku-tokens.css | 205 +++ scripts/build-picker.mjs | 15 +- scripts/lib/utils.js | 2 +- scripts/test-suites.mjs | 1 - skill/reference/craft.md | 120 +- skill/reference/document.md | 13 +- skill/reference/shape.md | 105 +- skill/scripts/palette.mjs | 231 ++-- skill/scripts/picker-server.mjs | 5 +- 14 files changed, 2002 insertions(+), 364 deletions(-) create mode 100644 picker/assets/favicon.svg create mode 100644 picker/assets/hero-light.jpg create mode 100644 picker/styles/vendor/kinpaku-kit.css create mode 100644 picker/styles/vendor/kinpaku-tokens.css diff --git a/package.json b/package.json index a09f2ae30..fa8e324f6 100644 --- a/package.json +++ b/package.json @@ -43,9 +43,8 @@ "build:picker": "node scripts/build-picker.mjs", "build:skills": "bun run scripts/build.js --skip-root-sync", "build:skills:release": "bun run scripts/build.js", - "build:site": "npx astro build", - "build": "bun run build:picker && bun run build:skills && bun run build:site && cp -R dist build/_data/dist", - "build:release": "bun run build:picker && bun run build:skills:release && bun run build:site && cp -R dist build/_data/dist", + "build": "bun run build:picker && bun run build:skills && mkdir -p build/_data && rm -rf build/_data/dist && cp -R dist build/_data/dist", + "build:release": "bun run build:picker && bun run build:skills:release && mkdir -p build/_data && rm -rf build/_data/dist && cp -R dist build/_data/dist", "build:browser": "node scripts/build-browser-detector.js", "build:extension": "node scripts/build-extension.js", "clean": "rm -rf dist build", @@ -95,6 +94,7 @@ "@babel/parser": "^8.0.4", "ai": "^7.0.14", "archiver": "^8.0.0", + "astro": "^7.0.0", "playwright": "^1.59.1", "svelte": "^5", "zod": "^4.3.6" diff --git a/picker/assets/favicon.svg b/picker/assets/favicon.svg new file mode 100644 index 000000000..a6c6d2979 --- /dev/null +++ b/picker/assets/favicon.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/picker/assets/hero-light.jpg b/picker/assets/hero-light.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3837d59e81496a7a1f0f7feb5b50032c6fdaee4 GIT binary patch literal 180083 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≷oCkLN~QH-Z7sPOJ&z` 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 literal 0 HcmV?d00001 diff --git a/picker/styles/picker.css b/picker/styles/picker.css index c732a6c49..a92b3360a 100644 --- a/picker/styles/picker.css +++ b/picker/styles/picker.css @@ -1,5 +1,7 @@ -@import "../../site/styles/kinpaku-tokens.css"; -@import "../../site/styles/kinpaku-kit.css"; +/* Vendored from the site's design system (now in the private impeccable-site + repo) so the picker stays self-contained. Update by re-copying from there. */ +@import "./vendor/kinpaku-tokens.css"; +@import "./vendor/kinpaku-kit.css"; /* Scoped subset of the reset imported by site/styles/main.css through site/styles/tokens.css (lines 12-27). */ @@ -170,10 +172,12 @@ html.light .ks-button.ks-button-primary:active { .picker-progress span { display: block; - width: calc(var(--progress, 0) * 100%); + width: 100%; height: 100%; background: var(--ks-champagne); - transition: width 180ms var(--ks-ease); + transform: scaleX(var(--progress, 0)); + transform-origin: left; + transition: transform 180ms var(--ks-ease); } #picker-form[data-current="01"] .picker-progress { diff --git a/picker/styles/vendor/kinpaku-kit.css b/picker/styles/vendor/kinpaku-kit.css new file mode 100644 index 000000000..a65db442a --- /dev/null +++ b/picker/styles/vendor/kinpaku-kit.css @@ -0,0 +1,1638 @@ +/* ============================================================================ + Impeccable — Neo Kinpaku kit (page-global primitives) + + Reusable component primitives lifted from /design-system so they work on + every page. Brand lockup, section scaffolding, buttons, form controls, + tabs, badges, tags, pagination, toasts, tooltips, modal, empty state, + changelog, skeleton. No `.kinpaku-system-page` scope — drop these classes + onto any element on any page. + + All values resolve through kinpaku-tokens.css. If a token name changes + there, this file follows. + + Imported globally from Base.astro so every page picks them up. + ============================================================================ */ + + +/* ============================================================ + Brand lockup — mark + wordmark + ============================================================ */ + +.ks-brand { + display: inline-flex; + align-items: center; + gap: 4px; + text-decoration: none; +} + +.ks-mark { + width: 38px; + height: 38px; + display: grid; + place-items: center; + color: var(--ks-kinpaku); +} + +.ks-mark svg { width: 32px; height: 32px; } + +.ks-wordmark { + color: var(--ks-kinpaku); + font-family: var(--ks-font-wordmark); + font-weight: 400; + font-size: 1.3rem; + letter-spacing: 0.15em; + text-transform: uppercase; + line-height: 1; + -webkit-font-smoothing: auto; +} + + +/* ============================================================ + Section scaffolding — page-level sections, eyebrows, subsections + ============================================================ */ + +.ks-section { + max-width: 1320px; + margin: 0 auto; + padding: 110px 56px; +} + +.ks-section + .ks-section { + border-top: 1px solid var(--ks-rule); +} + +.ks-section-head { + display: grid; + gap: 14px; + margin-bottom: 56px; + max-width: 720px; +} + +.ks-section-eyebrow { + color: var(--ks-kinpaku); + font-family: var(--ks-mono); + font-size: 0.7rem; + letter-spacing: 0.28em; + text-transform: uppercase; + margin: 0; +} + +.ks-section-head h2 { + margin: 0; + color: var(--ks-champagne); + font-family: var(--ks-font-display); + font-size: clamp(2.2rem, 3.6vw, 3rem); + font-weight: var(--ks-type-headline-weight); + line-height: 1.06; + letter-spacing: -0.005em; +} + +.ks-subsection { + margin-top: 56px; +} + +.ks-subsection-label { + display: block; + color: var(--ks-kinpaku); + font-family: var(--ks-mono); + font-size: 0.66rem; + letter-spacing: 0.24em; + text-transform: uppercase; + margin-bottom: 22px; +} + +.ks-section-sub { + color: var(--ks-text-muted); + font-size: 0.96rem; + line-height: 1.55; + margin: 4px 0 0; + max-width: 60ch; +} + + +/* ============================================================ + Buttons — primary, secondary, ghost, disabled + ============================================================ */ + +.ks-button { + --b-shift: 0; + position: relative; + min-height: 52px; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 14px; + padding: 0 28px; + border-radius: 2px; + font-size: 0.96rem; + font-weight: 500; + line-height: 1; + text-decoration: none; + border: 1px solid transparent; + cursor: pointer; + transition: transform 180ms var(--ks-ease), background-color 180ms var(--ks-ease), border-color 180ms var(--ks-ease), color 180ms var(--ks-ease); +} + +.ks-button .ks-button-arrow { + width: 16px; + height: 8px; + display: inline-block; + flex: none; +} + +.ks-button-arrow svg { width: 100%; height: 100%; display: block; } + +/* Warm-gold flat primary. Hover lifts to pale; active darkens to rich. + Variants chain on .ks-button so specificity (0,2,0) wins over generic page + anchor resets like `.kinpaku-system-page a { color: inherit }` (0,1,1). + Use class="ks-button ks-button-primary" — both classes required. */ +.ks-button.ks-button-primary { + color: var(--ks-lacquer-deep); + background: var(--ks-kinpaku); + border-color: var(--ks-kinpaku); +} + +.ks-button.ks-button-primary:hover { + background: var(--ks-kinpaku-pale); + border-color: var(--ks-kinpaku-pale); + color: var(--ks-lacquer-deep); + transform: translateY(-1px); +} + +.ks-button.ks-button-primary:active { + transform: translateY(0); + background: var(--ks-kinpaku-rich); + border-color: var(--ks-kinpaku-rich); +} + +.ks-button.ks-button-secondary { + color: var(--ks-kinpaku); + background: transparent; + border-color: var(--ks-kinpaku); +} + +.ks-button.ks-button-secondary:hover { + background: oklch(77% 0.14 82 / 0.08); + color: var(--ks-kinpaku); + transform: translateY(-1px); +} + +.ks-button.ks-button-secondary:active { + background: oklch(77% 0.14 82 / 0.16); + transform: translateY(0); +} + +.ks-button.ks-button-ghost { + color: var(--ks-champagne); + background: transparent; + border-color: transparent; + padding: 0 14px; +} + +.ks-button.ks-button-ghost:hover { + color: var(--ks-kinpaku); +} + +.ks-button[disabled], +.ks-button.ks-button-disabled { + color: var(--ks-text-mute-deep); + background: transparent; + border-color: var(--ks-rule); + cursor: not-allowed; + transform: none !important; +} + +.ks-button:focus-visible { + outline: 2px solid var(--ks-patina); + outline-offset: 3px; +} + +.ks-button-row { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 18px; +} + + +/* ============================================================ + Form controls — input, toggle, checkbox, select + ============================================================ */ + +.ks-form-sample { + display: grid; + gap: 22px; + max-width: 360px; +} + +.ks-form-sample label { + display: grid; + gap: 8px; + color: var(--ks-text-muted); + font-size: 0.82rem; + letter-spacing: 0.04em; +} + +.ks-form-sample input[type="search"], +.ks-form-sample input[type="text"] { + min-height: 46px; + padding: 0 14px; + border: 1px solid var(--ks-rule); + border-radius: 2px; + background: var(--ks-lacquer-raised); + color: var(--ks-champagne); + font-size: 0.92rem; +} + +.ks-form-sample input[type="search"]:focus, +.ks-form-sample input[type="text"]:focus { + outline: none; + border-color: var(--ks-patina); +} + +.ks-toggle { + display: flex !important; + align-items: center; + gap: 12px !important; +} + +.ks-toggle input { + appearance: none; + width: 44px; + height: 24px; + border-radius: 999px; + border: 1px solid var(--ks-rule); + background: var(--ks-graphite); + position: relative; + cursor: pointer; + flex: none; +} + +.ks-toggle input::before { + content: ""; + position: absolute; + width: 16px; + height: 16px; + left: 3px; + top: 3px; + border-radius: 999px; + background: var(--ks-text-muted); + transition: transform 220ms var(--ks-ease), background 220ms var(--ks-ease); +} + +.ks-toggle input:checked { + border-color: var(--ks-patina); + background: oklch(48% 0.08 188 / 0.2); +} + +.ks-toggle input:checked::before { + transform: translateX(20px); + background: var(--ks-patina); +} + +.ks-toggle span { color: var(--ks-champagne); font-size: 0.92rem; } + +.ks-checkbox { + display: flex; + align-items: center; + gap: 10px; + color: var(--ks-champagne); + font-size: 0.92rem; + cursor: pointer; +} + +.ks-checkbox input { + appearance: none; + width: 18px; + height: 18px; + border: 1px solid var(--ks-rule); + border-radius: 2px; + background: var(--ks-lacquer-raised); + position: relative; + cursor: pointer; + flex: none; +} + +.ks-checkbox input:checked { + border-color: var(--ks-kinpaku); + background: var(--ks-kinpaku); +} + +.ks-checkbox input:checked::after { + content: ""; + position: absolute; + left: 5px; + top: 2px; + width: 5px; + height: 9px; + border: solid var(--ks-lacquer-deep); + border-width: 0 1.5px 1.5px 0; + transform: rotate(45deg); +} + +.ks-select { + appearance: none; + min-height: 46px; + padding: 0 38px 0 14px; + border: 1px solid var(--ks-rule); + border-radius: 2px; + background-color: var(--ks-lacquer-raised); + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6' fill='none' stroke='%23c89a5a' stroke-width='1.2'%3E%3Cpath d='M1 1l4 4 4-4'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 14px center; + background-size: 10px 6px; + color: var(--ks-champagne); + font-size: 0.92rem; + cursor: pointer; +} + + +/* ============================================================ + Tabs + ============================================================ */ + +.ks-tabs { max-width: 460px; } + +.ks-tab-list { display: flex; border-bottom: 1px solid var(--ks-rule); } + +.ks-tab-list button { + flex: 1; + min-height: 42px; + border: 0; + border-bottom: 2px solid transparent; + background: transparent; + color: var(--ks-text-muted); + cursor: pointer; + font-size: 0.92rem; + transition: color 180ms var(--ks-ease), border-color 180ms var(--ks-ease); +} + +.ks-tab-list button:hover { color: var(--ks-champagne); } + +.ks-tab-list button[aria-selected="true"] { + color: var(--ks-kinpaku); + border-bottom-color: var(--ks-kinpaku); +} + +.ks-tab-panel { + padding: 22px 4px 0; + color: var(--ks-champagne); + font-size: 0.92rem; + line-height: 1.6; +} + + +/* ============================================================ + Status badges + issue tags + ============================================================ */ + +.ks-badge-row { + display: flex; + flex-wrap: wrap; + gap: 12px; +} + +.ks-badge { + display: inline-flex; + align-items: center; + gap: 8px; + min-height: 30px; + padding: 0 14px; + border: 1px solid currentColor; + border-radius: 2px; + font-size: 0.78rem; + letter-spacing: 0.06em; +} + +.ks-badge::before { + content: ""; + width: 6px; + height: 6px; + border-radius: 999px; + background: currentColor; +} + +.ks-badge.is-detected { color: var(--ks-vermilion); } +.ks-badge.is-improved { color: var(--ks-patina); } +.ks-badge.is-ready { color: var(--ks-kinpaku); } + +.ks-tag-row { + display: flex; + flex-wrap: wrap; + gap: 10px; +} + +.ks-tag { + display: inline-flex; + align-items: center; + min-height: 26px; + padding: 0 12px; + border: 1px solid currentColor; + border-radius: 999px; + font-size: 0.76rem; + letter-spacing: 0.04em; +} + +.ks-tag.is-detected { color: var(--ks-vermilion); } +.ks-tag.is-improved { color: var(--ks-patina); } +.ks-tag.is-neutral { color: var(--ks-text-muted); } +.ks-tag.is-ready { color: var(--ks-kinpaku); } + + +/* ============================================================ + Pagination + ============================================================ */ + +.ks-pagination { + display: flex; + align-items: center; + gap: 4px; +} + +.ks-pagination button { + min-width: 36px; + min-height: 36px; + display: grid; + place-items: center; + border: 1px solid var(--ks-rule); + border-radius: 2px; + background: transparent; + color: var(--ks-champagne); + font-size: 0.86rem; + cursor: pointer; + transition: border-color 180ms var(--ks-ease), color 180ms var(--ks-ease); +} + +.ks-pagination button:hover { + border-color: var(--ks-kinpaku); + color: var(--ks-kinpaku); +} + +.ks-pagination button[aria-current="page"] { + border-color: var(--ks-kinpaku); + color: var(--ks-kinpaku); +} + + +/* ============================================================ + Toast / alert + ============================================================ */ + +.ks-toast { + display: grid; + grid-template-columns: auto 1fr auto; + gap: 14px; + align-items: center; + padding: 14px 18px; + border: 1px solid currentColor; + border-radius: 2px; + max-width: 420px; +} + +.ks-toast-icon { + width: 18px; + height: 18px; + display: grid; + place-items: center; + color: currentColor; +} + +.ks-toast strong { + display: block; + color: var(--ks-champagne); + font-size: 0.92rem; + font-weight: 500; +} + +.ks-toast span:not(.ks-toast-close) { + color: var(--ks-text-muted); + font-size: 0.82rem; + display: block; + margin-top: 2px; +} + +.ks-toast.is-success { color: var(--ks-patina); } +.ks-toast.is-warning { color: var(--ks-vermilion); } + +.ks-toast-close { + width: 22px; + height: 22px; + display: grid; + place-items: center; + border: 0; + background: transparent; + color: var(--ks-text-muted); + cursor: pointer; +} + +.ks-toast-close svg { width: 12px; height: 12px; } + + +/* ============================================================ + Icon button + tooltip + ============================================================ */ + +.ks-icon-button { + width: 32px; + height: 32px; + display: grid; + place-items: center; + border: 1px solid var(--ks-rule); + border-radius: 999px; + background: transparent; + color: var(--ks-kinpaku); + cursor: pointer; +} + +.ks-tooltip { + position: absolute; + bottom: calc(100% - 18px); + left: 50%; + transform: translateX(-50%); + width: 200px; + padding: 10px 12px; + border: 1px solid var(--ks-rule); + background: var(--ks-lacquer-deep); + color: var(--ks-champagne); + font-size: 0.8rem; + line-height: 1.4; + border-radius: 2px; + opacity: 0; + pointer-events: none; + transition: opacity 160ms var(--ks-ease); +} + +.ks-icon-button:focus-visible + .ks-tooltip { + opacity: 1; +} + + +/* ============================================================ + Modal + ============================================================ */ + +.ks-modal { + position: relative; + max-width: 440px; + padding: 28px; + border: 1px solid var(--ks-rule); + background: var(--ks-lacquer-raised); + border-radius: 2px; +} + +.ks-modal h3 { + margin: 0 0 8px; + color: var(--ks-champagne); + font-size: 1.1rem; + font-weight: 400; +} + +.ks-modal p { + margin: 0 0 22px; + color: var(--ks-text-muted); + font-size: 0.92rem; + line-height: 1.5; +} + +.ks-modal-actions { + display: flex; + gap: 12px; + justify-content: flex-end; +} + +.ks-modal-close { + position: absolute; + top: 16px; + right: 16px; + width: 24px; + height: 24px; + display: grid; + place-items: center; + border: 0; + background: transparent; + color: var(--ks-text-muted); + cursor: pointer; +} + + +/* ============================================================ + Empty state + ============================================================ */ + +.ks-empty { + display: grid; + place-items: center; + gap: 14px; + padding: 56px 28px; + text-align: center; + border: 1px dashed var(--ks-rule); + border-radius: 2px; +} + +.ks-empty-icon { + width: 36px; + height: 36px; + display: grid; + place-items: center; + color: var(--ks-kinpaku); +} + +.ks-empty strong { + color: var(--ks-champagne); + font-size: 1rem; + font-weight: 400; +} + +.ks-empty p { + margin: 0; + color: var(--ks-text-muted); + font-size: 0.86rem; +} + + +/* ============================================================ + Changelog row + ============================================================ */ + +.ks-changelog { + display: grid; + gap: 18px; +} + +.ks-changelog-entry { + display: grid; + grid-template-columns: 100px 1fr; + gap: 24px; + align-items: start; + padding-bottom: 18px; + border-bottom: 1px solid var(--ks-rule); +} + +.ks-changelog-entry:last-child { border-bottom: 0; } + +.ks-changelog-date { + color: var(--ks-text-muted); + font-family: var(--ks-mono); + font-size: 0.78rem; +} + +.ks-changelog-body strong { + color: var(--ks-champagne); + font-weight: 400; + font-size: 0.96rem; + display: block; +} + +.ks-changelog-body em { + display: inline-block; + margin-left: 8px; + padding: 1px 8px; + color: var(--ks-kinpaku); + border: 1px solid var(--ks-kinpaku); + font-style: normal; + font-size: 0.66rem; + letter-spacing: 0.18em; + text-transform: uppercase; + border-radius: 2px; +} + +.ks-changelog-body p { + margin: 4px 0 0; + color: var(--ks-text-muted); + font-size: 0.86rem; +} + + +/* ============================================================ + Site chrome (kinpaku theme) — shared header AND footer + + One definition for every kinpaku page, keyed off a single + `.kinpaku-chrome` body class instead of a per-page selector list. A + page opts into the dark-lacquer header + footer by adding + `kinpaku-chrome` to its bodyClass (alongside any page-specific class); + genuinely light pages (privacy, tutorials) simply omit it. + + This is the reusable unit: the header markup is Header.astro, the + footer markup is Footer.astro, and everything visual lives here. Don't + re-declare header/footer chrome in per-page stylesheets — the only + legitimate per-page override is a deliberate brand moment (e.g. the + home page's textured `body.home-kinpaku .site-footer`). + + Brand mark + wordmark mirror /design-system's .ks-brand / .ks-mark / + .ks-wordmark exactly, so the header is internally consistent. The + github pill and footer treatment used to be home-only / copy-pasted + per page; they now live here so every kinpaku page matches. + ============================================================ */ + +.kinpaku-chrome .site-header { + padding: 28px clamp(22px, 4vw, 56px); + background: linear-gradient(180deg, oklch(5% 0.004 95 / 0.92), oklch(5% 0.004 95 / 0.68)); + border-bottom: 1px solid oklch(78% 0.12 82 / 0.18); + backdrop-filter: blur(18px) saturate(1.25); +} + +/* Hamburger toggle — hidden on desktop, shown on mobile. The toggle expands + the nav panel below the header. Two-line glyph styled in kinpaku gold so + it reads as the brand's own control, not a generic browser affordance. */ +.site-header-menu { + display: none; + width: 36px; + height: 36px; + background: transparent; + border: 1px solid oklch(78% 0.12 82 / 0.32); + border-radius: 4px; + padding: 0; + cursor: pointer; + align-items: center; + justify-content: center; + flex-direction: column; + gap: 6px; + flex: none; + margin-left: auto; + transition: border-color 160ms ease, background 160ms ease; +} +.site-header-menu:hover { + border-color: oklch(78% 0.12 82 / 0.55); + background: oklch(78% 0.12 82 / 0.06); +} +.site-header-menu-line { + display: block; + width: 16px; + height: 1.5px; + background: var(--ks-kinpaku); + transition: transform 200ms ease, opacity 200ms ease; +} +[data-site-header][data-nav-open="true"] .site-header-menu-line:nth-child(1) { + transform: translateY(3.75px) rotate(45deg); +} +[data-site-header][data-nav-open="true"] .site-header-menu-line:nth-child(2) { + transform: translateY(-3.75px) rotate(-45deg); +} + +/* Mobile nav drawer. The right cluster (nav + github) collapses below the + header into a vertical panel that's hidden by default and revealed when + the hamburger toggles data-nav-open="true" on the header. */ +@media (max-width: 760px) { + .kinpaku-chrome .site-header { + flex-wrap: wrap; + padding: 16px clamp(16px, 4vw, 24px); + row-gap: 12px; + } + + .site-header-menu { + display: inline-flex; + } + + /* The right cluster (nav + github) becomes a collapsible drawer. Default + hidden; revealed when the header carries data-nav-open="true". The + panel extends past the header's horizontal padding to read as a true + full-width drawer, with a solid background so it doesn't bleed into + the hero content behind it. */ + [data-site-header] .site-header-right { + order: 3; + flex-basis: 100%; + display: none; + grid-template-columns: max-content max-content 1fr; + column-gap: 10px; + flex-direction: column; + align-items: stretch; + row-gap: 0; + margin: 12px 0 -16px; + padding: 6px; + background: oklch(4% 0.004 95); + border-radius: 4px; + border-top: 1px solid oklch(78% 0.12 82 / 0.18); + } + [data-site-header][data-nav-open="true"] .site-header-right { + display: grid; + } + + .kinpaku-chrome .site-header-nav { + grid-column: 1 / -1; + flex-direction: column; + align-items: stretch; + gap: 0; + font-size: 1rem; + /* Drop sub-pages.css's horizontal-scroll mask + overflow on the nav. */ + overflow: visible; + mask-image: none; + -webkit-mask-image: none; + } + /* Each row reads as a tappable surface — full-width, generous vertical + padding, hairline separators between rows. */ + [data-site-header] .site-header-nav a { + display: block; + padding: 14px clamp(16px, 4vw, 24px); + border-bottom: 1px solid oklch(78% 0.12 82 / 0.06); + } + [data-site-header] .site-header-nav a:last-child { + border-bottom: 0; + } + + /* sub-pages.css hides Home on mobile via `a[data-nav="home"] {display:none}` + because the brand acted as the home link in the old horizontal nav. + The drawer pattern surfaces all items, so override that here. */ + [data-site-header] .site-header-nav a[data-nav="home"] { + display: block; + } + + .kinpaku-chrome .theme-toggle { + grid-column: 1; + margin: 12px 0 6px; + } + + .kinpaku-chrome .site-header-github { + grid-column: 2; + align-self: flex-start; + margin: 12px 0 6px; + } + + /* sub-pages.css hides the github star count label on mobile. The drawer + has room for it, so bring it back. */ + [data-site-header] .site-header-github-label { + display: inline; + } +} + +.kinpaku-chrome .site-header-brand { + display: inline-flex; + align-items: center; + gap: 4px; + color: var(--ks-kinpaku); + font-family: var(--ks-font); + text-decoration: none; +} + +.kinpaku-chrome .site-header-brand-logo { + width: 38px; + height: 38px; + display: grid; + place-items: center; + color: var(--ks-kinpaku); + background: transparent; + box-shadow: none; +} + +.kinpaku-chrome .site-header-brand-logo svg { + width: 32px; + height: 32px; +} + +.kinpaku-chrome .site-header-brand-name, +.kinpaku-chrome .footer-logo { + color: var(--ks-kinpaku); + font-family: var(--ks-font-wordmark); + font-weight: 400; + font-size: 1.3rem; + letter-spacing: 0.15em; + text-transform: uppercase; + line-height: 1; + /* main.css / sub-pages.css set -webkit-font-smoothing: antialiased on + which renders thinner stems than the design-system page (which + uses the browser default). Match the design-system rendering so every + page's wordmark is visually identical, not just structurally the same. */ + -webkit-font-smoothing: auto; + -moz-osx-font-smoothing: auto; +} + +.kinpaku-chrome .site-header-nav { + gap: clamp(22px, 3vw, 48px); + font-family: var(--ks-font); + font-size: 0.95rem; + font-weight: 400; +} + +.kinpaku-chrome .theme-toggle, +.kinpaku-chrome .site-header-github { + height: 36px; + min-height: 36px; + box-sizing: border-box; +} + +.kinpaku-chrome .site-header-github { + padding: 0 12px 0 10px; +} + +.kinpaku-chrome .site-header-nav a, +.kinpaku-chrome .site-header-github { + color: var(--ks-champagne); +} + +.kinpaku-chrome .site-header-nav a:hover, +.kinpaku-chrome .site-header-nav a[aria-current="page"] { + color: var(--ks-kinpaku); +} + +/* GitHub star pill. Previously home-only; now every kinpaku page gets it. */ +.kinpaku-chrome .site-header-github { + border: 1px solid oklch(80% 0 0); + border-radius: 999px; + background: oklch(10% 0.006 95 / 0.74); +} + +.kinpaku-chrome .site-header-github:hover { + color: var(--ks-patina); + border-color: var(--ks-patina); + background: oklch(70% 0.105 190 / 0.08); +} + +.kinpaku-chrome .site-header-github-star { + color: var(--ks-kinpaku); +} + +/* ============================================================ + Site footer (kinpaku theme) — the default dark footer for every + kinpaku page. Was copy-pasted identically into slop/docs/designing/ + live-mode stylesheets; lives here once now. The home page layers a + textured verdigris divider on top via `body.home-kinpaku .site-footer` + (higher specificity, so it wins regardless of import order). + ============================================================ */ +.kinpaku-chrome .site-footer { + background: oklch(4% 0.004 95); + border-top: 1px solid var(--ks-rule); +} + +.kinpaku-chrome .footer-links a, +.kinpaku-chrome .footer-credit, +.kinpaku-chrome .footer-social-link { + color: var(--ks-text-muted); +} + +.kinpaku-chrome .footer-credit a { + color: var(--ks-champagne); +} + +.kinpaku-chrome .footer-links a:hover, +.kinpaku-chrome .footer-credit a:hover, +.kinpaku-chrome .footer-social-link:hover { + color: var(--ks-kinpaku); +} + +/* ============================================================ + Kinpaku surface — legacy-token remap + + For pages whose content still reads the old light tokens + (--color-paper, --color-ink, --font-display, …): instead of overriding + every rule, remap those tokens to kinpaku values at the body scope so + the existing legacy CSS renders dark for free. This is the same trick + docs-kinpaku/designing-kinpaku use per page, lifted into one reusable + class. It is also the prototype for making kinpaku the global default — + the eventual move is to lift this remap to :root and delete the light + token values entirely. + + Pair with .kinpaku-chrome (header + footer). Existing bespoke kinpaku + pages already remap in their own page stylesheet, so they don't need + this class. + ============================================================ */ +.kinpaku-surface { + --color-paper: oklch(7% 0.006 95); + --color-cream: oklch(9% 0.006 95); + --color-bg: oklch(11% 0.006 95); + --color-mist: var(--ks-rule); + --color-charcoal: var(--ks-text-muted); + --color-ash: var(--ks-text-faint); + --color-ink: var(--ks-champagne); + --color-text: var(--ks-text); + --color-accent: var(--ks-kinpaku); + --color-accent-dim: oklch(78% 0.12 82 / 0.18); + --color-accent-hover: var(--ks-kinpaku-pale); + --color-accent-soft: oklch(78% 0.12 82 / 0.32); + --font-body: var(--ks-font); + --font-display: var(--ks-font-display); + --font-mono: var(--ks-mono); + + background: linear-gradient(180deg, oklch(7% 0.006 95), oklch(4% 0.004 95)); + color: var(--ks-text); + min-height: 100vh; +} + +/* The legacy display face was italic serif; the kinpaku display face + (Alumni Sans) renders wrong as synthesized italic, so reset it on + the headings the base stylesheet set to italic. */ +.kinpaku-surface .sub-page-title, +.kinpaku-surface .prose h1, +.kinpaku-surface .prose h2 { + font-style: normal; +} + + +/* ============================================================ + Bento — multi-tile container pattern. The canonical alternative + to card-in-card. Tiles are full-width slabs on a darker rail; the + 8px gap between them shows the rail through as inset gutters. + Use with .ks-bento-tile--span-4 / --span-6 / --span-8 across a + 12-column grid. Pages can extend with full-bleed breakout or + custom edge padding (see /). + ============================================================ */ + +.ks-bento { + display: grid; + grid-template-columns: repeat(12, minmax(0, 1fr)); + gap: 8px; + background: oklch(0.17 0 0); + border-top: 8px solid oklch(0.17 0 0); + border-bottom: 8px solid oklch(0.17 0 0); +} + +.ks-bento-tile { + position: relative; + display: flex; + flex-direction: column; + gap: 14px; + padding: 48px; + background: var(--ks-lacquer); + border: 0; + border-radius: 0; + overflow: hidden; +} + +.ks-bento-tile--span-4 { grid-column: span 4; } +.ks-bento-tile--span-6 { grid-column: span 6; } +.ks-bento-tile--span-8 { grid-column: span 8; } + +@media (max-width: 980px) { + .ks-bento-tile { grid-column: 1 / -1; } +} + +/* Tile number — tiny mono caps. Defaults to kinpaku; flip individual tiles + to verdigris with data-color="patina" for tonal variety down a column. */ +.ks-bento-num { + font-family: var(--ks-mono); + font-size: 0.62rem; + letter-spacing: 0.28em; + text-transform: uppercase; + color: var(--ks-kinpaku); +} + +.ks-bento-num[data-color="patina"] { + color: var(--ks-patina); +} + + +/* ============================================================ + Skeleton (loading) + ============================================================ */ + +.ks-skeleton { + display: grid; + gap: 8px; + max-width: 280px; +} + +.ks-skeleton span { + height: 8px; + border-radius: 999px; + background: linear-gradient(90deg, var(--ks-graphite), oklch(22% 0.008 95), var(--ks-graphite)); + background-size: 200% 100%; + animation: ks-shimmer 1.8s linear infinite; +} + +.ks-skeleton span:nth-child(2) { width: 70%; } +.ks-skeleton span:nth-child(3) { width: 50%; } + +@keyframes ks-shimmer { + 0% { background-position: 200% 0; } + 100% { background-position: -200% 0; } +} + + +/* ============================================================ + Live picker (kinpaku theme) + + Shared kinpaku styling for the .live-demo-* picker mock used on the + homepage and /live-mode. The base structural CSS lives in + site/styles/live-mode.css; this block re-skins the picker chrome + (browser frame URL bar, bottom global bar, context bar, target + outline, comment tag, stroke) on dark kinpaku surfaces. + + Page-specific bits stay in the page CSS: + - .live-demo-frame background (lacquer-raised vs lacquer-deep) + - .live-demo-stage (homepage shows a gold-grid stylized stage; + /live-mode shows a light cream surface that simulates a real + dev preview) + - .live-demo-card (different content per page) + + To extend the picker to a new kinpaku-themed page, just add its body + class to the selector lists below. No duplicating CSS in page files. + + The actual live picker that injects into user dev servers + (skill/scripts/live-browser.js) is a separate runtime; its color + constants are kept in sync with these tokens by hand. + ============================================================ */ + +/* Browser-chrome bar at the top of the mock (URL pill + dots). Refined to read + like a precise tool, not a stock screenshot frame: slimmer bar, small uniform + neutral dots, and a clean neutral-edged URL pill (no warm gold hairline). */ +.home-kinpaku .live-demo-chrome, +.live-mode-kinpaku .live-demo-chrome { + padding: 9px 14px; + background: var(--ks-graphite); + border-bottom: 1px solid oklch(92% 0 0 / 0.07); +} + +.home-kinpaku .live-demo-dot, +.live-mode-kinpaku .live-demo-dot { + width: 8px; + height: 8px; + background: oklch(34% 0 0); +} + +.home-kinpaku .live-demo-url, +.live-mode-kinpaku .live-demo-url { + margin-left: 12px; + font-family: var(--ks-mono); + font-size: 0.72rem; + color: var(--ks-text-muted); + letter-spacing: 0.04em; + background: transparent; + border: 1px solid oklch(92% 0 0 / 0.08); +} + +/* Active control surfaces — the bottom picker bar and the context bar + that floats next to the picked element. These ARE the Impeccable UI, + so they get the full-saturation kinpaku-gold border at 1.5px with a + faint matching halo, distinguishing them from chrome. */ +.home-kinpaku .live-demo-gbar, +.live-mode-kinpaku .live-demo-gbar, +.home-kinpaku .live-demo-ctx, +.live-mode-kinpaku .live-demo-ctx { + background: var(--ks-lacquer-deep); + /* Quiet neutral hairline instead of the loud 1.5px gold border + gold halo. + Gold is reserved for the brand mark and the active control, not the + container outline. */ + border: 1px solid oklch(92% 0 0 / 0.13); + border-radius: 8px; + box-shadow: 0 16px 36px -12px oklch(0% 0 0 / 0.6); + color: var(--ks-champagne); +} + +.home-kinpaku .live-demo-gbar-brand, +.live-mode-kinpaku .live-demo-gbar-brand { + color: var(--ks-kinpaku); + background: transparent; +} + +.home-kinpaku .live-demo-gbar-btn, +.live-mode-kinpaku .live-demo-gbar-btn { + color: var(--ks-text-muted); + background: transparent; +} + +/* Active state — a crisp neutral pill with kinpaku text. The translucent + kinpaku-dim wash read as a murky smudge; a solid graphite chip with gold + text/icon makes the selected control precise. */ +.home-kinpaku .live-demo-gbar-btn.is-active, +.live-mode-kinpaku .live-demo-gbar-btn.is-active { + background: oklch(27% 0 0); + color: var(--ks-kinpaku); + border-radius: 6px; +} + +/* Page chat — collapsed pill with chat + mic; expands on click. */ +.home-kinpaku .live-demo-gbar-chat, +.live-mode-kinpaku .live-demo-gbar-chat { + display: inline-flex; + align-items: center; + height: 28px; + width: 104px; + margin: 0 4px 0 6px; + border-radius: 5px; + background: var(--ks-graphite); + border: 1px solid transparent; + overflow: hidden; + cursor: pointer; + flex-shrink: 0; + transition: border-color 0.15s ease; +} + +.home-kinpaku .live-demo-gbar-chat.is-expanded, +.live-mode-kinpaku .live-demo-gbar-chat.is-expanded { + width: min(220px, 34vw); + cursor: text; +} + +.home-kinpaku .live-demo-gbar-chat-icon, +.live-mode-kinpaku .live-demo-gbar-chat-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + flex-shrink: 0; + color: var(--ks-text-muted); + pointer-events: none; +} + +.home-kinpaku .live-demo-gbar-chat-hint, +.live-mode-kinpaku .live-demo-gbar-chat-hint { + flex: 1; + min-width: 0; + font-size: 11.5px; + font-weight: 500; + color: var(--ks-text-muted); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + pointer-events: none; +} + +.home-kinpaku .live-demo-gbar-chat-input, +.live-mode-kinpaku .live-demo-gbar-chat-input { + flex: 1; + min-width: 0; + width: 0; + padding: 0; + border: 0; + background: transparent; + font: inherit; + font-size: 11.5px; + color: var(--ks-champagne); + outline: none; + opacity: 0; + pointer-events: none; + caret-color: var(--ks-kinpaku); + transition: opacity 0.15s ease; +} + +.home-kinpaku .live-demo-gbar-chat[data-input-focused="true"]:not([data-expanded="true"]) .live-demo-gbar-chat-hint, +.live-mode-kinpaku .live-demo-gbar-chat[data-input-focused="true"]:not([data-expanded="true"]) .live-demo-gbar-chat-hint { + display: none; +} + +.home-kinpaku .live-demo-gbar-chat[data-input-focused="true"]:not([data-expanded="true"]) .live-demo-gbar-chat-input, +.live-mode-kinpaku .live-demo-gbar-chat[data-input-focused="true"]:not([data-expanded="true"]) .live-demo-gbar-chat-input { + width: auto; + padding: 0 4px; + opacity: 1; + pointer-events: auto; +} + +.home-kinpaku .live-demo-gbar-chat.is-expanded .live-demo-gbar-chat-hint, +.live-mode-kinpaku .live-demo-gbar-chat.is-expanded .live-demo-gbar-chat-hint { + display: none; +} + +.home-kinpaku .live-demo-gbar-chat.is-expanded .live-demo-gbar-chat-input, +.live-mode-kinpaku .live-demo-gbar-chat.is-expanded .live-demo-gbar-chat-input { + width: auto; + padding: 0 6px; + opacity: 1; + pointer-events: auto; +} + +.home-kinpaku .live-demo-gbar-chat-input::placeholder, +.live-mode-kinpaku .live-demo-gbar-chat-input::placeholder { + color: var(--ks-text-muted); + opacity: 1; +} + +.home-kinpaku .live-demo-gbar-chat-voice, +.live-mode-kinpaku .live-demo-gbar-chat-voice { + display: inline-flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + padding: 0; + border: 0; + background: transparent; + color: var(--ks-text-muted); + cursor: pointer; + flex-shrink: 0; + transition: color 0.12s ease, background 0.12s ease; +} + +.home-kinpaku .live-demo-gbar-chat-voice:hover, +.live-mode-kinpaku .live-demo-gbar-chat-voice:hover, +.home-kinpaku .live-demo-gbar-chat-voice.is-active, +.live-mode-kinpaku .live-demo-gbar-chat-voice.is-active { + color: var(--ks-kinpaku); + background: oklch(78% 0.12 82 / 0.12); +} + +.home-kinpaku .live-demo-gbar-divider, +.live-mode-kinpaku .live-demo-gbar-divider { + background: var(--ks-rule); +} + +.home-kinpaku .live-demo-gbar-x, +.live-mode-kinpaku .live-demo-gbar-x { + color: var(--ks-text-muted); + background: transparent; +} + +.home-kinpaku .live-demo-gbar-x:hover, +.live-mode-kinpaku .live-demo-gbar-x:hover { + color: var(--ks-vermilion); +} + +/* Context bar sub-elements (the inline action panel that appears + next to a picked element during "configure" / "cycling" / "accepted" + states). */ +.home-kinpaku .live-demo-ctx[data-phase="configuring"], +.live-mode-kinpaku .live-demo-ctx[data-phase="configuring"] { + padding: 0; + background: var(--ks-graphite-2); + overflow: hidden; +} + +.home-kinpaku .live-demo-ctx-command, +.live-mode-kinpaku .live-demo-ctx-command { + display: flex; + align-items: center; + flex: 1; + min-width: 0; + height: 36px; + padding: 0 6px 0 7px; + background: transparent; + border: 0; + overflow: hidden; +} + +.home-kinpaku .live-demo-ctx-trailing, +.live-mode-kinpaku .live-demo-ctx-trailing { + display: inline-flex; + align-items: stretch; + flex-shrink: 0; + border-left: 1px solid oklch(92% 0 0 / 0.12); +} + +.home-kinpaku .live-demo-ctx-modifiers, +.live-mode-kinpaku .live-demo-ctx-modifiers { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 0 10px; + flex-shrink: 0; +} + +.home-kinpaku .live-demo-ctx-selection, +.live-mode-kinpaku .live-demo-ctx-selection { + box-sizing: border-box; + min-width: 28px; + height: auto; + padding: 1px 4px; + border: 1px solid oklch(70% 0.12 188); + border-radius: 7px; + flex-shrink: 0; + background: transparent; + color: oklch(70% 0.12 188); + font-family: var(--ks-mono); + font-size: 12px; + font-weight: 600; + line-height: 18px; + transition: background 0.15s ease, color 0.15s ease; +} + +.home-kinpaku .live-demo-ctx-action, +.home-kinpaku .live-demo-ctx-count, +.live-mode-kinpaku .live-demo-ctx-action, +.live-mode-kinpaku .live-demo-ctx-count { + box-sizing: border-box; + height: 18px; + padding: 0; + border: 0; + border-radius: 0; + background: transparent; + color: var(--ks-text-muted); + font-size: 12px; + font-weight: 500; + line-height: 18px; + transition: color 0.12s ease; +} + +.home-kinpaku .live-demo-ctx-count, +.live-mode-kinpaku .live-demo-ctx-count { + font-family: var(--ks-mono); + font-weight: 600; +} + +.home-kinpaku .live-demo-ctx-row--configure, +.live-mode-kinpaku .live-demo-ctx-row--configure { + width: 100%; + min-height: 36px; +} + +.home-kinpaku .live-demo-ctx-actions, +.live-mode-kinpaku .live-demo-ctx-actions { + display: inline-flex; + align-items: stretch; + border-left: 1px solid oklch(92% 0 0 / 0.12); +} + +.home-kinpaku .live-demo-ctx-voice, +.live-mode-kinpaku .live-demo-ctx-voice { + width: 36px; + height: 36px; + padding: 0; + border: 0; + border-right: 1px solid oklch(92% 0 0 / 0.12); + border-radius: 0; + background: transparent; + color: var(--ks-text-muted); +} + +.home-kinpaku .live-demo-ctx-actions .live-demo-ctx-go, +.live-mode-kinpaku .live-demo-ctx-actions .live-demo-ctx-go { + width: 36px; + height: 36px; + padding: 0; + border-radius: 0; + border-left: 0; +} + +.home-kinpaku .live-demo-ctx-action-caret, +.live-mode-kinpaku .live-demo-ctx-action-caret { + font-size: 10px; + color: inherit; +} + +.home-kinpaku .live-demo-ctx-selection:hover, +.live-mode-kinpaku .live-demo-ctx-selection:hover { + background: oklch(27% 0 0); +} + +.home-kinpaku .live-demo-ctx-action:hover, +.home-kinpaku .live-demo-ctx-count:hover, +.live-mode-kinpaku .live-demo-ctx-action:hover, +.live-mode-kinpaku .live-demo-ctx-count:hover { + color: var(--ks-text); +} + +.home-kinpaku .live-demo-ctx-input, +.live-mode-kinpaku .live-demo-ctx-input { + display: inline-flex; + align-items: center; + gap: 6px; + flex: 1; + min-width: 0; + height: 18px; + padding: 0; + background: transparent; + border: 0; + border-radius: 0; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: oklch(94% 0.02 82); +} + +.home-kinpaku .live-demo-ctx-caret, +.live-mode-kinpaku .live-demo-ctx-caret { + background: oklch(94% 0.02 82); +} + +.home-kinpaku .live-demo-ctx-go, +.live-mode-kinpaku .live-demo-ctx-go, +.home-kinpaku .live-demo-ctx-accept, +.live-mode-kinpaku .live-demo-ctx-accept { + background: var(--ks-kinpaku); + color: var(--ks-lacquer-deep); + border: 0; +} + +/* Command-palette switcher — the picker's design vocabulary. Mirrors the real + action picker in live-browser.js: a 4-column grid of icon-over-label chips, + the selected chip on a soft kinpaku wash with its icon recolored to brand. + This is the move that makes the live approach unique, so the demo shows it. */ +.home-kinpaku .live-demo-ctx-palette, +.live-mode-kinpaku .live-demo-ctx-palette { + position: absolute; + left: 6px; + bottom: calc(100% + 8px); + z-index: 2; + padding: 6px; + border-radius: 8px; + background: var(--ks-lacquer-deep); + border: 1px solid oklch(92% 0 0 / 0.13); + box-shadow: 0 18px 40px -14px oklch(0% 0 0 / 0.7); + opacity: 0; + transform: translateY(6px) scale(0.97); + transform-origin: bottom left; + pointer-events: none; + transition: opacity 160ms ease, transform 200ms cubic-bezier(0.22, 1, 0.36, 1); +} +.home-kinpaku .live-demo-ctx-palette.is-open, +.live-mode-kinpaku .live-demo-ctx-palette.is-open { + opacity: 1; + transform: none; +} +.home-kinpaku .live-demo-ctx-palette-grid, +.live-mode-kinpaku .live-demo-ctx-palette-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 3px; +} +.home-kinpaku .live-demo-ctx-palette-chip, +.live-mode-kinpaku .live-demo-ctx-palette-chip { + display: flex; + flex-direction: column; + align-items: center; + gap: 5px; + width: 62px; + padding: 9px 6px; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--ks-champagne); + font-family: var(--ks-font); + font-size: 11px; + font-weight: 500; + white-space: nowrap; + cursor: pointer; + transition: background 0.12s ease, color 0.12s ease; +} +.home-kinpaku .live-demo-ctx-palette-ico, +.live-mode-kinpaku .live-demo-ctx-palette-ico { + display: flex; + align-items: center; + justify-content: center; + height: 20px; + opacity: 0.82; +} +.home-kinpaku .live-demo-ctx-palette-name, +.live-mode-kinpaku .live-demo-ctx-palette-name { + line-height: 1; +} +.home-kinpaku .live-demo-ctx-palette-chip.is-highlight, +.live-mode-kinpaku .live-demo-ctx-palette-chip.is-highlight { + background: oklch(78% 0.12 82 / 0.16); + color: var(--ks-kinpaku); +} +.home-kinpaku .live-demo-ctx-palette-chip.is-highlight .live-demo-ctx-palette-ico, +.live-mode-kinpaku .live-demo-ctx-palette-chip.is-highlight .live-demo-ctx-palette-ico { + opacity: 1; +} + +.home-kinpaku .live-demo-ctx-nav, +.live-mode-kinpaku .live-demo-ctx-nav { + background: transparent; + color: var(--ks-text-muted); +} + +.home-kinpaku .live-demo-ctx-nav:hover, +.live-mode-kinpaku .live-demo-ctx-nav:hover { + color: var(--ks-kinpaku); +} + +.home-kinpaku .live-demo-ctx-counter, +.live-mode-kinpaku .live-demo-ctx-counter { + color: var(--ks-champagne); + font-family: var(--ks-mono); +} + +.home-kinpaku .live-demo-ctx-divider, +.live-mode-kinpaku .live-demo-ctx-divider { + background: var(--ks-rule); +} + +.home-kinpaku .live-demo-ctx-discard, +.live-mode-kinpaku .live-demo-ctx-discard { + background: transparent; + color: var(--ks-text-muted); +} + +.home-kinpaku .live-demo-ctx-discard:hover, +.live-mode-kinpaku .live-demo-ctx-discard:hover { + color: var(--ks-vermilion); +} + +.home-kinpaku .live-demo-ctx-spinner, +.live-mode-kinpaku .live-demo-ctx-spinner { + border-color: var(--ks-rule); + border-top-color: var(--ks-kinpaku); +} + +.home-kinpaku .live-demo-ctx-row--accepted, +.live-mode-kinpaku .live-demo-ctx-row--accepted { + color: var(--ks-kinpaku); +} + +/* Target outline + annotations (stroke + comment tag) — kinpaku. */ +.home-kinpaku .live-demo-outline, +.live-mode-kinpaku .live-demo-outline { + border-color: var(--ks-kinpaku); + border-width: 1.5px; + border-radius: 3px; + color: var(--ks-kinpaku); + /* No soft gold glow ring (off-brand accent halo); a crisp outline reads as a + precise selection, not a highlighter. */ + box-shadow: none; +} + +.home-kinpaku .live-demo-annotations, +.live-mode-kinpaku .live-demo-annotations { + color: var(--ks-kinpaku); + border-color: var(--ks-kinpaku); +} + +.home-kinpaku .live-demo-comment, +.live-mode-kinpaku .live-demo-comment { + background: var(--ks-kinpaku); + color: var(--ks-lacquer-deep); +} + +.home-kinpaku .live-demo-stroke, +.live-mode-kinpaku .live-demo-stroke { + color: var(--ks-kinpaku); +} diff --git a/picker/styles/vendor/kinpaku-tokens.css b/picker/styles/vendor/kinpaku-tokens.css new file mode 100644 index 000000000..18993ef40 --- /dev/null +++ b/picker/styles/vendor/kinpaku-tokens.css @@ -0,0 +1,205 @@ +/* + * impeccable.style — Neo kinpaku tokens (page-global, single source of truth) + * + * Every brand-bearing color, surface, text color, hairline rule, type-scale + * value, and motion easing used on the site lives here. New pages should read + * these tokens via var(--ks-*) rather than hand-typing oklch values. + * + * Pages may override individual tokens locally when there's a documented + * reason (e.g. .home-kinpaku bumps --ks-rule alpha for sharper UI borders + * against bento tiles). When in doubt, do not override — match. + * + * Imported by design-system.css, home-kinpaku.css, and designing-kinpaku.css. + * If a new page-level stylesheet needs these tokens, @import this file at the + * top so the values are available at :root. + */ + +:root { + /* color-scheme follows html.light / html.dark class on */ + /* ============================================================ + Brand anchors. Two anchors carry the brand — kinpaku gold for + commitment and brand voice, verdigris patina for state and + contrast. Everything else is supporting role. + ============================================================ */ + + /* Kinpaku gold. The rich, warm, vibrant primary. */ + --ks-kinpaku: oklch(84% 0.19 80.46); /* primary accent, wordmark, icon */ + --ks-kinpaku-pale: oklch(86% 0.07 84); /* hover lift, pale fills */ + --ks-kinpaku-rich: oklch(77% 0.13 82); /* active CTA, severity-medium */ + --ks-kinpaku-deep: oklch(61% 0.085 78); /* borders against the brand */ + + /* Verdigris patina. The secondary accent — state, signal, selection. */ + --ks-patina: oklch(70% 0.12 188); /* secondary accent */ + --ks-patina-pale: oklch(82% 0.07 188); /* hover lift on patina */ + --ks-patina-deep: oklch(49% 0.08 188); /* deep oxide, dark variants */ + + /* Warning — vermilion. Used sparingly, only for failures and warnings. */ + --ks-vermilion: oklch(58% 0.15 35); + + /* ============================================================ + Surfaces. Warm-black lacquer carries everything. + ============================================================ */ + --ks-lacquer: oklch(7% 0.006 95); /* page ground */ + --ks-lacquer-deep: oklch(4% 0.004 95); /* deepest inset */ + --ks-lacquer-raised: oklch(11% 0.006 95); /* raised panels, inputs */ + --ks-graphite: oklch(15% 0.008 95); /* inactive surfaces */ + --ks-graphite-2: oklch(19% 0.008 95); /* one step up from graphite */ + + /* ============================================================ + Text. The whole text ramp runs near-neutral and bright so copy, + headings, and labels read crisp on lacquer instead of mushing + into the warm floor. Warmth now lives only in the gold accents + and the surfaces, not in the type. (--ks-champagne keeps its name + for compatibility but is no longer warm.) + ============================================================ */ + --ks-champagne: oklch(91% 0 0); /* headlines, — neutral white */ + --ks-text: oklch(88% 0 0); /* body — neutral near-white */ + --ks-text-muted: oklch(72% 0 0); /* captions, meta */ + --ks-text-faint: oklch(62% 0 0); /* subdued */ + --ks-text-mute-deep: oklch(52% 0 0); /* disabled */ + + /* ============================================================ + Rules. The hairline is neutral so borders/dividers/labels don't + carry warmth (warmth lives in the gold accents and surfaces). For a + gold accent border, use --ks-kinpaku directly, not a readability variant. + ============================================================ */ + --ks-rule: oklch(78% 0 0 / 0.16); + + /* ============================================================ + Code. One treatment site-wide. Inline code is a neutral graphite + chip; blocks / CLI commands are a deep lacquer terminal with a + neutral hairline. Gold is only for code that is itself a command + link (--ks-code-cmd). All code rules read these — don't hand-type. + ============================================================ */ + --ks-code-fg: oklch(91% 0 0); /* inline code text */ + --ks-code-bg: var(--ks-graphite-2); /* inline code chip */ + --ks-code-radius: 3px; + --ks-code-pad: 0.3em 0.5em; /* inline code chip padding */ + --ks-code-block-fg: oklch(86% 0 0); /* block / CLI text */ + --ks-code-block-bg: var(--ks-lacquer-deep); + --ks-code-block-border: var(--ks-rule); + --ks-code-block-radius: 2px; + --ks-code-cmd: var(--ks-kinpaku); /* code that's a command link */ + + /* ============================================================ + Typography — two faces. + - --ks-font-display: Alumni Sans. A weightable humanist grotesque; + the hero h1 runs at a thin hairline (100) for elegance, section + h2s at a heavier cut (300) to anchor each block. + - --ks-font-wordmark: Alumni Sans, same face as display, held at + weight 400 for the brand lockup. + - --ks-font: Albert Sans. Quiet geometric humanist, used for body + and UI text. Pairs cleanly with the Alumni Sans display without + competing. + All loaded via Base.astro's Google Fonts link. + ============================================================ */ + --ks-font-display: "Alumni Sans", "Albert Sans", Arial, sans-serif; + --ks-font-wordmark: "Alumni Sans", "Albert Sans", Arial, sans-serif; + --ks-font: "Albert Sans", "Avenir Next", "Helvetica Neue", Arial, system-ui, sans-serif; + --ks-mono: "SFMono-Regular", "Roboto Mono", "JetBrains Mono", Consolas, monospace; + + /* ============================================================ + Type scale. These are the actual sizes the homepage ships with — + new pages should read them via var(...) rather than hand-typing. + The display vs headline weight split is deliberate: the hero h1 + reads thin (100) for elegance; section h2s read heavier (300) to + anchor each block. Section h2s look heavier than the h1 on purpose. + ============================================================ */ + + /* Display — hero h1. */ + --ks-type-display-size: clamp(3.4rem, 6.5vw, 5.6rem); + --ks-type-display-weight: 100; + --ks-type-display-line: 1.02; + --ks-type-display-track: -0.01em; + + /* Headline — section h2. Heavier than display. */ + --ks-type-headline-size: clamp(2.6rem, 4vw, 3.4rem); + --ks-type-headline-weight: 300; + --ks-type-headline-line: 1.04; + + /* Title — card and panel headings (h3). */ + --ks-type-title-size: 1.18rem; + --ks-type-title-weight: 500; + --ks-type-title-line: 1.35; + + /* Body. */ + --ks-type-body-size: 1.02rem; + --ks-type-body-line: 1.8; + + /* Eyebrow — small mono labels above titles. */ + --ks-type-eyebrow-size: 0.7rem; + --ks-type-eyebrow-track: 0.18em; + + /* Wordmark — IMPECCABLE in the header. */ + --ks-type-wordmark-size: 1.15rem; + --ks-type-wordmark-track: 0.42em; + + /* Mono — code, terminal, audit lines. */ + --ks-type-mono-size: 0.72rem; + --ks-type-mono-track: 0.22em; + + /* ============================================================ + Motion. + ============================================================ */ + --ks-ease: cubic-bezier(0.2, 0.8, 0.2, 1); +} + +html.dark { + color-scheme: dark; +} + +/* ============================================================ + Light mode — pale surfaces, dark ink type, and kinpaku kept as the + real brand gold. Activated via html.light on + (set by theme.js + inline FOUC guard in Base.astro). + ============================================================ */ +html.light { + color-scheme: light; + + /* Brand gold — same fills as dark mode (logo, buttons, marks). + For decorative small text on paper, use patina. Use --ks-link-on-paper + for body-sized links that need stronger contrast. */ + --ks-kinpaku: oklch(84% 0.19 80.46); + --ks-kinpaku-pale: oklch(86% 0.07 84); + --ks-kinpaku-rich: oklch(77% 0.13 82); + --ks-kinpaku-deep: oklch(61% 0.085 78); + --ks-kinpaku-ink: var(--ks-patina); + + /* Text links + active nav on paper — patina, not fill gold. */ + --ks-link-on-paper: var(--ks-patina-deep); + --ks-link-on-paper-hover: var(--ks-patina); + --ks-link-on-paper-line: oklch(49% 0.08 188 / 0.42); + --ks-nav-active: var(--ks-patina-deep); + + /* Patina — brand values for fills; deep for text on paper. */ + --ks-patina: oklch(70% 0.12 188); + --ks-patina-pale: oklch(82% 0.07 188); + --ks-patina-deep: oklch(49% 0.08 188); + + --ks-vermilion: oklch(52% 0.16 35); + + /* Surfaces — warm paper and cream panels. */ + --ks-lacquer: oklch(97% 0.012 95); + --ks-lacquer-deep: oklch(94% 0.014 95); + --ks-lacquer-raised: oklch(99% 0.008 95); + --ks-graphite: oklch(91% 0.012 95); + --ks-graphite-2: oklch(88% 0.014 95); + + /* Text — dark ink on paper. */ + --ks-champagne: oklch(18% 0.02 95); + --ks-text: oklch(25% 0.018 95); + --ks-text-muted: oklch(45% 0.015 95); + --ks-text-faint: oklch(55% 0.012 95); + --ks-text-mute-deep: oklch(65% 0.01 95); + + /* Rules — dark hairlines. */ + --ks-rule: oklch(25% 0.02 95 / 0.12); + + /* Code — light chips, dark text. */ + --ks-code-fg: oklch(28% 0.02 95); + --ks-code-bg: var(--ks-graphite); + --ks-code-block-fg: oklch(30% 0.02 95); + --ks-code-block-bg: var(--ks-lacquer-raised); + --ks-code-block-border: var(--ks-rule); + --ks-code-cmd: var(--ks-link-on-paper); +} diff --git a/scripts/build-picker.mjs b/scripts/build-picker.mjs index 1b5265f77..c1357e796 100644 --- a/scripts/build-picker.mjs +++ b/scripts/build-picker.mjs @@ -3,18 +3,16 @@ import { execFileSync } from 'node:child_process'; import { cp, copyFile, mkdir, rm } from 'node:fs/promises'; import path from 'node:path'; -import sharp from 'sharp'; import { fileURLToPath } from 'node:url'; const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); const buildDir = path.join(root, 'build-picker'); const outputDir = path.join(root, 'skill/scripts/picker'); -const faviconSource = path.join(root, 'site/public/favicon.svg'); +// Static assets vendored under picker/assets/ (the site now lives in the +// private impeccable-site repo, so the picker carries its own copies). +const faviconSource = path.join(root, 'picker/assets/favicon.svg'); const faviconOutput = path.join(outputDir, 'favicon.svg'); -const heroSource = path.join( - root, - 'site/public/assets/neo-kinpaku/candidates/finalists/m-01-v2-01-light.png', -); +const heroSource = path.join(root, 'picker/assets/hero-light.jpg'); const heroOutput = path.join(outputDir, 'assets/hero-light.jpg'); await rm(buildDir, { recursive: true, force: true }); @@ -28,10 +26,7 @@ await rm(outputDir, { recursive: true, force: true }); await cp(buildDir, outputDir, { recursive: true }); await mkdir(path.dirname(heroOutput), { recursive: true }); await copyFile(faviconSource, faviconOutput); -await sharp(heroSource) - .resize({ width: 1536, withoutEnlargement: true }) - .jpeg({ quality: 80, mozjpeg: true }) - .toFile(heroOutput); +await copyFile(heroSource, heroOutput); await rm(buildDir, { recursive: true, force: true }); console.log(`Built ${path.relative(root, outputDir)}/`); diff --git a/scripts/lib/utils.js b/scripts/lib/utils.js index d7577962b..1beabb4c9 100644 --- a/scripts/lib/utils.js +++ b/scripts/lib/utils.js @@ -701,7 +701,7 @@ export function replacePlaceholders(content, provider, commandNames = [], allSki * their command prefix from lib/provider.mjs, whose declaration is replaced * here by an exact string match. */ -export function replaceScriptProviderMarker(content, provider) { +export function replaceScriptProviderMarker(content, provider, buildProvider = provider) { if (Buffer.isBuffer(content)) return content; const placeholders = PROVIDER_PLACEHOLDERS[provider] || PROVIDER_PLACEHOLDERS.cursor; const commandPrefix = placeholders.command_prefix || '/'; diff --git a/scripts/test-suites.mjs b/scripts/test-suites.mjs index 03798b52d..897c4a68c 100644 --- a/scripts/test-suites.mjs +++ b/scripts/test-suites.mjs @@ -28,7 +28,6 @@ export const SUITES = { /^picker\//, /^scripts\/(?!benchmark-detector|build-browser-detector|build-extension)/, /^skill\/(SKILL\.src\.md|agents\/|reference\/|scripts\/(cleanup-deprecated|comp-diff|comp-spec|build-phase|font-match|data\/font-index|concept-seed|generate-image|context|context-signals|critique-storage|design-parser|doctor|hook|impeccable-paths|is-generated|lib\/(artifact-schema|png|raster|image-metrics|font-fingerprint|font-index|hero-checks|composition-catalog|concept-catalog|provider|staleness|staleness-deep|staleness-notice|surface-briefs|target-slug|template-extensions)|picker|pin|surface-brief))/, - /^site\/(pages|content|components|layouts)\//, /^README(\.npm)?\.md$/, /^cli\/bin\//, ], diff --git a/skill/reference/craft.md b/skill/reference/craft.md index 768d49772..dbbc9402c 100644 --- a/skill/reference/craft.md +++ b/skill/reference/craft.md @@ -2,122 +2,4 @@ `craft` is a deprecated alias for an ordinary request to make new visual work. It adds no setup, interview, checkpoint, tool, or quality behavior. Apply SKILL.md's normal routing: create missing PRODUCT.md through [init.md](init.md), then follow [new-work.md](new-work.md) for visual authority, world and surface decisions, implementation, and finish. -Before writing code, you need: PRODUCT.md loaded, register identified and the matching reference loaded, and a confirmed design direction for this task (either from `shape` or supplied by the user). PRODUCT.md is project context, not a task-specific brief. - -Treat any approved visual direction (generated mock or stated reference) as a concrete contract for composition, hierarchy, density, atmosphere, signature motifs, and distinctive visual moves. Don't let mocks replace structure, copy, accessibility, or state design. But if the live result lacks the approved direction's major ingredients, the implementation is wrong. - -### Gates: do not compress - -Craft has **multiple user gates**, not one. When the harness has native image generation (Codex via `image_gen`), the gate sequence before code is: - -1. **Shape brief confirmed** (Step 1) -2. **Direction questions answered** (codex.md Step A) -3. **Palette confirmed** (codex.md Step B) -4. **One mock direction approved or delegated** (codex.md Step D) - -You must stop at every gate. **Shape confirmation alone is NOT a green light to start coding.** It is the green light to begin codex.md Step A. Compressing gates 2 through 4 because the shape brief felt complete is the dominant failure mode of this flow. - -When the harness lacks native image generation, gates 2-4 collapse into the brief itself, and shape confirmation does advance straight to code. - -## Step 0: Project Foundation - -Before shape, before code: figure out what kind of project you're working in. - -Look at the working directory. Run `ls`. Check for: - -- An existing framework: `astro.config.mjs/ts`, `next.config.js/ts`, `nuxt.config.ts`, `svelte.config.js`, `vite.config.js/ts`, `package.json` with framework deps, `Cargo.toml` + Leptos/Yew, `Gemfile` + Rails. **If found, use it.** Do not start a parallel build, do not introduce a second framework, do not write to `dist/` or `build/` directly. Whatever pipeline the project has, respect it. -- An existing component library or design system: `src/components/`, `app/components/`, a `tokens.css` / `theme.ts`, an `astro.config` `integrations`. Read what's there before adding to it. -- An existing icon set: `lucide-react`, `@phosphor-icons/react`, `@iconify/*`, hand-rolled SVG sprites in `assets/icons/`. **Use what's already in the project**; don't introduce a second set. - -If the directory is empty (greenfield), don't pick a framework silently. Ask the user via the AskUserQuestion tool, with sensible defaults framed by the brief: - -```text -What should this be built on? - - Astro (default for content-led brand sites, landing pages, marketing surfaces) - - SvelteKit / Next.js / Nuxt (when the brief implies an app surface or significant interactivity) - - Single index.html (one-shot demo, prototype, or a deliberately framework-free experiment) -``` - -Default: Astro for brand briefs, the project's existing framework for product briefs. Ask once; don't re-ask mid-task. - -## Step 1: Shape the Design - -Run {{command_prefix}}impeccable shape, passing along whatever feature description the user provided. Shape is **required** for craft; it is what produces a confirmed direction. - -Present the shape output and stop. Wait for the user to confirm, override, or course-correct before writing code. - -If the user already supplied a confirmed brief or ran shape separately, use it and skip this step. - -When the original prompt + PRODUCT.md already answer scope, content, and visual direction with no real ambiguity, the shape output can be **compact** (3-5 bullets stating what you're building and the visual lane, ending with one or two specific questions or "confirm or override"). The full 10-section structured brief is reserved for genuinely ambiguous, multi-screen, or stakeholder-heavy tasks. Don't pad a clear brief into a long one to look thorough; equally, don't skip the pause to look efficient. - -If the harness has native image generation (Codex), a compact shape's "confirm or override" advances to **Step 3 and the codex.md flow**, not to Step 4. Phrase the closing line accordingly: "Confirm or override; once we lock direction, I'll run a couple of palette and reference questions before generating any mocks." This stops the model from reading shape confirmation as code-green. - -## Step 2: Load References - -Based on the design brief's "Recommended References" section, consult the relevant impeccable reference files. At minimum, always consult: - -- [layout.md](layout.md) for layout, spacing, grid, container queries, optical adjustments -- [typeset.md](typeset.md) for type hierarchy, font selection, web font loading, OpenType features (Reference Material section) - -Then add references based on the brief's needs: -- Complex interactions or forms? Consult [interaction-design.md](interaction-design.md) -- Animation or transitions? Consult [animate.md](animate.md) (Reference Material covers motion materials, durations, easing, perceived performance) -- Color-heavy or themed? Consult [colorize.md](colorize.md) (Reference Material covers OKLCH, palette structure, dark mode, contrast) -- Responsive requirements? Consult [adapt.md](adapt.md) (Reference Material covers breakpoints, input methods, safe areas, responsive images) -- Heavy on copy, labels, or errors? Consult [clarify.md](clarify.md) (Reference Material covers button labels, error formula, voice/tone, translation) - -## Step 3: Visual Direction & Assets (Harness-Gated) - -If the harness has **native image generation** (currently Codex via `image_gen`), this step is mandatory. **Stop and load [codex.md](codex.md)**. It covers palette generation, mock exploration, the approval loop, mock-fidelity inventory, and asset slicing via the `impeccable_asset_producer` subagent. Follow Steps A-F in that file, then return here for Step 4. - -If the harness lacks native image generation, **state in one line that the visual-direction-by-generation step is being skipped because the harness lacks native image generation, then proceed**. The one-line announcement is required; it forces a conscious decision instead of letting the step quietly evaporate. The brief is your only visual reference. Implement directly from it, treating any named anchor references and the brief's "Design Direction" as the contract. - -Whether you generated mocks or not: don't replace required imagery with generic cards, bullets, emoji, fake metrics, decorative CSS panels, or filler copy. Image-led briefs (restaurants, hotels, magazines, photography, hobbyist communities, food, travel, fashion, product) need real or sourced imagery in the build, not CSS scenery. - -## Step 4: Build to Production Quality - -**Precondition.** If Step 3 routed you to codex.md (native image generation available), Steps A through D in that file must be complete before any code: questions answered, palette confirmed, mocks generated, one direction approved or delegated. **Do not mention implementation, file paths, or patch plans until that's done.** A confirmed shape brief is not enough; the model that compressed those gates is the model that already failed this flow. - -Implement the feature following the design brief. Build in passes so structure, visual system, states, motion/media, and responsive behavior each get deliberate attention. The list below is the definition of done, not inspiration. - -### Production bar - -- **Real content.** No placeholder copy, placeholder images, dead links, fake controls, or unused scaffold at presentation time. -- **Preserve the approved mock's major ingredients.** Missing hero objects, world/product imagery, section structure, CTA/nav treatment, or distinctive motifs are blocking defects unless the user accepted the change. -- **Semantic first.** Real headings, landmarks, labels, form associations, button/link semantics, accessible names, state announcements where needed. -- **Deliberate spacing and alignment.** No default gaps, arbitrary margins, unbalanced whitespace, or accidental optical misalignment. -- **Intentional typography.** Chosen loading strategy, clear hierarchy, readable measure, stable line breaks, no overflow at any width. -- **Realistic state coverage.** Default, hover, focus-visible, active, disabled, loading, error, success, empty, overflow, long/short text, first-run. -- **Finished interaction quality.** Keyboard paths, touch targets, feedback timing, scroll behavior, state transitions, no hover-only functionality. -- **Coherent icon set.** Use the project's established set; otherwise pick one library or use accessible text. Don't mix. -- **Respect the build pipeline.** Edit source files and run the project's build (`npm run build` or equivalent). Don't write to `build/` / `dist/` / `.next/` with `cat`, heredoc, or Bash redirects; that skips asset hashing, image optimization, code splitting, and CSS extraction, and produces output the dev server won't serve. -- **Verify image URLs before referencing them.** Use image-search MCP or web-fetch when available; guessed photo IDs ship as broken-image placeholders. Without verification, prefer fewer images you're confident about. -- **Optimized imagery and media.** Correct dimensions, useful alt text, lazy loading below the fold, modern formats when practical, responsive `srcset`/`picture` for raster, no project-referenced asset left outside the workspace. -- **Premium motion.** Use atmospheric blur, filter, mask, shadow, reveal when they improve the experience. Avoid casual layout-property animation, bound expensive effects, verify smoothness in-browser, respect reduced motion, and avoid choreography that blocks task completion. -- **Maintainable.** Reusable local patterns, clear component boundaries, project conventions. No rasterized UI text or one-off hacks when a local pattern exists. -- **Technically clean.** Production build passes, no console errors, no avoidable layout shift, no needless dependencies, no broken asset paths. -- **Ask when uncertain.** If a discovery materially changes the brief or approved direction, stop and ask. Don't guess. - -## Step 5: Iterate Visually - -Look at what you built like a designer would. Your eyes are whatever the harness gives you: a connected browser, a screenshotting tool, Playwright, or asking the user. Use them for responsive testing (mobile, tablet, desktop minimum) and general visual validation. - -If your tool returns a file path, read the PNG back into the conversation. A screenshot you didn't read doesn't count. - -For long-form brand surfaces, inspect major sections individually. Thumbnails hide spacing, clipping, and cascade defects. - -After the first pass, write an honest critique against the brief, the approved mock's major ingredients (hero silhouette, motifs, imagery, nav/CTA, density), and impeccable's DON'Ts. Patch material defects and re-inspect. **Don't invent defects to demonstrate iteration.** A confident "first pass clean, shipping" beats a fake fix. - -Actively check: responsive behavior (composes, not shrinks), every state (empty / error / loading / edge), craft details (spacing, alignment, hierarchy, contrast, motion timing, focus), performance basics. The exit bar: defensible in a high-end studio review. - -Detector or QA output is defect evidence only; never proof the work is finished. - -## Step 6: Present - -Present the result to the user: -- Show the feature in its primary state -- Summarize the browser/viewports checked and the most important fixes made after inspection -- Walk through the key states (empty, error, responsive) -- Explain design decisions that connect back to the design brief and, when used, the chosen north-star mock. Include any accepted deviations from the mock; do not hide unimplemented mock ingredients. -- Note any remaining limitations or follow-up risks honestly -- Ask: "What's working? What isn't?" +Do not tell users they need to invoke `craft`. Natural requests such as “build this feature,” “make a landing page,” or “redesign this screen” use the same flow. diff --git a/skill/reference/document.md b/skill/reference/document.md index 06f6dfa5c..f625fb6ac 100644 --- a/skill/reference/document.md +++ b/skill/reference/document.md @@ -75,7 +75,7 @@ If a `DESIGN.md` already exists, **do not silently overwrite it**. Show the user - **Scan mode** (default): the project has design tokens, components, or rendered output. Extract, then confirm descriptive language. Use when there's code to analyze. - **Seed mode**: the project is pre-implementation (fresh init, nothing built yet). Gather any existing brand assets, interview for five high-level answers, optionally generate visual cues for the palette pick, write a minimal DESIGN.md marked ``. Re-run in scan mode once there's code. -Decide by scanning first (Scan mode Step 1). If the scan finds no tokens, no component files, and no rendered site, offer seed mode; don't silently switch. `/impeccable document --seed` requests new-work's world workshop, but it does not authorize replacing coherent code: when an incumbent system exists, offer scan mode or route an explicit identity-replacement request through new-work. +Decide by scanning first (Scan mode Step 1). If the scan finds no tokens, no component files, and no rendered site, offer seed mode; don't silently switch. `/impeccable document --seed` forces seed mode on a pre-implementation project, but it does not authorize replacing coherent code: when an incumbent system exists, offer scan mode or route an explicit identity-replacement request through new-work. ## Scan mode (approach C: auto-extract, then confirm descriptive language) @@ -349,7 +349,9 @@ Your own write is the freshest source; subsequent commands in this session don't ## Seed mode -For projects with no visual system to extract yet. Produces a user-chosen visual-world scaffold, not a fabricated token spec. +For projects with no visual system to extract yet. Produces a minimal, user-chosen scaffold, not a fabricated token spec. + +PRODUCT.md is the prerequisite. If it is missing, load [init.md](init.md) and complete its product interview first. Do not create a visual identity without durable product context. ### Step 1: Confirm seed mode and ask for assets @@ -412,7 +414,7 @@ When generation is available, **stop and load [visual-cues.md](visual-cues.md)** ### Step 5: Write seed DESIGN.md -Use the six-section spec from Scan mode. Populate what the interview, the assets, and any cue pick answer; leave the rest as honest placeholders. The seed is a scaffold, not a fabricated spec. +Use the canonical section order from Scan mode. Populate what the interview, the assets, and any cue pick answer; leave the rest as honest placeholders. The seed is a scaffold, not a fabricated spec. Lead the file with: @@ -425,9 +427,10 @@ Per-section guidance in seed mode: - **Overview**: Creative North Star and philosophy phrased from the answers (color strategy + motion energy + references). Reference the user's anti-reference directly. - **Colors**: Color strategy as a Named Rule (e.g. *"The Drenched Rule. The surface IS the color."*). Hue family or anchor reference. Colors sampled from a provided logo, or from a cue image the user picked in Step 4, are real; include them with exact values and note the source. Everything else stays `[to be resolved during implementation]`; those sampled anchors are the only hex a seed may carry. - **Typography**: the direction the user picked (e.g. "Serif display + sans body"). No font names yet: `[font pairing to be chosen at implementation]`. -- **Elevation**: inferred from motion energy. Restrained/Responsive → flat by default; Choreographed → layered. One sentence. +- **Layout** and **Shapes**: omit unless an asset or answer established a spatial or form preference; do not invent grids or corner language pre-implementation. +- **Elevation & Depth**: inferred from motion energy. Restrained/Responsive → flat by default; Choreographed → layered. One sentence. - **Components**: omit entirely; no components exist yet. -- **Do's and Don'ts**: record the durable guardrails confirmed during the world choice, not task-local refusals. +- **Do's and Don'ts**: carry PRODUCT.md's anti-references directly plus the anti-reference named in Q5. Seed mode writes a minimal frontmatter with `name` and `description` only; no colors, typography, rounded, spacing, or components yet. Real tokens land on the next Scan-mode run. Skip the `.impeccable/design.json` sidecar in seed mode for the same reason: nothing to render. diff --git a/skill/reference/shape.md b/skill/reference/shape.md index 535c5b57a..90a74ae81 100644 --- a/skill/reference/shape.md +++ b/skill/reference/shape.md @@ -56,107 +56,4 @@ Use three to five bullets when the task is settled; use the full structure only Present the brief for explicit confirmation or one correction round, then stop: shape never writes code or a direction contract. -### Constraints -- Are there technical constraints? (Framework, performance budget, browser support) -- Are there content constraints? (Localization, dynamic text length, user-generated content) -- Mobile/responsive requirements? -- Accessibility requirements beyond WCAG AA? - -### Anti-Goals -- What should this NOT be? What would be a wrong direction? -- What's the biggest risk of getting this wrong? - -## Phase 1.5: Visual Direction Probe (Capability-Gated) - -After the discovery interview, generate a small set of visual direction probes **before** writing the final brief when all of these are true: - -- The work is **net-new** or directionally ambiguous enough that visual exploration will clarify the brief. -- The requested fidelity is **mid-fi, high-fi, or production-ready**. Skip for sketch-only planning. -- The current harness gives you native image generation (Codex's `image_gen`, an equivalent MCP tool, or similar). Don't ask the user to install APIs or tooling. - -When those conditions are met, this step is mandatory. If image generation isn't natively available, do not ask the user to install APIs or tooling. State in one line that the image step is skipped because the harness lacks native image generation, then proceed. The one-line announcement is required, not optional; it forces a conscious decision instead of letting the step quietly evaporate. - -Use probes to explore visual lanes, not to replace the brief. - -Do not skip probes because the final UI will be semantic, editable, code-native, responsive, or accessible. Those are implementation requirements, not reasons to avoid visual exploration. - -### What to generate - -Generate **2 to 4** distinct direction probes based on the discovery answers, especially: - -- Color strategy -- Theme scene sentence -- Named anchor references -- Scope and fidelity - -The probes should differ in primary visual direction (hierarchy, topology, density, typographic voice, or color strategy), not just palette tweaks. - -### How to use the probes - -- Treat them as **direction tests**, not final designs. -- Use them to pressure-test whether the brief is pointing at the right lane. -- Ask the user which direction feels closest, what feels off, and what should carry forward. -- If the probes reveal a mismatch, revise the brief inputs before finalizing the brief. - -### Important limits - -- Do **not** skip discovery because image generation is available. -- Do **not** treat generated imagery as final UX specification, final copy, or final accessibility behavior. -- Do **not** use this step for minor refinements of existing work. It's for shaping a new surface or clarifying a big directional choice. - -If image generation isn't natively available, announce the skip in one line and proceed to the design brief. - -## Phase 2: Design Brief - -After the interview and any required probes, present a brief and **end your response**. The user must confirm before any implementation runs. Do not present a brief and then continue to code in the same response, even if the brief feels obvious to you. The user's confirmation is the gate. - -**Choose the brief shape based on how clear the answers are:** - -- **Compact form (3-5 bullets)** when discovery was crisp and the original prompt + PRODUCT.md already pinned scope, content, and direction. State what you're building, the visual lane, and end with one or two specific questions or a clear "confirm or override?" prompt. This is the default for typical craft requests with a clear prompt. -- **Full structured form (sections below)** when the task is genuinely ambiguous, multi-screen, or when the user asked for shape as a standalone step. Use this when the discipline of structure earns its weight. - -Don't pad a clear brief into a long one to look thorough. A 70-line brief restating answers the user just gave is noise, not rigor. Equally, don't skip the confirmation pause to look efficient: the pause is the point. - -Present the brief, then **stop and wait for explicit confirmation**. You are not the judge of whether the user already approved. Even when the brief feels obviously right, ask once and wait. The pause is what separates shape from premature implementation. - -### Brief Structure - -**1. Feature Summary** (2-3 sentences) -What this is, who it's for, what it needs to accomplish. - -**2. Primary User Action** -The single most important thing a user should do or understand here. - -**3. Design Direction** -Color strategy (Restrained / Committed / Full palette / Drenched) + the theme scene sentence + 2–3 named anchor references. Reference PRODUCT.md and DESIGN.md where they already answer, and note any per-surface overrides. - -If you ran the Visual Direction Probe step, name which probe direction won and what changed in the brief because of it. - -**4. Scope** -Fidelity, breadth, interactivity, and time intent from the Scope section of the interview. Task-scoped; these don't persist beyond the brief. - -**5. Layout Strategy** -High-level spatial approach: what gets emphasis, what's secondary, how information flows. Describe the visual hierarchy and rhythm, not specific CSS. - -**6. Key States** -List every state the feature needs: default, empty, loading, error, success, edge cases. For each, note what the user needs to see and feel. - -**7. Interaction Model** -How users interact with this feature. What happens on click, hover, scroll? What feedback do they get? What's the flow from entry to completion? - -**8. Content Requirements** -What copy, labels, empty state messages, error messages, and microcopy are needed. Note any dynamic content and its realistic ranges. For image-led surfaces, also list the required image/media roles and their likely source (project asset, generated raster, semantic SVG/CSS, canvas/WebGL, icon library, or accepted omission). - -**9. Recommended References** -Based on the brief, list which impeccable reference files would be most valuable during implementation (e.g., layout.md for complex layouts, animate.md for animated features, interaction-design.md for form-heavy features, typeset.md for typography-driven pages, colorize.md for color-led brands). - -**10. Open Questions** -Anything genuinely unresolved. Don't list "open questions" you've already recommended a default for; assert the default and move on. If you'd write `Recommend: X` next to a question, just decide X. - ---- - -{{ask_instruction}} Ask for explicit confirmation of the brief before finishing. - -If the user disagrees with any part, revisit the relevant discovery questions. A shape run is incomplete until the user confirms direction. - -Once confirmed, the brief is complete. The user can now hand it to {{command_prefix}}impeccable, or use it to guide any other implementation approach. (If the user wants the full discovery-then-build flow in one step, they should use {{command_prefix}}impeccable craft instead, which runs this command internally.) +When no human or structured answer mechanism exists, mark assumptions plainly, return the brief, and stop. diff --git a/skill/scripts/palette.mjs b/skill/scripts/palette.mjs index 0d524cba2..d9b0420cc 100644 --- a/skill/scripts/palette.mjs +++ b/skill/scripts/palette.mjs @@ -420,8 +420,6 @@ const SEEDS = [ strategy: "Pure white surface so the rose-pink primary carries all the brand warmth, paired with a near-black ink and a desaturated mauve accent for editorial restraint." }, ]; -export { SEEDS }; - function parseArgs(argv) { const args = { id: null, from: null }; for (let i = 0; i < argv.length; i++) { @@ -497,139 +495,142 @@ function hueWord(H) { // --------------------------------------------------------------- +// The picker server imports SEEDS to serve /palettes.json; the CLI tail +// below only runs when this file is the entry point, so importing it has +// no side effects. +export { SEEDS }; + if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) { - const args = parseArgs(process.argv.slice(2)); - const seed = pickSeed(SEEDS, args); - const [L, C, H] = seed.oklch; +const args = parseArgs(process.argv.slice(2)); +const seed = pickSeed(SEEDS, args); +const [L, C, H] = seed.oklch; - // The mood + strategy on each seed were derived by the model that - // originally judged it. We surface them as *hints*, not commands — - // the brief should still drive what the seed becomes. - const moodHint = seed.mood ? ` (one read: "${seed.mood}")` : ''; - const strategyHint = seed.strategy ? `\n - one example strategy: ${seed.strategy}` : ''; +// The mood + strategy on each seed were derived by the model that +// originally judged it. We surface them as *hints*, not commands — +// the brief should still drive what the seed becomes. +const moodHint = seed.mood ? ` (one read: "${seed.mood}")` : ''; +const strategyHint = seed.strategy ? `\n - one example strategy: ${seed.strategy}` : ''; - // --------------------------------------------------------------- - // Fat tool-exit response — what the model sees on stdout. - // --------------------------------------------------------------- +// --------------------------------------------------------------- +// Fat tool-exit response — what the model sees on stdout. +// --------------------------------------------------------------- - process.stdout.write(`BRAND SEED · ${seed.id} +process.stdout.write(`BRAND SEED · ${seed.id} - Seed color (anchor for your primary brand color): - ${fmtOklch(seed.oklch)} — ${hueWord(H)}${moodHint} +Seed color (anchor for your primary brand color): + ${fmtOklch(seed.oklch)} — ${hueWord(H)}${moodHint} - This is the brand's anchor — a single beautiful color. Compose the rest of - the palette around it using YOUR judgment, the brief (PRODUCT.md / - DESIGN.md / the user's prompt), and the color-strategy guidance already in - SKILL.md. +This is the brand's anchor — a single beautiful color. Compose the rest of +the palette around it using YOUR judgment, the brief (PRODUCT.md / +DESIGN.md / the user's prompt), and the color-strategy guidance already in +SKILL.md. - How to use: +How to use: - 1. Read the brief. Write one specific phrase describing the mood this - product calls for. Be granular. Good: "1970s travel poster — sun-baked - warmth, considered", "midnight jazz club — smoky brass, saxophone - light", "Scandinavian winter morning — quiet light through frost". Bad: - "modern and clean", "warm and inviting". The first lets you compose; the - second is generic and will produce generic palettes. +1. Read the brief. Write one specific phrase describing the mood this + product calls for. Be granular. Good: "1970s travel poster — sun-baked + warmth, considered", "midnight jazz club — smoky brass, saxophone + light", "Scandinavian winter morning — quiet light through frost". Bad: + "modern and clean", "warm and inviting". The first lets you compose; the + second is generic and will produce generic palettes. - 2. The seed's hue (${H.toFixed(0)}°) anchors your primary brand color. You - choose L and C to match the mood. The same hue can be deep-and-velvet, - bright-and-confident, or pale-and-faded — pick the one the mood demands. - Primary's hue should stay within ±10° of the seed.${strategyHint} +2. The seed's hue (${H.toFixed(0)}°) anchors your primary brand color. You + choose L and C to match the mood. The same hue can be deep-and-velvet, + bright-and-confident, or pale-and-faded — pick the one the mood demands. + Primary's hue should stay within ±10° of the seed.${strategyHint} - 3. Now compose the full palette in OKLCH (5 more roles): - • bg — the most important architectural choice. - CORE PRINCIPLE: the mood lives in the BRAND COLORS - (primary + accent) and typography, NOT in the surface. - Stripe is warm — its purple does that, bg is pure - white. Linear is cool — its blue does that, bg is - pure. Notion is warm — its accents do that, bg is - near-pure-white. Putting warmth in BOTH primary AND - bg is the AI cliché. +3. Now compose the full palette in OKLCH (5 more roles): + • bg — the most important architectural choice. + CORE PRINCIPLE: the mood lives in the BRAND COLORS + (primary + accent) and typography, NOT in the surface. + A warm brand puts the warmth in its primary against a + pure surface. Putting warmth in BOTH primary AND bg is + the AI cliché. - DEFAULT A — PURE white: exactly oklch(1.000 0.000 0). - Not 0.99, not chroma 0.002. Stripe / Notion / Apple - use literal #ffffff. Don't add hidden warmth. - Refs: Stripe, Notion, Linear (light), Apple.com, - Vercel docs, Figma marketing, Loom, Substack. + DEFAULT A — PURE white: exactly oklch(1.000 0.000 0). + Not 0.99, not chroma 0.002. The most confident + brands in every field — fashion houses, galleries, + publishers, tool makers — use literal #ffffff. + Don't add hidden warmth. - DEFAULT B — PURE black/near-black: L 0.04-0.12, - chroma exactly 0.000. No hue tint. Vercel is - roughly oklch(0.08 0 0). Pick L for mood; C is 0. - Refs: Vercel, A24, Acne, Apple dark, MUBI. + DEFAULT B — PURE black/near-black: L 0.04-0.12, + chroma exactly 0.000. No hue tint. Pick L for the + mood (cinema dark, gallery dark, instrument-panel + dark); C stays 0. - ALT 2 — TINTED: chroma 0.015-0.05. - Use ONLY when: - (a) the mood is EXPLICITLY environmental — the surface - IS part of the brand (1920s lacquered interior, - leather library, ceramic studio, hotel lobby), or - (b) the seed itself is desaturated (chroma < 0.10) and - needs a tinted surface to read as a brand. - NOT for "feels warm" / "modern + warm" / "moody". If - your mood says "warm" but doesn't name a specific - environment, use PURE white and let primary carry - the warmth. + ALT 2 — TINTED: chroma 0.015-0.05. + Use ONLY when: + (a) the mood is EXPLICITLY environmental — the surface + IS part of the brand (1920s lacquered interior, + leather library, ceramic studio, hotel lobby), or + (b) the seed itself is desaturated (chroma < 0.10) and + needs a tinted surface to read as a brand. + NOT for "feels warm" / "modern + warm" / "moody". If + your mood says "warm" but doesn't name a specific + environment, use PURE white and let primary carry + the warmth. - HEURISTIC: if seed chroma > 0.10 AND mood is product- - focused (not environment-focused), it's almost always - PURE white. Target distribution across many palettes: - ~50% pure white, ~25% pure black, ~25% tinted. - • surface — bg pulled slightly toward ink (10-15% mix). Same hue - family as bg. Used for cards, panels, sections. - • ink — body text color. Must reach ≥7:1 contrast vs bg. - Can carry the brand hue at low chroma in light mode - (slight warmth or coolness toward the brand). - • accent — a SECOND brand color, distinct from primary in BOTH - hue AND lightness. Picked to complement the mood (not - default-complementary across the wheel). Used for - badges, status pills, links, accent rules. - • muted — secondary text. Ink pulled 40% toward bg, keeping ink's - hue. Must reach ≥3.5:1 contrast vs bg. + HEURISTIC: if the seed's chroma > 0.10 and the mood + doesn't name a specific environment, it's almost + always PURE white. Target distribution across many + palettes: ~50% pure white, ~25% pure black, ~25% + tinted. + • surface — bg pulled slightly toward ink (10-15% mix). Same hue + family as bg. Used for cards, panels, sections. + • ink — body text color. Must reach ≥7:1 contrast vs bg. + Can carry the brand hue at low chroma in light mode + (slight warmth or coolness toward the brand). + • accent — a SECOND brand color, distinct from primary in BOTH + hue AND lightness. Picked to complement the mood (not + default-complementary across the wheel). Used for + badges, status pills, links, accent rules. + • muted — secondary text. Ink pulled 40% toward bg, keeping ink's + hue. Must reach ≥3.5:1 contrast vs bg. - 4. Pick a color STRATEGY (the four steps from SKILL.md): - • Restrained: tinted neutrals + accent ≤10% — product default - • Committed: one saturated color carries 30-60% — identity-driven - • Full palette: 3-4 named roles each used deliberately — brand work - • Drenched: the surface IS the color — campaign, hero, statement - The brief picks the strategy. A startup dashboard ≠ a perfume brand. +4. Pick a color STRATEGY (the four steps from SKILL.md): + • Restrained: tinted neutrals + accent ≤10% — product default + • Committed: one saturated color carries 30-60% — identity-driven + • Full palette: 3-4 named roles each used deliberately — brand work + • Drenched: the surface IS the color — campaign, hero, statement + The brief picks the strategy. A startup dashboard ≠ a perfume brand. - Hard rules (already in SKILL.md, recapped because the seed step is where - they actually bite): +Hard rules (already in SKILL.md, recapped because the seed step is where +they actually bite): - - OKLCH only — never hex. Never #RRGGBB. - - ink-vs-bg WCAG contrast ≥ 7 (body text must be readable) - - primary chroma ≤ 0.23 (above this, primary glows perceptually and - no text on it is readable — acid-bright is a UI failure) - - if primary L > 0.78, primary chroma ≤ 0.18 (the fluorescent zone) - - primary-vs-accent contrast ≥ 1.7 (they must be visually distinct, - not two variants of the same hue at similar lightness) - - accent must carry readable text on a filled badge/pill: EITHER - saturated (chroma ≥ 0.10) OR clearly light (L ≥ 0.85) OR clearly - dark (L ≤ 0.30). Never a muddy mid-tone (L 0.45-0.72 + chroma < 0.10) - — taupe/mushroom/dusty-grey accents read as weak and can't hold text - either way. Saturate it or push its lightness to a clear light/dark. - - avoid the saturated AI attractor zones: claude-beige (warm-cream bg - + dusty brown primary), forest-green-on-cream, AI-purple-on-white, - navy-cream-with-orange-accent + - OKLCH only — never hex. Never #RRGGBB. + - ink-vs-bg WCAG contrast ≥ 7 (body text must be readable) + - primary chroma ≤ 0.23 (above this, primary glows perceptually and + no text on it is readable — acid-bright is a UI failure) + - if primary L > 0.78, primary chroma ≤ 0.18 (the fluorescent zone) + - primary-vs-accent contrast ≥ 1.7 (they must be visually distinct, + not two variants of the same hue at similar lightness) + - accent must carry readable text on a filled badge/pill: EITHER + saturated (chroma ≥ 0.10) OR clearly light (L ≥ 0.85) OR clearly + dark (L ≤ 0.30). Never a muddy mid-tone (L 0.45-0.72 + chroma < 0.10) + — taupe/mushroom/dusty-grey accents read as weak and can't hold text + either way. Saturate it or push its lightness to a clear light/dark. + - avoid the saturated AI attractor zones: claude-beige (warm-cream bg + + dusty brown primary), forest-green-on-cream, AI-purple-on-white, + navy-cream-with-orange-accent - TEXT-ON-COLOR FILLS — pick by perceptual contrast, not just WCAG. The - rule applies to ANY element where text sits on a saturated color fill: - primary buttons, accent buttons, badges, status pills, tag highlights, - filled callouts. Don't only think "primary button" — apply consistently. +TEXT-ON-COLOR FILLS — pick by perceptual contrast, not just WCAG. The +rule applies to ANY element where text sits on a saturated color fill: +primary buttons, accent buttons, badges, status pills, tag highlights, +filled callouts. Don't only think "primary button" — apply consistently. - For any saturated mid-luminance color (L between 0.42 and 0.78, chroma ≥ - 0.08), use WHITE text (or near-white from your bg), not dark text — even - if WCAG says dark technically passes. The Helmholtz-Kohlrausch effect - makes saturated colors appear brighter than their luminance suggests, - and dark text on a warm-or-cool-saturated fill reads as muddy. +For any saturated mid-luminance color (L between 0.42 and 0.78, chroma ≥ +0.08), use WHITE text (or near-white from your bg), not dark text — even +if WCAG says dark technically passes. The Helmholtz-Kohlrausch effect +makes saturated colors appear brighter than their luminance suggests, +and dark text on a warm-or-cool-saturated fill reads as muddy. - Convention: Stripe orange CTAs, McDonald's red, every fintech orange - button, Vercel's filled badges, Linear's status pills — all use white - text on saturated bg fills. +Convention: saturated action fills in the wild, from fast-food reds to +status pills to filled badges, near-universally carry white text. - Dark text is correct only on PALE fills (L > 0.85) or PURE-NEUTRAL fills - (chroma near 0). Everything else: white text. +Dark text is correct only on PALE fills (L > 0.85) or PURE-NEUTRAL fills +(chroma near 0). Everything else: white text. - Return your composed palette in CSS custom properties using OKLCH, then - build with it. The seed is the start, not the recipe. - `); +Return your composed palette in CSS custom properties using OKLCH, then +build with it. The seed is the start, not the recipe. +`); } diff --git a/skill/scripts/picker-server.mjs b/skill/scripts/picker-server.mjs index 6b8f521eb..ef8191011 100644 --- a/skill/scripts/picker-server.mjs +++ b/skill/scripts/picker-server.mjs @@ -10,7 +10,7 @@ import { readFile, mkdir, stat, writeFile } from 'node:fs/promises'; import net from 'node:net'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import { extractRegister } from './context.mjs'; +import { extractSectionValue } from './context.mjs'; import { SEEDS } from './palette.mjs'; const scriptDir = path.dirname(fileURLToPath(import.meta.url)); const pickerDir = path.join(scriptDir, 'picker'); @@ -173,7 +173,8 @@ if (options.help) { let register = 'brand'; try { const product = await readFile(path.resolve(process.cwd(), 'PRODUCT.md'), 'utf8'); - register = extractRegister(product) || register; + const value = (extractSectionValue(product, 'Register') || '').toLowerCase(); + if (value === 'brand' || value === 'product') register = value; } catch { // A missing or unreadable PRODUCT.md keeps the brand preview default. }