howone 0.1.19 → 0.1.22
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/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 +101 -0
- 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/04-ai/.gitkeep +1 -0
- package/templates/vite/.howone/skills/howone-sdk/SKILL.md +67 -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 -3
- package/templates/vite/package.json +1 -1
- /package/templates/vite/.howone/skills/howone-sdk/{references/08-manifest-codegen.md → 01-architect/02-manifest-codegen.md} +0 -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/06-react-integration.md → 03-sdk/04-react-integration.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
- /package/templates/vite/.howone/skills/howone-sdk/{references/03-ai-actions.md → 03-sdk/07-ai-action-calls.md} +0 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Slop test — 60 gates + pre-emit self-critique
|
|
2
|
+
|
|
3
|
+
Run this list before handing back any output. Every answer must be **no**. Update the Step 5 preview block's `Slop test` row to reflect the actual outcome of this run.
|
|
4
|
+
|
|
5
|
+
Some gates are **universal** (apply to every genre); some are **genre-scoped** (apply only when the active genre is editorial, atmospheric, modern-minimal, or playful). Genre overrides are noted inline. Where a gate has *no* genre note, treat it as universal.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Pre-emit self-critique (six axes)
|
|
10
|
+
|
|
11
|
+
Run this **before** the gate list, not after. Score the planned output 1–5 on each axis. Anything **< 3 on any axis triggers a revision pass** before the gate sweep — don't bring known weakness into a sixty-gate review.
|
|
12
|
+
|
|
13
|
+
Two passes is normal. Three is a sign the brief is wrong, not the design — re-read the brief.
|
|
14
|
+
|
|
15
|
+
| # | Axis | What you're scoring |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| **A** | **Philosophy** | Is there a clear *why* — a position the page is taking? Or is it just a layout? |
|
|
18
|
+
| **B** | **Hierarchy** | Can a reader tell, in 2 seconds, what's primary, secondary, tertiary? Or is everything the same weight? |
|
|
19
|
+
| **C** | **Execution** | Are the details (rule weight, accent footprint, text-wrap, focus rings, contrast) all in spec, or is there sloppiness even if the bones are right? |
|
|
20
|
+
| **D** | **Specificity** | Does this look like *this brief* — or does it look like a generic "page that could be anyone"? |
|
|
21
|
+
| **E** | **Restraint** | Have you removed everything that isn't earning its place? Decoration, redundancy, padding-for-padding's-sake? |
|
|
22
|
+
| **F** | **Variety** | Does this output share a structural fingerprint with a previous Hallmark output in the project? Score by structural distance, not visual distance — colour-swaps don't count as variety. |
|
|
23
|
+
|
|
24
|
+
Record the six scores in a one-line stamp comment at the top of the file: `/* Hallmark · pre-emit critique: P5 H4 E5 S4 R5 V5 */`. Future runs should be able to find this and avoid repeating the same weakness.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Visual
|
|
29
|
+
|
|
30
|
+
1. Is the display font Inter, Roboto, Open Sans, Poppins, Lato, or a system default?
|
|
31
|
+
2. Is there a purple-to-blue (or cyan-to-magenta) gradient anywhere? *Genre note: atmospheric allows radial gradients on background only — never on text or pill buttons.*
|
|
32
|
+
3. Is there a 3-equal-column card grid with icon-above-heading tiles?
|
|
33
|
+
4. Is any card nested inside another card?
|
|
34
|
+
5. Is there a `background-clip: text` gradient headline? (Universal — no genre allows gradient text.)
|
|
35
|
+
6. Is any card using a thick coloured left/right side-stripe border?
|
|
36
|
+
7. Is the hero `min-height: 100vh` with everything centred? *Genre note: atmospheric and playful allow centred heroes when the canvas itself is the design (Suno-style).*
|
|
37
|
+
8. Is pure `#000` or pure `#fff` used as a base colour anywhere? *Genre note: modern-minimal allows pure `#fff` paper (the Stripe / ElevenLabs school).*
|
|
38
|
+
|
|
39
|
+
## Structural
|
|
40
|
+
|
|
41
|
+
9. Does the page use the *same* structural fingerprint as the last page you built? (Hero → 3 features → CTA → footer is the AI structural template; reject it.)
|
|
42
|
+
10. Are sections separated only by equal whitespace, with no rule, no ornament, no colour shift — every section identical in rhythm?
|
|
43
|
+
|
|
44
|
+
## Microinteractions
|
|
45
|
+
|
|
46
|
+
11. Is `transition-all` (or `transition: all`) used anywhere? (Specify the properties.)
|
|
47
|
+
12. Is `hover:scale-105` (or any uniform hover-scale) applied across multiple unrelated elements?
|
|
48
|
+
13. Are bouncy / overshoot easings (`cubic-bezier(0.34, 1.56, ...)`, etc.) used on UI state changes — buttons, modals, tooltips? (Reserve overshoots for physical interactions only.)
|
|
49
|
+
14. Does any element have *more than one* hover effect at the same time (translate + scale + shadow + colour + rotate)?
|
|
50
|
+
15. Are you animating `width`, `height`, `top`, `left`, `margin`, or `padding` anywhere?
|
|
51
|
+
16. Does the focus ring transition into existence (fade in)? (Focus rings must appear instantly — keyboard users need an immediate indicator.)
|
|
52
|
+
17. Is there a celebratory success toast for an action whose effect the user can already see? (Silent success is taste; toasts are for failures and invisible effects.)
|
|
53
|
+
18. Are tooltip hover-delay and focus-delay equal? (Hover should delay 800–1000 ms; focus should be 0 ms.)
|
|
54
|
+
19. Is auto-rotating content (carousel, banner, stats) lacking pause-on-hover-and-focus? (WCAG 2.2.2.)
|
|
55
|
+
20. Is there a placeholder name "Jane Doe / John Smith" or a startup cliché (Acme, Nexus, Seamless, Unleash)?
|
|
56
|
+
|
|
57
|
+
## Variety
|
|
58
|
+
|
|
59
|
+
21. Is the `/* Hallmark · macrostructure: <name> · ... */` stamp missing from the top of the CSS? (It must be present.)
|
|
60
|
+
22. Is the macrostructure I picked the same as a previous Hallmark output's stamp in this project? (Read the file system; if a stamp exists, mine must differ.)
|
|
61
|
+
23. Did I default to the **Specimen** macrostructure (numbered left-margin labels + huge serif + asymmetric spans + typographic-only CTA) when the brief did not explicitly call for editorial / foundry / specimen energy? (Specimen fall-through is banned.) *Genre note: atmospheric, modern-minimal, and playful never default to Specimen — only editorial does, and only when the brief signals it.*
|
|
62
|
+
|
|
63
|
+
## Implementation gates
|
|
64
|
+
|
|
65
|
+
24. Does any neutral / surface colour have `oklch(... 0 ...)` (zero chroma)? Pure greys read as flat. Tint every neutral toward the anchor hue — minimum 0.005 chroma. *Genre note: modern-minimal allows zero-chroma neutrals (the monochrome Stripe / ElevenLabs school).*
|
|
66
|
+
25. Does the accent colour cover more than ~5 % of any single viewport (count by area: solid fills, large headings in accent, full-bleed accent backgrounds)? If yes, retreat — accent is for emphasis, not for filling. *Genre note: atmospheric allows accent-tinted radial blooms covering up to ~20 % of the canvas, since the bloom is the design.*
|
|
67
|
+
26. Is any padding / gap / margin a value that isn't on the named spacing scale (`--space-3xs` … `--space-5xl`, multiples of 4 px)? Arbitrary `padding: 17px` is a tell.
|
|
68
|
+
27. Is any prose container's `max-width` outside the 45–75 ch range? Measure must read; under 45 ch is choppy, over 75 ch loses the eye.
|
|
69
|
+
28. Does any interactive element lack `:focus-visible`, `:active`, OR `:disabled` styling? (Eight states is the rule. Default + hover is two; you need at least default + hover + focus-visible + active + disabled present in code.)
|
|
70
|
+
29. Is there any `transform` / `animation` keyframe that is NOT covered by a `@media (prefers-reduced-motion: reduce)` fallback? Every motion gets a reduced-motion alternative.
|
|
71
|
+
|
|
72
|
+
## Hero enrichment gates
|
|
73
|
+
|
|
74
|
+
(When the page carries enrichment — see [`hero-enrichment.md`](hero-enrichment.md).)
|
|
75
|
+
|
|
76
|
+
30. If the page has a demo video, does it autoplay with sound, lack a `poster`, lack `fetchpriority="high"`, or use `loading="lazy"` on the LCP element? (LCP-killers fail this gate.)
|
|
77
|
+
31. If the page has an abstract background, is it more than one accent colour, more than ~5 % footprint, or animating mesh-gradient on the whole page? (Aurora blobs and mesh-on-everything fail this gate.) *Genre note: atmospheric allows up to two warm-toned radial blooms covering ~20–30 % of the canvas, fixed-attached, no animation.*
|
|
78
|
+
32. Does the page mix two or more icon libraries? (Material + Heroicons + Lucide on the same page = the icon-set tell.)
|
|
79
|
+
33. If the page has illustration, did I default to a Lottie library when a hand-built SVG or pure-CSS shape would have worked? (Lottie is last resort, not the default.)
|
|
80
|
+
|
|
81
|
+
## Diversification gates
|
|
82
|
+
|
|
83
|
+
(Cross-reference `.hallmark/log.json` when present.)
|
|
84
|
+
|
|
85
|
+
34. If I used the same archetype as a previous Hallmark output (per `.hallmark/log.json` or the latest macrostructure stamp), did I pick at least one different *variation knob*? Two Bento Grids with `tiles=6, spans=irregular, accent=corner-only` are the same Bento — the within-archetype knobs in [`component-cookbook.md`](component-cookbook.md) exist precisely to prevent that. State the knob deltas in the stamp.
|
|
86
|
+
35. Does any visual-only `<svg>`, custom-art `<div>`, `<canvas>`, or decorative figure lack `aria-label` or `aria-hidden="true"`? Hand-built CSS art and SVG illustrations need an accessible name *or* an explicit hide. Skipping this is the new accessibility tell.
|
|
87
|
+
|
|
88
|
+
## Layout-safety gates
|
|
89
|
+
|
|
90
|
+
(The page must survive every viewport.)
|
|
91
|
+
|
|
92
|
+
36. Does the page horizontally scroll on any viewport between 320 px and 1920 px? Open the rendered page; drag the dev-tools width slider across that range. If a horizontal scrollbar appears at any width, fail. The fix is `html { overflow-x: clip; }` plus `body { overflow-x: clip; }` as a safety net for any clipped-edge enrichment that pushes past the viewport. Use `overflow-x: clip` (not `hidden`) — `clip` preserves `position: sticky` and `position: fixed` on descendants. (Cross-reference: [`layout-and-space.md` § Page-edge clipping](layout-and-space.md).)
|
|
93
|
+
37. For every decorative effect on text — highlighter `<mark>` / `<em>` band / accent stroke / underline — did I visually confirm the position and size? A highlighter band must sit behind the x-height (`linear-gradient(180deg, transparent ~38%, accent ~38%, accent ~92%, transparent ~92%)`), **not** at the baseline (which reads as a fat underline). Underlines must be 1–2 px and offset 1–2 px from the baseline, never 5+ px. Decorative strokes must not exceed 5 % of the viewport (gate 25). The check is *visual*: imagine the rendered output and confirm the band lands in the right vertical zone.
|
|
94
|
+
38. Are interactive bars (nav, toolbar, command bar, hero CTA row, footer link strip) explicitly vertically centered? Default flex layouts inherit `align-items: stretch`, which makes a button taller than its sibling text and breaks the visual baseline. Every flex row mixing height-different elements (button + text, icon + text, mark + body) must declare `align-items: center` and `line-height: 1` on the items with intrinsic height. Inheriting `line-height: 1.55` from `html` fights the row's vertical rhythm.
|
|
95
|
+
|
|
96
|
+
## Typography discipline gates
|
|
97
|
+
|
|
98
|
+
(Three faces is the ceiling. See [`typography.md` § The 2+1 rule](typography.md).)
|
|
99
|
+
|
|
100
|
+
39. Does the page use **more than three** distinct `font-family` families? Count: `--font-display`, `--font-body`, and at most one outlier (`--font-outlier` for wordmark / hero stat / pull quote). A fourth family on the page — e.g. body + display + mono in code blocks + a separate display for the hero — is slop. Same family at different weights counts as one family. Mono counts as a family if used in any non-code context (captions, labels, numerals). If you find four, drop one back to the body or display face.
|
|
101
|
+
40. Is the **outlier face used in more than two slots** on the page? The outlier is a register, not a third surface — wordmark + hero stat is the canonical pair, or wordmark + masthead, or hero stat + pull quote. Three slots = the outlier is now a third body font; collapse it back to the body face.
|
|
102
|
+
|
|
103
|
+
## Input-state gates
|
|
104
|
+
|
|
105
|
+
(Inputs are where almost-right UIs lose. See [`interaction-and-states.md` § Input field states](interaction-and-states.md).)
|
|
106
|
+
|
|
107
|
+
41. Does any input, textarea, or select field change `border-width` between states (default → hover → focus → error)? Default is 1 px; hover, focus, and error must keep `border-width: 1px`. Border-width changes cause layout shift. State changes go to `background-color`, `outline`, `box-shadow`, or `border-color` — never `border-width`.
|
|
108
|
+
42. Does the input focus ring use `border` instead of `outline`? The focus ring must be `outline: 2px solid var(--color-focus)` with `outline-offset: 1px`. Reserving `outline: 2px solid transparent` in the default state prevents geometry shift on activate. A focus ring built from a `border` change is a tell.
|
|
109
|
+
43. Is the input height different from the height of an adjacent button on the same form? Form inputs and the form's submit button share a single base height (44 px floor). 38 px input + 44 px button is the most common form-tuning slop and reads as un-designed.
|
|
110
|
+
44. Is the helper-text container collapsed when no helper or error is shown? The helper slot must reserve `min-height: 1lh` even when empty so that an error appearing doesn't push the page down. Vertical jump on validation is a tell.
|
|
111
|
+
45. Is the disabled input state signalled by *only* `opacity: 0.5`? Disabled needs three independent signals: `opacity: 0.55` AND `cursor: not-allowed` AND `aria-disabled="true"` (or the native `disabled` attribute). One channel is missable; three are not.
|
|
112
|
+
|
|
113
|
+
## Contrast & readability
|
|
114
|
+
|
|
115
|
+
Universal — apply to every genre. These gates catch the real-world failures the user flagged: black-text-on-black-button, dark sections with unreadable text, ink-on-ink slop where the LLM forgot to flip the text colour after flipping the surface.
|
|
116
|
+
|
|
117
|
+
Contrast computation: for every `(color, background-color)` pair on the page, run **APCA Lc** OR **WCAG 2.1 ratio**. OKLCH lightness is a fast pre-check — if `|L_text − L_bg| < 50 %`, the pair likely fails 4.5:1 — confirm with a full calculation.
|
|
118
|
+
|
|
119
|
+
Thresholds:
|
|
120
|
+
- Body text (under 24 px regular OR under 18 px bold): **WCAG 4.5:1 / APCA Lc ≥ 60**.
|
|
121
|
+
- Large text / icons / focus rings: **WCAG 3:1 / APCA Lc ≥ 45**.
|
|
122
|
+
|
|
123
|
+
46. Does any **body text** have a contrast ratio below **4.5:1** against its computed background? Pair every `color` declaration with its effective `background-color` and verify. The most-missed cases are: text inside cards that inherit `color` but the card switched to `background: var(--color-paper-2)` and the text is now too close in lightness; muted text (`color: var(--color-muted)`) on `background: var(--color-paper-3)` — both are mid-lightness and fail.
|
|
124
|
+
|
|
125
|
+
47. Does any **large text** (≥ 24 px regular OR ≥ 18 px bold) or **icon** or **`:focus-visible` ring** have a contrast ratio below **3:1** against its background? Same calculation, looser threshold. Specifically check focus rings — `outline: 2px solid var(--color-focus)` only passes if `--color-focus` has ≥ 3:1 contrast against *both* the element and the page surface.
|
|
126
|
+
|
|
127
|
+
48. Does any **button** have `color` ≈ `background-color` on its fill? The canary check: if the computed text colour and the computed background colour are within **5 % lightness AND 0.05 chroma** in OKLCH, fail the gate. This catches the common bug where `color: var(--color-ink)` sits on `background: var(--color-ink)` (black-on-black slop) — the LLM forgot to use `--color-accent-ink` (or `--color-paper`) for text-on-fill.
|
|
128
|
+
|
|
129
|
+
49. When `--color-accent` is used as a fill anywhere on the page (button, badge, surface), is `--color-accent-ink` **also defined** (in `:root` or theme tokens) AND used as the `color` for text on that fill? If `--color-accent-ink` is missing, Hallmark output is one careless `color: white` away from a low-contrast accident. The token must exist, must verify ≥ APCA Lc 60 / WCAG 4.5:1 against `--color-accent`, and must be applied wherever accent fills a surface that carries text.
|
|
130
|
+
|
|
131
|
+
50. Does any **dark section** (a section or panel whose `background-color` has OKLCH lightness < 50 %) carry text that uses the page-default `color: var(--color-ink)` — i.e. ink-on-ink in a section that flipped its surface? Sections that swap to a dark surface MUST also swap their text colour (typically to `--color-paper`) and ensure nested children inherit. The fix is explicit: any class that sets `background: <dark>` must also set `color: <light>` in the same rule, OR be wrapped in a parent that does. The most common failure: a `.vs__col:first-child` painted with the accent or ink colour but the inner panels still using default ink-coloured text.
|
|
132
|
+
|
|
133
|
+
The CSS stamp at Step 6 should record the result: `· contrast: pass (46–50)` if all five gates pass, or `· contrast: FAIL gates <list>` if any are open. Fix before shipping.
|
|
134
|
+
|
|
135
|
+
## Nav · footer · hero structural slop
|
|
136
|
+
|
|
137
|
+
Universal — apply to every genre. These gates catch the most-recognised AI fingerprints in nav, footer, and hero shape. They sit alongside the structural-fingerprint gate (gate 9): gate 9 catches the *page* fingerprint; 51–55 catch the *chrome* fingerprints that sit on top of it.
|
|
138
|
+
|
|
139
|
+
51. **Nav fingerprint.** Is the page's `<nav>` (or top-of-page `<header>` with role="banner") the AI default — wordmark-left + 4–5 inline text links centred-or-right + button-right at full viewport width + 1 px hairline border-bottom + white background? If yes, fail unless the brief explicitly justifies N1 (the page has only 2 destinations *and* the routing table for the genre allows N1). Hallmark output should rotate among N1, N3, N4, N5, N6, N7, N8, N9 from [`component-cookbook.md`](component-cookbook.md) § Navigation.
|
|
140
|
+
|
|
141
|
+
52. **Footer fingerprint.** Is the `<footer>` the AI default — 4 columns of links (Product / Company / Resources / Legal) + social-icon row + tiny copyright at the very bottom + 1 px hairline top-border + neutral grey background? If yes, fail unless the page is a genuine docs root or hub. Default to Ft1, Ft2, Ft4, Ft5, Ft6, Ft7, or Ft8 from [`component-cookbook.md`](component-cookbook.md) § Footers.
|
|
142
|
+
|
|
143
|
+
53. **Hero centred-everything.** Are eyebrow, title, lede, AND CTA all stacked centred on the same vertical axis? Auto-fail. Pick at most two centred elements; break alignment for the others. Centred-narrow heroes are admissible *only* on editorial / salon / atelier voice, and even then the eyebrow or CTA should sit off-axis (margin-aligned, right-flush, or numeral-anchored).
|
|
144
|
+
|
|
145
|
+
54. **Hero padding asymmetry.** Is `padding-block-end` ≥ 1.3× `padding-block-start` on the hero container? If hero pads symmetrically (or pads *more* on top), it floats off the page. Hero must sit *into* the page — heavier bottom padding pulls it down into the next section's rhythm. Compute on the rendered output's hero element.
|
|
146
|
+
|
|
147
|
+
55. **Decorative-without-purpose.** Does the hero contain a decorative element (cursor, scanline, gradient blob, abstract shape, ornament, badge, sticker) that has no semantic anchor in the content? Fail. Decoration must be motivated: a cursor inside a typed command (signals "you'd type next"), a numeral that names an issue / year / version / chapter, a gradient that responds to interaction (HP3 cursor-spotlight), a stamp that names an authorship or date. Random ornaments — a "42" in the corner with no edition meaning, a cursor floating beside a hero, a Pantone chip with no colour rationale — are slop.
|
|
148
|
+
|
|
149
|
+
The CSS stamp at Step 6 should record the result alongside contrast: `· nav: N# · footer: Ft# · slop: pass (51–55)`. If any of 51–55 fail, fix before shipping.
|
|
150
|
+
|
|
151
|
+
## Honest copy · no fabricated content
|
|
152
|
+
|
|
153
|
+
Universal — apply to every genre. The page must not invent facts about the user's product, team, or market.
|
|
154
|
+
|
|
155
|
+
56. **Invented metric.** Does the page contain any quantitative claim — "10× faster", "saves 5 hours per week", "trusted by 50,000+ teams", "99.9 % uptime", "+47 % conversion" — that the user did not supply, that has no source, and that the model fabricated to fill a stat-led layout, comparison row, or proof bar? If yes, fail. The fix is one of: replace the number with `—` and a labelled grey block, replace it with a question to the user ("metric to confirm"), or rebuild the section without the proof slot. Stat-led macrostructures are slop the moment their stats become decorative. *(See [anti-patterns.md § Invented metrics](anti-patterns.md).)*
|
|
156
|
+
|
|
157
|
+
## Re-drawn UI chrome
|
|
158
|
+
|
|
159
|
+
Universal. Hallmark must reuse the user's existing chrome (browser, OS, IDE) instead of redrawing it.
|
|
160
|
+
|
|
161
|
+
57. **Re-drawn chrome.** Did Hallmark hand-build a fake browser bar (URL pill + traffic-light dots), a fake phone frame (rounded rectangle + notch + speaker slit), a fake code-block frame (mock window-chrome around a `<pre>`), a fake terminal frame, or a fake IDE chrome (file tabs + activity bar + sidebar) using HTML/CSS or SVG? If yes, fail. Re-drawn chrome is one of the strongest "looks AI-generated" tells — the model invented a UI that already exists in the user's environment. The fix: use a `<picture>` or `<figure>` containing a real screenshot, or omit the chrome and let the content stand on its own. *(See [anti-patterns.md § Re-drawn UI chrome](anti-patterns.md).)*
|
|
162
|
+
|
|
163
|
+
## Token discipline
|
|
164
|
+
|
|
165
|
+
Universal. The theme picks the palette and font stack at the top of the run; the rest of the run consumes tokens, never invents them.
|
|
166
|
+
|
|
167
|
+
58. **Mid-render token improvisation.** Did Hallmark introduce any colour value (`#hex`, `oklch(...)`, `rgb(...)`, `hsl(...)`) or `font-family` declaration *outside* the design tokens defined in `:root` / `[data-theme="..."]`? If yes, fail. Every colour and every font in the artifact must reference a named token (`var(--color-accent)`, `font-family: var(--font-display)`). Inline OKLCH or one-off hexes are mid-render improvisation — the model picked the theme, then forgot it and freestyled. The fix: lift the value into the token block as a new named variable, or replace it with an existing token. *(See [SKILL.md § Locked tokens](../SKILL.md) and [anti-patterns.md § Mid-render token improvisation](anti-patterns.md).)*
|
|
168
|
+
|
|
169
|
+
## Responsive — clickable affordances
|
|
170
|
+
|
|
171
|
+
Universal. Buttons, links, and nav items must remain readable as single-line affordances when the viewport shrinks.
|
|
172
|
+
|
|
173
|
+
59. **Two-line clickable text.** Does any button label, primary nav link, footer link, tab label, breadcrumb, or CTA text wrap to two or more lines at any viewport between 320 px and 1920 px? If yes, fail. Clickable text reading on two lines looks broken — visitors read it as a styling error, not as intentional. The fix is one of: shorten the label (the best fix; "Get started free" → "Start free"), set `white-space: nowrap` on the affordance and let the parent reflow, drop a non-essential nav item at narrow widths via `hidden=until-found`, or collapse the nav into a sheet/menu. Never let a CTA or nav link wrap. *(See [responsive.md § Clickable text — never wraps](responsive.md).)*
|
|
174
|
+
|
|
175
|
+
60. **Emoji-as-feature-icon.** Does any feature card, value prop, step number, or pricing tier carry an emoji glyph (✨ 🚀 ⚡ 🔥 🎯 ✅) as its primary icon? If yes, fail. Emoji-as-icon is one of the strongest "AI-default" tells — the model reached for a Unicode glyph instead of choosing an icon library, building a custom mark, or omitting the icon entirely. The fix: pick a single icon library (Lucide / Phosphor / Heroicons — see [assets.md](assets.md)), build a custom SVG, or drop the icon and lead with typography.
|
|
176
|
+
|
|
177
|
+
The CSS stamp at Step 6 should record results: `· honest: pass (56) · chrome: pass (57) · tokens: pass (58) · responsive: pass (59) · icons: pass (60)`. Any failure must be fixed before shipping.
|
|
178
|
+
|
|
179
|
+
## Mobile-responsiveness — the non-negotiables
|
|
180
|
+
|
|
181
|
+
Universal. Every emitted page must render flawlessly at 320 px, 375 px, 414 px, and 768 px CSS-pixel widths. Gates 36 (no horizontal scroll) and 59 (no two-line clickable text) already cover the headline cases; 61–65 below codify the patterns the marketing-site responsiveness pass uncovered. Eyeball each viewport before marking the output complete.
|
|
182
|
+
|
|
183
|
+
61. **Image-bearing grid track without `minmax(0, 1fr)`.** Does any `grid-template-columns` (or `grid-template-rows`) containing a `1fr` track render an `<img>` / `<picture>` / image-bearing element inside one of those tracks? If yes, the track must be `minmax(0, 1fr)` instead. Plain `1fr` resolves to `minmax(auto, 1fr)`, where `auto` minimum is the largest content's intrinsic width — for a 1024 + px native image, that's 1024 + px minimum, which pushes the layout past viewport on phones. The fix is one character per track: `1fr` → `minmax(0, 1fr)`.
|
|
184
|
+
|
|
185
|
+
62. **Root missing `overflow-x: clip`.** Does the artifact lack `overflow-x: clip` on both `html` and `body`? If yes, fail. `clip` (not `hidden`) prevents horizontal scroll without creating a scroll context, so `position: sticky` descendants keep working. Hard requirement on every emitted page. Add to the base reset: `html, body { overflow-x: clip; }`.
|
|
186
|
+
|
|
187
|
+
63. **Display headers without long-word wrap.** Does any element rendering display-size text (`h1`, `.hero__display`, `.section__title`, `.skill-row__title`, hero-equivalent classes) lack `overflow-wrap: anywhere; min-width: 0`? If yes, fail. Long hyphenated words ("AI-generated", uppercase compound brand names) overflow viewport because the only break opportunity is at the hyphen — `overflow-wrap: anywhere` lets the engine break inside the word as a last resort.
|
|
188
|
+
|
|
189
|
+
64. **Per-theme section-head override without mobile collapse.** When a theme or variant overrides `.section__head { grid-template-columns: ... }` to anything other than `1fr`, does it also include the mobile-collapse rule, OR does a global `[data-theme] .section__head { grid-template-columns: 1fr }` exist at `@media (max-width: 48rem)` with matching specificity? If neither, fail. Theme-specific 2-column heads keep their template on mobile, the title wraps onto the section label, and the page reads broken (most visible on Sport: italic Anton title overlapping "02 / EXAMPLES").
|
|
190
|
+
|
|
191
|
+
65. **CSS-only radio tab pattern that scroll-jumps.** When implementing tab toggles via `<input type="radio">` siblings + `:checked` selectors, does the artifact either (a) keep the radios in normal document flow with zero size + opacity 0 (no `position: absolute; top: 0`), OR (b) ship a JS handler that intercepts label clicks, calls `e.preventDefault()`, manually sets `radio.checked = true`, dispatches `change`, and focuses with `{ preventScroll: true }`? If the radios are at `position: absolute; top: 0` with no JS guard, fail. Default-position radios cause the page to jump to the section's top on every tab click — visible on every viewport but most disruptive on mobile.
|
|
192
|
+
|
|
193
|
+
66. **Section eyebrow / tag beside the heading (tag-left, header-right).** Does any section render an eyebrow / number / mono-cap label (`01 · THE TOUR`, `02 / FEATURES`, `Chapter Three`) in a column to the left of, or to the right of, the section heading on the same horizontal row? Auto-fail. The pattern reads as a templated editorial-SaaS tell within seconds. When an eyebrow is used at all (see [`anti-patterns.md § Eyebrow on every section`](anti-patterns.md) — default OFF), the heading goes **directly underneath it in the same column**, vertical stack only. Concretely: **any `<header>`, `<div>`, or `<section>` wrapper — regardless of class name (`.section__head`, `.workbench__head`, `.pricing__head`, `.catches__head`, `.foo__intro`, anything macrostructure- or section-specific)** — that contains both an eyebrow / label / number / kicker element AND a heading element MUST resolve to single-column layout: `display: block`, `display: flex; flex-direction: column`, or `display: grid; grid-template-columns: 1fr` (or `minmax(0, 1fr)`). Any multi-column grid on such a wrapper (`grid-template-columns: 1fr 2fr`, `minmax(0, 0.4fr) minmax(0, 1fr)`, `auto 1fr`, etc.) is banned. **The rule binds on the *content shape* — eyebrow + heading in the same wrapper — not on a specific class-name allowlist.** It supersedes the "Left-margin" axis in [`structure.md`](structure.md) and the "Hanging headers" pattern in [`layout-and-space.md`](layout-and-space.md) for any head that carries an eyebrow. **NOT bypassable by "preserve structural parity" / "mirror this reference" / "match the prior build" instructions** — if a reference build ships the banned pattern (most pre-rule-66 builds do), silently flatten it in the new build. The rules win over parity. Reference builds may pre-date this gate; the gate is authoritative.
|
|
194
|
+
|
|
195
|
+
67. **All-caps display heads with line-height < 1.0 → cap-collision on wrap.** Does any display-size element (`.hero__display`, `.section__title`, `h1`, `h2`, or anything `≥ --text-2xl`) declare both `text-transform: uppercase` AND a `line-height` (or `--lh-tight`) below `1.0`? If yes, fail. Uppercase glyphs have no descenders and their cap-tops sit at the very top of the line box — at `line-height: 0.94` (the old Manifesto / Sport / Brutal default) the cap-tops of line N+1 visibly collide with the baseline or commas of line N when the title wraps. The condensed display faces (Anton, Inter Tight 900, Bebas Neue) make this worse. **Floor for all-caps display heads is `line-height: 1.0`; recommended `1.02–1.08`.** Either bump `--lh-tight` ≥ 1.0 for the theme, or drop `text-transform: uppercase` on the display element. Most visible when a two-line `.section__title` wraps with a trailing comma on line one ("SAME PROMPT, TWO / DIFFERENT OUTPUTS.") — the comma + cap-D fuse into a single glyph blob.
|
|
196
|
+
|
|
197
|
+
68. **Sticky element at `top: 0` below a sticky page-level nav → bleed.** Does the artifact declare `position: sticky; top: 0;` on any element OTHER than the page's top-level nav / banner / header, when a sticky `<header>` / `<nav>` / `.banner` also exists at `top: 0` (i.e. there are two sticky-at-top-0 elements on the page)? Auto-fail. Both stick to the viewport top during scroll and overlap; the deeper-in-DOM element paints over the nav (visible as a "section header bleeding into the nav bar" glitch). Fix: define a `--banner-height` token (~44–64 px depending on nav design) and offset every secondary sticky to `top: var(--banner-height)`, so it docks **beneath** the nav. Also give the nav a higher z-index than in-page sticky elements — split `--z-sticky` (in-page, e.g. 200) from `--z-sticky-nav` (top nav, e.g. 300) so the nav always out-paints when sticky boxes momentarily overlap. This gate fires only when the page actually has sticky elements (S3 sticky-pinned section heads, F2 sticky-scroll feature stacks, sticky tables-of-contents); pages without sticky behaviour pass trivially.
|
|
198
|
+
|
|
199
|
+
69. **Studied DNA discarded for a catalog theme.** Did a `study` diagnosis emit earlier in the conversation, AND does the build's CSS stamp's `theme:` field name a catalog theme (Specimen, Atelier, Brutal, Salon, Newsprint, Linen, Studio, Manifesto, Terminal, Midnight, Almanac, Garden, Quiet, Riso, Sport, Bloom, Coral, Violet, Aurora, Halo, Plume, Editorial) rather than `studied-DNA (source: ...)` — without the user having explicitly pivoted ("use Linen instead", "ignore the DNA", "rotate to a different theme")? Auto-fail. The studied DNA was meant to be the system (SKILL.md § 2.6 Condition 0); defaulting back to catalog is the attractor pull. Fix: re-emit using the studied DNA's tokens directly (paper OKLCH, accent OKLCH, named candidate fonts, macrostructure, archetypes) and update the stamp to `theme: studied-DNA (source: <URL or image>)` with the inline values. This gate is trivially passed when no recent study exists in conversation scope.
|
|
200
|
+
|
|
201
|
+
The CSS stamp at Step 6 records mobile pass alongside contrast: `· mobile: pass (36, 59, 61–69)`.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
If any answer is **yes**, fix it. Do not ship slop.
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# Structure
|
|
2
|
+
|
|
3
|
+
Most AI-generated UIs are visually distinct but structurally identical: hero → three features → CTA → footer. Same heading positions, same column counts, same component vocabulary. **Structural sameness is the AI fingerprint, not visual sameness.** Hallmark's job is to break it.
|
|
4
|
+
|
|
5
|
+
This file catalogues the **primitive axes** of structural variety. For most builds you should NOT compose a fingerprint axis-by-axis from this file — instead pick a named whole-page shape from [`macrostructures.md`](macrostructures.md), which is faster and prevents default-attractor sameness. Use this file when you need to deviate from a macrostructure's defaults on one or two axes, or when you're auditing an existing page and need vocabulary for what you see.
|
|
6
|
+
|
|
7
|
+
The axes below are still the building blocks. Pick one option from each to form a *structural fingerprint*. Two pages should never share the same fingerprint.
|
|
8
|
+
|
|
9
|
+
## The six axes
|
|
10
|
+
|
|
11
|
+
### 1. Section-heading placement
|
|
12
|
+
|
|
13
|
+
Where does a section's title live in space? Pick one per page.
|
|
14
|
+
|
|
15
|
+
| Pattern | Description | Real-world reference |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| **Left-margin** | ⚠️ **Opt-in only — never default.** Eyebrow / number / label in a narrow left column with heading + body to the right. Reads as a templated-editorial AI tell when applied to SaaS / dev-tool / consumer pages. Permitted ONLY when the user explicitly asks for an editorial / specimen layout AND no eyebrow is paired with the heading (label may sit beside body copy; heading must stay in its own row above). The eyebrow-left / heading-right variant is banned outright by slop-test gate 66. | The New York Times Magazine; our Specimen theme — when the user explicitly requests that voice. |
|
|
18
|
+
| **Hanging** | Heading floats in negative space *above* the section, with generous breathing room. | David Airey's portfolio; minimal modernist. |
|
|
19
|
+
| **Centered display** | Heading dominates centre stage, symmetrical. Formal, welcoming, can feel static if used everywhere. | Apple product pages; Atelier-style runway invitations. |
|
|
20
|
+
| **Bottom-aligned** | Heading anchors the *base* of a section, content flows above. Inverts hierarchy. | Swiss editorial; Newsprint masthead-below pattern. |
|
|
21
|
+
| **Overlapping image** | Heading layered atop photography or colour block. Demands strong contrast. | Pentagram project pages; Manifesto posters. |
|
|
22
|
+
| **Sticky / pinned** | Heading remains visible while content scrolls beneath. Orientation aid. | GSAP ScrollTrigger docs; Almanac-style references. |
|
|
23
|
+
| **Numbered display** | ⚠️ **Opt-in only — never default.** "01." with a rule line and the heading right beside it. Procedural, sequenced. Banned for default SaaS / consumer / dev-tool pages by slop-test gate 66 (the tag-beside-heading pattern is a templated tell). Permitted only when the user explicitly asks for ordinal / chaptered numbering AND the macrostructure is Long Document, Manifesto, or Catalogue numbered. Even then, prefer the stacked variant: number on its own line above the heading. | Rauno Freiberg's portfolio — when the user explicitly invokes that voice. |
|
|
24
|
+
| **Inline with body** | No section break — the heading emerges from the paragraph flow. Conversational. | Medium articles; long-form essays. |
|
|
25
|
+
|
|
26
|
+
### 2. Body composition
|
|
27
|
+
|
|
28
|
+
How does long-form content lay out beyond "single column at 65ch"?
|
|
29
|
+
|
|
30
|
+
| Pattern | When | Reference |
|
|
31
|
+
| --- | --- | --- |
|
|
32
|
+
| **Single column** | Narrative-first, reading-led. The default for editorial. | Most blogs. |
|
|
33
|
+
| **Two-column asymmetric** | Wide body + narrow margin column for metadata, captions, marginalia. | Semplice; Linen-style. |
|
|
34
|
+
| **Multi-column justified** | Newspaper rhythm; 2–3 narrow columns, hyphenated, justified. | The Guardian; FT.com; Newsprint. |
|
|
35
|
+
| **Marginalia** | Sidenotes in a generous outer margin run alongside core text. | Tufte CSS; scholarly publications. |
|
|
36
|
+
| **Three-column equal** | Encyclopedia / reference / data-density. Chunked, scannable. | Wikipedia; Whole Earth Catalog; Almanac. |
|
|
37
|
+
| **Full-bleed with margin reset** | Body at 65ch, but pull-quotes or images bleed full-viewport. Emphasis via scale change. | Medium pull-quotes; Manifesto sections. |
|
|
38
|
+
| **Asymmetric spans** | Columns vary widthwise; intentional 2-1-3 ratios via CSS Grid. | Locomotive; portfolio sites. |
|
|
39
|
+
|
|
40
|
+
### 3. Divider language
|
|
41
|
+
|
|
42
|
+
How do sections separate?
|
|
43
|
+
|
|
44
|
+
- **Hairline rule.** 0.5–1px line, inset or full-bleed. Hallmark's default; modernist.
|
|
45
|
+
- **Ornament.** Fleuron (`❦`), centered dot, geometric mark. Salon, editorial classic.
|
|
46
|
+
- **Negative space.** No rule at all — the gap *is* the divider. Apple, Linen, modern minimalism.
|
|
47
|
+
- **Bleed-color block.** Section background colour shifts; the colour edge is the divider. Manifesto, Brutal.
|
|
48
|
+
- **Double rule / typographic mark.** Top + bottom line tight together; signals masthead in Newsprint.
|
|
49
|
+
|
|
50
|
+
### 4. Button voice
|
|
51
|
+
|
|
52
|
+
How do CTAs happen?
|
|
53
|
+
|
|
54
|
+
- **Outlined.** Border, no fill. Secondary or quiet primary. Hallmark default.
|
|
55
|
+
- **Unstyled link.** Underlined word, no box. Trust the typography. Editorial / craft sites.
|
|
56
|
+
- **Oversized solid.** Big block of accent colour, full padding. Manifesto, Sport, statement-CTA.
|
|
57
|
+
- **Typographic-only.** A word in a specific weight/size/colour, no rule, no box. Looks like a headline that happens to be clickable. Atelier, Salon.
|
|
58
|
+
- **Form-as-CTA.** The button is part of an inline form; the action *is* fill-this-field. Newsletter signups.
|
|
59
|
+
|
|
60
|
+
### 5. Image treatment
|
|
61
|
+
|
|
62
|
+
How does imagery enter the page?
|
|
63
|
+
|
|
64
|
+
- **Full-bleed.** Edge-to-edge, viewport width, image as architecture. Manifesto, Sport.
|
|
65
|
+
- **Tightly cropped.** Small, deliberate, sized to grid. Almanac, Atelier still-life.
|
|
66
|
+
- **Inline with text.** Image flows within the paragraph rhythm, sized to measure. Editorial, Newsprint.
|
|
67
|
+
- **Margin-aligned.** Image sits in the wide outer margin; body unbroken. Linen, Tufte.
|
|
68
|
+
- **None.** No imagery; typography carries everything. Specimen, Manifesto-as-text-poster, Terminal.
|
|
69
|
+
|
|
70
|
+
### 6. Reveal pattern
|
|
71
|
+
|
|
72
|
+
What happens on page-load and on scroll?
|
|
73
|
+
|
|
74
|
+
- **Fade-up stagger.** Default. Subtle, broadly safe; orchestrated once with exponential ease-out.
|
|
75
|
+
- **Horizontal sweep.** Element slides in from one edge; clip-path or transform. Directional momentum.
|
|
76
|
+
- **Type-unmask.** clip-path animates open over text. Graceful when the type is the hero.
|
|
77
|
+
- **Number-tick.** Counter from 0 to final value; for stats, prices, dates. Almanac, dashboards.
|
|
78
|
+
- **Typewriter.** Character-by-character; honest about the medium. Terminal only. **Decorative-graphics constraint:** Terminal output must NOT include standalone scanlines, detached blinking cursors, or random ASCII art. The terminal cursor (`▮`) is allowed only when it sits *inside* a typed command (install code block, N8 Terminal command nav) and signals an honest "you'd type next" affordance. A floating cursor in a hero corner is set decoration; remove it. See [`microinteractions.md`](microinteractions.md) Caret blink row.
|
|
79
|
+
- **None.** Everything is just there at load. Some sites should not move. Pentagram, brutalist sites.
|
|
80
|
+
|
|
81
|
+
## Picking a fingerprint
|
|
82
|
+
|
|
83
|
+
A fingerprint = one choice per axis. There are 8 × 7 × 5 × 5 × 5 × 6 = **42 000** fingerprints. You will never run out.
|
|
84
|
+
|
|
85
|
+
Two rules govern choices:
|
|
86
|
+
|
|
87
|
+
1. **Coherence.** A Newsprint page with multi-column justified body should have a typographic CTA, not an oversized solid button — those don't share a voice. Pick choices that belong to the same *world*.
|
|
88
|
+
2. **Anti-repetition.** Across consecutive pages built in the same session, no two should share more than three of the six axes. If the previous page used left-margin headings + single column + hairline divider + outlined button, this page should differ on at least three of those.
|
|
89
|
+
|
|
90
|
+
## Theme-suggested fingerprints
|
|
91
|
+
|
|
92
|
+
Each Hallmark theme has a default structural fingerprint. Use them as starting points only when the brief specifies a theme. **For most builds, pick a macrostructure from [`macrostructures.md`](macrostructures.md) instead** — themes describe *visual surface*, macrostructures describe *page shape*; the latter drives variety more.
|
|
93
|
+
|
|
94
|
+
The table below is alphabetical by theme to neutralise any "first row = default" attractor. No theme is the default. The **Nav** and **Footer** columns name the default archetype from [`component-cookbook.md`](component-cookbook.md); the routing tables in that file list the acceptable alternates.
|
|
95
|
+
|
|
96
|
+
| Theme | Heading | Body | Divider | Button | Image | Reveal | Nav | Footer |
|
|
97
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
98
|
+
| Almanac | Sticky | Three-column equal | Hairline | Outlined | Inline | Number-tick | N3 Side-rail | Ft3 Index columns |
|
|
99
|
+
| Atelier | Centered | Single column | Negative space | Typographic-only | Tightly cropped | Type-unmask | N9 Edge-min | Ft6 Letter close |
|
|
100
|
+
| Aurora | Hanging | Single column | Negative space | Typographic-only | None | Fade-up | N5 Floating pill | Ft5 Statement |
|
|
101
|
+
| Bloom | Centered | Single column | Negative space | Typographic-only | None | Fade-up | N5 Floating pill | Ft5 Statement |
|
|
102
|
+
| Brutal | Overlapping image | Full-bleed reset | Bleed-colour | Oversized solid | Full-bleed | Horizontal sweep | N7 Brutal slab | Ft8 Marquee scroll |
|
|
103
|
+
| Coral | Centered | Single column | Negative space | Outlined | Margin-aligned | Fade-up | N5 Floating pill | Ft1 Mast-headed |
|
|
104
|
+
| Garden | Hanging | Marginalia | Negative space | Unstyled link | Margin-aligned | None | N9 Edge-min | Ft6 Letter close |
|
|
105
|
+
| Halo | Centered | Single column | Negative space | Outlined | None | Fade-up | N5 Floating pill | Ft5 Statement |
|
|
106
|
+
| Linen | Hanging | Two-column asymmetric | Negative space | Unstyled link | Margin-aligned | Fade-up | N6 Masthead | Ft1 Mast-headed |
|
|
107
|
+
| Manifesto | Overlapping image | Full-bleed reset | Bleed-colour | Oversized solid | Full-bleed | Horizontal sweep | N7 Brutal slab | Ft5 Statement |
|
|
108
|
+
| Midnight | Numbered display | Single column | Hairline | Typographic-only | None | Typewriter | N5 Floating pill | Ft2 Inline single line |
|
|
109
|
+
| Newsprint | Bottom-aligned | Multi-column justified | Double rule | Outlined | Inline | None | N6 Masthead | Ft4 Dense colophon |
|
|
110
|
+
| Plume | Hanging | Single column | Bleed-colour band | Outlined | Margin-aligned | Fade-up | N9 Edge-min | Ft1 Mast-headed |
|
|
111
|
+
| Editorial | Hanging | 2-col asym hero / single below | Hairline | Outlined | Tightly cropped or generated (Tier C) | Fade-up | N6 Masthead | Ft1 Mast-headed |
|
|
112
|
+
| Quiet | Centered | Single column narrow | Negative space | Outlined pill | None | None | N9 Edge-min | Ft2 Inline single line |
|
|
113
|
+
| Riso | Centered | Single column | Negative space | Outlined | Inline | None | N7 Brutal slab | Ft8 Marquee scroll |
|
|
114
|
+
| Salon | Centered | Single column narrow | Ornament (fleuron) | Outlined | Tightly cropped | None | N6 Masthead | Ft1 Mast-headed |
|
|
115
|
+
| Specimen | Left-margin | Asymmetric spans | Hairline | Outlined | None | Fade-up | N5 Floating pill | Ft2 Inline single line |
|
|
116
|
+
| Sport | Numbered display | Asymmetric spans | Bleed-colour | Oversized solid | Full-bleed | Horizontal sweep | N7 Brutal slab | Ft8 Marquee scroll |
|
|
117
|
+
| Studio | Centered | Asymmetric spans | Negative space | Typographic-only | Tightly cropped | Fade-up | N7 Brutal slab | Ft3 Index columns |
|
|
118
|
+
| Terminal | Inline (with `>` prompt) | Single column | Negative space | Typographic-only `[ go ]` | None | Typewriter | N8 Terminal command | Ft4 Dense colophon |
|
|
119
|
+
| Violet | Hanging | Single column | Negative space | Outlined | None | Fade-up | N5 Floating pill | Ft2 Inline single line |
|
|
120
|
+
|
|
121
|
+
## Anti-patterns of structural sameness
|
|
122
|
+
|
|
123
|
+
Reject these structural fingerprints. They are the AI-template fingerprint.
|
|
124
|
+
|
|
125
|
+
- **The SaaS hero.** Centered display heading, centered subhead, centered pill CTA, full-viewport hero, fade-up. The single most-recognised AI structural fingerprint.
|
|
126
|
+
- **The 3-feature row.** Three equal columns of icon-above-heading-above-two-line-body, gapped at 24px, identical card padding.
|
|
127
|
+
- **The benefits-then-CTA.** A list of feature bullets followed by a "Sign up" button block. Predictable rhythm.
|
|
128
|
+
- **The everything-fades-in.** Every section gets the same scroll-triggered fade-up animation. Makes the page feel like a presentation.
|
|
129
|
+
- **The carbon-copy footer.** Logo, four columns of links, social row, copyright. The same on every site you've ever seen.
|
|
130
|
+
|
|
131
|
+
## When you don't know
|
|
132
|
+
|
|
133
|
+
If the brief doesn't suggest a fingerprint and the user hasn't picked a theme, **do not default**. Read the brief for a domain word (audio, commerce, docs, agency, restaurant, fashion, fintech, personal, …) and offer the user **three macrostructures from categorically different groups *that fit that domain***. Then let them pick.
|
|
134
|
+
|
|
135
|
+
The point of three is contrast: a grid-led shape, a document-led shape, a poster-led shape. Picking from categorically different groups is what produces variety; offering three near-twins is the AI tell this whole skill exists to defeat.
|
|
136
|
+
|
|
137
|
+
### Domain → trio (offer these three; never default)
|
|
138
|
+
|
|
139
|
+
If you can't infer the domain, ask one question — "what does this thing do?" — and then map it.
|
|
140
|
+
|
|
141
|
+
| Domain words in the brief | Trio to offer |
|
|
142
|
+
| --- | --- |
|
|
143
|
+
| **podcast, audio, music, playlist, listening** | **Photographic** · **Quote-Led** · **Letter** |
|
|
144
|
+
| **shop, store, product, merch, commerce, ecom** | **Catalogue** · **Photographic** · **Bento Grid** |
|
|
145
|
+
| **docs, CLI, SDK, API, library, open source, developer reference** | **Workbench** · **Long Document** · **Component Playground** |
|
|
146
|
+
| **platform, infra, observability, dashboard SaaS, B2B tool, try-or-talk-to-sales** | **Bento Grid** · **Workbench** · **Stat-Led** |
|
|
147
|
+
| **agency, studio (work-led), case studies, multi-project portfolio, freelance creative** | **Portfolio Grid** · **Split Studio** · **Index-First** |
|
|
148
|
+
| **personal one-pager, individual, about-me, resume (no case studies)** | **Long Document** · **Letter** · **Index-First** |
|
|
149
|
+
| **restaurant, café, bar, food, kitchen, menu** | **Photographic** · **Long Document** · **Catalogue** |
|
|
150
|
+
| **fashion, apparel, beauty, lookbook** | **Photographic** · **Catalogue** · **Marquee Hero** |
|
|
151
|
+
| **fintech, banking, payments, invest, trading** | **Stat-Led** · **Workbench** · **Long Document** |
|
|
152
|
+
| **manifesto, campaign, cause, advocacy, political** | **Manifesto** · **Quote-Led** · **Stat-Led** |
|
|
153
|
+
| **editorial, foundry, magazine, type, specimen** | **Specimen** · **Long Document** · **Type Specimen** |
|
|
154
|
+
| **product launch, SaaS marketing, B2B** | **Bento Grid** · **Workbench** · **Stat-Led** |
|
|
155
|
+
| **conference, event, speaker, keynote** | **Marquee Hero** · **Manifesto** · **Photographic** |
|
|
156
|
+
| **fallback (genuinely no signal)** | **Bento Grid** · **Long Document** · **Manifesto** |
|
|
157
|
+
|
|
158
|
+
**Note on splits.** Some domains split on intent. *Developer-tool docs* and *developer-tool marketing* both have "developer" in them, but the docs page wants a Workbench walkthrough; the marketing page wants Bento Grid + Stat-Led so the SRE can read the value prop in 30 seconds. Same for *personal*: a one-pager about-me and a multi-project portfolio of case studies are *different briefs* — the one-pager wants prose (Long Doc / Letter); the portfolio wants Portfolio Grid / Split Studio. If the brief is ambiguous, **ask one question** to disambiguate ("docs walkthrough or marketing landing?", "one-pager or case studies?") before picking the trio.
|
|
159
|
+
|
|
160
|
+
If the user shrugs and says "you pick", read the project's CSS for a `/* Hallmark · macrostructure: ... */` stamp; whichever of the trio is most categorically distant from the stamped family is the right pick. Two consecutive outputs should never be from the same family — never two editorial macrostructures, never two grid-led macrostructures.
|
|
161
|
+
|
|
162
|
+
If the user answers a vague tone word ("modern", "clean", "professional"), that is not a feeling. Re-ask with the domain trio.
|
|
163
|
+
|
|
164
|
+
The fallback row at the bottom of the table is the *last* resort — only if no domain words appear and the user genuinely cannot pick. In practice, almost every brief contains a domain word; using the fallback usually means you didn't read carefully enough.
|