@nurix/etna 0.18.19 → 0.18.21
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 +1 -1
- package/data/harnesses/code/agents/brainstorm.md +1 -1
- package/data/harnesses/code/agents/maintenance.md +2 -2
- 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 +1 -1
- package/data/harnesses/code/skills/brainstorm/SKILL.md +1 -1
- package/data/harnesses/code/skills/brainstorm/exit-artifacts.md +4 -4
- package/data/harnesses/code/skills/brainstorm/templates/source-of-truth.md +3 -3
- package/data/harnesses/code/skills/design/SKILL.md +68 -0
- package/data/harnesses/code/skills/design/data/catalog/rules.csv +132 -0
- 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 +106 -0
- package/data/harnesses/code/skills/design/data/design-md/library/airbnb.md +154 -0
- package/data/harnesses/code/skills/design/data/design-md/library/airtable.md +151 -0
- package/data/harnesses/code/skills/design/data/design-md/library/anthropic-claude.md +139 -0
- package/data/harnesses/code/skills/design/data/design-md/library/apple.md +139 -0
- package/data/harnesses/code/skills/design/data/design-md/library/binance.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/bmw.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/cal.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/clay.md +139 -0
- package/data/harnesses/code/skills/design/data/design-md/library/clickhouse.md +139 -0
- package/data/harnesses/code/skills/design/data/design-md/library/cohere.md +147 -0
- package/data/harnesses/code/skills/design/data/design-md/library/coinbase.md +156 -0
- package/data/harnesses/code/skills/design/data/design-md/library/composio.md +138 -0
- package/data/harnesses/code/skills/design/data/design-md/library/cursor.md +138 -0
- package/data/harnesses/code/skills/design/data/design-md/library/elevenlabs.md +137 -0
- package/data/harnesses/code/skills/design/data/design-md/library/expo.md +148 -0
- package/data/harnesses/code/skills/design/data/design-md/library/figma.md +141 -0
- package/data/harnesses/code/skills/design/data/design-md/library/framer.md +156 -0
- package/data/harnesses/code/skills/design/data/design-md/library/hashicorp.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/ibm.md +153 -0
- package/data/harnesses/code/skills/design/data/design-md/library/intercom.md +158 -0
- package/data/harnesses/code/skills/design/data/design-md/library/kraken.md +156 -0
- package/data/harnesses/code/skills/design/data/design-md/library/linear-app.md +122 -0
- package/data/harnesses/code/skills/design/data/design-md/library/lovable.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/meta.md +139 -0
- package/data/harnesses/code/skills/design/data/design-md/library/minimax.md +139 -0
- package/data/harnesses/code/skills/design/data/design-md/library/mintlify.md +139 -0
- package/data/harnesses/code/skills/design/data/design-md/library/miro.md +153 -0
- package/data/harnesses/code/skills/design/data/design-md/library/mistral-ai.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/mongodb.md +155 -0
- package/data/harnesses/code/skills/design/data/design-md/library/notion.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/nvidia.md +141 -0
- package/data/harnesses/code/skills/design/data/design-md/library/ollama.md +145 -0
- package/data/harnesses/code/skills/design/data/design-md/library/opencode-ai.md +142 -0
- package/data/harnesses/code/skills/design/data/design-md/library/posthog.md +152 -0
- package/data/harnesses/code/skills/design/data/design-md/library/raycast.md +137 -0
- package/data/harnesses/code/skills/design/data/design-md/library/replicate.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/resend.md +170 -0
- package/data/harnesses/code/skills/design/data/design-md/library/revolut.md +145 -0
- package/data/harnesses/code/skills/design/data/design-md/library/runwayml.md +137 -0
- package/data/harnesses/code/skills/design/data/design-md/library/sanity.md +168 -0
- package/data/harnesses/code/skills/design/data/design-md/library/sentry.md +163 -0
- package/data/harnesses/code/skills/design/data/design-md/library/shopify.md +147 -0
- package/data/harnesses/code/skills/design/data/design-md/library/slack.md +158 -0
- package/data/harnesses/code/skills/design/data/design-md/library/spacex.md +171 -0
- package/data/harnesses/code/skills/design/data/design-md/library/spotify.md +166 -0
- package/data/harnesses/code/skills/design/data/design-md/library/stripe.md +160 -0
- package/data/harnesses/code/skills/design/data/design-md/library/supabase.md +173 -0
- package/data/harnesses/code/skills/design/data/design-md/library/superhuman.md +145 -0
- package/data/harnesses/code/skills/design/data/design-md/library/tesla.md +153 -0
- package/data/harnesses/code/skills/design/data/design-md/library/theverge.md +167 -0
- package/data/harnesses/code/skills/design/data/design-md/library/together-ai.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/uber.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/vercel.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/voltagent.md +130 -0
- package/data/harnesses/code/skills/design/data/design-md/library/warp.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/webflow.md +140 -0
- package/data/harnesses/code/skills/design/data/design-md/library/wired.md +139 -0
- package/data/harnesses/code/skills/design/data/design-md/library/wise.md +137 -0
- package/data/harnesses/code/skills/design/data/design-md/library/x-ai.md +138 -0
- package/data/harnesses/code/skills/design/data/design-md/library/zapier.md +158 -0
- package/data/harnesses/code/skills/design/data/design-md/nurix.md +134 -0
- 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/exemplars/command-center.tsx +249 -0
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/create-edit.tsx +249 -0
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/dashboard.tsx +248 -0
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/entity-detail.tsx +245 -0
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/list-detail.tsx +223 -0
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/log-stream.tsx +249 -0
- package/data/harnesses/code/skills/design/data/operator-pack/fixtures.md +88 -0
- package/data/harnesses/code/skills/design/data/operator-pack/surface-catalog.md +132 -0
- package/data/harnesses/code/skills/design/data/operator-pack/trust-rubric.md +76 -0
- package/data/harnesses/code/skills/design/references/create.md +131 -0
- package/data/harnesses/code/skills/design/references/diagnosis.md +108 -0
- package/data/harnesses/code/skills/design/references/hard-rules.md +155 -0
- package/data/harnesses/code/skills/design/references/improve.md +87 -0
- package/data/harnesses/code/skills/design/references/interaction.md +77 -0
- package/data/harnesses/code/skills/design/references/introspect.md +100 -0
- package/data/harnesses/code/skills/design/references/lifecycle.md +73 -0
- package/data/harnesses/code/skills/design/references/personality.md +428 -0
- package/data/harnesses/code/skills/design/references/structure.md +138 -0
- package/data/harnesses/code/skills/design/scripts/convert-design-md.mjs +1032 -0
- package/data/harnesses/code/skills/design/scripts/derive-personality.mjs +1006 -0
- package/data/harnesses/code/skills/design/scripts/generate-fixtures.mjs +551 -0
- package/data/harnesses/code/skills/design/scripts/lib/checks.mjs +903 -0
- package/data/harnesses/code/skills/design/scripts/lib/golden.mjs +26 -0
- package/data/harnesses/code/skills/design/scripts/phase-gate.mjs +454 -0
- package/data/harnesses/code/skills/design/scripts/preship-sweep.mjs +267 -0
- package/data/harnesses/code/skills/design/scripts/render-rung.mjs +690 -0
- package/data/harnesses/code/skills/design/scripts/scaffold.mjs +552 -0
- package/data/harnesses/code/skills/design/scripts/self-integrity.mjs +600 -0
- 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 +305 -51
- package/data/harnesses/etna/CLAUDE.md +1 -1
- package/data/harnesses/etna/agents/brainstorm.md +1 -1
- package/data/harnesses/etna/agents/maintenance.md +2 -2
- 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 +1 -1
- package/data/harnesses/etna/skills/brainstorm/SKILL.md +1 -1
- package/data/harnesses/etna/skills/brainstorm/exit-artifacts.md +4 -4
- package/data/harnesses/etna/skills/brainstorm/templates/source-of-truth.md +3 -3
- 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 +305 -51
- package/data/harnesses/mobile/CLAUDE.md +1 -1
- package/data/harnesses/mobile/agents/brainstorm.md +1 -1
- package/data/harnesses/mobile/agents/maintenance.md +2 -2
- 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 +1 -1
- package/data/harnesses/mobile/skills/brainstorm/SKILL.md +1 -1
- package/data/harnesses/mobile/skills/brainstorm/exit-artifacts.md +4 -4
- package/data/harnesses/mobile/skills/brainstorm/templates/source-of-truth.md +3 -3
- 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 +305 -51
- package/package.json +1 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: design-md/v1
|
|
3
|
+
product: OpenCode
|
|
4
|
+
provenance: library
|
|
5
|
+
sourced: 2026-07-04
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# OpenCode — the terminal-native monospace operator design
|
|
9
|
+
|
|
10
|
+
OpenCode's marketing site is a manpage rendered at modern resolution: every word sits in one monospaced
|
|
11
|
+
face on a warm cream canvas, ASCII `[+]`/`[-]` markers stand in for icons, and a single dark card mocks
|
|
12
|
+
up the OpenCode TUI. This entry is the *operator* reading of that brand — an internal tool (agent-ops
|
|
13
|
+
console, run queue, log stream, dashboard) in OpenCode's language. What carries: the warm cream canvas
|
|
14
|
+
(never pure white), near-black ink, the monospace-everywhere type voice, the sharp-container /
|
|
15
|
+
4px-interactive radius character, the single reserved Apple-Blue accent, and categorically-flat hairline
|
|
16
|
+
depth. What stays behind: the full-bleed dark hero TUI mockup, the 38px display headline, the 96px
|
|
17
|
+
section rhythm, the block-pixel ASCII wordmark, and the bracket markers used as bullets.
|
|
18
|
+
|
|
19
|
+
**Monochrome chrome, one held accent.** The chrome is ink-on-cream monochrome; the primary action is
|
|
20
|
+
a near-black ink button, not a colored one (the Vercel/Geist dialect), and Apple Blue (`#007aff`) is
|
|
21
|
+
the one chromatic accent — reserved, as the source reserves it, for interactive and data signal
|
|
22
|
+
only. It reads *light*, so the light-default floor holds.
|
|
23
|
+
|
|
24
|
+
## 1 Visual Theme
|
|
25
|
+
|
|
26
|
+
Light by default; dark is opt-in. The whole UI floats on OpenCode's warm cream `background` (`#fdfcfc`)
|
|
27
|
+
— a faintly-blushed off-white, never the cool gray the category defaults to. Emphatically flat:
|
|
28
|
+
hierarchy is carried by hairline `border`, type weight, and the near-black/cream contrast — never a drop
|
|
29
|
+
shadow (the source has none; nothing lifts, nothing floats). The type voice is the identity: one
|
|
30
|
+
monospaced face carries every role (Berkeley Mono in the source, proprietary; JetBrains Mono the shipped
|
|
31
|
+
substitute) — no sans anywhere. The primary action is a near-black ink button; Apple Blue is the single
|
|
32
|
+
chromatic accent, held scarce. Density is `dense` — the surface reads like a terminal. The anchor
|
|
33
|
+
surface is a cream canvas seated beside a barely-warmer `sidebar`, separated by a hairline, not a band.
|
|
34
|
+
|
|
35
|
+
## 2 Color Roles
|
|
36
|
+
|
|
37
|
+
Light values. One chromatic accent — Apple Blue is the only hue that carries interactive meaning;
|
|
38
|
+
the primary action is neutral ink; status speaks status.
|
|
39
|
+
|
|
40
|
+
| Role | Value | Allowed where |
|
|
41
|
+
| --- | --- | --- |
|
|
42
|
+
| `background` / `card` / `popover` | warm cream `#fdfcfc` | page, cards, and overlays — one warm off-white, no surface bands |
|
|
43
|
+
| `foreground` | near-black ink `#201d1d` | all primary ink; the primary button fill |
|
|
44
|
+
| `muted` / `secondary` | soft warm `#f8f7f7` | hover rows, subtle fills, secondary-button fill |
|
|
45
|
+
| `muted-foreground` | warm gray `#646262` | labels, captions, secondary text |
|
|
46
|
+
| `border` / `input` | warm hairline `#e0dddd` | every separator, grid line, field edge (solid form of the source's `rgba(15,0,0,0.12)`) |
|
|
47
|
+
| `primary` | near-black ink `#201d1d` | the one primary action — a dark button, never blue |
|
|
48
|
+
| `accent` | warm selection `#f1eeee` | selected / hovered rows and nav — a warm step, never blue |
|
|
49
|
+
| `ring` | `primary` ink `#201d1d` | the focus outline — an ink border, no glow (keyboard-first) |
|
|
50
|
+
| Apple Blue (the accent hue) | `#007aff` | interactive: active-nav, links, selected emphasis, `chart-1` — held scarce |
|
|
51
|
+
| `destructive` | Apple red `#ff3b30` | destructive actions and error state only |
|
|
52
|
+
| `success` / `warning` | Apple green `#30d158` / amber `#ff9f0a` | status signalling only, never chrome |
|
|
53
|
+
|
|
54
|
+
The Apple HIG semantic ramp is the brand's own; in the source it lives in the in-product TUI, and the operator surface *is* that context.
|
|
55
|
+
|
|
56
|
+
## 3 Typography
|
|
57
|
+
|
|
58
|
+
There is no sans/mono split — `font-sans` and `font-mono` are the same monospaced family (JetBrains
|
|
59
|
+
Mono, the corpus's substitute for the proprietary Berkeley Mono). One face carries body, headings,
|
|
60
|
+
labels, IDs, and every numeric column; numerals align natively (monospace figures are already tabular),
|
|
61
|
+
so `tabular-nums` is inherent. Weights are 400 / 500 / 700, and — the defining detail — tracking is `0`
|
|
62
|
+
on every role: monospace does not track. The 38px display headline stays behind; a page title tops at 24px.
|
|
63
|
+
|
|
64
|
+
| Step | Role | Size · line | Weight · tracking |
|
|
65
|
+
| --- | --- | --- | --- |
|
|
66
|
+
| h1 | page title | 24px / 1.4 | `font-weight-strong` (700) · `heading-tracking` (0) |
|
|
67
|
+
| h2 | section head | 18px / 1.4 | `font-weight-strong` (700) · 0 |
|
|
68
|
+
| h3 | card / group head | 16px / 1.4 | `font-weight-strong` (700) · 0 |
|
|
69
|
+
| body | UI + prose | 14px / 1.5 | `font-weight-normal` (400) |
|
|
70
|
+
| small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` |
|
|
71
|
+
| caption | footer, badge, eyebrow | 12px / 1.4 | 500 (medium) |
|
|
72
|
+
| code | IDs, logs, amounts | 13px / 1.5 | `font-weight-normal` |
|
|
73
|
+
|
|
74
|
+
Emphasise by stepping weight 400 → 500 → 700; never by tracking, and never by swapping the face — there
|
|
75
|
+
is no other face.
|
|
76
|
+
|
|
77
|
+
## 4 Component Stylings
|
|
78
|
+
|
|
79
|
+
Every recurring operator component composes from the primitives — no literal values.
|
|
80
|
+
|
|
81
|
+
- **Button** — primary: filled ink `primary` on cream `primary-foreground`, `radius` (4px), never a pill. Secondary: `secondary` fill, 1px `border`, `foreground`. Ghost: transparent, `accent` on hover.
|
|
82
|
+
- **Input** — `background` fill, 1px `border` (`border-weight`), `radius` (4px); focus draws the ink `ring` at 2px — a flat border, no glow.
|
|
83
|
+
- **Card** — `card` surface on a 1px `border`, **sharp corners** (containers are 0px); the hairline carries the lift, never a shadow; inset by `density-inset`.
|
|
84
|
+
- **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; numerics align natively in the mono face; selection tints `accent`, active rows mark with the blue accent.
|
|
85
|
+
- **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich` for content-heavy), beside the work, not over it.
|
|
86
|
+
- **Badge** — 4px `radius`, `muted` / status fill, uppercase caption; status badges take `success` / `warning` / `destructive`, never `primary`.
|
|
87
|
+
|
|
88
|
+
## 5 Layout
|
|
89
|
+
|
|
90
|
+
Base spacing unit 8px with fine 1 / 4px steps (the source's own base); the on-scale ramp is `1 · 4 · 8 ·
|
|
91
|
+
12 · 16 · 24 · 32 · 48` — the marketing 96px section rhythm stays behind. Shell dimensions map to the
|
|
92
|
+
layout primitives: sidebar `sidebar-width-expanded` (248px) / `sidebar-width-collapsed` (56px), topbar
|
|
93
|
+
`topbar-height` (56px, the source's nav height), side panel `side-panel-width` (420px) /
|
|
94
|
+
`side-panel-width-rich` (640px), modal `modal-width-max`, forms `form-max-width`, tables full-width. The
|
|
95
|
+
grid runs tight — a terminal-native brand earns its density, governed globally by `density-tier`
|
|
96
|
+
(`dense`) and stepped per archetype by the surface catalog.
|
|
97
|
+
|
|
98
|
+
## 6 Depth
|
|
99
|
+
|
|
100
|
+
Categorically flat — the source has no drop shadows; hierarchy comes from hairlines, the surface ladder,
|
|
101
|
+
and one color inversion:
|
|
102
|
+
|
|
103
|
+
- **0 — canvas** `background`, no border.
|
|
104
|
+
- **1 — panel / card** `card` on a 1px `border`, sharp corners; the hairline alone carries the lift. Selected / hover rows warm to `accent`.
|
|
105
|
+
- **2 — overlay** `popover` / side panel / modal — a strong hairline and position carry rank; `shadow-intensity` earns only the faintest whisper to float a true overlay off the cream.
|
|
106
|
+
- **inlay — terminal / log / console** dark `#201d1d` with cream `on-dark` text, `#302c2c` elevated rows, and the mono face — the source's single dark moment (the hero TUI mockup) carried as the console inlay.
|
|
107
|
+
|
|
108
|
+
Focus is a 2px ink `ring` outline (never a glow), visible on every interactive element; three z-levels: content, sticky chrome, overlay.
|
|
109
|
+
|
|
110
|
+
## 7 Do's & Don'ts
|
|
111
|
+
|
|
112
|
+
- **Do** anchor every surface on the warm cream canvas — pure white reads as any-other-tool; the faint blush is OpenCode.
|
|
113
|
+
- **Do** render every role in the one monospaced face — body, headings, labels, and numerics alike; the single-face decision is the entire identity.
|
|
114
|
+
- **Do** keep the primary action a near-black ink button, and keep Apple Blue scarce — interactive, active-nav, links, and chart series only.
|
|
115
|
+
- **Do** keep containers sharp (0px) and interactive elements at 4px; that two-value split is the radius vocabulary.
|
|
116
|
+
- **Don't** introduce a sans-serif or a display face — there is one face, and it is monospaced.
|
|
117
|
+
- **Don't** fill the primary button blue, promote a second chromatic accent, or signal elevation with drop shadows.
|
|
118
|
+
- **Don't** open detail or edit in a modal when the side panel fits — a modal is a confirmation.
|
|
119
|
+
|
|
120
|
+
## 8 Responsive
|
|
121
|
+
|
|
122
|
+
The operator sweep is 375 / 768 / 1024 / 1440.
|
|
123
|
+
|
|
124
|
+
| Breakpoint | What changes |
|
|
125
|
+
| --- | --- |
|
|
126
|
+
| 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
|
|
127
|
+
| 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
|
|
128
|
+
| 1024 | sidebar expands; two-pane queue+detail holds side by side |
|
|
129
|
+
| 1440 | forms cap at `form-max-width`; tables and dashboards use the full width |
|
|
130
|
+
|
|
131
|
+
Terminal, log, and console inlays keep mono legibility at every breakpoint by scrolling horizontally, never wrapping.
|
|
132
|
+
|
|
133
|
+
## 9 Agent Prompt Guide
|
|
134
|
+
|
|
135
|
+
Directives the emitting agent follows verbatim:
|
|
136
|
+
|
|
137
|
+
- Reach for the warm cream canvas first — never pure white; the faint blush is the brand. Cards are the same cream, seated by a hairline.
|
|
138
|
+
- Render every text role in the one monospaced face (JetBrains Mono) — there is no sans. Numerics align natively; no `tabular-nums` toggle is needed.
|
|
139
|
+
- Keep the primary action an ink button. Spend Apple Blue only on interactive and data signal: active-nav, links, selected emphasis, chart series. If two things want the blue, one is not primary.
|
|
140
|
+
- Keep containers sharp (0px) and interactive elements at 4px — that split is the brand's whole geometry.
|
|
141
|
+
- Depth is hairline, surface, and position — never shadow. Dress terminal, log, and console panels in the dark inlay (`#201d1d`, mono, cream text) — real console chrome, not a light mockup of it.
|
|
142
|
+
- Keyboard-first: the ink `ring` focus outline is always visible. Leave behind the dark hero TUI mockup, the 38px display, the 96px rhythm, the ASCII wordmark, and the bracket bullets — use real lucide icons.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: design-md/v1
|
|
3
|
+
product: PostHog
|
|
4
|
+
provenance: library
|
|
5
|
+
sourced: 2026-07-04
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# PostHog — operator reading
|
|
9
|
+
|
|
10
|
+
The operator distillation of PostHog's engineering-sketchbook brand. The source is a marketing
|
|
11
|
+
system: a warm cream canvas dotted with hand-drawn hedgehog mascots, hero-scale display type, and a
|
|
12
|
+
single loud yellow-orange CTA pill. This entry keeps the temperature and voice that make it PostHog
|
|
13
|
+
— the cream canvas, the olive ink, the one yellow accent, IBM Plex Sans, the flat hairline depth,
|
|
14
|
+
the dark code island — and leaves the decoration behind: no mascots, no 36px/800 hero type, no
|
|
15
|
+
pastel callout bands, no pill CTAs on operator chrome. What remains is a warm, calm, flat dev-tools
|
|
16
|
+
console.
|
|
17
|
+
|
|
18
|
+
## 1 Visual Theme
|
|
19
|
+
|
|
20
|
+
Light by default; dark is opt-in. The signature is the **warm cream canvas** (`background` `#eeefe9`) —
|
|
21
|
+
never plain white — with true-white cards (`card`) floating on it. Flat: hierarchy is carried by
|
|
22
|
+
hairline olive `border`, type weight, and color, never by shadow. A single loud accent — PostHog yellow
|
|
23
|
+
(`primary` `#f7a501`) — carries the one action that matters on a surface, and it wears **dark olive ink**
|
|
24
|
+
(`primary-foreground`), never white. The neutral ramp is a warm olive-gray, so the whole UI reads like a
|
|
25
|
+
friendly engineering blog rather than cold gray tooling. Density is `standard` and steps denser per
|
|
26
|
+
archetype — dense-capable, warm, not cramped.
|
|
27
|
+
|
|
28
|
+
## 2 Color Roles
|
|
29
|
+
|
|
30
|
+
Light values first. One loud accent — `primary` yellow is the only saturated hue that carries a call
|
|
31
|
+
to action; blue is a quiet functional signal; status hues speak only status.
|
|
32
|
+
|
|
33
|
+
| Role | Value | Allowed where |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| `background` | warm cream `#eeefe9` | the page canvas — end to end, never substituted with white |
|
|
36
|
+
| `card` / `popover` | white `#ffffff` | cards, panels, and overlays floating on the cream |
|
|
37
|
+
| `foreground` | deep olive-charcoal `#23251d` | headlines and primary ink |
|
|
38
|
+
| `muted` / `secondary` | soft greige `#e5e7e0` | hover rows, subtle fills, secondary buttons |
|
|
39
|
+
| `muted-foreground` | olive `#6c6e63` | labels, captions, metadata, secondary text |
|
|
40
|
+
| `border` / `input` | olive hairline `#bfc1b7` | every separator, grid line, and field edge |
|
|
41
|
+
| `primary` | PostHog yellow `#f7a501` | the one primary action; wears dark ink, never white |
|
|
42
|
+
| `accent` | pale yellow wash `#f7eccf` | selected / hovered rows and nav, on-accent surfaces only |
|
|
43
|
+
| `ring` | focus blue `#2c84e0` | the focus outline — the brand focuses in blue, not yellow |
|
|
44
|
+
| `destructive` | red `#cd4239` | destructive actions and error state only |
|
|
45
|
+
| `success` | green `#2c8c66` | positive status only |
|
|
46
|
+
| `warning` | gold-amber `#b17816` | caution status only — deliberately deeper than the CTA yellow |
|
|
47
|
+
|
|
48
|
+
Link/info blue `#2c84e0` and the pastel callout family (`accent-blue-soft`, `-green-soft`, `-red-soft`,
|
|
49
|
+
`-purple-soft`) are marketing/doc vocabulary: they carry no operator chrome role (see §7).
|
|
50
|
+
|
|
51
|
+
## 3 Typography
|
|
52
|
+
|
|
53
|
+
One sans, one mono. `font-sans` is IBM Plex Sans Variable — UI, body, and headings all ride it, and the
|
|
54
|
+
brand's signature is that hierarchy is built from **weight**, not a second family. `font-mono` is
|
|
55
|
+
Source Code Pro for IDs, codes, timestamps, and log lines. Numeric columns render `tabular-nums` so
|
|
56
|
+
figures align down a column.
|
|
57
|
+
|
|
58
|
+
| Step | Role | Size · line | Weight · tracking |
|
|
59
|
+
| --- | --- | --- | --- |
|
|
60
|
+
| h1 | page title | 24px / 1.3 | `font-weight-strong` · `heading-tracking` |
|
|
61
|
+
| h2 | section head | 20px / 1.4 | `font-weight-strong` · `heading-tracking` |
|
|
62
|
+
| h3 | card / group head | 16px / 1.45 | `font-weight-strong` |
|
|
63
|
+
| body | UI + prose | 14px / 1.45 | `font-weight-normal` |
|
|
64
|
+
| small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` |
|
|
65
|
+
| caption | uppercase eyebrow | 12px / 1.33 | `font-weight-strong`, `+0.02em`, uppercase |
|
|
66
|
+
|
|
67
|
+
Bump weight one step for emphasis; never change size to emphasize. The marketing hero (36px / 800) and
|
|
68
|
+
the 800-weight display tier stay behind — operator headings top out at `font-weight-strong`.
|
|
69
|
+
|
|
70
|
+
## 4 Component Stylings
|
|
71
|
+
|
|
72
|
+
Every recurring operator component composes from the primitives — no literal values.
|
|
73
|
+
|
|
74
|
+
- **Button** — `primary`: filled `primary` yellow on dark `primary-foreground` ink, `radius`, no pill.
|
|
75
|
+
Secondary: `secondary` greige fill, `border`, `foreground`. Ghost: transparent, `accent` on hover.
|
|
76
|
+
- **Input** — `card` fill, 1px `border` (`border-weight`), `radius`; focus draws the `ring` (blue) at
|
|
77
|
+
full 2px, no glow.
|
|
78
|
+
- **Card** — `card` white surface, 1px `border` hairline, `radius`, **flat — no shadow**; inset by
|
|
79
|
+
`density-inset`. Flat cards on cream is the brand.
|
|
80
|
+
- **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; row selection tints
|
|
81
|
+
`accent`; `tabular-nums` on numeric columns; `font-mono` on IDs and timestamps.
|
|
82
|
+
- **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich`
|
|
83
|
+
for content-heavy), beside the work, not over it.
|
|
84
|
+
- **Badge** — hairline `border`, `muted` / status fill, uppercase caption; status badges take `success`
|
|
85
|
+
/ `warning` / `destructive`, never `primary`.
|
|
86
|
+
- **Code / log surface** — the brand's signature inverted moment: dark olive-charcoal (`foreground`
|
|
87
|
+
`#23251d`) fill with white text in `font-mono`. The one place a surface goes dark on the light UI.
|
|
88
|
+
|
|
89
|
+
## 5 Layout
|
|
90
|
+
|
|
91
|
+
Base spacing unit 4px (Tailwind `--spacing` 0.25rem); the brand's rhythm centers on the 8px step. The
|
|
92
|
+
on-scale ramp is `2 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64`. Shell dimensions map one-to-one to the
|
|
93
|
+
layout primitives: sidebar `sidebar-width-expanded` / `sidebar-width-collapsed`, topbar `topbar-height`,
|
|
94
|
+
side panel `side-panel-width` / `side-panel-width-rich`, modal cap `modal-width-max`, forms
|
|
95
|
+
`form-max-width`, tables full-width. Density is governed globally by `density-tier` (rewriting the
|
|
96
|
+
spacing scale through `density-gap`) and stepped per archetype by the surface catalog — never by
|
|
97
|
+
absolute overrides. The 80px marketing section rhythm stays behind.
|
|
98
|
+
|
|
99
|
+
## 6 Depth
|
|
100
|
+
|
|
101
|
+
Flat — this is where the brand and operator restraint agree completely. Hierarchy comes from the surface
|
|
102
|
+
ladder and hairlines, never shadow:
|
|
103
|
+
|
|
104
|
+
- **0 — canvas** `background` cream, no border.
|
|
105
|
+
- **1 — panel / card** `card` white on a 1px `border` hairline; flat, no shadow.
|
|
106
|
+
- **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns a soft `md`
|
|
107
|
+
shadow to lift off the cream. The dark code / log surface is the brand's other "elevated" moment, and
|
|
108
|
+
it lifts with **color, not shadow**.
|
|
109
|
+
|
|
110
|
+
Focus is a 2px `ring` outline in blue (never a glow), visible on every interactive element. Three
|
|
111
|
+
z-levels: content, sticky chrome, overlay.
|
|
112
|
+
|
|
113
|
+
## 7 Do's & Don'ts
|
|
114
|
+
|
|
115
|
+
- **Do** keep the cream `background` (`#eeefe9`) as the app canvas — never flatten it to plain white.
|
|
116
|
+
- **Do** reserve `primary` yellow for the single most important action, and carry dark ink on it — the
|
|
117
|
+
yellow pill never takes white text.
|
|
118
|
+
- **Do** carry hierarchy with hairlines, weight, and whitespace — the brand is flat, no drop shadows.
|
|
119
|
+
- **Do** render code and log surfaces on the dark olive-charcoal `foreground` fill with `font-mono`.
|
|
120
|
+
- **Don't** pill operator buttons — the pill is the marketing nav CTA only; operator buttons are `radius`.
|
|
121
|
+
- **Don't** promote a second loud chromatic accent. Blue stays a quiet link / focus signal; the pastel
|
|
122
|
+
callout family and the hedgehog mascots are marketing decoration and do not enter operator chrome.
|
|
123
|
+
- **Don't** bring the 36px / 800 hero display tier into operator surfaces — headings stop at
|
|
124
|
+
`font-weight-strong`.
|
|
125
|
+
- **Don't** signal elevation with heavy shadows; reach past a hairline only for a real overlay.
|
|
126
|
+
|
|
127
|
+
## 8 Responsive
|
|
128
|
+
|
|
129
|
+
The operator sweep is 375 / 768 / 1024 / 1440.
|
|
130
|
+
|
|
131
|
+
| Breakpoint | What changes |
|
|
132
|
+
| --- | --- |
|
|
133
|
+
| 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
|
|
134
|
+
| 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
|
|
135
|
+
| 1024 | sidebar expands; two-pane queue+detail holds side by side |
|
|
136
|
+
| 1440 | content caps at `form-max-width` for forms; tables and dashboards use the full width |
|
|
137
|
+
|
|
138
|
+
## 9 Agent Prompt Guide
|
|
139
|
+
|
|
140
|
+
Directives the emitting agent follows verbatim:
|
|
141
|
+
|
|
142
|
+
- The cream `background` (`#eeefe9`) is the app canvas — white cards float on it; never flatten to plain
|
|
143
|
+
white. This warmth is the brand's whole identity once the mascots are gone.
|
|
144
|
+
- Reserve the yellow `primary` for the one primary action per surface, always with dark ink; if two
|
|
145
|
+
things want the accent, one is not primary.
|
|
146
|
+
- IBM Plex Sans across every role; build hierarchy from weight (`400` / `600`), not size jumps; every
|
|
147
|
+
numeric column is `tabular-nums`; every ID, code, and timestamp is `font-mono`.
|
|
148
|
+
- Stay flat — hairline olive `border` and weight before shadow. The dark `#23251d` code / log surface is
|
|
149
|
+
the only "elevated" surface, and it lifts with color, not shadow.
|
|
150
|
+
- Blue is links and focus only; green / red / amber are status only; one loud color (yellow).
|
|
151
|
+
- Leave behind: hedgehog mascots, 36px / 800 hero type, pill CTAs on chrome, pastel callout bands, the
|
|
152
|
+
80px marketing section rhythm.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: design-md/v1
|
|
3
|
+
product: Raycast
|
|
4
|
+
provenance: library
|
|
5
|
+
sourced: 2026-07-04
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Raycast — operator reading of a categorically-dark developer system
|
|
9
|
+
|
|
10
|
+
Raycast is the rare brand where the doctrine's light default yields: it is *categorically dark* —
|
|
11
|
+
one continuous near-black canvas with no light variant in the source. This entry carries that
|
|
12
|
+
identity onto operator surfaces: the chrome of Raycast's own command palette (near-black surfaces,
|
|
13
|
+
hairline borders, a single white action, ss03-Inter), with the marketing theatre left behind.
|
|
14
|
+
|
|
15
|
+
## 1 Visual Theme
|
|
16
|
+
|
|
17
|
+
Dark by default; there is no light variant. Flat and shadowless — hierarchy is a four-step surface
|
|
18
|
+
ladder (`background` → `card` → `muted` → overlay), never a drop shadow. Chrome is monochrome: white is
|
|
19
|
+
the single action color, and every primary button is a white rounded-rect on near-black. Color is
|
|
20
|
+
reserved — four saturated hues (blue, green, yellow, red) speak status and category only, never chrome.
|
|
21
|
+
The anchor surface is the near-black canvas carrying hairline-bordered cards; the single accent is
|
|
22
|
+
white. Density is `dense` — Raycast's command-palette chrome runs tight, and operator surfaces inherit it.
|
|
23
|
+
|
|
24
|
+
## 2 Color Roles
|
|
25
|
+
|
|
26
|
+
One monochrome action — white — carries every primary; the saturated hues speak only status.
|
|
27
|
+
|
|
28
|
+
| Role | Value | Allowed where |
|
|
29
|
+
| --- | --- | --- |
|
|
30
|
+
| `background` | near-black `#07080a` (canvas) | the dominant page surface, edge to edge |
|
|
31
|
+
| `foreground` | off-white `#f4f4f6` (ink) | primary ink on the canvas |
|
|
32
|
+
| `card` / `popover` | `#0d0d0d` (surface) | cards and overlays — one notch above canvas |
|
|
33
|
+
| `muted` / `secondary` | `#101111` (elevated) | inputs, tertiary buttons, active chips |
|
|
34
|
+
| `muted-foreground` | `#9c9c9d` (mute) | labels, captions, metadata |
|
|
35
|
+
| `border` / `input` | hairline `#242728` | every card edge, grid line, and field border |
|
|
36
|
+
| `primary` | white `#ffffff` | the one primary action — a white pill on black |
|
|
37
|
+
| `primary-foreground` | black `#000000` | text on the white action |
|
|
38
|
+
| `accent` | `#121212` (surface-card) | selected/active rows and nav — a surface lift, not a hue |
|
|
39
|
+
| `ring` | white `#ffffff` | focus outline — the action color, unmistakable |
|
|
40
|
+
| `destructive` | `#ff6161` | destructive actions and error status |
|
|
41
|
+
| `success` / `warning` | `#59d499` / `#ffc533` | status signalling only, never chrome |
|
|
42
|
+
|
|
43
|
+
The four saturated category hues (blue `#57c1ff`, green `#59d499`, yellow `#ffc533`, red `#ff6161`)
|
|
44
|
+
are status/illustration only — never a chrome button, never body text. White carries every action.
|
|
45
|
+
|
|
46
|
+
## 3 Typography
|
|
47
|
+
|
|
48
|
+
One sans, one mono. `font-sans` is Inter with `font-feature-settings: "calt","kern","liga","ss03"`
|
|
49
|
+
enabled globally — the ss03 alternate `g` is the brand's signature and must stay on; without it the
|
|
50
|
+
type reads as plain Inter and loses the voice. `font-mono` is JetBrains Mono for IDs, codes,
|
|
51
|
+
timestamps, log lines (Raycast's marketing rarely shows mono; operator work needs it). Letter spacing
|
|
52
|
+
is *positive* — Raycast opens type rather than tightening it, so headings track `+0.01em`, the rare
|
|
53
|
+
operator system that does. Numeric columns render `tabular-nums`.
|
|
54
|
+
|
|
55
|
+
| Step | Role | Size · line | Weight · tracking |
|
|
56
|
+
| --- | --- | --- | --- |
|
|
57
|
+
| h1 | page title | 24px / 1.3 | `font-weight-strong` · `heading-tracking` |
|
|
58
|
+
| h2 | section head | 20px / 1.4 | `font-weight-strong` · `heading-tracking` |
|
|
59
|
+
| h3 | card / group head | 16px / 1.4 | `font-weight-strong` |
|
|
60
|
+
| body | UI + prose | 14px / 1.5 | `font-weight-normal` |
|
|
61
|
+
| small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` |
|
|
62
|
+
| caption | uppercase eyebrow | 12px / 1.5 | `font-weight-strong`, `+0.03em`, uppercase |
|
|
63
|
+
|
|
64
|
+
Hero display (56–64px) stays behind. Emphasise by weight one step, never by size.
|
|
65
|
+
|
|
66
|
+
## 4 Component Stylings
|
|
67
|
+
|
|
68
|
+
- **Button** — `primary`: filled white `primary` on `primary-foreground`, `radius`, a rounded rect,
|
|
69
|
+
never a 9999 pill. Secondary: transparent, `foreground`. Tertiary: `secondary` (elevated) fill.
|
|
70
|
+
- **Input** — `secondary` (elevated) fill, 1px `border` (`border-weight`), `radius`; focus *brightens
|
|
71
|
+
the border* to the `ring`, never a glow.
|
|
72
|
+
- **Card** — `card` surface, 1px `border`, `radius`; no shadow (the surface ladder carries lift),
|
|
73
|
+
inset by `density-inset`.
|
|
74
|
+
- **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; row selection
|
|
75
|
+
tints `accent` (the surface-card lift); `tabular-nums` on numeric columns.
|
|
76
|
+
- **Side panel** — detail and edit open beside the work (`side-panel-width`, `side-panel-width-rich`),
|
|
77
|
+
not over it.
|
|
78
|
+
- **Badge** — hairline `border`, `muted`/status fill; status badges take `success` / `warning` /
|
|
79
|
+
`destructive`, never `primary`; info renders as `accent`-blue on a translucent tint.
|
|
80
|
+
- **Keycap** — a signature primitive: keyboard-shortcut hints render as small keycap glyphs (surface
|
|
81
|
+
fill, faint gradient, tight `radius`). Carry them onto operator shortcut affordances.
|
|
82
|
+
|
|
83
|
+
## 5 Layout
|
|
84
|
+
|
|
85
|
+
Base unit 8px with 2/4/12px tight steps; the on-scale ramp is `2 · 4 · 8 · 12 · 16 · 24 · 32 · 48 ·
|
|
86
|
+
64` (the 96px marketing section rhythm stays behind). Shell dimensions map one-to-one to the layout
|
|
87
|
+
primitives: sidebar `sidebar-width-expanded` / `sidebar-width-collapsed`, topbar `topbar-height` (56px,
|
|
88
|
+
the brand's own nav height), side panel `side-panel-width` / `side-panel-width-rich`, modal cap
|
|
89
|
+
`modal-width-max`, forms `form-max-width`, tables full-width. Density is `dense` globally
|
|
90
|
+
(`density-tier`), stepped per archetype by the surface catalog — never by absolute overrides.
|
|
91
|
+
|
|
92
|
+
## 6 Depth
|
|
93
|
+
|
|
94
|
+
Flat and shadowless — the defining trait. Hierarchy comes from the surface ladder, not shadow:
|
|
95
|
+
|
|
96
|
+
- **0 — canvas** `background` `#07080a`, no border.
|
|
97
|
+
- **1 — surface / card** `card` `#0d0d0d` on a 1px `border`, one notch above canvas.
|
|
98
|
+
- **2 — elevated** `muted` `#101111` for inputs, active chips, and nav selection.
|
|
99
|
+
- **3 — overlay** `popover` / side panel / modal — separated by the surface lift plus a hairline;
|
|
100
|
+
`shadow-intensity` is 0, because the brand has no drop shadows at all.
|
|
101
|
+
|
|
102
|
+
Focus is a `ring` outline in white (the action color), always visible; three z-levels: content, chrome, overlay.
|
|
103
|
+
|
|
104
|
+
## 7 Do's & Don'ts
|
|
105
|
+
|
|
106
|
+
- **Do** keep the canvas near-black and build every elevation from the surface ladder.
|
|
107
|
+
- **Do** keep chrome monochrome — white is the one action color; reserve it for the single primary.
|
|
108
|
+
- **Do** enable Inter's `ss03` (with `calt`/`kern`/`liga`) globally; without it the type loses its voice.
|
|
109
|
+
- **Do** carry shortcut hints as keycap glyphs; `tabular-nums` on numerics, `font-mono` on IDs/codes/timestamps.
|
|
110
|
+
- **Don't** add a drop shadow — depth is the surface ladder, never shadow.
|
|
111
|
+
- **Don't** promote a second chromatic action — the four saturated hues are status/category only, never chrome.
|
|
112
|
+
- **Don't** fully-round the CTA — the primary is a rounded rect at `radius`, not a 9999 pill.
|
|
113
|
+
- **Don't** reach for the red diagonal-stripe hero gradient or hero-scale display type — they stay behind.
|
|
114
|
+
- **Don't** pad cards 32px+; run tight at 16–24px.
|
|
115
|
+
|
|
116
|
+
## 8 Responsive
|
|
117
|
+
|
|
118
|
+
The operator sweep is 375 / 768 / 1024 / 1440.
|
|
119
|
+
|
|
120
|
+
| Breakpoint | What changes |
|
|
121
|
+
| --- | --- |
|
|
122
|
+
| 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; the near-black canvas holds |
|
|
123
|
+
| 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
|
|
124
|
+
| 1024 | sidebar expands; two-pane list+detail holds side by side |
|
|
125
|
+
| 1440 | forms cap at `form-max-width`; tables and dashboards use the full width |
|
|
126
|
+
|
|
127
|
+
## 9 Agent Prompt Guide
|
|
128
|
+
|
|
129
|
+
- Treat the default theme as dark — the color map already resolves to near-black; synthesize no light variant.
|
|
130
|
+
- Build depth from the surface ladder (`background` → `card` → `muted` → overlay); never a drop shadow.
|
|
131
|
+
- Keep chrome monochrome: white is the action. If two elements want white, one of them is not primary.
|
|
132
|
+
- Enable Inter's `ss03` (with `calt`/`kern`/`liga`) globally; render shortcut hints as keycap glyphs.
|
|
133
|
+
- The four saturated hues are status/category only — `success`/`warning`/`destructive`/info — never chrome.
|
|
134
|
+
- **Carries over:** near-black canvas + surface ladder, hairline borders, the monochrome white action,
|
|
135
|
+
tight 6–10px radius, ss03-Inter, positive heading tracking, keycap shortcut glyphs.
|
|
136
|
+
- **Stays behind:** the red diagonal-stripe hero gradient, hero-scale display (56–64px), full-bleed
|
|
137
|
+
product-screenshot heroes, the 96px marketing section rhythm.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: design-md/v1
|
|
3
|
+
product: Replicate
|
|
4
|
+
provenance: library
|
|
5
|
+
sourced: 2026-07-04
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Replicate — the warm-cream operator reading
|
|
9
|
+
|
|
10
|
+
Replicate's public surfaces read as an ML lab notebook crossed with a print zine: a warm cream
|
|
11
|
+
canvas, ink-dark type, dark monospace code wells, and one hot-orange accent used like a stamp. This
|
|
12
|
+
entry is the *operator* reading of that brand — the same warmth and single accent, carried onto a
|
|
13
|
+
CRM, a queue, or a dashboard. The hero-scale display grotesque, full-bleed orange bands, the
|
|
14
|
+
gradient mesh, and contributor mosaics stay behind as marketing furniture. What carries: the
|
|
15
|
+
cream-not-white temperature, the ink foreground, the scarce orange, the soft-rounded corners, and
|
|
16
|
+
the strict font lanes.
|
|
17
|
+
|
|
18
|
+
## 1 Visual Theme
|
|
19
|
+
|
|
20
|
+
Light by default; dark is opt-in. Flat: hierarchy is color-blocking and hairlines, not shadow — surfaces
|
|
21
|
+
step warm (bone sidebar → cream canvas → white cards) and elevation is a surface swap, never a heavy drop.
|
|
22
|
+
A single accent, Replicate `primary` (hot orange `#ea2804`), is reserved for the one action that matters on
|
|
23
|
+
a surface — treated as a stamp, one orange element per view. The field is warm: the canvas is cream `#f9f7f3`,
|
|
24
|
+
never pure white, and ink is `#202020`, a warm near-black. Corners are soft (`radius` 10px) — the brand has
|
|
25
|
+
no sharp edges — but the marketing full-pill treatment stays behind except on badges. Density is `standard`:
|
|
26
|
+
editorial warmth wants a little air, operator restraint keeps it from sprawling.
|
|
27
|
+
|
|
28
|
+
## 2 Color Roles
|
|
29
|
+
|
|
30
|
+
Light values first. One accent — `primary` is the only chromatic hue that carries meaning; status
|
|
31
|
+
and focus hues speak only their function.
|
|
32
|
+
|
|
33
|
+
| Role | Value | Allowed where |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| `background` | cream `#f9f7f3` | the page canvas — the dominant warm surface, never pure white |
|
|
36
|
+
| `card` / `popover` | white `#ffffff` | data cards, tables, inputs, overlays — the only place white appears |
|
|
37
|
+
| `foreground` | warm ink `#202020` | all primary text |
|
|
38
|
+
| `muted` / `secondary` | bone `#f3f0e8` | hover rows, subtle fills, secondary buttons, inset groups |
|
|
39
|
+
| `muted-foreground` | charcoal `#575757` | labels, captions, metadata, secondary text |
|
|
40
|
+
| `border` / `input` | hairline `#dfddda` | every separator, grid line, and field edge |
|
|
41
|
+
| `primary` | orange `#ea2804` | the one primary action; active nav; inline links |
|
|
42
|
+
| `accent` | pale peach `#fbe9e3` | selected/hovered rows and nav, on-accent surfaces only |
|
|
43
|
+
| `ring` | focus blue `#3b82f6` | the keyboard focus outline — deliberately cool, so focus never reads as the orange CTA |
|
|
44
|
+
| `destructive` | red `#b3261e` | destructive actions and error state only |
|
|
45
|
+
| `success` / `warning` | green `#2b9a66` / gold `#b7791f` | status signalling only, never chrome |
|
|
46
|
+
|
|
47
|
+
The hero glow, hero pink, and orange bands are marketing graces: they carry no role here (see §7).
|
|
48
|
+
|
|
49
|
+
## 3 Typography
|
|
50
|
+
|
|
51
|
+
Two lanes, strictly kept. `font-sans` is basier-square (Geist or Inter substitute) — UI, body, and headings
|
|
52
|
+
all ride it; heading weight and tight tracking, not a second family, carry emphasis. `font-mono` is JetBrains
|
|
53
|
+
Mono for IDs, model slugs, codes, timestamps, and log lines. The hero display grotesque `rb-freigeist-neue`
|
|
54
|
+
is hero-scale (72px+) and stays behind. Numeric columns render `tabular-nums` so figures align down a column.
|
|
55
|
+
|
|
56
|
+
| Step | Role | Size · line | Weight · tracking |
|
|
57
|
+
| --- | --- | --- | --- |
|
|
58
|
+
| h1 | page title | 24px / 1.3 | `font-weight-strong` · `heading-tracking` |
|
|
59
|
+
| h2 | section head | 20px / 1.4 | `font-weight-strong` · `heading-tracking` |
|
|
60
|
+
| h3 | card / group head | 16px / 1.4 | `font-weight-strong` · `heading-tracking` |
|
|
61
|
+
| body | UI + prose | 14px / 1.5 | `font-weight-normal` |
|
|
62
|
+
| small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` |
|
|
63
|
+
| caption | eyebrow / footnote | 12px / 1.33 | `font-weight-strong`, uppercase |
|
|
64
|
+
|
|
65
|
+
Body weight stays 400 — emphasis is weight-to-strong or a switch to `font-mono`, never a bump to 500.
|
|
66
|
+
|
|
67
|
+
## 4 Component Stylings
|
|
68
|
+
|
|
69
|
+
Every recurring operator component composes from the primitives — no literal values.
|
|
70
|
+
|
|
71
|
+
- **Button** — `primary`: filled `primary` on `primary-foreground`, `radius`, soft-cornered, not pill.
|
|
72
|
+
Secondary: `secondary` fill, `border`, `foreground`. Ghost: transparent, `accent` on hover. Pressed
|
|
73
|
+
darkens `primary` one step.
|
|
74
|
+
- **Input** — `card` fill, 1px `border` (`border-weight`), `radius`; focus draws the `ring` at 2px, no glow.
|
|
75
|
+
- **Card** — white `card` on the cream canvas, 1px `border`, `radius`; shadow only when a true overlay lifts
|
|
76
|
+
(`shadow-intensity`); inset by `density-inset`.
|
|
77
|
+
- **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on
|
|
78
|
+
numeric columns; row selection tints `accent`.
|
|
79
|
+
- **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich` for
|
|
80
|
+
content-heavy), beside the work, not over it.
|
|
81
|
+
- **Badge** — pill (`radius-scale` 9999) is allowed here as a brand grace; hairline `border` or status fill,
|
|
82
|
+
uppercase caption; status badges take `success` / `warning` / `destructive`, never `primary`. Code and log
|
|
83
|
+
panels invert to an ink-dark fill with `font-mono` — the one place dark blocking appears in operator chrome.
|
|
84
|
+
|
|
85
|
+
## 5 Layout
|
|
86
|
+
|
|
87
|
+
Base spacing unit 4px; the on-scale ramp is `2 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64 · 96`. Shell dimensions
|
|
88
|
+
map one-to-one to the layout primitives: sidebar `sidebar-width-expanded` / `sidebar-width-collapsed`, topbar
|
|
89
|
+
`topbar-height` (the brand's 60px nav rhythm), side panel `side-panel-width` / `side-panel-width-rich`, modal
|
|
90
|
+
cap `modal-width-max`, forms `form-max-width`, tables full-width. Rows ride `table-row-height` (44px — the
|
|
91
|
+
brand's touch-comfortable button height, an airier operator rhythm). Density is governed globally by
|
|
92
|
+
`density-tier` and stepped per archetype by the surface catalog.
|
|
93
|
+
|
|
94
|
+
## 6 Depth
|
|
95
|
+
|
|
96
|
+
Flat, color-blocked. Hierarchy comes from the warm surface ladder and hairlines, not shadow:
|
|
97
|
+
|
|
98
|
+
- **0 — canvas** `background` cream, no border.
|
|
99
|
+
- **1 — panel / card** `card` white on a 1px `border`; a surface swap to `muted` bone marks an inset group.
|
|
100
|
+
- **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns a soft `md` shadow.
|
|
101
|
+
|
|
102
|
+
No level stacks a heavier shadow to signal rank; rank is surface color, border, and position. Focus is a 2px
|
|
103
|
+
`ring` outline (never a glow), deliberately cool blue so it never collides with the orange CTA. Three
|
|
104
|
+
z-levels: content, sticky chrome, overlay.
|
|
105
|
+
|
|
106
|
+
## 7 Do's & Don'ts
|
|
107
|
+
|
|
108
|
+
- **Do** keep the cream `background` as the page canvas; white is for cards, inputs, and overlays only.
|
|
109
|
+
- **Do** reserve `primary` orange for the single most important action, active nav, and inline links —
|
|
110
|
+
three roles, treated as a stamp: at most one orange element per view.
|
|
111
|
+
- **Do** apply `tabular-nums` to every numeric column and `font-mono` to IDs, codes, slugs, and timestamps.
|
|
112
|
+
- **Don't** replace cream with pure white at the page level — the brand temperature lives in the canvas.
|
|
113
|
+
- **Don't** promote a second chromatic accent. The hot orange is the only accent; success green, warning
|
|
114
|
+
gold, and focus blue are functional, not decorative.
|
|
115
|
+
- **Don't** pill the primary CTA — the full-pill treatment is a marketing signature; operator CTAs keep the
|
|
116
|
+
soft `radius`, and pills stay on badges. Don't reach for the hero display grotesque or heavy drop shadows.
|
|
117
|
+
|
|
118
|
+
## 8 Responsive
|
|
119
|
+
|
|
120
|
+
The operator sweep is 375 / 768 / 1024 / 1440.
|
|
121
|
+
|
|
122
|
+
| Breakpoint | What changes |
|
|
123
|
+
| --- | --- |
|
|
124
|
+
| 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
|
|
125
|
+
| 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
|
|
126
|
+
| 1024 | sidebar expands; two-pane queue+detail holds side by side |
|
|
127
|
+
| 1440 | forms cap at `form-max-width`; tables and dashboards use the full width |
|
|
128
|
+
|
|
129
|
+
## 9 Agent Prompt Guide
|
|
130
|
+
|
|
131
|
+
Directives the emitting agent follows verbatim:
|
|
132
|
+
|
|
133
|
+
- Lead every list surface with its table; lead every entity with its primary read, not its chrome.
|
|
134
|
+
- Set the page on the cream `background`; float white `card` surfaces on it — never pure white at page level.
|
|
135
|
+
Accent only the primary action with orange `primary`; if two things want the orange, one is not primary.
|
|
136
|
+
- Every numeric column is `tabular-nums`; every ID, slug, code, and timestamp is `font-mono`.
|
|
137
|
+
- Every workflow completes from the keyboard; the cool-blue `ring` focus outline is always visible. Stay
|
|
138
|
+
flat — warm surface swaps and hairlines before shadow; reach past a hairline only for a real overlay.
|
|
139
|
+
- Leave the marketing furniture behind: no hero grotesque, no full-bleed orange bands, no gradient mesh, no
|
|
140
|
+
contributor mosaics, no pill CTAs. Palette, temperature, soft corners, and font lanes carry; the rest does not.
|