{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "theme",
  "type": "registry:style",
  "title": "Interlace Theme",
  "description": "@interlace/ui — brand tokens, shadcn-token bridge, and animation keyframes consumed by every primitive.",
  "dependencies": [
    "tw-animate-css"
  ],
  "registryDependencies": [],
  "files": [
    {
      "path": "registry/interlace-ui/styles/tokens.css",
      "target": "styles/interlace/tokens.css",
      "type": "registry:style",
      "content": "/*\n * @interlace/ui — animations and motion tokens used by primitives + decorative components.\n * Import once in the consuming app's global stylesheet:\n *   @import \"@interlace/ui/styles/tokens.css\";\n *\n * Design-system colors are intentionally not defined here — fumadocs sites\n * inherit them from `fumadocs-ui/css/<theme>.css` and overlay brand overrides\n * in their own global.css.\n */\n\n@theme inline {\n  /* MagicUI: shimmer-button */\n  --animate-shimmer-slide: shimmer-slide var(--speed) ease-in-out infinite\n    alternate;\n  --animate-spin-around: spin-around calc(var(--speed) * 2) infinite linear;\n\n  /* MagicUI: animated-gradient-text */\n  --animate-gradient: gradient 8s linear infinite;\n\n  /* MagicUI: marquee */\n  --animate-marquee: marquee var(--duration) infinite linear;\n  --animate-marquee-vertical: marquee-vertical var(--duration) linear infinite;\n\n  /* Aceternity: background-gradient-animation */\n  --animate-first: moveVertical 30s ease infinite;\n  --animate-second: moveInCircle 20s reverse infinite;\n  --animate-third: moveInCircle 40s linear infinite;\n  --animate-fourth: moveHorizontal 40s ease infinite;\n  --animate-fifth: moveInCircle 20s ease infinite;\n\n  /* Primitives: accordion */\n  --animate-accordion-down: accordion-down 0.2s ease-out;\n  --animate-accordion-up: accordion-up 0.2s ease-out;\n\n  @keyframes shimmer-slide {\n    to {\n      transform: translate(calc(100cqw - 100%), 0);\n    }\n  }\n  @keyframes spin-around {\n    0% {\n      transform: translateZ(0) rotate(0);\n    }\n    15%,\n    35% {\n      transform: translateZ(0) rotate(90deg);\n    }\n    65%,\n    85% {\n      transform: translateZ(0) rotate(270deg);\n    }\n    100% {\n      transform: translateZ(0) rotate(360deg);\n    }\n  }\n  @keyframes gradient {\n    to {\n      background-position: var(--bg-size, 300%) 0;\n    }\n  }\n  @keyframes marquee {\n    from {\n      transform: translateX(0);\n    }\n    to {\n      transform: translateX(calc(-100% - var(--gap)));\n    }\n  }\n  @keyframes marquee-vertical {\n    from {\n      transform: translateY(0);\n    }\n    to {\n      transform: translateY(calc(-100% - var(--gap)));\n    }\n  }\n  @keyframes moveHorizontal {\n    0% {\n      transform: translateX(-50%) translateY(-10%);\n    }\n    50% {\n      transform: translateX(50%) translateY(10%);\n    }\n    100% {\n      transform: translateX(-50%) translateY(-10%);\n    }\n  }\n  @keyframes moveInCircle {\n    0% {\n      transform: rotate(0deg);\n    }\n    50% {\n      transform: rotate(180deg);\n    }\n    100% {\n      transform: rotate(360deg);\n    }\n  }\n  @keyframes moveVertical {\n    0% {\n      transform: translateY(-50%);\n    }\n    50% {\n      transform: translateY(50%);\n    }\n    100% {\n      transform: translateY(-50%);\n    }\n  }\n  @keyframes accordion-down {\n    from {\n      height: 0;\n    }\n    to {\n      height: var(--radix-accordion-content-height);\n    }\n  }\n  @keyframes accordion-up {\n    from {\n      height: var(--radix-accordion-content-height);\n    }\n    to {\n      height: 0;\n    }\n  }\n}\n\n/* Border Beam — pure CSS animation, used by @interlace/ui/magicui/border-beam */\n@keyframes border-beam {\n  0% {\n    offset-distance: var(--border-beam-initial, 0%);\n  }\n  100% {\n    offset-distance: calc(100% + var(--border-beam-initial, 0%));\n  }\n}\n\n.animate-border-beam {\n  animation: border-beam var(--border-beam-duration, 6s) linear infinite;\n  animation-direction: var(--border-beam-direction, normal);\n}\n\n/*\n * Accessibility — respect prefers-reduced-motion.\n * Industry-canon practice (MUI, Vercel, Linear, Stripe, GitHub all do this).\n * Disables every CSS-driven animation registered above when the user has\n * motion-sensitivity preferences. JS-driven motion (motion/react, canvas)\n * is gated per-component via the useReducedMotion hook.\n */\n@media (prefers-reduced-motion: reduce) {\n  .animate-shimmer-slide,\n  .animate-spin-around,\n  .animate-gradient,\n  .animate-marquee,\n  .animate-marquee-vertical,\n  .animate-first,\n  .animate-second,\n  .animate-third,\n  .animate-fourth,\n  .animate-fifth,\n  .animate-border-beam,\n  .animate-accordion-down,\n  .animate-accordion-up,\n  .animate-fade-in-up,\n  .animate-slide-in-left,\n  .animate-scale-in {\n    animation: none !important;\n    transition: none !important;\n  }\n}\n"
    },
    {
      "path": "registry/interlace-ui/styles/theme.css",
      "target": "styles/interlace/theme.css",
      "type": "registry:style",
      "content": "/*\n * @interlace/ui — fumadocs-flavored theme overrides used by every docs site\n * built on top of @interlace/ui + fumadocs-ui.\n *\n * Import once in the consuming app's global stylesheet, AFTER\n * `fumadocs-ui/css/<theme>.css` and `fumadocs-ui/css/preset.css`:\n *\n *   @import \"fumadocs-ui/css/neutral.css\";\n *   @import \"fumadocs-ui/css/preset.css\";\n *   @import \"@interlace/ui/styles/theme.css\";\n *\n * What's in here, why each block exists:\n *\n *   1. shadcn-token bridge — @interlace/ui primitives (Card, DropdownMenu,\n *      Popover, …) use bare shadcn tokens (`bg-card`, `bg-popover`, `text-foreground`).\n *      Fumadocs ships the `--color-fd-*` family but NOT the unprefixed shadcn\n *      tokens. Without these aliases every shadcn-style class resolves to an\n *      undefined variable and renders unstyled (e.g. transparent dropdowns).\n *\n *   2. Shiki AAA boosts — the github-light / github-dark Shiki themes pass AA\n *      but a handful of muted tokens (comments, certain keywords) only reach\n *      ~5:1 on white/near-black. We darken/brighten those specific\n *      CSS-variable values so every token clears AAA (7:1).\n *\n *   3. Fumadocs TOC visual fix — single-line indicator over the\n *      staircase rail. App-agnostic; any fumadocs consumer wants this.\n *\n *   4. Remote-content styling — works with @interlace/ui/fumadocs/remote-markdown.\n *      Badge images inline, centered figure divs, image overflow.\n *\n *   5. Lightweight CSS animations — fade-in-up / slide-in-left / scale-in.\n *      Reduced-motion contract is already wired in tokens.css.\n *\n * Brand colors (purple primary, AAA on white) are app-specific and stay in\n * the app's global.css. Don't move them here.\n */\n\n/* ─────────────────────────────────────────────────────────────────\n * 1. shadcn-token bridge — maps shadcn-bare tokens to fumadocs sources.\n *    Light + dark inherit from `--color-fd-*` which the app overrides.\n * ──────────────────────────────────────────────────────────────── */\n:root {\n  --background: var(--color-fd-background);\n  --foreground: var(--color-fd-foreground);\n  --card: var(--color-fd-card);\n  --card-foreground: var(--color-fd-card-foreground);\n  --popover: var(--color-fd-popover);\n  --popover-foreground: var(--color-fd-popover-foreground);\n  --muted: var(--color-fd-muted);\n  --muted-foreground: var(--color-fd-muted-foreground);\n  --accent: var(--color-fd-accent);\n  --accent-foreground: var(--color-fd-accent-foreground);\n  --secondary: var(--color-fd-secondary);\n  --secondary-foreground: var(--color-fd-secondary-foreground);\n  --border: var(--color-fd-border);\n  --input: var(--color-fd-border);\n  --ring: var(--color-fd-ring);\n  --destructive: hsl(0, 72%, 38%);\n  --destructive-foreground: hsl(0, 0%, 100%);\n\n  /* Tailwind v4 @theme-side aliases so utilities like `bg-card`,\n     `border-border` resolve. Same value as above. */\n  --color-background: var(--color-fd-background);\n  --color-foreground: var(--color-fd-foreground);\n  --color-card: var(--color-fd-card);\n  --color-card-foreground: var(--color-fd-card-foreground);\n  --color-popover: var(--color-fd-popover);\n  --color-popover-foreground: var(--color-fd-popover-foreground);\n  --color-muted: var(--color-fd-muted);\n  --color-muted-foreground: var(--color-fd-muted-foreground);\n  --color-accent: var(--color-fd-accent);\n  --color-accent-foreground: var(--color-fd-accent-foreground);\n  --color-secondary: var(--color-fd-secondary);\n  --color-secondary-foreground: var(--color-fd-secondary-foreground);\n  --color-border: var(--color-fd-border);\n  --color-input: var(--color-fd-border);\n  --color-ring: var(--color-fd-ring);\n  --color-primary: var(--color-fd-primary);\n  --color-primary-foreground: var(--color-fd-primary-foreground);\n  --color-destructive: hsl(0, 72%, 38%);\n  --color-destructive-foreground: hsl(0, 0%, 100%);\n\n  /* shadcn chart palette — five distinct hues for series colors.\n     Light-mode values pass ≥4.5:1 contrast on `bg-card` (white).\n     Used by @/components/ui/chart `<ChartContainer>` + ChartConfig. */\n  --chart-1: oklch(0.55 0.22 264);\n  --chart-2: oklch(0.55 0.16 162);\n  --chart-3: oklch(0.55 0.16 36);\n  --chart-4: oklch(0.55 0.2 320);\n  --chart-5: oklch(0.55 0.16 90);\n  --color-chart-1: var(--chart-1);\n  --color-chart-2: var(--chart-2);\n  --color-chart-3: var(--chart-3);\n  --color-chart-4: var(--chart-4);\n  --color-chart-5: var(--chart-5);\n}\n\n.dark {\n  /* Dark-mode chart palette — lifted lightness so each series stays\n     ≥4.5:1 on `bg-card` (near-black). */\n  --chart-1: oklch(0.78 0.16 264);\n  --chart-2: oklch(0.78 0.14 162);\n  --chart-3: oklch(0.78 0.14 36);\n  --chart-4: oklch(0.78 0.16 320);\n  --chart-5: oklch(0.78 0.14 90);\n  --color-chart-1: var(--chart-1);\n  --color-chart-2: var(--chart-2);\n  --color-chart-3: var(--chart-3);\n  --color-chart-4: var(--chart-4);\n  --color-chart-5: var(--chart-5);\n}\n\n/* ─────────────────────────────────────────────────────────────────\n * 2. Shiki AAA boosts — github-light / github-dark themes.\n *    Boost muted comment + keyword colors past 7:1 contrast.\n * ──────────────────────────────────────────────────────────────── */\n.shiki span[style*=\"--shiki-light:#6E7781\"],\n.shiki span[style*=\"--shiki-light:#6e7781\"] {\n  --shiki-light: #424952 !important;\n}\n.shiki span[style*=\"--shiki-light:#CF222E\"],\n.shiki span[style*=\"--shiki-light:#cf222e\"] {\n  --shiki-light: #82071e !important;\n}\n.shiki span[style*=\"--shiki-light:#0550AE\"],\n.shiki span[style*=\"--shiki-light:#0550ae\"] {\n  --shiki-light: #033d8b !important;\n}\n.shiki span[style*=\"--shiki-light:#953800\"] {\n  --shiki-light: #6c2700 !important;\n}\n.shiki span[style*=\"--shiki-light:#8250DF\"],\n.shiki span[style*=\"--shiki-light:#8250df\"] {\n  --shiki-light: #5a31aa !important;\n}\n.shiki span[style*=\"--shiki-light:#0A3069\"] {\n  --shiki-light: #062350 !important;\n}\n\n/* DynamicCodeBlock (install snippets, fumadocs) ships a different Shiki\n   theme variant — match `--shiki-light: #XXXXXX` (with space) too. */\n.shiki span[style*=\"#6F42C1\"],\n.shiki span[style*=\"#6f42c1\"] {\n  --shiki-light: #5a2da3 !important;\n}\n.shiki span[style*=\"#005CC5\"],\n.shiki span[style*=\"#005cc5\"] {\n  --shiki-light: #003e8a !important;\n}\n.shiki span[style*=\"#032F62\"],\n.shiki span[style*=\"#032f62\"] {\n  --shiki-light: #021f42 !important;\n}\n.shiki span[style*=\"#D73A49\"],\n.shiki span[style*=\"#d73a49\"] {\n  --shiki-light: #971923 !important;\n}\n.shiki span[style*=\"#24292E\"],\n.shiki span[style*=\"#24292e\"] {\n  --shiki-light: #14171b !important;\n}\n\n/* Dark-mode tokens — brighten muted colors over near-black bg. */\n.shiki span[style*=\"#B392F0\"],\n.shiki span[style*=\"#b392f0\"] {\n  --shiki-dark: #d2b5ff !important;\n}\n.shiki span[style*=\"#9ECBFF\"],\n.shiki span[style*=\"#9ecbff\"] {\n  --shiki-dark: #c4e0ff !important;\n}\n.shiki span[style*=\"#F97583\"],\n.shiki span[style*=\"#f97583\"] {\n  --shiki-dark: #ffa3ad !important;\n}\n.shiki span[style*=\"--shiki-dark:#8B949E\"],\n.shiki span[style*=\"--shiki-dark:#8b949e\"] {\n  --shiki-dark: #b8c0c8 !important;\n}\n.shiki span[style*=\"--shiki-dark:#FF7B72\"],\n.shiki span[style*=\"--shiki-dark:#ff7b72\"] {\n  --shiki-dark: #ffa39d !important;\n}\n.shiki span[style*=\"--shiki-dark:#FFA657\"],\n.shiki span[style*=\"--shiki-dark:#ffa657\"] {\n  --shiki-dark: #ffc787 !important;\n}\n.shiki span[style*=\"--shiki-dark:#79C0FF\"],\n.shiki span[style*=\"--shiki-dark:#79c0ff\"] {\n  --shiki-dark: #a5d6ff !important;\n}\n\n/* ─────────────────────────────────────────────────────────────────\n * 3. Fumadocs TOC visual fix — clean single-line indicator over the\n *    staircase rail. The arbitrary-property utilities below are\n *    classes Tailwind v4 cannot generate from `text-(--fd-…)` shorthand.\n * ──────────────────────────────────────────────────────────────── */\n.h-\\(--fd-height\\) {\n  height: var(--fd-height);\n}\n.top-\\(--fd-top\\) {\n  top: var(--fd-top);\n}\n.transition-\\[top\\,height\\] {\n  transition-property: top, height !important;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important;\n  transition-duration: 150ms !important;\n}\n#nd-toc .bg-fd-primary {\n  transition-property: top, height !important;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important;\n  transition-duration: 150ms !important;\n}\n\n/* Hide gray rail segments and diagonal connectors — keep only the\n   purple sliding indicator. */\n#nd-toc .bg-fd-foreground\\/10 {\n  display: none !important;\n}\n#nd-toc svg line.stroke-fd-foreground\\/10,\n#nd-toc .stroke-fd-foreground\\/10 {\n  display: none !important;\n}\n\n/* Popover TOC item indentation by depth. */\n[data-toc-popover-content] a {\n  padding-inline-start: 14px !important;\n}\n[data-toc-popover-content] a[data-depth='3'] {\n  padding-inline-start: 26px !important;\n}\n[data-toc-popover-content] a[data-depth='4'],\n[data-toc-popover-content] a[data-depth='5'],\n[data-toc-popover-content] a[data-depth='6'] {\n  padding-inline-start: 36px !important;\n}\n\n@layer components {\n  /* Responsive TOC visibility:\n   *   xl+ (≥1280px): side TOC visible, popover TOC hidden\n   *   <xl: popover TOC visible, side TOC hidden\n   */\n  @media (min-width: 1280px) {\n    button[data-toc-popover-trigger],\n    div[data-toc-popover-content] {\n      display: none !important;\n    }\n  }\n  @media (max-width: 1279px) {\n    #nd-toc {\n      display: none !important;\n    }\n  }\n}\n\n/* ─────────────────────────────────────────────────────────────────\n * 4. Remote-content styling — `<RemoteMarkdown>` (README / changelog /\n *    rule-doc) classes from @interlace/ui/fumadocs/remote-markdown.\n * ──────────────────────────────────────────────────────────────── */\n.remote-readme a > img,\n.remote-changelog a > img,\n.remote-rule-doc a > img {\n  display: inline-block !important;\n  vertical-align: middle;\n  height: auto;\n}\n\n.remote-readme div[align='center'],\n.remote-changelog div[align='center'],\n.remote-rule-doc div[align='center'] {\n  text-align: center;\n  display: flex !important;\n  flex-wrap: wrap;\n  justify-content: center;\n  align-items: center;\n  gap: 0.35rem;\n  margin-bottom: 0.5rem;\n}\n\n.remote-readme div[align='center'] a,\n.remote-changelog div[align='center'] a,\n.remote-rule-doc div[align='center'] a {\n  display: inline-flex !important;\n  align-items: center;\n}\n\n.remote-readme img,\n.remote-changelog img,\n.remote-rule-doc img {\n  max-width: 100%;\n  height: auto;\n}\n\n/* ─────────────────────────────────────────────────────────────────\n * 5. Lightweight CSS animations — fade-in-up / slide-in-left / scale-in.\n *    Reduced-motion is handled in tokens.css (already imported).\n * ──────────────────────────────────────────────────────────────── */\n@keyframes fade-in-up {\n  from {\n    opacity: 0;\n    transform: translateY(20px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n@keyframes slide-in-left {\n  from {\n    opacity: 0;\n    transform: translateX(-20px);\n  }\n  to {\n    opacity: 1;\n    transform: translateX(0);\n  }\n}\n@keyframes scale-in {\n  from {\n    opacity: 0;\n    transform: scale(0.9);\n  }\n  to {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n\n.animate-fade-in-up {\n  animation: fade-in-up 0.5s ease-out both;\n}\n.animate-slide-in-left {\n  animation: slide-in-left 0.5s ease-out 0.3s both;\n}\n.animate-scale-in {\n  animation: scale-in 0.4s ease-out 0.2s both;\n}\n"
    },
    {
      "path": "registry/interlace-ui/styles/interlace-theme.css",
      "target": "styles/interlace/interlace-theme.css",
      "type": "registry:style",
      "content": "/*\n * @interlace/ui — canonical Interlace brand theme (light + dark).\n *\n * Import in the consuming app AFTER `theme.css` + `tokens.css`:\n *\n *   @import \"@interlace/ui/styles/tokens.css\";\n *   @import \"@interlace/ui/styles/theme.css\";\n *   @import \"@interlace/ui/styles/interlace-theme.css\";\n *\n * Why this file exists separately from theme.css:\n *\n *   - `theme.css` is the **bridge** layer — maps shadcn-bare tokens (`--card`,\n *     `--popover`) to whatever the surrounding framework exposes\n *     (`--color-fd-*` from fumadocs, in this project).\n *   - `interlace-theme.css` is the **brand** layer — concrete hex values that\n *     identify this product. App consumers who fork the brand can replace\n *     this file; the bridge layer (`theme.css`) stays.\n *\n * Contrast contract (WCAG 2.2 AA):\n *   - Body text on background: ≥ 4.5:1 (target: 7:1 AAA where possible)\n *   - Large text + UI controls on adjacent surface: ≥ 3:1\n *   - Focus ring on adjacent colors: ≥ 3:1 (WCAG 2.2 SC 2.4.13)\n *   - Verified at https://webaim.org/resources/contrastchecker/ — every\n *     primary/foreground pair below clears the floor for its mode.\n *\n * Source palette: Tailwind violet — violet-50 through violet-950.\n *   Light primary: violet-700 (#6d28d9) → 7.34:1 on white (AAA body)\n *   Dark primary:  violet-400 (#a78bfa) → 7.42:1 on near-black (AAA body)\n */\n\n/* ─────────────────────────────────────────────────────────────────\n *  LIGHT — default\n * ──────────────────────────────────────────────────────────────── */\n:root {\n  /* Brand */\n  --interlace-primary: #6d28d9;            /* violet-700 — AAA on white */\n  --interlace-primary-hover: #5b21b6;      /* violet-800 */\n  --interlace-primary-active: #4c1d95;     /* violet-900 */\n  --interlace-primary-foreground: #ffffff;\n  --interlace-primary-subtle: #ede9fe;     /* violet-100 — for tinted backgrounds */\n  --interlace-primary-subtle-foreground: #4c1d95;\n\n  /* Surface */\n  --interlace-background: #ffffff;\n  --interlace-foreground: #0a0a0f;         /* near-black, slight violet tint */\n  --interlace-card: #ffffff;\n  --interlace-card-foreground: #0a0a0f;\n  --interlace-popover: #ffffff;\n  --interlace-popover-foreground: #0a0a0f;\n  --interlace-muted: #f5f3fa;              /* violet-tinted neutral */\n  --interlace-muted-foreground: #6b6580;\n  --interlace-border: #e5e3ec;\n  --interlace-input: #e5e3ec;\n  --interlace-ring: var(--interlace-primary);\n\n  /* Accent */\n  --interlace-accent: #ede9fe;             /* violet-100 */\n  --interlace-accent-foreground: #4c1d95;  /* violet-900 — 9.31:1 on accent */\n\n  /* Secondary */\n  --interlace-secondary: #f1f0f6;\n  --interlace-secondary-foreground: #1a1825;\n\n  /* Destructive (Tailwind red-600) */\n  --interlace-destructive: #dc2626;\n  --interlace-destructive-foreground: #ffffff;\n\n  /* Success (Tailwind emerald-600) */\n  --interlace-success: #059669;\n  --interlace-success-foreground: #ffffff;\n\n  /* Warning (Tailwind amber-600) */\n  --interlace-warning: #d97706;\n  --interlace-warning-foreground: #ffffff;\n\n  /* Radii (8/12/16 — three-step scale) */\n  --interlace-radius-sm: 0.5rem;   /*  8px */\n  --interlace-radius-md: 0.75rem;  /* 12px */\n  --interlace-radius-lg: 1rem;     /* 16px */\n}\n\n/* ─────────────────────────────────────────────────────────────────\n *  DARK — class-based + data-attribute switch\n * ──────────────────────────────────────────────────────────────── */\n.dark,\n[data-theme='dark'] {\n  /* Brand — invert weight: 400 (lighter) on dark */\n  --interlace-primary: #a78bfa;            /* violet-400 — AAA on dark */\n  --interlace-primary-hover: #c4b5fd;      /* violet-300 */\n  --interlace-primary-active: #ddd6fe;     /* violet-200 */\n  --interlace-primary-foreground: #1e1b2e; /* near-black */\n  --interlace-primary-subtle: #2e1065;     /* violet-950 — for tinted backgrounds */\n  --interlace-primary-subtle-foreground: #ddd6fe;\n\n  /* Surface */\n  --interlace-background: #0a0a0f;\n  --interlace-foreground: #ededf2;\n  --interlace-card: #14131c;\n  --interlace-card-foreground: #ededf2;\n  --interlace-popover: #14131c;\n  --interlace-popover-foreground: #ededf2;\n  --interlace-muted: #14131c;\n  --interlace-muted-foreground: #a09cb3;\n  --interlace-border: #1f1d2b;\n  --interlace-input: #1f1d2b;\n  --interlace-ring: var(--interlace-primary);\n\n  /* Accent */\n  --interlace-accent: #2e1065;             /* violet-950 */\n  --interlace-accent-foreground: #ddd6fe;  /* violet-200 — 9.85:1 on accent */\n\n  /* Secondary */\n  --interlace-secondary: #1c1a26;\n  --interlace-secondary-foreground: #ededf2;\n\n  /* Destructive */\n  --interlace-destructive: #ef4444;        /* red-500 — lighter on dark */\n  --interlace-destructive-foreground: #0a0a0f; /* 6.6:1 on #ef4444 (was #1e1b2e at 4.45 — sub-AA) */\n\n  /* Success */\n  --interlace-success: #10b981;            /* emerald-500 */\n  --interlace-success-foreground: #1e1b2e;\n\n  /* Warning */\n  --interlace-warning: #f59e0b;            /* amber-500 */\n  --interlace-warning-foreground: #1e1b2e;\n}\n\n/* ─────────────────────────────────────────────────────────────────\n *  Bind brand tokens to the shadcn-bare names. Apps that want to\n *  override individual brand values can re-declare them after this\n *  import.\n * ──────────────────────────────────────────────────────────────── */\n:root,\n.dark,\n[data-theme='dark'] {\n  --primary: var(--interlace-primary);\n  --primary-foreground: var(--interlace-primary-foreground);\n  --background: var(--interlace-background);\n  --foreground: var(--interlace-foreground);\n  --card: var(--interlace-card);\n  --card-foreground: var(--interlace-card-foreground);\n  --popover: var(--interlace-popover);\n  --popover-foreground: var(--interlace-popover-foreground);\n  --muted: var(--interlace-muted);\n  --muted-foreground: var(--interlace-muted-foreground);\n  --accent: var(--interlace-accent);\n  --accent-foreground: var(--interlace-accent-foreground);\n  --secondary: var(--interlace-secondary);\n  --secondary-foreground: var(--interlace-secondary-foreground);\n  --border: var(--interlace-border);\n  --input: var(--interlace-input);\n  --ring: var(--interlace-ring);\n  --destructive: var(--interlace-destructive);\n  --destructive-foreground: var(--interlace-destructive-foreground);\n\n  /* Override fumadocs-prefixed tokens for AA contrast.\n   *\n   * Fumadocs `neutral.css` ships `--color-fd-muted-foreground: #737373`,\n   * which yields 4.34–4.46:1 contrast against the `bg-fd-card/40-50`\n   * surfaces our Section / SectionHeader stories render — just below\n   * the WCAG 2.2 AA 4.5:1 floor and gates Storybook a11y CI red.\n   *\n   * Rebinding to the brand muted-foreground (a darker purple-grey in\n   * light, lighter in dark) clears the threshold and keeps brand\n   * consistency between shadcn-styled and fumadocs-styled surfaces.\n   */\n  --color-fd-muted-foreground: var(--interlace-muted-foreground);\n}\n\n/* Register the shadcn-bare tokens as Tailwind v4 theme keys so utilities\n * like `bg-card`, `text-foreground`, `border-border`, `bg-primary` are\n * generated. `inline` preserves the `var()` reference, so the runtime\n * `.dark { --background: ... }` overrides above flow through to every\n * utility. Without this block, Tailwind v4 emits no `bg-card` rule\n * regardless of what `--card` resolves to on :root. */\n@theme inline {\n  --color-background: var(--background);\n  --color-foreground: var(--foreground);\n  --color-card: var(--card);\n  --color-card-foreground: var(--card-foreground);\n  --color-popover: var(--popover);\n  --color-popover-foreground: var(--popover-foreground);\n  --color-primary: var(--primary);\n  --color-primary-foreground: var(--primary-foreground);\n  --color-secondary: var(--secondary);\n  --color-secondary-foreground: var(--secondary-foreground);\n  --color-muted: var(--muted);\n  --color-muted-foreground: var(--muted-foreground);\n  --color-accent: var(--accent);\n  --color-accent-foreground: var(--accent-foreground);\n  --color-border: var(--border);\n  --color-input: var(--input);\n  --color-ring: var(--ring);\n  --color-destructive: var(--destructive);\n  --color-destructive-foreground: var(--destructive-foreground);\n}\n"
    }
  ]
}
