@nurix/etna 0.19.11 → 0.19.12
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/data/harness-index.json +1 -1
- package/data/harnesses/code/harness.json +1 -1
- package/data/harnesses/code/rules/frontend.md +5 -5
- package/data/harnesses/code/skills/design/SKILL.md +70 -50
- package/data/harnesses/code/skills/design/components/charts.md +76 -0
- package/data/harnesses/code/skills/design/components/collections.md +132 -0
- package/data/harnesses/code/skills/design/components/feedback.md +47 -0
- package/data/harnesses/code/skills/design/components/hooks.md +35 -0
- package/data/harnesses/code/skills/design/components/index.md +143 -0
- package/data/harnesses/code/skills/design/components/inputs.md +327 -0
- package/data/harnesses/code/skills/design/components/layout.md +52 -0
- package/data/harnesses/code/skills/design/components/media.md +66 -0
- package/data/harnesses/code/skills/design/components/motion.md +82 -0
- package/data/harnesses/code/skills/design/components/navigation.md +29 -0
- package/data/harnesses/code/skills/design/components/overlays.md +72 -0
- package/data/harnesses/code/skills/design/components/setup.md +40 -0
- package/data/harnesses/code/skills/design/components/typography.md +46 -0
- package/data/harnesses/code/skills/design/components/utils.md +37 -0
- package/data/harnesses/code/skills/design/data/blueprints/browse.md +38 -0
- package/data/harnesses/code/skills/design/data/blueprints/creation-flow.md +38 -0
- package/data/harnesses/code/skills/design/data/blueprints/dashboard.md +38 -0
- package/data/harnesses/code/skills/design/data/blueprints/grid.md +38 -0
- package/data/harnesses/code/skills/design/data/blueprints/queue.md +38 -0
- package/data/harnesses/code/skills/design/data/blueprints/record-detail.md +38 -0
- package/data/harnesses/code/skills/design/data/blueprints/settings.md +38 -0
- package/data/harnesses/code/skills/design/data/chart-styling/Readme.md +33 -0
- package/data/harnesses/code/skills/design/data/chart-styling/carbon-accessible-alert-semantic.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/carbon-monochrome-sequential-trend.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/datadog-classic-six-aligned.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/datawrapper-tiered-gray-hierarchy.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/econ-red-rule-horizontal.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/financial-diverging-threshold-overlay.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/ft-vocabulary-ranked-muted.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/grafana-dark-threshold-bands.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/material-rounded-explicit-label.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/nyt-ghost-grid-direct-label.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/plot-currentcolor-inherit.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/saas-gradient-glow-area.md +19 -0
- package/data/harnesses/code/skills/design/data/chart-styling/shadcn-composable-css-vars.md +19 -0
- package/data/harnesses/code/skills/design/data/charts/census.csv +58 -0
- package/data/harnesses/code/skills/design/data/checklists/browse.md +21 -0
- package/data/harnesses/code/skills/design/data/checklists/creation-flow.md +20 -0
- package/data/harnesses/code/skills/design/data/checklists/dashboard.md +21 -0
- package/data/harnesses/code/skills/design/data/checklists/grid.md +21 -0
- package/data/harnesses/code/skills/design/data/checklists/queue.md +21 -0
- package/data/harnesses/code/skills/design/data/checklists/record-detail.md +21 -0
- package/data/harnesses/code/skills/design/data/checklists/settings.md +21 -0
- package/data/harnesses/code/skills/design/data/chrome/board-column.md +68 -0
- package/data/harnesses/code/skills/design/data/chrome/data-table.md +63 -0
- package/data/harnesses/code/skills/design/data/chrome/side-panel.md +60 -0
- package/data/harnesses/code/skills/design/data/chrome/sidebar.md +78 -0
- package/data/harnesses/code/skills/design/data/chrome/stat-cards.md +62 -0
- package/data/harnesses/code/skills/design/data/chrome/topbar.md +65 -0
- package/data/harnesses/code/skills/design/data/color/accent-presets.md +90 -0
- package/data/harnesses/code/skills/design/data/color/aesop-earth-mute.md +91 -0
- package/data/harnesses/code/skills/design/data/color/arc-peach-play.md +90 -0
- package/data/harnesses/code/skills/design/data/color/attio-hunter-teal.md +90 -0
- package/data/harnesses/code/skills/design/data/color/carbon-cyan-signal.md +90 -0
- package/data/harnesses/code/skills/design/data/color/clay-parchment.md +90 -0
- package/data/harnesses/code/skills/design/data/color/duolingo-feather.md +90 -0
- package/data/harnesses/code/skills/design/data/color/geist-mono-signal.md +90 -0
- package/data/harnesses/code/skills/design/data/color/linear-graphite-violet.md +90 -0
- package/data/harnesses/code/skills/design/data/color/mercury-onyx-cobalt.md +90 -0
- package/data/harnesses/code/skills/design/data/color/notion-paper-ink.md +90 -0
- package/data/harnesses/code/skills/design/data/color/radix-slate-iris.md +90 -0
- package/data/harnesses/code/skills/design/data/color/raycast-void-spectrum.md +90 -0
- package/data/harnesses/code/skills/design/data/color/spectrum-celery-fuchsia.md +90 -0
- package/data/harnesses/code/skills/design/data/color/stripe-blurple-ruby.md +90 -0
- package/data/harnesses/code/skills/design/data/color/superhuman-cod-picton.md +89 -0
- package/data/harnesses/code/skills/design/data/corpora/operations-review/companies.csv +15 -0
- package/data/harnesses/code/skills/design/data/corpora/operations-review/corpus.md +87 -0
- package/data/harnesses/code/skills/design/data/corpora/operations-review/people.csv +25 -0
- package/data/harnesses/code/skills/design/data/corpora/procurement-approvals/companies.csv +15 -0
- package/data/harnesses/code/skills/design/data/corpora/procurement-approvals/corpus.md +83 -0
- package/data/harnesses/code/skills/design/data/corpora/procurement-approvals/people.csv +25 -0
- package/data/harnesses/code/skills/design/data/corpora/revenue-analytics/companies.csv +15 -0
- package/data/harnesses/code/skills/design/data/corpora/revenue-analytics/corpus.md +89 -0
- package/data/harnesses/code/skills/design/data/corpora/revenue-analytics/people.csv +25 -0
- package/data/harnesses/code/skills/design/data/elevation/ant-design-directional-shadow.md +19 -0
- package/data/harnesses/code/skills/design/data/elevation/apple-liquid-glass-material.md +18 -0
- package/data/harnesses/code/skills/design/data/elevation/atlassian-surface-shadow-pairing.md +20 -0
- package/data/harnesses/code/skills/design/data/elevation/fluent-2-key-ambient-ramp.md +20 -0
- package/data/harnesses/code/skills/design/data/elevation/github-primer-sparing-shadow.md +19 -0
- package/data/harnesses/code/skills/design/data/elevation/ibm-carbon-layer-and-border.md +19 -0
- package/data/harnesses/code/skills/design/data/elevation/linear-dark-surface-ladder.md +17 -0
- package/data/harnesses/code/skills/design/data/elevation/material-2-key-ambient-dp-ramp.md +19 -0
- package/data/harnesses/code/skills/design/data/elevation/material-3-tonal-elevation.md +21 -0
- package/data/harnesses/code/skills/design/data/elevation/neobrutalist-hard-offset.md +19 -0
- package/data/harnesses/code/skills/design/data/elevation/neumorphic-soft-dual-shadow.md +18 -0
- package/data/harnesses/code/skills/design/data/elevation/notion-warm-minimal-hairline.md +17 -0
- package/data/harnesses/code/skills/design/data/elevation/polaris-elevation-inset-bevel.md +21 -0
- package/data/harnesses/code/skills/design/data/elevation/radix-themes-alpha-ring-scale.md +19 -0
- package/data/harnesses/code/skills/design/data/elevation/shadcn-neutral-derived-radius.md +19 -0
- package/data/harnesses/code/skills/design/data/elevation/stripe-brand-tinted-dual-shadow.md +18 -0
- package/data/harnesses/code/skills/design/data/elevation/tailwind-default-utility-scale.md +19 -0
- package/data/harnesses/code/skills/design/data/elevation/vercel-geist-shadow-as-border.md +20 -0
- package/data/harnesses/code/skills/design/data/gradients/amber-attention-fill.md +16 -0
- package/data/harnesses/code/skills/design/data/gradients/cloud-shadow-wash.md +16 -0
- package/data/harnesses/code/skills/design/data/gradients/confident-lavender-wash.md +16 -0
- package/data/harnesses/code/skills/design/data/gradients/ember-ship-flare.md +18 -0
- package/data/harnesses/code/skills/design/data/gradients/full-metal-wash.md +16 -0
- package/data/harnesses/code/skills/design/data/gradients/indigo-ruby-cta-band.md +18 -0
- package/data/harnesses/code/skills/design/data/gradients/linear-graphite-wash.md +18 -0
- package/data/harnesses/code/skills/design/data/gradients/marble-quartz-wash.md +16 -0
- package/data/harnesses/code/skills/design/data/gradients/midnight-aurora-panel.md +16 -0
- package/data/harnesses/code/skills/design/data/gradients/neutral-volume-fill.md +16 -0
- package/data/harnesses/code/skills/design/data/gradients/revenue-uptrend-fill.md +16 -0
- package/data/harnesses/code/skills/design/data/gradients/risk-decline-fill.md +16 -0
- package/data/harnesses/code/skills/design/data/gradients/signal-blue-develop.md +18 -0
- package/data/harnesses/code/skills/design/data/gradients/slate-mist-wash.md +16 -0
- package/data/harnesses/code/skills/design/data/gradients/stripe-atmosphere-mesh.md +18 -0
- package/data/harnesses/code/skills/design/data/gradients/teal-signal-accent.md +16 -0
- package/data/harnesses/code/skills/design/data/gradients/violet-magenta-promo.md +16 -0
- package/data/harnesses/code/skills/design/data/iconography.md +199 -0
- package/data/harnesses/code/skills/design/data/motion/accordion-expand.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/destructive-hold-confirm.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/drag-dismiss-momentum.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/empty-state-arrive.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/hover-lift.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/modal-center-arrive.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/number-ticker-roll.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/onboarding-bounce.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/panel-slide.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/press-feedback.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/progress-linear-loop.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/route-crossfade.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/rubber-band-overscroll.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/skeleton-shimmer.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/stagger-arrive.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/toast-enter-stack.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/tooltip-chain-instant.md +18 -0
- package/data/harnesses/code/skills/design/data/motion/trigger-anchored-reveal.md +18 -0
- package/data/harnesses/code/skills/design/data/tells.csv +34 -0
- package/data/harnesses/code/skills/design/data/typography/anton-work-sans.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/archivo-black-archivo.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/bitter-karla.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/dm-serif-dm-sans.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/fraunces-inter.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/geist-geist-mono.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/hubot-sans-mona-sans.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/ibm-plex-sans-operator-single-family.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/instrument-serif-instrument-sans.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/inter-operator-single-family.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/libre-baskerville-libre-franklin.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/newsreader-inter.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/playfair-display-source-sans.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/public-sans-operator-single-family.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/sohne-inter-fintech.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/source-serif-source-sans.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/space-grotesk-work-sans-space-mono.md +17 -0
- package/data/harnesses/code/skills/design/data/typography/spectral-manrope.md +17 -0
- package/data/harnesses/code/skills/design/data/voices/bright-collaborator.md +29 -0
- package/data/harnesses/code/skills/design/data/voices/direct-operator.md +29 -0
- package/data/harnesses/code/skills/design/data/voices/earnest-helper.md +29 -0
- package/data/harnesses/code/skills/design/data/voices/editorial-composed.md +29 -0
- package/data/harnesses/code/skills/design/data/voices/quiet-concierge.md +29 -0
- package/data/harnesses/code/skills/design/data/voices/warm-guide.md +29 -0
- package/data/harnesses/code/skills/design/design-md/SCHEMA.md +179 -0
- package/data/harnesses/code/skills/design/design-md/index.csv +67 -0
- package/data/harnesses/code/skills/design/design-md/library/airbnb.md +207 -0
- package/data/harnesses/code/skills/design/design-md/library/airtable.md +205 -0
- package/data/harnesses/code/skills/design/design-md/library/anthropic-claude.md +203 -0
- package/data/harnesses/code/skills/design/design-md/library/apple.md +206 -0
- package/data/harnesses/code/skills/design/design-md/library/binance.md +210 -0
- package/data/harnesses/code/skills/design/design-md/library/bmw.md +210 -0
- package/data/harnesses/code/skills/design/design-md/library/cal.md +209 -0
- package/data/harnesses/code/skills/design/design-md/library/clay.md +204 -0
- package/data/harnesses/code/skills/design/design-md/library/clickhouse.md +205 -0
- package/data/harnesses/code/skills/design/design-md/library/cohere.md +205 -0
- package/data/harnesses/code/skills/design/design-md/library/coinbase.md +198 -0
- package/data/harnesses/code/skills/design/design-md/library/composio.md +198 -0
- package/data/harnesses/code/skills/design/design-md/library/cursor.md +197 -0
- package/data/harnesses/code/skills/design/design-md/library/elevenlabs.md +199 -0
- package/data/harnesses/code/skills/design/design-md/library/expo.md +200 -0
- package/data/harnesses/code/skills/design/design-md/library/figma.md +199 -0
- package/data/harnesses/code/skills/design/design-md/library/framer.md +202 -0
- package/data/harnesses/code/skills/design/design-md/library/hashicorp.md +205 -0
- package/data/harnesses/code/skills/design/design-md/library/ibm.md +205 -0
- package/data/harnesses/code/skills/design/design-md/library/intercom.md +204 -0
- package/data/harnesses/code/skills/design/design-md/library/kraken.md +200 -0
- package/data/harnesses/code/skills/design/design-md/library/linear-app.md +198 -0
- package/data/harnesses/code/skills/design/design-md/library/lovable.md +199 -0
- package/data/harnesses/code/skills/design/design-md/library/meta.md +204 -0
- package/data/harnesses/code/skills/design/design-md/library/minimax.md +204 -0
- package/data/harnesses/code/skills/design/design-md/library/mintlify.md +210 -0
- package/data/harnesses/code/skills/design/design-md/library/miro.md +209 -0
- package/data/harnesses/code/skills/design/design-md/library/mistral-ai.md +201 -0
- package/data/harnesses/code/skills/design/design-md/library/mongodb.md +201 -0
- package/data/harnesses/code/skills/design/design-md/library/notion.md +204 -0
- package/data/harnesses/code/skills/design/design-md/library/nvidia.md +215 -0
- package/data/harnesses/code/skills/design/design-md/library/ollama.md +213 -0
- package/data/harnesses/code/skills/design/design-md/library/opencode-ai.md +216 -0
- package/data/harnesses/code/skills/design/design-md/library/posthog.md +218 -0
- package/data/harnesses/code/skills/design/design-md/library/raycast.md +214 -0
- package/data/harnesses/code/skills/design/design-md/library/replicate.md +202 -0
- package/data/harnesses/code/skills/design/design-md/library/resend.md +203 -0
- package/data/harnesses/code/skills/design/design-md/library/revolut.md +203 -0
- package/data/harnesses/code/skills/design/design-md/library/runwayml.md +203 -0
- package/data/harnesses/code/skills/design/design-md/library/sanity.md +200 -0
- package/data/harnesses/code/skills/design/design-md/library/sentry.md +201 -0
- package/data/harnesses/code/skills/design/design-md/library/shopify.md +202 -0
- package/data/harnesses/code/skills/design/design-md/library/slack.md +202 -0
- package/data/harnesses/code/skills/design/design-md/library/spacex.md +206 -0
- package/data/harnesses/code/skills/design/design-md/library/spotify.md +206 -0
- package/data/harnesses/code/skills/design/design-md/library/stripe.md +196 -0
- package/data/harnesses/code/skills/design/design-md/library/supabase.md +196 -0
- package/data/harnesses/code/skills/design/design-md/library/superhuman.md +194 -0
- package/data/harnesses/code/skills/design/design-md/library/tesla.md +198 -0
- package/data/harnesses/code/skills/design/design-md/library/theverge.md +199 -0
- package/data/harnesses/code/skills/design/design-md/library/together-ai.md +193 -0
- package/data/harnesses/code/skills/design/design-md/library/uber.md +195 -0
- package/data/harnesses/code/skills/design/design-md/library/vercel.md +195 -0
- package/data/harnesses/code/skills/design/design-md/library/voltagent.md +197 -0
- package/data/harnesses/code/skills/design/design-md/library/warp.md +196 -0
- package/data/harnesses/code/skills/design/design-md/library/webflow.md +197 -0
- package/data/harnesses/code/skills/design/design-md/library/wired.md +197 -0
- package/data/harnesses/code/skills/design/design-md/library/wise.md +198 -0
- package/data/harnesses/code/skills/design/design-md/library/x-ai.md +199 -0
- package/data/harnesses/code/skills/design/design-md/library/zapier.md +198 -0
- package/data/harnesses/code/skills/design/design-md/nurix.md +214 -0
- package/data/harnesses/code/skills/design/design-md/variants/editorial-luxury.md +184 -0
- package/data/harnesses/code/skills/design/design-md/variants/expressive-saas.md +216 -0
- package/data/harnesses/code/skills/design/design-md/variants/quiet-premium.md +211 -0
- package/data/harnesses/code/skills/design/design-md/variants/terse-dense-operator.md +212 -0
- package/data/harnesses/code/skills/design/design-md/variants/warm-approachable.md +216 -0
- package/data/harnesses/code/skills/design/references/compose.md +23 -0
- package/data/harnesses/code/skills/design/references/content.md +28 -0
- package/data/harnesses/code/skills/design/references/emission.md +21 -0
- package/data/harnesses/code/skills/design/references/existing-apps.md +27 -0
- package/data/harnesses/code/skills/design/references/intake.md +36 -0
- package/data/harnesses/code/skills/design/references/object-pass.md +24 -0
- package/data/harnesses/code/skills/design/references/ship-gate.md +29 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/Readme.md +195 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/ai-layer.md +49 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/attributes-lifecycle.md +43 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/container-choice.md +44 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/creation-paths.md +46 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/dashboards.md +42 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/modes.md +42 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/object-model.md +46 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/page-archetype.md +48 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/promotion-demotion.md +37 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/settings.md +42 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/standard-pages.md +46 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/state-matrix.md +41 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/table-mechanics.md +48 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/verbs.md +45 -0
- package/data/harnesses/code/skills/design/references/ux-patterns/viewer-context.md +40 -0
- package/data/harnesses/code/skills/design/scripts/README-validator.md +27 -0
- package/data/harnesses/code/skills/design/scripts/select-chart.mjs +596 -0
- package/data/harnesses/code/skills/design/scripts/validate-design-md.mjs +1198 -0
- package/package.json +1 -1
- package/data/harnesses/code/skills/design/data/catalog/rules.csv +0 -137
- package/data/harnesses/code/skills/design/data/combinations/Readme.md +0 -33
- package/data/harnesses/code/skills/design/data/combinations/accent-presets.md +0 -113
- package/data/harnesses/code/skills/design/data/combinations/charts.csv +0 -33
- package/data/harnesses/code/skills/design/data/combinations/fonts-known.json +0 -448
- package/data/harnesses/code/skills/design/data/combinations/icons.csv +0 -157
- package/data/harnesses/code/skills/design/data/combinations/landing.csv +0 -38
- package/data/harnesses/code/skills/design/data/combinations/lucide-names.json +0 -2001
- package/data/harnesses/code/skills/design/data/combinations/manifest.json +0 -330
- package/data/harnesses/code/skills/design/data/combinations/motion.csv +0 -10
- package/data/harnesses/code/skills/design/data/combinations/palettes.csv +0 -92
- package/data/harnesses/code/skills/design/data/combinations/product-router.csv +0 -80
- package/data/harnesses/code/skills/design/data/combinations/styles.csv +0 -67
- package/data/harnesses/code/skills/design/data/combinations/typography.csv +0 -64
- package/data/harnesses/code/skills/design/data/design-md/SCHEMA.md +0 -106
- package/data/harnesses/code/skills/design/data/design-md/library/airbnb.md +0 -154
- package/data/harnesses/code/skills/design/data/design-md/library/airtable.md +0 -151
- package/data/harnesses/code/skills/design/data/design-md/library/anthropic-claude.md +0 -139
- package/data/harnesses/code/skills/design/data/design-md/library/apple.md +0 -139
- package/data/harnesses/code/skills/design/data/design-md/library/binance.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/bmw.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/cal.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/clay.md +0 -139
- package/data/harnesses/code/skills/design/data/design-md/library/clickhouse.md +0 -139
- package/data/harnesses/code/skills/design/data/design-md/library/cohere.md +0 -147
- package/data/harnesses/code/skills/design/data/design-md/library/coinbase.md +0 -156
- package/data/harnesses/code/skills/design/data/design-md/library/composio.md +0 -138
- package/data/harnesses/code/skills/design/data/design-md/library/cursor.md +0 -138
- package/data/harnesses/code/skills/design/data/design-md/library/elevenlabs.md +0 -137
- package/data/harnesses/code/skills/design/data/design-md/library/expo.md +0 -148
- package/data/harnesses/code/skills/design/data/design-md/library/figma.md +0 -141
- package/data/harnesses/code/skills/design/data/design-md/library/framer.md +0 -156
- package/data/harnesses/code/skills/design/data/design-md/library/hashicorp.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/ibm.md +0 -153
- package/data/harnesses/code/skills/design/data/design-md/library/intercom.md +0 -158
- package/data/harnesses/code/skills/design/data/design-md/library/kraken.md +0 -156
- package/data/harnesses/code/skills/design/data/design-md/library/linear-app.md +0 -122
- package/data/harnesses/code/skills/design/data/design-md/library/lovable.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/meta.md +0 -139
- package/data/harnesses/code/skills/design/data/design-md/library/minimax.md +0 -139
- package/data/harnesses/code/skills/design/data/design-md/library/mintlify.md +0 -139
- package/data/harnesses/code/skills/design/data/design-md/library/miro.md +0 -153
- package/data/harnesses/code/skills/design/data/design-md/library/mistral-ai.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/mongodb.md +0 -155
- package/data/harnesses/code/skills/design/data/design-md/library/notion.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/nvidia.md +0 -141
- package/data/harnesses/code/skills/design/data/design-md/library/ollama.md +0 -145
- package/data/harnesses/code/skills/design/data/design-md/library/opencode-ai.md +0 -142
- package/data/harnesses/code/skills/design/data/design-md/library/posthog.md +0 -152
- package/data/harnesses/code/skills/design/data/design-md/library/raycast.md +0 -137
- package/data/harnesses/code/skills/design/data/design-md/library/replicate.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/resend.md +0 -170
- package/data/harnesses/code/skills/design/data/design-md/library/revolut.md +0 -145
- package/data/harnesses/code/skills/design/data/design-md/library/runwayml.md +0 -137
- package/data/harnesses/code/skills/design/data/design-md/library/sanity.md +0 -168
- package/data/harnesses/code/skills/design/data/design-md/library/sentry.md +0 -163
- package/data/harnesses/code/skills/design/data/design-md/library/shopify.md +0 -147
- package/data/harnesses/code/skills/design/data/design-md/library/slack.md +0 -158
- package/data/harnesses/code/skills/design/data/design-md/library/spacex.md +0 -171
- package/data/harnesses/code/skills/design/data/design-md/library/spotify.md +0 -166
- package/data/harnesses/code/skills/design/data/design-md/library/stripe.md +0 -160
- package/data/harnesses/code/skills/design/data/design-md/library/supabase.md +0 -173
- package/data/harnesses/code/skills/design/data/design-md/library/superhuman.md +0 -145
- package/data/harnesses/code/skills/design/data/design-md/library/tesla.md +0 -153
- package/data/harnesses/code/skills/design/data/design-md/library/theverge.md +0 -167
- package/data/harnesses/code/skills/design/data/design-md/library/together-ai.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/uber.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/vercel.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/voltagent.md +0 -130
- package/data/harnesses/code/skills/design/data/design-md/library/warp.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/webflow.md +0 -140
- package/data/harnesses/code/skills/design/data/design-md/library/wired.md +0 -139
- package/data/harnesses/code/skills/design/data/design-md/library/wise.md +0 -137
- package/data/harnesses/code/skills/design/data/design-md/library/x-ai.md +0 -138
- package/data/harnesses/code/skills/design/data/design-md/library/zapier.md +0 -158
- package/data/harnesses/code/skills/design/data/design-md/nurix.md +0 -138
- package/data/harnesses/code/skills/design/data/design-tokens/SCHEMA.md +0 -695
- package/data/harnesses/code/skills/design/data/design-tokens/airbnb/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/airbnb/design.tokens.json +0 -1272
- package/data/harnesses/code/skills/design/data/design-tokens/airtable/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/airtable/design.tokens.json +0 -1268
- package/data/harnesses/code/skills/design/data/design-tokens/anthropic-claude/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/anthropic-claude/design.tokens.json +0 -1273
- package/data/harnesses/code/skills/design/data/design-tokens/apple/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/apple/design.tokens.json +0 -1262
- package/data/harnesses/code/skills/design/data/design-tokens/binance/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/binance/design.tokens.json +0 -1257
- package/data/harnesses/code/skills/design/data/design-tokens/bmw/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/bmw/design.tokens.json +0 -1270
- package/data/harnesses/code/skills/design/data/design-tokens/cal/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/cal/design.tokens.json +0 -1270
- package/data/harnesses/code/skills/design/data/design-tokens/clay/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/clay/design.tokens.json +0 -1261
- package/data/harnesses/code/skills/design/data/design-tokens/clickhouse/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/clickhouse/design.tokens.json +0 -1268
- package/data/harnesses/code/skills/design/data/design-tokens/cohere/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/cohere/design.tokens.json +0 -1281
- package/data/harnesses/code/skills/design/data/design-tokens/coinbase/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/coinbase/design.tokens.json +0 -1262
- package/data/harnesses/code/skills/design/data/design-tokens/composio/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/composio/design.tokens.json +0 -1271
- package/data/harnesses/code/skills/design/data/design-tokens/cursor/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/cursor/design.tokens.json +0 -1276
- package/data/harnesses/code/skills/design/data/design-tokens/elevenlabs/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/elevenlabs/design.tokens.json +0 -1293
- package/data/harnesses/code/skills/design/data/design-tokens/expo/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/expo/design.tokens.json +0 -1270
- package/data/harnesses/code/skills/design/data/design-tokens/figma/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/figma/design.tokens.json +0 -1276
- package/data/harnesses/code/skills/design/data/design-tokens/framer/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/framer/design.tokens.json +0 -1267
- package/data/harnesses/code/skills/design/data/design-tokens/goldens.json +0 -251
- package/data/harnesses/code/skills/design/data/design-tokens/hashicorp/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/hashicorp/design.tokens.json +0 -1273
- package/data/harnesses/code/skills/design/data/design-tokens/ibm/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/ibm/design.tokens.json +0 -1286
- package/data/harnesses/code/skills/design/data/design-tokens/intercom/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/intercom/design.tokens.json +0 -1290
- package/data/harnesses/code/skills/design/data/design-tokens/kraken/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/kraken/design.tokens.json +0 -1270
- package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.resolver.json +0 -23
- package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.tokens.dark.json +0 -599
- package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.tokens.json +0 -1272
- package/data/harnesses/code/skills/design/data/design-tokens/lovable/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/lovable/design.tokens.json +0 -1267
- package/data/harnesses/code/skills/design/data/design-tokens/meta/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/meta/design.tokens.json +0 -1289
- package/data/harnesses/code/skills/design/data/design-tokens/minimax/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/minimax/design.tokens.json +0 -1258
- package/data/harnesses/code/skills/design/data/design-tokens/mintlify/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/mintlify/design.tokens.json +0 -1284
- package/data/harnesses/code/skills/design/data/design-tokens/miro/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/miro/design.tokens.json +0 -1291
- package/data/harnesses/code/skills/design/data/design-tokens/mistral-ai/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/mistral-ai/design.tokens.json +0 -1263
- package/data/harnesses/code/skills/design/data/design-tokens/mongodb/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/mongodb/design.tokens.json +0 -1270
- package/data/harnesses/code/skills/design/data/design-tokens/notion/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/notion/design.tokens.json +0 -1261
- package/data/harnesses/code/skills/design/data/design-tokens/nurix/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/nurix/design.tokens.json +0 -1209
- package/data/harnesses/code/skills/design/data/design-tokens/nvidia/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/nvidia/design.tokens.json +0 -1265
- package/data/harnesses/code/skills/design/data/design-tokens/ollama/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/ollama/design.tokens.json +0 -1253
- package/data/harnesses/code/skills/design/data/design-tokens/opencode-ai/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/opencode-ai/design.tokens.json +0 -1268
- package/data/harnesses/code/skills/design/data/design-tokens/posthog/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/posthog/design.tokens.json +0 -1261
- package/data/harnesses/code/skills/design/data/design-tokens/raycast/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/raycast/design.tokens.json +0 -1263
- package/data/harnesses/code/skills/design/data/design-tokens/replicate/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/replicate/design.tokens.json +0 -1266
- package/data/harnesses/code/skills/design/data/design-tokens/resend/design.resolver.json +0 -23
- package/data/harnesses/code/skills/design/data/design-tokens/resend/design.tokens.dark.json +0 -623
- package/data/harnesses/code/skills/design/data/design-tokens/resend/design.tokens.json +0 -1276
- package/data/harnesses/code/skills/design/data/design-tokens/revolut/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/revolut/design.tokens.json +0 -1264
- package/data/harnesses/code/skills/design/data/design-tokens/runwayml/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/runwayml/design.tokens.json +0 -1268
- package/data/harnesses/code/skills/design/data/design-tokens/sanity/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/sanity/design.tokens.json +0 -1270
- package/data/harnesses/code/skills/design/data/design-tokens/sentry/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/sentry/design.tokens.json +0 -1288
- package/data/harnesses/code/skills/design/data/design-tokens/shopify/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/shopify/design.tokens.json +0 -1272
- package/data/harnesses/code/skills/design/data/design-tokens/slack/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/slack/design.tokens.json +0 -1265
- package/data/harnesses/code/skills/design/data/design-tokens/spacex/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/spacex/design.tokens.json +0 -1287
- package/data/harnesses/code/skills/design/data/design-tokens/spotify/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/spotify/design.tokens.json +0 -1286
- package/data/harnesses/code/skills/design/data/design-tokens/stripe/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/stripe/design.tokens.json +0 -1285
- package/data/harnesses/code/skills/design/data/design-tokens/supabase/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/supabase/design.tokens.json +0 -1287
- package/data/harnesses/code/skills/design/data/design-tokens/superhuman/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/superhuman/design.tokens.json +0 -1278
- package/data/harnesses/code/skills/design/data/design-tokens/tesla/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/tesla/design.tokens.json +0 -1269
- package/data/harnesses/code/skills/design/data/design-tokens/theverge/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/theverge/design.tokens.json +0 -1285
- package/data/harnesses/code/skills/design/data/design-tokens/together-ai/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/together-ai/design.tokens.json +0 -1303
- package/data/harnesses/code/skills/design/data/design-tokens/uber/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/uber/design.tokens.json +0 -1274
- package/data/harnesses/code/skills/design/data/design-tokens/vercel/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/vercel/design.tokens.json +0 -1296
- package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.resolver.json +0 -23
- package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.tokens.dark.json +0 -612
- package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.tokens.json +0 -1282
- package/data/harnesses/code/skills/design/data/design-tokens/warp/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/warp/design.tokens.json +0 -1287
- package/data/harnesses/code/skills/design/data/design-tokens/webflow/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/webflow/design.tokens.json +0 -1268
- package/data/harnesses/code/skills/design/data/design-tokens/wired/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/wired/design.tokens.json +0 -1276
- package/data/harnesses/code/skills/design/data/design-tokens/wise/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/wise/design.tokens.json +0 -1273
- package/data/harnesses/code/skills/design/data/design-tokens/x-ai/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/x-ai/design.tokens.json +0 -1296
- package/data/harnesses/code/skills/design/data/design-tokens/zapier/design.resolver.json +0 -20
- package/data/harnesses/code/skills/design/data/design-tokens/zapier/design.tokens.json +0 -1286
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/command-center.tsx +0 -249
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/create-edit.tsx +0 -249
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/dashboard.tsx +0 -225
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/entity-detail.tsx +0 -249
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/list-detail.tsx +0 -224
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/log-stream.tsx +0 -249
- package/data/harnesses/code/skills/design/data/operator-pack/fixtures.md +0 -88
- package/data/harnesses/code/skills/design/data/operator-pack/surface-catalog.md +0 -132
- package/data/harnesses/code/skills/design/data/operator-pack/trust-rubric.md +0 -76
- package/data/harnesses/code/skills/design/references/create.md +0 -173
- package/data/harnesses/code/skills/design/references/diagnosis.md +0 -108
- package/data/harnesses/code/skills/design/references/hard-rules.md +0 -177
- package/data/harnesses/code/skills/design/references/improve.md +0 -116
- package/data/harnesses/code/skills/design/references/interaction.md +0 -77
- package/data/harnesses/code/skills/design/references/introspect.md +0 -100
- package/data/harnesses/code/skills/design/references/lifecycle.md +0 -73
- package/data/harnesses/code/skills/design/references/personality.md +0 -575
- package/data/harnesses/code/skills/design/references/structure.md +0 -159
- package/data/harnesses/code/skills/design/scripts/convert-design-md.mjs +0 -1312
- package/data/harnesses/code/skills/design/scripts/derive-personality.mjs +0 -1498
- package/data/harnesses/code/skills/design/scripts/generate-fixtures.mjs +0 -551
- package/data/harnesses/code/skills/design/scripts/lib/checks.mjs +0 -1092
- package/data/harnesses/code/skills/design/scripts/lib/golden.mjs +0 -26
- package/data/harnesses/code/skills/design/scripts/lib/vocabulary.mjs +0 -65
- package/data/harnesses/code/skills/design/scripts/phase-gate.mjs +0 -538
- package/data/harnesses/code/skills/design/scripts/preship-sweep.mjs +0 -312
- package/data/harnesses/code/skills/design/scripts/render-rung.mjs +0 -890
- package/data/harnesses/code/skills/design/scripts/scaffold.mjs +0 -769
- package/data/harnesses/code/skills/design/scripts/self-integrity.mjs +0 -675
- package/data/harnesses/code/skills/design/scripts/snapshot-goldens.mjs +0 -164
- package/data/harnesses/code/skills/design/scripts/validate-combinations.mjs +0 -439
|
@@ -1,695 +0,0 @@
|
|
|
1
|
-
# design-tokens — schema `design-tokens/v2`
|
|
2
|
-
|
|
3
|
-
A look travels as a **design-tokens artifact**: three JSON files in the pinned **DTCG 2025.10 Stable**
|
|
4
|
-
grammar (W3C Design Tokens Community Group — the dated snapshot; the live drafts carry the spec's own
|
|
5
|
-
"do not implement" warning). The artifact is exact, queryable, and diffable — no consumer interprets
|
|
6
|
-
prose. [`derive-personality.mjs`](../../scripts/derive-personality.mjs) is the reference consumer:
|
|
7
|
-
`--check` is the coverage gate, `--emit` writes `personality.css` / `globals.css` / the `<html>`
|
|
8
|
-
attributes. The check engine ([`lib/checks.mjs`](../../scripts/lib/checks.mjs), fired at the phase
|
|
9
|
-
gates and the verify/pre-ship sweeps) reads the lever manifest from the artifact's `$extensions` payload.
|
|
10
|
-
|
|
11
|
-
The token files are a project's **canonical look state**. Create writes them, improve rewrites them,
|
|
12
|
-
extraction on a foreign UI recovers them. No readable design.md view is generated from the token
|
|
13
|
-
files — the nine-section [design.md format](../design-md/SCHEMA.md) serves only as the library's
|
|
14
|
-
documentation format.
|
|
15
|
-
|
|
16
|
-
**One schema, every origin.** A project's own artifact, an extracted artifact, a shipped library
|
|
17
|
-
entry, and the Nurix default all use this identical shape; only the payload's `provenance` varies.
|
|
18
|
-
|
|
19
|
-
**v1 → v2 in one line:** everything structural survives; the vocabulary grows — **expression arrives
|
|
20
|
-
as tokens** (27 primitives, 36 color roles, a 7-step ramp, 4 elevation composites, an optional wash
|
|
21
|
-
pair, and the `theme-default` / `anchors` payload keys), so the no-literals rule and the token-lock
|
|
22
|
-
now guard a vocabulary with range. Existing v1 artifacts migrate mechanically:
|
|
23
|
-
`convert-design-md.mjs --upgrade-v2` (idempotent; the Migration section below).
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## The three files
|
|
28
|
-
|
|
29
|
-
| File | Ships | Contents |
|
|
30
|
-
| --- | --- | --- |
|
|
31
|
-
| `design.tokens.json` | always | The base/light set: the 27 visual primitives, the 36 color roles, the typography composites, the 4 elevation composites, the optional wash pair, and the file-level `$extensions["com.nurix.design"]` payload. The base set **is** the light rendering — light is never omitted, even when `theme-default` is `dark`. |
|
|
32
|
-
| `design.tokens.dark.json` | only when the look has dark values | The dark modifier set: the `color` group remapped, nothing else. |
|
|
33
|
-
| `design.resolver.json` | always | Sets, modifiers, and resolution order. The theme modifier's `default` mirrors the payload's `theme-default`. |
|
|
34
|
-
|
|
35
|
-
The three files sit together in one directory: a project's artifact lives at the repo root; a library
|
|
36
|
-
entry lives at `data/design-tokens/<product-slug>/`; the Nurix default at `data/design-tokens/nurix/`.
|
|
37
|
-
|
|
38
|
-
Look resolution is project-first — `project`/`extracted` artifacts win outright; a `library` entry
|
|
39
|
-
serves only on confirmed match; the `default` serves when nothing else does. The origin is recorded in
|
|
40
|
-
the payload's `provenance` field:
|
|
41
|
-
|
|
42
|
-
| `provenance` | Origin | Precedence |
|
|
43
|
-
| --- | --- | --- |
|
|
44
|
-
| `project` | The project's own artifact, written by a create run. | Wins outright when present. |
|
|
45
|
-
| `extracted` | Recovered from a UI this skill did not build. | Same tier as `project`. |
|
|
46
|
-
| `library` | A shipped library entry. | Serves only when the brief names or resembles the product and the user confirms. |
|
|
47
|
-
| `default` | The Nurix default. | Worn when there is no project artifact and no confirmed library match. |
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## DTCG grammar in this artifact
|
|
52
|
-
|
|
53
|
-
A token is an object with `$type` and `$value`, plus optional `$description` and `$extensions`.
|
|
54
|
-
Groups nest; the file root is a group and carries the file-level `$extensions`. An alias is the
|
|
55
|
-
string `"{path.to.token}"` and may appear anywhere a value of the target's type is legal, including
|
|
56
|
-
composite sub-values; alias chains are legal, cycles are not. Exactly ten `$type` values appear —
|
|
57
|
-
**never invent a custom `$type`** (`shadow` and `gradient` are DTCG 2025.10 composite types, not
|
|
58
|
-
inventions):
|
|
59
|
-
|
|
60
|
-
| `$type` | `$value` shape | Used by |
|
|
61
|
-
| --- | --- | --- |
|
|
62
|
-
| `color` | `{ "colorSpace": "oklch"\|"srgb", "components": [n, n, n], "alpha"?: n, "hex"?: "#rrggbb" }` | the 36 color roles, shadow layer colors, gradient stop colors |
|
|
63
|
-
| `dimension` | `{ "value": n, "unit": "px" }` (`px`\|`rem` per spec; this artifact always writes `px`) | `radius`, `border-weight`, `icon-size-base`, the 8 layout primitives, ramp `fontSize`, shadow lengths |
|
|
64
|
-
| `duration` | `{ "value": n, "unit": "ms" }` | the 4 duration primitives, `stagger-unit` |
|
|
65
|
-
| `cubicBezier` | `[x1, y1, x2, y2]` (numbers; x in 0–1) | `ease-default` |
|
|
66
|
-
| `fontFamily` | array of family-name strings | `font-sans`, `font-mono`, `typography.family.*` |
|
|
67
|
-
| `fontWeight` | number 100–900 | `font-weight-normal`, `font-weight-strong`, ramp `fontWeight` |
|
|
68
|
-
| `number` | plain JSON number | `shadow-intensity`, `density-gap`, `density-inset`, `heading-tracking`, `contrast-boost`, `icon-stroke`, ramp `lineHeight` / `letterSpacing` |
|
|
69
|
-
| `typography` | composite `{ fontFamily, fontSize, fontWeight, letterSpacing, lineHeight }` | the 7 ramp steps |
|
|
70
|
-
| `shadow` | composite **array of layers** `{ color, offsetX, offsetY, blur, spread }` (color/dimension sub-value shapes as above) | the 4 `elevation.*` tokens |
|
|
71
|
-
| `gradient` | composite **array of stops** `{ color, position }` (position a number 0–1) | the ≤ 2 `wash.*` tokens |
|
|
72
|
-
|
|
73
|
-
Color rules: an oklch source stays `"colorSpace": "oklch"` with `components` carrying the literal
|
|
74
|
-
`[L, C, H]` numbers from the source string; a hex/rgba (or any other CSS color) source becomes
|
|
75
|
-
`"colorSpace": "srgb"` with `components` as `[r, g, b]` in 0–1 (at most 5 decimals), the `hex`
|
|
76
|
-
fallback field, and `alpha` when the source carries one:
|
|
77
|
-
|
|
78
|
-
```json
|
|
79
|
-
{
|
|
80
|
-
"$type": "color",
|
|
81
|
-
"$value": { "colorSpace": "srgb", "components": [0.3098, 0.2745, 0.898], "alpha": 1, "hex": "#4f46e5" },
|
|
82
|
-
"$extensions": { "com.nurix.design": { "css": "#4f46e5" } }
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
**One documented deviation.** The spec's `dimension` carries only `px`|`rem`, so an `em` tracking
|
|
87
|
-
value cannot be a dimension. `heading-tracking` is therefore a `number` token (an em multiplier) with
|
|
88
|
-
its exact source string preserved (the preserved-css pattern, below), and a typography composite's
|
|
89
|
-
`letterSpacing` sub-value is a number (em multiplier) or an alias to one — not a spec dimension.
|
|
90
|
-
Everything else in the artifact is spec-shaped.
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## The file-level payload — `$extensions["com.nurix.design"]`
|
|
95
|
-
|
|
96
|
-
One vendor namespace, reverse-domain, on the **base file's root group only** (the dark file carries no
|
|
97
|
-
payload; the resolver has no `$extensions`). It holds everything the look needs that is not a design
|
|
98
|
-
token — twelve keys in v2, plus the optional `look` record:
|
|
99
|
-
|
|
100
|
-
| Key | Type | Legal values / shape |
|
|
101
|
-
| --- | --- | --- |
|
|
102
|
-
| `schema` | string | Literal `design-tokens/v2`. A parser refuses an unknown value. |
|
|
103
|
-
| `dtcg` | string | Literal `2025.10` — the pinned DTCG snapshot this artifact conforms to. |
|
|
104
|
-
| `product` | string | The product name; slugified (lowercase, non-alphanumeric runs → `-`) it becomes the `data-style` value. |
|
|
105
|
-
| `provenance` | enum | `project` \| `extracted` \| `library` \| `default` |
|
|
106
|
-
| `sourced` | string | ISO date the artifact was authored, extracted, or last re-sourced. |
|
|
107
|
-
| `theme-default` | enum | `light` \| `dark` — which context the app boots in: scaffold writes it to `<html data-theme>`, and the resolver's `theme.default` mirrors it. **The brief's explicit theme direction is binding.** Absent → `light`. The base set remains the light rendering either way. |
|
|
108
|
-
| `anchors` | string[] | 2–3 non-empty entries — the named real-product anchors from intake ("Linear", "Stripe Dashboard"), recorded so improve/judge runs critique against the same gestalt targets create aimed at. **Required on `provenance: project` artifacts**; optional on library/default/extracted. |
|
|
109
|
-
| `look` | object | **Optional.** The full intake look block persisted by create-authored artifacts — `theme` (`light` \| `dark` \| `both`), `anchors` (2–3 named products), `delight` (`baseline` \| `expressive`), `resolution` (`project` \| `library:<slug>` \| `seed:<style>+<palette>` \| `default`), `resolution-mode` (`confirmed` \| `recorded`). A provenance record, not a projection: `theme-default` and the top-level `anchors` remain the canonical keys emission consumes. Enum-checked when present (rule 2; the enums mirror the intake gate's `validateLookBlock`). Conforming tools preserve unknown payload keys — this one included. |
|
|
110
|
-
| `verbosity` | enum | `full` \| `default` \| `compact` \| `expert` — emits `data-verbosity` on `<html>`. |
|
|
111
|
-
| `feedback` | enum | `subtle` \| `minimal` — emits `data-feedback`. |
|
|
112
|
-
| `density-tier` | enum | `spacious` \| `standard` \| `dense` — emits `data-density`; drives the density base multipliers. |
|
|
113
|
-
| `product-traits` | array | Non-empty list of product-type trait slugs the front gate reads — e.g. `["review-queue", "case-detail", "fintech"]`. Never emitted to CSS. |
|
|
114
|
-
| `lever-manifest` | object | The drift-check allowlist (below). |
|
|
115
|
-
|
|
116
|
-
Payload fields are always concrete — the hint mechanism (below) exists only on tokens.
|
|
117
|
-
|
|
118
|
-
### The lever manifest
|
|
119
|
-
|
|
120
|
-
The machine-readable allowlist the drift check reads: the check engine flags any emitted value outside
|
|
121
|
-
this vocabulary — a radius not on `radius-scale`, a spacing off `spacing-scale`, a motion duration off
|
|
122
|
-
`motion.durations`.
|
|
123
|
-
|
|
124
|
-
| Key | Shape | Rule |
|
|
125
|
-
| --- | --- | --- |
|
|
126
|
-
| `spacing-scale` | number[] (px) | Non-empty, ascending — on-scale values only. |
|
|
127
|
-
| `radius-scale` | number[] (px) | Non-empty, ascending. |
|
|
128
|
-
| `shadow-levels` | string[] | Non-empty; names drawn from `none` `2xs` `xs` `sm` `md` `lg` `xl` `2xl` `overlay`, ordered by strictly increasing intensity. The Nurix default's vocabulary is `["none", "sm", "md", "lg", "overlay"]`. |
|
|
129
|
-
| `motion` | `{ "durations": number[], "easings": string[] }` | Durations in ms, non-empty, ascending; easings non-empty CSS easing strings. |
|
|
130
|
-
| `icons` | `{ "family": string }` | The icon family, e.g. `lucide`. |
|
|
131
|
-
| `accent-count` | number | ≥ 1. |
|
|
132
|
-
|
|
133
|
-
The manifest carries only vocabulary that is not already a token — **it never restates a token
|
|
134
|
-
value**. The allowlists that are tokens are read from the tokens: the 36 color values from the
|
|
135
|
-
`color` group, the font stacks from `primitive.font-sans` / `primitive.font-mono`, the icon stroke
|
|
136
|
-
from `primitive.icon-stroke`, and the elevation/wash color literals from those groups' preserved
|
|
137
|
-
byte forms.
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## `primitive.*` — the 27 visual primitives
|
|
142
|
-
|
|
143
|
-
One group, `primitive`, holding all 27 (leaf names are law — they map 1:1 to the emitted CSS
|
|
144
|
-
variables, without the leading `--`). Every token is either concrete or hinted.
|
|
145
|
-
|
|
146
|
-
| Family | Token (`primitive.…`) | `$type` | Notes | Example (source form) |
|
|
147
|
-
| --- | --- | --- | --- | --- |
|
|
148
|
-
| geometric | `radius` | `dimension` | | `6px` |
|
|
149
|
-
| | `shadow-intensity` | `number` | 0–1 master multiplier on every emitted `--shadow-*` alpha; 0 legally flattens everything (flat looks stay expressible). New looks default 1.0 — the elevation composites carry designed alphas. | `0.4` |
|
|
150
|
-
| | `border-weight` | `dimension` | | `1px` |
|
|
151
|
-
| | `density-gap` | `number` | multiplier on the `0.25rem` spacing base | `1` |
|
|
152
|
-
| | `density-inset` | `number` | multiplier on component insets | `1` |
|
|
153
|
-
| typographic | `font-sans` | `fontFamily` | carries `.css` | `Inter, system-ui, sans-serif` |
|
|
154
|
-
| | `font-mono` | `fontFamily` | carries `.css` | `Geist Mono, ui-monospace, SFMono-Regular, monospace` |
|
|
155
|
-
| | `font-weight-normal` | `fontWeight` | | `400` |
|
|
156
|
-
| | `font-weight-strong` | `fontWeight` | | `600` |
|
|
157
|
-
| | `heading-tracking` | `number` | em multiplier; carries `.css` | `-0.01em` |
|
|
158
|
-
| temporal | `duration-unit` | `duration` | the tempo base | `50ms` |
|
|
159
|
-
| | `duration-fast` | `duration` | | `100ms` |
|
|
160
|
-
| | `duration-normal` | `duration` | | `150ms` |
|
|
161
|
-
| | `duration-slow` | `duration` | | `250ms` |
|
|
162
|
-
| | `ease-default` | `cubicBezier` | carries `.css` | `cubic-bezier(0.4,0,0.2,1)` |
|
|
163
|
-
| | `stagger-unit` | `duration` | motion-moment base, authored per look; legal 0–60ms, default 30 (reads polished; 0 reads utilitarian) | `30ms` |
|
|
164
|
-
| surface | `contrast-boost` | `number` | multiplier, 1 = default | `1` |
|
|
165
|
-
| iconography | `icon-stroke` | `number` | px stroke-width | `1.75` |
|
|
166
|
-
| | `icon-size-base` | `dimension` | | `16px` |
|
|
167
|
-
| layout | `sidebar-width-expanded` | `dimension` | | `248px` |
|
|
168
|
-
| | `sidebar-width-collapsed` | `dimension` | | `56px` |
|
|
169
|
-
| | `topbar-height` | `dimension` | | `52px` |
|
|
170
|
-
| | `side-panel-width` | `dimension` | | `420px` |
|
|
171
|
-
| | `side-panel-width-rich` | `dimension` | | `640px` |
|
|
172
|
-
| | `modal-width-max` | `dimension` | | `560px` |
|
|
173
|
-
| | `form-max-width` | `dimension` | | `640px` |
|
|
174
|
-
| | `table-row-height` | `dimension` | | `40px` |
|
|
175
|
-
|
|
176
|
-
**Derived, never stored.** Emission computes `--ease-enter` and `--ease-exit` from `ease-default`,
|
|
177
|
-
and `--stagger-delay` from `stagger-unit` (`--stagger-delay: var(--stagger-unit)` — the
|
|
178
|
-
`.motion-stagger` cascade base). They are not tokens, not authored, and not part of the coverage
|
|
179
|
-
gate. Do not add them.
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## `color.*` — the 36 color roles
|
|
184
|
-
|
|
185
|
-
One flat group, `color`, holding all 36 (leaf names map 1:1 to the emitted `--<name>` variables).
|
|
186
|
-
Every token is `$type: "color"` with a typed `$value` **and** mandatory preserved `.css` (an aliased
|
|
187
|
-
role takes both from its target).
|
|
188
|
-
|
|
189
|
-
- **Semantic (19):** `background` · `foreground` · `card` · `card-foreground` · `muted` ·
|
|
190
|
-
`muted-foreground` · `border` · `input` · `ring` · `primary` · `primary-foreground` · `accent` ·
|
|
191
|
-
`accent-foreground` · `destructive` · `destructive-foreground` · `success` · `warning` ·
|
|
192
|
-
`surface-raised` · `surface-overlay`.
|
|
193
|
-
- **Substrate (17):** `popover` · `popover-foreground` · `secondary` · `secondary-foreground` ·
|
|
194
|
-
`chart-1` · `chart-2` · `chart-3` · `chart-4` · `chart-5` · `sidebar` · `sidebar-foreground` ·
|
|
195
|
-
`sidebar-primary` · `sidebar-primary-foreground` · `sidebar-accent` · `sidebar-accent-foreground` ·
|
|
196
|
-
`sidebar-border` · `sidebar-ring`.
|
|
197
|
-
|
|
198
|
-
**`surface-raised` / `surface-overlay` — the dark ladder.** In light looks the two roles may alias
|
|
199
|
-
`{color.card}` / `{color.popover}` — zero visual change. In dark looks they carry the
|
|
200
|
-
**surface-lightness elevation ladder** (raised surfaces get *lighter*, ~+4–6 L points per step, hue
|
|
201
|
-
held — the physics dark cannot fake with shadows). Components express elevation as
|
|
202
|
-
`bg-surface-raised` / `bg-surface-overlay` instead of shadow-only. Both appear in the dark set (dark
|
|
203
|
-
completeness counts 36).
|
|
204
|
-
|
|
205
|
-
No consumed token falls back to a shadcn-gray default: emission sets all 36. A color token may alias
|
|
206
|
-
another (`"$value": "{color.primary}"`), in which case it takes the target's `.css`; mechanical
|
|
207
|
-
conversion writes literals, aliases are for authored files and the two ladder roles.
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## `typography.*` — families and the ramp
|
|
212
|
-
|
|
213
|
-
The first-class machine form of the type scale, in two subgroups. It reaches CSS variables only
|
|
214
|
-
through the primitives it aliases; emitters read the ramp as data and materialize it as the seven
|
|
215
|
-
`text-*` utilities (the type-scale rule's fixed scale *is* the ramp — typ-09).
|
|
216
|
-
|
|
217
|
-
**`typography.family.*`** — the heading/body pairing plus mono, plus an optional display slot, all
|
|
218
|
-
`$type: "fontFamily"`. The three-*job* rhythm is display / body / numeric-mono (typ-06: ≤ 3 families,
|
|
219
|
-
each with a distinct job); `heading` stays for compat and typically aliases `display` or `body`:
|
|
220
|
-
|
|
221
|
-
| Token | Value |
|
|
222
|
-
| --- | --- |
|
|
223
|
-
| `typography.family.heading` | `"{primitive.font-sans}"` — or its own stack when the look pairs a distinct heading family. |
|
|
224
|
-
| `typography.family.body` | `"{primitive.font-sans}"` |
|
|
225
|
-
| `typography.family.mono` | `"{primitive.font-mono}"` |
|
|
226
|
-
| `typography.family.display` | **optional** third-slot member; may alias `heading`. |
|
|
227
|
-
|
|
228
|
-
**`typography.ramp.*`** — seven fixed step names, each `$type: "typography"` carrying all five
|
|
229
|
-
sub-values:
|
|
230
|
-
|
|
231
|
-
| Step | Role |
|
|
232
|
-
| --- | --- |
|
|
233
|
-
| `h1` | page title |
|
|
234
|
-
| `h2` | section head |
|
|
235
|
-
| `h3` | card / group head |
|
|
236
|
-
| `body` | UI + prose |
|
|
237
|
-
| `small` | labels, meta, dense table |
|
|
238
|
-
| `caption` | uppercase eyebrow (text case is a usage rule; the composite carries no case slot) |
|
|
239
|
-
| `display` | the scale-drama step: KPI numerals, the one focal metric, a brand-forward page title. `fontSize` guidance 32–48px; `fontFamily` may alias `typography.family.display`. Usage is rule-gated, not schema-gated: display-step elements only on `brand-forward` surfaces, ≤ 1 per surface (typ-20). Baseline surfaces keep the 24px-h1 world. |
|
|
240
|
-
|
|
241
|
-
| Sub-value | Shape |
|
|
242
|
-
| --- | --- |
|
|
243
|
-
| `fontFamily` | alias to a `typography.family.*` token |
|
|
244
|
-
| `fontSize` | `dimension` (px) |
|
|
245
|
-
| `lineHeight` | number (unitless multiplier) |
|
|
246
|
-
| `fontWeight` | alias to `primitive.font-weight-strong` / `primitive.font-weight-normal`, or a number |
|
|
247
|
-
| `letterSpacing` | number (em multiplier) or alias to `primitive.heading-tracking` — the documented deviation |
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
|
|
251
|
-
## `elevation.*` — depth as a designed system
|
|
252
|
-
|
|
253
|
-
Four tokens, each `$type: "shadow"`, `$value` an **array of layers** (`{ color, offsetX, offsetY,
|
|
254
|
-
blur, spread }` per layer — the DTCG shadow shape; color sub-values follow the color rules incl.
|
|
255
|
-
`alpha`). Leaf names are law → emitted as `--shadow-sm`, `--shadow-md`, `--shadow-lg`,
|
|
256
|
-
`--shadow-overlay`, plus the matching `@theme` shadow utilities.
|
|
257
|
-
|
|
258
|
-
| Token | Role | Authoring guidance (seeds carry real values) |
|
|
259
|
-
| --- | --- | --- |
|
|
260
|
-
| `elevation.sm` | hairline lift — hover on rows/cards | 1–2 layers, y ≤ 2px, blur ≤ 4px |
|
|
261
|
-
| `elevation.md` | raised panel, dropdown | 2 layers (ambient + key) |
|
|
262
|
-
| `elevation.lg` | brand-forward feature panel | 2–3 layers, tinted |
|
|
263
|
-
| `elevation.overlay` | side panel / dialog scrim companion | widest blur; the only level a modal may use |
|
|
264
|
-
|
|
265
|
-
Rules:
|
|
266
|
-
|
|
267
|
-
- Shadow color is **brand-tintable** — a low-alpha tint toward the brand hue (e.g.
|
|
268
|
-
`rgba(0,55,112,0.08)`), never pure black at alpha ≥ 0.15.
|
|
269
|
-
- `primitive.shadow-intensity` stays the master multiplier: emission wraps every layer alpha as
|
|
270
|
-
`calc(<alpha> * var(--shadow-intensity))`, so `prefers-contrast: more` (which zeroes the
|
|
271
|
-
multiplier) and flat looks keep working.
|
|
272
|
-
- The **token-level `.css`** is the full serialized shadow list — the preserved byte form, carrying
|
|
273
|
-
every layer color's byte form inside it (composite sub-values have no `$extensions` slot of their
|
|
274
|
-
own). Zero lengths serialize bare `0`; the alpha may ride the `calc(… * var(--shadow-intensity))`
|
|
275
|
-
wrapper in the byte form — parse-back strips it to the layer alpha.
|
|
276
|
-
- The lever manifest's `shadow-levels` key is unchanged in shape; `overlay` joins its legal name
|
|
277
|
-
vocabulary.
|
|
278
|
-
|
|
279
|
-
---
|
|
280
|
-
|
|
281
|
-
## `wash.*` — the tasteful-gradient path (optional group)
|
|
282
|
-
|
|
283
|
-
At most two tokens, `$type: "gradient"` (the DTCG stops array; each stop's color follows the color
|
|
284
|
-
rules, `position` in 0–1). Emitted as `--wash-surface` / `--wash-emphasis`. **Optional presence**: a
|
|
285
|
-
look that declares no washes omits the group entirely — the coverage gate validates shape when
|
|
286
|
-
present, never requires it. The token-level `.css` carries the authored gradient (the stop list holds
|
|
287
|
-
no geometry — angle and shape live in the byte form). Consumption is budget-gated (only
|
|
288
|
-
`brand-forward` surfaces), and the anti-slop gradient ban (col-12 — neon purple/blue glows,
|
|
289
|
-
purple-on-white) applies to wash values: a wash is a low-chroma tint ramp, not a hero gradient.
|
|
290
|
-
|
|
291
|
-
---
|
|
292
|
-
|
|
293
|
-
## The preserved-css pattern
|
|
294
|
-
|
|
295
|
-
Every formatting-sensitive value carries **two forms that must agree**: the typed `$value` (the
|
|
296
|
-
queryable semantic) and `$extensions["com.nurix.design"].css` — the exact source CSS string.
|
|
297
|
-
Emitters prefer the preserved string, so output is byte-stable across convert/emit round trips.
|
|
298
|
-
|
|
299
|
-
- **Mandatory `.css`:** every `color` token; `heading-tracking` (sources vary — `0`, `0em`,
|
|
300
|
-
`-0.015em`); `ease-default`; any `fontFamily` token carrying its own stack; every `elevation.*`
|
|
301
|
-
token (the serialized shadow list); every `wash.*` token (the authored gradient).
|
|
302
|
-
- **Omitted where serialization is deterministic:** `dimension` and `duration` serialize as
|
|
303
|
-
`<value><unit>`; `number` and `fontWeight` as the plain number; `cubicBezier` (absent `.css`) as
|
|
304
|
-
`cubic-bezier(x1, y1, x2, y2)`; `fontFamily` (absent `.css`) as the families joined with `", "`,
|
|
305
|
-
multi-word names double-quoted.
|
|
306
|
-
- **On a composite token**, `.css` is an object keyed by sub-value name for `typography` (present
|
|
307
|
-
for formatting-sensitive inline sub-values, e.g. `{ "letterSpacing": "0.02em" }`; an aliased
|
|
308
|
-
sub-value takes its `.css` from the alias target) and a single string — the full serialized value —
|
|
309
|
-
for `shadow` and `gradient`.
|
|
310
|
-
- **Parse-back verification is a converter requirement:** whatever writes a token must verify that
|
|
311
|
-
parsing `.css` reproduces `$value` exactly, and that re-serializing `$value` reproduces the byte
|
|
312
|
-
form — oklch components are the literal source numbers; srgb components round-trip through the
|
|
313
|
-
`hex` field; a shadow's `.css` parses back to its layer array (the intensity `calc` wrapper strips
|
|
314
|
-
to the layer alpha); a gradient's `.css` must contain each stop color's byte form. The gate
|
|
315
|
-
re-verifies.
|
|
316
|
-
|
|
317
|
-
## Hints and the coverage tri-state
|
|
318
|
-
|
|
319
|
-
DTCG has no hint concept; this is the convention. Where a value needs judgment, the token carries a
|
|
320
|
-
**valid provisional `$value`** plus `$extensions["com.nurix.design"].hint` — the intent in plain
|
|
321
|
-
words. Every gated token is in exactly one state:
|
|
322
|
-
|
|
323
|
-
| State | Marker | `--check` | `--emit` |
|
|
324
|
-
| --- | --- | --- | --- |
|
|
325
|
-
| **assigned** | real value, no `hint` key | passes | emits |
|
|
326
|
-
| **hinted** | `hint` key present | passes | **refuses**, naming every hinted path |
|
|
327
|
-
| **missing** | token absent | fails, naming the key | — |
|
|
328
|
-
|
|
329
|
-
Resolving a hint deletes the `hint` key and records the rationale in the token's `$description`, so
|
|
330
|
-
the resolved artifact is self-explaining and re-derivable. Judgment is recorded, never silent.
|
|
331
|
-
(`--emit --provisional` — the golden/regression flow only — emits hinted tokens at their provisional
|
|
332
|
-
`$values` instead of refusing; it never ships output.)
|
|
333
|
-
|
|
334
|
-
```json
|
|
335
|
-
{
|
|
336
|
-
"$type": "number",
|
|
337
|
-
"$value": 1,
|
|
338
|
-
"$extensions": { "com.nurix.design": { "hint": "nudge borders up a step so the dense table grid reads as a grid" } }
|
|
339
|
-
}
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
resolves to:
|
|
343
|
-
|
|
344
|
-
```json
|
|
345
|
-
{
|
|
346
|
-
"$type": "number",
|
|
347
|
-
"$value": 1.1,
|
|
348
|
-
"$description": "derived: dense-grid brief, one step up (was hint)"
|
|
349
|
-
}
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
## Per-value provenance — the layer vocabulary
|
|
353
|
-
|
|
354
|
-
A value's provenance rationale — why it diverges from a brand default, what judgment resolved its
|
|
355
|
-
hint — lives in the token's `$description`. Mechanical conversion moves source comments here.
|
|
356
|
-
|
|
357
|
-
**The layer tags.** A `$description` that opens with a tag names the composition layer that set the
|
|
358
|
-
value (the layer model's audit surface): **`source:`** (the resolved source), **`brief:`** (a brief
|
|
359
|
-
binding), **`deviation:`** (a recorded deviation — the only layer that may contradict a domain owner
|
|
360
|
-
or leave the tables entirely; every such value carries its reason). Untagged values are inherited
|
|
361
|
-
from the resolved source or defaults. The mechanical-annotation prefixes the converters write
|
|
362
|
-
(`derived:`, `corpus:`, `rationale:`, `note:`, `synthesized:`, `brand:`, `dark:`) remain legal; any
|
|
363
|
-
other opening tag fails the gate. **Every off-manifest value carries `deviation:`** — an artifact
|
|
364
|
-
base value off its own lever-manifest allowlist without one fails rule 8. The artifact root's
|
|
365
|
-
`$description` carries the resolution record (which source won, the runner-up, the deciding
|
|
366
|
-
evidence).
|
|
367
|
-
|
|
368
|
-
---
|
|
369
|
-
|
|
370
|
-
## The dark set — `design.tokens.dark.json`
|
|
371
|
-
|
|
372
|
-
Ships **only when the look has dark values**; light is never omitted — the base set is the light
|
|
373
|
-
rendering (even for a `theme-default: dark` look; only the boot attribute and resolver default move).
|
|
374
|
-
When it ships:
|
|
375
|
-
|
|
376
|
-
- It carries exactly the `color` group, all 36 roles, same shape rules (typed `$value` + `.css`;
|
|
377
|
-
aliases legal — they resolve after overlay, so `"{color.card}"` in the dark file resolves to the
|
|
378
|
-
dark card) — and nothing else: no primitives, no typography, no elevation, no payload (the base
|
|
379
|
-
file is the payload's single carrier).
|
|
380
|
-
- Emission targets `:root[data-theme="dark"]` (specificity 0,2,0 — the same armor as the light
|
|
381
|
-
block; a lone attribute selector loses to the component library's later `:root` by source order),
|
|
382
|
-
remapping all 36; when the file is absent, no dark block is emitted and the project is light-only.
|
|
383
|
-
- The `surface-raised` / `surface-overlay` roles carry the dark surface-lightness ladder (above).
|
|
384
|
-
|
|
385
|
-
```json
|
|
386
|
-
{
|
|
387
|
-
"color": {
|
|
388
|
-
"background": { "$type": "color", "$value": { "colorSpace": "oklch", "components": [0.2077, 0.0398, 265.75] }, "$extensions": { "com.nurix.design": { "css": "oklch(0.2077 0.0398 265.75)" } } },
|
|
389
|
-
"foreground": { "$type": "color", "$value": { "colorSpace": "oklch", "components": [0.9842, 0.0034, 247.86] }, "$extensions": { "com.nurix.design": { "css": "oklch(0.9842 0.0034 247.86)" } } }
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
(Fragment — a real dark file carries all 36.)
|
|
395
|
-
|
|
396
|
-
---
|
|
397
|
-
|
|
398
|
-
## The resolver — `design.resolver.json`
|
|
399
|
-
|
|
400
|
-
The DTCG resolver document has no stable snapshot, so this shape is **ours-until-standardized** — the
|
|
401
|
-
exact minimal shape the scripts implement, confined to this file so a future spec shift lands in one
|
|
402
|
-
place.
|
|
403
|
-
|
|
404
|
-
| Key | Shape |
|
|
405
|
-
| --- | --- |
|
|
406
|
-
| `schema` | Literal `design-resolver/v1`. |
|
|
407
|
-
| `sets` | Array of `{ "name": string, "values": [file, …] }` — the base token files, in load order. |
|
|
408
|
-
| `modifiers` | Array of `{ "name": string, "default": string, "contexts": { <context>: [file, …] } }`. Exactly one modifier today: `theme`. |
|
|
409
|
-
|
|
410
|
-
**Resolution order (deterministic):** concatenate the set files in array order; select one context
|
|
411
|
-
per modifier (the `default` when unstated); overlay the context's files in order — a later file
|
|
412
|
-
overrides an earlier one per token path, and an overlay may only override paths that exist in the
|
|
413
|
-
base, never introduce new ones. Aliases resolve after overlay. **The base set is always the light
|
|
414
|
-
rendering:** the `light` context is always the empty overlay `[]`, and `theme.default` mirrors the
|
|
415
|
-
payload's `theme-default` (`light` when absent — a dark-first look sets both to `dark`). A light-only
|
|
416
|
-
look carries only the `light` context; a look with dark adds `"dark": ["design.tokens.dark.json"]`:
|
|
417
|
-
|
|
418
|
-
```json
|
|
419
|
-
{
|
|
420
|
-
"schema": "design-resolver/v1",
|
|
421
|
-
"sets": [{ "name": "base", "values": ["design.tokens.json"] }],
|
|
422
|
-
"modifiers": [
|
|
423
|
-
{ "name": "theme", "default": "light", "contexts": { "light": [], "dark": ["design.tokens.dark.json"] } }
|
|
424
|
-
]
|
|
425
|
-
}
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
---
|
|
429
|
-
|
|
430
|
-
## Emission mapping
|
|
431
|
-
|
|
432
|
-
The slug is the payload's `product`, slugified. Emission order is this document's enumeration order
|
|
433
|
-
(mirrored by the consumer's arrays); JSON key order carries no meaning.
|
|
434
|
-
|
|
435
|
-
| Source | Emitted target |
|
|
436
|
-
| --- | --- |
|
|
437
|
-
| `primitive.<name>` (25 static) | `[data-style="<slug>"] { --<name>: … }` — 1:1 by leaf name |
|
|
438
|
-
| `primitive.density-gap` / `density-inset` | governed refs (`var(--density-base-gap/inset)`); the tier writes the base |
|
|
439
|
-
| `color.<name>` (36) | `:root, :root[data-theme="light"] { --<name>: … }` |
|
|
440
|
-
| dark set `color.<name>` | `:root[data-theme="dark"] { --<name>: … }` — only when the dark file ships |
|
|
441
|
-
| `elevation.<level>` (4) | `--shadow-<level>` in the `[data-style]` block **and** the `@theme` shadow utilities (`shadow-sm` … `shadow-overlay`); every alpha rides `calc(… * var(--shadow-intensity))` |
|
|
442
|
-
| `wash.<slot>` (≤ 2, optional) | `--wash-surface` / `--wash-emphasis` in the `[data-style]` block — consumed only on budget-granted surfaces |
|
|
443
|
-
| `typography.ramp.<step>` (7) | `@theme` text utilities `text-h1` … `text-display` carrying size / line-height / weight / tracking per step — the ramp becomes *classes* (typ-09: the fixed scale IS the ramp) |
|
|
444
|
-
| `primitive.stagger-unit` | `--stagger-delay: var(--stagger-unit)` (derived) + the named motion classes `.motion-lift` (hover −1px translateY + `elevation.sm` at `duration-fast`/`ease-default`) and `.motion-stagger` (children arrival cascade at `--stagger-delay`, capped at 8 children — mot-08), both inert under `prefers-reduced-motion` (mot-03) |
|
|
445
|
-
| `verbosity` / `feedback` / `density-tier` | `<html data-verbosity / data-feedback / data-density>` |
|
|
446
|
-
| `theme-default` | `<html data-theme>` (the boot theme; the toggle round-trips the same attribute) |
|
|
447
|
-
| `product` | `<html data-style="<slug>">` |
|
|
448
|
-
| `product-traits` / `anchors` | read by the front gate and improve/judge runs; never emitted |
|
|
449
|
-
| `typography.family.*` | data for emitters and exemplars; reaches CSS only through the primitives it aliases |
|
|
450
|
-
| — (derived at emit) | `--ease-enter`, `--ease-exit` from `ease-default`; `--stagger-delay` from `stagger-unit` |
|
|
451
|
-
|
|
452
|
-
---
|
|
453
|
-
|
|
454
|
-
## Validation — what `--check` enforces
|
|
455
|
-
|
|
456
|
-
The coverage gate. It exits non-zero and **names every offending path** so the fix is mechanical; an
|
|
457
|
-
artifact that passes is guaranteed derivable. Rules 1–12 keep their v1 numbering (amended where the
|
|
458
|
-
surface grew); rules 13–15 are the v2 additions.
|
|
459
|
-
|
|
460
|
-
1. **Files** — `design.tokens.json` and `design.resolver.json` present and parse as JSON; every file
|
|
461
|
-
the resolver references exists beside it; `design.tokens.dark.json` exists exactly when the
|
|
462
|
-
resolver's `dark` context names it.
|
|
463
|
-
2. **Payload** — the base file's root `$extensions["com.nurix.design"]` present with: `schema` literal
|
|
464
|
-
`design-tokens/v2`; `dtcg` literal `2025.10`; `product` non-empty; `provenance` legal; `sourced` an
|
|
465
|
-
ISO date; `verbosity` / `feedback` / `density-tier` legal enum values (never hinted);
|
|
466
|
-
`product-traits` a non-empty array; `lever-manifest` carrying all six keys; `theme-default` legal
|
|
467
|
-
when present and mirrored by the resolver's theme default; `anchors` an array of 2–3 non-empty
|
|
468
|
-
strings when present — **required for `provenance: project`** artifacts; the optional `look`
|
|
469
|
-
block enum-checked when present (theme / delight / resolution-mode enums, 2–3 named anchors,
|
|
470
|
-
the resolution shape).
|
|
471
|
-
3. **Primitive coverage** — all 27 `primitive.*` tokens present with the exact `$type` this schema
|
|
472
|
-
assigns, each assigned or hinted; `stagger-unit` within 0–60ms; fails naming every absent, empty,
|
|
473
|
-
or mistyped key.
|
|
474
|
-
4. **Color coverage** — all 36 `color.*` tokens present, `$type: "color"`, `colorSpace` one of
|
|
475
|
-
`oklch` | `srgb`, `.css` present (via the target when aliased), each assigned or hinted; fails
|
|
476
|
-
naming every missing token.
|
|
477
|
-
5. **Typography coverage** — `typography.family.heading|body|mono` present (`fontFamily`;
|
|
478
|
-
`family.display` optional but shape-checked when present);
|
|
479
|
-
`typography.ramp.h1|h2|h3|body|small|caption|display` present (`typography`), each composite
|
|
480
|
-
carrying all five sub-values.
|
|
481
|
-
6. **Alias integrity** — every `{path}` reference resolves within the artifact to a token of the
|
|
482
|
-
required type; no cycles.
|
|
483
|
-
7. **Manifest scales** — `spacing-scale`, `radius-scale`, `motion.durations` non-empty and ascending;
|
|
484
|
-
`motion.easings` non-empty; `shadow-levels` non-empty, drawn from the legal vocabulary (`overlay`
|
|
485
|
-
included), strictly increasing in intensity; `icons.family` non-empty; `accent-count` ≥ 1.
|
|
486
|
-
8. **Manifest consistency** — the look's own base values sit on its own allowlist: `radius` ∈
|
|
487
|
-
`radius-scale`; `duration-fast` / `duration-normal` / `duration-slow` ∈ `motion.durations`;
|
|
488
|
-
`ease-default`'s serialization ∈ `motion.easings`. An off-manifest value is legal **only** with a
|
|
489
|
-
`deviation:` `$description` (the recorded-deviation rule).
|
|
490
|
-
9. **Parse-back** — for every token carrying `.css`, parsing the string reproduces `$value` and
|
|
491
|
-
re-serializing `$value` reproduces the byte form; a shadow `.css` parses back to its layer array
|
|
492
|
-
(the intensity `calc` wrapper strips to the layer alpha); a gradient `.css` contains each stop
|
|
493
|
-
color's byte form.
|
|
494
|
-
10. **Dark completeness** — the dark file, when present, carries exactly the `color` group with all
|
|
495
|
-
36 roles under the same shape rules (aliases legal), and nothing else.
|
|
496
|
-
11. **Spec conformance** — only the ten `$type` values this schema uses appear; no invented
|
|
497
|
-
`$type`; unknown `$extensions` namespaces are preserved, never authored.
|
|
498
|
-
12. **Emission precondition** — `--emit` runs only over a passing artifact and refuses while any
|
|
499
|
-
token carries a `hint`, naming every hinted path (`--provisional` — golden/regression flows
|
|
500
|
-
only — emits provisional values instead).
|
|
501
|
-
13. **Elevation coverage** — all four `elevation.*` present, `$type: "shadow"`, ≥ 1 layer each,
|
|
502
|
-
every layer color rule-conformant (typed oklch|srgb; never pure black at alpha ≥ 0.15), lengths
|
|
503
|
-
dimension-shaped, the token-level `.css` present; each assigned or hinted; no level outside
|
|
504
|
-
`sm|md|lg|overlay`.
|
|
505
|
-
14. **Wash shape** — when the `wash` group exists: ≤ 2 tokens, slots ⊆ `surface|emphasis`,
|
|
506
|
-
`$type: "gradient"`, ≥ 2 stops each with a rule-conformant color and a position in 0–1, `.css`
|
|
507
|
-
present. Presence is never required.
|
|
508
|
-
15. **Provenance vocabulary** — a per-value `$description` opening with a tag uses a legal one
|
|
509
|
-
(`source:` / `brief:` / `deviation:` layer tags, or a mechanical-annotation prefix; untagged =
|
|
510
|
-
inherited); rule 8 enforces the off-manifest `deviation:` requirement.
|
|
511
|
-
|
|
512
|
-
Font binding and emitter completeness run at `--emit`, not `--check` — they compare the artifact
|
|
513
|
-
against emitted output and project dependencies (the emission contracts, not this file's gate).
|
|
514
|
-
|
|
515
|
-
---
|
|
516
|
-
|
|
517
|
-
## Migration — v1 artifacts to v2
|
|
518
|
-
|
|
519
|
-
`convert-design-md.mjs --upgrade-v2` is the mechanical, **idempotent** v1→v2 upgrade (it runs over
|
|
520
|
-
`data/design-tokens/*/`; the converter also applies the same transform to every fresh conversion):
|
|
521
|
-
|
|
522
|
-
1. `schema` literal → `design-tokens/v2`.
|
|
523
|
-
2. `elevation.*` derived from the v1 hardcoded slate recipes × the twin's `shadow-intensity` —
|
|
524
|
-
value-preserving (the emitted `--shadow-sm/md/lg` for an untouched twin are byte-identical before
|
|
525
|
-
and after migration, because the composites carry the recipe alphas and the intensity stays the
|
|
526
|
-
runtime `calc` multiplier), tagged `$description: "derived: v1 shadow-intensity migration"`.
|
|
527
|
-
Library entries whose design.md names real shadow values get **hinted** elevation instead,
|
|
528
|
-
resolved from the design.md prose at the data build.
|
|
529
|
-
3. `color.surface-raised` / `surface-overlay` → aliases to `{color.card}` / `{color.popover}` (in
|
|
530
|
-
the dark file too, where they resolve to the dark card/popover; the +4–6 L ladder is owed at
|
|
531
|
-
budget-time).
|
|
532
|
-
4. `typography.ramp.display` → **hinted** (provisional: h1 scaled ×1.75, weight from
|
|
533
|
-
`font-weight-strong`), hint text "display step unset — resolve from the product's design.md or
|
|
534
|
-
leave for budget-time". The Nurix default adopts the provisional derivation as its own look,
|
|
535
|
-
assigned.
|
|
536
|
-
5. `primitive.stagger-unit` → 30ms default (the prior derived clamp's value).
|
|
537
|
-
6. `theme-default` → `light` everywhere except twins whose design.md declares dark-first (only
|
|
538
|
-
twins carrying dark sets qualify; their design.md decides); the resolver's theme default mirrors
|
|
539
|
-
it.
|
|
540
|
-
7. Re-run parse-back verification + the v2 gate over every migrated twin.
|
|
541
|
-
|
|
542
|
-
Because migration is deterministic + hint-carrying, no hand-rewrite of the library is needed; hints
|
|
543
|
-
surface exactly where judgment is owed.
|
|
544
|
-
|
|
545
|
-
---
|
|
546
|
-
|
|
547
|
-
## Worked example — the Nurix default (abbreviated)
|
|
548
|
-
|
|
549
|
-
`data/design-tokens/nurix/design.tokens.json`, abbreviated to a representative subset of each token
|
|
550
|
-
family — the real file carries all 27 primitives, all 36 color roles, the full seven-step ramp, and
|
|
551
|
-
the four elevation composites. Nurix ships no dark set, so `design.tokens.dark.json` is absent and
|
|
552
|
-
the resolver carries only the `light` context.
|
|
553
|
-
|
|
554
|
-
```json
|
|
555
|
-
{
|
|
556
|
-
"$description": "Nurix default — the look a zero-input project wears. Abbreviated here; the shipped file is complete.",
|
|
557
|
-
"$extensions": {
|
|
558
|
-
"com.nurix.design": {
|
|
559
|
-
"schema": "design-tokens/v2",
|
|
560
|
-
"dtcg": "2025.10",
|
|
561
|
-
"product": "Nurix",
|
|
562
|
-
"provenance": "default",
|
|
563
|
-
"sourced": "2026-07-04",
|
|
564
|
-
"theme-default": "light",
|
|
565
|
-
"product-traits": ["operator-console", "crm", "queue", "dashboard", "admin"],
|
|
566
|
-
"verbosity": "default",
|
|
567
|
-
"feedback": "subtle",
|
|
568
|
-
"density-tier": "standard",
|
|
569
|
-
"lever-manifest": {
|
|
570
|
-
"spacing-scale": [2, 4, 8, 12, 16, 24, 32, 48, 64],
|
|
571
|
-
"radius-scale": [0, 4, 6, 12, 9999],
|
|
572
|
-
"shadow-levels": ["none", "sm", "md", "lg", "overlay"],
|
|
573
|
-
"motion": { "durations": [100, 150, 250], "easings": ["cubic-bezier(0.4,0,0.2,1)"] },
|
|
574
|
-
"icons": { "family": "lucide" },
|
|
575
|
-
"accent-count": 1
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
},
|
|
579
|
-
"primitive": {
|
|
580
|
-
"radius": {
|
|
581
|
-
"$type": "dimension",
|
|
582
|
-
"$value": { "value": 6, "unit": "px" },
|
|
583
|
-
"$description": "brand default 12px is marketing-surface soft; operator default tightens for a denser, engineered read"
|
|
584
|
-
},
|
|
585
|
-
"shadow-intensity": {
|
|
586
|
-
"$type": "number",
|
|
587
|
-
"$value": 0.4,
|
|
588
|
-
"$description": "brand is predominantly flat; shadow only lifts true overlays"
|
|
589
|
-
},
|
|
590
|
-
"font-sans": {
|
|
591
|
-
"$type": "fontFamily",
|
|
592
|
-
"$value": ["Inter", "system-ui", "sans-serif"],
|
|
593
|
-
"$description": "brand's body font; the single sans slot serves dense body/table chrome",
|
|
594
|
-
"$extensions": { "com.nurix.design": { "css": "Inter, system-ui, sans-serif" } }
|
|
595
|
-
},
|
|
596
|
-
"heading-tracking": {
|
|
597
|
-
"$type": "number",
|
|
598
|
-
"$value": -0.01,
|
|
599
|
-
"$description": "em multiplier; brand display tracks 0 — at operator heading sizes Inter reads tighter",
|
|
600
|
-
"$extensions": { "com.nurix.design": { "css": "-0.01em" } }
|
|
601
|
-
},
|
|
602
|
-
"ease-default": {
|
|
603
|
-
"$type": "cubicBezier",
|
|
604
|
-
"$value": [0.4, 0, 0.2, 1],
|
|
605
|
-
"$extensions": { "com.nurix.design": { "css": "cubic-bezier(0.4,0,0.2,1)" } }
|
|
606
|
-
},
|
|
607
|
-
"stagger-unit": {
|
|
608
|
-
"$type": "duration",
|
|
609
|
-
"$value": { "value": 30, "unit": "ms" },
|
|
610
|
-
"$description": "derived: v1→v2 migration — the 30ms default stagger base (0–60ms legal)"
|
|
611
|
-
},
|
|
612
|
-
"table-row-height": {
|
|
613
|
-
"$type": "dimension",
|
|
614
|
-
"$value": { "value": 40, "unit": "px" },
|
|
615
|
-
"$description": "comfortable at standard density; dense archetypes step down via the surface catalog"
|
|
616
|
-
}
|
|
617
|
-
},
|
|
618
|
-
"color": {
|
|
619
|
-
"background": {
|
|
620
|
-
"$type": "color",
|
|
621
|
-
"$value": { "colorSpace": "oklch", "components": [1, 0, 0] },
|
|
622
|
-
"$extensions": { "com.nurix.design": { "css": "oklch(1 0 0)" } }
|
|
623
|
-
},
|
|
624
|
-
"primary": {
|
|
625
|
-
"$type": "color",
|
|
626
|
-
"$value": { "colorSpace": "oklch", "components": [0.5211, 0.2145, 263.89] },
|
|
627
|
-
"$description": "brand #245AE2 — the one accent",
|
|
628
|
-
"$extensions": { "com.nurix.design": { "css": "oklch(0.5211 0.2145 263.89)" } }
|
|
629
|
-
},
|
|
630
|
-
"surface-raised": {
|
|
631
|
-
"$type": "color",
|
|
632
|
-
"$value": "{color.card}",
|
|
633
|
-
"$description": "derived: v1→v2 migration — light aliases card; dark looks carry the surface-lightness ladder"
|
|
634
|
-
},
|
|
635
|
-
"surface-overlay": {
|
|
636
|
-
"$type": "color",
|
|
637
|
-
"$value": "{color.popover}",
|
|
638
|
-
"$description": "derived: v1→v2 migration — light aliases popover; dark looks carry the surface-lightness ladder"
|
|
639
|
-
}
|
|
640
|
-
},
|
|
641
|
-
"typography": {
|
|
642
|
-
"family": {
|
|
643
|
-
"heading": { "$type": "fontFamily", "$value": "{primitive.font-sans}" },
|
|
644
|
-
"body": { "$type": "fontFamily", "$value": "{primitive.font-sans}" },
|
|
645
|
-
"mono": { "$type": "fontFamily", "$value": "{primitive.font-mono}" }
|
|
646
|
-
},
|
|
647
|
-
"ramp": {
|
|
648
|
-
"h1": {
|
|
649
|
-
"$type": "typography",
|
|
650
|
-
"$value": {
|
|
651
|
-
"fontFamily": "{typography.family.heading}",
|
|
652
|
-
"fontSize": { "value": 24, "unit": "px" },
|
|
653
|
-
"lineHeight": 1.25,
|
|
654
|
-
"fontWeight": "{primitive.font-weight-strong}",
|
|
655
|
-
"letterSpacing": "{primitive.heading-tracking}"
|
|
656
|
-
}
|
|
657
|
-
},
|
|
658
|
-
"display": {
|
|
659
|
-
"$type": "typography",
|
|
660
|
-
"$value": {
|
|
661
|
-
"fontFamily": "{typography.family.heading}",
|
|
662
|
-
"fontSize": { "value": 42, "unit": "px" },
|
|
663
|
-
"lineHeight": 1.25,
|
|
664
|
-
"fontWeight": "{primitive.font-weight-strong}",
|
|
665
|
-
"letterSpacing": "{primitive.heading-tracking}"
|
|
666
|
-
},
|
|
667
|
-
"$description": "derived: v2 display step — the provisional h1 × 1.75 derivation adopted as the default's own look (KPI numerals, the one focal metric)"
|
|
668
|
-
}
|
|
669
|
-
}
|
|
670
|
-
},
|
|
671
|
-
"elevation": {
|
|
672
|
-
"sm": {
|
|
673
|
-
"$type": "shadow",
|
|
674
|
-
"$value": [
|
|
675
|
-
{ "color": { "colorSpace": "srgb", "components": [0.05882, 0.0902, 0.16471], "alpha": 0.1, "hex": "#0f172a" }, "offsetX": { "value": 0, "unit": "px" }, "offsetY": { "value": 1, "unit": "px" }, "blur": { "value": 3, "unit": "px" }, "spread": { "value": 0, "unit": "px" } },
|
|
676
|
-
{ "color": { "colorSpace": "srgb", "components": [0.05882, 0.0902, 0.16471], "alpha": 0.1, "hex": "#0f172a" }, "offsetX": { "value": 0, "unit": "px" }, "offsetY": { "value": 1, "unit": "px" }, "blur": { "value": 2, "unit": "px" }, "spread": { "value": -1, "unit": "px" } }
|
|
677
|
-
],
|
|
678
|
-
"$description": "derived: v1 shadow-intensity migration",
|
|
679
|
-
"$extensions": { "com.nurix.design": { "css": "0 1px 3px 0 rgb(15 23 42 / calc(0.10 * var(--shadow-intensity))), 0 1px 2px -1px rgb(15 23 42 / calc(0.10 * var(--shadow-intensity)))" } }
|
|
680
|
-
}
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
```
|
|
684
|
-
|
|
685
|
-
`data/design-tokens/nurix/design.resolver.json`:
|
|
686
|
-
|
|
687
|
-
```json
|
|
688
|
-
{
|
|
689
|
-
"schema": "design-resolver/v1",
|
|
690
|
-
"sets": [{ "name": "base", "values": ["design.tokens.json"] }],
|
|
691
|
-
"modifiers": [
|
|
692
|
-
{ "name": "theme", "default": "light", "contexts": { "light": [] } }
|
|
693
|
-
]
|
|
694
|
-
}
|
|
695
|
-
```
|