@nebutra/tokens 0.1.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/brands/README.md +66 -0
  3. package/brands/cosmos/DESIGN.md +356 -0
  4. package/brands/cosmos/brand.json +209 -0
  5. package/brands/cosmos/refero-tokens.json +312 -0
  6. package/brands/gsap/brand.json +1 -27
  7. package/brands/linear/DESIGN.md +478 -0
  8. package/brands/linear/brand.json +2 -19
  9. package/brands/notion/brand.json +2 -28
  10. package/brands/raycast/brand.json +2 -17
  11. package/brands/stripe/brand.json +1 -16
  12. package/brands/vanta/brand.json +1 -38
  13. package/brands/vercel/brand.json +1 -18
  14. package/dist/brand-package/index.d.ts +13 -7
  15. package/dist/brand-package/index.js +2290 -34
  16. package/dist/brand-package/index.js.map +1 -1
  17. package/dist/brand-package/use-brand.d.ts +1 -1
  18. package/dist/brand-package/use-brand.js +957 -5
  19. package/dist/brand-package/use-brand.js.map +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +2417 -22
  22. package/dist/index.js.map +1 -1
  23. package/dist/{use-brand-C8d4DPqE.d.ts → use-brand-ClmvK_lC.d.ts} +19 -3
  24. package/dist/values.d.ts +1192 -0
  25. package/dist/values.js +518 -0
  26. package/dist/values.js.map +1 -0
  27. package/package.json +16 -4
  28. package/recipe.css +36 -2
  29. package/skins/cosmos.css +239 -0
  30. package/skins/gsap.css +32 -20
  31. package/skins/linear.css +54 -17
  32. package/skins/notion.css +36 -25
  33. package/skins/raycast.css +37 -19
  34. package/skins/stripe.css +34 -15
  35. package/skins/vanta.css +34 -30
  36. package/skins/vercel.css +55 -19
  37. package/styles.css +492 -149
  38. package/dist/chunk-ALJTP5HL.js +0 -881
  39. package/dist/chunk-ALJTP5HL.js.map +0 -1
  40. package/dist/chunk-RGUJQOLH.js +0 -1582
  41. package/dist/chunk-RGUJQOLH.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/brand-package/compile-helpers.ts","../src/brand-package/infer-recipe.ts","../src/brand-package/presets/recipe.ts","../src/brand-package/presets/generic.ts","../src/brand-package/presets/gsap.ts","../src/brand-package/presets/linear.ts","../src/brand-package/presets/notion.ts","../src/brand-package/presets/raycast.ts","../src/brand-package/presets/stripe.ts","../src/brand-package/presets/vanta.ts","../src/brand-package/presets/vercel.ts","../src/brand-package/presets/index.ts","../src/brand-package/compile-refero.ts","../src/brand-package/validate.ts"],"sourcesContent":["/**\n * Shared helpers for Refero → Brand Package compilation.\n * Preset builders live in compile-refero.ts; keep color/font extraction here.\n */\n\nexport type Json = Record<string, unknown>;\n\nexport type PresetId =\n | \"linear\"\n | \"gsap\"\n | \"raycast\"\n | \"vercel\"\n | \"vanta\"\n | \"stripe\"\n | \"notion\"\n | \"generic\";\n\nexport function leafHex(tree: Json | undefined, path: string[]): string | undefined {\n let cur: unknown = tree;\n for (const p of path) {\n if (!cur || typeof cur !== \"object\") return undefined;\n cur = (cur as Json)[p];\n }\n if (!cur || typeof cur !== \"object\") return undefined;\n const v = (cur as Json).$value ?? (cur as Json).value;\n return typeof v === \"string\" ? v : undefined;\n}\n\nexport function detectPreset(idHint: string, colors: Record<string, string>): PresetId {\n const id = idHint.toLowerCase();\n if (id.includes(\"linear\")) return \"linear\";\n if (id.includes(\"gsap\")) return \"gsap\";\n if (id.includes(\"raycast\")) return \"raycast\";\n if (id.includes(\"vercel\")) return \"vercel\";\n if (id.includes(\"vanta\")) return \"vanta\";\n if (id.includes(\"stripe\")) return \"stripe\";\n if (id.includes(\"notion\")) return \"notion\";\n // Heuristics from Refero extractions\n if (colors[\"paper-white\"] && colors.obsidian && colors.hairline) return \"vercel\";\n if (colors[\"coral-pulse\"] || (colors[\"void-black\"] && colors.mist && colors.ink)) {\n return \"raycast\";\n }\n if (colors[\"acid-lime\"] || colors.void) return \"linear\";\n if (colors[\"shockingly-green\"] || colors[\"surface-cream\"] || colors[\"just-black\"]) return \"gsap\";\n if (colors[\"just-black\"] && colors[\"surface-cream\"]) return \"gsap\";\n // Notion: warm paper canvas + single blue CTA + ink hierarchy\n if (\n (colors[\"notion-blue\"] || colors[\"paper-warmth\"]) &&\n (colors[\"paper-warmth\"] || colors[\"ink-black\"]) &&\n (colors[\"sky-tint\"] || colors.marigold || colors.coral)\n ) {\n return \"notion\";\n }\n // Stripe: indigo-ink action + pure-white canvas + frost borders + midnight text\n if (\n colors[\"indigo-ink\"] &&\n colors[\"pure-white\"] &&\n (colors.frost || colors[\"lavender-border\"] || colors[\"midnight-ink\"]) &&\n !colors[\"paper-warmth\"]\n ) {\n return \"stripe\";\n }\n // Vanta: indigo-ink as logo + vivid-violet CTA + parchment (not pure-white ledger)\n if (\n (colors[\"indigo-ink\"] || colors[\"vivid-violet\"]) &&\n (colors.parchment || colors[\"lavender-wash\"] || colors.paper) &&\n !colors[\"pure-white\"]\n ) {\n return \"vanta\";\n }\n return \"generic\";\n}\n\n/** First font family leaf that is UI/sans (not display/serif display faces). */\nexport function pickUiFontFamily(font: Json): string | undefined {\n const preferUi = /(inter|geist|manrope|dm sans|sans|ui)/i;\n const avoidDisplay = /(reckless|serif|display|editorial|playfair|lora|source serif)/i;\n const entries = Object.entries(font);\n for (const [k, v] of entries) {\n if (!v || typeof v !== \"object\") continue;\n const name = String((v as Json).$value ?? (v as Json).value ?? \"\");\n if (!name || avoidDisplay.test(k) || avoidDisplay.test(name)) continue;\n if (preferUi.test(k) || preferUi.test(name) || entries.length === 1) return name;\n }\n for (const [k, v] of entries) {\n if (!v || typeof v !== \"object\") continue;\n const name = String((v as Json).$value ?? (v as Json).value ?? \"\");\n if (name && !avoidDisplay.test(k) && !avoidDisplay.test(name)) return name;\n }\n return undefined;\n}\n\nexport function pickDisplayFontFamily(font: Json): string | undefined {\n const prefer = /(reckless|serif|display|editorial|playfair|lora|source serif|mori)/i;\n for (const [k, v] of Object.entries(font)) {\n if (!v || typeof v !== \"object\") continue;\n const name = String((v as Json).$value ?? (v as Json).value ?? \"\");\n if (name && (prefer.test(k) || prefer.test(name))) return name;\n }\n return undefined;\n}\n\n/**\n * shadcn / Appearance / playground token names → keys generic + presets already pick.\n * Kebab and camel both land on the same slot so compileReferoTokens works for imports.\n */\nconst COLOR_KEY_ALIASES: Record<string, string[]> = {\n background: [\"background\", \"canvas\", \"page-canvas\"],\n foreground: [\"foreground\", \"ink\", \"ink-black\"],\n card: [\"card\", \"card-surface\", \"surface\"],\n \"card-foreground\": [\"card-foreground\"],\n cardForeground: [\"card-foreground\"],\n primary: [\"primary\", \"action\"],\n \"primary-foreground\": [\"primary-foreground\"],\n primaryForeground: [\"primary-foreground\"],\n secondary: [\"secondary\", \"quiet\"],\n \"secondary-foreground\": [\"secondary-foreground\"],\n secondaryForeground: [\"secondary-foreground\"],\n muted: [\"muted\"],\n \"muted-foreground\": [\"muted-foreground\", \"mutedForeground\", \"stone\"],\n mutedForeground: [\"muted-foreground\", \"stone\"],\n accent: [\"accent\"],\n \"accent-foreground\": [\"accent-foreground\"],\n accentForeground: [\"accent-foreground\"],\n border: [\"border\", \"hairline\"],\n input: [\"input\"],\n ring: [\"ring\"],\n destructive: [\"destructive\"],\n \"destructive-foreground\": [\"destructive-foreground\"],\n destructiveForeground: [\"destructive-foreground\"],\n success: [\"success\"],\n popover: [\"popover\"],\n \"popover-foreground\": [\"popover-foreground\"],\n popoverForeground: [\"popover-foreground\"],\n};\n\nfunction isUsableColorValue(val: string): boolean {\n const t = val.trim();\n if (!t) return false;\n if (t.startsWith(\"#\")) return true;\n if (/^\\d+(\\.\\d+)?\\s+\\d+(\\.\\d+)?%\\s+\\d+(\\.\\d+)?%$/.test(t)) return true;\n if (/^hsla?\\(/i.test(t) || /^rgba?\\(/i.test(t)) return true;\n // oklch/lab left out of compile path (no reliable SSR convert); Appearance still has canvas probe\n return false;\n}\n\nexport function collectColors(colorRoot: Json | undefined): Record<string, string> {\n const raw: Record<string, string> = {};\n if (!colorRoot || typeof colorRoot !== \"object\") return raw;\n for (const [k, v] of Object.entries(colorRoot)) {\n if (!v || typeof v !== \"object\") continue;\n const val = (v as Json).$value ?? (v as Json).value;\n if (typeof val === \"string\" && isUsableColorValue(val)) raw[k] = val.trim();\n }\n\n // Expand aliases so shadcn-named imports hit preset pick() keys\n const out: Record<string, string> = { ...raw };\n for (const [key, value] of Object.entries(raw)) {\n const aliases = COLOR_KEY_ALIASES[key];\n if (!aliases) continue;\n for (const alias of aliases) {\n if (!out[alias]) out[alias] = value;\n }\n }\n return out;\n}\n\nexport function collectSurfaces(surfaceRoot: Json | undefined): Record<string, string> {\n return collectColors(surfaceRoot as Json | undefined);\n}\n","import type { ButtonDefaultStyle, Density, ElevationStyle } from \"./types\";\n\nexport interface InferredRecipeHints {\n buttonDefault?: ButtonDefaultStyle;\n elevationPreset?: ElevationStyle;\n density?: Density;\n /** Free radii slots from DESIGN.md tables / free-text */\n radii?: { button?: string; card?: string };\n notes: string[];\n}\n\n/**\n * Infer control recipe from DESIGN.md / agent prompt text.\n * Used for generic brands and to refine known fixtures.\n */\nexport function inferRecipeFromDesignMd(designMd: string): InferredRecipeHints {\n const t = designMd.toLowerCase();\n const notes: string[] = [];\n const hints: InferredRecipeHints = { notes };\n\n const outlineFirst =\n t.includes(\"outlined-only\") ||\n t.includes(\"outline-only\") ||\n t.includes(\"ghost pill\") ||\n t.includes(\"ghost-pill\") ||\n t.includes(\"no filled\") ||\n t.includes(\"don't add filled\") ||\n t.includes(\"do not add filled\") ||\n t.includes(\"never fill\") ||\n (t.includes(\"outlined\") && t.includes(\"button\") && !t.includes(\"filled cta\"));\n\n // Require explicit stroke CTA language — do NOT match hero artwork \"gradient\"\n const gradientStroke =\n t.includes(\"gradient-stroked\") ||\n t.includes(\"gradient stroke\") ||\n t.includes(\"gradient-stroked cta\") ||\n t.includes(\"border-image\") ||\n (t.includes(\"gradient border\") && (t.includes(\"cta\") || t.includes(\"button\")));\n\n // Raycast-style neutral CTA — do NOT match mere color-token name \"mist\" + \"filled button\"\n const neutralFilled =\n t.includes(\"no chromatic\") ||\n t.includes(\"deliberately neutral\") ||\n t.includes(\"neutral rather than chromatic\") ||\n t.includes(\"no chromatic action\") ||\n t.includes(\"don't use chromatic action\") ||\n t.includes(\"do not use chromatic action\") ||\n (t.includes(\"mist\") && t.includes(\"filled\") && (t.includes(\"iron\") || t.includes(\"neutral\")));\n\n const solidCta =\n neutralFilled ||\n (t.includes(\"filled\") &&\n (t.includes(\"primary\") ||\n t.includes(\"cta\") ||\n t.includes(\"download\") ||\n t.includes(\"action button\") ||\n t.includes(\"primary action\") ||\n t.includes(\"filled button\")));\n\n if (gradientStroke) {\n hints.buttonDefault = \"gradient-stroke\";\n notes.push(\"DESIGN.md: gradient-stroke CTA\");\n } else if (outlineFirst && !solidCta) {\n hints.buttonDefault = \"outline\";\n notes.push(\"DESIGN.md: outline-first controls\");\n } else if (solidCta) {\n hints.buttonDefault = \"solid\";\n if (neutralFilled) notes.push(\"DESIGN.md: neutral filled CTA (not chromatic)\");\n }\n\n // Explicit ban on all elevation shadows (Stripe/Vanta ledger systems)\n const forbidsAnyShadow =\n t.includes(\"avoids shadows\") ||\n t.includes(\"avoid shadows\") ||\n t.includes(\"avoids shadows entirely\") ||\n t.includes(\"no card has a box-shadow\") ||\n t.includes(\"no button has a shadow\") ||\n t.includes(\"never from box-shadow\") ||\n t.includes(\"never from elevation\") ||\n t.includes(\"depth comes from background tint\") ||\n t.includes(\"depth comes from background\") ||\n t.includes(\"no shadows, blurs\") ||\n t.includes(\"do not use shadows\") ||\n t.includes(\"don't use shadows\") ||\n t.includes(\"rejects drop shadows\") ||\n t.includes(\"reject drop shadows\") ||\n t.includes(\"don't drop shadows\") ||\n t.includes(\"do not drop shadows\") ||\n t.includes(\"don't apply drop shadows\") ||\n t.includes(\"do not apply drop shadows\") ||\n t.includes(\"don't add drop-shadows\") ||\n t.includes(\"do not add drop-shadows\") ||\n t.includes(\"never use drop-shadows\") ||\n t.includes(\"no drop shadow\") ||\n t.includes(\"no box-shadow\") ||\n t.includes(\"never via box-shadow\") ||\n t.includes(\"border is the elevation\") ||\n t.includes(\"no shadow — the border\") ||\n t.includes(\"no shadow - the border\") ||\n t.includes(\"depth is communicated only\") ||\n (t.includes(\"no shadow\") && t.includes(\"border\")) ||\n (t.includes(\"flat\") && t.includes(\"1px\") && t.includes(\"border\"));\n\n const keyElev =\n t.includes(\"keyboard key\") ||\n t.includes(\"key shadow\") ||\n t.includes(\"key cap\") ||\n (t.includes(\"inset top\") && t.includes(\"highlight\") && t.includes(\"shadow\"));\n\n // Vercel-style: affirmative *use* of stacked box-shadow rings (not \"never box-shadow\")\n const hairlineRingElev =\n !forbidsAnyShadow &&\n (t.includes(\"stacked box-shadow\") ||\n t.includes(\"double-ring\") ||\n t.includes(\"build depth with hairline\") ||\n (t.includes(\"hairline\") &&\n t.includes(\"box-shadow\") &&\n (t.includes(\"never with drop-shadow\") ||\n t.includes(\"never use drop-shadow\") ||\n t.includes(\"not with drop-shadow\"))));\n\n if (keyElev) {\n hints.elevationPreset = \"key\";\n notes.push(\"DESIGN.md: key/inset elevation\");\n } else if (forbidsAnyShadow) {\n hints.elevationPreset = \"none\";\n notes.push(\"DESIGN.md: elevation=none (no box-shadow / tint+border depth)\");\n } else if (hairlineRingElev) {\n hints.elevationPreset = \"hairline\";\n notes.push(\"DESIGN.md: hairline ring elevation\");\n }\n\n // Density: explicit catalog line beats incidental \"compact pill padding\"\n if (\n /\\*\\*density:\\*\\*\\s*comfortable|density:\\s*comfortable|\\bdensity\\b[^\\n]{0,20}comfortable/i.test(\n designMd,\n )\n ) {\n hints.density = \"comfortable\";\n } else if (/\\*\\*density:\\*\\*\\s*spacious|density:\\s*spacious/i.test(designMd)) {\n hints.density = \"spacious\";\n } else if (/\\*\\*density:\\*\\*\\s*compact|density:\\s*compact/i.test(designMd)) {\n hints.density = \"compact\";\n } else if (\n (t.includes(\"compact density\") || t.includes(\"8–12px\") || t.includes(\"8-12px\")) &&\n !t.includes(\"comfortable\")\n ) {\n hints.density = \"compact\";\n } else if (t.includes(\"comfortable\") || t.includes(\"spacious\")) {\n hints.density = t.includes(\"spacious\") ? \"spacious\" : \"comfortable\";\n }\n\n // Radius: **token table rows win** over free-text / agent-prompt noise.\n // e.g. Notion \"| buttons | 8px |\" must beat incidental \"border-radius 4px\" on a tertiary control.\n const tableButton = designMd.match(/\\|\\s*buttons\\s*\\|\\s*(\\d+px|9999?px)\\s*\\|/i);\n const tableCards = designMd.match(/\\|\\s*cards\\s*\\|\\s*(\\d+px|9999?px)\\s*\\|/i);\n const tableButtonRadius = tableButton?.[1];\n const tableCardsRadius = tableCards?.[1];\n const radii: { button?: string; card?: string } = {};\n if (tableButtonRadius) {\n radii.button = tableButtonRadius;\n notes.push(`DESIGN.md: table buttons radius ${tableButtonRadius}`);\n } else if (\n t.includes(\"4px border-radius on all buttons\") ||\n t.includes(\"use 4px border-radius on all\") ||\n (t.includes(\"never pill\") && t.includes(\"4px\") && t.includes(\"button\"))\n ) {\n radii.button = \"4px\";\n notes.push(\"DESIGN.md: 4px control radius (not pill)\");\n } else if (\n ((t.includes(\"999px\") || t.includes(\"9999px\")) &&\n (t.includes(\"button\") || t.includes(\"pill-shaped\")) &&\n !t.includes(\"never pill\") &&\n !t.includes(\"not pill\") &&\n !t.includes(\"pills only\")) ||\n (t.includes(\"pill-shaped\") && t.includes(\"button\"))\n ) {\n radii.button = t.includes(\"9999px\") ? \"9999px\" : \"999px\";\n notes.push(\"DESIGN.md: full pill control radius\");\n } else if (/\\bbuttons?\\b[^\\n.|]{0,48}\\b8px\\b/.test(t) || t.includes(\"8px for buttons\")) {\n radii.button = \"8px\";\n } else if (/\\bbuttons?\\b[^\\n.|]{0,48}\\b6px\\b/.test(t) || t.includes(\"button radius to 6px\")) {\n radii.button = \"6px\";\n } else if (t.includes(\"100px\") && (t.includes(\"button\") || t.includes(\"pill button\"))) {\n radii.button = \"100px\";\n }\n\n if (tableCardsRadius) {\n radii.card = tableCardsRadius;\n notes.push(`DESIGN.md: table cards radius ${tableCardsRadius}`);\n }\n\n if (radii.button != null || radii.card != null) {\n hints.radii = radii;\n }\n\n return hints;\n}\n","/**\n * Canonical recipe builder for compile presets.\n * Output: free radii + free elevationTokens only.\n */\n\nimport { elevationPresetToTokens } from \"../normalize\";\nimport type {\n BadgeDefaultStyle,\n BrandElevationTokens,\n BrandRadii,\n BrandRecipe,\n ButtonDefaultStyle,\n Density,\n ElevationStyle,\n} from \"../types\";\n\nexport interface RecipeInput {\n buttonDefault: ButtonDefaultStyle;\n density?: Density;\n /** Free radii slots (preferred API) */\n radii?: Partial<BrandRadii>;\n /**\n * Elevation preset expanded to elevationTokens when elevationTokens omitted.\n * Prefer passing elevationTokens for free CSS stacks.\n */\n elevationPreset?: ElevationStyle;\n elevationTokens?: BrandElevationTokens;\n badgeDefault?: BadgeDefaultStyle;\n primaryStrokeGradient?: string;\n outlineBorder?: string;\n /** Used when expanding elevationPreset key/hairline */\n cardShadow?: string;\n}\n\n/** Build a canonical BrandRecipe (radii + elevationTokens only). */\nexport function buildRecipe(input: RecipeInput): BrandRecipe {\n const button = input.radii?.button ?? \"0.375rem\";\n const card = input.radii?.card ?? \"0.75rem\";\n const badge = input.radii?.badge ?? \"9999px\";\n const radii: BrandRadii = {\n button,\n card,\n badge,\n input: input.radii?.input ?? button,\n pill: input.radii?.pill ?? \"9999px\",\n };\n const elevationPreset = input.elevationPreset ?? \"soft\";\n const elevationTokens =\n input.elevationTokens ?? elevationPresetToTokens(elevationPreset, input.cardShadow);\n\n const recipe: BrandRecipe = {\n buttonDefault: input.buttonDefault,\n density: input.density ?? \"comfortable\",\n radii,\n elevationTokens,\n };\n if (input.badgeDefault) recipe.badgeDefault = input.badgeDefault;\n if (input.primaryStrokeGradient) recipe.primaryStrokeGradient = input.primaryStrokeGradient;\n if (input.outlineBorder) recipe.outlineBorder = input.outlineBorder;\n return recipe;\n}\n","/**\n * Generic heuristic compile path for unknown brands.\n */\nimport { leafHex, pickDisplayFontFamily, pickUiFontFamily } from \"../compile-helpers\";\nimport { tryHexToHsl } from \"../hex-to-hsl\";\nimport type { BrandPackage } from \"../types\";\nimport type { CompileContext } from \"./context\";\nimport { buildRecipe } from \"./recipe\";\n\nexport function buildGeneric(ctx: CompileContext): BrandPackage {\n ctx.warnings.push(\n \"Unknown brand layout — compiled with heuristic recipe. Review mapping in Create Center.\",\n );\n ctx.warnings.push(...ctx.recipeHints.notes);\n const entries = Object.entries(ctx.colors);\n const pick = (...keys: string[]) => {\n for (const k of keys) {\n if (ctx.colors[k]) return ctx.colors[k];\n }\n return undefined;\n };\n // Page canvas first (warm paper / parchment), then pure white, then dark voids.\n // Notion: paper-warmth is canvas; pure-white is card — never invert.\n const bg =\n pick(\n \"paper-warmth\",\n \"paper-white\",\n \"page-canvas\",\n \"parchment\",\n \"pure-white\",\n \"paper\",\n \"background\",\n \"canvas\",\n \"void-black\",\n \"void\",\n \"just-black\",\n \"off-black\",\n ) ?? \"#0a0a0a\";\n\n // Detect light canvas early so fg/primary picks don't invert\n const isLightCanvas = (() => {\n try {\n const m = tryHexToHsl(bg, \"0 0% 4%\").match(/(\\d+)%\\s*$/);\n return m ? Number(m[1]) >= 50 : false;\n } catch {\n return false;\n }\n })();\n\n // Light: ink/carbon text — never pure-white; prefer ink-black over decorative midnight.\n const fg = isLightCanvas\n ? (pick(\n \"ink-black\",\n \"carbon\",\n \"charcoal\",\n \"obsidian\",\n \"foreground\",\n \"ink\",\n \"midnight-ink\",\n \"deep-violet\",\n \"slate\",\n ) ?? \"#181822\")\n : (pick(\"pure-white\", \"paper\", \"surface-cream\", \"bone\", \"mist\", \"foreground\", \"white\") ??\n \"#ffffff\");\n\n // Chromatic *action* tokens only — never canvas/surface/decorative wash names\n const primary =\n pick(\n \"notion-blue\",\n \"indigo-ink\",\n \"vivid-violet\",\n \"primary\",\n \"acid-lime\",\n \"obsidian\",\n \"shockingly-green\",\n \"brand\",\n \"accent\",\n \"mid-violet\",\n \"amethyst-edge\",\n \"signal-blue\",\n ) ??\n entries.find(\n ([k]) =>\n !/void|black|canvas|graphite|paper|hairline|ash|parchment|fog|lavender|steel|slate|carbon|mist|frost|smoke|white|midnight|warmth|tint|wash|marigold|coral|saffron|mocha|vermillion|sky/i.test(\n k,\n ),\n )?.[1] ??\n (isLightCanvas ? \"#171717\" : \"#3b82f6\");\n\n // Brand-mark ≠ action: logo inks — not decorative midnight/coral washes by default\n const brandMarkHex =\n pick(\"ink-black\", \"coral-pulse\", \"brand-mark\", \"logo\", \"wordmark\", \"charcoal\", \"deep-violet\") ??\n undefined;\n\n const border = isLightCanvas\n ? (pick(\"frost\", \"hairline\", \"border\", \"ash\", \"carbon\", \"lilac-border\", \"slate\") ?? \"#e5e5e5\")\n : (pick(\"hairline\", \"border\", \"slate\", \"graphite\", \"surface-25\", \"smoke\") ?? \"#333333\");\n const mutedFg =\n pick(\n \"stone\",\n \"charcoal\",\n \"graphite\",\n \"steel\",\n \"slate\",\n \"muted\",\n \"smoke\",\n \"ash\",\n \"fog\",\n \"surface-50\",\n ) ?? \"#888888\";\n const card = isLightCanvas\n ? (pick(\"pure-white\", \"paper\", \"card-surface\", \"card\") ?? \"#ffffff\")\n : (pick(\"ink\", \"carbon\", \"off-black\", \"obsidian\", \"card\") ?? bg);\n\n const quiet = isLightCanvas\n ? (pick(\"sky-tint\", \"periwinkle-wash\", \"lavender-wash\", \"mist\", \"fog\", \"ash\", \"secondary\") ??\n border)\n : (pick(\"graphite\", \"obsidian\", \"smoke\", \"secondary\") ?? border);\n\n const uiFont = pickUiFontFamily(ctx.font) ?? \"Inter\";\n const displayFont = pickDisplayFontFamily(ctx.font);\n\n let elevationPreset = ctx.recipeHints.elevationPreset ?? \"soft\";\n if (elevationPreset === \"key\" && isLightCanvas) elevationPreset = \"hairline\";\n\n const brand: BrandPackage = {\n id: ctx.id,\n name: ctx.siteName,\n darkDefault: !isLightCanvas,\n version: \"0.1.0\",\n semantic: isLightCanvas\n ? {\n background: tryHexToHsl(bg, \"0 0% 98%\"),\n foreground: tryHexToHsl(fg, \"0 0% 9%\"),\n card: tryHexToHsl(card, \"0 0% 100%\"),\n cardForeground: tryHexToHsl(fg, \"0 0% 9%\"),\n popover: tryHexToHsl(card, \"0 0% 100%\"),\n popoverForeground: tryHexToHsl(fg, \"0 0% 9%\"),\n primary: tryHexToHsl(primary, \"0 0% 9%\"),\n primaryForeground: tryHexToHsl(card, \"0 0% 100%\"),\n secondary: tryHexToHsl(quiet, \"0 0% 92%\"),\n secondaryForeground: tryHexToHsl(fg, \"0 0% 9%\"),\n muted: tryHexToHsl(quiet, \"0 0% 92%\"),\n mutedForeground: tryHexToHsl(mutedFg, \"0 0% 40%\"),\n accent: tryHexToHsl(quiet, \"0 0% 92%\"),\n accentForeground: tryHexToHsl(fg, \"0 0% 9%\"),\n destructive: \"0 72% 51%\",\n destructiveForeground: \"0 0% 100%\",\n border: tryHexToHsl(border, \"0 0% 20%\"),\n input: tryHexToHsl(card, \"0 0% 100%\"),\n ring: tryHexToHsl(primary, \"0 0% 9%\"),\n }\n : {\n background: tryHexToHsl(bg, \"0 0% 4%\"),\n foreground: tryHexToHsl(fg, \"0 0% 98%\"),\n card: tryHexToHsl(card, \"0 0% 8%\"),\n cardForeground: tryHexToHsl(fg, \"0 0% 98%\"),\n popover: tryHexToHsl(card, \"0 0% 8%\"),\n popoverForeground: tryHexToHsl(fg, \"0 0% 98%\"),\n primary: tryHexToHsl(primary, \"217 91% 60%\"),\n primaryForeground: tryHexToHsl(bg, \"0 0% 4%\"),\n secondary: tryHexToHsl(border, \"0 0% 20%\"),\n secondaryForeground: tryHexToHsl(fg, \"0 0% 98%\"),\n muted: tryHexToHsl(card, \"0 0% 8%\"),\n mutedForeground: tryHexToHsl(mutedFg, \"0 0% 53%\"),\n accent: tryHexToHsl(border, \"0 0% 20%\"),\n accentForeground: tryHexToHsl(primary, \"217 91% 60%\"),\n destructive: \"0 72% 51%\",\n destructiveForeground: \"0 0% 100%\",\n border: tryHexToHsl(border, \"0 0% 20%\"),\n input: tryHexToHsl(border, \"0 0% 20%\"),\n ring: tryHexToHsl(primary, \"217 91% 60%\"),\n },\n recipe: buildRecipe({\n buttonDefault: ctx.recipeHints.buttonDefault ?? \"solid\",\n radii: {\n button:\n ctx.recipeHints.radii?.button ??\n leafHex(ctx.radius, [\"buttons\"]) ??\n leafHex(ctx.radius, [\"md\"]) ??\n \"0.375rem\",\n card:\n ctx.recipeHints.radii?.card ??\n leafHex(ctx.radius, [\"cards\"]) ??\n leafHex(ctx.radius, [\"xl\"]) ??\n leafHex(ctx.radius, [\"lg\"]) ??\n \"0.75rem\",\n badge: leafHex(ctx.radius, [\"pills\"]) ?? leafHex(ctx.radius, [\"badges\"]) ?? \"9999px\",\n input: leafHex(ctx.radius, [\"inputs\"]) ?? ctx.recipeHints.radii?.button ?? \"0.375rem\",\n },\n elevationPreset,\n density: ctx.recipeHints.density ?? \"comfortable\",\n outlineBorder: isLightCanvas ? border : fg,\n badgeDefault: brandMarkHex ? \"muted\" : \"match-action\",\n }),\n typography: {\n fontSans: `'${uiFont}', ui-sans-serif, system-ui, sans-serif`,\n ...(displayFont ? { fontDisplay: `'${displayFont}', ui-serif, Georgia, serif` } : {}),\n headingWeight: isLightCanvas ? 500 : 600,\n },\n extensions: {\n ...(typeof ctx.refero.url === \"string\" ? { sourceUrl: ctx.refero.url } : {}),\n ...(brandMarkHex ? { categories: { brand: brandMarkHex } } : {}),\n notes: [\n \"Generic compile — verify primary + buttonDefault in Create Center.\",\n ...(brandMarkHex\n ? [\"Detected separate brand-mark color (categories.brand → --brand-mark).\"]\n : []),\n ],\n },\n };\n\n return brand;\n}\n","/**\n * gsap design-language compile preset (stress fixture).\n */\nimport { leafHex } from \"../compile-helpers\";\nimport { tryHexToHsl } from \"../hex-to-hsl\";\nimport type { BrandPackage, ButtonDefaultStyle, Density } from \"../types\";\nimport type { CompileContext } from \"./context\";\nimport { buildRecipe } from \"./recipe\";\n\nexport function buildGsap(ctx: CompileContext): BrandPackage {\n const canvas = ctx.colors[\"just-black\"] ?? ctx.colors.canvas ?? \"#0e100f\";\n const cream = ctx.colors[\"surface-cream\"] ?? ctx.colors[\"cream-surface\"] ?? \"#fffce1\";\n const muted = ctx.colors[\"surface-50\"] ?? \"#7c7c6f\";\n const hairline = ctx.colors[\"surface-25\"] ?? \"#42433d\";\n const nested = ctx.colors[\"off-black\"] ?? ctx.colors[\"nested-panel\"] ?? \"#191919\";\n const green = ctx.colors[\"shockingly-green\"] ?? \"#0ae448\";\n // DESIGN: do NOT promote shockingly-green to filled primary CTA\n ctx.warnings.push(\n \"GSAP: shockingly-green is accent/link only — buttonDefault=outline (no solid green fill).\",\n );\n\n const buttonDefault: ButtonDefaultStyle = ctx.recipeHints.buttonDefault ?? \"gradient-stroke\";\n\n const brand: BrandPackage = {\n id: \"gsap\",\n name: \"GSAP\",\n darkDefault: true,\n version: \"1.0.0\",\n semantic: {\n // Primary for *links/accents* — filled solid CTAs are disabled by recipe\n background: tryHexToHsl(canvas, \"150 8% 6%\"),\n foreground: tryHexToHsl(cream, \"54 100% 94%\"),\n card: tryHexToHsl(nested, \"0 0% 10%\"),\n cardForeground: tryHexToHsl(cream, \"54 100% 94%\"),\n popover: tryHexToHsl(nested, \"0 0% 10%\"),\n popoverForeground: tryHexToHsl(cream, \"54 100% 94%\"),\n primary: tryHexToHsl(green, \"136 91% 47%\"),\n primaryForeground: tryHexToHsl(canvas, \"150 8% 6%\"),\n secondary: tryHexToHsl(hairline, \"60 5% 25%\"),\n secondaryForeground: tryHexToHsl(cream, \"54 100% 94%\"),\n muted: tryHexToHsl(nested, \"0 0% 10%\"),\n mutedForeground: tryHexToHsl(muted, \"60 6% 46%\"),\n accent: tryHexToHsl(hairline, \"60 5% 25%\"),\n accentForeground: tryHexToHsl(green, \"136 91% 47%\"),\n destructive: tryHexToHsl(ctx.colors[\"lipstick-pink\"] ?? \"#f100cb\", \"310 100% 47%\"),\n destructiveForeground: tryHexToHsl(cream, \"54 100% 94%\"),\n border: tryHexToHsl(hairline, \"60 5% 25%\"),\n input: tryHexToHsl(hairline, \"60 5% 25%\"),\n ring: tryHexToHsl(green, \"136 91% 47%\"),\n info: tryHexToHsl(ctx.colors.blue ?? \"#00bae2\", \"191 100% 44%\"),\n infoForeground: tryHexToHsl(canvas, \"150 8% 6%\"),\n success: tryHexToHsl(green, \"136 91% 47%\"),\n successForeground: tryHexToHsl(canvas, \"150 8% 6%\"),\n },\n recipe: buildRecipe({\n buttonDefault,\n radii: {\n button: ctx.recipeHints.radii?.button ?? leafHex(ctx.radius, [\"full\"]) ?? \"100px\",\n card: leafHex(ctx.radius, [\"lg\"]) ?? \"8px\",\n },\n elevationPreset: ctx.recipeHints.elevationPreset ?? \"none\",\n density: (ctx.recipeHints.density ?? \"comfortable\") satisfies Density,\n outlineBorder: cream,\n primaryStrokeGradient: \"linear-gradient(114.41deg, #0ae448 20.74%, #abff84 65.5%)\",\n }),\n // Performs. This is the one language where motion is the message, so the\n // ramp is long enough to be watched and the spring is allowed to overshoot\n // well past its resting state.\n motion: {\n easeOut: \"cubic-bezier(0.22, 1, 0.36, 1)\",\n easeInOut: \"cubic-bezier(0.65, 0, 0.35, 1)\",\n easeSpring: \"cubic-bezier(0.68, -0.55, 0.265, 1.55)\",\n micro: 120,\n flow: 250,\n reveal: 400,\n cinematic: 700,\n },\n // Room for the performance to land — more air than the product-chrome trio.\n spacing: {\n xs: \"0.5rem\",\n sm: \"0.875rem\",\n md: \"1.25rem\",\n lg: \"1.75rem\",\n xl: \"2.5rem\",\n \"2xl\": \"3.5rem\",\n },\n typography: {\n fontSans: `'Mori', 'Inter Tight', 'DM Sans', ui-sans-serif, system-ui, sans-serif`,\n fontDisplay: `'Mori', 'Inter Tight', ui-sans-serif, system-ui, sans-serif`,\n headingWeight: 600,\n faces: [\n {\n family: \"Mori\",\n // Placeholder — Create Center replaces with tenant-uploaded WOFF2\n src: [{ url: \"/brand-assets/mori-regular.woff2\", format: \"woff2\" }],\n weight: 400,\n display: \"swap\",\n },\n {\n family: \"Mori\",\n src: [{ url: \"/brand-assets/mori-semibold.woff2\", format: \"woff2\" }],\n weight: 600,\n display: \"swap\",\n },\n ],\n },\n extensions: {\n categories: {\n gsap: green,\n scroll: ctx.colors.pink ?? \"#fec5fb\",\n svg: ctx.colors.orangey ?? \"#ff8709\",\n text: ctx.colors.lilac ?? \"#9d95ff\",\n ui: ctx.colors.blue ?? \"#00bae2\",\n other: ctx.colors[\"light-green\"] ?? \"#abff84\",\n },\n displaySizePx: 224,\n sourceUrl: typeof ctx.refero.url === \"string\" ? ctx.refero.url : \"https://gsap.com\",\n notes: [\n \"Outline-first product controls; category ctx.colors are marketing extensions.\",\n \"Replace typography.faces[].src with Create Center hosted ctx.font URLs.\",\n ],\n },\n };\n return brand;\n}\n","/**\n * linear design-language compile preset (stress fixture).\n * Dual-mode: dark void default + light monochrome paper (acid-lime CTA both modes).\n */\nimport { tryHexToHsl } from \"../hex-to-hsl\";\nimport type { BrandPackage, BrandSemanticColors } from \"../types\";\nimport type { CompileContext } from \"./context\";\nimport { buildRecipe } from \"./recipe\";\n\nfunction linearDarkSemantic(\n voidC: string,\n carbon: string,\n graphite: string,\n ash: string,\n paper: string,\n lime: string,\n coral: string,\n pulse: string,\n colors: Record<string, string>,\n): BrandSemanticColors {\n return {\n background: tryHexToHsl(voidC, \"210 11% 4%\"),\n foreground: tryHexToHsl(paper, \"0 0% 100%\"),\n card: tryHexToHsl(carbon, \"210 6% 6%\"),\n cardForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n popover: tryHexToHsl(colors.obsidian ?? \"#161718\", \"210 5% 9%\"),\n popoverForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n primary: tryHexToHsl(lime, \"66 89% 54%\"),\n primaryForeground: tryHexToHsl(voidC, \"210 11% 4%\"),\n secondary: tryHexToHsl(graphite, \"220 7% 15%\"),\n secondaryForeground: tryHexToHsl(colors.mist ?? \"#d0d6e0\", \"220 20% 85%\"),\n muted: tryHexToHsl(colors.obsidian ?? \"#161718\", \"210 5% 9%\"),\n mutedForeground: tryHexToHsl(ash, \"220 5% 41%\"),\n accent: tryHexToHsl(graphite, \"220 7% 15%\"),\n accentForeground: tryHexToHsl(lime, \"66 89% 54%\"),\n destructive: tryHexToHsl(coral, \"0 79% 63%\"),\n destructiveForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n border: tryHexToHsl(graphite, \"220 7% 15%\"),\n input: tryHexToHsl(graphite, \"220 7% 15%\"),\n ring: tryHexToHsl(lime, \"66 89% 54%\"),\n success: tryHexToHsl(pulse, \"136 61% 40%\"),\n successForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n info: tryHexToHsl(colors[\"signal-teal\"] ?? \"#02b8cc\", \"187 98% 40%\"),\n infoForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n };\n}\n\n/** Light shell — paper canvas, same acid-lime CTA, graphite chrome. */\nfunction linearLightSemantic(\n voidC: string,\n ash: string,\n paper: string,\n lime: string,\n coral: string,\n pulse: string,\n colors: Record<string, string>,\n): BrandSemanticColors {\n return {\n background: \"0 0% 100%\",\n foreground: tryHexToHsl(voidC, \"210 11% 4%\"),\n card: \"0 0% 98%\",\n cardForeground: tryHexToHsl(voidC, \"210 11% 4%\"),\n popover: \"0 0% 100%\",\n popoverForeground: tryHexToHsl(voidC, \"210 11% 4%\"),\n primary: tryHexToHsl(lime, \"66 89% 54%\"),\n primaryForeground: tryHexToHsl(voidC, \"210 11% 4%\"),\n secondary: \"220 14% 96%\",\n secondaryForeground: tryHexToHsl(voidC, \"210 11% 4%\"),\n muted: \"220 14% 96%\",\n mutedForeground: tryHexToHsl(ash, \"220 5% 41%\"),\n accent: \"220 14% 96%\",\n accentForeground: tryHexToHsl(voidC, \"210 11% 4%\"),\n destructive: tryHexToHsl(coral, \"0 79% 63%\"),\n destructiveForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n border: \"220 13% 91%\",\n input: \"0 0% 100%\",\n ring: tryHexToHsl(lime, \"66 89% 54%\"),\n success: tryHexToHsl(pulse, \"136 61% 40%\"),\n successForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n info: tryHexToHsl(colors[\"signal-teal\"] ?? \"#02b8cc\", \"187 98% 40%\"),\n infoForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n };\n}\n\nexport function buildLinear(ctx: CompileContext): BrandPackage {\n const voidC = ctx.colors.void ?? ctx.colors[\"just-black\"] ?? \"#08090a\";\n const carbon = ctx.colors.carbon ?? \"#0f1011\";\n const graphite = ctx.colors.graphite ?? \"#23252a\";\n const ash = ctx.colors.ash ?? \"#62666d\";\n const paper = ctx.colors.paper ?? \"#ffffff\";\n const lime = ctx.colors[\"acid-lime\"] ?? \"#e4f222\";\n const coral = ctx.colors[\"coral-red\"] ?? \"#eb5757\";\n const pulse = ctx.colors[\"pulse-green\"] ?? \"#27a644\";\n\n const dark = linearDarkSemantic(\n voidC,\n carbon,\n graphite,\n ash,\n paper,\n lime,\n coral,\n pulse,\n ctx.colors,\n );\n const light = linearLightSemantic(voidC, ash, paper, lime, coral, pulse, ctx.colors);\n\n const brand: BrandPackage = {\n id: \"linear\",\n name: \"Linear\",\n darkDefault: true,\n version: \"1.0.0\",\n semantic: dark,\n modes: {\n dark: { semantic: dark },\n light: { semantic: light },\n },\n recipe: buildRecipe({\n buttonDefault: \"solid\",\n radii: { button: \"6px\", card: \"12px\" },\n elevationPreset: \"soft\",\n density: \"compact\",\n }),\n // Resolves before the eye asks it to. Linear's interfaces answer on the\n // frame you click; the expo-out curve spends its whole budget decelerating,\n // which is what makes a 140ms move read as instant rather than abrupt. No\n // spring — nothing in this language overshoots.\n motion: {\n easeOut: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n easeInOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n micro: 80,\n flow: 140,\n reveal: 200,\n cinematic: 320,\n },\n // Sits close to the content it chrome — the densest of the seven.\n spacing: {\n xs: \"0.375rem\",\n sm: \"0.5rem\",\n md: \"0.75rem\",\n lg: \"1rem\",\n xl: \"1.5rem\",\n \"2xl\": \"2rem\",\n },\n typography: {\n fontSans: `'Inter Variable', 'Inter', ui-sans-serif, system-ui, sans-serif`,\n fontMono: `'Berkeley Mono', 'JetBrains Mono', ui-monospace, monospace`,\n headingWeight: 510,\n faces: [\n {\n family: \"Inter Variable\",\n src: [\n {\n url: \"https://cdn.jsdelivr.net/fontsource/fonts/inter:vf@latest/latin-wght-normal.woff2\",\n format: \"woff2\",\n },\n ],\n weight: \"100 900\",\n display: \"swap\",\n },\n ],\n },\n extensions: {\n sourceUrl: typeof ctx.refero.url === \"string\" ? ctx.refero.url : \"https://linear.app\",\n notes: [\"Dual-mode: dark void default + light paper; acid-lime solid CTA in both modes.\"],\n },\n };\n return brand;\n}\n","/**\n * notion design-language compile preset (stress fixture).\n */\nimport { leafHex } from \"../compile-helpers\";\nimport { tryHexToHsl } from \"../hex-to-hsl\";\nimport type { BrandPackage } from \"../types\";\nimport type { CompileContext } from \"./context\";\nimport { buildRecipe } from \"./recipe\";\n\nexport function buildNotion(ctx: CompileContext): BrandPackage {\n const paper = ctx.colors[\"paper-warmth\"] ?? \"#f6f5f4\";\n const white = ctx.colors[\"pure-white\"] ?? \"#ffffff\";\n const ink = ctx.colors[\"ink-black\"] ?? \"#000000\";\n const charcoal = ctx.colors.charcoal ?? \"#111111\";\n const stone = ctx.colors.stone ?? \"#757575\";\n const graphite = ctx.colors.graphite ?? \"#615d59\";\n const blue = ctx.colors[\"notion-blue\"] ?? \"#0075de\";\n const sky = ctx.colors[\"sky-tint\"] ?? \"#e6f3fe\";\n const marigold = ctx.colors.marigold ?? \"#ffb110\";\n const coral = ctx.colors.coral ?? \"#f64932\";\n const midnight = ctx.colors[\"midnight-ink\"] ?? \"#02093a\";\n const signal = ctx.colors[\"signal-blue\"] ?? \"#097fe8\";\n\n ctx.warnings.push(\n \"Notion: notion-blue is the only filled CTA; marigold/coral/midnight are decorative card washes (never default action).\",\n );\n ctx.warnings.push(\n \"Notion: content cards use 1px hairline + elev=none; soft shadows only for sticky nav / product mockups (raised slot).\",\n );\n\n const brand: BrandPackage = {\n id: \"notion\",\n name: \"Notion\",\n darkDefault: false,\n version: \"1.0.0\",\n roles: {\n canvas: tryHexToHsl(paper, \"30 9% 96%\"),\n canvasForeground: tryHexToHsl(ink, \"0 0% 0%\"),\n surface: tryHexToHsl(white, \"0 0% 100%\"),\n surfaceForeground: tryHexToHsl(ink, \"0 0% 0%\"),\n action: tryHexToHsl(blue, \"208 100% 44%\"),\n actionForeground: tryHexToHsl(white, \"0 0% 100%\"),\n // Logo / wordmark / ink hierarchy — not blue CTA\n brand: tryHexToHsl(ink, \"0 0% 0%\"),\n brandForeground: tryHexToHsl(white, \"0 0% 100%\"),\n // Ghost CTA wash\n quiet: tryHexToHsl(sky, \"206 90% 95%\"),\n quietForeground: tryHexToHsl(blue, \"208 100% 44%\"),\n muted: tryHexToHsl(sky, \"206 90% 95%\"),\n mutedForeground: tryHexToHsl(stone, \"0 0% 46%\"),\n // Approx hairline rgba(0,0,0,0.08) on warm paper\n border: \"30 5% 88%\",\n input: tryHexToHsl(white, \"0 0% 100%\"),\n ring: tryHexToHsl(blue, \"208 100% 44%\"),\n destructive: tryHexToHsl(coral, \"6 91% 58%\"),\n destructiveForeground: tryHexToHsl(white, \"0 0% 100%\"),\n warning: tryHexToHsl(marigold, \"40 100% 53%\"),\n warningForeground: tryHexToHsl(ink, \"0 0% 0%\"),\n info: tryHexToHsl(signal, \"207 93% 47%\"),\n infoForeground: tryHexToHsl(white, \"0 0% 100%\"),\n },\n semantic: {\n background: tryHexToHsl(paper, \"30 9% 96%\"),\n foreground: tryHexToHsl(ink, \"0 0% 0%\"),\n card: tryHexToHsl(white, \"0 0% 100%\"),\n cardForeground: tryHexToHsl(ink, \"0 0% 0%\"),\n popover: tryHexToHsl(white, \"0 0% 100%\"),\n popoverForeground: tryHexToHsl(ink, \"0 0% 0%\"),\n primary: tryHexToHsl(blue, \"208 100% 44%\"),\n primaryForeground: tryHexToHsl(white, \"0 0% 100%\"),\n secondary: tryHexToHsl(sky, \"206 90% 95%\"),\n secondaryForeground: tryHexToHsl(blue, \"208 100% 44%\"),\n muted: tryHexToHsl(sky, \"206 90% 95%\"),\n mutedForeground: tryHexToHsl(stone, \"0 0% 46%\"),\n accent: tryHexToHsl(sky, \"206 90% 95%\"),\n accentForeground: tryHexToHsl(blue, \"208 100% 44%\"),\n destructive: tryHexToHsl(coral, \"6 91% 58%\"),\n destructiveForeground: tryHexToHsl(white, \"0 0% 100%\"),\n border: \"30 5% 88%\",\n input: tryHexToHsl(white, \"0 0% 100%\"),\n ring: tryHexToHsl(blue, \"208 100% 44%\"),\n warning: tryHexToHsl(marigold, \"40 100% 53%\"),\n warningForeground: tryHexToHsl(ink, \"0 0% 0%\"),\n info: tryHexToHsl(signal, \"207 93% 47%\"),\n infoForeground: tryHexToHsl(white, \"0 0% 100%\"),\n },\n recipe: buildRecipe({\n buttonDefault: ctx.recipeHints.buttonDefault ?? \"solid\",\n radii: {\n button:\n ctx.recipeHints.radii?.button ??\n leafHex(ctx.radius, [\"buttons\"]) ??\n leafHex(ctx.radius, [\"lg\"]) ??\n \"8px\",\n card:\n ctx.recipeHints.radii?.card ??\n leafHex(ctx.radius, [\"cards\"]) ??\n leafHex(ctx.radius, [\"xl\"]) ??\n \"12px\",\n badge: leafHex(ctx.radius, [\"pills\"]) ?? leafHex(ctx.radius, [\"full\"]) ?? \"9999px\",\n input: leafHex(ctx.radius, [\"buttons\"]) ?? leafHex(ctx.radius, [\"lg\"]) ?? \"8px\",\n },\n elevationPreset: ctx.recipeHints.elevationPreset ?? \"none\",\n density: ctx.recipeHints.density ?? \"comfortable\",\n badgeDefault: \"muted\",\n outlineBorder: ink,\n // Sticky nav soft shadow lives in raised; cards stay flat\n elevationTokens: {\n card: \"0 0 #0000\",\n control: \"0 0 #0000\",\n raised: \"0px 0.7px 1.462px 0px rgb(0 0 0 / 0.015), 0px 3px 9px 0px rgb(0 0 0 / 0.03)\",\n },\n }),\n // Settles rather than snaps. A document surface is read, not operated, so\n // motion here is slow enough to follow with the eye and never competes with\n // the text it is moving.\n motion: {\n easeOut: \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\",\n easeInOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n micro: 120,\n flow: 200,\n reveal: 280,\n cinematic: 460,\n },\n // Editorial — a document wants margin, not chrome density.\n spacing: {\n xs: \"0.625rem\",\n sm: \"1rem\",\n md: \"1.5rem\",\n lg: \"2rem\",\n xl: \"2.75rem\",\n \"2xl\": \"3.75rem\",\n },\n typography: {\n fontSans: `'NotionInter', 'Inter', ui-sans-serif, system-ui, sans-serif`,\n fontDisplay: `'NotionInter', 'Inter', ui-sans-serif, system-ui, sans-serif`,\n headingWeight: 700,\n faces: [\n {\n family: \"NotionInter\",\n src: [\n {\n url: \"https://cdn.jsdelivr.net/fontsource/fonts/inter:vf@latest/latin-wght-normal.woff2\",\n format: \"woff2\",\n },\n ],\n weight: \"100 900\",\n display: \"swap\",\n },\n {\n family: \"Lyon Text\",\n src: [{ url: \"/brand-assets/lyon-text-regular.woff2\", format: \"woff2\" }],\n weight: 400,\n display: \"swap\",\n },\n ],\n },\n extensions: {\n categories: {\n brand: ink,\n action: blue,\n ghost: sky,\n marigold,\n coral,\n midnight,\n charcoal,\n graphite,\n },\n decorative: {\n marigold,\n coral,\n saffron: ctx.colors.saffron ?? \"#e89d01\",\n \"sky-wash\": ctx.colors[\"sky-wash\"] ?? \"#62aef0\",\n midnight,\n },\n sourceUrl: typeof ctx.refero.url === \"string\" ? ctx.refero.url : \"https://www.notion.com\",\n notes: [\n \"roles.action = Notion Blue (only filled CTA). Accent hues are decorative card washes.\",\n \"roles.brand = Ink Black (logo / wordmark / text hierarchy via alpha).\",\n \"Canvas = Paper Warmth; cards = Pure White — never invert.\",\n \"Card elev=none + hairline border; sticky nav soft shadow → elevation raised slot.\",\n \"Buttons 8px, cards 12px, pills 9999px.\",\n \"Lyon Text is editorial accent only — not product chrome UI.\",\n ],\n },\n };\n return brand;\n}\n","/**\n * raycast design-language compile preset (stress fixture).\n */\nimport { tryHexToHsl } from \"../hex-to-hsl\";\nimport type { BrandPackage } from \"../types\";\nimport type { CompileContext } from \"./context\";\nimport { buildRecipe } from \"./recipe\";\n\nexport function buildRaycast(ctx: CompileContext): BrandPackage {\n const canvas = ctx.colors[\"void-black\"] ?? ctx.colors.canvas ?? \"#040506\";\n const ink = ctx.colors.ink ?? ctx.colors.card ?? \"#07080a\";\n const obsidian = ctx.colors.obsidian ?? ctx.colors.recessed ?? \"#111214\";\n const graphite = ctx.colors.graphite ?? ctx.colors.badge ?? \"#1b1c1e\";\n const smoke = ctx.colors.smoke ?? \"#6a6b6c\";\n const ash = ctx.colors.ash ?? \"#9c9c9d\";\n const mist = ctx.colors.mist ?? \"#e6e6e6\";\n const iron = ctx.colors.iron ?? \"#454647\";\n const slate = ctx.colors.slate ?? \"#2f3031\";\n const paper = ctx.colors[\"pure-white\"] ?? \"#ffffff\";\n const coral = ctx.colors[\"coral-pulse\"] ?? \"#ff6363\";\n const success = ctx.colors[\"success-green\"] ?? \"#59d499\";\n const info = ctx.colors[\"info-blue\"] ?? \"#56c2ff\";\n\n ctx.warnings.push(\n \"Raycast: coral-pulse is brand mark only — primary CTA is Mist/Iron neutral solid.\",\n );\n\n const brand: BrandPackage = {\n id: \"raycast\",\n name: \"Raycast\",\n darkDefault: true,\n version: \"1.0.0\",\n semantic: {\n background: tryHexToHsl(canvas, \"210 20% 2%\"),\n foreground: tryHexToHsl(paper, \"0 0% 100%\"),\n card: tryHexToHsl(ink, \"220 18% 3%\"),\n cardForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n popover: tryHexToHsl(ink, \"220 18% 3%\"),\n popoverForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n // Filled CTA = Mist on dark (not coral)\n primary: tryHexToHsl(mist, \"0 0% 90%\"),\n primaryForeground: tryHexToHsl(iron, \"210 1% 27%\"),\n secondary: tryHexToHsl(graphite, \"220 4% 11%\"),\n secondaryForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n muted: tryHexToHsl(obsidian, \"220 6% 7%\"),\n mutedForeground: tryHexToHsl(smoke, \"240 1% 42%\"),\n // Coral as accent for brand-adjacent UI (badges that opt-in to accent)\n accent: tryHexToHsl(coral, \"0 100% 69%\"),\n accentForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n destructive: \"0 72% 51%\",\n destructiveForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n border: tryHexToHsl(slate, \"210 2% 19%\"),\n input: tryHexToHsl(obsidian, \"220 6% 7%\"),\n ring: tryHexToHsl(ash, \"240 1% 61%\"),\n success: tryHexToHsl(success, \"150 58% 59%\"),\n successForeground: tryHexToHsl(canvas, \"210 20% 2%\"),\n info: tryHexToHsl(info, \"200 100% 67%\"),\n infoForeground: tryHexToHsl(canvas, \"210 20% 2%\"),\n },\n recipe: buildRecipe({\n buttonDefault: \"solid\",\n radii: {\n button: ctx.recipeHints.radii?.button ?? \"8px\",\n card: \"16px\",\n badge: \"6px\",\n input: \"8px\",\n },\n elevationPreset: ctx.recipeHints.elevationPreset ?? \"key\",\n density: ctx.recipeHints.density ?? \"comfortable\",\n badgeDefault: \"muted\",\n }),\n // Native-feeling: quick, with a small overshoot on things that appear. The\n // spring is the point — a launcher should feel like it was already there.\n motion: {\n easeOut: \"cubic-bezier(0.16, 1, 0.3, 1)\",\n easeInOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n easeSpring: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n micro: 90,\n flow: 160,\n reveal: 220,\n cinematic: 340,\n },\n // Command-palette density — compact, but not as tight as Linear.\n spacing: {\n xs: \"0.375rem\",\n sm: \"0.5rem\",\n md: \"0.75rem\",\n lg: \"1rem\",\n xl: \"1.375rem\",\n \"2xl\": \"2rem\",\n },\n typography: {\n fontSans: `'Inter', ui-sans-serif, system-ui, -apple-system, sans-serif`,\n fontMono: `'Geist Mono', 'GeistMono', ui-monospace, Menlo, monospace`,\n fontDisplay: `'Inter', ui-sans-serif, system-ui, sans-serif`,\n headingWeight: 400,\n faces: [\n {\n family: \"Inter\",\n src: [\n {\n url: \"https://cdn.jsdelivr.net/fontsource/fonts/inter:vf@latest/latin-wght-normal.woff2\",\n format: \"woff2\",\n },\n ],\n weight: \"100 900\",\n display: \"swap\",\n },\n ],\n },\n extensions: {\n categories: {\n brand: coral,\n ember: ctx.colors[\"ember-hush\"] ?? \"#452324\",\n sky: ctx.colors[\"electric-sky\"] ?? \"#63a1ff\",\n },\n sourceUrl: typeof ctx.refero.url === \"string\" ? ctx.refero.url : \"https://raycast.com\",\n notes: [\n \"Primary CTA = Mist fill + Iron text (neutral solid).\",\n \"Coral Pulse is brand mark only — do not use for general product chrome CTAs.\",\n \"Cards use elevation=key (keyboard-key inset shadow stack).\",\n ],\n },\n };\n return brand;\n}\n","/**\n * stripe design-language compile preset (stress fixture).\n */\nimport { tryHexToHsl } from \"../hex-to-hsl\";\nimport type { BrandPackage } from \"../types\";\nimport type { CompileContext } from \"./context\";\nimport { buildRecipe } from \"./recipe\";\n\nexport function buildStripe(ctx: CompileContext): BrandPackage {\n const white = ctx.colors[\"pure-white\"] ?? \"#ffffff\";\n const mist = ctx.colors.mist ?? \"#f8fafd\";\n const frost = ctx.colors.frost ?? \"#e5edf5\";\n const midnight = ctx.colors[\"midnight-ink\"] ?? \"#061b31\";\n const slate = ctx.colors.slate ?? \"#64748d\";\n const steel = ctx.colors.steel ?? \"#50617a\";\n const indigo = ctx.colors[\"indigo-ink\"] ?? \"#533afd\";\n const indigoHover = ctx.colors[\"indigo-hover\"] ?? \"#7389ff\";\n const lavender = ctx.colors[\"lavender-border\"] ?? \"#b9b9f9\";\n const periwinkle = ctx.colors[\"periwinkle-wash\"] ?? \"#e8e9ff\";\n const deep = ctx.colors[\"deep-violet\"] ?? \"#182659\";\n const smoke = ctx.colors.smoke ?? \"#839bc8\";\n\n ctx.warnings.push(\n \"Stripe: indigo-ink is action CTA only; midnight-ink is brand-mark/wordmark (never default CTA fill).\",\n );\n ctx.warnings.push(\n \"Stripe: elevation=none — depth via white→mist→frost tints + 1px frost rules, never box-shadow.\",\n );\n\n const brand: BrandPackage = {\n id: \"stripe\",\n name: \"Stripe\",\n darkDefault: false,\n version: \"1.0.0\",\n roles: {\n canvas: tryHexToHsl(white, \"0 0% 100%\"),\n canvasForeground: tryHexToHsl(midnight, \"208 78% 11%\"),\n surface: tryHexToHsl(white, \"0 0% 100%\"),\n surfaceForeground: tryHexToHsl(midnight, \"208 78% 11%\"),\n action: tryHexToHsl(indigo, \"248 98% 61%\"),\n actionForeground: tryHexToHsl(white, \"0 0% 100%\"),\n brand: tryHexToHsl(midnight, \"208 78% 11%\"),\n brandForeground: tryHexToHsl(white, \"0 0% 100%\"),\n quiet: tryHexToHsl(periwinkle, \"238 100% 95%\"),\n quietForeground: tryHexToHsl(indigo, \"248 98% 61%\"),\n muted: tryHexToHsl(mist, \"210 56% 98%\"),\n mutedForeground: tryHexToHsl(slate, \"215 16% 47%\"),\n border: tryHexToHsl(frost, \"210 36% 93%\"),\n input: tryHexToHsl(white, \"0 0% 100%\"),\n ring: tryHexToHsl(indigo, \"248 98% 61%\"),\n destructive: \"0 72% 51%\",\n destructiveForeground: tryHexToHsl(white, \"0 0% 100%\"),\n info: tryHexToHsl(indigoHover, \"230 100% 73%\"),\n infoForeground: tryHexToHsl(midnight, \"208 78% 11%\"),\n },\n semantic: {\n background: tryHexToHsl(white, \"0 0% 100%\"),\n foreground: tryHexToHsl(midnight, \"208 78% 11%\"),\n card: tryHexToHsl(white, \"0 0% 100%\"),\n cardForeground: tryHexToHsl(midnight, \"208 78% 11%\"),\n popover: tryHexToHsl(white, \"0 0% 100%\"),\n popoverForeground: tryHexToHsl(midnight, \"208 78% 11%\"),\n primary: tryHexToHsl(indigo, \"248 98% 61%\"),\n primaryForeground: tryHexToHsl(white, \"0 0% 100%\"),\n secondary: tryHexToHsl(periwinkle, \"238 100% 95%\"),\n secondaryForeground: tryHexToHsl(indigo, \"248 98% 61%\"),\n muted: tryHexToHsl(mist, \"210 56% 98%\"),\n mutedForeground: tryHexToHsl(slate, \"215 16% 47%\"),\n accent: tryHexToHsl(indigo, \"248 98% 61%\"),\n accentForeground: tryHexToHsl(white, \"0 0% 100%\"),\n destructive: \"0 72% 51%\",\n destructiveForeground: tryHexToHsl(white, \"0 0% 100%\"),\n border: tryHexToHsl(frost, \"210 36% 93%\"),\n input: tryHexToHsl(white, \"0 0% 100%\"),\n ring: tryHexToHsl(indigo, \"248 98% 61%\"),\n info: tryHexToHsl(indigoHover, \"230 100% 73%\"),\n infoForeground: tryHexToHsl(midnight, \"208 78% 11%\"),\n },\n recipe: buildRecipe({\n buttonDefault: ctx.recipeHints.buttonDefault ?? \"solid\",\n radii: {\n button: ctx.recipeHints.radii?.button ?? \"4px\",\n card: \"4px\",\n badge: \"9999px\",\n input: \"4px\",\n },\n elevationPreset: ctx.recipeHints.elevationPreset ?? \"none\",\n density: ctx.recipeHints.density ?? \"comfortable\",\n badgeDefault: \"muted\",\n // Ghost outline companion uses lavender hairline, not carbon\n outlineBorder: lavender,\n }),\n // Deliberate and even. Stripe's motion never draws attention to itself;\n // the curve is symmetric so a panel leaves the way it arrived.\n motion: {\n easeOut: \"cubic-bezier(0.215, 0.61, 0.355, 1)\",\n easeInOut: \"cubic-bezier(0.645, 0.045, 0.355, 1)\",\n micro: 100,\n flow: 180,\n reveal: 260,\n cinematic: 400,\n },\n // Clean commerce chrome — a touch more generous than the app-shell trio.\n spacing: {\n xs: \"0.5rem\",\n sm: \"0.75rem\",\n md: \"1.125rem\",\n lg: \"1.75rem\",\n xl: \"2.25rem\",\n \"2xl\": \"3.25rem\",\n },\n typography: {\n fontSans: `'sohne-var', 'Inter Tight', 'Inter', ui-sans-serif, system-ui, sans-serif`,\n fontDisplay: `'sohne-var', 'Inter Tight', ui-sans-serif, system-ui, sans-serif`,\n // Whisper weight is the Stripe signature (even at 56px display)\n headingWeight: 300,\n faces: [\n {\n family: \"sohne-var\",\n // Placeholder — Create Center / licensed Söhne Variable\n src: [{ url: \"/brand-assets/sohne-var.woff2\", format: \"woff2\" }],\n weight: \"300 400\",\n display: \"swap\",\n },\n ],\n },\n extensions: {\n categories: {\n brand: midnight,\n action: indigo,\n link: indigo,\n hover: indigoHover,\n ghostBorder: lavender,\n wash: periwinkle,\n deep: deep,\n smoke,\n steel,\n },\n decorative: {\n \"section-band\": mist,\n frost,\n },\n sourceUrl: typeof ctx.refero.url === \"string\" ? ctx.refero.url : \"https://stripe.com\",\n notes: [\n \"roles.action = Indigo Ink filled CTA; roles.brand = Midnight Ink wordmark.\",\n \"Elevation none — tint ladder + 1px frost rules; never box-shadow.\",\n \"Control ctx.radius 4px (not pill); tags may stay full-pill.\",\n \"Typography weight 300 is the product signature (Inter Tight substitute).\",\n \"Pair solid CTA with ghost outline (lavender border) as secondary.\",\n ],\n },\n };\n return brand;\n}\n","/**\n * vanta design-language compile preset (stress fixture).\n */\nimport { leafHex } from \"../compile-helpers\";\nimport { tryHexToHsl } from \"../hex-to-hsl\";\nimport type { BrandPackage } from \"../types\";\nimport type { CompileContext } from \"./context\";\nimport { buildRecipe } from \"./recipe\";\n\nexport function buildVanta(ctx: CompileContext): BrandPackage {\n const parchment = ctx.colors.parchment ?? ctx.colors[\"page-canvas\"] ?? \"#f7f8fa\";\n const paper = ctx.colors.paper ?? ctx.colors[\"card-surface\"] ?? \"#ffffff\";\n const carbon = ctx.colors.carbon ?? \"#181822\";\n const graphite = ctx.colors.graphite ?? \"#6d6e87\";\n const steel = ctx.colors.steel ?? \"#9e9fb7\";\n const ash = ctx.colors.ash ?? \"#dfdfe9\";\n const fog = ctx.colors.fog ?? \"#eaeaf1\";\n const lavender = ctx.colors[\"lavender-wash\"] ?? \"#ddd6ff\";\n const vivid = ctx.colors[\"vivid-violet\"] ?? \"#5e05c4\";\n const indigo = ctx.colors[\"indigo-ink\"] ?? \"#260048\";\n const mid = ctx.colors[\"mid-violet\"] ?? \"#8f47d5\";\n const amber = ctx.colors[\"amber-signal\"] ?? \"#ffbe0f\";\n\n ctx.warnings.push(\n \"Vanta: vivid-violet is action CTA only; indigo-ink is brand-mark/logo (never default CTA fill).\",\n );\n ctx.warnings.push(\"Vanta: elevation=none — cards use 1px carbon border, not box-shadow.\");\n\n const brand: BrandPackage = {\n id: \"vanta\",\n name: \"Vanta\",\n darkDefault: false,\n version: \"1.0.0\",\n roles: {\n canvas: tryHexToHsl(parchment, \"220 23% 97%\"),\n canvasForeground: tryHexToHsl(carbon, \"240 14% 11%\"),\n surface: tryHexToHsl(paper, \"0 0% 100%\"),\n surfaceForeground: tryHexToHsl(carbon, \"240 14% 11%\"),\n // Action = single saturated CTA moment\n action: tryHexToHsl(vivid, \"268 95% 39%\"),\n actionForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n // Brand mark = logo / wordmark / decorative ink (≠ action)\n brand: tryHexToHsl(indigo, \"273 100% 14%\"),\n brandForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n // Quiet = lavender informational chips (not violet fill)\n quiet: tryHexToHsl(lavender, \"249 100% 92%\"),\n quietForeground: tryHexToHsl(indigo, \"273 100% 14%\"),\n muted: tryHexToHsl(fog, \"240 14% 93%\"),\n mutedForeground: tryHexToHsl(graphite, \"237 11% 48%\"),\n border: tryHexToHsl(carbon, \"240 14% 11%\"),\n input: tryHexToHsl(paper, \"0 0% 100%\"),\n ring: tryHexToHsl(vivid, \"268 95% 39%\"),\n destructive: \"0 72% 51%\",\n destructiveForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n warning: tryHexToHsl(amber, \"44 100% 53%\"),\n warningForeground: tryHexToHsl(carbon, \"240 14% 11%\"),\n info: tryHexToHsl(mid, \"269 63% 56%\"),\n infoForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n },\n // semantic filled by normalize from roles\n semantic: {\n background: tryHexToHsl(parchment, \"220 23% 97%\"),\n foreground: tryHexToHsl(carbon, \"240 14% 11%\"),\n card: tryHexToHsl(paper, \"0 0% 100%\"),\n cardForeground: tryHexToHsl(carbon, \"240 14% 11%\"),\n popover: tryHexToHsl(paper, \"0 0% 100%\"),\n popoverForeground: tryHexToHsl(carbon, \"240 14% 11%\"),\n primary: tryHexToHsl(vivid, \"268 95% 39%\"),\n primaryForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n secondary: tryHexToHsl(lavender, \"249 100% 92%\"),\n secondaryForeground: tryHexToHsl(indigo, \"273 100% 14%\"),\n muted: tryHexToHsl(fog, \"240 14% 93%\"),\n mutedForeground: tryHexToHsl(graphite, \"237 11% 48%\"),\n accent: tryHexToHsl(indigo, \"273 100% 14%\"),\n accentForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n destructive: \"0 72% 51%\",\n destructiveForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n border: tryHexToHsl(carbon, \"240 14% 11%\"),\n input: tryHexToHsl(paper, \"0 0% 100%\"),\n ring: tryHexToHsl(vivid, \"268 95% 39%\"),\n warning: tryHexToHsl(amber, \"44 100% 53%\"),\n warningForeground: tryHexToHsl(carbon, \"240 14% 11%\"),\n info: tryHexToHsl(mid, \"269 63% 56%\"),\n infoForeground: tryHexToHsl(paper, \"0 0% 100%\"),\n },\n recipe: buildRecipe({\n buttonDefault: ctx.recipeHints.buttonDefault ?? \"solid\",\n // Prefer structural ctx.radius tokens (full=pill, 2xl=cards) over free-text\n radii: {\n button:\n leafHex(ctx.radius, [\"buttons\"]) ??\n leafHex(ctx.radius, [\"full\"]) ??\n ctx.recipeHints.radii?.button ??\n \"999px\",\n card: leafHex(ctx.radius, [\"cards\"]) ?? leafHex(ctx.radius, [\"2xl\"]) ?? \"16px\",\n badge:\n leafHex(ctx.radius, [\"badges\"]) ??\n leafHex(ctx.radius, [\"full\"]) ??\n ctx.recipeHints.radii?.button ??\n \"999px\",\n input:\n leafHex(ctx.radius, [\"inputs\"]) ??\n leafHex(ctx.radius, [\"full\"]) ??\n ctx.recipeHints.radii?.button ??\n \"999px\",\n },\n elevationPreset: ctx.recipeHints.elevationPreset ?? \"none\",\n density: ctx.recipeHints.density ?? \"comfortable\",\n // Informational chips = lavender wash + indigo (quiet), not violet CTA fill\n badgeDefault: \"muted\",\n outlineBorder: carbon,\n }),\n // Atmospheric. Backdrops drift rather than move, so even the micro step is\n // slow and nothing snaps.\n motion: {\n easeOut: \"cubic-bezier(0.33, 1, 0.68, 1)\",\n easeInOut: \"cubic-bezier(0.37, 0, 0.63, 1)\",\n micro: 120,\n flow: 240,\n reveal: 380,\n cinematic: 620,\n },\n // The most spacious of the seven — serif editorial wants the most air.\n spacing: {\n xs: \"0.75rem\",\n sm: \"1.125rem\",\n md: \"1.75rem\",\n lg: \"2.5rem\",\n xl: \"3.5rem\",\n \"2xl\": \"5rem\",\n },\n typography: {\n fontSans: `'Inter Variable', 'Inter', ui-sans-serif, system-ui, sans-serif`,\n fontDisplay: `'Reckless', 'Source Serif 4', 'Lora', ui-serif, Georgia, serif`,\n headingWeight: 500,\n faces: [\n {\n family: \"Inter Variable\",\n src: [\n {\n url: \"https://cdn.jsdelivr.net/fontsource/fonts/inter:vf@latest/latin-wght-normal.woff2\",\n format: \"woff2\",\n },\n ],\n weight: \"100 900\",\n display: \"swap\",\n },\n {\n family: \"Reckless\",\n // Placeholder — Create Center / tenant hosts the licensed Reckless cut\n src: [{ url: \"/brand-assets/reckless-regular.woff2\", format: \"woff2\" }],\n weight: 400,\n display: \"swap\",\n },\n {\n family: \"Reckless\",\n src: [{ url: \"/brand-assets/reckless-medium.woff2\", format: \"woff2\" }],\n weight: 500,\n display: \"swap\",\n },\n ],\n },\n extensions: {\n categories: {\n brand: indigo,\n action: vivid,\n link: mid,\n heroWash: lavender,\n warning: amber,\n steel,\n ash,\n },\n decorative: {\n \"hero-wash\": lavender,\n },\n sourceUrl: typeof ctx.refero.url === \"string\" ? ctx.refero.url : \"https://www.vanta.com\",\n notes: [\n \"roles.action = Vivid Violet (filled CTA only).\",\n \"roles.brand = Indigo Ink (logo / wordmark / brand-mark).\",\n \"Elevation none — 1px carbon borders frame cards; no drop-shadow.\",\n \"Full-pill controls (999px); cards 16px.\",\n \"UI = Inter Variable; marketing display = Reckless serif.\",\n \"Lavender wash is marketing hero surface (decorative), not product chrome fill.\",\n ],\n },\n };\n return brand;\n}\n","/**\n * vercel design-language compile preset (stress fixture).\n * Dual-mode: light monochrome + dark monochrome (orthogonal to ThemeProvider class).\n */\nimport { tryHexToHsl } from \"../hex-to-hsl\";\nimport type { BrandPackage, BrandSemanticColors } from \"../types\";\nimport type { CompileContext } from \"./context\";\nimport { buildRecipe } from \"./recipe\";\n\nfunction vercelLightSemantic(\n paper: string,\n pure: string,\n hairline: string,\n charcoal: string,\n stone: string,\n obsidian: string,\n terminal: string,\n): BrandSemanticColors {\n return {\n background: tryHexToHsl(paper, \"0 0% 98%\"),\n foreground: tryHexToHsl(obsidian, \"0 0% 9%\"),\n card: tryHexToHsl(pure, \"0 0% 100%\"),\n cardForeground: tryHexToHsl(obsidian, \"0 0% 9%\"),\n popover: tryHexToHsl(pure, \"0 0% 100%\"),\n popoverForeground: tryHexToHsl(obsidian, \"0 0% 9%\"),\n // Filled black button\n primary: tryHexToHsl(obsidian, \"0 0% 9%\"),\n primaryForeground: tryHexToHsl(pure, \"0 0% 100%\"),\n secondary: tryHexToHsl(hairline, \"0 0% 92%\"),\n secondaryForeground: tryHexToHsl(charcoal, \"0 0% 30%\"),\n muted: tryHexToHsl(hairline, \"0 0% 92%\"),\n mutedForeground: tryHexToHsl(stone, \"0 0% 40%\"),\n accent: tryHexToHsl(hairline, \"0 0% 92%\"),\n accentForeground: tryHexToHsl(obsidian, \"0 0% 9%\"),\n destructive: \"0 72% 51%\",\n destructiveForeground: tryHexToHsl(pure, \"0 0% 100%\"),\n border: tryHexToHsl(hairline, \"0 0% 92%\"),\n input: tryHexToHsl(pure, \"0 0% 100%\"),\n ring: tryHexToHsl(obsidian, \"0 0% 9%\"),\n success: tryHexToHsl(terminal, \"133 49% 32%\"),\n successForeground: tryHexToHsl(pure, \"0 0% 100%\"),\n info: tryHexToHsl(charcoal, \"0 0% 30%\"),\n infoForeground: tryHexToHsl(pure, \"0 0% 100%\"),\n };\n}\n\n/** Dark shell monochrome — white CTA on carbon, hairline borders. */\nfunction vercelDarkSemantic(terminal: string): BrandSemanticColors {\n return {\n background: \"0 0% 0%\",\n foreground: \"0 0% 93%\",\n card: \"0 0% 4%\",\n cardForeground: \"0 0% 93%\",\n popover: \"0 0% 4%\",\n popoverForeground: \"0 0% 93%\",\n primary: \"0 0% 100%\",\n primaryForeground: \"0 0% 0%\",\n secondary: \"0 0% 12%\",\n secondaryForeground: \"0 0% 93%\",\n muted: \"0 0% 12%\",\n mutedForeground: \"0 0% 63%\",\n accent: \"0 0% 12%\",\n accentForeground: \"0 0% 93%\",\n destructive: \"0 72% 51%\",\n destructiveForeground: \"0 0% 100%\",\n border: \"0 0% 16%\",\n input: \"0 0% 4%\",\n ring: \"0 0% 100%\",\n success: tryHexToHsl(terminal, \"133 49% 40%\"),\n successForeground: \"0 0% 100%\",\n info: \"0 0% 70%\",\n infoForeground: \"0 0% 0%\",\n };\n}\n\nexport function buildVercel(ctx: CompileContext): BrandPackage {\n const paper = ctx.colors[\"paper-white\"] ?? ctx.colors[\"page-canvas\"] ?? \"#fafafa\";\n const pure = ctx.colors[\"pure-white\"] ?? ctx.colors[\"card-surface\"] ?? \"#ffffff\";\n const hairline = ctx.colors.hairline ?? \"#ebebeb\";\n const charcoal = ctx.colors.charcoal ?? \"#4d4d4d\";\n const stone = ctx.colors.stone ?? \"#666666\";\n const obsidian = ctx.colors.obsidian ?? ctx.colors[\"inverted-surface\"] ?? \"#171717\";\n const carbon = ctx.colors.carbon ?? \"#000000\";\n const terminal = ctx.colors[\"terminal-green\"] ?? \"#297a3a\";\n\n ctx.warnings.push(\n \"Vercel: monochrome dual-mode — no chromatic CTA; Terminal Green is support only.\",\n );\n\n const light = vercelLightSemantic(paper, pure, hairline, charcoal, stone, obsidian, terminal);\n const dark = vercelDarkSemantic(terminal);\n\n const brand: BrandPackage = {\n id: \"vercel\",\n name: \"Vercel\",\n darkDefault: false,\n version: \"1.0.0\",\n semantic: light,\n modes: {\n light: { semantic: light },\n dark: { semantic: dark },\n },\n recipe: buildRecipe({\n buttonDefault: \"solid\",\n radii: {\n button: ctx.recipeHints.radii?.button ?? \"6px\",\n card: \"6px\",\n badge: \"6px\",\n input: \"6px\",\n },\n elevationPreset:\n ctx.recipeHints.elevationPreset === \"key\"\n ? \"hairline\"\n : (ctx.recipeHints.elevationPreset ?? \"hairline\"),\n density: ctx.recipeHints.density ?? \"compact\",\n badgeDefault: \"muted\",\n cardShadow: \"rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px\",\n outlineBorder: hairline,\n }),\n // Neutral and quick. Geist treats motion as feedback rather than\n // expression, so the ramp is short and the curve is the platform default.\n motion: {\n easeOut: \"cubic-bezier(0, 0, 0.2, 1)\",\n easeInOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n micro: 100,\n flow: 150,\n reveal: 200,\n cinematic: 300,\n },\n // Geist's default rhythm — the middle of the seven, same figures as the\n // shared fallback rail so a page with no language selected still matches it.\n spacing: {\n xs: \"0.5rem\",\n sm: \"0.75rem\",\n md: \"1rem\",\n lg: \"1.5rem\",\n xl: \"2rem\",\n \"2xl\": \"3rem\",\n },\n typography: {\n fontSans: `'Geist Sans', 'Geist', ui-sans-serif, system-ui, sans-serif`,\n fontMono: `'Geist Mono', ui-monospace, Menlo, monospace`,\n fontDisplay: `'Geist Sans', 'Geist', ui-sans-serif, system-ui, sans-serif`,\n headingWeight: 450,\n faces: [\n {\n family: \"Geist Sans\",\n src: [\n {\n url: \"https://cdn.jsdelivr.net/fontsource/fonts/geist-sans:vf@latest/latin-wght-normal.woff2\",\n format: \"woff2\",\n },\n ],\n weight: \"100 900\",\n display: \"swap\",\n },\n ],\n },\n extensions: {\n categories: {\n carbon: carbon,\n terminal: terminal,\n },\n sourceUrl: typeof ctx.refero.url === \"string\" ? ctx.refero.url : \"https://vercel.com\",\n notes: [\n \"Dual-mode monochrome — light: Obsidian CTA; dark: white CTA on carbon.\",\n \"Elevation is hairline double-ring, never drop-shadow.\",\n \"Spectrum/solar gradients are marketing-only decorative (not product chrome).\",\n ],\n },\n };\n return brand;\n}\n","import type { PresetId } from \"../compile-helpers\";\nimport type { BrandPackage } from \"../types\";\nimport type { CompileContext } from \"./context\";\nimport { buildGeneric } from \"./generic\";\nimport { buildGsap } from \"./gsap\";\nimport { buildLinear } from \"./linear\";\nimport { buildNotion } from \"./notion\";\nimport { buildRaycast } from \"./raycast\";\nimport { buildStripe } from \"./stripe\";\nimport { buildVanta } from \"./vanta\";\nimport { buildVercel } from \"./vercel\";\n\nexport type { CompileContext } from \"./context\";\n\nconst PRESET_BUILDERS: Record<\n Exclude<PresetId, \"generic\">,\n (ctx: CompileContext) => BrandPackage\n> = {\n linear: buildLinear,\n gsap: buildGsap,\n raycast: buildRaycast,\n vercel: buildVercel,\n notion: buildNotion,\n stripe: buildStripe,\n vanta: buildVanta,\n};\n\nexport function buildPresetBrand(preset: PresetId, ctx: CompileContext): BrandPackage {\n if (preset === \"generic\") return buildGeneric(ctx);\n return PRESET_BUILDERS[preset](ctx);\n}\n","/**\n * Compile Refero DTCG tokens.json (+ optional DESIGN.md) into a Brand Package.\n *\n * Structure:\n * compile-helpers.ts — detectPreset, color/font leaf helpers\n * presets/* — named fixture builders (linear…notion) + generic\n * compile-refero.ts — orchestration only\n *\n * Named fixtures are stress-test carriers (not mood presets). Prefer extending\n * the generic path + DESIGN.md inference over adding one-off hacks.\n */\n\nimport { collectColors, collectSurfaces, detectPreset, type Json } from \"./compile-helpers\";\nimport { emitBrandCss } from \"./emit-css\";\nimport { inferRecipeFromDesignMd } from \"./infer-recipe\";\nimport { normalizeBrandPackage } from \"./normalize\";\nimport { buildPresetBrand } from \"./presets\";\nimport type { BrandPackage, CompileResult } from \"./types\";\n\nfunction finish(brand: BrandPackage, warnings: string[]): CompileResult {\n const b = normalizeBrandPackage(brand);\n return { brand: b, css: emitBrandCss(b), warnings };\n}\n\n/**\n * Compile a Refero-style DTCG tokens.json (+ optional DESIGN.md text) into a Brand Package.\n * Known fixtures get opinionated recipes; generic brands get solid CTAs.\n */\nexport function compileReferoTokens(input: {\n tokens: Json;\n id?: string;\n name?: string;\n designMd?: string;\n}): CompileResult {\n const warnings: string[] = [];\n const color = (input.tokens.color ?? {}) as Json;\n const surface = (input.tokens.surface ?? {}) as Json;\n const font = (input.tokens.font ?? {}) as Json;\n const radius = (input.tokens.radius ?? {}) as Json;\n const ext = (input.tokens.$extensions ?? {}) as Json;\n const refero = (ext[\"com.refero.extraction\"] ?? {}) as Json;\n\n const colors = { ...collectColors(color), ...collectSurfaces(surface) };\n const siteName =\n (typeof refero.siteName === \"string\" && refero.siteName) || input.name || \"Custom Brand\";\n const id =\n input.id ||\n siteName\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\") ||\n \"custom\";\n\n const preset = detectPreset(id, colors);\n const recipeHints = inferRecipeFromDesignMd(input.designMd ?? \"\");\n\n const brand = buildPresetBrand(preset, {\n colors,\n font,\n radius,\n refero,\n recipeHints,\n warnings,\n id,\n siteName,\n });\n\n return finish(brand, warnings);\n}\n","import { normalizeBrandPackage } from \"./normalize\";\nimport type { BrandPackage, BrandSpacing, ButtonDefaultStyle } from \"./types\";\n\nconst BUTTON_STYLES = new Set<ButtonDefaultStyle>([\"solid\", \"outline\", \"gradient-stroke\"]);\n\nexport interface ValidationResult {\n ok: boolean;\n errors: string[];\n warnings: string[];\n}\n\n/** Validate carrier contract before Create Center publish. */\nexport function validateBrandPackage(brand: unknown): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!brand || typeof brand !== \"object\") {\n return { ok: false, errors: [\"Brand package must be an object\"], warnings };\n }\n let b: BrandPackage;\n try {\n b = normalizeBrandPackage(brand as BrandPackage);\n } catch (e) {\n return { ok: false, errors: [`normalize failed: ${(e as Error).message}`], warnings };\n }\n\n if (!b.id || typeof b.id !== \"string\") errors.push(\"id is required\");\n if (!b.name || typeof b.name !== \"string\") errors.push(\"name is required\");\n if (!b.version || typeof b.version !== \"string\") errors.push(\"version is required\");\n\n if (!b.roles) {\n errors.push(\"roles missing after normalize\");\n } else {\n for (const key of [\"canvas\", \"action\", \"actionForeground\", \"border\"] as const) {\n if (!b.roles[key]) errors.push(`roles.${key} is required`);\n }\n if (b.roles.brand && b.roles.brand === b.roles.action) {\n warnings.push(\n \"roles.brand equals roles.action — brand mark is not separated from CTA (often intentional)\",\n );\n }\n }\n\n if (!b.semantic || typeof b.semantic !== \"object\") {\n errors.push(\"semantic is required\");\n } else {\n for (const key of [\n \"background\",\n \"foreground\",\n \"primary\",\n \"primaryForeground\",\n \"border\",\n \"ring\",\n ] as const) {\n if (!b.semantic[key]) errors.push(`semantic.${key} is required`);\n }\n // Contract: primary must track action\n if (b.roles && b.semantic.primary !== b.roles.action) {\n errors.push(\"semantic.primary must equal roles.action (CTA bridge)\");\n }\n }\n\n if (!b.recipe || typeof b.recipe !== \"object\") {\n errors.push(\"recipe is required\");\n } else {\n if (!BUTTON_STYLES.has(b.recipe.buttonDefault as ButtonDefaultStyle)) {\n errors.push(`recipe.buttonDefault must be one of ${[...BUTTON_STYLES].join(\", \")}`);\n }\n if (!b.recipe.radii?.button) errors.push(\"recipe.radii.button is required\");\n if (!b.recipe.radii?.card) errors.push(\"recipe.radii.card is required\");\n if (!b.recipe.elevationTokens?.card) {\n errors.push(\"recipe.elevationTokens.card is required (free CSS box-shadow)\");\n }\n if (b.recipe.buttonDefault === \"gradient-stroke\" && !b.recipe.primaryStrokeGradient) {\n warnings.push(\n \"gradient-stroke without primaryStrokeGradient — border falls back to solid primary\",\n );\n }\n }\n if (!b.typography?.fontSans) errors.push(\"typography.fontSans is required\");\n\n if (b.typography?.faces) {\n b.typography.faces.forEach((face, i) => {\n if (!face.family) errors.push(`typography.faces[${i}].family is required`);\n if (!face.src?.length) errors.push(`typography.faces[${i}].src must be non-empty`);\n else {\n for (const [j, src] of face.src.entries()) {\n if (!src.url) errors.push(`typography.faces[${i}].src[${j}].url is required`);\n }\n }\n });\n }\n\n // An elevation value that reads --shadow-* is circular: the theme block maps\n // --shadow-md to var(--elevation-md), so a skin writing\n // `--elevation-md: var(--shadow-md, …)` puts the property in a cycle. CSS\n // then treats it as guaranteed-invalid — the fallback does NOT rescue it,\n // because a fallback only applies to an undefined variable, not a cyclic one.\n // linear shipped exactly this, written back when the skin set the alias\n // rather than the source, and it read as a plausible \"use the Tailwind\n // default\" until the names were corrected.\n for (const [key, value] of Object.entries(b.recipe?.elevationTokens ?? {})) {\n if (typeof value === \"string\" && /var\\(\\s*--(?:shadow|elevation)-/.test(value)) {\n errors.push(\n `recipe.elevationTokens.${key} references a shadow/elevation variable — ` +\n \"that is a cycle once the skin sets the source. Inline the value.\",\n );\n }\n }\n\n if (b.motion) {\n // Durations are milliseconds, and the emitter appends the unit. A package\n // that wrote \"200ms\" here would emit `200msms` — invalid, so the whole\n // declaration is dropped and that language silently keeps the shared timing.\n for (const key of [\"micro\", \"flow\", \"reveal\", \"cinematic\"] as const) {\n const value = b.motion[key];\n if (value == null) continue;\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n errors.push(`motion.${key} must be a non-negative number of milliseconds`);\n } else if (value > 2000) {\n warnings.push(`motion.${key} is ${value}ms — long enough to read as a stall`);\n }\n }\n for (const key of [\"easeOut\", \"easeInOut\", \"easeSpring\"] as const) {\n const value = b.motion[key];\n if (value == null) continue;\n if (typeof value !== \"string\" || !value.trim()) {\n errors.push(`motion.${key} must be a non-empty timing function`);\n }\n }\n const { micro, flow, reveal, cinematic } = b.motion;\n const ramp = [micro, flow, reveal, cinematic].filter((v): v is number => typeof v === \"number\");\n if (ramp.length > 1 && ramp.some((v, i) => i > 0 && v < (ramp[i - 1] ?? v))) {\n warnings.push(\n \"motion durations are not ascending — micro should be the shortest and cinematic the longest\",\n );\n }\n }\n\n if (b.spacing) {\n // Values are full CSS lengths, and the emitter writes them verbatim into a\n // custom property — a bare number (\"16\") is a syntactically valid\n // declaration that Tailwind's spacing utilities then read as unitless and\n // silently treat as 0, so the language quietly loses that step rather than\n // erroring.\n const UNIT = /^-?\\d*\\.?\\d+(rem|em|px|%|vh|vw|ch)$/;\n const order: Array<[keyof BrandSpacing, number]> = [];\n for (const key of [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"2xl\"] as const) {\n const value = b.spacing[key];\n if (value == null) continue;\n if (typeof value !== \"string\" || !UNIT.test(value.trim())) {\n errors.push(\n `spacing.${key} must be a CSS length with a unit (e.g. \"1rem\"), got ${JSON.stringify(value)}`,\n );\n continue;\n }\n order.push([key, Number.parseFloat(value)]);\n }\n if (order.length > 1 && order.some(([, v], i) => i > 0 && v < (order[i - 1]?.[1] ?? v))) {\n warnings.push(\n \"spacing steps are not ascending — xs should be the smallest and 2xl the largest\",\n );\n }\n }\n\n if (\n b.recipe?.buttonDefault === \"solid\" &&\n b.semantic?.primary === b.semantic?.primaryForeground\n ) {\n warnings.push(\"primary and primaryForeground are identical — check contrast\");\n }\n\n return { ok: errors.length === 0, errors, warnings };\n}\n"],"mappings":"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","names":[]}