@nurix/etna 0.18.20 → 0.18.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/data/harness-index.json +1 -1
- package/data/harnesses/code/CLAUDE.md +3 -3
- package/data/harnesses/code/agents/brainstorm.md +1 -1
- package/data/harnesses/code/agents/maintenance.md +8 -7
- package/data/harnesses/code/harness.json +2 -2
- package/data/harnesses/code/rules/database.md +38 -0
- package/data/harnesses/code/rules/express.md +28 -0
- package/data/harnesses/code/rules/frontend.md +14 -0
- package/data/harnesses/code/rules/general.md +2 -40
- package/data/harnesses/code/rules/nomenclature.md +1 -8
- package/data/harnesses/code/rules/nustack.md +150 -0
- package/data/harnesses/code/skills/brainstorm/README.md +4 -4
- package/data/harnesses/code/skills/brainstorm/SKILL.md +5 -3
- package/data/harnesses/code/skills/brainstorm/exit-artifacts.md +15 -11
- package/data/harnesses/code/skills/brainstorm/templates/source-of-truth.md +5 -5
- package/data/harnesses/code/skills/design/SKILL.md +14 -11
- package/data/harnesses/code/skills/design/data/catalog/rules.csv +4 -4
- package/data/harnesses/code/skills/design/data/combinations/Readme.md +29 -0
- package/data/harnesses/code/skills/design/data/combinations/charts.csv +33 -0
- package/data/harnesses/code/skills/design/data/combinations/fonts-known.json +437 -0
- package/data/harnesses/code/skills/design/data/combinations/icons.csv +157 -0
- package/data/harnesses/code/skills/design/data/combinations/landing.csv +38 -0
- package/data/harnesses/code/skills/design/data/combinations/lucide-names.json +2001 -0
- package/data/harnesses/code/skills/design/data/combinations/manifest.json +283 -0
- package/data/harnesses/code/skills/design/data/combinations/palettes.csv +49 -0
- package/data/harnesses/code/skills/design/data/combinations/product-router.csv +80 -0
- package/data/harnesses/code/skills/design/data/combinations/styles.csv +54 -0
- package/data/harnesses/code/skills/design/data/combinations/typography.csv +61 -0
- package/data/harnesses/code/skills/design/data/design-md/SCHEMA.md +27 -238
- package/data/harnesses/code/skills/design/data/design-md/library/airbnb.md +7 -88
- package/data/harnesses/code/skills/design/data/design-md/library/airtable.md +1 -82
- package/data/harnesses/code/skills/design/data/design-md/library/anthropic-claude.md +4 -85
- package/data/harnesses/code/skills/design/data/design-md/library/apple.md +5 -86
- package/data/harnesses/code/skills/design/data/design-md/library/binance.md +4 -87
- package/data/harnesses/code/skills/design/data/design-md/library/bmw.md +7 -86
- package/data/harnesses/code/skills/design/data/design-md/library/cal.md +4 -84
- package/data/harnesses/code/skills/design/data/design-md/library/clay.md +5 -86
- package/data/harnesses/code/skills/design/data/design-md/library/clickhouse.md +3 -84
- package/data/harnesses/code/skills/design/data/design-md/library/cohere.md +2 -82
- package/data/harnesses/code/skills/design/data/design-md/library/coinbase.md +10 -91
- package/data/harnesses/code/skills/design/data/design-md/library/composio.md +2 -84
- package/data/harnesses/code/skills/design/data/design-md/library/cursor.md +3 -85
- package/data/harnesses/code/skills/design/data/design-md/library/elevenlabs.md +7 -90
- package/data/harnesses/code/skills/design/data/design-md/library/expo.md +0 -80
- package/data/harnesses/code/skills/design/data/design-md/library/figma.md +0 -80
- package/data/harnesses/code/skills/design/data/design-md/library/framer.md +5 -85
- package/data/harnesses/code/skills/design/data/design-md/library/hashicorp.md +2 -82
- package/data/harnesses/code/skills/design/data/design-md/library/ibm.md +5 -86
- package/data/harnesses/code/skills/design/data/design-md/library/intercom.md +9 -91
- package/data/harnesses/code/skills/design/data/design-md/library/kraken.md +9 -89
- package/data/harnesses/code/skills/design/data/design-md/library/linear-app.md +0 -115
- package/data/harnesses/code/skills/design/data/design-md/library/lovable.md +5 -85
- package/data/harnesses/code/skills/design/data/design-md/library/meta.md +7 -88
- package/data/harnesses/code/skills/design/data/design-md/library/minimax.md +3 -84
- package/data/harnesses/code/skills/design/data/design-md/library/mintlify.md +4 -85
- package/data/harnesses/code/skills/design/data/design-md/library/miro.md +8 -88
- package/data/harnesses/code/skills/design/data/design-md/library/mistral-ai.md +8 -88
- package/data/harnesses/code/skills/design/data/design-md/library/mongodb.md +4 -85
- package/data/harnesses/code/skills/design/data/design-md/library/notion.md +4 -84
- package/data/harnesses/code/skills/design/data/design-md/library/nvidia.md +7 -88
- package/data/harnesses/code/skills/design/data/design-md/library/ollama.md +5 -86
- package/data/harnesses/code/skills/design/data/design-md/library/opencode-ai.md +6 -87
- package/data/harnesses/code/skills/design/data/design-md/library/posthog.md +9 -91
- package/data/harnesses/code/skills/design/data/design-md/library/raycast.md +5 -88
- package/data/harnesses/code/skills/design/data/design-md/library/replicate.md +9 -89
- package/data/harnesses/code/skills/design/data/design-md/library/resend.md +4 -119
- package/data/harnesses/code/skills/design/data/design-md/library/revolut.md +4 -84
- package/data/harnesses/code/skills/design/data/design-md/library/runwayml.md +0 -82
- package/data/harnesses/code/skills/design/data/design-md/library/sanity.md +3 -86
- package/data/harnesses/code/skills/design/data/design-md/library/sentry.md +13 -94
- package/data/harnesses/code/skills/design/data/design-md/library/shopify.md +2 -82
- package/data/harnesses/code/skills/design/data/design-md/library/slack.md +6 -88
- package/data/harnesses/code/skills/design/data/design-md/library/spacex.md +13 -94
- package/data/harnesses/code/skills/design/data/design-md/library/spotify.md +4 -86
- package/data/harnesses/code/skills/design/data/design-md/library/stripe.md +7 -88
- package/data/harnesses/code/skills/design/data/design-md/library/supabase.md +6 -88
- package/data/harnesses/code/skills/design/data/design-md/library/superhuman.md +5 -86
- package/data/harnesses/code/skills/design/data/design-md/library/tesla.md +6 -86
- package/data/harnesses/code/skills/design/data/design-md/library/theverge.md +12 -93
- package/data/harnesses/code/skills/design/data/design-md/library/together-ai.md +11 -91
- package/data/harnesses/code/skills/design/data/design-md/library/uber.md +8 -88
- package/data/harnesses/code/skills/design/data/design-md/library/vercel.md +2 -82
- package/data/harnesses/code/skills/design/data/design-md/library/voltagent.md +11 -126
- package/data/harnesses/code/skills/design/data/design-md/library/warp.md +8 -88
- package/data/harnesses/code/skills/design/data/design-md/library/webflow.md +3 -83
- package/data/harnesses/code/skills/design/data/design-md/library/wired.md +10 -91
- package/data/harnesses/code/skills/design/data/design-md/library/wise.md +7 -90
- package/data/harnesses/code/skills/design/data/design-md/library/x-ai.md +6 -88
- package/data/harnesses/code/skills/design/data/design-md/library/zapier.md +9 -89
- package/data/harnesses/code/skills/design/data/design-md/nurix.md +4 -87
- package/data/harnesses/code/skills/design/data/design-tokens/SCHEMA.md +580 -0
- package/data/harnesses/code/skills/design/data/design-tokens/airbnb/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/airbnb/design.tokens.json +964 -0
- package/data/harnesses/code/skills/design/data/design-tokens/airtable/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/airtable/design.tokens.json +960 -0
- package/data/harnesses/code/skills/design/data/design-tokens/anthropic-claude/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/anthropic-claude/design.tokens.json +965 -0
- package/data/harnesses/code/skills/design/data/design-tokens/apple/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/apple/design.tokens.json +954 -0
- package/data/harnesses/code/skills/design/data/design-tokens/binance/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/binance/design.tokens.json +949 -0
- package/data/harnesses/code/skills/design/data/design-tokens/bmw/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/bmw/design.tokens.json +962 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cal/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cal/design.tokens.json +958 -0
- package/data/harnesses/code/skills/design/data/design-tokens/clay/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/clay/design.tokens.json +953 -0
- package/data/harnesses/code/skills/design/data/design-tokens/clickhouse/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/clickhouse/design.tokens.json +960 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cohere/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cohere/design.tokens.json +973 -0
- package/data/harnesses/code/skills/design/data/design-tokens/coinbase/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/coinbase/design.tokens.json +954 -0
- package/data/harnesses/code/skills/design/data/design-tokens/composio/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/composio/design.tokens.json +963 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cursor/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cursor/design.tokens.json +968 -0
- package/data/harnesses/code/skills/design/data/design-tokens/elevenlabs/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/elevenlabs/design.tokens.json +981 -0
- package/data/harnesses/code/skills/design/data/design-tokens/expo/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/expo/design.tokens.json +962 -0
- package/data/harnesses/code/skills/design/data/design-tokens/figma/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/figma/design.tokens.json +964 -0
- package/data/harnesses/code/skills/design/data/design-tokens/framer/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/framer/design.tokens.json +959 -0
- package/data/harnesses/code/skills/design/data/design-tokens/goldens.json +251 -0
- package/data/harnesses/code/skills/design/data/design-tokens/hashicorp/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/hashicorp/design.tokens.json +965 -0
- package/data/harnesses/code/skills/design/data/design-tokens/ibm/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/ibm/design.tokens.json +978 -0
- package/data/harnesses/code/skills/design/data/design-tokens/intercom/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/intercom/design.tokens.json +982 -0
- package/data/harnesses/code/skills/design/data/design-tokens/kraken/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/kraken/design.tokens.json +958 -0
- package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.resolver.json +23 -0
- package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.tokens.dark.json +589 -0
- package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.tokens.json +964 -0
- package/data/harnesses/code/skills/design/data/design-tokens/lovable/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/lovable/design.tokens.json +955 -0
- package/data/harnesses/code/skills/design/data/design-tokens/meta/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/meta/design.tokens.json +977 -0
- package/data/harnesses/code/skills/design/data/design-tokens/minimax/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/minimax/design.tokens.json +950 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mintlify/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mintlify/design.tokens.json +976 -0
- package/data/harnesses/code/skills/design/data/design-tokens/miro/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/miro/design.tokens.json +979 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mistral-ai/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mistral-ai/design.tokens.json +955 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mongodb/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mongodb/design.tokens.json +958 -0
- package/data/harnesses/code/skills/design/data/design-tokens/notion/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/notion/design.tokens.json +953 -0
- package/data/harnesses/code/skills/design/data/design-tokens/nurix/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/nurix/design.tokens.json +904 -0
- package/data/harnesses/code/skills/design/data/design-tokens/nvidia/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/nvidia/design.tokens.json +957 -0
- package/data/harnesses/code/skills/design/data/design-tokens/ollama/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/ollama/design.tokens.json +945 -0
- package/data/harnesses/code/skills/design/data/design-tokens/opencode-ai/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/opencode-ai/design.tokens.json +960 -0
- package/data/harnesses/code/skills/design/data/design-tokens/posthog/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/posthog/design.tokens.json +953 -0
- package/data/harnesses/code/skills/design/data/design-tokens/raycast/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/raycast/design.tokens.json +955 -0
- package/data/harnesses/code/skills/design/data/design-tokens/replicate/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/replicate/design.tokens.json +958 -0
- package/data/harnesses/code/skills/design/data/design-tokens/resend/design.resolver.json +23 -0
- package/data/harnesses/code/skills/design/data/design-tokens/resend/design.tokens.dark.json +613 -0
- package/data/harnesses/code/skills/design/data/design-tokens/resend/design.tokens.json +968 -0
- package/data/harnesses/code/skills/design/data/design-tokens/revolut/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/revolut/design.tokens.json +956 -0
- package/data/harnesses/code/skills/design/data/design-tokens/runwayml/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/runwayml/design.tokens.json +960 -0
- package/data/harnesses/code/skills/design/data/design-tokens/sanity/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/sanity/design.tokens.json +958 -0
- package/data/harnesses/code/skills/design/data/design-tokens/sentry/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/sentry/design.tokens.json +980 -0
- package/data/harnesses/code/skills/design/data/design-tokens/shopify/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/shopify/design.tokens.json +964 -0
- package/data/harnesses/code/skills/design/data/design-tokens/slack/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/slack/design.tokens.json +957 -0
- package/data/harnesses/code/skills/design/data/design-tokens/spacex/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/spacex/design.tokens.json +979 -0
- package/data/harnesses/code/skills/design/data/design-tokens/spotify/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/spotify/design.tokens.json +974 -0
- package/data/harnesses/code/skills/design/data/design-tokens/stripe/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/stripe/design.tokens.json +973 -0
- package/data/harnesses/code/skills/design/data/design-tokens/supabase/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/supabase/design.tokens.json +979 -0
- package/data/harnesses/code/skills/design/data/design-tokens/superhuman/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/superhuman/design.tokens.json +966 -0
- package/data/harnesses/code/skills/design/data/design-tokens/tesla/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/tesla/design.tokens.json +961 -0
- package/data/harnesses/code/skills/design/data/design-tokens/theverge/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/theverge/design.tokens.json +977 -0
- package/data/harnesses/code/skills/design/data/design-tokens/together-ai/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/together-ai/design.tokens.json +991 -0
- package/data/harnesses/code/skills/design/data/design-tokens/uber/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/uber/design.tokens.json +966 -0
- package/data/harnesses/code/skills/design/data/design-tokens/vercel/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/vercel/design.tokens.json +988 -0
- package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.resolver.json +23 -0
- package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.tokens.dark.json +602 -0
- package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.tokens.json +974 -0
- package/data/harnesses/code/skills/design/data/design-tokens/warp/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/warp/design.tokens.json +979 -0
- package/data/harnesses/code/skills/design/data/design-tokens/webflow/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/webflow/design.tokens.json +960 -0
- package/data/harnesses/code/skills/design/data/design-tokens/wired/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/wired/design.tokens.json +968 -0
- package/data/harnesses/code/skills/design/data/design-tokens/wise/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/wise/design.tokens.json +965 -0
- package/data/harnesses/code/skills/design/data/design-tokens/x-ai/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/x-ai/design.tokens.json +988 -0
- package/data/harnesses/code/skills/design/data/design-tokens/zapier/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/zapier/design.tokens.json +978 -0
- package/data/harnesses/code/skills/design/data/operator-pack/surface-catalog.md +1 -1
- package/data/harnesses/code/skills/design/references/create.md +14 -9
- package/data/harnesses/code/skills/design/references/diagnosis.md +1 -1
- package/data/harnesses/code/skills/design/references/hard-rules.md +4 -4
- package/data/harnesses/code/skills/design/references/improve.md +11 -9
- package/data/harnesses/code/skills/design/references/introspect.md +1 -1
- package/data/harnesses/code/skills/design/references/personality.md +337 -413
- package/data/harnesses/code/skills/design/scripts/convert-design-md.mjs +1032 -0
- package/data/harnesses/code/skills/design/scripts/derive-personality.mjs +596 -296
- package/data/harnesses/code/skills/design/scripts/{detector.mjs → lib/checks.mjs} +145 -140
- package/data/harnesses/code/skills/design/scripts/lib/golden.mjs +26 -0
- package/data/harnesses/code/skills/design/scripts/phase-gate.mjs +105 -37
- package/data/harnesses/code/skills/design/scripts/preship-sweep.mjs +60 -73
- package/data/harnesses/code/skills/design/scripts/render-rung.mjs +1 -1
- package/data/harnesses/code/skills/design/scripts/scaffold.mjs +1 -1
- package/data/harnesses/code/skills/design/scripts/self-integrity.mjs +205 -37
- package/data/harnesses/code/skills/design/scripts/snapshot-goldens.mjs +68 -0
- package/data/harnesses/code/skills/design/scripts/validate-combinations.mjs +314 -0
- package/data/harnesses/code/skills/documentation/SKILL.md +61 -17
- package/data/harnesses/code/skills/documentation/references/examples.md +41 -0
- package/data/harnesses/code/skills/documentation/references/style-guide.md +14 -9
- package/data/harnesses/code/skills/documentation/references/templates.md +306 -52
- package/data/harnesses/etna/CLAUDE.md +3 -3
- package/data/harnesses/etna/agents/brainstorm.md +1 -1
- package/data/harnesses/etna/agents/maintenance.md +8 -7
- package/data/harnesses/etna/harness.json +2 -2
- package/data/harnesses/etna/rules/general.md +2 -40
- package/data/harnesses/etna/rules/nomenclature.md +1 -8
- package/data/harnesses/etna/skills/brainstorm/README.md +4 -4
- package/data/harnesses/etna/skills/brainstorm/SKILL.md +5 -3
- package/data/harnesses/etna/skills/brainstorm/exit-artifacts.md +15 -11
- package/data/harnesses/etna/skills/brainstorm/templates/source-of-truth.md +5 -5
- package/data/harnesses/etna/skills/documentation/SKILL.md +61 -17
- package/data/harnesses/etna/skills/documentation/references/examples.md +41 -0
- package/data/harnesses/etna/skills/documentation/references/style-guide.md +14 -9
- package/data/harnesses/etna/skills/documentation/references/templates.md +306 -52
- package/data/harnesses/mobile/CLAUDE.md +3 -3
- package/data/harnesses/mobile/agents/brainstorm.md +1 -1
- package/data/harnesses/mobile/agents/maintenance.md +8 -7
- package/data/harnesses/mobile/harness.json +2 -2
- package/data/harnesses/mobile/rules/database.md +38 -0
- package/data/harnesses/mobile/rules/general.md +2 -40
- package/data/harnesses/mobile/rules/nomenclature.md +1 -8
- package/data/harnesses/mobile/rules/nustack.md +150 -0
- package/data/harnesses/mobile/skills/brainstorm/README.md +4 -4
- package/data/harnesses/mobile/skills/brainstorm/SKILL.md +5 -3
- package/data/harnesses/mobile/skills/brainstorm/exit-artifacts.md +15 -11
- package/data/harnesses/mobile/skills/brainstorm/templates/source-of-truth.md +5 -5
- package/data/harnesses/mobile/skills/documentation/SKILL.md +61 -17
- package/data/harnesses/mobile/skills/documentation/references/examples.md +41 -0
- package/data/harnesses/mobile/skills/documentation/references/style-guide.md +14 -9
- package/data/harnesses/mobile/skills/documentation/references/templates.md +306 -52
- package/package.json +1 -1
- package/data/harnesses/code/skills/design/scripts/hook-config.json +0 -11
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
# design.md —
|
|
1
|
+
# design.md — the library's documentation format (`design-md/v1`)
|
|
2
2
|
|
|
3
3
|
A `design.md` is one operator UI's brand document: nine prose sections that describe the look for a
|
|
4
|
-
human
|
|
5
|
-
|
|
4
|
+
human reader and the emitting agent. It is **documentation, not transport** — the machine contract
|
|
5
|
+
lives in the design-tokens artifact ([`../design-tokens/SCHEMA.md`](../design-tokens/SCHEMA.md)):
|
|
6
|
+
every library entry's derivable values sit in its token twin at `data/design-tokens/<slug>/`
|
|
7
|
+
(slug = the entry's filename without `.md`), and look resolution, precedence, provenance, hints,
|
|
8
|
+
and validation are all defined there. No script parses a `design.md`.
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
field. Downstream is unchanged: whichever document resolves, personality synthesis derives the 26
|
|
11
|
-
primitive values and dial defaults from the same two blocks.
|
|
10
|
+
The prose earns its place by carrying what tokens cannot: the identity a stranger could repeat,
|
|
11
|
+
usage rules ("indigo only on the primary action"), the scarce judgments the Agent Prompt Guide
|
|
12
|
+
hands the emitting agent verbatim. A good entry is concrete and checkable, not adjectival.
|
|
12
13
|
|
|
13
14
|
---
|
|
14
15
|
|
|
@@ -18,40 +19,24 @@ primitive values and dial defaults from the same two blocks.
|
|
|
18
19
|
---
|
|
19
20
|
schema: design-md/v1
|
|
20
21
|
product: Meridian
|
|
21
|
-
provenance:
|
|
22
|
+
provenance: library # retained for lineage; the machine path reads only the token artifact's payload
|
|
22
23
|
sourced: 2026-07-04
|
|
23
24
|
---
|
|
24
25
|
```
|
|
25
26
|
|
|
26
27
|
| Field | Required | Value |
|
|
27
28
|
| --- | --- | --- |
|
|
28
|
-
| `schema` | yes | Literal `design-md/v1`.
|
|
29
|
-
| `product` | yes | The product name
|
|
30
|
-
| `provenance` | yes |
|
|
31
|
-
| `sourced` | yes | ISO date the document was authored
|
|
32
|
-
|
|
33
|
-
## Provenance and precedence
|
|
34
|
-
|
|
35
|
-
Four legal `provenance` values; three resolution origins. Look resolution reads `design.md`-first
|
|
36
|
-
and never applies a library match silently (D29/D30 — **propose-confirm**).
|
|
37
|
-
|
|
38
|
-
| Value | Origin | Precedence |
|
|
39
|
-
| --- | --- | --- |
|
|
40
|
-
| `project` | The project's own `design.md` at repo root, authored by a create run. | **Wins outright** when present. |
|
|
41
|
-
| `extracted` | The project's manifest, recovered from a UI this skill did not build (improve extracts it before touching code — D10). | Same tier as `project`: once written it *is* the project's lever manifest. |
|
|
42
|
-
| `library` | A shipped named-product entry (`library/<product>.md`). | Serves only when the brief names or resembles the product **and the user confirms**. Never applied on inference alone. |
|
|
43
|
-
| `default` | The Nurix default ([`nurix.md`](nurix.md)). | Worn when there is no project document and no confirmed library match. Zero input → default; the default *is* the confirmation. |
|
|
44
|
-
|
|
45
|
-
Matching is propose-confirm: the skill may propose a `library` entry from brief resemblance, presents
|
|
46
|
-
it once, and applies it only on confirmation. The project's own document always beats a proposal.
|
|
29
|
+
| `schema` | yes | Literal `design-md/v1`. |
|
|
30
|
+
| `product` | yes | The product name; matches the token twin's payload `product`. |
|
|
31
|
+
| `provenance` | yes | Lineage note. Authoritative provenance is the token artifact's payload field. |
|
|
32
|
+
| `sourced` | yes | ISO date the document was authored or last re-sourced. |
|
|
47
33
|
|
|
48
34
|
---
|
|
49
35
|
|
|
50
36
|
## The nine prose sections
|
|
51
37
|
|
|
52
38
|
Fixed order. Each is human-facing narration; cite roles and token names, never bare literals in the
|
|
53
|
-
component/layout prose (the values live in the
|
|
54
|
-
not adjectival.
|
|
39
|
+
component/layout prose (the values live in the token twin).
|
|
55
40
|
|
|
56
41
|
| # | Section | What belongs · what a good entry looks like |
|
|
57
42
|
| --- | --- | --- |
|
|
@@ -63,144 +48,28 @@ not adjectival.
|
|
|
63
48
|
| 6 | **Depth** | The elevation strategy: surface ladder vs shadow, hairline discipline, the focus-ring treatment, the z-index scale. Names levels `0..n` with treatment and use; states whether shadow or surface carries hierarchy. |
|
|
64
49
|
| 7 | **Do's & Don'ts** | The enforceable taste rules unique to this brand — reserve the accent, never pill the CTA, never a second chromatic accent. Imperative bullets, each checkable; every don't names the specific off-brand move. |
|
|
65
50
|
| 8 | **Responsive** | Breakpoints and the collapse strategy across the operator sweep (375 / 768 / 1024 / 1440): nav collapse, grid re-flow, side-panel → sheet, density steps. Reads `breakpoint → what changes`. |
|
|
66
|
-
| 9 | **Agent Prompt Guide** | Directives the emitting agent follows verbatim: what to reach for first, the invariants, the scarce elements the
|
|
51
|
+
| 9 | **Agent Prompt Guide** | Directives the emitting agent follows verbatim: what to reach for first, the invariants, the scarce elements the token artifact can't carry (e.g. "lead every queue with the table; accent only on the primary action"). |
|
|
67
52
|
|
|
68
53
|
---
|
|
69
54
|
|
|
70
|
-
##
|
|
71
|
-
|
|
72
|
-
Fenced as ` ```yaml design-primitives `. Carries **all 26 visual primitives** (names below, without
|
|
73
|
-
the leading `--`) plus the two behavioral dials, the density tier, and the product-type traits. Every
|
|
74
|
-
key is either a concrete value or a `hint:` (the hint convention, below).
|
|
75
|
-
|
|
76
|
-
| Family | Key | Type / unit | Example |
|
|
77
|
-
| --- | --- | --- | --- |
|
|
78
|
-
| geometric | `radius` | length | `6px` |
|
|
79
|
-
| | `shadow-intensity` | 0–1 multiplier on `--shadow-*` | `0.5` |
|
|
80
|
-
| | `border-weight` | length | `1px` |
|
|
81
|
-
| | `density-gap` | multiplier on the `0.25rem` spacing base | `0.85` |
|
|
82
|
-
| | `density-inset` | multiplier on component insets | `0.85` |
|
|
83
|
-
| typographic | `font-sans` | font stack | `Inter, system-ui, sans-serif` |
|
|
84
|
-
| | `font-mono` | font stack | `JetBrains Mono, ui-monospace, monospace` |
|
|
85
|
-
| | `font-weight-normal` | 100–900 | `400` |
|
|
86
|
-
| | `font-weight-strong` | 100–900 | `600` |
|
|
87
|
-
| | `heading-tracking` | em/px tracking | `-0.01em` |
|
|
88
|
-
| temporal | `duration-unit` | ms base | `50ms` |
|
|
89
|
-
| | `duration-fast` | ms | `100ms` |
|
|
90
|
-
| | `duration-normal` | ms | `150ms` |
|
|
91
|
-
| | `duration-slow` | ms | `250ms` |
|
|
92
|
-
| | `ease-default` | cubic-bezier | `cubic-bezier(0.4,0,0.2,1)` |
|
|
93
|
-
| surface | `contrast-boost` | multiplier (1 = default) | `1` |
|
|
94
|
-
| iconography | `icon-stroke` | px stroke-width | `1.75` |
|
|
95
|
-
| | `icon-size-base` | length | `16px` |
|
|
96
|
-
| layout | `sidebar-width-expanded` | length | `248px` |
|
|
97
|
-
| | `sidebar-width-collapsed` | length | `56px` |
|
|
98
|
-
| | `topbar-height` | length | `52px` |
|
|
99
|
-
| | `side-panel-width` | length | `420px` |
|
|
100
|
-
| | `side-panel-width-rich` | length | `640px` |
|
|
101
|
-
| | `modal-width-max` | length | `560px` |
|
|
102
|
-
| | `form-max-width` | length | `640px` |
|
|
103
|
-
| | `table-row-height` | length | `40px` |
|
|
104
|
-
|
|
105
|
-
Then the dials and traits:
|
|
106
|
-
|
|
107
|
-
| Key | Values | Note |
|
|
108
|
-
| --- | --- | --- |
|
|
109
|
-
| `verbosity` | `full` \| `default` \| `compact` \| `expert` | Emits `data-verbosity` on `<html>` (D4). |
|
|
110
|
-
| `feedback` | `subtle` \| `minimal` | Emits `data-feedback` (D4). |
|
|
111
|
-
| `density-tier` | `spacious` \| `standard` \| `dense` | The global tier (D31); emits `data-density`; drives `density-gap`/`density-inset` coherently. |
|
|
112
|
-
| `product-traits` | list of trait slugs | Product-type signals the front gate reads (D30) — e.g. `[review-queue, case-detail, fintech]`. Non-empty. |
|
|
113
|
-
|
|
114
|
-
**Derived, never stored.** Emission computes `--ease-enter`, `--ease-exit`, and `--stagger-delay` from
|
|
115
|
-
`ease-default` and `duration-unit`. They are not among the 26, not authored in the block, and not part
|
|
116
|
-
of the coverage gate. Do not add them.
|
|
117
|
-
|
|
118
|
-
## Machine block 2 — `lever-manifest`
|
|
119
|
-
|
|
120
|
-
Fenced as ` ```yaml lever-manifest `. The machine-readable **allowlist** the drift check reads (D10/D19):
|
|
121
|
-
[`detector.mjs`](../../scripts/detector.mjs) flags any emitted value outside this vocabulary — a radius
|
|
122
|
-
not in `radius-scale`, a color that is not one of these tokens, a spacing off `spacing-scale`, a motion
|
|
123
|
-
duration off `motion.durations`.
|
|
124
|
-
|
|
125
|
-
```yaml
|
|
126
|
-
version: 1
|
|
127
|
-
fonts: { sans: "…", mono: "…" } # match font-sans / font-mono
|
|
128
|
-
color-tokens:
|
|
129
|
-
light: { … 17 semantic + 17 substrate tokens, every one valued … }
|
|
130
|
-
spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64] # px, on-scale values ONLY, ascending
|
|
131
|
-
radius-scale: [0, 4, 6, 12, 9999] # px, ascending
|
|
132
|
-
shadow-levels: [none, sm, md] # ordered by increasing intensity
|
|
133
|
-
motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] } # ms, ascending
|
|
134
|
-
icons: { family: lucide, stroke: 1.75 }
|
|
135
|
-
accent-count: 1
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
`color-tokens.light` must value **every** token below. Dark is opt-in; when a project ships dark, add a
|
|
139
|
-
parallel `dark:` map — light is never omitted.
|
|
140
|
-
|
|
141
|
-
- **Semantic (17):** `background` · `foreground` · `card` · `card-foreground` · `muted` ·
|
|
142
|
-
`muted-foreground` · `border` · `input` · `ring` · `primary` · `primary-foreground` · `accent` ·
|
|
143
|
-
`accent-foreground` · `destructive` · `destructive-foreground` · `success` · `warning`.
|
|
144
|
-
- **Substrate (17, the D6 set):** `popover` · `popover-foreground` · `secondary` · `secondary-foreground` ·
|
|
145
|
-
`chart-1` · `chart-2` · `chart-3` · `chart-4` · `chart-5` · `sidebar` · `sidebar-foreground` ·
|
|
146
|
-
`sidebar-primary` · `sidebar-primary-foreground` · `sidebar-accent` · `sidebar-accent-foreground` ·
|
|
147
|
-
`sidebar-border` · `sidebar-ring`.
|
|
55
|
+
## The token twin
|
|
148
56
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
with `hint:` followed by the intent in plain words.
|
|
157
|
-
|
|
158
|
-
```yaml
|
|
159
|
-
contrast-boost: hint: nudge borders up a step so the dense table grid reads as a grid
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
A hint **passes** the coverage gate (`--check`) — the key is present and un-missing. It does not pass
|
|
163
|
-
emission: `derive-personality.mjs --emit` resolves each hint to a concrete value by judgment and
|
|
164
|
-
**records its rationale back into the document**, rewriting the line so the resolved document is
|
|
165
|
-
self-explaining and re-derivable:
|
|
166
|
-
|
|
167
|
-
```yaml
|
|
168
|
-
contrast-boost: 1.1 # derived: dense-grid brief → one step up (was hint)
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
After resolution no bare `hint:` remains; a re-run of `--check` sees only concrete values. Judgment is
|
|
172
|
-
recorded, never silent (D29).
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
## Validation — what `derive-personality.mjs --check` enforces
|
|
177
|
-
|
|
178
|
-
The coverage gate. It exits non-zero and **names every offending key** so the fix is mechanical.
|
|
179
|
-
|
|
180
|
-
1. **Frontmatter** present with `schema: design-md/v1` and a legal `provenance`.
|
|
181
|
-
2. **Both blocks present and parseable** — exactly one `design-primitives` and one `lever-manifest`
|
|
182
|
-
fenced YAML block.
|
|
183
|
-
3. **Every primitive assigned or hinted** — all 26 keys present as a value or a `hint:`; fails naming
|
|
184
|
-
any absent key.
|
|
185
|
-
4. **Every dial and the tier assigned** — `verbosity`, `feedback`, `density-tier` set to a legal value;
|
|
186
|
-
`product-traits` a non-empty list.
|
|
187
|
-
5. **Every color token valued** — all 17 semantic + 17 substrate tokens present in
|
|
188
|
-
`color-tokens.light` with a non-empty value; fails naming any missing token.
|
|
189
|
-
6. **Scales non-empty and sorted** — `spacing-scale`, `radius-scale`, and `motion.durations` non-empty
|
|
190
|
-
and ascending; `shadow-levels` non-empty and ordered by intensity; `motion.easings`, `fonts.sans`,
|
|
191
|
-
`fonts.mono` non-empty; `icons.family`/`icons.stroke` present; `accent-count` ≥ 1.
|
|
192
|
-
|
|
193
|
-
A document that passes `--check` is guaranteed derivable — every primitive, dial, and substrate token
|
|
194
|
-
is assigned or hinted before token emission may run (never best-effort, D6/D29).
|
|
57
|
+
Every library entry pairs with a design-tokens artifact at `data/design-tokens/<slug>/` — the
|
|
58
|
+
derivable half: primitives, the 34 color roles, the typography ramp, dials, traits, and the lever
|
|
59
|
+
manifest, with per-value rationale carried in each token's `$description`.
|
|
60
|
+
[`convert-design-md.mjs`](../../scripts/convert-design-md.mjs) generated the twins from the corpus;
|
|
61
|
+
a **new** library entry authors both halves — the token artifact against the token schema (validated
|
|
62
|
+
by `derive-personality.mjs <dir> --check`), and this document for the reader. When the two could
|
|
63
|
+
disagree, the token artifact is canonical.
|
|
195
64
|
|
|
196
65
|
---
|
|
197
66
|
|
|
198
67
|
## Worked example — Meridian (fictional fraud-review console)
|
|
199
68
|
|
|
200
|
-
|
|
201
|
-
|
|
69
|
+
Prose sketched to one line per section for brevity; Meridian's derivable values would live in its
|
|
70
|
+
token twin.
|
|
202
71
|
|
|
203
|
-
|
|
72
|
+
```markdown
|
|
204
73
|
---
|
|
205
74
|
schema: design-md/v1
|
|
206
75
|
product: Meridian
|
|
@@ -234,84 +103,4 @@ Do reserve indigo for the primary action. Don't pill the CTA; don't add a second
|
|
|
234
103
|
|
|
235
104
|
## 9 Agent Prompt Guide
|
|
236
105
|
Lead with the queue table; accent only the primary action; keep the case panel beside the work, never a modal.
|
|
237
|
-
|
|
238
|
-
```yaml design-primitives
|
|
239
|
-
radius: 6px
|
|
240
|
-
shadow-intensity: 0.5
|
|
241
|
-
border-weight: 1px
|
|
242
|
-
density-gap: 0.85
|
|
243
|
-
density-inset: 0.85
|
|
244
|
-
font-sans: Inter, system-ui, sans-serif
|
|
245
|
-
font-mono: JetBrains Mono, ui-monospace, monospace
|
|
246
|
-
font-weight-normal: 400
|
|
247
|
-
font-weight-strong: 600
|
|
248
|
-
heading-tracking: -0.01em
|
|
249
|
-
duration-unit: 50ms
|
|
250
|
-
duration-fast: 100ms
|
|
251
|
-
duration-normal: 150ms
|
|
252
|
-
duration-slow: 250ms
|
|
253
|
-
ease-default: cubic-bezier(0.4,0,0.2,1)
|
|
254
|
-
contrast-boost: 1
|
|
255
|
-
icon-stroke: 1.75
|
|
256
|
-
icon-size-base: 16px
|
|
257
|
-
sidebar-width-expanded: 248px
|
|
258
|
-
sidebar-width-collapsed: 56px
|
|
259
|
-
topbar-height: 52px
|
|
260
|
-
side-panel-width: 420px
|
|
261
|
-
side-panel-width-rich: 640px
|
|
262
|
-
modal-width-max: 560px
|
|
263
|
-
form-max-width: 640px
|
|
264
|
-
table-row-height: 40px
|
|
265
|
-
verbosity: default
|
|
266
|
-
feedback: subtle
|
|
267
|
-
density-tier: dense
|
|
268
|
-
product-traits: [review-queue, case-detail, fintech]
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
```yaml lever-manifest
|
|
272
|
-
version: 1
|
|
273
|
-
fonts: { sans: "Inter, system-ui, sans-serif", mono: "JetBrains Mono, ui-monospace, monospace" }
|
|
274
|
-
color-tokens:
|
|
275
|
-
light:
|
|
276
|
-
background: "#ffffff"
|
|
277
|
-
foreground: "#0f172a"
|
|
278
|
-
card: "#ffffff"
|
|
279
|
-
card-foreground: "#0f172a"
|
|
280
|
-
muted: "#f1f5f9"
|
|
281
|
-
muted-foreground: "#64748b"
|
|
282
|
-
border: "#e2e8f0"
|
|
283
|
-
input: "#e2e8f0"
|
|
284
|
-
ring: "#6366f1"
|
|
285
|
-
primary: "#4f46e5"
|
|
286
|
-
primary-foreground: "#ffffff"
|
|
287
|
-
accent: "#eef2ff"
|
|
288
|
-
accent-foreground: "#4f46e5"
|
|
289
|
-
destructive: "#dc2626"
|
|
290
|
-
destructive-foreground: "#ffffff"
|
|
291
|
-
success: "#16a34a"
|
|
292
|
-
warning: "#d97706"
|
|
293
|
-
popover: "#ffffff"
|
|
294
|
-
popover-foreground: "#0f172a"
|
|
295
|
-
secondary: "#f1f5f9"
|
|
296
|
-
secondary-foreground: "#0f172a"
|
|
297
|
-
chart-1: "#4f46e5"
|
|
298
|
-
chart-2: "#0ea5e9"
|
|
299
|
-
chart-3: "#16a34a"
|
|
300
|
-
chart-4: "#d97706"
|
|
301
|
-
chart-5: "#dc2626"
|
|
302
|
-
sidebar: "#f8fafc"
|
|
303
|
-
sidebar-foreground: "#0f172a"
|
|
304
|
-
sidebar-primary: "#4f46e5"
|
|
305
|
-
sidebar-primary-foreground: "#ffffff"
|
|
306
|
-
sidebar-accent: "#eef2ff"
|
|
307
|
-
sidebar-accent-foreground: "#4f46e5"
|
|
308
|
-
sidebar-border: "#e2e8f0"
|
|
309
|
-
sidebar-ring: "#6366f1"
|
|
310
|
-
spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
|
|
311
|
-
radius-scale: [0, 4, 6, 12, 9999]
|
|
312
|
-
shadow-levels: [none, sm, md]
|
|
313
|
-
motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
|
|
314
|
-
icons: { family: lucide, stroke: 1.75 }
|
|
315
|
-
accent-count: 1
|
|
316
106
|
```
|
|
317
|
-
````
|
|
@@ -9,12 +9,11 @@ sourced: 2026-07-04
|
|
|
9
9
|
|
|
10
10
|
The warm marketplace brand rendered for internal tools. Airbnb's public surfaces are photography-led
|
|
11
11
|
and generous; an operator surface wearing this brand keeps the palette, the single warm voltage, the
|
|
12
|
-
soft corners, and the modest type voice, but leaves the marketing chrome behind — the pill search
|
|
13
|
-
the 64px rating hero, the 80px nav, and the hand-illustrated product glyphs do not follow the
|
|
14
|
-
into a queue or a console. What carries is the feel: pure-white canvas, near-black ink (never
|
|
15
|
-
black), one Rausch accent used scarcely, flat depth with a single soft shadow tier, and rounded
|
|
16
|
-
everything.
|
|
17
|
-
`# derived:`.
|
|
12
|
+
soft corners, and the modest type voice, but leaves the marketing chrome behind — the pill search
|
|
13
|
+
bar, the 64px rating hero, the 80px nav, and the hand-illustrated product glyphs do not follow the
|
|
14
|
+
brand into a queue or a console. What carries is the feel: pure-white canvas, near-black ink (never
|
|
15
|
+
pure black), one Rausch accent used scarcely, flat depth with a single soft shadow tier, and rounded
|
|
16
|
+
everything.
|
|
18
17
|
|
|
19
18
|
## 1 Visual Theme
|
|
20
19
|
|
|
@@ -31,8 +30,8 @@ reading holds standard rather than airy.
|
|
|
31
30
|
|
|
32
31
|
## 2 Color Roles
|
|
33
32
|
|
|
34
|
-
Light values
|
|
35
|
-
only
|
|
33
|
+
Light values. One accent: Rausch is the only chromatic hue that carries meaning; status hues speak
|
|
34
|
+
only status.
|
|
36
35
|
|
|
37
36
|
| Role | Value | Allowed where |
|
|
38
37
|
| --- | --- | --- |
|
|
@@ -153,83 +152,3 @@ operator work.
|
|
|
153
152
|
- One accent. Luxe, Plus, and legal-blue are not operator colors here.
|
|
154
153
|
- Leave marketing behind: the pill search bar, the 64px rating hero, the 80px nav, hand-illustrated
|
|
155
154
|
glyphs, and gradients do not follow the brand into a console. Light only — dark is a foreign opt-in.
|
|
156
|
-
|
|
157
|
-
```yaml design-primitives
|
|
158
|
-
radius: 8px # derived: Airbnb's button/input radius (rounded.sm); cards step to 14px via the scale
|
|
159
|
-
shadow-intensity: 0.5 # derived: one soft shadow tier only; the system is otherwise flat
|
|
160
|
-
border-weight: 1px
|
|
161
|
-
density-gap: 1
|
|
162
|
-
density-inset: 1
|
|
163
|
-
font-sans: "Airbnb Cereal VF", Circular, Inter, system-ui, sans-serif
|
|
164
|
-
font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, monospace # derived: Airbnb ships no mono; operator IDs/codes/timestamps need one — JetBrains Mono pairs with Cereal's geometric character
|
|
165
|
-
font-weight-normal: 400
|
|
166
|
-
font-weight-strong: 600 # derived: Cereal runs modest weights (500-600); operator strong stops at 600, never the 700+ of fintech/enterprise
|
|
167
|
-
heading-tracking: -0.01em # derived: Cereal's larger display steps track slightly negative (-0.18/-0.44px)
|
|
168
|
-
duration-unit: 50ms
|
|
169
|
-
duration-fast: 150ms # derived: corpus silent on motion; a warm brand runs a touch softer than a dense console
|
|
170
|
-
duration-normal: 200ms # derived: corpus silent on motion
|
|
171
|
-
duration-slow: 300ms # derived: corpus silent on motion
|
|
172
|
-
ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent; standard material ease
|
|
173
|
-
contrast-boost: 1
|
|
174
|
-
icon-stroke: 1.5 # derived: Airbnb's line icons read fine and friendly; one step under lucide's 2
|
|
175
|
-
icon-size-base: 16px
|
|
176
|
-
sidebar-width-expanded: 256px # derived: no marketplace sidebar; generous operator reading, a step over the console default
|
|
177
|
-
sidebar-width-collapsed: 64px # derived: generous icon rail
|
|
178
|
-
topbar-height: 64px # derived: operator reading of the 80px marketing nav, tightened for a working header
|
|
179
|
-
side-panel-width: 440px # derived: generous side panel; no corpus panel spec
|
|
180
|
-
side-panel-width-rich: 640px # derived: content-heavy detail width
|
|
181
|
-
modal-width-max: 560px # derived: corpus silent; standard modal cap
|
|
182
|
-
form-max-width: 640px # derived: Airbnb inputs run tall/generous; standard form column
|
|
183
|
-
table-row-height: 48px # derived: Airbnb's 48px CTA/touch-target rhythm; generous rows over a dense grid
|
|
184
|
-
verbosity: default
|
|
185
|
-
feedback: subtle # Airbnb motion is subtle (no-hover policy, gentle lift)
|
|
186
|
-
density-tier: standard # derived: "generous but not airy" — marketplace runs tighter than SaaS marketing; standard with a generous per-dimension lean
|
|
187
|
-
product-traits: [marketplace, crm, booking, dashboard]
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
```yaml lever-manifest
|
|
191
|
-
version: 1
|
|
192
|
-
fonts: { sans: "\"Airbnb Cereal VF\", Circular, Inter, system-ui, sans-serif", mono: "\"JetBrains Mono\", ui-monospace, SFMono-Regular, monospace" }
|
|
193
|
-
color-tokens:
|
|
194
|
-
light:
|
|
195
|
-
background: "#ffffff"
|
|
196
|
-
foreground: "#222222"
|
|
197
|
-
card: "#ffffff"
|
|
198
|
-
card-foreground: "#222222"
|
|
199
|
-
muted: "#f7f7f7"
|
|
200
|
-
muted-foreground: "#6a6a6a"
|
|
201
|
-
border: "#dddddd"
|
|
202
|
-
input: "#dddddd"
|
|
203
|
-
ring: "#222222" # ink focus — Airbnb thickens the border to ink, no colored ring
|
|
204
|
-
primary: "#ff385c"
|
|
205
|
-
primary-foreground: "#ffffff"
|
|
206
|
-
accent: "#ffe8ec" # derived: pale Rausch tint for selected/hovered rows (corpus hovers gray; a whisper of brand carries the warmth)
|
|
207
|
-
accent-foreground: "#e00b41" # Rausch active — readable on the pale tint
|
|
208
|
-
destructive: "#c13515"
|
|
209
|
-
destructive-foreground: "#ffffff"
|
|
210
|
-
success: "#178a50" # derived: corpus silent on status; warm-compatible green, status only
|
|
211
|
-
warning: "#b26a00" # derived: corpus silent on status; amber, status only
|
|
212
|
-
popover: "#ffffff"
|
|
213
|
-
popover-foreground: "#222222"
|
|
214
|
-
secondary: "#f2f2f2" # surface-strong — secondary buttons and circular icon surfaces
|
|
215
|
-
secondary-foreground: "#222222"
|
|
216
|
-
chart-1: "#ff385c" # Rausch
|
|
217
|
-
chart-2: "#460479" # luxe purple (real corpus token, reused for dataviz)
|
|
218
|
-
chart-3: "#178a50" # derived: status green, reused as a chart hue
|
|
219
|
-
chart-4: "#b26a00" # derived: status amber, reused as a chart hue
|
|
220
|
-
chart-5: "#428bff" # legal-link blue (real corpus token, reused for dataviz)
|
|
221
|
-
sidebar: "#f7f7f7" # derived: faintly warm-gray sidebar beside the white canvas
|
|
222
|
-
sidebar-foreground: "#222222"
|
|
223
|
-
sidebar-primary: "#ff385c" # Rausch marks the active nav item
|
|
224
|
-
sidebar-primary-foreground: "#ffffff"
|
|
225
|
-
sidebar-accent: "#ffe8ec" # matches accent
|
|
226
|
-
sidebar-accent-foreground: "#e00b41"
|
|
227
|
-
sidebar-border: "#dddddd"
|
|
228
|
-
sidebar-ring: "#222222"
|
|
229
|
-
spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
|
|
230
|
-
radius-scale: [0, 4, 8, 14, 20, 32, 9999]
|
|
231
|
-
shadow-levels: [none, sm] # the system has exactly one soft shadow tier plus the flat baseline
|
|
232
|
-
motion: { durations: [150, 200, 300], easings: ["cubic-bezier(0.4,0,0.2,1)"] } # derived: corpus silent on motion
|
|
233
|
-
icons: { family: lucide, stroke: 1.5 }
|
|
234
|
-
accent-count: 1
|
|
235
|
-
```
|
|
@@ -12,8 +12,7 @@ distinctive move at its center — the primary action is **near-black**, not a c
|
|
|
12
12
|
brand action here; blue is only the link and the focus ring. This entry is the operator reading of
|
|
13
13
|
Airtable's marketing brand: the temperature, the ink-primary discipline, the moderate radii and the
|
|
14
14
|
never-bold type voice carry; the hero-scale display sizes, the full-bleed signature cards, and the
|
|
15
|
-
96px marketing section rhythm stay behind.
|
|
16
|
-
from the marketing source is annotated `# derived:`.
|
|
15
|
+
96px marketing section rhythm stay behind.
|
|
17
16
|
|
|
18
17
|
## 1 Visual Theme
|
|
19
18
|
|
|
@@ -150,83 +149,3 @@ Directives the emitting agent follows verbatim:
|
|
|
150
149
|
- The warm signature palette (coral, forest, cream, peach, mint, mustard) stays behind as marketing;
|
|
151
150
|
it survives only as chart categoricals. Hero-scale display type (48/40/32) and the 96px section
|
|
152
151
|
rhythm are marketing — do not carry them into operator surfaces.
|
|
153
|
-
|
|
154
|
-
```yaml design-primitives
|
|
155
|
-
radius: 6px # derived: brand's input radius (rounded.sm, 6px) as operator default; marketing's 12px CTA softness stays for hero — scale keeps 10/12 for cards
|
|
156
|
-
shadow-intensity: 0.35 # derived: color-block-first brand — shadow only lifts true overlays
|
|
157
|
-
border-weight: 1px
|
|
158
|
-
density-gap: 1
|
|
159
|
-
density-inset: 1
|
|
160
|
-
font-sans: Inter, system-ui, sans-serif # derived: Haas Grotesk is licensed/proprietary; the corpus names Inter as its open substitute — plain Inter for dense operator body legibility
|
|
161
|
-
font-mono: IBM Plex Mono, ui-monospace, monospace # derived: no mono in corpus; IBM Plex Mono's humanist temperature matches Airtable's sober editorial sans
|
|
162
|
-
font-weight-normal: 400
|
|
163
|
-
font-weight-strong: 500 # derived from corpus: Airtable never bolds display — emphasis pivots to 500, never 600/700 (600 reserved for legal)
|
|
164
|
-
heading-tracking: 0 # from corpus: Haas display runs letterSpacing 0 — Airtable does not tighten headings
|
|
165
|
-
duration-unit: 60ms # derived: motion out of corpus scope
|
|
166
|
-
duration-fast: 120ms # derived: motion out of corpus scope
|
|
167
|
-
duration-normal: 180ms # derived: functional operator scale nudged ~20% slower than baseline for editorial calm
|
|
168
|
-
duration-slow: 280ms # derived: motion out of corpus scope
|
|
169
|
-
ease-default: cubic-bezier(0.4,0,0.2,1) # derived: standard functional ease; motion out of corpus scope
|
|
170
|
-
contrast-boost: 1 # derived: honor the soft #dddddd hairline discipline — no grid boost
|
|
171
|
-
icon-stroke: 1.75 # derived: no icon spec in corpus; lucide one step under default for a refined operator stroke
|
|
172
|
-
icon-size-base: 16px
|
|
173
|
-
sidebar-width-expanded: 240px # from corpus: topic-filter-rail width 240px
|
|
174
|
-
sidebar-width-collapsed: 56px # derived: standard icon-rail collapse
|
|
175
|
-
topbar-height: 64px # from corpus: top-nav height 64px
|
|
176
|
-
side-panel-width: 420px # derived: standard operator detail-panel width; corpus documents no side panel
|
|
177
|
-
side-panel-width-rich: 640px # derived: content-heavy detail width
|
|
178
|
-
modal-width-max: 560px # derived: confirmation-scale modal cap
|
|
179
|
-
form-max-width: 640px # derived: single-column form cap
|
|
180
|
-
table-row-height: 44px # derived from corpus: 44px input height + comparison-row padding → a roomy editorial row, not a 40px dense grid
|
|
181
|
-
verbosity: default
|
|
182
|
-
feedback: subtle # derived: calm, minimal-shadow brand reads subtle
|
|
183
|
-
density-tier: standard # derived: editorial-roomy brand held at standard for operator legibility; archetypes step denser, never the whole app
|
|
184
|
-
product-traits: [database, data-grid, workflow, collaboration]
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
```yaml lever-manifest
|
|
188
|
-
version: 1
|
|
189
|
-
fonts: { sans: "Inter, system-ui, sans-serif", mono: "IBM Plex Mono, ui-monospace, monospace" }
|
|
190
|
-
color-tokens:
|
|
191
|
-
light:
|
|
192
|
-
background: "#ffffff"
|
|
193
|
-
foreground: "#181d26"
|
|
194
|
-
card: "#ffffff"
|
|
195
|
-
card-foreground: "#181d26"
|
|
196
|
-
muted: "#f8fafc"
|
|
197
|
-
muted-foreground: "#41454d"
|
|
198
|
-
border: "#dddddd"
|
|
199
|
-
input: "#dddddd"
|
|
200
|
-
ring: "#1b61c9"
|
|
201
|
-
primary: "#181d26"
|
|
202
|
-
primary-foreground: "#ffffff"
|
|
203
|
-
accent: "#eef3fb" # derived: pale blue tint of the link blue for row/nav selection
|
|
204
|
-
accent-foreground: "#181d26"
|
|
205
|
-
destructive: "#c0301c" # derived: no semantic error red in corpus; warm red tuned to the oxide-coral (#aa2d00) temperature, brightened for status legibility
|
|
206
|
-
destructive-foreground: "#ffffff"
|
|
207
|
-
success: "#006400"
|
|
208
|
-
warning: "#b45309" # derived: warm amber in the signature mustard/yellow (#d9a441/#f4d35e) family, darkened for legible status text
|
|
209
|
-
popover: "#ffffff"
|
|
210
|
-
popover-foreground: "#181d26"
|
|
211
|
-
secondary: "#f8fafc"
|
|
212
|
-
secondary-foreground: "#181d26"
|
|
213
|
-
chart-1: "#1b61c9" # link blue
|
|
214
|
-
chart-2: "#aa2d00" # signature coral
|
|
215
|
-
chart-3: "#006400" # forest / success green
|
|
216
|
-
chart-4: "#d9a441" # signature mustard
|
|
217
|
-
chart-5: "#fcab79" # signature peach
|
|
218
|
-
sidebar: "#f8fafc" # derived: corpus nav is white; the operator rail tints one step (surface-soft) for shell separation
|
|
219
|
-
sidebar-foreground: "#181d26"
|
|
220
|
-
sidebar-primary: "#181d26"
|
|
221
|
-
sidebar-primary-foreground: "#ffffff"
|
|
222
|
-
sidebar-accent: "#eef3fb" # derived: matches accent tint
|
|
223
|
-
sidebar-accent-foreground: "#181d26"
|
|
224
|
-
sidebar-border: "#dddddd"
|
|
225
|
-
sidebar-ring: "#1b61c9"
|
|
226
|
-
spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
|
|
227
|
-
radius-scale: [0, 2, 6, 10, 12, 9999]
|
|
228
|
-
shadow-levels: [none, sm, md]
|
|
229
|
-
motion: { durations: [120, 180, 280], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
|
|
230
|
-
icons: { family: lucide, stroke: 1.75 }
|
|
231
|
-
accent-count: 1
|
|
232
|
-
```
|
|
@@ -12,8 +12,7 @@ hero-scale slab-serif display, full-bleed coral callout bands, a cream-to-dark p
|
|
|
12
12
|
entry keeps what survives at operator scale: the warm cream canvas, the single coral accent, the
|
|
13
13
|
warm-neutral temperature, the moderate radius, the editorial type voice. The 64px display, the coral
|
|
14
14
|
bands, and the 96px rhythm stay behind. The result is unmistakably Claude — warm where every other
|
|
15
|
-
tool is cool — but it earns its density and reserves its one accent
|
|
16
|
-
annotated `# derived:` where the corpus is silent.
|
|
15
|
+
tool is cool — but it earns its density and reserves its one accent.
|
|
17
16
|
|
|
18
17
|
## 1 Visual Theme
|
|
19
18
|
|
|
@@ -27,8 +26,8 @@ humanist sans body. Density is `standard`; the anchor surface is a cream canvas
|
|
|
27
26
|
|
|
28
27
|
## 2 Color Roles
|
|
29
28
|
|
|
30
|
-
Light values
|
|
31
|
-
|
|
29
|
+
Light values. One accent: `primary` is the only chromatic hue that carries meaning; teal and amber
|
|
30
|
+
are chart/status graces, status speaks status.
|
|
32
31
|
|
|
33
32
|
| Role | Value | Allowed where |
|
|
34
33
|
| --- | --- | --- |
|
|
@@ -66,7 +65,7 @@ Emphasis is weight 500 or a larger serif — the brand **never bolds** (serif at
|
|
|
66
65
|
| caption | uppercase eyebrow | sans | 12px / 1.4 | `font-weight-strong`, +0.12em, uppercase |
|
|
67
66
|
| code | IDs, logs, amounts | mono | 13px / 1.5 | `font-weight-normal` |
|
|
68
67
|
|
|
69
|
-
|
|
68
|
+
Negative tracking on the serif is non-negotiable; it is what reads as Claude.
|
|
70
69
|
|
|
71
70
|
## 4 Component Stylings
|
|
72
71
|
|
|
@@ -138,83 +137,3 @@ Directives the emitting agent follows verbatim:
|
|
|
138
137
|
- Every workflow completes from the keyboard; the coral `ring` focus outline is always visible.
|
|
139
138
|
- Stay flat — warm hairline and the cream ladder before shadow; reach past a hairline only for a real
|
|
140
139
|
overlay. Leave behind the hero display, the coral callout bands, and the 96px rhythm.
|
|
141
|
-
|
|
142
|
-
```yaml design-primitives
|
|
143
|
-
radius: 8px # corpus: buttons/inputs at rounded.md (8px); scale offers 12px cards, 16px large
|
|
144
|
-
shadow-intensity: 0.35 # derived: color-block-first; shadow rare and faint (corpus ~0.08 alpha)
|
|
145
|
-
border-weight: 1px
|
|
146
|
-
density-gap: 1
|
|
147
|
-
density-inset: 1
|
|
148
|
-
font-sans: Styrene B, Inter, system-ui, sans-serif
|
|
149
|
-
font-mono: JetBrains Mono, ui-monospace, monospace
|
|
150
|
-
font-weight-normal: 400
|
|
151
|
-
font-weight-strong: 500 # corpus: labels/titles/buttons weight 500; the brand never bolds (serif holds 400)
|
|
152
|
-
heading-tracking: -0.02em # corpus: negative tracking on the serif display is non-negotiable; -0.02em at operator heading scale
|
|
153
|
-
duration-unit: 50ms # derived: corpus declares motion out of scope; operator-standard functional base
|
|
154
|
-
duration-fast: 100ms # derived: corpus silent on motion
|
|
155
|
-
duration-normal: 150ms # derived: corpus silent on motion
|
|
156
|
-
duration-slow: 250ms # derived: corpus silent on motion
|
|
157
|
-
ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent; standard operator ease
|
|
158
|
-
contrast-boost: 1 # derived: brand's soft warm hairlines are intentional (one elevation step); no boost
|
|
159
|
-
icon-stroke: 1.5 # derived: corpus uses minimal hand-drawn line-art; a light 1.5 stroke suits the refined editorial feel
|
|
160
|
-
icon-size-base: 16px # derived: corpus silent; operator standard
|
|
161
|
-
sidebar-width-expanded: 256px # derived: corpus has no shell; editorial breathing → a touch wider than a dense rail
|
|
162
|
-
sidebar-width-collapsed: 56px # derived: corpus has no shell; operator standard icon rail
|
|
163
|
-
topbar-height: 56px # derived: corpus top-nav 64px is marketing-generous; operator tightens to 56px
|
|
164
|
-
side-panel-width: 440px # derived: corpus has no shell; standard nudged up for editorial breathing
|
|
165
|
-
side-panel-width-rich: 640px # derived: corpus has no shell; content-heavy detail width
|
|
166
|
-
modal-width-max: 560px # derived: corpus has no shell; confirmations only
|
|
167
|
-
form-max-width: 640px # derived: Claude's single-column editorial reading caps forms comfortably
|
|
168
|
-
table-row-height: 44px # derived: editorial warmth → rows breathe a touch over the dense 40px default
|
|
169
|
-
verbosity: default
|
|
170
|
-
feedback: subtle # rationale: Claude's warm humanist voice wants gentle present feedback, not austere silence
|
|
171
|
-
density-tier: standard # rationale: an editorial-spacious brand read down to an honest operator tier; warmth carried by palette/radius, not whitespace
|
|
172
|
-
product-traits: [dev-tools, ai-console, dashboard, admin]
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
```yaml lever-manifest
|
|
176
|
-
version: 1
|
|
177
|
-
fonts: { sans: "Styrene B, Inter, system-ui, sans-serif", mono: "JetBrains Mono, ui-monospace, monospace" }
|
|
178
|
-
color-tokens:
|
|
179
|
-
light:
|
|
180
|
-
background: "#faf9f5"
|
|
181
|
-
foreground: "#141413"
|
|
182
|
-
card: "#faf9f5"
|
|
183
|
-
card-foreground: "#141413"
|
|
184
|
-
muted: "#f5f0e8"
|
|
185
|
-
muted-foreground: "#6c6a64"
|
|
186
|
-
border: "#e6dfd8"
|
|
187
|
-
input: "#e6dfd8"
|
|
188
|
-
ring: "#cc785c"
|
|
189
|
-
primary: "#cc785c"
|
|
190
|
-
primary-foreground: "#ffffff"
|
|
191
|
-
accent: "#e8e0d2"
|
|
192
|
-
accent-foreground: "#141413"
|
|
193
|
-
destructive: "#c64545"
|
|
194
|
-
destructive-foreground: "#ffffff" # derived: white on the warm red
|
|
195
|
-
success: "#5db872"
|
|
196
|
-
warning: "#d4a017"
|
|
197
|
-
popover: "#faf9f5"
|
|
198
|
-
popover-foreground: "#141413"
|
|
199
|
-
secondary: "#efe9de"
|
|
200
|
-
secondary-foreground: "#141413"
|
|
201
|
-
chart-1: "#cc785c" # coral
|
|
202
|
-
chart-2: "#5db8a6" # teal
|
|
203
|
-
chart-3: "#e8a55a" # amber
|
|
204
|
-
chart-4: "#6c6a64" # derived: warm taupe neutral for spread
|
|
205
|
-
chart-5: "#252320" # derived: dark navy anchor; all series warm to hold temperature
|
|
206
|
-
sidebar: "#f5f0e8"
|
|
207
|
-
sidebar-foreground: "#141413"
|
|
208
|
-
sidebar-primary: "#cc785c"
|
|
209
|
-
sidebar-primary-foreground: "#ffffff"
|
|
210
|
-
sidebar-accent: "#e8e0d2"
|
|
211
|
-
sidebar-accent-foreground: "#141413"
|
|
212
|
-
sidebar-border: "#e6dfd8"
|
|
213
|
-
sidebar-ring: "#cc785c"
|
|
214
|
-
spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
|
|
215
|
-
radius-scale: [0, 4, 6, 8, 12, 16, 9999]
|
|
216
|
-
shadow-levels: [none, sm, md]
|
|
217
|
-
motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
|
|
218
|
-
icons: { family: lucide, stroke: 1.5 }
|
|
219
|
-
accent-count: 1
|
|
220
|
-
```
|