@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,353 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en-GB">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>The Boiler Room, Hull: this month’s gigs and tickets</title>
|
|
7
|
+
<meta name="description" content="The Boiler Room is a 200-capacity music venue in Hull. Doors 7pm, first band 8pm. This month’s gigs and tickets.">
|
|
8
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
|
+
<link href="https://fonts.googleapis.com/css2?family=Anybody:wdth,wght@100..150,900&family=Archivo:wght@400;600&family=Archivo+Narrow:wght@600&display=swap" rel="stylesheet">
|
|
11
|
+
<style>
|
|
12
|
+
/* Hallmark · job: visit · shape: Photographic · genre: playful · theme: Overprint (by request)
|
|
13
|
+
* hero: Poster · nav: slab, the ink bar with the wordmark in stock colour, three links and a knocked-out Tickets outline · footer: mast, the wordmark across the container over the bar rule · imagery: photographs, library 6, mono pulled through one pass each · signature: the bill knocked out of a gig photograph printed in the orange pass · overprint: newsprint
|
|
14
|
+
* axes: light/grotesk-heavy/cool · posture: full-palette · contrast: pass · fold: pass · v2.0.0 */
|
|
15
|
+
/* Hallmark · pre-emit critique: P4 H5 E4 S4 R4 V4 · weakest: S, the brief names no acts, so the listing is one honest slot and the photographs and the two times carry the night */
|
|
16
|
+
/* Hallmark · hero-review: in-thread · fix · 2 findings · 1 resolved 1 partial (the stage act is a laptop duo; the library holds no band shot with a dark foot, so the handoff asks for the venue's own) · finish-review: in-thread · fix · 1 finding · 1 resolved (the bill's room under the Poster raised to 96px) · gap: the two passes never cross on this page, so the moss shows nowhere */
|
|
17
|
+
:root {
|
|
18
|
+
color-scheme: light;
|
|
19
|
+
--space-3xs: 2px; --space-2xs: 4px; --space-xs: 8px; --space-sm: 12px; --space-md: 16px; --space-lg: 24px; --space-xl: 40px; --space-2xl: 64px; --space-3xl: 96px; --space-4xl: 144px;
|
|
20
|
+
--text-xs: 0.8125rem; --text-sm: 0.875rem; --text-md: 1rem; --text-lg: 1.25rem; --text-xl: 1.5625rem; --text-2xl: 1.953rem; --text-3xl: 2.441rem;
|
|
21
|
+
--text-display-s: clamp(2.25rem, 4vw + 0.5rem, 3.75rem); --text-display: clamp(2.75rem, 5vw + 1rem, 5.25rem);
|
|
22
|
+
--text-section: clamp(2rem, 2.5vw + 1rem, 3.5rem); --text-title: clamp(1.25rem, 0.75vw + 0.875rem, 1.625rem); --text-lead: clamp(1.125rem, 0.35vw + 1rem, 1.375rem);
|
|
23
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1); --ease-in: cubic-bezier(0.7, 0, 0.84, 0); --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
|
|
24
|
+
--dur-micro: 120ms; --dur-short: 220ms; --dur-long: 420ms;
|
|
25
|
+
--color-error: oklch(52% 0.19 27); --color-success: oklch(50% 0.12 150);
|
|
26
|
+
--container: 1440px; --gutter: 64px; --gap-columns: 32px; --section-gap-s: 120px; --section-gap: 144px; --section-gap-l: 176px;
|
|
27
|
+
--z-base: 1; --z-raised: 10; --z-dropdown: 100; --z-sticky: 200; --z-sticky-nav: 300; --z-modal: 400; --z-toast: 500; --z-tooltip: 600;
|
|
28
|
+
--color-paper: oklch(91.5% 0.014 92); --color-paper-2: oklch(88% 0.017 90); --color-paper-3: oklch(84% 0.02 88);
|
|
29
|
+
--color-ink: oklch(17% 0.008 60); --color-ink-2: oklch(29% 0.01 60); --color-muted: oklch(43% 0.012 70);
|
|
30
|
+
--color-rule: oklch(79% 0.02 85);
|
|
31
|
+
--color-accent: oklch(69% 0.105 213); --color-accent-ink: oklch(17% 0.008 60); --color-focus: oklch(44% 0.1 220);
|
|
32
|
+
--color-accent-2: oklch(72% 0.185 52); --color-accent-2-ink: oklch(17% 0.008 60);
|
|
33
|
+
--color-mix: oklch(40% 0.106 129);
|
|
34
|
+
--blend: multiply; --texture-opacity: 0.05;
|
|
35
|
+
--font-display: "Anybody", ui-sans-serif, sans-serif; --font-body: "Archivo", ui-sans-serif, sans-serif;
|
|
36
|
+
--font-outlier: "Archivo Narrow", ui-sans-serif, sans-serif;
|
|
37
|
+
--radius-card: 0; --radius-pill: 0; --rule-hair: 1px; --rule-bar: 3px;
|
|
38
|
+
--shadow-card: none;
|
|
39
|
+
--tracking-display: -0.01em; --display-stretch: 140%;
|
|
40
|
+
}
|
|
41
|
+
*, *::before, *::after { box-sizing: border-box; }
|
|
42
|
+
html, body { overflow-x: clip; }
|
|
43
|
+
html { scrollbar-color: var(--color-muted) var(--color-paper); scroll-padding-top: var(--space-3xl); }
|
|
44
|
+
body { margin: 0; background: var(--color-paper); color: var(--color-ink); font-family: var(--font-body); font-size: var(--text-md); line-height: 1.55; -webkit-font-smoothing: antialiased; caret-color: var(--color-accent); }
|
|
45
|
+
::selection { background: color-mix(in oklab, var(--color-accent-2) 40%, transparent); }
|
|
46
|
+
:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 2px; }
|
|
47
|
+
a { color: inherit; text-decoration-thickness: 1px; text-underline-offset: 0.16em; }
|
|
48
|
+
h1, h2, h3 { margin: 0; font-family: var(--font-display); font-weight: var(--display-weight, 700); font-synthesis: none; letter-spacing: var(--tracking-display); line-height: 1.05; overflow-wrap: break-word; min-width: 0; text-wrap: balance; }
|
|
49
|
+
h1 { max-width: 20ch; font-size: var(--text-display); } h2 { max-width: 30ch; font-size: var(--text-section); } h3 { max-width: 40ch; font-size: var(--text-title); line-height: 1.2; }
|
|
50
|
+
.lead { font-size: var(--text-lead); line-height: 1.45; max-width: 52ch; }
|
|
51
|
+
p { margin: 0; text-wrap: pretty; }
|
|
52
|
+
p:not([class]) { max-width: 65ch; }
|
|
53
|
+
img, video { max-width: 100%; height: auto; display: block; }
|
|
54
|
+
svg { display: block; }
|
|
55
|
+
[hidden] { display: none !important; }
|
|
56
|
+
button, input, select, textarea { font: inherit; }
|
|
57
|
+
.container { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: var(--gutter); box-sizing: border-box; }
|
|
58
|
+
.num, .figure, td.num { font-variant-numeric: tabular-nums; }
|
|
59
|
+
.visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
|
|
60
|
+
[data-slot] { position: relative; overflow: hidden; background: linear-gradient(160deg, var(--color-paper-2, var(--color-paper)), var(--color-paper-3, var(--color-paper))); }
|
|
61
|
+
[data-slot] > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 1; }
|
|
62
|
+
[data-slot]:has(> img) > :not(img):not([data-keep]) { display: none !important; }
|
|
63
|
+
@media (max-width: 60rem) { :root { --gutter: 24px; --section-gap-s: 80px; --section-gap: 96px; --section-gap-l: 120px; } }
|
|
64
|
+
@media (max-width: 40rem) { :root { --gutter: 16px; --section-gap-s: 56px; --section-gap: 72px; --section-gap-l: 96px; --gap-columns: 16px; } }
|
|
65
|
+
@media (prefers-reduced-motion: reduce) { *:not(.keep-motion), *:not(.keep-motion)::before, *:not(.keep-motion)::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } }
|
|
66
|
+
/* photographs: mono con=30 */
|
|
67
|
+
[data-slot] > img { filter: grayscale(1) contrast(1.3); }
|
|
68
|
+
:root {
|
|
69
|
+
--nav-h: 72px;
|
|
70
|
+
--text-bill: clamp(2.125rem, 6vw, 5.75rem);
|
|
71
|
+
--grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 -4'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E");
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
h1, h2, h3 { font-weight: 900; font-stretch: var(--display-stretch); text-transform: uppercase; line-height: 1.02; }
|
|
75
|
+
|
|
76
|
+
/* the skip link */
|
|
77
|
+
.skip { position: absolute; left: var(--space-md); top: calc(-1 * var(--space-3xl)); z-index: var(--z-toast); padding: var(--space-xs) var(--space-md); background: var(--color-ink); color: var(--color-paper); }
|
|
78
|
+
.skip:focus-visible { top: var(--space-md); outline-color: var(--color-accent); }
|
|
79
|
+
|
|
80
|
+
/* controls: the pass-1 fill beside an inset ink outline; the press changes a fill at once */
|
|
81
|
+
.btn { display: inline-flex; align-items: center; justify-content: center; min-height: 48px; padding: 0 var(--space-lg); border: 0; border-radius: 0; background: none; font: 600 var(--text-sm)/1 var(--font-outlier); text-transform: uppercase; text-decoration: none; white-space: nowrap; cursor: pointer; }
|
|
82
|
+
.btn--primary { background: var(--color-accent); color: var(--color-accent-ink); }
|
|
83
|
+
.btn--primary:hover { background: color-mix(in oklab, var(--color-accent) 78%, var(--color-ink)); }
|
|
84
|
+
.btn--primary:active { background: color-mix(in oklab, var(--color-accent) 62%, var(--color-ink)); }
|
|
85
|
+
.btn--secondary { box-shadow: inset 0 0 0 2px var(--color-ink); color: var(--color-ink); }
|
|
86
|
+
.btn--secondary:hover { background: var(--color-ink); color: var(--color-paper); }
|
|
87
|
+
.btn--secondary:active { background: var(--color-ink-2); color: var(--color-paper); }
|
|
88
|
+
.btn--knock { box-shadow: inset 0 0 0 2px var(--color-paper); color: var(--color-paper); }
|
|
89
|
+
.btn--knock:hover { background: var(--color-paper); color: var(--color-ink); }
|
|
90
|
+
.btn--knock:active { background: var(--color-paper-3); color: var(--color-ink); }
|
|
91
|
+
.btn:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 2px; }
|
|
92
|
+
.btn:disabled, .btn[aria-disabled="true"] { opacity: 0.55; cursor: not-allowed; }
|
|
93
|
+
|
|
94
|
+
/* the two passes: flat fills, multiplied, a photograph pulled through one of them */
|
|
95
|
+
.pass-1 { background: var(--color-accent); color: var(--color-accent-ink); mix-blend-mode: var(--blend); }
|
|
96
|
+
.pass-2 { background: var(--color-accent-2); color: var(--color-accent-2-ink); mix-blend-mode: var(--blend); }
|
|
97
|
+
.pass-1 > img, .pass-2 > img { mix-blend-mode: var(--blend); }
|
|
98
|
+
.grain { isolation: isolate; }
|
|
99
|
+
.grain::after { content: ""; position: absolute; inset: 0; z-index: 2; pointer-events: none; opacity: var(--texture-opacity); background: var(--grain) 0 0 / 200px; }
|
|
100
|
+
|
|
101
|
+
/* nav: the slab */
|
|
102
|
+
.slab { background: var(--color-ink); color: var(--color-paper); }
|
|
103
|
+
.slab__inner { display: flex; align-items: center; justify-content: space-between; gap: var(--space-lg); min-height: var(--nav-h); }
|
|
104
|
+
.wordmark { font: 900 1.375rem/1 var(--font-display); font-stretch: var(--display-stretch); text-transform: uppercase; letter-spacing: var(--tracking-display); color: var(--color-paper); text-decoration: none; white-space: nowrap; }
|
|
105
|
+
.slab__nav { display: flex; align-items: center; gap: var(--space-xl); }
|
|
106
|
+
.slab__links { display: flex; gap: var(--space-lg); margin: 0; padding: 0; list-style: none; }
|
|
107
|
+
.slab__links a { font: 600 var(--text-sm)/1 var(--font-outlier); color: var(--color-paper); text-decoration: underline; text-decoration-color: transparent; text-decoration-thickness: 2px; text-underline-offset: 0.35em; white-space: nowrap; }
|
|
108
|
+
.slab__links a:hover { text-decoration-color: var(--color-accent); }
|
|
109
|
+
.slab :focus-visible, .hero :focus-visible, .wordmark:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 3px; }
|
|
110
|
+
|
|
111
|
+
/* hero: Poster, the bill knocked out to the stock over the photograph's darkest third */
|
|
112
|
+
.hero { position: relative; isolation: isolate; display: grid; align-items: end; min-height: calc(100dvh - var(--nav-h)); background: var(--color-ink); color: var(--color-paper); }
|
|
113
|
+
.hero__photo { position: absolute; inset: 0; margin: 0; z-index: 0; mix-blend-mode: normal; }
|
|
114
|
+
.hero__photo > img { object-position: 50% 40%; }
|
|
115
|
+
.hero__scrim { position: absolute; inset: 0; z-index: 1; pointer-events: none; background: linear-gradient(to top, color-mix(in oklab, var(--color-ink) 62%, transparent), transparent 58%); }
|
|
116
|
+
.hero__inner { position: relative; z-index: 3; display: grid; justify-items: start; gap: var(--space-lg); padding-block: var(--space-3xl); }
|
|
117
|
+
.hero__head { max-width: none; font-size: var(--text-bill); color: var(--color-paper); }
|
|
118
|
+
.hero__lead { max-width: 34ch; color: var(--color-paper); }
|
|
119
|
+
.hero__actions { display: flex; flex-wrap: wrap; gap: var(--space-sm); }
|
|
120
|
+
|
|
121
|
+
/* photographs: square, no frame, each printed through one pass */
|
|
122
|
+
.photo { position: relative; margin: 0; }
|
|
123
|
+
.photo--tall { aspect-ratio: 4 / 5; }
|
|
124
|
+
.photo--wide { aspect-ratio: 21 / 9; width: 100%; }
|
|
125
|
+
.photo--hull { aspect-ratio: 4 / 3; }
|
|
126
|
+
.caption { margin-top: var(--space-sm); font-size: var(--text-sm); color: var(--color-ink-2); }
|
|
127
|
+
.fill { padding: 0 0.25em; border: 1px dashed color-mix(in oklch, var(--color-muted) 70%, transparent); border-radius: 3px; color: var(--color-muted); -webkit-box-decoration-break: clone; box-decoration-break: clone; }
|
|
128
|
+
|
|
129
|
+
/* this month: the listing beside a photograph in the teal pass */
|
|
130
|
+
.listing { padding-top: var(--section-gap); }
|
|
131
|
+
.listing__grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--gap-columns); align-items: center; }
|
|
132
|
+
.listing__text { grid-column: 1 / 8; display: grid; justify-items: start; }
|
|
133
|
+
.listing__text .lead { margin-top: var(--space-md); max-width: 44ch; }
|
|
134
|
+
.listing__shot { grid-column: 8 / 13; margin: 0; }
|
|
135
|
+
.bill { width: 100%; margin-block: var(--space-2xl) var(--space-xl); border-collapse: collapse; border-top: var(--rule-bar) solid var(--color-ink); font-variant-numeric: tabular-nums; }
|
|
136
|
+
.bill th { padding: var(--space-sm) var(--space-md) var(--space-sm) 0; border-bottom: var(--rule-hair) solid var(--color-rule); font: 600 var(--text-sm)/1.2 var(--font-outlier); text-align: left; white-space: nowrap; }
|
|
137
|
+
.bill td { padding: var(--space-lg) 0; border-bottom: var(--rule-hair) solid var(--color-rule); }
|
|
138
|
+
|
|
139
|
+
/* the room: the stage before doors, full bleed, then the night in two */
|
|
140
|
+
.room { padding-top: var(--section-gap-l); }
|
|
141
|
+
.room h2 { margin-bottom: var(--space-2xl); }
|
|
142
|
+
.room__pair { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--gap-columns); margin-top: var(--space-2xl); }
|
|
143
|
+
.room__shot { margin: 0; }
|
|
144
|
+
.room__shot--doors { grid-column: 1 / 5; }
|
|
145
|
+
.room__shot--doors .photo { aspect-ratio: 6 / 7; }
|
|
146
|
+
.room__shot--band { grid-column: 5 / 13; }
|
|
147
|
+
.room__shot--band .photo { aspect-ratio: 16 / 9; }
|
|
148
|
+
|
|
149
|
+
/* hull: the photograph on the other side, the facts as a list under the bar rule */
|
|
150
|
+
.hull { padding-block: var(--section-gap) var(--section-gap-s); }
|
|
151
|
+
.hull__grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--gap-columns); align-items: center; }
|
|
152
|
+
.hull__grid > .photo { grid-column: 1 / 7; }
|
|
153
|
+
.hull__text { grid-column: 8 / 13; }
|
|
154
|
+
.facts { margin: var(--space-2xl) 0 0; border-top: var(--rule-bar) solid var(--color-ink); }
|
|
155
|
+
.facts > div { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: var(--space-md); padding-block: var(--space-md); border-bottom: var(--rule-hair) solid var(--color-rule); }
|
|
156
|
+
.facts dt { font: 600 var(--text-sm)/1.5 var(--font-outlier); }
|
|
157
|
+
.facts dd { margin: 0; }
|
|
158
|
+
|
|
159
|
+
/* tickets: the ink band, stock type, the on-sale field */
|
|
160
|
+
.tickets { padding-block: var(--section-gap-s); background: var(--color-ink); color: var(--color-paper); }
|
|
161
|
+
.tickets__grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--gap-columns); align-items: end; }
|
|
162
|
+
.tickets__text { grid-column: 1 / 8; }
|
|
163
|
+
.tickets__text .lead { margin-top: var(--space-md); max-width: 40ch; }
|
|
164
|
+
.onsale { grid-column: 8 / 13; }
|
|
165
|
+
.onsale label { display: block; margin-bottom: var(--space-xs); font: 600 var(--text-sm)/1.2 var(--font-outlier); }
|
|
166
|
+
.onsale__row { display: flex; gap: var(--space-xs); }
|
|
167
|
+
.onsale input { flex: 1; min-width: 0; min-height: 48px; padding: 0 var(--space-md); border: 0; border-radius: 0; background: var(--color-ink); color: var(--color-paper); box-shadow: inset 0 0 0 2px var(--color-paper); font: 400 var(--text-md) var(--font-body); outline: 2px solid transparent; outline-offset: 2px; }
|
|
168
|
+
.onsale input:focus-visible { outline-color: var(--color-accent); }
|
|
169
|
+
.onsale input[aria-invalid] { box-shadow: inset 0 0 0 2px var(--color-error); }
|
|
170
|
+
.onsale__help { min-height: 1lh; margin-top: var(--space-xs); font-size: var(--text-sm); color: var(--color-paper-3); }
|
|
171
|
+
.tickets :focus-visible { outline-color: var(--color-accent); }
|
|
172
|
+
|
|
173
|
+
/* footer: the mast */
|
|
174
|
+
.mast { padding-block: var(--section-gap-s) var(--space-2xl); }
|
|
175
|
+
.mast__word { margin: 0; font: 900 clamp(1.5rem, 6.85vw, 6.15rem)/1.02 var(--font-display); font-stretch: var(--display-stretch); text-transform: uppercase; letter-spacing: var(--tracking-display); white-space: nowrap; }
|
|
176
|
+
.mast__row { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: var(--space-lg); margin-top: var(--space-lg); padding-top: var(--space-lg); border-top: var(--rule-bar) solid var(--color-ink); }
|
|
177
|
+
.mast__links { display: flex; flex-wrap: wrap; gap: var(--space-lg); margin: 0; padding: 0; list-style: none; }
|
|
178
|
+
.mast__links a { font: 600 var(--text-sm)/1.2 var(--font-outlier); text-decoration: underline; text-decoration-color: var(--color-accent); text-decoration-thickness: 2px; text-underline-offset: 0.3em; }
|
|
179
|
+
.mast__links a:hover { text-decoration-color: var(--color-ink); }
|
|
180
|
+
.mast__note { margin: 0; font-size: var(--text-sm); color: var(--color-ink-2); }
|
|
181
|
+
.mast__credits { max-width: none; margin: var(--space-xl) 0 0; font-size: var(--text-sm); line-height: 1.6; color: var(--color-ink-2); }
|
|
182
|
+
.mast__credits span { white-space: nowrap; }
|
|
183
|
+
.mast__credits a { color: inherit; text-decoration: underline; text-decoration-color: var(--color-rule); text-decoration-thickness: 1px; text-underline-offset: 0.2em; }
|
|
184
|
+
.mast__credits a:hover { text-decoration-color: var(--color-ink); }
|
|
185
|
+
|
|
186
|
+
@media (max-width: 60rem) {
|
|
187
|
+
.slab__links { display: none; }
|
|
188
|
+
.hero { min-height: calc(92dvh - var(--nav-h)); }
|
|
189
|
+
.listing__text, .listing__shot, .hull__grid > .photo, .hull__text, .tickets__text, .onsale { grid-column: 1 / -1; }
|
|
190
|
+
.listing__shot, .hull__text, .onsale { margin-top: var(--space-2xl); }
|
|
191
|
+
.room__shot--doors, .room__shot--band { grid-column: 1 / -1; }
|
|
192
|
+
.room__shot--band { margin-top: var(--space-xl); }
|
|
193
|
+
}
|
|
194
|
+
@media (max-width: 40rem) {
|
|
195
|
+
.wordmark { font-size: 1.0625rem; }
|
|
196
|
+
.slab__nav { gap: var(--space-md); }
|
|
197
|
+
.hero__inner { padding-block: var(--space-2xl) var(--space-xl); }
|
|
198
|
+
.bill th:nth-child(n+3) { display: none; }
|
|
199
|
+
.onsale__row { flex-direction: column; }
|
|
200
|
+
}
|
|
201
|
+
</style>
|
|
202
|
+
</head>
|
|
203
|
+
<body>
|
|
204
|
+
<a class="skip" href="#main">Skip to content</a>
|
|
205
|
+
|
|
206
|
+
<header class="slab">
|
|
207
|
+
<div class="container slab__inner">
|
|
208
|
+
<a class="wordmark" href="#main" aria-label="The Boiler Room, home">The Boiler Room</a>
|
|
209
|
+
<nav class="slab__nav" aria-label="Main">
|
|
210
|
+
<ul class="slab__links">
|
|
211
|
+
<li><a href="#this-month">This month</a></li>
|
|
212
|
+
<li><a href="#the-room">The room</a></li>
|
|
213
|
+
<li><a href="#hull">Hull</a></li>
|
|
214
|
+
</ul>
|
|
215
|
+
<a class="btn btn--knock" href="#tickets">Tickets</a>
|
|
216
|
+
</nav>
|
|
217
|
+
</div>
|
|
218
|
+
</header>
|
|
219
|
+
|
|
220
|
+
<main id="main">
|
|
221
|
+
<section class="hero" aria-labelledby="hero-head">
|
|
222
|
+
<figure class="hero__photo pass-2 grain" data-slot="hero" data-alt="A gig night at the Boiler Room: the crowd from behind, hands up, the stage lit, with a dark lower half for the bill">
|
|
223
|
+
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Lights_%282011-04-24_by_Ian_T._McFarland%29.jpg/1280px-Lights_%282011-04-24_by_Ian_T._McFarland%29.jpg" width="3198" height="2555" fetchpriority="high" alt="Two guitarists in silhouette on a small stage, lit through smoke" style="object-position: 55% 40%">
|
|
224
|
+
</figure>
|
|
225
|
+
<div class="hero__scrim" aria-hidden="true"></div>
|
|
226
|
+
<div class="container hero__inner">
|
|
227
|
+
<h1 id="hero-head" class="hero__head">Doors 7pm.<br>First band 8pm.</h1>
|
|
228
|
+
<p class="lead hero__lead">A 200-capacity music venue in Hull, with this month’s gigs below.</p>
|
|
229
|
+
<div class="hero__actions">
|
|
230
|
+
<a class="btn btn--primary" href="#this-month">This month’s gigs</a>
|
|
231
|
+
<a class="btn btn--knock" href="#tickets">How tickets work</a>
|
|
232
|
+
</div>
|
|
233
|
+
</div>
|
|
234
|
+
</section>
|
|
235
|
+
|
|
236
|
+
<section id="this-month" class="listing" aria-labelledby="month-head">
|
|
237
|
+
<div class="container listing__grid">
|
|
238
|
+
<div class="listing__text">
|
|
239
|
+
<h2 id="month-head">This month</h2>
|
|
240
|
+
<p class="lead">Every gig goes up here with its night, its price and a link to its tickets.</p>
|
|
241
|
+
<table class="bill">
|
|
242
|
+
<caption class="visually-hidden">Gigs at the Boiler Room this month</caption>
|
|
243
|
+
<thead>
|
|
244
|
+
<tr><th scope="col">Night</th><th scope="col">Band</th><th scope="col">Price</th><th scope="col">Tickets</th></tr>
|
|
245
|
+
</thead>
|
|
246
|
+
<tbody>
|
|
247
|
+
<tr><td colspan="4"><span class="fill" data-fill="line-up">This month’s line-up to be announced</span></td></tr>
|
|
248
|
+
</tbody>
|
|
249
|
+
</table>
|
|
250
|
+
<a class="btn btn--secondary" href="#tickets">Hear when tickets go on sale</a>
|
|
251
|
+
</div>
|
|
252
|
+
<figure class="listing__shot">
|
|
253
|
+
<div class="photo photo--tall pass-1 grain" data-slot="month" data-alt="A gig at the Boiler Room from the floor: a fan with both arms up, the band behind in the stage haze">
|
|
254
|
+
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Energetic_guitarist_performs_on_stage_during_a_lively_music_festival_at_night%2C_surrounded_by_vibrant_lights_and_excited_fans.jpg/1280px-Energetic_guitarist_performs_on_stage_during_a_lively_music_festival_at_night%2C_surrounded_by_vibrant_lights_and_excited_fans.jpg" width="2300" height="1530" loading="lazy" alt="A long-haired guitarist playing under the stage lights in haze" style="object-position: 45% 55%">
|
|
255
|
+
</div>
|
|
256
|
+
</figure>
|
|
257
|
+
</div>
|
|
258
|
+
</section>
|
|
259
|
+
|
|
260
|
+
<section id="the-room" class="room" aria-labelledby="room-head">
|
|
261
|
+
<div class="container">
|
|
262
|
+
<h2 id="room-head">Room for two hundred</h2>
|
|
263
|
+
</div>
|
|
264
|
+
<div class="photo photo--wide pass-1 grain" data-slot="room" data-alt="The Boiler Room before doors: the stage, the drum kit and the microphone, wide, from the floor">
|
|
265
|
+
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Ansambel_SkaMeika%C2%B4.jpg/1280px-Ansambel_SkaMeika%C2%B4.jpg" width="5760" height="2880" loading="lazy" alt="The shadows of a band, horns and all, thrown on a lit screen behind the stage" style="object-position: 50% 55%">
|
|
266
|
+
</div>
|
|
267
|
+
<div class="container room__pair">
|
|
268
|
+
<figure class="room__shot room__shot--doors">
|
|
269
|
+
<div class="photo pass-1 grain" data-slot="doors" data-alt="People coming in at the Boiler Room as the doors open">
|
|
270
|
+
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Man_playing_an_acoustic_brazilian_guitar_%28Viol%C3%A3o%29_on_Marco_Zero_Square%2C_Refice%2C_Pernambuco%2C_Brazil.jpg/1280px-Man_playing_an_acoustic_brazilian_guitar_%28Viol%C3%A3o%29_on_Marco_Zero_Square%2C_Refice%2C_Pernambuco%2C_Brazil.jpg" width="1920" height="1280" loading="lazy" alt="A weathered hand picking the strings of a resonator guitar" style="object-position: 30% 45%">
|
|
271
|
+
</div>
|
|
272
|
+
<figcaption class="caption">Doors open at 7pm.</figcaption>
|
|
273
|
+
</figure>
|
|
274
|
+
<figure class="room__shot room__shot--band">
|
|
275
|
+
<div class="photo pass-2 grain" data-slot="band" data-alt="The first band of the night on the Boiler Room stage">
|
|
276
|
+
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/Kratzen_at_Puch_Open_Air_2024_02.jpg/1280px-Kratzen_at_Puch_Open_Air_2024_02.jpg" width="5472" height="3648" loading="lazy" alt="A bass player and a keyboard player on stage under the lights" style="object-position: 50% 40%">
|
|
277
|
+
</div>
|
|
278
|
+
<figcaption class="caption">The first band is on at 8pm.</figcaption>
|
|
279
|
+
</figure>
|
|
280
|
+
</div>
|
|
281
|
+
</section>
|
|
282
|
+
|
|
283
|
+
<section id="hull" class="hull" aria-labelledby="hull-head">
|
|
284
|
+
<div class="container hull__grid">
|
|
285
|
+
<div class="photo photo--hull pass-2 grain" data-slot="bar" data-alt="The Boiler Room on a gig night, the bar and the room from inside">
|
|
286
|
+
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/51/Cure_cocktail_bar_New_Orleans_2011.jpg/1280px-Cure_cocktail_bar_New_Orleans_2011.jpg" width="4752" height="3168" loading="lazy" alt="A dim bar with lit shelves of bottles and a bartender at work" style="object-position: 25% 35%">
|
|
287
|
+
</div>
|
|
288
|
+
<div class="hull__text">
|
|
289
|
+
<h2 id="hull-head">Find us in Hull</h2>
|
|
290
|
+
<dl class="facts">
|
|
291
|
+
<div><dt>Where</dt><dd>Hull, <span class="fill" data-fill="address">street address to be announced</span></dd></div>
|
|
292
|
+
<div><dt>Room</dt><dd>200 capacity</dd></div>
|
|
293
|
+
<div><dt>Tickets</dt><dd>Sold on this page, gig by gig</dd></div>
|
|
294
|
+
</dl>
|
|
295
|
+
</div>
|
|
296
|
+
</div>
|
|
297
|
+
</section>
|
|
298
|
+
|
|
299
|
+
<section id="tickets" class="tickets" aria-labelledby="tickets-head">
|
|
300
|
+
<div class="container tickets__grid">
|
|
301
|
+
<div class="tickets__text">
|
|
302
|
+
<h2 id="tickets-head">Tickets, gig by gig</h2>
|
|
303
|
+
<p class="lead">They go on sale here as each night is booked. Leave an email to hear first.</p>
|
|
304
|
+
</div>
|
|
305
|
+
<form class="onsale" data-endpoint="" novalidate>
|
|
306
|
+
<label for="onsale-email">Email address</label>
|
|
307
|
+
<div class="onsale__row">
|
|
308
|
+
<input id="onsale-email" name="email" type="email" inputmode="email" autocomplete="email" required>
|
|
309
|
+
<button class="btn btn--primary" type="submit">Send me on-sales</button>
|
|
310
|
+
</div>
|
|
311
|
+
<p class="onsale__help" id="onsale-help" aria-live="polite"></p>
|
|
312
|
+
</form>
|
|
313
|
+
</div>
|
|
314
|
+
</section>
|
|
315
|
+
</main>
|
|
316
|
+
|
|
317
|
+
<footer class="mast">
|
|
318
|
+
<div class="container">
|
|
319
|
+
<p class="mast__word">The Boiler Room</p>
|
|
320
|
+
<div class="mast__row">
|
|
321
|
+
<nav aria-label="Footer">
|
|
322
|
+
<ul class="mast__links">
|
|
323
|
+
<li><a href="#this-month">This month</a></li>
|
|
324
|
+
<li><a href="#the-room">The room</a></li>
|
|
325
|
+
<li><a href="#hull">Hull</a></li>
|
|
326
|
+
<li><a href="#tickets">Tickets</a></li>
|
|
327
|
+
</ul>
|
|
328
|
+
</nav>
|
|
329
|
+
<p class="mast__note">A music venue in Hull. © 2026 The Boiler Room</p>
|
|
330
|
+
</div>
|
|
331
|
+
<p class="mast__credits" data-credits>Photographs: <a href="https://commons.wikimedia.org/wiki/File:Lights_(2011-04-24_by_Ian_T._McFarland).jpg">Ian T. McFarland</a> <span>(CC BY-SA 2.0)</span>, <a href="https://commons.wikimedia.org/wiki/File:Energetic_guitarist_performs_on_stage_during_a_lively_music_festival_at_night,_surrounded_by_vibrant_lights_and_excited_fans.jpg">Shixart1985</a> <span>(CC BY 2.0)</span>, <a href="https://commons.wikimedia.org/wiki/File:Ansambel_SkaMeika%C2%B4.jpg">Enel Lepik</a> <span>(CC BY-SA 4.0)</span>, <a href="https://commons.wikimedia.org/wiki/File:Man_playing_an_acoustic_brazilian_guitar_(Viol%C3%A3o)_on_Marco_Zero_Square,_Refice,_Pernambuco,_Brazil.jpg">Wilfredor</a> <span>(CC0)</span>, <a href="https://commons.wikimedia.org/wiki/File:Kratzen_at_Puch_Open_Air_2024_02.jpg">Kritzolina</a> <span>(CC BY-SA 4.0)</span>, <a href="https://commons.wikimedia.org/wiki/File:Cure_cocktail_bar_New_Orleans_2011.jpg">Chelsea Marie Hicks</a> <span>(CC BY 2.0)</span>, all via Wikimedia Commons.</p>
|
|
332
|
+
</div>
|
|
333
|
+
</footer>
|
|
334
|
+
|
|
335
|
+
<script>
|
|
336
|
+
document.querySelectorAll('form[data-endpoint]').forEach((form) => {
|
|
337
|
+
const input = form.querySelector('input'), help = form.querySelector('[aria-live]');
|
|
338
|
+
form.addEventListener('submit', (e) => {
|
|
339
|
+
e.preventDefault();
|
|
340
|
+
const ok = input.checkValidity();
|
|
341
|
+
input.toggleAttribute('aria-invalid', !ok);
|
|
342
|
+
if (!ok) { input.setAttribute('aria-describedby', help.id); help.textContent = 'That address looks incomplete. Write it as name@example.com.'; input.focus(); return; }
|
|
343
|
+
if (!form.dataset.endpoint) { help.textContent = 'Nothing was sent: this form is not connected yet.'; return; }
|
|
344
|
+
fetch(form.dataset.endpoint, { method: 'POST', body: new FormData(form) })
|
|
345
|
+
.then((r) => { help.textContent = r.ok ? 'Thanks. On-sales go to ' + input.value.trim() + '.' : 'That did not go through. Try again in a minute.'; })
|
|
346
|
+
.catch(() => { help.textContent = 'That did not go through. Try again in a minute.'; });
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
window.hallmarkSlots = (m) => { for (const [k, v] of Object.entries(m)) { const s = document.querySelector(`[data-slot="${k}"]`); if (!s) continue; const im = new Image(); im.src = typeof v === 'string' ? v : v.src; im.alt = (typeof v === 'object' && v.alt) || s.dataset.alt || ''; s.querySelectorAll(':scope > img').forEach((o) => o.remove()); s.prepend(im); } };
|
|
350
|
+
document.querySelectorAll('[data-slot] > img').forEach((i) => { if (i.complete && !i.naturalWidth) i.remove(); else i.addEventListener('error', () => i.remove(), { once: true }); });
|
|
351
|
+
</script>
|
|
352
|
+
</body>
|
|
353
|
+
</html>
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<!--
|
|
3
|
+
Gate 54 fixture: MUST FAIL, six times.
|
|
4
|
+
|
|
5
|
+
Every case here was invisible to the pre-1.3 detector, which keyed on
|
|
6
|
+
`grid-template-columns` in the CSS and so only ever saw one geometry.
|
|
7
|
+
Assertion (run from this directory):
|
|
8
|
+
|
|
9
|
+
node ../../sloplint.mjs . --json | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>console.log(JSON.parse(s).findings.filter(f=>f.gate==='54'&&f.grade==='FAIL').length))"
|
|
10
|
+
# expected: 6
|
|
11
|
+
|
|
12
|
+
Scoped to gate 54 on purpose: this file is deliberately slop in other ways too.
|
|
13
|
+
-->
|
|
14
|
+
<html lang="en">
|
|
15
|
+
<head>
|
|
16
|
+
<meta charset="utf-8">
|
|
17
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
18
|
+
<title>Gate 54 eyebrow fixture (must fail)</title>
|
|
19
|
+
<style>
|
|
20
|
+
/* Hallmark · macrostructure: fixture · tone: n/a · anchor hue: 250 · hero: Settled/H1 */
|
|
21
|
+
/* Hallmark · pre-emit critique: P3 H3 E3 S3 R3 V3 · weakest: all - this is a fixture */
|
|
22
|
+
:root {
|
|
23
|
+
--color-paper: oklch(97% 0.006 250); --color-ink: oklch(20% 0.02 250);
|
|
24
|
+
--color-muted: oklch(52% 0.015 250);
|
|
25
|
+
--font-display: "Fraunces", serif; --font-body: "Public Sans", sans-serif;
|
|
26
|
+
--font-label: "Geist Mono", monospace;
|
|
27
|
+
--text-xs: 0.75rem; --tracking-label: 0.12em;
|
|
28
|
+
}
|
|
29
|
+
html, body { overflow-x: clip; }
|
|
30
|
+
body { background: var(--color-paper); color: var(--color-ink); font-family: var(--font-body); }
|
|
31
|
+
h1, h2, h3 { font-family: var(--font-display); }
|
|
32
|
+
|
|
33
|
+
/* 1: flex column. No grid anywhere; the old check could not see this. */
|
|
34
|
+
.a__head { display: flex; flex-direction: column; gap: 0.5rem; }
|
|
35
|
+
.a__eyebrow { font-family: var(--font-label); text-transform: uppercase;
|
|
36
|
+
letter-spacing: var(--tracking-label); font-size: var(--text-xs); color: var(--color-muted); }
|
|
37
|
+
|
|
38
|
+
/* 2: plain block stack, and a class name outside the label vocabulary.
|
|
39
|
+
Caught by resolved CSS alone: uppercase + tracking + small size. */
|
|
40
|
+
.b__strand { text-transform: uppercase; letter-spacing: 0.14em; font-size: 0.75rem;
|
|
41
|
+
color: var(--color-muted); }
|
|
42
|
+
|
|
43
|
+
/* 3: the classic side-by-side grid. Regression guard for the old behaviour. */
|
|
44
|
+
.c__head { display: grid; grid-template-columns: minmax(0, 0.4fr) minmax(0, 1fr); gap: 2rem; }
|
|
45
|
+
|
|
46
|
+
/* 4: multi-column head declared ONLY inside a max-width block. The old check
|
|
47
|
+
skipped every max-width rule, so this shape was a free pass. */
|
|
48
|
+
@media (max-width: 48rem) {
|
|
49
|
+
.d__head { display: grid; grid-template-columns: 1fr 2fr; }
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* 5: class-less heading. The old check required a semantic match on the head
|
|
53
|
+
wrapper's own classes to even look. */
|
|
54
|
+
.e__mark { font-family: var(--font-label); text-transform: uppercase;
|
|
55
|
+
letter-spacing: 0.1em; font-size: 0.75rem; }
|
|
56
|
+
|
|
57
|
+
/* 6: "overline" was not in the old vocabulary at all. */
|
|
58
|
+
.overline { font-size: 0.75rem; letter-spacing: 0.16em; text-transform: uppercase; }
|
|
59
|
+
</style>
|
|
60
|
+
</head>
|
|
61
|
+
<body>
|
|
62
|
+
|
|
63
|
+
<!-- 1 · flex column stack -->
|
|
64
|
+
<section>
|
|
65
|
+
<div class="a__head">
|
|
66
|
+
<p class="a__eyebrow">01 · The tour</p>
|
|
67
|
+
<h2>Everything in one pass</h2>
|
|
68
|
+
</div>
|
|
69
|
+
<p>Body copy.</p>
|
|
70
|
+
</section>
|
|
71
|
+
|
|
72
|
+
<!-- 2 · plain block stack, non-vocabulary class, CSS signals only -->
|
|
73
|
+
<section>
|
|
74
|
+
<div>
|
|
75
|
+
<p class="b__strand">Weather and tides</p>
|
|
76
|
+
<h2>Read the water before you launch</h2>
|
|
77
|
+
</div>
|
|
78
|
+
<p>Body copy.</p>
|
|
79
|
+
</section>
|
|
80
|
+
|
|
81
|
+
<!-- 3 · side-by-side grid (the only shape the old gate caught) -->
|
|
82
|
+
<section>
|
|
83
|
+
<div class="c__head">
|
|
84
|
+
<span class="eyebrow">02 / Features</span>
|
|
85
|
+
<h2>What it does</h2>
|
|
86
|
+
</div>
|
|
87
|
+
<p>Body copy.</p>
|
|
88
|
+
</section>
|
|
89
|
+
|
|
90
|
+
<!-- 4 · two-column head hidden inside a max-width query -->
|
|
91
|
+
<section>
|
|
92
|
+
<div class="d__head">
|
|
93
|
+
<span class="kicker">Chapter three</span>
|
|
94
|
+
<h2>The long crossing</h2>
|
|
95
|
+
</div>
|
|
96
|
+
<p>Body copy.</p>
|
|
97
|
+
</section>
|
|
98
|
+
|
|
99
|
+
<!-- 5 · class-less heading under a labelled span -->
|
|
100
|
+
<section>
|
|
101
|
+
<div>
|
|
102
|
+
<span class="e__mark">Introducing</span>
|
|
103
|
+
<h2>A quieter way to ship</h2>
|
|
104
|
+
</div>
|
|
105
|
+
<p>Body copy.</p>
|
|
106
|
+
</section>
|
|
107
|
+
|
|
108
|
+
<!-- 6 · the word the old vocabulary never knew -->
|
|
109
|
+
<section>
|
|
110
|
+
<div>
|
|
111
|
+
<p class="overline">Pricing</p>
|
|
112
|
+
<h2>Pay for what you send</h2>
|
|
113
|
+
</div>
|
|
114
|
+
<p>Body copy.</p>
|
|
115
|
+
</section>
|
|
116
|
+
|
|
117
|
+
</body>
|
|
118
|
+
</html>
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<!--
|
|
3
|
+
Gate 54 fixture: MUST NOT FAIL.
|
|
4
|
+
|
|
5
|
+
Ten shapes that look like an eyebrow to a naive detector and are not one.
|
|
6
|
+
Each carries a fact, a destination, or an identifier the reader would
|
|
7
|
+
otherwise lack: the exceptions gate 54 lists in references/gates.md.
|
|
8
|
+
|
|
9
|
+
Assertion (run from this directory):
|
|
10
|
+
|
|
11
|
+
node ../../sloplint.mjs . --json | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>console.log(JSON.parse(s).findings.filter(f=>f.gate==='54').length))"
|
|
12
|
+
# expected: 0
|
|
13
|
+
|
|
14
|
+
Scoped to gate 54: this file makes no claim to be clean on the other gates.
|
|
15
|
+
-->
|
|
16
|
+
<html lang="en">
|
|
17
|
+
<head>
|
|
18
|
+
<meta charset="utf-8">
|
|
19
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
20
|
+
<title>Gate 54 carve-out fixture (must pass)</title>
|
|
21
|
+
<meta name="description" content="Fragments that sit near a heading without announcing it; gate 54 must stay quiet on every one.">
|
|
22
|
+
<style>
|
|
23
|
+
/* Hallmark · shape: fixture · genre: editorial · theme: fixture (by request)
|
|
24
|
+
* hero: Settled · nav: none · footer: none · enrichment: none · signature: none, this is a gate 54 fixture
|
|
25
|
+
* axes: light/roman-serif/cool · posture: restrained · contrast: pass · fold: n/a · v2.0.0 */
|
|
26
|
+
/* Hallmark · pre-emit critique: P3 H3 E3 S3 R3 V3 · weakest: all, this is a fixture */
|
|
27
|
+
/* Hallmark · answered F21 · unrelated fragments in one file, not a single document outline */
|
|
28
|
+
:root {
|
|
29
|
+
--color-paper: oklch(97% 0.006 250); --color-ink: oklch(20% 0.02 250);
|
|
30
|
+
--color-muted: oklch(52% 0.015 250); --color-accent: oklch(52% 0.14 250); --color-accent-ink: oklch(98% 0.005 250);
|
|
31
|
+
--font-display: "Fraunces", serif; --font-body: "Public Sans", sans-serif;
|
|
32
|
+
--font-label: var(--font-body);
|
|
33
|
+
--text-xs: 0.8125rem;
|
|
34
|
+
}
|
|
35
|
+
html, body { overflow-x: clip; }
|
|
36
|
+
html { scrollbar-color: var(--color-muted) var(--color-paper); }
|
|
37
|
+
body { background: var(--color-paper); color: var(--color-ink); font-family: var(--font-body); caret-color: var(--color-accent); }
|
|
38
|
+
::selection { background: color-mix(in oklab, var(--color-accent) 22%, transparent); color: var(--color-ink); }
|
|
39
|
+
:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }
|
|
40
|
+
a:active, button:active { transform: translateY(1px); }
|
|
41
|
+
button:disabled { opacity: 0.55; cursor: not-allowed; }
|
|
42
|
+
h1, h2, h3, h4 { font-family: var(--font-display); text-wrap: balance; }
|
|
43
|
+
.label { font-family: var(--font-label); font-size: var(--text-xs); color: var(--color-muted); }
|
|
44
|
+
.steps { list-style: none; counter-reset: step; padding: 0; }
|
|
45
|
+
.steps li { counter-increment: step; }
|
|
46
|
+
.steps li h3::before { content: counter(step, decimal-leading-zero) " "; color: var(--color-muted); }
|
|
47
|
+
</style>
|
|
48
|
+
</head>
|
|
49
|
+
<body>
|
|
50
|
+
|
|
51
|
+
<!-- 1 · figcaption. Identifier, and it names something that is present. -->
|
|
52
|
+
<figure>
|
|
53
|
+
<figcaption class="label">Plate 4 · letterpress proof</figcaption>
|
|
54
|
+
<h3>Off the grid</h3>
|
|
55
|
+
</figure>
|
|
56
|
+
|
|
57
|
+
<!-- 2 · table column header. Identifier. -->
|
|
58
|
+
<table>
|
|
59
|
+
<thead><tr><th class="label">Weight</th><th class="label">Optical size</th></tr></thead>
|
|
60
|
+
<tbody><tr><td>240</td><td>14 pt</td></tr></tbody>
|
|
61
|
+
</table>
|
|
62
|
+
|
|
63
|
+
<!-- 3 · form field label. Identifier, bound to its control. -->
|
|
64
|
+
<form>
|
|
65
|
+
<div>
|
|
66
|
+
<label class="label" for="email">Email</label>
|
|
67
|
+
<h3>Where should the proofs go?</h3>
|
|
68
|
+
<input id="email" type="email">
|
|
69
|
+
</div>
|
|
70
|
+
</form>
|
|
71
|
+
|
|
72
|
+
<!-- 4 · nav label. Destination. -->
|
|
73
|
+
<nav>
|
|
74
|
+
<div>
|
|
75
|
+
<span class="label">Sections</span>
|
|
76
|
+
<h2 hidden>Navigation</h2>
|
|
77
|
+
<a href="/work">Work</a>
|
|
78
|
+
</div>
|
|
79
|
+
</nav>
|
|
80
|
+
|
|
81
|
+
<!-- 5 · dateline. Fact: the date appears nowhere else. -->
|
|
82
|
+
<article>
|
|
83
|
+
<p class="label"><time datetime="2026-03-14">14 March 2026</time> · Marta Silveira</p>
|
|
84
|
+
<h2>Notes from the second crossing</h2>
|
|
85
|
+
</article>
|
|
86
|
+
|
|
87
|
+
<!-- 6 · unit label AFTER the figure it labels. Order is the discriminator. -->
|
|
88
|
+
<section>
|
|
89
|
+
<div>
|
|
90
|
+
<p class="stat__num">42B</p>
|
|
91
|
+
<p class="label">events metered</p>
|
|
92
|
+
</div>
|
|
93
|
+
<h3>Throughput</h3>
|
|
94
|
+
</section>
|
|
95
|
+
|
|
96
|
+
<!-- 7 · code filename tab. Identifier: a real path. -->
|
|
97
|
+
<section>
|
|
98
|
+
<div>
|
|
99
|
+
<span class="label">server.ts</span>
|
|
100
|
+
<h4>Wire the handler</h4>
|
|
101
|
+
</div>
|
|
102
|
+
<pre><code>export default handler;</code></pre>
|
|
103
|
+
</section>
|
|
104
|
+
|
|
105
|
+
<!-- 8 · linked announcement chip. Destination, and it goes somewhere real. -->
|
|
106
|
+
<header>
|
|
107
|
+
<div>
|
|
108
|
+
<a class="label" href="/changelog/v2">Read the launch post</a>
|
|
109
|
+
<h1>Ship the whole crossing</h1>
|
|
110
|
+
</div>
|
|
111
|
+
</header>
|
|
112
|
+
|
|
113
|
+
<!-- 9 · live telemetry above a headline. Fact, and the digits prove it. -->
|
|
114
|
+
<section>
|
|
115
|
+
<div>
|
|
116
|
+
<p class="label">Live · 2,318 watching the drop</p>
|
|
117
|
+
<h1>Winter capsule, one hour left</h1>
|
|
118
|
+
</div>
|
|
119
|
+
</section>
|
|
120
|
+
|
|
121
|
+
<!-- 10 · a real <ol>. The numbers come from counter(), not from typed labels;
|
|
122
|
+
a genuine per-step identifier rides along without becoming a kicker. -->
|
|
123
|
+
<ol class="steps">
|
|
124
|
+
<li>
|
|
125
|
+
<span class="label">Tue</span>
|
|
126
|
+
<h3>Arrive</h3>
|
|
127
|
+
<p>Collect the key from the harbour office.</p>
|
|
128
|
+
</li>
|
|
129
|
+
<li>
|
|
130
|
+
<span class="label">Wed</span>
|
|
131
|
+
<h3>Cross</h3>
|
|
132
|
+
<p>Six hours under sail, weather permitting.</p>
|
|
133
|
+
</li>
|
|
134
|
+
</ol>
|
|
135
|
+
|
|
136
|
+
</body>
|
|
137
|
+
</html>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>Kept fixture, the page after</title>
|
|
7
|
+
<meta name="description" content="A careless redesign: one link, one field, one handler, one test hook and one script hook are gone, and one heading is reworded.">
|
|
8
|
+
<style>
|
|
9
|
+
/* Hallmark · shape: fixture · genre: editorial · theme: fixture (by request) · redesign: full */
|
|
10
|
+
/* Hallmark · dropped mailto:desk@example.com · the desk address is retired and the form replaces it */
|
|
11
|
+
body { font-family: sans-serif; }
|
|
12
|
+
</style>
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<nav id="site-nav"><a href="#rates">Rates</a> <button id="menu-button" type="button">Menu</button></nav>
|
|
16
|
+
<h1>Rooms by the harbour</h1>
|
|
17
|
+
<h2 id="rates">What it costs</h2>
|
|
18
|
+
<p>From $120 a night. Breakfast until 10:30.</p>
|
|
19
|
+
<form action="https://example.com/api/book" method="post">
|
|
20
|
+
<input name="email" type="email">
|
|
21
|
+
<button type="submit">Book</button>
|
|
22
|
+
</form>
|
|
23
|
+
<script>
|
|
24
|
+
document.getElementById('nav-toggle').addEventListener('click', function () { document.querySelector('#site-nav').classList.toggle('is-open'); });
|
|
25
|
+
</script>
|
|
26
|
+
</body>
|
|
27
|
+
</html>
|