howone 0.1.20 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/templates/nextjs/lib/sdk.ts +3 -0
- package/templates/vite/.howone/skills/hallmark/LICENSE +21 -0
- package/templates/vite/.howone/skills/hallmark/README.md +147 -0
- package/templates/vite/.howone/skills/hallmark/ROADMAP.md +201 -0
- package/templates/vite/.howone/skills/hallmark/SKILL.md +551 -0
- package/templates/vite/.howone/skills/hallmark/docs/recipes.md +186 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-anya.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-bananastudio.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-hyperlane.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-najm.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-slow-pour.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-soroe.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-tally.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/screenshots/hero-wayfare.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/docs/study-examples.md +176 -0
- package/templates/vite/.howone/skills/hallmark/docs/talk-slides.md +364 -0
- package/templates/vite/.howone/skills/hallmark/package.json +36 -0
- package/templates/vite/.howone/skills/hallmark/references/anti-patterns.md +412 -0
- package/templates/vite/.howone/skills/hallmark/references/assets.md +399 -0
- package/templates/vite/.howone/skills/hallmark/references/color.md +95 -0
- package/templates/vite/.howone/skills/hallmark/references/component-cookbook.md +256 -0
- package/templates/vite/.howone/skills/hallmark/references/components/c1-outlined-chip.md +12 -0
- package/templates/vite/.howone/skills/hallmark/references/components/c2-inline-form-as-cta.md +16 -0
- package/templates/vite/.howone/skills/hallmark/references/components/c3-typographic-link.md +8 -0
- package/templates/vite/.howone/skills/hallmark/references/components/c4-sticky-bottom-bar.md +16 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f1-bento-grid.md +20 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f2-sticky-scroll-stack.md +20 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f3-tabular-spec-sheet.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f4-step-sequence.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f5-annotated-screenshot.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/f6-product-card-grid.md +41 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft1-mast-headed.md +13 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft2-inline-rule-single-line.md +10 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft3-index-style-category-list.md +12 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft4-dense-typographic.md +10 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft5-statement.md +21 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft6-letter-close.md +19 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft7-newsletter-first.md +27 -0
- package/templates/vite/.howone/skills/hallmark/references/components/ft8-marquee-scroll.md +25 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h1-marquee.md +15 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h2-split-diptych.md +15 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h3-quote-led.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h4-stat-led.md +14 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h5-letter-hero.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h6-photographic-fold.md +16 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h7-demo-video-clipped-by-viewport-edge.md +27 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h8-mockup-split-browser-framed.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/components/h9-custom-illustration-centerpiece.md +27 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n1-wordmark-2-links.md +12 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n10-floating-on-scroll-morph.md +19 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n2-floating-chip.md +14 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n3-side-rail.md +14 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n4-hidden-behind-k.md +9 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n5-floating-pill.md +28 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n6-newspaper-masthead.md +24 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n7-brutal-slab.md +22 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n8-terminal-command.md +21 -0
- package/templates/vite/.howone/skills/hallmark/references/components/n9-edge-aligned-minimal.md +17 -0
- package/templates/vite/.howone/skills/hallmark/references/components/s1-left-margin-numbered.md +15 -0
- package/templates/vite/.howone/skills/hallmark/references/components/s2-hanging.md +13 -0
- package/templates/vite/.howone/skills/hallmark/references/components/s3-sticky-pinned.md +19 -0
- package/templates/vite/.howone/skills/hallmark/references/components/s4-inline-no-break.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/s5-bottom-anchored.md +13 -0
- package/templates/vite/.howone/skills/hallmark/references/components/t1-pull-quote-with-marginalia.md +12 -0
- package/templates/vite/.howone/skills/hallmark/references/components/t2-logo-wall-hairline.md +19 -0
- package/templates/vite/.howone/skills/hallmark/references/components/t3-single-huge-quote.md +11 -0
- package/templates/vite/.howone/skills/hallmark/references/components/t4-numbered-stat-strip.md +14 -0
- package/templates/vite/.howone/skills/hallmark/references/contract.md +24 -0
- package/templates/vite/.howone/skills/hallmark/references/copy.md +182 -0
- package/templates/vite/.howone/skills/hallmark/references/custom-craft.md +626 -0
- package/templates/vite/.howone/skills/hallmark/references/custom-theme.md +329 -0
- package/templates/vite/.howone/skills/hallmark/references/design-md.md +116 -0
- package/templates/vite/.howone/skills/hallmark/references/export-formats.md +328 -0
- package/templates/vite/.howone/skills/hallmark/references/floating-nav.md +89 -0
- package/templates/vite/.howone/skills/hallmark/references/genres/atmospheric.md +65 -0
- package/templates/vite/.howone/skills/hallmark/references/genres/editorial.md +70 -0
- package/templates/vite/.howone/skills/hallmark/references/genres/modern-minimal.md +67 -0
- package/templates/vite/.howone/skills/hallmark/references/genres/playful.md +65 -0
- package/templates/vite/.howone/skills/hallmark/references/hero-enrichment.md +474 -0
- package/templates/vite/.howone/skills/hallmark/references/imagery-kit.md +170 -0
- package/templates/vite/.howone/skills/hallmark/references/interaction-and-states.md +207 -0
- package/templates/vite/.howone/skills/hallmark/references/layout-and-space.md +111 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/01-bento-grid.md +35 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/02-long-document.md +34 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/03-marquee-hero.md +31 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/04-stat-led.md +32 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/05-workbench.md +32 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/06-conversational-faq.md +33 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/07-manifesto.md +32 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/08-photographic.md +34 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/09-quote-led.md +32 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/10-specimen.md +32 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/11-catalogue.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/12-letter.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/13-index-first.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/14-narrative-workflow.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/15-split-studio.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/17-type-specimen.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/18-portfolio-grid.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/19-map-diagram.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/20-ecosystem-index.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures/21-component-playground.md +23 -0
- package/templates/vite/.howone/skills/hallmark/references/macrostructures.md +89 -0
- package/templates/vite/.howone/skills/hallmark/references/microinteractions.md +260 -0
- package/templates/vite/.howone/skills/hallmark/references/motion.md +109 -0
- package/templates/vite/.howone/skills/hallmark/references/preview-examples.md +49 -0
- package/templates/vite/.howone/skills/hallmark/references/responsive.md +138 -0
- package/templates/vite/.howone/skills/hallmark/references/slop-test.md +205 -0
- package/templates/vite/.howone/skills/hallmark/references/structure.md +164 -0
- package/templates/vite/.howone/skills/hallmark/references/study.md +486 -0
- package/templates/vite/.howone/skills/hallmark/references/typography.md +243 -0
- package/templates/vite/.howone/skills/hallmark/references/verbs/audit.md +25 -0
- package/templates/vite/.howone/skills/hallmark/references/verbs/redesign.md +269 -0
- package/templates/vite/.howone/skills/hallmark/site/OG-hallmark.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/brief.md +71 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/index.html +64 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/01-tide-podcast/style.css +240 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/brief.md +65 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/index.html +105 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/02-streampipe-cli/style.css +250 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/brief.md +64 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/index.html +131 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/03-maple-bakery/style.css +240 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/brief.md +67 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/index.html +86 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/04-meridian-manifesto/style.css +262 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/brief.md +63 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/index.html +167 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/05-tracejam-saas/style.css +457 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/brief.md +65 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/index.html +159 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/06-anya-portfolio/style.css +288 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/brief.md +64 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/index.html +146 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/07-foundry-compliance/style.css +484 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/brief.md +64 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/index.html +116 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/08-cohort-courses/style.css +354 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/09-slow-pour/index.html +638 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/10-owl-hours/index.html +515 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/11-soroe-ceramics/index.html +515 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/12-loafer/index.html +608 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/13-alma/index.html +587 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/README.md +157 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/BananaStudio-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-example.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Hyperlane-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Najm-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Podcast-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/SaaS-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/Soroe-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/after-quiet-hour.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/anya-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/audit-example.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/before-quiet-hour.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/example-redesign-uractivation.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/slow-pour-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/study-example.png +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/uractivation-after-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-loop.mp4 +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/_thumbs/wayfare-still.jpg +0 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/index.html +77 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/01-coffeebox/style.css +238 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/index.html +110 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/02-loop/style.css +326 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/index.html +134 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/03-mossroot/style.css +262 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/custom/README.md +30 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/README.md +17 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/audit-report.md +56 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/input.html +160 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/audit/notes.md +29 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/input.html +63 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/notes.md +72 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/redesign/output.html +374 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/diagnosis.md +52 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/input-description.md +29 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/notes.md +61 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.css +193 -0
- package/templates/vite/.howone/skills/hallmark/site/_tests/verbs/study/output.html +66 -0
- package/templates/vite/.howone/skills/hallmark/site/css/base.css +194 -0
- package/templates/vite/.howone/skills/hallmark/site/css/components.css +4886 -0
- package/templates/vite/.howone/skills/hallmark/site/css/sections.css +2072 -0
- package/templates/vite/.howone/skills/hallmark/site/css/tokens.css +1129 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/index.html +475 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/styles.css +1584 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/bananastudio/tokens.css +96 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/index.html +344 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/script.js +103 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/styles.css +1103 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/hyperlane/tokens.css +83 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/najm/index.html +368 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/najm/script.js +133 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/najm/styles.css +1062 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/najm/tokens.css +97 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/tally/app.js +84 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/tally/index.html +446 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/tally/styles.css +1087 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/tally/tokens.css +101 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/index.html +359 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/style.css +1168 -0
- package/templates/vite/.howone/skills/hallmark/site/examples/wayfare/tokens.css +81 -0
- package/templates/vite/.howone/skills/hallmark/site/favicon-dark.svg +5 -0
- package/templates/vite/.howone/skills/hallmark/site/favicon-light.svg +5 -0
- package/templates/vite/.howone/skills/hallmark/site/index.html +1043 -0
- package/templates/vite/.howone/skills/hallmark/site/js/main.js +1175 -0
- package/templates/vite/.howone/skills/hallmark/vercel.json +6 -0
- package/templates/vite/.howone/skills/howone-sdk/01-architect/01-app-generation.md +126 -0
- package/templates/vite/.howone/skills/howone-sdk/{references/08-manifest-codegen.md → 01-architect/02-manifest-codegen.md} +31 -19
- package/templates/vite/.howone/skills/howone-sdk/02-database/01-schema-design.md +147 -0
- package/templates/vite/.howone/skills/howone-sdk/02-database/02-schema-operations.md +96 -0
- package/templates/vite/.howone/skills/howone-sdk/02-database/03-data-access-patterns.md +172 -0
- package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/01-client-setup.md +3 -3
- package/templates/vite/.howone/skills/howone-sdk/{references/04-auth.md → 03-sdk/03-auth.md} +120 -3
- package/templates/vite/.howone/skills/howone-sdk/{references/06-react-integration.md → 03-sdk/04-react-integration.md} +2 -4
- package/templates/vite/.howone/skills/howone-sdk/{references/03-ai-actions.md → 03-sdk/07-ai-action-calls.md} +31 -34
- package/templates/vite/.howone/skills/howone-sdk/04-ai/.gitkeep +1 -0
- package/templates/vite/.howone/skills/howone-sdk/04-ai/01-ai-capability-architecture.md +142 -0
- package/templates/vite/.howone/skills/howone-sdk/04-ai/02-workflow-contract-rules.md +169 -0
- package/templates/vite/.howone/skills/howone-sdk/04-ai/03-ai-sdk-handoff.md +80 -0
- package/templates/vite/.howone/skills/howone-sdk/SKILL.md +118 -93
- package/templates/vite/.howone/skills/howone-sdk/agents/openai.yaml +3 -3
- package/templates/vite/.howone/skills/impeccable/SKILL.md +168 -0
- package/templates/vite/.howone/skills/impeccable/agents/impeccable-asset-producer.md +101 -0
- package/templates/vite/.howone/skills/impeccable/reference/adapt.md +190 -0
- package/templates/vite/.howone/skills/impeccable/reference/animate.md +175 -0
- package/templates/vite/.howone/skills/impeccable/reference/audit.md +133 -0
- package/templates/vite/.howone/skills/impeccable/reference/bolder.md +113 -0
- package/templates/vite/.howone/skills/impeccable/reference/brand.md +118 -0
- package/templates/vite/.howone/skills/impeccable/reference/clarify.md +174 -0
- package/templates/vite/.howone/skills/impeccable/reference/codex.md +105 -0
- package/templates/vite/.howone/skills/impeccable/reference/cognitive-load.md +106 -0
- package/templates/vite/.howone/skills/impeccable/reference/color-and-contrast.md +105 -0
- package/templates/vite/.howone/skills/impeccable/reference/colorize.md +154 -0
- package/templates/vite/.howone/skills/impeccable/reference/craft.md +123 -0
- package/templates/vite/.howone/skills/impeccable/reference/critique.md +273 -0
- package/templates/vite/.howone/skills/impeccable/reference/delight.md +302 -0
- package/templates/vite/.howone/skills/impeccable/reference/distill.md +111 -0
- package/templates/vite/.howone/skills/impeccable/reference/document.md +427 -0
- package/templates/vite/.howone/skills/impeccable/reference/extract.md +69 -0
- package/templates/vite/.howone/skills/impeccable/reference/harden.md +347 -0
- package/templates/vite/.howone/skills/impeccable/reference/heuristics-scoring.md +234 -0
- package/templates/vite/.howone/skills/impeccable/reference/interaction-design.md +195 -0
- package/templates/vite/.howone/skills/impeccable/reference/layout.md +141 -0
- package/templates/vite/.howone/skills/impeccable/reference/live.md +622 -0
- package/templates/vite/.howone/skills/impeccable/reference/motion-design.md +109 -0
- package/templates/vite/.howone/skills/impeccable/reference/onboard.md +234 -0
- package/templates/vite/.howone/skills/impeccable/reference/optimize.md +258 -0
- package/templates/vite/.howone/skills/impeccable/reference/overdrive.md +130 -0
- package/templates/vite/.howone/skills/impeccable/reference/personas.md +179 -0
- package/templates/vite/.howone/skills/impeccable/reference/polish.md +242 -0
- package/templates/vite/.howone/skills/impeccable/reference/product.md +62 -0
- package/templates/vite/.howone/skills/impeccable/reference/quieter.md +99 -0
- package/templates/vite/.howone/skills/impeccable/reference/responsive-design.md +114 -0
- package/templates/vite/.howone/skills/impeccable/reference/shape.md +165 -0
- package/templates/vite/.howone/skills/impeccable/reference/spatial-design.md +100 -0
- package/templates/vite/.howone/skills/impeccable/reference/teach.md +156 -0
- package/templates/vite/.howone/skills/impeccable/reference/typeset.md +124 -0
- package/templates/vite/.howone/skills/impeccable/reference/typography.md +159 -0
- package/templates/vite/.howone/skills/impeccable/reference/ux-writing.md +107 -0
- package/templates/vite/.howone/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
- package/templates/vite/.howone/skills/impeccable/scripts/command-metadata.json +94 -0
- package/templates/vite/.howone/skills/impeccable/scripts/critique-storage.mjs +242 -0
- package/templates/vite/.howone/skills/impeccable/scripts/design-parser.mjs +820 -0
- package/templates/vite/.howone/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/templates/vite/.howone/skills/impeccable/scripts/detect.mjs +21 -0
- package/templates/vite/.howone/skills/impeccable/scripts/impeccable-paths.mjs +110 -0
- package/templates/vite/.howone/skills/impeccable/scripts/is-generated.mjs +69 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-accept.mjs +595 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-browser.js +4860 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-complete.mjs +75 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-completion.mjs +18 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-inject.mjs +446 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-poll.mjs +200 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-resume.mjs +48 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-server.mjs +838 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-session-store.mjs +254 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-status.mjs +47 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live-wrap.mjs +632 -0
- package/templates/vite/.howone/skills/impeccable/scripts/live.mjs +247 -0
- package/templates/vite/.howone/skills/impeccable/scripts/load-context.mjs +141 -0
- package/templates/vite/.howone/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/templates/vite/.howone/skills/impeccable/scripts/pin.mjs +214 -0
- package/templates/vite/AGENTS.md +2 -12
- package/templates/vite/package.json +1 -1
- package/templates/vite/src/lib/sdk.ts +3 -0
- /package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/02-entity-operations.md +0 -0
- /package/templates/vite/.howone/skills/howone-sdk/{references → 03-sdk}/05-file-upload.md +0 -0
- /package/templates/vite/.howone/skills/howone-sdk/{references/07-raw-http.md → 03-sdk/06-raw-http.md} +0 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
# Custom theme — protocol
|
|
2
|
+
|
|
3
|
+
Loaded only when the user has opted into the **custom** theme route in Step 1 of the Design flow. Custom produces a **complete OKLCH palette + free-font pairing tuned to this brief** — a one-off theme written inline into the page's `:root`, not a permanent catalog entry.
|
|
4
|
+
|
|
5
|
+
**The freedom is the combination, not the rules.** Every constraint in [`color.md`](color.md), [`typography.md`](typography.md), and [`anti-patterns.md`](anti-patterns.md) still applies. The 65 slop-test gates fire unchanged. The Step 5 preview block surfaces the palette + pairing in plain text *before* any code is emitted, so the user can redirect.
|
|
6
|
+
|
|
7
|
+
## Two words, plain English
|
|
8
|
+
|
|
9
|
+
- **catalog** — the named-theme catalogue. Hallmark's 22 themes (Specimen, Atelier, Brutal, Salon, Newsprint, Linen, Studio, Manifesto, Terminal, Midnight, Almanac, Garden, Quiet, Riso, Sport, Bloom, Coral, Violet, Aurora, Halo, Plume, Editorial). Each one is a fixed combination of paper-band, display-style, and accent-hue. The rotation rule cycles through them so two consecutive runs don't read alike. **This is the default.** Most briefs use it.
|
|
10
|
+
- **custom** — made-to-measure. A one-off palette + font pairing constructed specifically for one brief. The skill builds the OKLCH values, picks fonts, and stamps the page — but does **not** extend the catalog with a new theme. The rules behind the catalog (paper L bands, accent chroma caps, font ban list, slop-test gates) all still apply; only the *combination* is per-brief.
|
|
11
|
+
|
|
12
|
+
## When to surface this fork — Step 1 trigger signals
|
|
13
|
+
|
|
14
|
+
Hallmark must **not** offer catalog-vs-custom on every prompt. That's friction, not discipline. Surface the fork only when the brief carries one of these signals:
|
|
15
|
+
|
|
16
|
+
1. **Explicit ask** — the user types `custom`, "custom theme", "tailored to our brand", "make it ours", "something unique", "play around with the colors and fonts", "I want my own palette".
|
|
17
|
+
2. **Named brand colour** — the user gives a specific anchor colour as a hex / OKLCH / brand name. Example: "use our terracotta", "the brand red is hex #c0392b", "anchor on sea-blue".
|
|
18
|
+
3. **Multi-attribute aesthetic the catalog can't carry** — three or more vibe words pointing at a specific, off-catalog feel. Examples: "moss, lichen, soft pink, herbal" / "sun-drenched, market-day, carbon-black" / "late-night, neon, brutalist deli". Compare against the 22 catalog themes; if no single catalog theme is within one axis-step of the vibe, fire the fork. **One adjective ("warm", "technical", "playful") is not a signal — that's a tone, the catalog already carries it.**
|
|
19
|
+
4. **Brand-mood reference attached** — the user attaches a colour swatch, a moodboard, a Pantone chip. (If they attach a *page* screenshot, route to `study` instead; custom is for brand colour / mood, study is for design DNA.)
|
|
20
|
+
|
|
21
|
+
If any signal fires, ask one short follow-up before picking a theme:
|
|
22
|
+
|
|
23
|
+
> *"This brief reads like a custom palette would fit better than the 22 named themes. Want me to construct a custom OKLCH palette + free-font pairing tuned to <one-line summary of the vibe>, or stay on the catalog for variety + speed?"*
|
|
24
|
+
|
|
25
|
+
Wait for the user to answer. If they say custom (or yes / go) → continue this protocol from § A. If they say catalog (or no / stay catalog) → drop the fork and proceed with the catalog route. **Default to catalog** — silence routes to catalog, not custom.
|
|
26
|
+
|
|
27
|
+
If **none** of the signals fires, do not mention the fork at all. Continue silently with the catalog flow.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## § A · The one follow-up question
|
|
32
|
+
|
|
33
|
+
Once the user names `custom` as the theme route, ask **one** thing in **one** message:
|
|
34
|
+
|
|
35
|
+
> *"Custom needs one input — describe the brand's vibe in 4–8 words. Examples: 'archival warmth, hand-set, no varnish' · 'industrial precision, cool, technical' · 'moss, lichen, soft pink, herbal' · 'sun-drenched, market-day, carbon black' · 'late-night, neon, brutalist deli'.*
|
|
36
|
+
>
|
|
37
|
+
> *Optional second input: an anchor colour — hex, OKLCH, or a name like 'terracotta', 'sea-blue', 'forest-green', 'dusty-pink'. If you skip it, I'll pick one from the vibe."*
|
|
38
|
+
|
|
39
|
+
**Do not ask anything else.** Audience / use / tone (Step 1) plus the brand vibe is already enough signal. The model has no business asking the user to nominate paper lightness or font weights — that's the model's job.
|
|
40
|
+
|
|
41
|
+
If the user gives just two or three words ("sun-drenched"), proceed; the recipe below extracts enough. If the user gives a paragraph, accept it but compress to 4–8 words for the stamp.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## § B · Palette construction
|
|
46
|
+
|
|
47
|
+
Build the palette in this order. Each step cites the rule it's obeying — do not restate the rule, just apply it.
|
|
48
|
+
|
|
49
|
+
### B.1 · Anchor accent first
|
|
50
|
+
|
|
51
|
+
- Convert the user's named or hex anchor into OKLCH.
|
|
52
|
+
- Clamp chroma to **0.12–0.20** per [`color.md`](color.md) § "Accent — the discipline".
|
|
53
|
+
- If user skipped: derive hue from the vibe — *warmth* → 30–60° · *technical/industrial* → 220–250° · *botanical/moss* → 130–160° · *late-night/neon* → 280–320° · *sun-drenched/market* → 60–80° amber. Keep chroma 0.12–0.16 (mid-saturation; saturation comes from contrast against neutral, not from chroma).
|
|
54
|
+
|
|
55
|
+
### B.2 · Paper
|
|
56
|
+
|
|
57
|
+
- Derive paper L from the vibe:
|
|
58
|
+
- bright/airy/breakfast/hand-set → **L 95–98 %** (warm-tinted)
|
|
59
|
+
- archival/editorial/restrained → **L 92–95 %** (warm-tinted)
|
|
60
|
+
- technical/clinical/spec-sheet → **L 98–100 % near-white** (cool-tinted; can equal #fff but tinted neutrals downstream)
|
|
61
|
+
- dark/restless/late-night/manifesto → **L 12–18 %** (anchor-tinted)
|
|
62
|
+
- **Always tint paper toward the anchor hue with chroma 0.005–0.020** per [`color.md`](color.md) § "Neutral tinting". Pure-white #fff is allowed only when ink + accent + greys carry the chroma; the paper itself never carries chroma 0 in *both* directions.
|
|
63
|
+
- Paper-2 (one elevation step): step ±2–4 % L from paper.
|
|
64
|
+
- Paper-3 (optional second step): step ±5–7 % L from paper. Skip on minimal palettes.
|
|
65
|
+
|
|
66
|
+
### B.3 · Ink
|
|
67
|
+
|
|
68
|
+
- If paper L < 50: ink L **88–96 %**.
|
|
69
|
+
- If paper L ≥ 50: ink L **16–24 %**.
|
|
70
|
+
- Tint ink chroma **0.005–0.014** toward anchor (a shade darker / lighter, never neutral).
|
|
71
|
+
- Ink-2 (secondary text): step 4–8 % L away from ink toward paper. Same hue family.
|
|
72
|
+
|
|
73
|
+
### B.4 · Supporting greys
|
|
74
|
+
|
|
75
|
+
Step by ~6–10 % L between paper and ink, all tinted toward anchor with chroma 0.005–0.018:
|
|
76
|
+
|
|
77
|
+
- `--color-rule` — dividers · L ~70–82 % (light paper) or ~26–34 % (dark paper).
|
|
78
|
+
- `--color-rule-2` — secondary dividers · 4–6 % L closer to paper than rule.
|
|
79
|
+
- `--color-muted` — de-emphasised text · L ~38–56 %.
|
|
80
|
+
- `--color-neutral` — mid-grey equivalent · L ~30–56 %.
|
|
81
|
+
|
|
82
|
+
These are not arbitrary. The L-step gives the palette **typographic depth** without leaning on accent.
|
|
83
|
+
|
|
84
|
+
### B.5 · Focus
|
|
85
|
+
|
|
86
|
+
- Same hue as accent, slightly higher chroma (0.18–0.22) for visibility.
|
|
87
|
+
- Same L as accent ±5 %.
|
|
88
|
+
- Used only on `:focus-visible` — must show instantly per [`microinteractions.md`](microinteractions.md) § "Focus is a first-class state".
|
|
89
|
+
|
|
90
|
+
### B.6 · Accent-ink (overlay text colour on accent)
|
|
91
|
+
|
|
92
|
+
- If accent L > 50: use ink (text reads dark on accent fill).
|
|
93
|
+
- If accent L ≤ 50: use paper (text reads light on accent fill).
|
|
94
|
+
- Verify **APCA contrast ≥ 7:1** for body, ≥ 3:1 for large text per [`color.md`](color.md).
|
|
95
|
+
|
|
96
|
+
### B.7 · Verification
|
|
97
|
+
|
|
98
|
+
- **Gate 8** (no pure #000 / #fff base): paper and ink both have chroma > 0. Pass.
|
|
99
|
+
- **Gate 24** (no zero-chroma neutrals): every grey has chroma ≥ 0.005. Pass.
|
|
100
|
+
- **Gate 25** (accent ≤ 5 % footprint): plan the accent's role on the page (active state, one wordmark dot, one CTA fill). Don't carpet a section in accent.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## § C · Font pairing
|
|
105
|
+
|
|
106
|
+
Custom pulls from the seven tone-pairings in [`typography.md`](typography.md) — Editorial, Technical, Brutalist, Soft, Luxury, Playful, Austere, Workshop. Each tone has a **free baseline** and a **paid upgrade**.
|
|
107
|
+
|
|
108
|
+
### C.1 · The freedom
|
|
109
|
+
|
|
110
|
+
The catalog pairs Display-from-tone-X with Body-from-tone-X. **Custom can mix tones** — that's the whole point:
|
|
111
|
+
|
|
112
|
+
- Editorial display + Technical body (italic Fraunces wordmark + Geist body) — works for an academic-tone SaaS.
|
|
113
|
+
- Brutalist display + Editorial body (Anton + Newsreader italic) — works for a left-leaning manifesto magazine.
|
|
114
|
+
- Playful display + Austere body (Bricolage Grotesque + Inter Tight) — works for a creator-tool brand.
|
|
115
|
+
- Luxury display + Technical body (Cormorant Garamond + JetBrains Mono) — works for a hand-crafted dev-tool.
|
|
116
|
+
|
|
117
|
+
Pick **one display face** and **one body face** from any tone's columns. Optional mono if the page has code or tabular data.
|
|
118
|
+
|
|
119
|
+
### C.2 · The discipline
|
|
120
|
+
|
|
121
|
+
- **Free baseline only** unless the user has confirmed paid licences. Per [`typography.md`](typography.md) § "The discipline": "Never name a paid font in code without confirming the user is licensed."
|
|
122
|
+
- **Banned defaults still banned** per [`typography.md`](typography.md) § "Banned defaults" — Inter / Roboto / Open Sans / Poppins / Lato / Work Sans / DM Sans / Montserrat / system-ui as display all fail Gate 1.
|
|
123
|
+
- **Variable fonts are preferred** when available (Fraunces, Bricolage Grotesque, Newsreader, Geist, EB Garamond, Inter Tight) — they support optical-size and weight axes for tighter typographic control.
|
|
124
|
+
|
|
125
|
+
### C.3 · The pair must read
|
|
126
|
+
|
|
127
|
+
Once you have display + body, mentally render the page:
|
|
128
|
+
|
|
129
|
+
- Does the display face have enough weight contrast (200/400 next to 700/900) per [`typography.md`](typography.md) § "Commit to extremes"?
|
|
130
|
+
- Does the body face read at the chosen body size (≥ 14 px floor; default 1 rem) at the chosen measure (45–75 ch)?
|
|
131
|
+
- If display is mono and body is mono — that's only allowed when the page IS the design (Terminal-aesthetic, true single-font specimen). Per [`typography.md`](typography.md) line 7.
|
|
132
|
+
|
|
133
|
+
If any answer is no, redirect — pick a different body face or shift the display weight.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## § D · Custom-axis computation
|
|
138
|
+
|
|
139
|
+
A custom theme must declare its three diversification-rule axis values explicitly so [`SKILL.md`](../SKILL.md) § "Theme-diversification rule" fires the same way as it does on catalog themes.
|
|
140
|
+
|
|
141
|
+
### D.1 · Paper band
|
|
142
|
+
|
|
143
|
+
- **dark** — paper L < 30 %
|
|
144
|
+
- **mid** — paper L 30–85 %
|
|
145
|
+
- **light** — paper L > 85 %
|
|
146
|
+
|
|
147
|
+
### D.2 · Display style
|
|
148
|
+
|
|
149
|
+
Pick one based on the chosen display face:
|
|
150
|
+
|
|
151
|
+
- **italic-serif** — Fraunces italic, Newsreader italic, EB Garamond italic, Cormorant italic
|
|
152
|
+
- **roman-serif** — Source Serif 4, Newsreader, Crimson Pro, Bitter, Cardo
|
|
153
|
+
- **geometric-sans** — Geist, Bricolage Grotesque, Inter Tight, Manrope, Sora
|
|
154
|
+
- **mono** — Geist Mono, JetBrains Mono, IBM Plex Mono, Space Mono
|
|
155
|
+
- **display-condensed-italic** — Migra italic, Tobias italic
|
|
156
|
+
- **display-condensed-bold** — Anton, Bebas Neue, Oswald, Barlow Condensed
|
|
157
|
+
- **display-heavy** — Inter Tight 900, Bricolage 800, Druk-class
|
|
158
|
+
- **slab-serif** — Roboto Slab, Bitter heavy, Zilla Slab
|
|
159
|
+
- **system-native** — system-ui, Inter Tight 400 (austere)
|
|
160
|
+
- **risograph-bold** — bold sans with hand-crafted feel
|
|
161
|
+
- **handwritten** — Caveat, Sacramento, Patrick Hand (rare; only when brand demands)
|
|
162
|
+
|
|
163
|
+
### D.3 · Accent hue band
|
|
164
|
+
|
|
165
|
+
- **warm** — hue 10–60° (red, orange, amber)
|
|
166
|
+
- **cool** — hue 200–300° (blue, indigo, cyan)
|
|
167
|
+
- **neutral** — no chromatic accent (austere; chroma < 0.05)
|
|
168
|
+
- **chromatic-other** — anything outside warm/cool/neutral. Sub-tag the specific anchor: `chromatic-green ~145°` · `chromatic-sage ~120°` · `chromatic-phosphor ~150°` · `chromatic-terracotta ~30°` · `chromatic-dusty-pink ~350°` · `chromatic-moss ~140°` · `chromatic-amber ~75°`.
|
|
169
|
+
|
|
170
|
+
### D.4 · Where these go
|
|
171
|
+
|
|
172
|
+
Write all three into the macrostructure stamp (§ E below) and the `.hallmark/log.json` entry (§ F below). They are the durable record. The next run reads them.
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## § E · Stamp format
|
|
177
|
+
|
|
178
|
+
The CSS comment at the top of the produced stylesheet (per [`SKILL.md`](../SKILL.md) Step 6 § "Stamp the output"):
|
|
179
|
+
|
|
180
|
+
```css
|
|
181
|
+
/* Hallmark · macrostructure: <name> · <hero archetype + knobs>
|
|
182
|
+
* theme: custom · vibe: "<4–8 words>" · paper: oklch(<L>% <C> <H>) · accent: oklch(<L>% <C> <H>)
|
|
183
|
+
* display: <font name> · body: <font name> · axes: <paper-band> / <display-style> / <accent-hue>
|
|
184
|
+
* studied: no · context: <user-provided | inferred> · v0.6.x
|
|
185
|
+
*/
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Concrete example:
|
|
189
|
+
|
|
190
|
+
```css
|
|
191
|
+
/* Hallmark · macrostructure: Long Document · H5 hero knobs: salutation=time-stamp, body=2 paragraphs, signoff=initials
|
|
192
|
+
* theme: custom · vibe: "archival warmth, hand-set, no varnish" · paper: oklch(94% 0.020 65) · accent: oklch(58% 0.16 35)
|
|
193
|
+
* display: Fraunces italic · body: Source Serif 4 · axes: light / italic-serif / chromatic-terracotta
|
|
194
|
+
* studied: no · context: explicit · v0.8.0
|
|
195
|
+
*/
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
The stamp is the durable record. `audit` reads it. The next run reads it. The user reads it.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## § F · `.hallmark/log.json` entry shape
|
|
203
|
+
|
|
204
|
+
Custom runs extend the existing schema with a `theme_axes` field and an optional `vibe` field:
|
|
205
|
+
|
|
206
|
+
```json
|
|
207
|
+
{ "date": "2026-05-01",
|
|
208
|
+
"macrostructure": "Stat-Led",
|
|
209
|
+
"theme": "custom",
|
|
210
|
+
"theme_axes": "light / italic-serif / chromatic-terracotta",
|
|
211
|
+
"vibe": "archival warmth, hand-set, no varnish",
|
|
212
|
+
"enrichment": "none",
|
|
213
|
+
"brief": "Coffeebox · subscription" }
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Catalog entries continue to record `theme: <name>` and skip `theme_axes` (the catalog's axes are looked up from [`tokens.css`](../../site/css/tokens.css)). Step 2.5 logic uses the same diversification check on both — for catalog entries it reads the axes from tokens.css; for custom entries it reads them from the entry.
|
|
217
|
+
|
|
218
|
+
When rotating, **a custom run that follows another custom run must differ on at least one axis from the previous custom** — same rule as catalog-vs-catalog. A custom run that follows a catalog run must differ on at least one axis from the catalog's axes. The diversification rule is theme-route-blind.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## § G · Three worked examples
|
|
223
|
+
|
|
224
|
+
Concrete generations to seed model imitation. Each shows the brief, the user's vibe answer, the constructed palette, the chosen pair, and the stamp.
|
|
225
|
+
|
|
226
|
+
### G.1 · Archival café — "Coffeebox"
|
|
227
|
+
|
|
228
|
+
**Brief:** *"Build me a landing page for Coffeebox — a small-batch coffee subscription. Roast on Sunday, ship on Monday, drink Tuesday. Audience: people who already buy good coffee and want fewer trips to the shop. Tone: warm, hand-set, editorial — like a small café's chalkboard. Theme route: custom."*
|
|
229
|
+
|
|
230
|
+
**Vibe answer:** *"archival warmth, hand-set, no varnish."* **Anchor:** *"terracotta."*
|
|
231
|
+
|
|
232
|
+
**Palette:**
|
|
233
|
+
- paper `oklch(94% 0.020 65)` — warm-cream, hue 65 (amber-warm)
|
|
234
|
+
- paper-2 `oklch(91% 0.022 65)` — one elevation step
|
|
235
|
+
- ink `oklch(22% 0.014 60)` — warm dark brown-black
|
|
236
|
+
- ink-2 `oklch(40% 0.014 60)` — warm secondary
|
|
237
|
+
- rule `oklch(78% 0.018 65)` — warm hairline
|
|
238
|
+
- muted `oklch(54% 0.014 60)` — warm grey
|
|
239
|
+
- accent `oklch(58% 0.16 35)` — terracotta (hue 35, chroma 0.16)
|
|
240
|
+
- accent-ink `oklch(96% 0.014 65)` — paper for text on accent
|
|
241
|
+
- focus `oklch(56% 0.20 35)` — accent at higher chroma
|
|
242
|
+
|
|
243
|
+
**Pair:** display **Fraunces italic** (Editorial, free) · body **Source Serif 4** (Editorial, free) · mono **JetBrains Mono** (Technical, free).
|
|
244
|
+
|
|
245
|
+
**Axes:** **light / italic-serif / chromatic-terracotta**.
|
|
246
|
+
|
|
247
|
+
**Stamp:**
|
|
248
|
+
```css
|
|
249
|
+
/* Hallmark · macrostructure: Long Document · H5 hero knobs: salutation=time-stamp, body=2 paragraphs, signoff=initials
|
|
250
|
+
* theme: custom · vibe: "archival warmth, hand-set, no varnish" · paper: oklch(94% 0.020 65) · accent: oklch(58% 0.16 35)
|
|
251
|
+
* display: Fraunces italic · body: Source Serif 4 · axes: light / italic-serif / chromatic-terracotta
|
|
252
|
+
* studied: no · context: explicit · v0.8.0
|
|
253
|
+
*/
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### G.2 · Industrial fintech — "Loop"
|
|
257
|
+
|
|
258
|
+
**Brief:** *"Loop is a real-time payment-rail observability platform for fintechs. Audience: platform engineers. Use case: try it / contact sales. Tone: industrial, cool, technical. Theme route: custom."*
|
|
259
|
+
|
|
260
|
+
**Vibe answer:** *"industrial precision, cool, technical."* **Anchor:** *"sea-blue."*
|
|
261
|
+
|
|
262
|
+
**Palette:**
|
|
263
|
+
- paper `oklch(13% 0.012 220)` — dark cool
|
|
264
|
+
- paper-2 `oklch(17% 0.014 220)` — one step up
|
|
265
|
+
- paper-3 `oklch(22% 0.014 220)` — two steps up (panels)
|
|
266
|
+
- ink `oklch(94% 0.010 220)` — cool light
|
|
267
|
+
- ink-2 `oklch(72% 0.010 220)`
|
|
268
|
+
- rule `oklch(30% 0.012 220)`
|
|
269
|
+
- muted `oklch(58% 0.012 220)`
|
|
270
|
+
- accent `oklch(72% 0.16 220)` — sea-blue (cool)
|
|
271
|
+
- focus `oklch(78% 0.20 220)`
|
|
272
|
+
|
|
273
|
+
**Pair:** display **Geist Mono 500** (Technical, free) · body **Geist** (Technical, free) · mono **Geist Mono** (Technical, free).
|
|
274
|
+
|
|
275
|
+
Note: this *is* a single-family page (Geist + Geist Mono are the same family at different widths). [`typography.md`](typography.md) line 7 allows it: "single-font pages are allowed only when the single font IS the design choice." For an industrial-precision fintech, that's the design choice.
|
|
276
|
+
|
|
277
|
+
**Axes:** **dark / mono / cool**.
|
|
278
|
+
|
|
279
|
+
**Stamp:**
|
|
280
|
+
```css
|
|
281
|
+
/* Hallmark · macrostructure: Workbench · F2 sticky-scroll knobs: pinned=right, content=trace-panel, steps=3
|
|
282
|
+
* theme: custom · vibe: "industrial precision, cool, technical" · paper: oklch(13% 0.012 220) · accent: oklch(72% 0.16 220)
|
|
283
|
+
* display: Geist Mono 500 · body: Geist · axes: dark / mono / cool
|
|
284
|
+
* studied: no · context: explicit · v0.8.0
|
|
285
|
+
*/
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### G.3 · Botanical apothecary — "Mossroot"
|
|
289
|
+
|
|
290
|
+
**Brief:** *"Mossroot is a small herbal apothecary in Porto. We make tinctures, salves, and tea blends. Audience: locals + visitors. Use: see what we make + visit. Tone: quiet, herbal, hand-poured. Theme route: custom."*
|
|
291
|
+
|
|
292
|
+
**Vibe answer:** *"moss, lichen, soft pink, herbal."* **Anchor:** *(skipped — pick from vibe)*.
|
|
293
|
+
|
|
294
|
+
The vibe names two hues: *moss* (greenish, ~140°) and *soft pink* (warm, ~350°). Pick **soft pink as the accent** (single anchor — custom is one-accent strict) and use the moss-green as the *paper tint* (chroma 0.018 toward 145°). This carries the dual-vibe without splitting accent.
|
|
295
|
+
|
|
296
|
+
**Palette:**
|
|
297
|
+
- paper `oklch(96% 0.018 145)` — moss-tinted near-white
|
|
298
|
+
- paper-2 `oklch(93% 0.020 145)`
|
|
299
|
+
- ink `oklch(22% 0.014 140)` — moss-tinted dark
|
|
300
|
+
- ink-2 `oklch(42% 0.014 140)`
|
|
301
|
+
- rule `oklch(82% 0.018 145)`
|
|
302
|
+
- muted `oklch(56% 0.014 140)`
|
|
303
|
+
- accent `oklch(72% 0.13 350)` — dusty-pink (chromatic-other)
|
|
304
|
+
- focus `oklch(70% 0.18 350)`
|
|
305
|
+
|
|
306
|
+
**Pair:** display **Cormorant Garamond** (Luxury, free) · body **EB Garamond** (Luxury, free) · mono **Geist Mono** (rare on this page; only for ingredient lists).
|
|
307
|
+
|
|
308
|
+
**Axes:** **light / roman-serif / chromatic-other (dusty-pink)**.
|
|
309
|
+
|
|
310
|
+
**Stamp:**
|
|
311
|
+
```css
|
|
312
|
+
/* Hallmark · macrostructure: Catalogue · F1 catalogue knobs: tiles=8, columns=2, rule=hairline-between
|
|
313
|
+
* theme: custom · vibe: "moss, lichen, soft pink, herbal" · paper: oklch(96% 0.018 145) · accent: oklch(72% 0.13 350)
|
|
314
|
+
* display: Cormorant Garamond · body: EB Garamond · axes: light / roman-serif / chromatic-other (dusty-pink)
|
|
315
|
+
* studied: no · context: explicit · v0.8.0
|
|
316
|
+
*/
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## What custom does **not** do (worth restating)
|
|
322
|
+
|
|
323
|
+
1. **Does not invent themes that ignore the rules.** Every paper L band, accent chroma cap, neutral-tinting requirement, font ban, and slop-test gate carries forward. The freedom is the *combination* — not the rules.
|
|
324
|
+
2. **Does not save themes for reuse.** A custom run is per-output. The skill does not write back to [`tokens.css`](../../site/css/tokens.css). If the user wants a permanent theme, they paste the custom palette into tokens.css themselves and name it.
|
|
325
|
+
3. **Does not ask multiple follow-up questions.** One vibe answer (+ optional anchor) is enough. The audience/use/tone from Step 1 plus the brief plus the macrostructure pick already give the model 80 % of the signal.
|
|
326
|
+
4. **Does not relax the diversification rule.** Custom entries declare their three axes the same way catalog entries do; the rotation rule fires on both, theme-route-blind.
|
|
327
|
+
5. **Does not bypass the Step 5 preview.** The custom palette + pairing surface in plain text *before* any code is emitted, so the user can redirect early.
|
|
328
|
+
|
|
329
|
+
If any of those five lines is bent, the custom output is over-invented. Audit it; redirect.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# design.md — opt-in portable design system
|
|
2
|
+
|
|
3
|
+
Loaded by [`SKILL.md`](../SKILL.md) Step 6 ONLY when the user explicitly asks Hallmark to lock the current build's design system into a portable file. The default verb does NOT auto-emit `design.md`. The user iterates freely until they say the system is settled, then asks for it.
|
|
4
|
+
|
|
5
|
+
This file is **also** loaded by [`study.md`](study.md) when the user — after a successful `study` diagnosis — asks for the DNA to be emitted as a portable system. The format below is shared between the two paths; the only differences are spelled out in § Two emission paths (default vs study) and in [`study.md`](study.md) § Emitting a `design.md` from `study`.
|
|
6
|
+
|
|
7
|
+
## Triggers (phrase-only — no new verb)
|
|
8
|
+
|
|
9
|
+
Fire ONLY when the user says one of:
|
|
10
|
+
|
|
11
|
+
- *"lock the system"* / *"lock the design system"* / *"lock the DNA"* / *"lock this DNA"*
|
|
12
|
+
- *"give me a design.md"* / *"write a design.md"* / *"export this as a design.md"*
|
|
13
|
+
- *"extract this to a design system"* / *"extract the tokens"* / *"extract the DNA"*
|
|
14
|
+
- *"make this portable"* / *"make the DNA portable"*
|
|
15
|
+
- *"I want to use this in another project"*
|
|
16
|
+
|
|
17
|
+
For everything else — including the default build, the redesign verb on a single page, and free iteration on the same brief — skip. The single-page redesign and default verb stay token-portable via `tokens.css`; `design.md` is the explicit lock-in step.
|
|
18
|
+
|
|
19
|
+
## Two emission paths (default vs study)
|
|
20
|
+
|
|
21
|
+
The same `design.md` format is emitted from two different entry points. They differ in which signals seed the file and in how strict the refusal layer is.
|
|
22
|
+
|
|
23
|
+
| | **Default-verb path** (lock the system) | **Study-verb path** (lock the DNA) |
|
|
24
|
+
| --- | --- | --- |
|
|
25
|
+
| **Trigger context** | After at least one build the user has iterated on and is satisfied with | After a successful `study` diagnosis (image or URL) |
|
|
26
|
+
| **Source of tokens** | The build's in-memory token state | The studied DNA — exact from CSS in URL mode, estimated from bands in image mode |
|
|
27
|
+
| **Refusal layer** | None — the user owns the build they iterated on | Tighter — see [`study.md`](study.md) § Emission-refusal layer. URL mode requires attestation; third-party URLs are refused |
|
|
28
|
+
| **`## Provenance` block** | Omitted (the system is the user's own work) | Required — records source mode, URL or "image", date, attestation answer, confidence note |
|
|
29
|
+
| **`## Notes` block** | Optional — covers any decisions worth remembering | Required — carries the diagnosis's "anti-patterns to NOT carry over" list |
|
|
30
|
+
|
|
31
|
+
Both paths produce a `design.md` Hallmark can read on subsequent runs; the file format is uniform once written.
|
|
32
|
+
|
|
33
|
+
## Scope
|
|
34
|
+
|
|
35
|
+
- **Page-builds only.** Skip on component-scope — a single component is too small to be a system.
|
|
36
|
+
- **Multi-page redesign keeps existing behaviour.** `hallmark redesign --multi-page` produces the heavyweight `design.md` per [`verbs/redesign.md`](verbs/redesign.md) § Multi-page flow. That flow already implies a locked system, so the rule there is unchanged.
|
|
37
|
+
- **No-overwrite policy.** If `design.md` already exists at the project root, do NOT overwrite. Refresh its `## Exports` section instead and emit one line: *"design.md detected — refreshed Exports, system unchanged."*
|
|
38
|
+
|
|
39
|
+
## CTA — surface the offer in the Step 5 preview
|
|
40
|
+
|
|
41
|
+
After every default + redesign page-build, append one quiet line at the bottom of the preview block:
|
|
42
|
+
|
|
43
|
+
> *System portable? Say `lock the system` to extract this build's tokens + voice into a `design.md`.*
|
|
44
|
+
|
|
45
|
+
Skip the CTA when (a) the build is component-scope, or (b) `design.md` already exists in the project (system is already locked).
|
|
46
|
+
|
|
47
|
+
## Format (the tight version)
|
|
48
|
+
|
|
49
|
+
Write the file at the project root. Match the project's case convention (`design.md` or `DESIGN.md`). Target ~45 lines — enough to seed a real app, not so much that it becomes a wiki to maintain. The format:
|
|
50
|
+
|
|
51
|
+
````markdown
|
|
52
|
+
# Design — <Project name>
|
|
53
|
+
|
|
54
|
+
Locked design system. Future Hallmark runs read this file first; pages defer
|
|
55
|
+
to it. Amend intentionally — the file is the rule.
|
|
56
|
+
|
|
57
|
+
## System
|
|
58
|
+
- Genre · <editorial / modern-minimal / atmospheric / playful>
|
|
59
|
+
- Macrostructure · <name>
|
|
60
|
+
- Theme · <catalog: NAME · or · custom (vibe: "<4–8 words>")>
|
|
61
|
+
- Axes · <paper-band> / <display-style> / <accent-hue>
|
|
62
|
+
|
|
63
|
+
## Tokens (canonical · `tokens.css` is the source of truth)
|
|
64
|
+
```css
|
|
65
|
+
:root {
|
|
66
|
+
--color-paper: oklch(<L> <C> <H>);
|
|
67
|
+
--color-paper-2: oklch(<L> <C> <H>);
|
|
68
|
+
--color-ink: oklch(<L> <C> <H>);
|
|
69
|
+
--color-ink-2: oklch(<L> <C> <H>);
|
|
70
|
+
--color-rule: oklch(<L> <C> <H>);
|
|
71
|
+
--color-accent: oklch(<L> <C> <H>);
|
|
72
|
+
--color-accent-ink: oklch(<L> <C> <H>);
|
|
73
|
+
--color-focus: oklch(<L> <C> <H>);
|
|
74
|
+
|
|
75
|
+
--font-display: "<face>", ...;
|
|
76
|
+
--font-body: "<face>", ...;
|
|
77
|
+
--font-mono: "<face>", ...;
|
|
78
|
+
|
|
79
|
+
/* 4-pt spacing scale, named: --space-3xs … --space-4xl. See tokens.css. */
|
|
80
|
+
/* Type scale, 1.25 (major-third) ratio: --text-xs … --text-display. */
|
|
81
|
+
|
|
82
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
83
|
+
--dur-fast: 180ms; --dur-base: 240ms; --dur-slow: 320ms;
|
|
84
|
+
|
|
85
|
+
--radius-card: <px>; --radius-pill: <px>; --radius-input: <px>;
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## CTA voice
|
|
90
|
+
- Primary · <fill colour> · <radius> · <padding rhythm>
|
|
91
|
+
- Secondary · <outline / ghost> · <same radius>
|
|
92
|
+
|
|
93
|
+
## Motion stance
|
|
94
|
+
- <silent · 1–2 reveal primitives · motion-cut>
|
|
95
|
+
- Reduced-motion fallback · ≤150 ms opacity crossfade.
|
|
96
|
+
|
|
97
|
+
## Exports
|
|
98
|
+
`tokens.css` (in this project) is the source of truth. For Tailwind v4
|
|
99
|
+
`@theme`, DTCG `tokens.json`, or shadcn/ui CSS variables, ask *"extend
|
|
100
|
+
design.md with Tailwind exports"* (or the format you want) — Hallmark will
|
|
101
|
+
append them per [`export-formats.md`](export-formats.md).
|
|
102
|
+
````
|
|
103
|
+
|
|
104
|
+
State the picks aloud BEFORE writing the file. *"Genre: editorial. Macrostructure: Long Document. Theme: catalog Editorial. Locking this as the project's system."* Then write.
|
|
105
|
+
|
|
106
|
+
## After the file is written
|
|
107
|
+
|
|
108
|
+
Once `design.md` exists, [`SKILL.md`](../SKILL.md) Step 0's pre-flight scan detects it on every subsequent run. From that point on:
|
|
109
|
+
|
|
110
|
+
- All future Hallmark runs READ `design.md` first; subsequent picks (genre / theme / typography / motion / CTA voice) defer to it.
|
|
111
|
+
- The diversification rule INVERTS — pages must SHARE the system, not differ from each other.
|
|
112
|
+
- If a future page genuinely needs a different system, AMEND `design.md` with a `## Variants` section rather than overriding locally — the file evolves; per-page overrides do not.
|
|
113
|
+
|
|
114
|
+
## Why opt-in (not auto-emit)
|
|
115
|
+
|
|
116
|
+
Briefs iterate. The first build is rarely the settled design. Auto-emitting `design.md` on every default build would either churn the file across iterations or lock a weak system before the user has reviewed it. Opt-in mirrors how design teams actually work — formalise the system after the patterns hold, not on day one. The CTA in the preview block keeps the feature discoverable without forcing it.
|