{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "tailwind",
  "title": "Tailwind v4 OKLCH tokens",
  "type": "registry:style",
  "files": [
    {
      "path": "packages/registry-react/bootstrap/tailwind/tailwind.css",
      "content": "@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&family=Anybody:wght@600;700;800&display=swap');\n@import 'tailwindcss';\n@import 'tw-animate-css';\n\n@custom-variant dark (&:is(.dark *));\n\n@theme inline {\n  --font-sans:\n    'DM Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n    'Noto Color Emoji';\n  --font-display: 'Anybody', 'DM Sans', ui-sans-serif, system-ui, sans-serif;\n  --font-mono:\n    'DM Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;\n  --radius-sm: var(--radius);\n  --radius-md: var(--radius);\n  --radius-lg: var(--radius);\n  --radius-xl: var(--radius);\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-destructive: var(--destructive);\n  --color-destructive-foreground: var(--destructive-foreground);\n  --color-success: var(--success);\n  --color-warning: var(--warning);\n  --color-info: var(--info);\n  --color-border: var(--border);\n  --color-input: var(--input);\n  --color-ring: var(--ring);\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  --color-sidebar: var(--sidebar);\n  --color-sidebar-foreground: var(--sidebar-foreground);\n  --color-sidebar-primary: var(--sidebar-primary);\n  --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n  --color-sidebar-accent: var(--sidebar-accent);\n  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n  --color-sidebar-border: var(--sidebar-border);\n  --color-sidebar-ring: var(--sidebar-ring);\n}\n\n:root {\n  /* Motion tokens — used across every component. Calibrated against Radix,\n     Material 3 and Sonner defaults. Override per component if needed. */\n  --ease-out: cubic-bezier(0, 0, 0.2, 1);\n  --ease-in: cubic-bezier(0.4, 0, 1, 1);\n  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);\n  --dur-fast: 120ms; /* hover, focus ring, color shifts */\n  --dur-base: 200ms; /* most state changes */\n  --dur-slow: 300ms; /* modal/sheet enter, tab pill slide */\n  --dur-page: 250ms; /* page transition */\n\n  /* Sage paper palette — warm OKLCH tokens with forest accent. */\n  --radius: 0.3rem;\n  --background: oklch(0.98 0.006 130);\n  --foreground: oklch(0.2 0.012 150);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0.2 0.012 150);\n  --popover: oklch(0.99 0.004 130);\n  --popover-foreground: oklch(0.2 0.012 150);\n  --primary: oklch(0.46 0.08 145);\n  --primary-foreground: oklch(0.98 0.006 130);\n  --secondary: oklch(0.94 0.012 130);\n  --secondary-foreground: oklch(0.24 0.014 150);\n  --muted: oklch(0.95 0.01 130);\n  --muted-foreground: oklch(0.48 0.014 150);\n  --accent: oklch(0.92 0.02 80);\n  --accent-foreground: oklch(0.24 0.014 150);\n  --destructive: oklch(0.55 0.2 28);\n  --destructive-foreground: oklch(0.985 0 0);\n  --border: oklch(0.88 0.014 135);\n  --input: oklch(0.88 0.014 135);\n  --ring: oklch(0.5 0.08 150);\n  /* Chart palette held as hex (not OKLCH) so ECharts' canvas renderer\n   * can hex-concat opacity (`color + '40'`) for gradient fills. Browsers\n   * keep `oklch(...)` strings unchanged through canvas.fillStyle and\n   * getComputedStyle, breaking those concat sites. Light mode: warm\n   * orange / teal / deep blue / amber / yellow. */\n  --chart-1: #e76e50;\n  --chart-2: #2a9d90;\n  --chart-3: #264653;\n  --chart-4: #e9c468;\n  --chart-5: #f4a261;\n\n  --sidebar: oklch(0.955 0.012 130);\n  --sidebar-foreground: oklch(0.2 0.012 150);\n  --sidebar-primary: oklch(0.46 0.08 145);\n  --sidebar-primary-foreground: oklch(0.98 0.006 130);\n  --sidebar-accent: oklch(0.92 0.02 80);\n  --sidebar-accent-foreground: oklch(0.24 0.014 150);\n  --sidebar-border: oklch(0.88 0.014 135);\n  --sidebar-ring: oklch(0.5 0.08 150);\n\n  /* App extensions (not part of shadcn) */\n  --success: oklch(0.55 0.18 145);\n  --warning: oklch(0.7 0.16 75);\n  --info: oklch(0.55 0.22 260);\n}\n\n.dark {\n  /* Sage paper palette — dark variant. */\n  --background: oklch(0.16 0.01 150);\n  --foreground: oklch(0.94 0.008 130);\n  --card: oklch(0.2 0.012 150);\n  --card-foreground: oklch(0.94 0.008 130);\n  --popover: oklch(0.2 0.012 150);\n  --popover-foreground: oklch(0.94 0.008 130);\n  --primary: oklch(0.72 0.1 145);\n  --primary-foreground: oklch(0.16 0.01 150);\n  --secondary: oklch(0.27 0.012 150);\n  --secondary-foreground: oklch(0.94 0.008 130);\n  --muted: oklch(0.26 0.012 150);\n  --muted-foreground: oklch(0.72 0.014 140);\n  --accent: oklch(0.3 0.018 80);\n  --accent-foreground: oklch(0.94 0.008 130);\n  --destructive: oklch(0.68 0.18 25);\n  --destructive-foreground: oklch(0.985 0 0);\n  --border: oklch(1 0 0 / 12%);\n  --input: oklch(1 0 0 / 14%);\n  --ring: oklch(0.6 0.1 145);\n  /* Dark mode chart palette — same warm earthy family as light,\n     lightened for visibility on dark backgrounds. */\n  --chart-1: #e8997a;\n  --chart-2: #5cbfb0;\n  --chart-3: #4a6b7a;\n  --chart-4: #f0d99a;\n  --chart-5: #f5b87a;\n\n  --sidebar: oklch(0.19 0.012 150);\n  --sidebar-foreground: oklch(0.94 0.008 130);\n  --sidebar-primary: oklch(0.72 0.1 145);\n  --sidebar-primary-foreground: oklch(0.16 0.01 150);\n  --sidebar-accent: oklch(0.3 0.018 80);\n  --sidebar-accent-foreground: oklch(0.94 0.008 130);\n  --sidebar-border: oklch(1 0 0 / 12%);\n  --sidebar-ring: oklch(0.6 0.1 145);\n\n  /* App extensions (not part of shadcn) */\n  --success: oklch(0.65 0.16 145);\n  --warning: oklch(0.78 0.17 75);\n  --info: oklch(0.65 0.18 260);\n}\n\n@layer base {\n  * {\n    @apply border-border outline-ring/50;\n  }\n\n  body {\n    @apply bg-background text-foreground font-sans antialiased;\n    font-feature-settings:\n      'rlig' 1,\n      'calt' 1;\n  }\n\n  /* Tailwind v4 dropped `cursor: pointer` for buttons. Restore it for all\n     interactive elements (native + Reka role-based controls). Disabled\n     elements stay default. */\n  button:not(:disabled),\n  [role='button']:not([aria-disabled='true']),\n  [role='checkbox']:not([aria-disabled='true']),\n  [role='radio']:not([aria-disabled='true']),\n  [role='switch']:not([aria-disabled='true']),\n  [role='menuitem']:not([aria-disabled='true']),\n  [role='menuitemcheckbox']:not([aria-disabled='true']),\n  [role='menuitemradio']:not([aria-disabled='true']),\n  [role='option']:not([aria-disabled='true']),\n  [role='tab']:not([aria-disabled='true']),\n  summary,\n  label[for],\n  select:not(:disabled),\n  input[type='checkbox']:not(:disabled),\n  input[type='radio']:not(:disabled),\n  input[type='range']:not(:disabled),\n  input[type='file']:not(:disabled),\n  input[type='submit']:not(:disabled),\n  input[type='reset']:not(:disabled),\n  input[type='button']:not(:disabled),\n  input[type='color']:not(:disabled) {\n    cursor: pointer;\n  }\n\n  /* Shadow tokens */\n  .shadow-sm {\n    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n  }\n  .shadow-xs {\n    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.03);\n  }\n  .shadow-md {\n    box-shadow:\n      0 4px 6px -1px rgba(0, 0, 0, 0.1),\n      0 2px 4px -2px rgba(0, 0, 0, 0.1);\n  }\n  .shadow-lg {\n    box-shadow:\n      0 10px 15px -3px rgba(0, 0, 0, 0.1),\n      0 4px 6px -4px rgba(0, 0, 0, 0.1);\n  }\n  .shadow-xl {\n    box-shadow:\n      0 20px 25px -5px rgba(0, 0, 0, 0.1),\n      0 8px 10px -6px rgba(0, 0, 0, 0.1);\n  }\n\n  .dark .shadow-sm {\n    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2);\n  }\n  .dark .shadow-xs {\n    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.15);\n  }\n  .dark .shadow-md {\n    box-shadow:\n      0 4px 6px -1px rgba(0, 0, 0, 0.3),\n      0 2px 4px -2px rgba(0, 0, 0, 0.2);\n  }\n  .dark .shadow-lg {\n    box-shadow:\n      0 10px 15px -3px rgba(0, 0, 0, 0.35),\n      0 4px 6px -4px rgba(0, 0, 0, 0.25);\n  }\n  .dark .shadow-xl {\n    box-shadow:\n      0 20px 25px -5px rgba(0, 0, 0, 0.4),\n      0 8px 10px -6px rgba(0, 0, 0, 0.3);\n  }\n}\n\n/* Card hover lift */\n[data-slot='card']:hover {\n  box-shadow: var(--shadow-md);\n  transform: translateY(-1px);\n}\n\n.dark [data-slot='card']:hover {\n  box-shadow: var(--shadow-md);\n}\n\n/* Subtle background texture */\nbody::before {\n  content: '';\n  position: fixed;\n  inset: 0;\n  pointer-events: none;\n  z-index: -1;\n  background-image:\n    radial-gradient(circle at 20% 80%, oklch(0.46 0.08 145 / 0.03) 0%, transparent 50%),\n    radial-gradient(circle at 80% 20%, oklch(0.46 0.08 145 / 0.02) 0%, transparent 50%);\n}\n\n/* Scrollbar styling */\n::-webkit-scrollbar {\n  width: 6px;\n  height: 6px;\n}\n\n::-webkit-scrollbar-track {\n  background: transparent;\n}\n\n::-webkit-scrollbar-thumb {\n  background: var(--border);\n  border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n  background: var(--muted-foreground);\n}\n\n/* Reusable error-shake animation — apply class `animate-shake` on submit\n   attempt only (never on blur, too aggressive). */\n@keyframes shake {\n  0%,\n  100% {\n    transform: translateX(0);\n  }\n  20% {\n    transform: translateX(-6px);\n  }\n  40% {\n    transform: translateX(6px);\n  }\n  60% {\n    transform: translateX(-4px);\n  }\n  80% {\n    transform: translateX(4px);\n  }\n}\n.animate-shake {\n  animation: shake 400ms cubic-bezier(0.36, 0.07, 0.19, 0.97) both;\n}\n\n/* Global reduced-motion safety net — collapses every animation/transition\n   to near-instant. Component-specific @media reduce blocks override\n   timings further when needed; this is the floor. */\n@media (prefers-reduced-motion: reduce) {\n  *,\n  *::before,\n  *::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n    scroll-behavior: auto !important;\n  }\n  .animate-shake {\n    animation: none;\n  }\n}\n",
      "type": "registry:style",
      "target": "~/app/globals.css"
    }
  ],
  "dependencies": [],
  "devDependencies": [],
  "registryDependencies": [],
  "description": "Tailwind v4 design tokens (light + dark), motion tokens, base layer styling, and shadow utilities. Identical token set to the Vue/Nuxt registry — tokens are framework-neutral. Ships the full canonical tailwind.css as `files` content; the cssVars block stays as a merge safety net for consumers with a pre-existing globals.css.",
  "cssVars": {
    "theme": {
      "--font-sans": "'DM Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n  'Noto Color Emoji'",
      "--font-display": "'Anybody', 'DM Sans', ui-sans-serif, system-ui, sans-serif",
      "--font-mono": "'DM Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace",
      "--radius-sm": "var(--radius)",
      "--radius-md": "var(--radius)",
      "--radius-lg": "var(--radius)",
      "--radius-xl": "var(--radius)",
      "--color-background": "var(--background)",
      "--color-foreground": "var(--foreground)",
      "--color-card": "var(--card)",
      "--color-card-foreground": "var(--card-foreground)",
      "--color-popover": "var(--popover)",
      "--color-popover-foreground": "var(--popover-foreground)",
      "--color-primary": "var(--primary)",
      "--color-primary-foreground": "var(--primary-foreground)",
      "--color-secondary": "var(--secondary)",
      "--color-secondary-foreground": "var(--secondary-foreground)",
      "--color-muted": "var(--muted)",
      "--color-muted-foreground": "var(--muted-foreground)",
      "--color-accent": "var(--accent)",
      "--color-accent-foreground": "var(--accent-foreground)",
      "--color-destructive": "var(--destructive)",
      "--color-destructive-foreground": "var(--destructive-foreground)",
      "--color-success": "var(--success)",
      "--color-warning": "var(--warning)",
      "--color-info": "var(--info)",
      "--color-border": "var(--border)",
      "--color-input": "var(--input)",
      "--color-ring": "var(--ring)",
      "--color-chart-1": "var(--chart-1)",
      "--color-chart-2": "var(--chart-2)",
      "--color-chart-3": "var(--chart-3)",
      "--color-chart-4": "var(--chart-4)",
      "--color-chart-5": "var(--chart-5)",
      "--color-sidebar": "var(--sidebar)",
      "--color-sidebar-foreground": "var(--sidebar-foreground)",
      "--color-sidebar-primary": "var(--sidebar-primary)",
      "--color-sidebar-primary-foreground": "var(--sidebar-primary-foreground)",
      "--color-sidebar-accent": "var(--sidebar-accent)",
      "--color-sidebar-accent-foreground": "var(--sidebar-accent-foreground)",
      "--color-sidebar-border": "var(--sidebar-border)",
      "--color-sidebar-ring": "var(--sidebar-ring)"
    },
    "light": {
      "--radius": "0.3rem",
      "--background": "oklch(0.98 0.006 130)",
      "--foreground": "oklch(0.2 0.012 150)",
      "--card": "oklch(1 0 0)",
      "--card-foreground": "oklch(0.2 0.012 150)",
      "--popover": "oklch(0.99 0.004 130)",
      "--popover-foreground": "oklch(0.2 0.012 150)",
      "--primary": "oklch(0.46 0.08 145)",
      "--primary-foreground": "oklch(0.98 0.006 130)",
      "--secondary": "oklch(0.94 0.012 130)",
      "--secondary-foreground": "oklch(0.24 0.014 150)",
      "--muted": "oklch(0.95 0.01 130)",
      "--muted-foreground": "oklch(0.48 0.014 150)",
      "--accent": "oklch(0.92 0.02 80)",
      "--accent-foreground": "oklch(0.24 0.014 150)",
      "--destructive": "oklch(0.55 0.2 28)",
      "--destructive-foreground": "oklch(0.985 0 0)",
      "--border": "oklch(0.88 0.014 135)",
      "--input": "oklch(0.88 0.014 135)",
      "--ring": "oklch(0.5 0.08 150)",
      "--chart-1": "#e76e50",
      "--chart-2": "#2a9d90",
      "--chart-3": "#264653",
      "--chart-4": "#e9c468",
      "--chart-5": "#f4a261",
      "--sidebar": "oklch(0.955 0.012 130)",
      "--sidebar-foreground": "oklch(0.2 0.012 150)",
      "--sidebar-primary": "oklch(0.46 0.08 145)",
      "--sidebar-primary-foreground": "oklch(0.98 0.006 130)",
      "--sidebar-accent": "oklch(0.92 0.02 80)",
      "--sidebar-accent-foreground": "oklch(0.24 0.014 150)",
      "--sidebar-border": "oklch(0.88 0.014 135)",
      "--sidebar-ring": "oklch(0.5 0.08 150)",
      "--success": "oklch(0.55 0.18 145)",
      "--warning": "oklch(0.7 0.16 75)",
      "--info": "oklch(0.55 0.22 260)"
    },
    "dark": {
      "--background": "oklch(0.16 0.01 150)",
      "--foreground": "oklch(0.94 0.008 130)",
      "--card": "oklch(0.2 0.012 150)",
      "--card-foreground": "oklch(0.94 0.008 130)",
      "--popover": "oklch(0.2 0.012 150)",
      "--popover-foreground": "oklch(0.94 0.008 130)",
      "--primary": "oklch(0.72 0.1 145)",
      "--primary-foreground": "oklch(0.16 0.01 150)",
      "--secondary": "oklch(0.27 0.012 150)",
      "--secondary-foreground": "oklch(0.94 0.008 130)",
      "--muted": "oklch(0.26 0.012 150)",
      "--muted-foreground": "oklch(0.72 0.014 140)",
      "--accent": "oklch(0.3 0.018 80)",
      "--accent-foreground": "oklch(0.94 0.008 130)",
      "--destructive": "oklch(0.68 0.18 25)",
      "--destructive-foreground": "oklch(0.985 0 0)",
      "--border": "oklch(1 0 0 / 12%)",
      "--input": "oklch(1 0 0 / 14%)",
      "--ring": "oklch(0.6 0.1 145)",
      "--chart-1": "#e8997a",
      "--chart-2": "#5cbfb0",
      "--chart-3": "#4a6b7a",
      "--chart-4": "#f0d99a",
      "--chart-5": "#f5b87a",
      "--sidebar": "oklch(0.19 0.012 150)",
      "--sidebar-foreground": "oklch(0.94 0.008 130)",
      "--sidebar-primary": "oklch(0.72 0.1 145)",
      "--sidebar-primary-foreground": "oklch(0.16 0.01 150)",
      "--sidebar-accent": "oklch(0.3 0.018 80)",
      "--sidebar-accent-foreground": "oklch(0.94 0.008 130)",
      "--sidebar-border": "oklch(1 0 0 / 12%)",
      "--sidebar-ring": "oklch(0.6 0.1 145)",
      "--success": "oklch(0.65 0.16 145)",
      "--warning": "oklch(0.78 0.17 75)",
      "--info": "oklch(0.65 0.18 260)"
    }
  }
}