@r1z4x/tezgah 1.9.2 → 1.11.0
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/CHANGELOG.md +83 -1
- package/MANIFEST +382 -144
- package/README.de.md +1 -1
- package/README.es.md +1 -1
- package/README.fr.md +1 -1
- package/README.md +1 -1
- package/README.tr.md +1 -1
- package/bin/codegen +5 -2
- package/bin/tezgah-design +288 -1
- package/bin/tezgah-docs +1 -1
- package/bin/tezgah-doctor +39 -2
- package/bin/tezgah-import-ai-research +26 -12
- package/bin/tezgah-ocr-review +296 -0
- package/bin/tezgah-research +216 -40
- package/bin/tezgah-review-quote +185 -0
- package/bin/tezgah-setup +136 -33
- package/bin/tezgah-skill +1 -1
- package/bin/tezgah-status +201 -3
- package/bin/tezgah-task +203 -3
- package/commands/adhd.md +2 -2
- package/commands/ponytail.md +4 -4
- package/docs/architecture.md +2 -2
- package/docs/citations-baseline.json +2 -2
- package/docs/clarity-baseline.json +2 -2
- package/docs/contract.md +87 -42
- package/docs/environment.md +2 -0
- package/docs/evidence.md +28 -9
- package/docs/feature-audit.md +2 -2
- package/docs/gate.md +54 -31
- package/docs/glossary.md +5 -2
- package/docs/hosts.md +17 -3
- package/docs/index.json +34 -8
- package/docs/judge.md +4 -2
- package/docs/layers.md +3 -3
- package/docs/models.md +31 -9
- package/docs/operations.md +126 -1
- package/docs/research.md +786 -5
- package/docs/skills.md +137 -13
- package/docs/status-line.md +115 -1
- package/hooks/hooks.json +1 -1
- package/hooks/lang/en.json +10 -0
- package/hooks/lang/tr.json +11 -1
- package/hooks/tezgah_agents.py +38 -22
- package/hooks/tezgah_apps.py +18 -0
- package/hooks/tezgah_components.py +4 -0
- package/hooks/tezgah_context.py +189 -50
- package/hooks/tezgah_extension.py +337 -0
- package/hooks/tezgah_gate.py +188 -56
- package/hooks/tezgah_integrity.py +652 -105
- package/hooks/tezgah_judge.py +6 -4
- package/hooks/tezgah_models.py +59 -19
- package/hooks/tezgah_orca.py +1 -1
- package/hooks/tezgah_paths.py +102 -6
- package/hooks/tezgah_policy.py +94 -45
- package/hooks/tezgah_rank.py +9 -6
- package/hooks/tezgah_replay.py +4 -4
- package/hooks/tezgah_research.py +1260 -65
- package/hooks/tezgah_research_capture.py +1544 -0
- package/hooks/tezgah_research_evidence.py +842 -0
- package/hooks/tezgah_research_stats.py +258 -0
- package/hooks/tezgah_skill_pick.py +408 -106
- package/hooks/tezgah_stopspec.py +8 -1
- package/hooks/tezgah_task.py +12 -4
- package/hooks/tezgah_taste_ledger.py +1 -1
- package/hosts/cursor/hook.py +29 -2
- package/hosts/opencode/plugins/tezgah.js +307 -46
- package/hosts/opencode/tui/cli/tui.tsx +100 -0
- package/hosts/opencode/tui/tezgah-tui.tsx +2 -1
- package/output-styles/tezgah.md +10 -10
- package/package.json +1 -1
- package/skills/ai-research/SKILL.md +21 -14
- package/skills/ai-research/SOURCE +7 -5
- package/skills/ai-research/index/1-frame.md +6 -6
- package/skills/ai-research/index/2-data.md +9 -9
- package/skills/ai-research/index/3-train.md +36 -36
- package/skills/ai-research/index/4-measure.md +13 -13
- package/skills/ai-research/index/5-run.md +11 -11
- package/skills/ai-research/index/6-write.md +23 -23
- package/skills/ai-research/library.json +104 -104
- package/skills/analyze-app/SKILL.md +17 -12
- package/skills/design-contract/SKILL.md +42 -7
- package/skills/design-contract/data-views.md +2 -2
- package/skills/design-library/EVALS.md +1 -1
- package/skills/design-library/INDEX.md +39 -39
- package/skills/design-library/SKILL.md +19 -13
- package/skills/design-library/SOURCE +45 -43
- package/skills/feature-audit/SKILL.md +20 -14
- package/skills/hallmark/LICENSE +21 -0
- package/skills/hallmark/SKILL.md +154 -0
- package/skills/hallmark/SOURCE +207 -0
- package/skills/hallmark/agents/openai.yaml +13 -0
- package/skills/hallmark/references/anatomy.md +71 -0
- package/skills/hallmark/references/brand-truth.md +40 -0
- package/skills/hallmark/references/comp.md +104 -0
- package/skills/hallmark/references/craft.md +116 -0
- package/skills/hallmark/references/dark-mode.md +49 -0
- package/skills/hallmark/references/data-viz.md +48 -0
- package/skills/hallmark/references/design-md.md +53 -0
- package/skills/hallmark/references/direction.md +52 -0
- package/skills/hallmark/references/export-formats.md +80 -0
- package/skills/hallmark/references/flow.md +131 -0
- package/skills/hallmark/references/fonts.md +58 -0
- package/skills/hallmark/references/gates.md +243 -0
- package/skills/hallmark/references/genres/atmospheric.md +24 -0
- package/skills/hallmark/references/genres/editorial.md +24 -0
- package/skills/hallmark/references/genres/modern-minimal.md +24 -0
- package/skills/hallmark/references/genres/playful.md +24 -0
- package/skills/hallmark/references/imagery.md +99 -0
- package/skills/hallmark/references/interaction-and-states.md +89 -0
- package/skills/hallmark/references/layout.md +104 -0
- package/skills/hallmark/references/macrostructures/01-bento-grid.md +21 -0
- package/skills/hallmark/references/macrostructures/02-long-document.md +35 -0
- package/skills/hallmark/references/macrostructures/03-marquee-hero.md +21 -0
- package/skills/hallmark/references/macrostructures/04-stat-led.md +21 -0
- package/skills/hallmark/references/macrostructures/05-workbench.md +21 -0
- package/skills/hallmark/references/macrostructures/06-conversational-faq.md +28 -0
- package/skills/hallmark/references/macrostructures/07-manifesto.md +28 -0
- package/skills/hallmark/references/macrostructures/08-photographic.md +21 -0
- package/skills/hallmark/references/macrostructures/09-quote-led.md +21 -0
- package/skills/hallmark/references/macrostructures/10-specimen.md +21 -0
- package/skills/hallmark/references/macrostructures/11-catalogue.md +21 -0
- package/skills/hallmark/references/macrostructures/12-letter.md +21 -0
- package/skills/hallmark/references/macrostructures/13-index-first.md +21 -0
- package/skills/hallmark/references/macrostructures/14-narrative-workflow.md +21 -0
- package/skills/hallmark/references/macrostructures/15-split-studio.md +21 -0
- package/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
- package/skills/hallmark/references/macrostructures/17-type-specimen.md +19 -0
- package/skills/hallmark/references/macrostructures/18-portfolio-grid.md +21 -0
- package/skills/hallmark/references/macrostructures/19-map-diagram.md +21 -0
- package/skills/hallmark/references/macrostructures/20-ecosystem-index.md +19 -0
- package/skills/hallmark/references/macrostructures/21-component-playground.md +21 -0
- package/skills/hallmark/references/macrostructures.md +119 -0
- package/skills/hallmark/references/microinteractions.md +80 -0
- package/skills/hallmark/references/patterns.md +202 -0
- package/skills/hallmark/references/redesign.md +88 -0
- package/skills/hallmark/references/responsive.md +46 -0
- package/skills/hallmark/references/review-finish.md +19 -0
- package/skills/hallmark/references/review-hero.md +20 -0
- package/skills/hallmark/references/scroll-choreography.md +110 -0
- package/skills/hallmark/references/texture.md +90 -0
- package/skills/hallmark/references/themes/README.md +58 -0
- package/skills/hallmark/references/themes/almanac.jpg +0 -0
- package/skills/hallmark/references/themes/almanac.md +103 -0
- package/skills/hallmark/references/themes/arcade.jpg +0 -0
- package/skills/hallmark/references/themes/arcade.md +102 -0
- package/skills/hallmark/references/themes/atelier.jpg +0 -0
- package/skills/hallmark/references/themes/atelier.md +98 -0
- package/skills/hallmark/references/themes/bloom.jpg +0 -0
- package/skills/hallmark/references/themes/bloom.md +102 -0
- package/skills/hallmark/references/themes/blueprint.jpg +0 -0
- package/skills/hallmark/references/themes/blueprint.md +103 -0
- package/skills/hallmark/references/themes/broadside.jpg +0 -0
- package/skills/hallmark/references/themes/broadside.md +108 -0
- package/skills/hallmark/references/themes/brutal.jpg +0 -0
- package/skills/hallmark/references/themes/brutal.md +95 -0
- package/skills/hallmark/references/themes/carnival.jpg +0 -0
- package/skills/hallmark/references/themes/carnival.md +104 -0
- package/skills/hallmark/references/themes/cobalt.jpg +0 -0
- package/skills/hallmark/references/themes/cobalt.md +101 -0
- package/skills/hallmark/references/themes/console.jpg +0 -0
- package/skills/hallmark/references/themes/console.md +99 -0
- package/skills/hallmark/references/themes/coral.jpg +0 -0
- package/skills/hallmark/references/themes/coral.md +102 -0
- package/skills/hallmark/references/themes/darkroom.jpg +0 -0
- package/skills/hallmark/references/themes/darkroom.md +99 -0
- package/skills/hallmark/references/themes/dose.jpg +0 -0
- package/skills/hallmark/references/themes/dose.md +98 -0
- package/skills/hallmark/references/themes/dusk.jpg +0 -0
- package/skills/hallmark/references/themes/dusk.md +105 -0
- package/skills/hallmark/references/themes/editorial.jpg +0 -0
- package/skills/hallmark/references/themes/editorial.md +97 -0
- package/skills/hallmark/references/themes/formwork.jpg +0 -0
- package/skills/hallmark/references/themes/formwork.md +107 -0
- package/skills/hallmark/references/themes/furrow.jpg +0 -0
- package/skills/hallmark/references/themes/furrow.md +98 -0
- package/skills/hallmark/references/themes/garden.jpg +0 -0
- package/skills/hallmark/references/themes/garden.md +97 -0
- package/skills/hallmark/references/themes/grid.jpg +0 -0
- package/skills/hallmark/references/themes/grid.md +101 -0
- package/skills/hallmark/references/themes/halftone.jpg +0 -0
- package/skills/hallmark/references/themes/halftone.md +106 -0
- package/skills/hallmark/references/themes/hedgerow.jpg +0 -0
- package/skills/hallmark/references/themes/hedgerow.md +104 -0
- package/skills/hallmark/references/themes/hum.jpg +0 -0
- package/skills/hallmark/references/themes/hum.md +99 -0
- package/skills/hallmark/references/themes/index.json +2191 -0
- package/skills/hallmark/references/themes/ink.jpg +0 -0
- package/skills/hallmark/references/themes/ink.md +106 -0
- package/skills/hallmark/references/themes/kiln.jpg +0 -0
- package/skills/hallmark/references/themes/kiln.md +108 -0
- package/skills/hallmark/references/themes/loom.jpg +0 -0
- package/skills/hallmark/references/themes/loom.md +106 -0
- package/skills/hallmark/references/themes/lumen.jpg +0 -0
- package/skills/hallmark/references/themes/lumen.md +103 -0
- package/skills/hallmark/references/themes/manifesto.jpg +0 -0
- package/skills/hallmark/references/themes/manifesto.md +101 -0
- package/skills/hallmark/references/themes/midnight.jpg +0 -0
- package/skills/hallmark/references/themes/midnight.md +97 -0
- package/skills/hallmark/references/themes/newsprint.jpg +0 -0
- package/skills/hallmark/references/themes/newsprint.md +102 -0
- package/skills/hallmark/references/themes/overprint.jpg +0 -0
- package/skills/hallmark/references/themes/overprint.md +101 -0
- package/skills/hallmark/references/themes/pasteup.jpg +0 -0
- package/skills/hallmark/references/themes/pasteup.md +100 -0
- package/skills/hallmark/references/themes/piste.jpg +0 -0
- package/skills/hallmark/references/themes/piste.md +99 -0
- package/skills/hallmark/references/themes/ribbon.jpg +0 -0
- package/skills/hallmark/references/themes/ribbon.md +106 -0
- package/skills/hallmark/references/themes/rim.jpg +0 -0
- package/skills/hallmark/references/themes/rim.md +96 -0
- package/skills/hallmark/references/themes/riso.jpg +0 -0
- package/skills/hallmark/references/themes/riso.md +98 -0
- package/skills/hallmark/references/themes/solstice.jpg +0 -0
- package/skills/hallmark/references/themes/solstice.md +104 -0
- package/skills/hallmark/references/themes/specimen.jpg +0 -0
- package/skills/hallmark/references/themes/specimen.md +100 -0
- package/skills/hallmark/references/themes/spore.jpg +0 -0
- package/skills/hallmark/references/themes/spore.md +104 -0
- package/skills/hallmark/references/themes/sport.jpg +0 -0
- package/skills/hallmark/references/themes/sport.md +101 -0
- package/skills/hallmark/references/themes/squeeze.jpg +0 -0
- package/skills/hallmark/references/themes/squeeze.md +99 -0
- package/skills/hallmark/references/themes/sticker.jpg +0 -0
- package/skills/hallmark/references/themes/sticker.md +106 -0
- package/skills/hallmark/references/themes/studio.jpg +0 -0
- package/skills/hallmark/references/themes/studio.md +99 -0
- package/skills/hallmark/references/themes/terminal.jpg +0 -0
- package/skills/hallmark/references/themes/terminal.md +96 -0
- package/skills/hallmark/references/themes/terrazzo.jpg +0 -0
- package/skills/hallmark/references/themes/terrazzo.md +106 -0
- package/skills/hallmark/references/themes/ultraviolet.jpg +0 -0
- package/skills/hallmark/references/themes/ultraviolet.md +106 -0
- package/skills/hallmark/references/themes/vellum.jpg +0 -0
- package/skills/hallmark/references/themes/vellum.md +105 -0
- package/skills/hallmark/references/themes/wayfind.jpg +0 -0
- package/skills/hallmark/references/themes/wayfind.md +105 -0
- package/skills/hallmark/references/themes/werkstatt.jpg +0 -0
- package/skills/hallmark/references/themes/werkstatt.md +105 -0
- package/skills/hallmark/scripts/capture.mjs +125 -0
- package/skills/hallmark/scripts/fixtures/exemplars/atmospheric.html +324 -0
- package/skills/hallmark/scripts/fixtures/exemplars/editorial.html +363 -0
- package/skills/hallmark/scripts/fixtures/exemplars/modern-minimal.html +527 -0
- package/skills/hallmark/scripts/fixtures/exemplars/playful.html +353 -0
- package/skills/hallmark/scripts/fixtures/eyebrow-fail/index.html +118 -0
- package/skills/hallmark/scripts/fixtures/eyebrow-pass/index.html +137 -0
- package/skills/hallmark/scripts/fixtures/kept/after.html +27 -0
- package/skills/hallmark/scripts/fixtures/kept/before.html +26 -0
- package/skills/hallmark/scripts/fixtures/slopped.html +145 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/Feature.vue +14 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/Hero.tsx +33 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/index.html +74 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/style.css +6 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/Hero.tsx +33 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/index.html +57 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/style.css +15 -0
- package/skills/hallmark/scripts/fixtures/waiver/index.html +54 -0
- package/skills/hallmark/scripts/imagegen.mjs +85 -0
- package/skills/hallmark/scripts/install-hook.mjs +70 -0
- package/skills/hallmark/scripts/install.mjs +141 -0
- package/skills/hallmark/scripts/lint-hook.mjs +49 -0
- package/skills/hallmark/scripts/photos.json +1 -0
- package/skills/hallmark/scripts/picture.mjs +71 -0
- package/skills/hallmark/scripts/refcheck.mjs +352 -0
- package/skills/hallmark/scripts/sloplint-render.mjs +1252 -0
- package/skills/hallmark/scripts/sloplint.mjs +4422 -0
- package/skills/hallmark/scripts/theme.mjs +650 -0
- package/skills/harness/SKILL.md +15 -8
- package/skills/i-have-adhd/SKILL.md +22 -11
- package/skills/no-ai-slop/SKILL.md +15 -1
- package/skills/plan-add/SKILL.md +33 -26
- package/skills/plan-status/SKILL.md +13 -7
- package/skills/plan-sync/SKILL.md +18 -12
- package/skills/pm-frameworks/SKILL.md +19 -10
- package/skills/pm-frameworks/SOURCE +7 -5
- package/skills/ponytail/SKILL.md +19 -14
- package/skills/product-analysis/SKILL.md +22 -18
- package/skills/product-flow/SKILL.md +14 -9
- package/skills/research/SKILL.md +75 -39
- package/skills/rl-env/SKILL.md +25 -13
- package/skills/rl-env/SOURCE +8 -6
- package/skills/tezgah-contract/SKILL.md +47 -42
- package/bin/tezgah-skill.py +0 -59
- /package/skills/ai-research/0-autoresearch-skill/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/litgpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/mamba/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/nanogpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/rwkv/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/torchtitan/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/02-tokenization/huggingface-tokenizers/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/02-tokenization/sentencepiece/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/axolotl/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/llama-factory/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/peft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/unsloth/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/nnsight/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/pyvene/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/saelens/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/05-data-processing/nemo-curator/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/05-data-processing/ray-data/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/grpo-rl-training/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/miles/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/openrlhf/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/simpo/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/slime/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/torchforge/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/trl-fine-tuning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/verl/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/constitutional-ai/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/llamaguard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/nemo-guardrails/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/prompt-guard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/accelerate/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/deepspeed/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/megatron-core/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/pytorch-fsdp2/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/pytorch-lightning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/ray-train/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/lambda-labs/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/modal/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/skypilot/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/awq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/bitsandbytes/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/flash-attention/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/gguf/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/gptq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/hqq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/ml-training-recipes/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/lm-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/nemo-evaluator/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/llama-cpp/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/sglang/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/tensorrt-llm/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/vllm/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/mlflow/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/swanlab/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/tensorboard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/weights-and-biases/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/a-evolve/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/autogpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/crewai/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/langchain/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/llamaindex/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/chroma/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/faiss/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/pinecone/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/qdrant/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/sentence-transformers/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/dspy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/guidance/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/instructor/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/outlines/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/17-observability/langsmith/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/17-observability/phoenix/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/audiocraft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/blip-2/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/clip/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/cosmos-policy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/llava/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/openpi/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/openvla-oft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/segment-anything/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/stable-diffusion/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/whisper/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/knowledge-distillation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/long-context/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/model-merging/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/model-pruning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/moe-training/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/speculative-decoding/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/academic-plotting/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/21-research-ideation/creative-thinking-for-research/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/compiler/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/research-manager/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/colour-independence/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/flexible-typography/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/information-density/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/preference-audit/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/responsive-review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/simplified-views/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/specify/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/assess-load/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/plain-language-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/simplify/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/design-research/skills/behavioural-analytics/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/design-research/skills/qual-quant-triangulation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/audit/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/design-flow/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/feedback-and-status/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/keyboard-review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/multi-modal-input/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/touch-target-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/voice-interaction/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-affordance/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-brand-consistency/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-color/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-composition/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-information-density/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-typography/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/pm-frameworks/intended-vs-implemented/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/pm-frameworks/opportunity-solution-tree/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-nemo-gym-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-openenv-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-ors-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-verifiers-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/rl-env-from-description/{SKILL.md → ENTRY.md} +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Imagery
|
|
2
|
+
|
|
3
|
+
What a page shows, read on every page build. A page looks made when it shows the real thing (the place, the food, the object, the hands at work, the product running), and generated when it shows a gradient box, a drawing of a loaf, or a heading with nothing under it.
|
|
4
|
+
|
|
5
|
+
## 1. What fills a page
|
|
6
|
+
|
|
7
|
+
In order, the first that fits:
|
|
8
|
+
|
|
9
|
+
1. **The user's own images and recordings**, asked for at Step 1. They win every slot.
|
|
10
|
+
2. **Screenshots of the real product,** taken by the build itself whenever the product can be reached: a URL, a running dev server, a project in the folder that starts with one command, a desktop or phone app on this machine (§ 4). A real screen beats any picture of one.
|
|
11
|
+
3. **The product built,** only when there is no product to capture yet (§ 4).
|
|
12
|
+
4. **Photographs from the library**, picked by script and treated in the theme's way (§ 2, § 5).
|
|
13
|
+
5. **Generated stills**, only when `TOGETHER_API_KEY` is set and the user asked for them (§ 6).
|
|
14
|
+
6. **Type at full scale**, when the prompt is about words.
|
|
15
|
+
|
|
16
|
+
Which prompts want which:
|
|
17
|
+
|
|
18
|
+
- **A place, a material, food or drink, an object, a craft, the outdoors, an event, people at work** (a bakery, a ski school, a gin, a weaving studio, a venue, a tailor, a farm): photographs lead. The hero's photograph is the largest thing on the first screen (full-bleed behind the head, or beside it at 60 to 75% of the screen tall). After it, two to four more carry the page, one of them large, each on its subject (an off-subject picture is cut, never kept to fill a count), with sections of the material alone between them (a menu or price list as rows, the hours and the place as a table, a statement, a form), so pictures take a quarter to a third of the page (§ 5, 83).
|
|
19
|
+
- **Software** (SaaS, an app, a developer tool): the product leads, and the hero visual is its interface. One or two photographs may set the scene (where it is used, the material it handles, hands at the work it serves) when each passes the deletion test: take it away and the page loses a fact. A city at night, a laptop on a desk or an office building fails it.
|
|
20
|
+
- **Words** (docs, an API, a CLI, a type specimen, a manifesto or a letter about an idea): type and code carry it; one photograph as a full-bleed band at most. A manifesto or a letter about something physical (repair, a river, a street) shows it like any other page.
|
|
21
|
+
|
|
22
|
+
A photograph never stands in for a fact: numbers, names and claims stay in type, and a picture of a person never stands in for a customer, a teammate or a testimonial (F9).
|
|
23
|
+
|
|
24
|
+
## 2. The library
|
|
25
|
+
|
|
26
|
+
Hallmark carries 755 verified photographs from Wikimedia Commons, each CC0, public domain, CC BY or CC BY-SA, tagged by subject, tone and temperature. Ask for each subject the page needs, concretely:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
node <skill-dir>/scripts/theme.mjs photos "apple orchard in autumn" "hands picking apples" --theme <slug> [--n 3] [--orient portrait|landscape|square] [--seed <draw seed>] [--log .hallmark/log.json]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
It ranks the library for each subject, steers away from the photos the last five builds used, and prints for each pick what it shows, its size, a ready `<img>` with its `srcset`, and its credit. Keep only picks that fit the sentence the section makes; re-ask in other words (the place, the material, the action) before settling for a near miss.
|
|
33
|
+
|
|
34
|
+
- **Never write an image URL from memory or take one from a stock site** (Unsplash, Pexels and Pixabay bar AI-driven selection in their terms). Use only what the script printed or the user supplied (76).
|
|
35
|
+
- **Credit every library photo:** one line in the footer marked `data-credits` (the word budget skips it), *Photographs:* then each printed credit, in the footer's small style. CC BY and CC BY-SA require it (76).
|
|
36
|
+
- **Size and crop in CSS:** keep the printed `srcset`, set `sizes` to the layout (`50vw` for a half, `100vw` full-bleed), and crop with the frame: `aspect-ratio` on the slot, `object-fit: cover`, the printed `object-position` (or your own) to keep the subject in frame.
|
|
37
|
+
- **For production,** `--save <dir>` downloads the picks into the project and prints local paths; drafts may link the Commons thumbnails.
|
|
38
|
+
- **The hero photograph is the LCP:** `fetchpriority="high"`, never `loading="lazy"`; every other image is lazy. A full-bleed or hero frame takes a photo 2400px or more on its long side; a smaller one goes soft at 1920.
|
|
39
|
+
- **A stand-in stays swappable:** in its slot (§ 3), with `data-alt` naming what the user's own picture should show, listed in the handoff.
|
|
40
|
+
- **No Node:** say so in the Picks block and use slots with the user's material only; never guess a file.
|
|
41
|
+
|
|
42
|
+
## 3. Slots
|
|
43
|
+
|
|
44
|
+
A slot is any picture the user will replace: `data-slot="<name>"` (`hero`, `demo-2`, `photo-1`), a `data-alt` saying what belongs there, and a real size (an `aspect-ratio` or a fixed height). The scaffold's `base.css` holds the slot CSS, and the scaffold prints the `hallmarkSlots` script: paste it once before `</body>` (F18). It swaps in the user's files without touching the layout (`hallmarkSlots({ hero: 'shop.jpg' })`) and drops a stand-in that fails to load.
|
|
45
|
+
|
|
46
|
+
- **A slot always shows something:** the user's image, a library photograph, or the product built at full fidelity. Its wash (`--color-paper-2` to `--color-paper-3`) is only the colour behind a photo while it loads; a slot showing nothing but its wash is an empty picture (81).
|
|
47
|
+
- **No visible placeholder labels:** no "your screenshot here", ratio notes or "sample" chips; `data-alt` and the handoff carry that.
|
|
48
|
+
- A child that must stay once the user's image lands (a credit, a plate number) carries `data-keep`; text over a slotted photograph (a Poster hero's head and scrim) sits in a sibling layer above the slot (`z-index: 2` or more; the slot's image takes 1), never inside it.
|
|
49
|
+
- Never more than four slots in a row, and never a set of frames for things the page has no pictures of (a team, a list of venues): set those in type (68).
|
|
50
|
+
|
|
51
|
+
## 4. The product: captured first, built only when it cannot be
|
|
52
|
+
|
|
53
|
+
**Capture it.** When the product exists, the page shows it, not a mock of it. Find it at Step 0: a URL in the prompt, a dev server already running, a `package.json` with a `dev` or `start` script, a built app on the machine, or a path the user names. Start it if it needs starting (install, run, wait for the port), put it in the state that tells the page's story (sample data, a real project open, the one screen that does the job), then:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
node <skill-dir>/scripts/capture.mjs http://localhost:3000 --routes /,/settings --sizes desktop,phone [--selector ".editor"] [--full] [--out images/screens]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
It writes 2x PNGs at 1440 x 900 and 390 x 844 (or one element with `--selector`) and prints an `<img>` for each. A desktop app built on Electron, WebView2 or CEF is started with a DevTools port and captured through it (`capture.mjs --cdp 9222 --target "<window title>" [--selector ...]`, clean and at its own pixel density); any other desktop app with the OS (`screencapture -l <window id>` or `-R x,y,w,h` on macOS), a phone app with its simulator (`xcrun simctl io booted screenshot`), a terminal tool by running it and setting its real output in a code block. Look at every capture before it ships: nothing personal on screen (names, emails, tokens, file paths), no error states unless they are the point, no debug overlays. Use several: the main screen in the hero, a detail cropped large lower down, a second screen, the phone view. Stamp `imagery: screenshots <n> (capture.mjs)` and credit nothing; they are the user's own.
|
|
60
|
+
|
|
61
|
+
**Frame it in the theme.** A capture sits in a `data-slot` with the theme's radius and the inset outline (§ 5), never inside a drawn browser bar, device frame, traffic lights or notch (47a, 47b). Crop to the part that sells (`object-position`, or `--selector`), keep text in it legible at its displayed size (scale 2, never upscaled), and never retouch what the product shows. Captures are product pictures: mark their slots `data-kind="product"`, so they do not count toward the photo balance (83).
|
|
62
|
+
|
|
63
|
+
**Build it only when it cannot be captured** (an idea, a product not built yet, nothing reachable): the hero visual is the product's main screen built in HTML and CSS: real controls, at least eight elements, the prompt's nouns, the theme's surfaces and type, at the size `layout.md` § 6 gives the visual. Sample values read as samples (`example.com`, *Example Kitchen*, round plausible amounts), never a figure a visitor could take as a claim (46a). It sits in a `data-slot` so the real screenshot replaces it, and the handoff says which screens to capture once the product runs. Never build a mock of a product the build could have captured (84).
|
|
64
|
+
|
|
65
|
+
A working control (a calculator on the user's prices, a booking form) is a fine section and a fine close, once a page; it is not the default hero.
|
|
66
|
+
|
|
67
|
+
## 5. Placing and treating photographs
|
|
68
|
+
|
|
69
|
+
- **Big or not at all.** A photograph spans six of twelve columns and stands 440px tall or more, or runs full-bleed; at thumbnail size it reads as clip art (a set of four or more may run smaller, each with its fact). In the hero it stands 60 to 75% of the screen tall beside the text, or fills the screen behind the head (the Poster posture). Delete the picture in your head: if the screen still says the same thing, the picture is too weak or too small.
|
|
70
|
+
- **One subject a frame, cropped tight,** its weight leaning toward the text. Vary the ratio (4:5 beside text, 16:9 or 21:9 across, 1:1 in a pair) and the size (8 and 4 columns; three equal frames only for a true set: three dishes, three rooms).
|
|
71
|
+
- **Balance.** Below the hero, photographs take at most a third of the page at 1440 (pictures inside the built product, marked `data-kind="product"`, do not count), up to 45% on a Photographic or Portfolio Grid shape; past that the page reads as a stock gallery and the theme never speaks (83). Never two photograph-led sections in a row: follow a picture with a section the theme's type, rules, colour or the product carry alone (the theme file's Range). A software page alternates the product with type-led sections and takes one or two photographs; a word-led page takes one at most. When in doubt, cut the weakest picture and set its fact large.
|
|
72
|
+
- **Text over a photograph** sits on its calmest part over a scrim from the theme's ink (a gradient from the text's edge, 35 to 65%), behind the text's side only, at 4.5:1 or better against the image under it; never centred white type over a busy frame. A theme that refuses gradients uses a solid ink plate.
|
|
73
|
+
- **Facts on the pictures:** captions are facts from the prompt in the label style, beside or under the picture (the dish and its price, the room and its hours, the date, the place). Never a credit line there, and never a caption that claims a stand-in as the user's own person, place or product.
|
|
74
|
+
- **The theme's treatment, on every photo.** The theme's `photo:` header sets it and the scaffold writes it into `base.css` as CSS on every image in a slot, the user's own included: `natural`, `warm`, `muted`, `mono`, `duotone` in two of the theme's tokens, or `tint` in one, with adjustments (`con=`, `sat=`, `exp=`). A duotone or tint flattens a pale subject (snow, a white wall) into an empty field: choose frames with tonal range and look at each through the treatment. A duotone or tint takes the slot's `::before`, so draw a keyline or scrim with `::after` or a sibling. A photo inside a built product takes the treatment only if the page adds it.
|
|
75
|
+
- **The frame is the theme's:** its radius, an inset outline of ink at 6 to 10% (`outline: 1px solid ...; outline-offset: -1px`), its texture if it has one. Never a border and a wide shadow together (F24).
|
|
76
|
+
|
|
77
|
+
## 6. Generated stills
|
|
78
|
+
|
|
79
|
+
Only when `TOGETHER_API_KEY` is set and the user asked for generated images, or for a subject the library cannot reach: `comp.md` § Generated stills. Never auto-fire it.
|
|
80
|
+
|
|
81
|
+
## 7. Never
|
|
82
|
+
|
|
83
|
+
- **A drawn illustration** (80): an SVG or CSS figure of an object, plant, animal, person, product, building, landscape or scene past icon size. SVG is for icons from one set, the user's logo, charts and diagrams of real data or a real system with their labels, and plain geometry (a rule, a grid, a dot pattern as texture).
|
|
84
|
+
- **An empty picture** (81): a slot showing only its wash, or a gradient field where a picture should be.
|
|
85
|
+
- **A counting device** (82): a row or grid of identical marks standing for a quantity, one for each bottle or day. Set the number.
|
|
86
|
+
- **Illustration packs and characters:** unDraw, Humaaans, Storyset, Lottie mascots, 3D blobs, isometric scenes.
|
|
87
|
+
- Stock faces as proof (F9); a logo wall without the user's logos (46a); mesh blobs, orbs or aurora behind text (29); an image that zooms or rotates on hover (11); text baked into a picture; a photo of a screen showing someone else's interface.
|
|
88
|
+
|
|
89
|
+
## 8. Icons, logos, video, 3D
|
|
90
|
+
|
|
91
|
+
- **Icons:** one library a page (Lucide by default; Phosphor or Heroicons in a project that uses them), one stroke width and one style, at 16, 20, 24 or 32px on the set's grid (a 24 viewBox at 24px, never scaled to 19), `currentColor`, aligned to the first line of multi-line text, never in a coloured tile (3, F5), never an emoji (30a). A button with an icon pads the icon side by the vertical padding.
|
|
92
|
+
- **Logos:** the user's own, monochrome, one treatment a row, 32 to 48px tall (20 to 28px in a footer); Simple Icons (`https://cdn.simpleicons.org/<slug>/<hex>`) only for a platform or brand the page names. Never an invented wall (46a).
|
|
93
|
+
- **Video:** the user's recording or footage: `autoplay muted loop playsinline` with a `poster` (28a, 28b), AV1 or VP9 WebM then H.264 MP4, under 2 MB for ten seconds, a visible pause control on any loop past five seconds, captions when it speaks.
|
|
94
|
+
- **3D and WebGL** only when the product is 3D and the visitor handles it, with a still fallback.
|
|
95
|
+
- **Motion libraries:** CSS and `@property` first; Motion for orchestrated entrances in React; GSAP only when a timeline is the product.
|
|
96
|
+
|
|
97
|
+
## 9. Stamp, log and handoff
|
|
98
|
+
|
|
99
|
+
Stamp `imagery: photographs, library 5, mono · product sample in hero and demo-2` (or `imagery: none`); the log's `imagery` field carries the same words and `photos` the ids used, so the next build's picks rotate. The handoff lists every stand-in and built sample with its slot, its size and what the user's own picture should show.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Interaction and states
|
|
2
|
+
|
|
3
|
+
Loaded for forms and stateful controls. `craft.md` § 9 and gate 39a own the input rules and § 2 owns contrast; this file owns the eight-state table, the field recipe and the overlay patterns.
|
|
4
|
+
|
|
5
|
+
## The eight states
|
|
6
|
+
|
|
7
|
+
| State | When | Treatment |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| Default | At rest | Base styling |
|
|
10
|
+
| Hover | Pointer over, inside `@media (hover: hover)` | One signal: a colour step, a 1px lift or a border step (11) |
|
|
11
|
+
| Focus | Keyboard or programmatic focus | The ring, at once (15, 26a) |
|
|
12
|
+
| Active | During press | A 1px drop or one step darker |
|
|
13
|
+
| Disabled | Not interactive | Three channels together: `opacity: 0.55`, `cursor: not-allowed` and the native `disabled` attribute, or `aria-disabled="true"` where the control must stay focusable (39a) |
|
|
14
|
+
| Loading | Processing | Inline progress; the label stays readable and the width does not jump |
|
|
15
|
+
| Error | Failed | `--color-error` on the border, the message, `aria-invalid`; never colour alone |
|
|
16
|
+
| Success | Completed | The result itself, from the server's answer; an icon from the page's set at most; no toast (16); no success state where no request was made (70) |
|
|
17
|
+
|
|
18
|
+
An element missing one of these is not finished.
|
|
19
|
+
|
|
20
|
+
## Focus rings
|
|
21
|
+
|
|
22
|
+
The scaffold's ring is the page's: `outline: 2px solid var(--color-focus); outline-offset: 2px`, inset on inputs (a negative offset) so it never collides with a neighbouring field. 3:1 against both the element and the page. `:focus-visible`, so it shows for the keyboard; never `outline: none` without a replacement.
|
|
23
|
+
|
|
24
|
+
## Hit targets
|
|
25
|
+
|
|
26
|
+
44 x 44 CSS px for anything a finger can reach. Expand a small control without changing its look:
|
|
27
|
+
|
|
28
|
+
```css
|
|
29
|
+
.icon-btn { position: relative; }
|
|
30
|
+
.icon-btn::before { content: ""; position: absolute; inset: -12px; }
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Forms
|
|
34
|
+
|
|
35
|
+
- A visible label above every field; never a placeholder as the label.
|
|
36
|
+
- A placeholder shows a format (`01 Jan 2026`), never an instruction.
|
|
37
|
+
- Validate on blur once the field has been touched, then on every input.
|
|
38
|
+
- An error says what broke, why, and what to do, in one sentence where it can; tie it to the field with `aria-describedby` and set `aria-invalid="true"`.
|
|
39
|
+
- Required fields carry `aria-required` and a visible word, never colour alone.
|
|
40
|
+
- Disable submit only while a request is in flight, never at rest.
|
|
41
|
+
|
|
42
|
+
## The field
|
|
43
|
+
|
|
44
|
+
Every text input, textarea, select and combobox.
|
|
45
|
+
|
|
46
|
+
**The border never changes width.** State moves to `background-color`, `border-color`, `outline` or `box-shadow`, never `border-width`; a transparent outline is reserved at rest so the ring appears without a shift.
|
|
47
|
+
|
|
48
|
+
```css
|
|
49
|
+
.input { border: 1px solid var(--color-muted); outline: 2px solid transparent; outline-offset: -3px; }
|
|
50
|
+
.input:focus-visible { outline-color: var(--color-focus); }
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
| State | Treatment |
|
|
54
|
+
| --- | --- |
|
|
55
|
+
| Default | 1px `--color-muted` border (a field's edge needs 3:1, which a rule never has), paper background, placeholder in `--color-muted` |
|
|
56
|
+
| Hover | `--color-paper-2` background, border unchanged |
|
|
57
|
+
| Focus | The ring; the border may deepen to `--color-ink-2` at the same width |
|
|
58
|
+
| Filled | As default; the value carries the state |
|
|
59
|
+
| Disabled | The three channels; placeholder dims one step |
|
|
60
|
+
| Error | `--color-error` border, the error text in the helper line, an error icon from the page's set in the right-edge slot |
|
|
61
|
+
| Success | Only after a real check returned; a check icon from the page's set; clears when the user edits |
|
|
62
|
+
| Loading | A small spinner in the right-edge slot; the field stays editable, submit waits |
|
|
63
|
+
|
|
64
|
+
- **Height:** inputs match the height of the button beside them (44 to 52px on a marketing page, 39); vertical padding is `(height - line-height) / 2`.
|
|
65
|
+
- **Right-edge slot:** reserve about 24px for a clear button, an error glyph or a spinner, so nothing reflows when one appears.
|
|
66
|
+
- **Label** 4 to 8px above; **helper** about 4px below at the label's size, quieter, in a line that reserves `min-height: 1lh` (F14); the error replaces the helper in that line, never adds a second.
|
|
67
|
+
- Never transition `border-width`, `padding` or `height`; never animate the ring.
|
|
68
|
+
|
|
69
|
+
**Controls.** Textarea: `resize: vertical`, `min-height: 6rem`. Select: native, with a custom chevron on the wrapper; a fully custom select only when it keeps native keyboard and screen-reader behaviour. Checkbox and radio: native, `accent-color` for the cheap correct version, styled by state in CSS, never toggled by script. A switch is a checkbox with the same contract. Range: the thumb takes focus and a 44px hit target. File input: a styled `<label>` is the surface. Combobox: the listbox sits below without pushing content, `aria-expanded` mirrors it, arrows cycle, Enter selects, Escape closes.
|
|
70
|
+
|
|
71
|
+
## Modals and overlays
|
|
72
|
+
|
|
73
|
+
- A native `<dialog>` opened with `showModal()`: focus trap, Escape and `::backdrop` for free.
|
|
74
|
+
- Pin it once custom positioning is added, or it can snap to a corner: `position: fixed; inset: 0; margin: auto; height: fit-content; max-height: min(80dvh, 40rem)`. A non-dialog overlay centres with `display: grid; place-items: center` on a fixed container.
|
|
75
|
+
- `inert` on the page behind; close on Escape, backdrop click and a visible close control; first focus to the first interactive element.
|
|
76
|
+
|
|
77
|
+
## Popovers, menus, tooltips
|
|
78
|
+
|
|
79
|
+
The Popover API for light-dismiss, stacking and Escape; CSS anchor positioning where available, `position: fixed` with `getBoundingClientRect()` otherwise; flip near the viewport edge; never inside an `overflow: hidden` ancestor that clips it.
|
|
80
|
+
|
|
81
|
+
## Undo over confirm
|
|
82
|
+
|
|
83
|
+
Reversible actions run at once and offer Undo for 5 to 10 seconds. Irreversible ones (delete an account, drop a table) keep the confirm, and the user types the name of the thing being destroyed.
|
|
84
|
+
|
|
85
|
+
## Loading and empty
|
|
86
|
+
|
|
87
|
+
- A skeleton where the content's shape is known (lists, cards, tables); a spinner only in a button, replacing the label.
|
|
88
|
+
- An empty state is one line naming what is empty, one on why it matters, and one action (`craft.md` § 6). Never a bare *No results*.
|
|
89
|
+
- A disabled control near the user's attention says why it is disabled.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Layout
|
|
2
|
+
|
|
3
|
+
The canvas, the sizes, the sections and the hero for every theme build; a custom run designs its own (`direction.md`). A page looks made when every screen holds one idea at the right size. Numbers are at 1440 x 900 unless a line says otherwise.
|
|
4
|
+
|
|
5
|
+
## 1. The canvas
|
|
6
|
+
|
|
7
|
+
- **One container, centred and capped:** `.container` from the scaffold, `--container` 1440px with `--gutter` 64px, so content is 1312px wide at 1440 and stays 1312px at 1920 while the gutters grow (44d).
|
|
8
|
+
- **Twelve columns inside it**, `--gap-columns` 32px apart: one column is 80px, four 416px, six 640px, eight 864px. Every section places its parts on these columns, so left edges line up from the nav to the footer.
|
|
9
|
+
- **Every section:** the outer element owns the background and the block padding, the inner `.container` the width and only `padding-inline` (a `padding` shorthand there silently zeroes the rhythm). A full-bleed band changes the background and keeps the container.
|
|
10
|
+
|
|
11
|
+
## 2. Sizes
|
|
12
|
+
|
|
13
|
+
The scaffold writes these tokens and `base.css` sets them on the elements. A theme changes faces, weights, tracking and case; the steps hold, except where a theme sets its display a step larger.
|
|
14
|
+
|
|
15
|
+
| Role | Token | At 1440 | Element |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| Hero head | `--text-display` | 84px | `h1` |
|
|
18
|
+
| Long hero head, statement | `--text-display-s` | 60px | `.display-s` |
|
|
19
|
+
| Section head | `--text-section` | 52px | `h2` |
|
|
20
|
+
| Item title | `--text-title` | 25px | `h3` |
|
|
21
|
+
| Lead (the one line under a head) | `--text-lead` | 21px | `.lead` |
|
|
22
|
+
| Body | `--text-md` | 16px | `p` |
|
|
23
|
+
| Label, caption, meta | `--text-sm` | 14px | `small`, `figcaption`, `th` |
|
|
24
|
+
|
|
25
|
+
- A section head under 40px at 1440 is the most common reason a page looks unfinished (78). The hero head is about one and a half times the section head, the section head about twice the item title.
|
|
26
|
+
- A head and its line sit 16 to 24px apart (`--space-md` to `--space-lg`); the head block and the section's content 48 to 64px (`--space-2xl`), 40px in a tight composition.
|
|
27
|
+
- Grid items sit `--gap-columns` apart across and 48 to 64px apart down; a card or well takes 32 to 40px of padding.
|
|
28
|
+
|
|
29
|
+
## 3. Rhythm between sections
|
|
30
|
+
|
|
31
|
+
- Sections part by the three scaffold steps, `--section-gap-s` 120px, `--section-gap` 144px and `--section-gap-l` 176px, mixed (59). A band (a change of paper) takes `--section-gap-s` of padding top and bottom.
|
|
32
|
+
- Space is earned by mass: a 144px gap frames a 700px section and is a hole under a 200px one. An empty-looking page wants a bigger head, a bigger visual or a fuller section, not a smaller gap.
|
|
33
|
+
- Six to nine sections, hero and footer included; five on a thin prompt, never fewer. Height follows content (often 5,000 to 8,000px with pictures and a full prompt, 3,000 to 4,000px on a thin one); never pad toward a height.
|
|
34
|
+
|
|
35
|
+
## 4. A section
|
|
36
|
+
|
|
37
|
+
A section is one piece of the page's content shown at its best: the menu, the lineup, the latest issue, the product at work, the room, the price. Decide the content first, then the composition that shows it best. Most sections carry a **head block** above or beside a **body** from § 5; a section whose content names itself (a menu, a timetable, a track list, a list of issues, the product's own screen) may go without one, or carry its head inside the content (the menu's own title, the date over the lineup). Never more than two neighbours with the same skeleton: a page of head-then-block, head-then-block reads as a template however good each block is. What real sites in each category are built around is in `anatomy.md`.
|
|
38
|
+
|
|
39
|
+
- **The head block:** an `h2` of six words or fewer at `--text-section` (a staged shape may head each stage with its one-word name), at most one line at `--text-lead` beneath it, on columns 1 to 6 or 1 to 7, or split (head on 1 to 5, the line on 7 to 12, baselines aligned). Centred only over a symmetric body, and never more centred head blocks than left-aligned ones.
|
|
40
|
+
- **The body fills the width:** its widest row reaches ten of the twelve columns (77). A narrow text block with the right half empty is the sparse page's signature; pair it with a visual, split it, or set it as a statement.
|
|
41
|
+
- **The body has mass:** a visual 360px tall or more; a set of three or four items across the width; a list or table of three or more rows across ten columns; a working control on the prompt's own facts; or a statement at `--text-section` or larger. A head and a paragraph are a head block, never a section.
|
|
42
|
+
- **A split balances:** text and visual centre on each other within 60px, and neither column leaves more than a fifth of the row empty.
|
|
43
|
+
- **Content sets the height:** usually 520 to 900px; under 360px only for a band (a call to action, a logo row, a statement), at most twice a page.
|
|
44
|
+
|
|
45
|
+
## 5. Compositions
|
|
46
|
+
|
|
47
|
+
Layouts, not components: build each in the theme's material and the prompt's content. A page uses three to six different ones and never the same one twice in a row, except in a one-composition shape (Split Studio, Feature Stack, Catalogue), where neighbours change ratio and, where the shape allows, side.
|
|
48
|
+
|
|
49
|
+
1. **Split.** A text block (head, line, two to four short facts or one action) beside a visual on columns 6 to 12 or 7 to 12, 440px tall or more at 4:3 to 4:5 (portrait for a product photograph). Swap the side at most once a page; change the ratio (5 and 7, 4 and 8, 6 and 6) between two splits.
|
|
50
|
+
2. **Showcase.** The head block, then one visual across all twelve columns at 16:9 to 21:9, 560px tall or more; beneath it at most two smaller visuals at 8 and 4 or 7 and 5, never three equal frames.
|
|
51
|
+
3. **Grid.** Three or four items across (or two by two): plans, products, places, rooms, dishes, each with its photograph, a large figure or a title big enough to carry the cell, then one line; equal heights, aligned tops, 240px or taller. Never empty frames (68), stock faces for people (F9) or icon tiles over headings (3).
|
|
52
|
+
4. **Bento.** Four to six tiles on six or twelve columns in mixed spans (8 and 4 over 4, 4 and 4; or 7 and 5 over 5 and 7), rows 280 to 360px, two tiles at least with a visual, one clearly the lead.
|
|
53
|
+
5. **Rows.** Three to five full-width rows parted by hairlines, 72 to 120px each: a title at `--text-title` on columns 1 to 5, its line or figure on 6 to 12. A head block may sit on 1 to 4 beside rows on 5 to 12 (an FAQ, an index, a timeline, a price list).
|
|
54
|
+
6. **Table.** Full width, four or five rows of 56 to 72px, numerals tabular, the column that names the row one step heavier.
|
|
55
|
+
7. **Figures.** Three or four real numbers at `--text-display-s`, labels beneath, across the twelve columns, parted by vertical hairlines. Only figures the user gave (46a).
|
|
56
|
+
8. **Steps.** Three or four stages across, each a numeral (a real `<ol>`, never a `01` label over a head, 54), a title and a line, with a visual beneath or beside where the material has one; or a vertical run with a visual per stage on a fixed side.
|
|
57
|
+
9. **Statement.** One sentence filling eight to ten columns in two or three lines, from `--text-section` up to `--text-display` (a condensed or light face takes the larger step), with its attribution or one action; once a page.
|
|
58
|
+
10. **Band.** A change of paper (`--color-paper-2`, the ink, or a field of the accent where the posture allows) edge to edge, the container inside, holding whatever the page's job wants there: the next free table times, the buy box, the store buttons beside a screen, the next date and the address. Never an email field by default (85).
|
|
59
|
+
11. **Form.** The fields on six or seven columns beside the head block and two to four facts, inputs 48 to 56px tall, one primary action.
|
|
60
|
+
12. **Rail.** A horizontal run past the container's edge (dates, issues, products, rooms, episodes), five or more items with the next one cut by the edge, scrollable by touch and keyboard, snap points, no arrows needed past two.
|
|
61
|
+
13. **Pinned.** One visual held sticky on six or seven columns while three or four short panels scroll past it on the other side, each changing what the visual shows (a state, a crop, a step); static under 60rem.
|
|
62
|
+
14. **Switcher.** One area with two to five states behind a segmented control: the menu by lunch and dinner, the plans by month and year, the app on phone and watch, the schedule by day. Every state real; the first visible without script.
|
|
63
|
+
15. **Index.** A dense, scannable list of the prompt's own items with their facts in columns (issues with dates and topics, projects with year and client, episodes with length, lots with estimates), optionally filtered; 6 to 20 rows, the lead row larger.
|
|
64
|
+
16. **Schedule.** Time against place or day: a two-day festival as two columns of acts and times, a week of classes, opening hours as a strip; the current or next slot marked.
|
|
65
|
+
17. **Offer.** The thing for sale with what a buyer needs at the moment of buying: the photograph or screen, the options (size, scent, plan), the price, the action and one line of delivery or terms. On a buy page it is often the hero.
|
|
66
|
+
|
|
67
|
+
Under 60rem every composition stacks in reading order: the head block, then the body; a split's visual after its text; a grid two across, then one under 40rem; a bento's lead tile first; a rail stays a rail; a pinned pair unpins; a schedule turns into one column per day. Visuals keep their aspect ratio and lose their minimum height; nothing scrolls sideways except a rail or a table that says so (`responsive.md`).
|
|
68
|
+
|
|
69
|
+
## 6. The hero
|
|
70
|
+
|
|
71
|
+
The first screen at 1440 x 900 and 1920 x 1080, and only the first screen (44c). Pick a posture at Step 2 from the job (`anatomy.md`), stamp it, and vary it run to run; text beside a picture (Settled, Stage) is the most common generated hero, so take it only when the picture is the strongest thing the prompt has.
|
|
72
|
+
|
|
73
|
+
| Posture | Height | Content |
|
|
74
|
+
| --- | --- | --- |
|
|
75
|
+
| **Settled** | fills the screen under the nav | centred in the screen; the text on six columns, the visual on the other six |
|
|
76
|
+
| **Stage** | fills the screen under the nav | the text on five columns, a visual on seven at 60 to 75% of the screen tall (reversed when a poster-size head needs the width); it may bleed off the outer edge |
|
|
77
|
+
| **Banner** | 50 to 60% of the screen | the first section shows above the fold; for references, docs, utilities |
|
|
78
|
+
| **Ledge** | fills the screen | a tall field above, the head resting at the base; at 1920 the head grows to its cap first |
|
|
79
|
+
| **Corridor** | fills the screen | one centred column of 44ch or less, the head larger than usual |
|
|
80
|
+
| **Poster** | 92 to 100dvh | a full-bleed photograph or canvas, the content on its calmest part with room around it, low and left or centred, never squeezed into a corner |
|
|
81
|
+
| **Counter** | fills the screen under the nav | the action is the visual: the subscribe field with the latest issue, the booking times, the buy box with its options, the download with the screen, set large beside or under a shorter head |
|
|
82
|
+
| **Index** | fills the screen under the nav | the content is the visual: the lineup, the menu, the list of issues or projects, set as the page's lead with the head small above it; for pages whose list is the reason to come |
|
|
83
|
+
|
|
84
|
+
- **Centred in its screen.** For Settled, Stage, Banner and Corridor the space under the content is 1.0 to 1.5 times the space above it (44a), and the lowest content sits within 160px of the fold (79). Spend spare height on a larger visual or larger type, never on copy.
|
|
85
|
+
- **The visual is big:** six or seven columns wide and 60% of the screen tall or more (520px at 1440 x 900), or a portrait object (a cover, a phone, a bottle) at 75% tall on four or five columns; its centre within 60px of the text block's. The hero grid is two tracks (`6fr 5fr`, `5fr 7fr`) with its own gap of `--space-2xl` to `--space-3xl`, so text and visual stand 48 to 120px apart; spans on the twelve columns leave an empty column between them. Under 60rem the gap becomes a row gap of `--space-xl`. What it shows is `imagery.md` § 1; a working form is a section or a close, not the default hero.
|
|
86
|
+
- **No visual:** the head grows to `--text-display` at its cap across eight to twelve columns, or the posture is Banner and the first section starts by 640px.
|
|
87
|
+
- **The text:** the head (seven words or fewer), one sentence at `--text-lead`, one or two actions (58). Under 60rem every posture collapses to its content's height (Poster may stay full-bleed).
|
|
88
|
+
|
|
89
|
+
## 7. The page
|
|
90
|
+
|
|
91
|
+
- **The job decides the anatomy** (`anatomy.md`): where the action lives (in the hero, sticky, repeated beside the content, at the close), and which category-native sections the page is built around. A newsletter puts the subscribe field in the hero and shows the issues; a restaurant shows the menu and the booking; a band shows the record and the dates. The theme dresses that anatomy; it never replaces it.
|
|
92
|
+
- **Order follows the argument the shape makes** (`macrostructures.md`), never hero, three features, a call to action and a footer (8). Lead with the strongest real thing after the hero; put each fact where it does work.
|
|
93
|
+
- **Not every page has steps or figures.** Steps only for a process the visitor really goes through (booking, joining, getting a festival ticket); a figure row only for three numbers the prompt states outright, never one derived from it (365 mornings from "every day"). Together they appear on most generated pages; on a made page they are a choice.
|
|
94
|
+
- **Variety:** never the same composition in neighbouring sections (a one-composition shape aside); mirror a split once at most, never a zigzag; one full-width visual at least on a product page; one or two bands. Read the log's `sections`: a Statement, Steps, Figures and a closing Band are the easiest reaches, so when the last build used one, make that beat another way.
|
|
95
|
+
- **Balance:** photographs take a quarter to a third of the page below the hero (83), and never lead two sections in a row; the sections between are built from the theme's material (its Range: type, figures, rules, the product, a table, a form). `imagery.md` § 5 has the counts.
|
|
96
|
+
- **Pace:** a dense section (a grid, a table, a bento, an index) is followed by a quiet one (a statement, a showcase); the page ends on a real close.
|
|
97
|
+
- **The close is the job, not a form.** End on what the visitor came to do, in the form the job takes (the next times to book, the buy box, the store buttons, the next date and the address, the latest issue), or simply on the last strong section and the footer. An email field closes a page only when the job is one where a mailing list is native (subscribe, join, attend, listen, visit) and the anatomy calls for it, or the user asked for one (85); a page whose action already sits in the hero or a sticky bar need not repeat it at the foot.
|
|
98
|
+
- **The footer closes the page:** 200 to 400px: the wordmark or one closing line, the page's real links, the legal line. A single line under a hairline is a colophon, right for a letter, a document or a manifesto.
|
|
99
|
+
- **The nav is one line, 56 to 80px tall**, sized to the page's real destinations. Vary it against the log: edge-aligned (wordmark and one or two links or an action at opposite edges), a floating pill, a masthead (a large centred wordmark over a rule), a slab (a heavy full-width bar), a search-led bar with a visible command pill, a banner over a bar that retracts on scroll, a three-part bar only for four or more real destinations (42). A side rail only where a sticky object earns it.
|
|
100
|
+
- **Footers:** a mast (the wordmark large over the links), a statement (one closing sentence large, the links beneath), a colophon block (credits and address as one paragraph), newsletter-first (the form leads; only for a subscribe page), a letter close (a sign-off and a date), index columns only for a hub with a real sitemap.
|
|
101
|
+
|
|
102
|
+
## 8. Before shipping
|
|
103
|
+
|
|
104
|
+
Scroll the page at 1440 x 900 one screen at a time: is something on each screen big enough to be its reason? A screen holding only a heading and a line wants a bigger visual, the line set as a statement, or two sections merged. Then squint: with the words blurred, each section still has a shape and the page a rhythm of heavy and light. The render tier measures width (77), head scale (78), the hero's foot (79) and the photo share (83); the eye judges the rest.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## 01 · Bento Grid
|
|
2
|
+
|
|
3
|
+
Modular blocks of varying sizes laid out as an irregular grid. Each block is a feature, a figure the user gave, an image or a supplied quote. Rhythm comes from size variation, not card uniformity.
|
|
4
|
+
|
|
5
|
+
- **Heading:** a display head over the grid's first row; the hero is one screen and the grid starts inside it or right under it (44c), never a tall empty band.
|
|
6
|
+
- **Body:** asymmetric grid, six to nine blocks of mixed spans (1×1, 2×1, 1×2, 2×2); image-bearing tracks `minmax(0, 1fr)` (50).
|
|
7
|
+
- **Divider:** one gap, `--gap-columns`; no rules; the grid is the rhythm.
|
|
8
|
+
- **Button:** an outlined chip in the hero; inside a tile, a typographic link carrying a verb.
|
|
9
|
+
- **Image:** tightly cropped inside individual blocks; never full-bleed.
|
|
10
|
+
- **Reveal:** none, or one one-shot fade as the grid enters.
|
|
11
|
+
|
|
12
|
+
Reach for it when the prompt is "many small things to show": a feature page, a SaaS landing, anywhere visitors have several equally valid entry points. A block holding a figure or a quote exists only when the user supplied it (46a).
|
|
13
|
+
|
|
14
|
+
Avoid when the message is one hero idea. Bento spreads attention; a one-idea page wants Marquee or Stat-Led.
|
|
15
|
+
|
|
16
|
+
Compositions: Bento and Grid (`layout.md` § 5).
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (imitate the specificity, not the wording):
|
|
19
|
+
> *"Distributed tracing that explains itself."* Names the category and the promise in five words (Tracejam).
|
|
20
|
+
> *"An API for sending mail from code."* Names the product class and the reader.
|
|
21
|
+
> *"Everything a small kitchen needs to sell online."* Names the scale and the job.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
## 02 · Long Document
|
|
2
|
+
|
|
3
|
+
Reads like a memo, a letter or a journal entry. No marketing structure. Continuous prose with inline section heads. The page is literature about the product.
|
|
4
|
+
|
|
5
|
+
- **Heading:** inline with the body; section heads emerge from the paragraph flow as short bold phrases.
|
|
6
|
+
- **Body:** single column, line-height 1.65 or more, measure 60 to 65ch.
|
|
7
|
+
- **Divider:** negative space; the gap is the divider; at most one centred ornament for emphasis.
|
|
8
|
+
- **Button:** a typographic link inside a paragraph, carrying a verb, never a separate block. It is the fold's one visible action (44b).
|
|
9
|
+
- **Image:** inline, sized to the measure; never full-bleed.
|
|
10
|
+
- **Reveal:** none. The page is simply there.
|
|
11
|
+
|
|
12
|
+
Reach for it for case studies, founder posts, mission pages, products whose sale is philosophical. The prompt says "tell a story", not "list features".
|
|
13
|
+
|
|
14
|
+
Avoid when there is one decisive action to take. Long Document hides its actions inside sentences, which is wrong for a transactional page.
|
|
15
|
+
|
|
16
|
+
Heading: the inline lead-in of [`../craft.md`](../craft.md) § 7, item 3.
|
|
17
|
+
|
|
18
|
+
```html
|
|
19
|
+
<article class="prose">
|
|
20
|
+
<p class="lede">…</p>
|
|
21
|
+
<h2 class="inline">A small heading.</h2>
|
|
22
|
+
<p>… <a href="#prices">See the prices</a> …</p>
|
|
23
|
+
</article>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```css
|
|
27
|
+
.prose { max-width: 65ch; }
|
|
28
|
+
.prose h2.inline { display: inline; font: inherit; font-weight: 700; letter-spacing: normal; }
|
|
29
|
+
.prose h2.inline + p { display: inline; }
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Sample opening lines** (imitate the specificity, not the wording):
|
|
33
|
+
> *"Saturday, 6:14 a.m. The dough went in at midnight."* Opens on a time-stamp; the brand introduces itself as a moment in the day (Maple Street Bread).
|
|
34
|
+
> *"A monthly publication for people who still read to the end."* Names the cadence and the reader.
|
|
35
|
+
> *"We build one thing, and we have built it for nine years."* A verb, a count, no claim.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## 03 · Marquee Hero
|
|
2
|
+
|
|
3
|
+
The hero is the page above the fold. A single statement or visual fills the viewport. Below the fold the page becomes something else (a list, a grid, prose).
|
|
4
|
+
|
|
5
|
+
- **Heading:** display fills the fold at `clamp(4rem, 10vw, 9rem)` (`craft.md` § 1), hugging the container's edges; an uppercase head that can wrap keeps `line-height` 1.0 or more (55a).
|
|
6
|
+
- **Body:** below the fold, a list of work or one content block; the hero does not continue.
|
|
7
|
+
- **Divider:** a thick rule between hero and below-fold, or a hard change of paper.
|
|
8
|
+
- **Button:** one action in the fold under the statement, with the one sentence (Floor 12, 13): a typographic link or a single button. The statement owns the screen; the action and the sentence sit small at its foot.
|
|
9
|
+
- **Image:** none in the fold (typography is the visual), or a single full-bleed photograph as the fold's background.
|
|
10
|
+
- **Reveal:** the fold is static; below-fold may sweep in horizontally.
|
|
11
|
+
|
|
12
|
+
Reach for it when the brand or the person is the message: designer and director portfolios, indie products with one declarative voice, any "this is who we are" page.
|
|
13
|
+
|
|
14
|
+
Avoid for products whose value needs explaining in seconds. Marquee makes the visitor scroll before they understand.
|
|
15
|
+
|
|
16
|
+
Compositions: a Poster or Corridor hero (`layout.md` § 6); below it, Rows, Grid or a Showcase (§ 5).
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (imitate the specificity, not the wording):
|
|
19
|
+
> *"Type, set with care."* Three words, refusal of the verb, treats type as material.
|
|
20
|
+
> *"A studio for what comes next."* Names the practice without explaining it.
|
|
21
|
+
> *"Print discipline, on screen."* Two phrases, a promise about method.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## 04 · Stat-Led
|
|
2
|
+
|
|
3
|
+
The hero is a figure the user gave, with the line that says what it means. Everything that follows supports or qualifies it. Data is the narrative.
|
|
4
|
+
|
|
5
|
+
- **Heading:** a large numeric display at graphic scale (`craft.md` § 7, tabular figures) paired with a worded headline. The figure is the biggest element and never the hero's only words: say what it means beside or beneath it as a real headline, not a small label. Read them together: *"Four seconds. From the alert link to the slow span."*
|
|
6
|
+
- **Body:** sections each anchored by a supporting figure or chart.
|
|
7
|
+
- **Divider:** hairline rules between figure blocks; `tabular-nums` everywhere.
|
|
8
|
+
- **Button:** an outlined chip beneath the qualifier, labelled with a verb ("Read the report").
|
|
9
|
+
- **Image:** charts and data-viz per [`../data-viz.md`](../data-viz.md); product photographs only in the slots the user asked for.
|
|
10
|
+
- **Reveal:** number-tick on the hero figure, from 0 to the target over `--dur-long`, legal only because the figure is real; the markup holds the final figure, so it reads with scripting off and under reduced motion (62).
|
|
11
|
+
|
|
12
|
+
Reach for it when the prompt says "we have proof in numbers": enterprise and B2B, fundraising, climate and impact pages.
|
|
13
|
+
|
|
14
|
+
Avoid when the user has not given a number. Every figure on this page is the user's, with its unit and its source (46a); a bare figure with no worded line fails 46b. A fake big number is worse than no number.
|
|
15
|
+
|
|
16
|
+
Compositions: Figures for the supporting row, Rows for the qualifiers (`layout.md` § 5).
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (the number is the user's; imitate how the words complete it):
|
|
19
|
+
> *"Four seconds. From the alert link to the slow span."* The figure, then what it bought (Tracejam).
|
|
20
|
+
> *"[the user's count] posts. New CSS you could use today."* A count grounds the page in real volume.
|
|
21
|
+
> *"[the user's rate] faster, so the team can decide late."* A rate, then the behaviour it allows.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## 05 · Workbench
|
|
2
|
+
|
|
3
|
+
Real product captures are the primary content. The page is a guided tour of the app in use, with short captions in place of marketing copy.
|
|
4
|
+
|
|
5
|
+
- **Heading:** plain and functional at the section size; the captures do the talking.
|
|
6
|
+
- **Body:** a sequence of capture blocks, each a `<figure>` with a `<figcaption>` that states a fact and one inline annotation.
|
|
7
|
+
- **Divider:** the figure is the divider; sections separate by gap and figure.
|
|
8
|
+
- **Button:** the hero's one action (44b), then, where the theme allows a sticky element, a bottom bar carrying it after the third capture, labelled with the verb ("Start a project").
|
|
9
|
+
- **Image:** the real capture, unframed, in a `<figure>`; until the user supplies it, the product built in a `data-slot` (`imagery.md` § 4). No browser or device chrome (47a, 47b).
|
|
10
|
+
- **Reveal:** one type-unmask, on the first caption; the captures load instantly and the rest is simply there.
|
|
11
|
+
|
|
12
|
+
Reach for it for SaaS, developer tools, editor extensions, anywhere seeing the product in use is the sale.
|
|
13
|
+
|
|
14
|
+
Avoid when the product is conceptual or services-led. Workbench needs a UI to show.
|
|
15
|
+
|
|
16
|
+
Compositions: Showcase and Split for the captures, a Band for the close (`layout.md` § 5); the optional bar is a sticky bottom bar with one action at `--z-sticky`.
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (imitate the specificity; the page walks the visitor through):
|
|
19
|
+
> *"$ streampipe parse access.log --filter status=5xx | jq"* Opens on a real command, not a claim.
|
|
20
|
+
> *"Read anything that emits lines: files, pipes, sockets, kubectl logs."* Names the inputs, refuses abstraction.
|
|
21
|
+
> *"Open the trace, find the span, fix the regression."* Three concrete verbs.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
## 06 · Conversational FAQ
|
|
2
|
+
|
|
3
|
+
Bold questions, prompt answers. The page reads like an honest interview with the product. Each pair may be a disclosure.
|
|
4
|
+
|
|
5
|
+
- **Heading:** each section is a question: a short direct phrase ending in `?`.
|
|
6
|
+
- **Body:** the answer in one or two short paragraphs directly under the question.
|
|
7
|
+
- **Divider:** a hairline between pairs, or no rule and a change of paper.
|
|
8
|
+
- **Button:** a typographic link inside an answer, carrying a verb ("Read the policy"); one outlined CTA at the foot.
|
|
9
|
+
- **Image:** sparse; at most one diagram per long answer.
|
|
10
|
+
- **Reveal:** none on load; a disclosure opens over `--dur-long` with `--ease-out` on `grid-template-rows` from `0fr` to `1fr`.
|
|
11
|
+
|
|
12
|
+
Reach for it near pricing, for products that meet scepticism, for regulated or educational fields.
|
|
13
|
+
|
|
14
|
+
As the primary page it opens with a hero that asks the first question; otherwise it pairs with another shape that opens the page.
|
|
15
|
+
|
|
16
|
+
```html
|
|
17
|
+
<section class="faq">
|
|
18
|
+
<details>
|
|
19
|
+
<summary><h2>How long does setup take?</h2></summary>
|
|
20
|
+
<div class="answer"><p>…</p></div>
|
|
21
|
+
</details>
|
|
22
|
+
</section>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Sample opening lines** (questions are real questions; answers are short and concrete):
|
|
26
|
+
> *"What is this for? A single-binary CLI for parsing log streams from stdin."* Names the form factor and the input (Streampipe).
|
|
27
|
+
> *"How is it different? It runs where the logs are, so nothing leaves the box."* Answers with a fact, not a comparison.
|
|
28
|
+
> *"Who built this? Three of us, in Lisbon, since 2014."* Date, place and count; no marketing.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
## 07 · Manifesto
|
|
2
|
+
|
|
3
|
+
Polemical large type. The page tells the reader what to believe before it tells them what to buy. Often a poster's posture.
|
|
4
|
+
|
|
5
|
+
- **Heading:** uppercase display, tilted slightly (`-2deg` to `-4deg`) or set straight; one weight and one colour throughout, stress from a line break, never from a coloured or italic word (38i, 38iii); `line-height` 1.0 or more when it can wrap (55a). A theme whose signature is an accented word stamps the 38iii waiver and places it once, in the hero.
|
|
6
|
+
- **Body:** short paragraphs, each one assertion, large enough to read across the room.
|
|
7
|
+
- **Divider:** changes of paper between sections, or the theme's own rules; never a card.
|
|
8
|
+
- **Button:** one solid block in the accent; the fold carries it beside or under the declaration (44b), and it returns at the foot as the page's last word.
|
|
9
|
+
- **Image:** none when the cause is an idea; when it is physical (repair, housing, a river), photographs of it in the theme's treatment, one a screen at most.
|
|
10
|
+
- **Reveal:** one horizontal sweep, on the first claim below the fold; the rest is simply there.
|
|
11
|
+
|
|
12
|
+
Reach for it for repositioning announcements, mission-led indie products, a studio's beliefs page.
|
|
13
|
+
|
|
14
|
+
Avoid for checkout, pricing or a product tour. Manifesto sells agreement; a call to show up, sign or join is its one action.
|
|
15
|
+
|
|
16
|
+
```html
|
|
17
|
+
<section class="manifesto bleed-ink">
|
|
18
|
+
<h1 class="caps display-xxl">We believe<br>design is slow.</h1>
|
|
19
|
+
</section>
|
|
20
|
+
<section class="bleed-paper">
|
|
21
|
+
<p class="claim">It costs less than the rework you will do without it.</p>
|
|
22
|
+
</section>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Sample opening lines** (manifestos commit; they do not hedge):
|
|
26
|
+
> *"We are a studio. We are not a platform."* Defines by refusal, one colour (Meridian).
|
|
27
|
+
> *"We design products that last twelve years. We do not design products that need replacing every two."* A concrete number, a paired declaration.
|
|
28
|
+
> *"Lightness above weight."* A one-line principle, no explanation.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## 08 · Photographic
|
|
2
|
+
|
|
3
|
+
Huge photographs lead the page. Text is small annotation, not headline. The design says look before it says read.
|
|
4
|
+
|
|
5
|
+
- **Heading:** small: the headline and its one sentence sit on a paper plate at the image's base, and a caption near a corner carries a fact in the body face; never a centred display.
|
|
6
|
+
- **Body:** full-bleed photograph bands alternating with sections the theme's material carries alone (its Range: a menu as rows, the hours as a table, a statement), so photographs cover up to about 45% of the page below the hero and never lead two sections in a row (83).
|
|
7
|
+
- **Divider:** the image edge is the divider; no rules.
|
|
8
|
+
- **Button:** a typographic link on the plate, under the sentence, carrying a verb; it is the fold's one visible action (44b).
|
|
9
|
+
- **Image:** the whole point: full-bleed, edge to edge, from the user; library photographs in slots until theirs arrive (`imagery.md` § 2).
|
|
10
|
+
- **Reveal:** no spatial motion; the photographs do the work.
|
|
11
|
+
|
|
12
|
+
Reach for it for fashion, hospitality, photography portfolios, lifestyle commerce, any brand whose product is a feeling.
|
|
13
|
+
|
|
14
|
+
Avoid when the subject has nothing to photograph.
|
|
15
|
+
|
|
16
|
+
Compositions: the Poster hero (`layout.md` § 6) and full-bleed Showcases (§ 5).
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (captions are dates, places and plate numbers, not marketing):
|
|
19
|
+
> *"Plate 47, scored before the proof."* A number and a moment in the process (Maple Street Bread).
|
|
20
|
+
> *"Spring, 2026."* Two words, full stop.
|
|
21
|
+
> *"From the working archive."* Gives the photograph provenance without explaining it.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## 09 · Quote-Led
|
|
2
|
+
|
|
3
|
+
The hero is a quote the user supplied, with its attribution. The headline is someone else's voice.
|
|
4
|
+
|
|
5
|
+
- **Heading:** italic display setting the quote at `--text-display-s`, attribution below in the body face, one quiet line. The italic is the whole head, declared on the display (38ii guard), never one word.
|
|
6
|
+
- **Body:** more supplied quotes, case studies or a quiet feature list.
|
|
7
|
+
- **Divider:** a centred quote-mark glyph or a short rule between quotes.
|
|
8
|
+
- **Button:** a typographic link beneath the attribution, carrying a verb ("Read the case study").
|
|
9
|
+
- **Image:** the real person's photograph or the company's mark beside the attribution, or nothing.
|
|
10
|
+
- **Reveal:** none in the fold; below the fold may stagger.
|
|
11
|
+
|
|
12
|
+
Reach for it for B2B products with strong customer voices, agency case-study pages, fundraising sites, anywhere "people like me use this" is the unlock.
|
|
13
|
+
|
|
14
|
+
Avoid when the user has not supplied the quote. The quote is the user's, verbatim, with the name, role and company as given, or the shape does not ship (46a). Never write one, never paraphrase one.
|
|
15
|
+
|
|
16
|
+
Compositions: the quote as a Statement (`layout.md` § 5), its attribution beneath; further quotes the user gave as Rows.
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (fixture quotes; on a build only the user's words go here):
|
|
19
|
+
> *"I started listening on a long bus ride. By the third episode I had missed my stop, and I did not mind."* Story-shaped, attributed to a listener (Tide).
|
|
20
|
+
> *"Restraint, repeated, becomes a signature."* Short and philosophical, signed by the studio.
|
|
21
|
+
> A supplied outcome quote works the same way: the customer's own sentence, the number theirs, the attribution as given.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## 10 · Specimen
|
|
2
|
+
|
|
3
|
+
Large serif display, asymmetric column spans, hairline rules, a typographic CTA, generous whitespace. The voice of a foundry, a journal or a press.
|
|
4
|
+
|
|
5
|
+
- **Heading:** a large serif phrase, standing alone. When the run is genuinely ordinal the figure is generated on the heading itself (`<ol>` with `counter()`); a number typed beside or above it is an eyebrow (54).
|
|
6
|
+
- **Body:** asymmetric spans: a narrow marginalia column (captions, dates, sidenotes) beside a wide content column.
|
|
7
|
+
- **Divider:** hairline rules between sections.
|
|
8
|
+
- **Button:** a typographic link carrying a verb ("Open your studio"); no box, no fill, no arrow (63).
|
|
9
|
+
- **Image:** none, or one photograph of the face in print (a poster, a sign, a book spread) from the library or the user.
|
|
10
|
+
- **Reveal:** fade-up stagger on first load.
|
|
11
|
+
|
|
12
|
+
Reach for it when the prompt is about type, publishing or writing (a foundry, a journal, a press, a specimen sheet), or the user names it; the editorial genre alone does not qualify. On any other prompt pick another shape: this is the field's most-copied look, and a vague prompt that lands here has not been read.
|
|
13
|
+
|
|
14
|
+
Avoid for product pages that need a demo; Specimen has nowhere to put one.
|
|
15
|
+
|
|
16
|
+
Compositions: Rows and a Statement (`layout.md` § 5); the action is a typographic link.
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (foundry voice, treating type as material culture):
|
|
19
|
+
> *"A quiet instrument."* Refusal of the verb.
|
|
20
|
+
> *"Type, set with care."* Three words.
|
|
21
|
+
> *"Set by hand, since 2003."* Date-anchored, names the method.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## 11 · Catalogue
|
|
2
|
+
|
|
3
|
+
Uniform grid of variations of the same thing: typefaces, palettes, SKUs. The page is a visual index of inventory.
|
|
4
|
+
|
|
5
|
+
- **Heading:** one line at the theme's display scale over the grid; the products lead, so the heading never pushes the first row below the fold.
|
|
6
|
+
- **Body:** a grid of same-sized cards, 3 to 5 per row, each one variant of the core product; image tracks `minmax(0, 1fr)` (50).
|
|
7
|
+
- **Divider:** hairline rules between rows.
|
|
8
|
+
- **Button:** a link inside each card to its detail page; no global CTA. The fold's one visible action is the first card's link (44b).
|
|
9
|
+
- **Image:** a specimen thumbnail or a swatch per card when the user gave the images; otherwise a library photograph of the kind of thing, or each card set in type (the name, the one fact, the price, a colour swatch where colour is the variant), never a row of empty frames (68).
|
|
10
|
+
- **Reveal:** none.
|
|
11
|
+
|
|
12
|
+
Reach for it for foundries, palette tools, font shops, colour systems, capsule collections.
|
|
13
|
+
|
|
14
|
+
Avoid for narrative brands. Catalogue treats every item as equal, wrong for a product with hierarchy.
|
|
15
|
+
|
|
16
|
+
Compositions: Grid (`layout.md` § 5), one card per item: its image, name, price and one action.
|
|
17
|
+
|
|
18
|
+
**Sample opening lines** (inventory headers: dated, with a count):
|
|
19
|
+
> *"Today's loaves."* Two words, ownership of the day (Maple Street Bread).
|
|
20
|
+
> *"Five collections, in store now."* The count and the where.
|
|
21
|
+
> *"Thirty-eight pieces this spring, every one hand-stitched."* Count, season, qualifier; no adjectives.
|