{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "prfct",
  "title": "prfct theme",
  "description": "Design tokens, base styles, motion and focus utilities, the Inter font face, the theme provider and a token-aware cn().",
  "dependencies": [
    "next-themes",
    "tw-animate-css",
    "shadcn",
    "cn"
  ],
  "registryDependencies": [
    "https://www.prfct.dev/r/utils.json"
  ],
  "files": [
    {
      "path": "styles/prfct.css",
      "content": "/**\n * prfct — the whole system in one import.\n *\n * Import this file after Tailwind, tw-animate-css and shadcn's variants. The\n * registry installs it as `styles/prfct/index.css`:\n *\n *   @import \"tailwindcss\";\n *   @import \"tw-animate-css\";\n *   @import \"shadcn/tailwind.css\";\n *   @import \"../styles/prfct/index.css\";\n *\n * prfct's tokens replace the variables `shadcn init` generates, so remove its\n * `:root`, `.dark` and `@theme inline` blocks from your global stylesheet.\n */\n\n@import \"./fonts.css\";\n@import \"./tokens.css\";\n@import \"./base.css\";\n@import \"./utilities.css\";\n",
      "type": "registry:file",
      "target": "styles/prfct/index.css"
    },
    {
      "path": "styles/fonts.css",
      "content": "/**\n * prfct typefaces.\n *\n * Inter 4.1, self-hosted and subset by `scripts/build-fonts.ts` so that every\n * OpenType feature survives (tabular figures, slashed zero, case-sensitive\n * forms, character variants) along with both variation axes: weight and\n * optical size. Only the roman is preloaded; the italic loads on first use,\n * and only takes over if it arrives almost at once (`optional`): a late swap\n * would reflow the text around it, and italics are too sparse to be worth it.\n */\n\n@font-face {\n  font-family: \"InterVariable\";\n  font-style: normal;\n  font-weight: 100 900;\n  font-display: swap;\n  src: url(\"/fonts/inter-4.1-variable.woff2\") format(\"woff2\");\n}\n\n@font-face {\n  font-family: \"InterVariable\";\n  font-style: italic;\n  font-weight: 100 900;\n  font-display: optional;\n  src: url(\"/fonts/inter-4.1-variable-italic.woff2\") format(\"woff2\");\n}\n\n/*\n * Metric-matched fallback: while Inter loads, Arial is scaled to Inter's\n * proportions so text doesn't reflow when the web font swaps in (no CLS).\n */\n@font-face {\n  font-family: \"InterVariable Fallback\";\n  src: local(\"Arial\"), local(\"Helvetica Neue\"), local(\"Helvetica\");\n  ascent-override: 90.44%;\n  descent-override: 22.52%;\n  line-gap-override: 0%;\n  size-adjust: 107.12%;\n}\n",
      "type": "registry:file",
      "target": "styles/prfct/fonts.css"
    },
    {
      "path": "styles/tokens.css",
      "content": "/**\n * prfct — design tokens\n *\n * AUTO-GENERATED by `scripts/build-tokens.ts` from `lib/tokens/*`.\n * Do not edit by hand: change the source and run `pnpm tokens`.\n */\n\n@theme {\n  /* Reset Tailwind's default palette: prfct ships a closed color system. */\n  --color-*: initial;\n\n  /* Typography — Tailwind size utilities, with optical tracking */\n  --text-xs--letter-spacing: 0.002em;\n  --text-sm--letter-spacing: -0.006em;\n  --text-base--letter-spacing: -0.011em;\n  --text-lg--letter-spacing: -0.014em;\n  --text-xl--letter-spacing: -0.017em;\n  --text-2xl--letter-spacing: -0.019em;\n  --text-3xl--letter-spacing: -0.021em;\n  --text-4xl--letter-spacing: -0.022em;\n  --text-5xl--letter-spacing: -0.024em;\n  --text-6xl--letter-spacing: -0.026em;\n  --text-7xl--letter-spacing: -0.028em;\n  --text-8xl--letter-spacing: -0.03em;\n  --text-9xl--letter-spacing: -0.032em;\n\n  /* Typography — semantic roles (text-display-lg, text-body-sm, …) */\n  --text-display-2xl: 4.5rem;\n  --text-display-2xl--line-height: 4.5rem;\n  --text-display-2xl--letter-spacing: -0.032em;\n  --text-display-2xl--font-weight: 620;\n  --text-display-xl: 3.75rem;\n  --text-display-xl--line-height: 3.875rem;\n  --text-display-xl--letter-spacing: -0.03em;\n  --text-display-xl--font-weight: 620;\n  --text-display-lg: 3rem;\n  --text-display-lg--line-height: 3.25rem;\n  --text-display-lg--letter-spacing: -0.028em;\n  --text-display-lg--font-weight: 620;\n  --text-display-md: 2.5rem;\n  --text-display-md--line-height: 2.75rem;\n  --text-display-md--letter-spacing: -0.025em;\n  --text-display-md--font-weight: 620;\n  --text-display-sm: 2rem;\n  --text-display-sm--line-height: 2.375rem;\n  --text-display-sm--letter-spacing: -0.022em;\n  --text-display-sm--font-weight: 620;\n  --text-heading-xl: 1.75rem;\n  --text-heading-xl--line-height: 2.25rem;\n  --text-heading-xl--letter-spacing: -0.021em;\n  --text-heading-xl--font-weight: 600;\n  --text-heading-lg: 1.5rem;\n  --text-heading-lg--line-height: 2rem;\n  --text-heading-lg--letter-spacing: -0.019em;\n  --text-heading-lg--font-weight: 600;\n  --text-heading-md: 1.25rem;\n  --text-heading-md--line-height: 1.75rem;\n  --text-heading-md--letter-spacing: -0.016em;\n  --text-heading-md--font-weight: 600;\n  --text-heading-sm: 1rem;\n  --text-heading-sm--line-height: 1.5rem;\n  --text-heading-sm--letter-spacing: -0.011em;\n  --text-heading-sm--font-weight: 600;\n  --text-heading-xs: 0.875rem;\n  --text-heading-xs--line-height: 1.25rem;\n  --text-heading-xs--letter-spacing: -0.006em;\n  --text-heading-xs--font-weight: 600;\n  --text-body-lg: 1.125rem;\n  --text-body-lg--line-height: 1.75rem;\n  --text-body-lg--letter-spacing: -0.014em;\n  --text-body-lg--font-weight: 400;\n  --text-body-md: 1rem;\n  --text-body-md--line-height: 1.625rem;\n  --text-body-md--letter-spacing: -0.011em;\n  --text-body-md--font-weight: 400;\n  --text-body-sm: 0.875rem;\n  --text-body-sm--line-height: 1.375rem;\n  --text-body-sm--letter-spacing: -0.006em;\n  --text-body-sm--font-weight: 400;\n  --text-body-xs: 0.8125rem;\n  --text-body-xs--line-height: 1.25rem;\n  --text-body-xs--letter-spacing: -0.003em;\n  --text-body-xs--font-weight: 400;\n  --text-label-lg: 1rem;\n  --text-label-lg--line-height: 1.5rem;\n  --text-label-lg--letter-spacing: -0.011em;\n  --text-label-lg--font-weight: 500;\n  --text-label-md: 0.875rem;\n  --text-label-md--line-height: 1.25rem;\n  --text-label-md--letter-spacing: -0.006em;\n  --text-label-md--font-weight: 500;\n  --text-label-sm: 0.8125rem;\n  --text-label-sm--line-height: 1.125rem;\n  --text-label-sm--letter-spacing: -0.003em;\n  --text-label-sm--font-weight: 500;\n  --text-label-xs: 0.75rem;\n  --text-label-xs--line-height: 1rem;\n  --text-label-xs--letter-spacing: 0em;\n  --text-label-xs--font-weight: 500;\n  --text-caption: 0.75rem;\n  --text-caption--line-height: 1rem;\n  --text-caption--letter-spacing: 0.002em;\n  --text-caption--font-weight: 400;\n  --text-overline: 0.6875rem;\n  --text-overline--line-height: 1rem;\n  --text-overline--letter-spacing: 0.08em;\n  --text-overline--font-weight: 600;\n  --text-code: 0.8125rem;\n  --text-code--line-height: 1.375rem;\n  --text-code--letter-spacing: 0em;\n  --text-code--font-weight: 400;\n\n  --font-weight-display: 620;\n\n  /* Motion — easings */\n  --ease-in: cubic-bezier(0.4, 0, 1, 1);\n  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);\n  --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);\n  --ease-standard: cubic-bezier(0.2, 0, 0, 1);\n  --ease-enter: cubic-bezier(0.16, 1, 0.3, 1);\n  --ease-exit: cubic-bezier(0.4, 0, 1, 1);\n  --ease-move: cubic-bezier(0.65, 0, 0.35, 1);\n  --ease-spring: linear(0, 0.026, 0.084, 0.161, 0.241, 0.333, 0.426, 0.515, 0.598, 0.673, 0.734, 0.793, 0.843, 0.885, 0.92, 0.948, 0.968, 0.985, 0.998, 1.008, 1.014, 1.018, 1.02, 1.021, 1.021, 1.02, 1.018, 1.017, 1.015, 1.013, 1.011, 1.009, 1.008, 1.006, 1.005, 1.004, 1.003, 1.002, 1.001, 1.001, 1, 1, 1, 1, 1, 1, 1, 1, 1);\n  --ease-bounce: linear(0, 0.071, 0.229, 0.433, 0.645, 0.829, 0.99, 1.108, 1.18, 1.211, 1.209, 1.183, 1.144, 1.101, 1.057, 1.018, 0.988, 0.968, 0.957, 0.954, 0.958, 0.964, 0.974, 0.983, 0.992, 1, 1.005, 1.008, 1.01, 1.01, 1.008, 1.007, 1.005, 1.003, 1.001, 0.999, 0.999, 0.998, 0.998, 0.998, 0.998, 0.999, 0.999, 1, 1, 1, 1, 1, 1);\n}\n\n@theme inline {\n  /* Fonts */\n  --font-sans: \"InterVariable\", \"InterVariable Fallback\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n  --font-heading: \"InterVariable\", \"InterVariable Fallback\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n  --font-mono: var(--font-geist-mono, \"Geist Mono\"), ui-monospace, \"SF Mono\", \"JetBrains Mono\", Menlo, monospace;\n\n  /* Colors — base */\n  --color-white: oklch(1 0 0);\n  --color-black: oklch(0 0 0);\n  --color-transparent: transparent;\n  --color-current: currentColor;\n\n  /* Colors — primitive scales (bg-gray-3, text-brand-11, border-red-7, …) */\n  --color-gray-1: var(--gray-1);\n  --color-gray-2: var(--gray-2);\n  --color-gray-3: var(--gray-3);\n  --color-gray-4: var(--gray-4);\n  --color-gray-5: var(--gray-5);\n  --color-gray-6: var(--gray-6);\n  --color-gray-7: var(--gray-7);\n  --color-gray-8: var(--gray-8);\n  --color-gray-9: var(--gray-9);\n  --color-gray-10: var(--gray-10);\n  --color-gray-11: var(--gray-11);\n  --color-gray-12: var(--gray-12);\n  --color-gray-contrast: var(--gray-contrast);\n  --color-brand-1: var(--brand-1);\n  --color-brand-2: var(--brand-2);\n  --color-brand-3: var(--brand-3);\n  --color-brand-4: var(--brand-4);\n  --color-brand-5: var(--brand-5);\n  --color-brand-6: var(--brand-6);\n  --color-brand-7: var(--brand-7);\n  --color-brand-8: var(--brand-8);\n  --color-brand-9: var(--brand-9);\n  --color-brand-10: var(--brand-10);\n  --color-brand-11: var(--brand-11);\n  --color-brand-12: var(--brand-12);\n  --color-brand-contrast: var(--brand-contrast);\n  --color-red-1: var(--red-1);\n  --color-red-2: var(--red-2);\n  --color-red-3: var(--red-3);\n  --color-red-4: var(--red-4);\n  --color-red-5: var(--red-5);\n  --color-red-6: var(--red-6);\n  --color-red-7: var(--red-7);\n  --color-red-8: var(--red-8);\n  --color-red-9: var(--red-9);\n  --color-red-10: var(--red-10);\n  --color-red-11: var(--red-11);\n  --color-red-12: var(--red-12);\n  --color-red-contrast: var(--red-contrast);\n  --color-amber-1: var(--amber-1);\n  --color-amber-2: var(--amber-2);\n  --color-amber-3: var(--amber-3);\n  --color-amber-4: var(--amber-4);\n  --color-amber-5: var(--amber-5);\n  --color-amber-6: var(--amber-6);\n  --color-amber-7: var(--amber-7);\n  --color-amber-8: var(--amber-8);\n  --color-amber-9: var(--amber-9);\n  --color-amber-10: var(--amber-10);\n  --color-amber-11: var(--amber-11);\n  --color-amber-12: var(--amber-12);\n  --color-amber-contrast: var(--amber-contrast);\n  --color-green-1: var(--green-1);\n  --color-green-2: var(--green-2);\n  --color-green-3: var(--green-3);\n  --color-green-4: var(--green-4);\n  --color-green-5: var(--green-5);\n  --color-green-6: var(--green-6);\n  --color-green-7: var(--green-7);\n  --color-green-8: var(--green-8);\n  --color-green-9: var(--green-9);\n  --color-green-10: var(--green-10);\n  --color-green-11: var(--green-11);\n  --color-green-12: var(--green-12);\n  --color-green-contrast: var(--green-contrast);\n  --color-blue-1: var(--blue-1);\n  --color-blue-2: var(--blue-2);\n  --color-blue-3: var(--blue-3);\n  --color-blue-4: var(--blue-4);\n  --color-blue-5: var(--blue-5);\n  --color-blue-6: var(--blue-6);\n  --color-blue-7: var(--blue-7);\n  --color-blue-8: var(--blue-8);\n  --color-blue-9: var(--blue-9);\n  --color-blue-10: var(--blue-10);\n  --color-blue-11: var(--blue-11);\n  --color-blue-12: var(--blue-12);\n  --color-blue-contrast: var(--blue-contrast);\n  --color-orange-1: var(--orange-1);\n  --color-orange-2: var(--orange-2);\n  --color-orange-3: var(--orange-3);\n  --color-orange-4: var(--orange-4);\n  --color-orange-5: var(--orange-5);\n  --color-orange-6: var(--orange-6);\n  --color-orange-7: var(--orange-7);\n  --color-orange-8: var(--orange-8);\n  --color-orange-9: var(--orange-9);\n  --color-orange-10: var(--orange-10);\n  --color-orange-11: var(--orange-11);\n  --color-orange-12: var(--orange-12);\n  --color-orange-contrast: var(--orange-contrast);\n  --color-teal-1: var(--teal-1);\n  --color-teal-2: var(--teal-2);\n  --color-teal-3: var(--teal-3);\n  --color-teal-4: var(--teal-4);\n  --color-teal-5: var(--teal-5);\n  --color-teal-6: var(--teal-6);\n  --color-teal-7: var(--teal-7);\n  --color-teal-8: var(--teal-8);\n  --color-teal-9: var(--teal-9);\n  --color-teal-10: var(--teal-10);\n  --color-teal-11: var(--teal-11);\n  --color-teal-12: var(--teal-12);\n  --color-teal-contrast: var(--teal-contrast);\n  --color-violet-1: var(--violet-1);\n  --color-violet-2: var(--violet-2);\n  --color-violet-3: var(--violet-3);\n  --color-violet-4: var(--violet-4);\n  --color-violet-5: var(--violet-5);\n  --color-violet-6: var(--violet-6);\n  --color-violet-7: var(--violet-7);\n  --color-violet-8: var(--violet-8);\n  --color-violet-9: var(--violet-9);\n  --color-violet-10: var(--violet-10);\n  --color-violet-11: var(--violet-11);\n  --color-violet-12: var(--violet-12);\n  --color-violet-contrast: var(--violet-contrast);\n  --color-pink-1: var(--pink-1);\n  --color-pink-2: var(--pink-2);\n  --color-pink-3: var(--pink-3);\n  --color-pink-4: var(--pink-4);\n  --color-pink-5: var(--pink-5);\n  --color-pink-6: var(--pink-6);\n  --color-pink-7: var(--pink-7);\n  --color-pink-8: var(--pink-8);\n  --color-pink-9: var(--pink-9);\n  --color-pink-10: var(--pink-10);\n  --color-pink-11: var(--pink-11);\n  --color-pink-12: var(--pink-12);\n  --color-pink-contrast: var(--pink-contrast);\n\n  /* Colors — status aliases (bg-danger-3, text-success-11, …) */\n  --color-danger-1: var(--red-1);\n  --color-danger-2: var(--red-2);\n  --color-danger-3: var(--red-3);\n  --color-danger-4: var(--red-4);\n  --color-danger-5: var(--red-5);\n  --color-danger-6: var(--red-6);\n  --color-danger-7: var(--red-7);\n  --color-danger-8: var(--red-8);\n  --color-danger-9: var(--red-9);\n  --color-danger-10: var(--red-10);\n  --color-danger-11: var(--red-11);\n  --color-danger-12: var(--red-12);\n  --color-danger-contrast: var(--red-contrast);\n  --color-warning-1: var(--amber-1);\n  --color-warning-2: var(--amber-2);\n  --color-warning-3: var(--amber-3);\n  --color-warning-4: var(--amber-4);\n  --color-warning-5: var(--amber-5);\n  --color-warning-6: var(--amber-6);\n  --color-warning-7: var(--amber-7);\n  --color-warning-8: var(--amber-8);\n  --color-warning-9: var(--amber-9);\n  --color-warning-10: var(--amber-10);\n  --color-warning-11: var(--amber-11);\n  --color-warning-12: var(--amber-12);\n  --color-warning-contrast: var(--amber-contrast);\n  --color-success-1: var(--green-1);\n  --color-success-2: var(--green-2);\n  --color-success-3: var(--green-3);\n  --color-success-4: var(--green-4);\n  --color-success-5: var(--green-5);\n  --color-success-6: var(--green-6);\n  --color-success-7: var(--green-7);\n  --color-success-8: var(--green-8);\n  --color-success-9: var(--green-9);\n  --color-success-10: var(--green-10);\n  --color-success-11: var(--green-11);\n  --color-success-12: var(--green-12);\n  --color-success-contrast: var(--green-contrast);\n  --color-info-1: var(--blue-1);\n  --color-info-2: var(--blue-2);\n  --color-info-3: var(--blue-3);\n  --color-info-4: var(--blue-4);\n  --color-info-5: var(--blue-5);\n  --color-info-6: var(--blue-6);\n  --color-info-7: var(--blue-7);\n  --color-info-8: var(--blue-8);\n  --color-info-9: var(--blue-9);\n  --color-info-10: var(--blue-10);\n  --color-info-11: var(--blue-11);\n  --color-info-12: var(--blue-12);\n  --color-info-contrast: var(--blue-contrast);\n\n  /* Colors — semantic roles (bg-background, text-muted-foreground, …) */\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-field: var(--field);\n  --color-surface-raised: var(--surface-raised);\n  --color-surface: var(--surface);\n  --color-surface-foreground: var(--surface-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-brand: var(--brand);\n  --color-brand-foreground: var(--brand-foreground);\n  --color-link: var(--link);\n  --color-destructive: var(--destructive);\n  --color-destructive-foreground: var(--destructive-foreground);\n  --color-success: var(--success);\n  --color-success-foreground: var(--success-foreground);\n  --color-warning: var(--warning);\n  --color-warning-foreground: var(--warning-foreground);\n  --color-info: var(--info);\n  --color-info-foreground: var(--info-foreground);\n  --color-border: var(--border);\n  --color-border-strong: var(--border-strong);\n  --color-input: var(--input);\n  --color-ring: var(--ring);\n  --color-edge: var(--edge);\n  --color-overlay: var(--overlay);\n  --color-selection: var(--selection);\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  /* Radius — every step is a multiple of --radius */\n  --radius-xs: calc(var(--radius) * 0.25);\n  --radius-sm: calc(var(--radius) * 0.5);\n  --radius-md: calc(var(--radius) * 0.75);\n  --radius-lg: calc(var(--radius) * 1);\n  --radius-xl: calc(var(--radius) * 1.5);\n  --radius-2xl: calc(var(--radius) * 2);\n  --radius-3xl: calc(var(--radius) * 3);\n  --radius-4xl: calc(var(--radius) * 4);\n\n  /* Elevation */\n  --shadow-xs: var(--prfct-shadow-xs);\n  --shadow-sm: var(--prfct-shadow-sm);\n  --shadow-md: var(--prfct-shadow-md);\n  --shadow-lg: var(--prfct-shadow-lg);\n  --shadow-xl: var(--prfct-shadow-xl);\n  --shadow-2xl: var(--prfct-shadow-2xl);\n  --shadow-raised: var(--prfct-shadow-raised);\n  --shadow-floating: var(--prfct-shadow-lg);\n  --shadow-modal: var(--prfct-shadow-2xl);\n}\n\n:root {\n  /* Shape */\n  --radius: 0.5rem;\n\n  /* Motion — durations */\n  --duration-instant: 0ms;\n  --duration-fast: 100ms;\n  --duration-base: 160ms;\n  --duration-moderate: 220ms;\n  --duration-slow: 320ms;\n  --duration-slower: 480ms;\n  --duration-spring: 521ms;\n  --duration-bounce: 859ms;\n\n  /* Layers */\n  --z-base: 0;\n  --z-raised: 10;\n  --z-sticky: 20;\n  --z-overlay: 40;\n  --z-modal: 50;\n  --z-popover: 60;\n  --z-toast: 70;\n  --z-tooltip: 80;\n}\n\n/* Light is the default; `.light` re-establishes it inside a dark subtree. */\n:root,\n.light {\n  color-scheme: light;\n\n  /* Primitive scales */\n  --gray-1: oklch(0.992 0.002 264);\n  --gray-2: oklch(0.979 0.0026 264);\n  --gray-3: oklch(0.958 0.0036 264);\n  --gray-4: oklch(0.936 0.0042 264);\n  --gray-5: oklch(0.913 0.0049 264);\n  --gray-6: oklch(0.889 0.0055 264);\n  --gray-7: oklch(0.853 0.0062 264);\n  --gray-8: oklch(0.789 0.0065 264);\n  --gray-9: oklch(0.64 0.0065 264);\n  --gray-10: oklch(0.604 0.0065 264);\n  --gray-11: oklch(0.5 0.0059 264);\n  --gray-12: oklch(0.228 0.0049 264);\n  --gray-contrast: oklch(0.2 0.002 264);\n  --brand-1: oklch(0.993 0.0032 267);\n  --brand-2: oklch(0.981 0.0089 267);\n  --brand-3: oklch(0.961 0.0183 267);\n  --brand-4: oklch(0.938 0.0294 267);\n  --brand-5: oklch(0.909 0.0436 267);\n  --brand-6: oklch(0.872 0.0622 267);\n  --brand-7: oklch(0.82 0.0894 267);\n  --brand-8: oklch(0.745 0.1304 267);\n  --brand-9: oklch(0.515 0.24 267);\n  --brand-10: oklch(0.48 0.2352 267);\n  --brand-11: oklch(0.5 0.216 267);\n  --brand-12: oklch(0.315 0.1008 267);\n  --brand-contrast: oklch(1 0 0);\n  --red-1: oklch(0.993 0.0034 26);\n  --red-2: oklch(0.981 0.0092 26);\n  --red-3: oklch(0.961 0.0192 26);\n  --red-4: oklch(0.938 0.0312 26);\n  --red-5: oklch(0.909 0.0469 26);\n  --red-6: oklch(0.872 0.0683 26);\n  --red-7: oklch(0.82 0.1009 26);\n  --red-8: oklch(0.745 0.1378 26);\n  --red-9: oklch(0.572 0.212 26);\n  --red-10: oklch(0.537 0.2078 26);\n  --red-11: oklch(0.5183 0.1908 26);\n  --red-12: oklch(0.315 0.089 26);\n  --red-contrast: oklch(1 0 0);\n  --amber-1: oklch(0.993 0.0034 90);\n  --amber-2: oklch(0.981 0.0093 88.18);\n  --amber-3: oklch(0.961 0.0386 86.36);\n  --amber-4: oklch(0.938 0.0644 84.55);\n  --amber-5: oklch(0.909 0.0902 82.73);\n  --amber-6: oklch(0.872 0.1191 80.91);\n  --amber-7: oklch(0.82 0.1546 79.09);\n  --amber-8: oklch(0.745 0.1557 77.27);\n  --amber-9: oklch(0.805 0.1695 75.45);\n  --amber-10: oklch(0.77 0.1635 73.64);\n  --amber-11: oklch(0.5032 0.1079 71.82);\n  --amber-12: oklch(0.315 0.0682 70);\n  --amber-contrast: oklch(0.2 0.0421 75.45);\n  --green-1: oklch(0.993 0.0028 150);\n  --green-2: oklch(0.981 0.0077 150.36);\n  --green-3: oklch(0.961 0.0184 150.73);\n  --green-4: oklch(0.938 0.0306 151.09);\n  --green-5: oklch(0.909 0.0429 151.45);\n  --green-6: oklch(0.872 0.0567 151.82);\n  --green-7: oklch(0.82 0.0736 152.18);\n  --green-8: oklch(0.745 0.0996 152.55);\n  --green-9: oklch(0.54 0.1393 152.91);\n  --green-10: oklch(0.505 0.1293 153.27);\n  --green-11: oklch(0.4885 0.1241 153.64);\n  --green-12: oklch(0.315 0.0585 154);\n  --green-contrast: oklch(1 0 0);\n  --blue-1: oklch(0.993 0.0034 253);\n  --blue-2: oklch(0.981 0.0092 253);\n  --blue-3: oklch(0.961 0.0189 253);\n  --blue-4: oklch(0.938 0.0304 253);\n  --blue-5: oklch(0.909 0.0451 253);\n  --blue-6: oklch(0.872 0.0639 253);\n  --blue-7: oklch(0.82 0.0829 253);\n  --blue-8: oklch(0.745 0.1122 253);\n  --blue-9: oklch(0.56 0.1727 253);\n  --blue-10: oklch(0.525 0.1619 253);\n  --blue-11: oklch(0.5015 0.1547 253);\n  --blue-12: oklch(0.315 0.0725 253);\n  --blue-contrast: oklch(1 0 0);\n  --orange-1: oklch(0.993 0.0038 50);\n  --orange-2: oklch(0.981 0.0103 49.27);\n  --orange-3: oklch(0.961 0.0213 48.55);\n  --orange-4: oklch(0.938 0.0343 47.82);\n  --orange-5: oklch(0.909 0.0513 47.09);\n  --orange-6: oklch(0.872 0.074 46.36);\n  --orange-7: oklch(0.82 0.1003 45.64);\n  --orange-8: oklch(0.745 0.1359 44.91);\n  --orange-9: oklch(0.665 0.19 44.18);\n  --orange-10: oklch(0.63 0.1851 43.45);\n  --orange-11: oklch(0.5115 0.1523 42.73);\n  --orange-12: oklch(0.315 0.0798 42);\n  --orange-contrast: oklch(0.2 0.05 44.18);\n  --teal-1: oklch(0.993 0.002 181);\n  --teal-2: oklch(0.981 0.0054 181.36);\n  --teal-3: oklch(0.961 0.0141 181.73);\n  --teal-4: oklch(0.938 0.0234 182.09);\n  --teal-5: oklch(0.909 0.0328 182.45);\n  --teal-6: oklch(0.872 0.0433 182.82);\n  --teal-7: oklch(0.82 0.0562 183.18);\n  --teal-8: oklch(0.745 0.0761 183.55);\n  --teal-9: oklch(0.5507 0.0976 183.91);\n  --teal-10: oklch(0.5157 0.0912 184.27);\n  --teal-11: oklch(0.4911 0.0867 184.64);\n  --teal-12: oklch(0.315 0.041 185);\n  --teal-contrast: oklch(1 0 0);\n  --violet-1: oklch(0.993 0.0036 294);\n  --violet-2: oklch(0.981 0.0099 294);\n  --violet-3: oklch(0.961 0.0204 294);\n  --violet-4: oklch(0.938 0.0328 294);\n  --violet-5: oklch(0.909 0.0487 294);\n  --violet-6: oklch(0.872 0.0695 294);\n  --violet-7: oklch(0.82 0.0999 294);\n  --violet-8: oklch(0.745 0.1398 294);\n  --violet-9: oklch(0.535 0.215 294);\n  --violet-10: oklch(0.5 0.2107 294);\n  --violet-11: oklch(0.5173 0.1935 294);\n  --violet-12: oklch(0.315 0.0903 294);\n  --violet-contrast: oklch(1 0 0);\n  --pink-1: oklch(0.993 0.0039 352);\n  --pink-2: oklch(0.981 0.0106 352);\n  --pink-3: oklch(0.961 0.0222 352);\n  --pink-4: oklch(0.938 0.0361 352);\n  --pink-5: oklch(0.909 0.0544 352);\n  --pink-6: oklch(0.872 0.0722 352);\n  --pink-7: oklch(0.82 0.0936 352);\n  --pink-8: oklch(0.745 0.1268 352);\n  --pink-9: oklch(0.585 0.195 352);\n  --pink-10: oklch(0.55 0.1911 352);\n  --pink-11: oklch(0.517 0.1755 352);\n  --pink-12: oklch(0.315 0.0819 352);\n  --pink-contrast: oklch(1 0 0);\n\n  /* Semantic roles */\n  --background: oklch(1 0 0);\n  --foreground: var(--gray-12);\n  --card: oklch(1 0 0);\n  --card-foreground: var(--gray-12);\n  --popover: oklch(1 0 0);\n  --popover-foreground: var(--gray-12);\n  --field: oklch(1 0 0);\n  --surface-raised: oklch(1 0 0);\n  --surface: var(--gray-1);\n  --surface-foreground: var(--gray-12);\n  --primary: var(--gray-12);\n  --primary-foreground: oklch(1 0 0);\n  --secondary: var(--gray-3);\n  --secondary-foreground: var(--gray-12);\n  --muted: var(--gray-3);\n  --muted-foreground: var(--gray-11);\n  --accent: var(--gray-3);\n  --accent-foreground: var(--gray-12);\n  --brand: var(--brand-9);\n  --brand-foreground: var(--brand-contrast);\n  --link: var(--brand-11);\n  --destructive: var(--red-9);\n  --destructive-foreground: var(--red-contrast);\n  --success: var(--green-9);\n  --success-foreground: var(--green-contrast);\n  --warning: var(--amber-9);\n  --warning-foreground: var(--amber-contrast);\n  --info: var(--blue-9);\n  --info-foreground: var(--blue-contrast);\n  --border: var(--gray-6);\n  --border-strong: var(--gray-7);\n  --input: var(--gray-9);\n  --ring: var(--brand-9);\n  --edge: color-mix(in oklab, var(--gray-12) 8%, transparent);\n  --overlay: color-mix(in oklab, var(--gray-12) 32%, transparent);\n  --selection: var(--brand-5);\n  --chart-1: var(--brand-9);\n  --chart-2: var(--teal-9);\n  --chart-3: var(--violet-9);\n  --chart-4: var(--orange-9);\n  --chart-5: var(--pink-9);\n  --sidebar: var(--gray-1);\n  --sidebar-foreground: var(--gray-12);\n  --sidebar-primary: var(--gray-12);\n  --sidebar-primary-foreground: oklch(1 0 0);\n  --sidebar-accent: var(--gray-4);\n  --sidebar-accent-foreground: var(--gray-12);\n  --sidebar-border: var(--gray-6);\n  --sidebar-ring: var(--brand-9);\n\n  /* Elevation */\n  --prfct-shadow-xs: 0 1px 2px 0 oklch(0.24 0.01 264 / 0.06);\n  --prfct-shadow-sm: 0 1px 2px -1px oklch(0.24 0.01 264 / 0.08), 0 1px 3px 0 oklch(0.24 0.01 264 / 0.06);\n  --prfct-shadow-md: 0 1px 2px 0 oklch(0.24 0.01 264 / 0.04), 0 2px 4px -1px oklch(0.24 0.01 264 / 0.05), 0 6px 12px -3px oklch(0.24 0.01 264 / 0.08);\n  --prfct-shadow-lg: 0 1px 3px 0 oklch(0.24 0.01 264 / 0.04), 0 4px 8px -2px oklch(0.24 0.01 264 / 0.05), 0 14px 28px -6px oklch(0.24 0.01 264 / 0.1);\n  --prfct-shadow-xl: 0 2px 4px 0 oklch(0.24 0.01 264 / 0.04), 0 8px 16px -4px oklch(0.24 0.01 264 / 0.06), 0 24px 48px -8px oklch(0.24 0.01 264 / 0.14);\n  --prfct-shadow-2xl: 0 4px 8px 0 oklch(0.24 0.01 264 / 0.04), 0 16px 32px -8px oklch(0.24 0.01 264 / 0.08), 0 40px 80px -16px oklch(0.24 0.01 264 / 0.22);\n  --prfct-shadow-raised: var(--prfct-shadow-xs);\n}\n\n/* Dark applies to any subtree: the page (html.dark) or a single panel. */\n.dark {\n  color-scheme: dark;\n\n  /* Primitive scales */\n  --gray-1: oklch(0.158 0.0052 264);\n  --gray-2: oklch(0.192 0.0055 264);\n  --gray-3: oklch(0.226 0.0059 264);\n  --gray-4: oklch(0.256 0.0062 264);\n  --gray-5: oklch(0.285 0.0065 264);\n  --gray-6: oklch(0.32 0.0065 264);\n  --gray-7: oklch(0.374 0.0065 264);\n  --gray-8: oklch(0.466 0.0065 264);\n  --gray-9: oklch(0.53 0.0065 264);\n  --gray-10: oklch(0.575 0.0065 264);\n  --gray-11: oklch(0.768 0.0049 264);\n  --gray-12: oklch(0.952 0.0026 264);\n  --gray-contrast: oklch(1 0 0);\n  --brand-1: oklch(0.178 0.024 267);\n  --brand-2: oklch(0.206 0.0312 267);\n  --brand-3: oklch(0.262 0.0768 267);\n  --brand-4: oklch(0.304 0.1104 267);\n  --brand-5: oklch(0.346 0.1248 267);\n  --brand-6: oklch(0.392 0.1344 267);\n  --brand-7: oklch(0.45 0.1488 267);\n  --brand-8: oklch(0.525 0.1728 267);\n  --brand-9: oklch(0.55 0.24 267);\n  --brand-10: oklch(0.59 0.2227 267);\n  --brand-11: oklch(0.74 0.1332 267);\n  --brand-12: oklch(0.915 0.0406 267);\n  --brand-contrast: oklch(1 0 0);\n  --red-1: oklch(0.178 0.0212 26);\n  --red-2: oklch(0.206 0.0276 26);\n  --red-3: oklch(0.262 0.0678 26);\n  --red-4: oklch(0.304 0.0975 26);\n  --red-5: oklch(0.346 0.1102 26);\n  --red-6: oklch(0.392 0.1187 26);\n  --red-7: oklch(0.45 0.1314 26);\n  --red-8: oklch(0.525 0.1526 26);\n  --red-9: oklch(0.572 0.212 26);\n  --red-10: oklch(0.612 0.1993 26);\n  --red-11: oklch(0.74 0.1526 26);\n  --red-12: oklch(0.915 0.0436 26);\n  --red-contrast: oklch(1 0 0);\n  --amber-1: oklch(0.178 0.0169 90);\n  --amber-2: oklch(0.206 0.022 88.18);\n  --amber-3: oklch(0.262 0.0536 86.36);\n  --amber-4: oklch(0.304 0.0623 84.55);\n  --amber-5: oklch(0.346 0.0712 82.73);\n  --amber-6: oklch(0.392 0.081 80.91);\n  --amber-7: oklch(0.45 0.0935 79.09);\n  --amber-8: oklch(0.525 0.1097 77.27);\n  --amber-9: oklch(0.805 0.1695 75.45);\n  --amber-10: oklch(0.845 0.1302 73.64);\n  --amber-11: oklch(0.74 0.122 71.82);\n  --amber-12: oklch(0.915 0.0508 70);\n  --amber-contrast: oklch(0.2 0.0421 75.45);\n  --green-1: oklch(0.178 0.0139 150);\n  --green-2: oklch(0.206 0.0181 150.36);\n  --green-3: oklch(0.262 0.049 150.73);\n  --green-4: oklch(0.304 0.0705 151.09);\n  --green-5: oklch(0.346 0.0797 151.45);\n  --green-6: oklch(0.392 0.0858 151.82);\n  --green-7: oklch(0.45 0.095 152.18);\n  --green-8: oklch(0.525 0.1103 152.55);\n  --green-9: oklch(0.54 0.1393 152.91);\n  --green-10: oklch(0.58 0.1309 153.27);\n  --green-11: oklch(0.74 0.1003 153.64);\n  --green-12: oklch(0.915 0.0418 154);\n  --green-contrast: oklch(1 0 0);\n  --blue-1: oklch(0.178 0.0173 253);\n  --blue-2: oklch(0.206 0.0224 253);\n  --blue-3: oklch(0.262 0.0553 253);\n  --blue-4: oklch(0.304 0.0794 253);\n  --blue-5: oklch(0.346 0.0898 253);\n  --blue-6: oklch(0.392 0.0967 253);\n  --blue-7: oklch(0.45 0.1071 253);\n  --blue-8: oklch(0.525 0.1243 253);\n  --blue-9: oklch(0.56 0.1727 253);\n  --blue-10: oklch(0.6 0.1623 253);\n  --blue-11: oklch(0.74 0.1243 253);\n  --blue-12: oklch(0.915 0.042 253);\n  --blue-contrast: oklch(1 0 0);\n  --orange-1: oklch(0.178 0.019 50);\n  --orange-2: oklch(0.206 0.0247 49.27);\n  --orange-3: oklch(0.262 0.0669 48.55);\n  --orange-4: oklch(0.304 0.083 47.82);\n  --orange-5: oklch(0.346 0.0956 47.09);\n  --orange-6: oklch(0.392 0.1096 46.36);\n  --orange-7: oklch(0.45 0.1273 45.64);\n  --orange-8: oklch(0.525 0.1503 44.91);\n  --orange-9: oklch(0.665 0.19 44.18);\n  --orange-10: oklch(0.705 0.1786 43.45);\n  --orange-11: oklch(0.74 0.1368 42.73);\n  --orange-12: oklch(0.915 0.0461 42);\n  --orange-contrast: oklch(0.2 0.05 44.18);\n  --teal-1: oklch(0.178 0.0098 181);\n  --teal-2: oklch(0.206 0.0127 181.36);\n  --teal-3: oklch(0.262 0.0375 181.73);\n  --teal-4: oklch(0.304 0.0539 182.09);\n  --teal-5: oklch(0.346 0.0609 182.45);\n  --teal-6: oklch(0.392 0.0656 182.82);\n  --teal-7: oklch(0.45 0.0726 183.18);\n  --teal-8: oklch(0.525 0.0843 183.55);\n  --teal-9: oklch(0.5507 0.0976 183.91);\n  --teal-10: oklch(0.5907 0.0917 184.27);\n  --teal-11: oklch(0.74 0.0703 184.64);\n  --teal-12: oklch(0.915 0.0293 185);\n  --teal-contrast: oklch(1 0 0);\n  --violet-1: oklch(0.178 0.0215 294);\n  --violet-2: oklch(0.206 0.028 294);\n  --violet-3: oklch(0.262 0.0688 294);\n  --violet-4: oklch(0.304 0.0989 294);\n  --violet-5: oklch(0.346 0.1118 294);\n  --violet-6: oklch(0.392 0.1204 294);\n  --violet-7: oklch(0.45 0.1333 294);\n  --violet-8: oklch(0.525 0.1548 294);\n  --violet-9: oklch(0.535 0.215 294);\n  --violet-10: oklch(0.575 0.2021 294);\n  --violet-11: oklch(0.74 0.1492 294);\n  --violet-12: oklch(0.915 0.0453 294);\n  --violet-contrast: oklch(1 0 0);\n  --pink-1: oklch(0.178 0.0195 352);\n  --pink-2: oklch(0.206 0.0254 352);\n  --pink-3: oklch(0.262 0.0624 352);\n  --pink-4: oklch(0.304 0.0897 352);\n  --pink-5: oklch(0.346 0.1014 352);\n  --pink-6: oklch(0.392 0.1092 352);\n  --pink-7: oklch(0.45 0.1209 352);\n  --pink-8: oklch(0.525 0.1404 352);\n  --pink-9: oklch(0.585 0.195 352);\n  --pink-10: oklch(0.625 0.1833 352);\n  --pink-11: oklch(0.74 0.1404 352);\n  --pink-12: oklch(0.915 0.0505 352);\n  --pink-contrast: oklch(1 0 0);\n\n  /* Semantic roles */\n  --background: var(--gray-1);\n  --foreground: var(--gray-12);\n  --card: var(--gray-2);\n  --card-foreground: var(--gray-12);\n  --popover: var(--gray-2);\n  --popover-foreground: var(--gray-12);\n  --field: var(--gray-1);\n  --surface-raised: var(--gray-5);\n  --surface: var(--gray-1);\n  --surface-foreground: var(--gray-12);\n  --primary: var(--gray-12);\n  --primary-foreground: var(--gray-1);\n  --secondary: var(--gray-3);\n  --secondary-foreground: var(--gray-12);\n  --muted: var(--gray-3);\n  --muted-foreground: var(--gray-11);\n  --accent: var(--gray-4);\n  --accent-foreground: var(--gray-12);\n  --brand: var(--brand-9);\n  --brand-foreground: var(--brand-contrast);\n  --link: var(--brand-11);\n  --destructive: var(--red-10);\n  --destructive-foreground: var(--red-contrast);\n  --success: var(--green-9);\n  --success-foreground: var(--green-contrast);\n  --warning: var(--amber-9);\n  --warning-foreground: var(--amber-contrast);\n  --info: var(--blue-9);\n  --info-foreground: var(--blue-contrast);\n  --border: var(--gray-6);\n  --border-strong: var(--gray-7);\n  --input: var(--gray-9);\n  --ring: var(--brand-10);\n  --edge: color-mix(in oklab, var(--gray-12) 12%, transparent);\n  --overlay: color-mix(in oklab, oklch(0 0 0) 60%, transparent);\n  --selection: var(--brand-6);\n  --chart-1: var(--brand-10);\n  --chart-2: var(--teal-9);\n  --chart-3: var(--violet-10);\n  --chart-4: var(--orange-9);\n  --chart-5: var(--pink-10);\n  --sidebar: var(--gray-1);\n  --sidebar-foreground: var(--gray-12);\n  --sidebar-primary: var(--gray-12);\n  --sidebar-primary-foreground: var(--gray-1);\n  --sidebar-accent: var(--gray-4);\n  --sidebar-accent-foreground: var(--gray-12);\n  --sidebar-border: var(--gray-5);\n  --sidebar-ring: var(--brand-10);\n\n  /* Elevation */\n  --prfct-shadow-xs: 0 1px 2px 0 oklch(0 0 0 / 0.4);\n  --prfct-shadow-sm: 0 1px 2px -1px oklch(0 0 0 / 0.5), 0 1px 3px 0 oklch(0 0 0 / 0.4);\n  --prfct-shadow-md: 0 1px 2px 0 oklch(0 0 0 / 0.4), 0 2px 4px -1px oklch(0 0 0 / 0.4), 0 6px 12px -3px oklch(0 0 0 / 0.5);\n  --prfct-shadow-lg: 0 1px 3px 0 oklch(0 0 0 / 0.4), 0 4px 8px -2px oklch(0 0 0 / 0.45), 0 14px 28px -6px oklch(0 0 0 / 0.6);\n  --prfct-shadow-xl: 0 2px 4px 0 oklch(0 0 0 / 0.4), 0 8px 16px -4px oklch(0 0 0 / 0.5), 0 24px 48px -8px oklch(0 0 0 / 0.7);\n  --prfct-shadow-2xl: 0 4px 8px 0 oklch(0 0 0 / 0.4), 0 16px 32px -8px oklch(0 0 0 / 0.6), 0 40px 80px -16px oklch(0 0 0 / 0.8);\n  --prfct-shadow-raised: 0 0 #0000;\n}\n\n/*\n * Motion — duration utilities (duration-fast, duration-slow, …). Like\n * Tailwind's own duration-*, they set the transition duration and --tw-duration\n * (which tw-animate-css reads for animate-in/out) but never animation-duration,\n * so an element with a transition isn't mistaken for an animated one.\n */\n@utility duration-instant {\n  --tw-duration: var(--duration-instant);\n  transition-duration: var(--duration-instant);\n}\n\n@utility duration-fast {\n  --tw-duration: var(--duration-fast);\n  transition-duration: var(--duration-fast);\n}\n\n@utility duration-base {\n  --tw-duration: var(--duration-base);\n  transition-duration: var(--duration-base);\n}\n\n@utility duration-moderate {\n  --tw-duration: var(--duration-moderate);\n  transition-duration: var(--duration-moderate);\n}\n\n@utility duration-slow {\n  --tw-duration: var(--duration-slow);\n  transition-duration: var(--duration-slow);\n}\n\n@utility duration-slower {\n  --tw-duration: var(--duration-slower);\n  transition-duration: var(--duration-slower);\n}\n\n@utility duration-spring {\n  --tw-duration: var(--duration-spring);\n  transition-duration: var(--duration-spring);\n}\n\n@utility duration-bounce {\n  --tw-duration: var(--duration-bounce);\n  transition-duration: var(--duration-bounce);\n}\n\n/* Layers — z-index utilities (z-overlay, z-popover, …) */\n@utility z-base {\n  z-index: var(--z-base);\n}\n\n@utility z-raised {\n  z-index: var(--z-raised);\n}\n\n@utility z-sticky {\n  z-index: var(--z-sticky);\n}\n\n@utility z-overlay {\n  z-index: var(--z-overlay);\n}\n\n@utility z-modal {\n  z-index: var(--z-modal);\n}\n\n@utility z-popover {\n  z-index: var(--z-popover);\n}\n\n@utility z-toast {\n  z-index: var(--z-toast);\n}\n\n@utility z-tooltip {\n  z-index: var(--z-tooltip);\n}\n",
      "type": "registry:file",
      "target": "styles/prfct/tokens.css"
    },
    {
      "path": "styles/base.css",
      "content": "/**\n * prfct base layer.\n *\n * Opinionated defaults every prfct surface relies on: typography rendering,\n * focus visibility, selection, scrollbars and user-preference adaptations.\n */\n\n@layer base {\n  *,\n  ::before,\n  ::after {\n    border-color: var(--border);\n  }\n\n  html {\n    font-family: var(--font-sans);\n    font-optical-sizing: auto;\n    font-synthesis: none;\n    text-rendering: optimizeLegibility;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    -webkit-text-size-adjust: 100%;\n    text-size-adjust: 100%;\n    -webkit-tap-highlight-color: transparent;\n    scrollbar-color: var(--gray-7) transparent;\n  }\n\n  body {\n    background-color: var(--background);\n    color: var(--foreground);\n  }\n\n  /*\n   * Display roles carry prfct's headline voice: Inter's single-storey \"a\"\n   * (cv11) and round quotes (ss03). UI and body text keep the default,\n   * most legible glyphs.\n   */\n  [class*=\"text-display-\"] {\n    font-feature-settings: \"cv11\", \"ss03\";\n  }\n\n  /* Eyebrows: uppercase with case-sensitive punctuation. */\n  .text-overline {\n    text-transform: uppercase;\n    font-feature-settings: \"case\";\n  }\n\n  /* Headings balance their lines; paragraphs avoid orphans. */\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    text-wrap: balance;\n  }\n\n  p,\n  li,\n  figcaption,\n  blockquote {\n    text-wrap: pretty;\n  }\n\n  code,\n  kbd,\n  samp,\n  pre {\n    font-family: var(--font-mono);\n    font-feature-settings: normal;\n  }\n\n  ::selection {\n    background-color: var(--selection);\n    color: var(--foreground);\n  }\n\n  /*\n   * Focus: a visible indicator for every keyboard-focusable element that does\n   * not style its own. Outlines (not box-shadows) survive Windows High\n   * Contrast / forced-colors mode.\n   */\n  :focus-visible {\n    outline: 2px solid var(--ring);\n    outline-offset: 2px;\n  }\n\n  button:not(:disabled),\n  [role=\"button\"]:not([aria-disabled=\"true\"]),\n  summary {\n    cursor: pointer;\n  }\n\n  [hidden]:where(:not([hidden=\"until-found\"])) {\n    display: none !important;\n  }\n\n  img,\n  video {\n    max-width: 100%;\n    height: auto;\n  }\n\n  hr {\n    border-color: var(--border);\n  }\n}\n\n/* -------------------------------------------------------------------------- */\n/*                          User preference adaptations                        */\n/* -------------------------------------------------------------------------- */\n\n/* Honor reduced motion everywhere. Components never rely on animations for\n   meaning, so collapsing them to an instant is always safe. */\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}\n\n/* Increased contrast: strengthen lines and secondary text. */\n@media (prefers-contrast: more) {\n  :root {\n    --border: var(--gray-8);\n    --border-strong: var(--gray-9);\n    --input: var(--gray-11);\n    --muted-foreground: var(--gray-12);\n  }\n\n  .dark {\n    --border: var(--gray-8);\n    --border-strong: var(--gray-9);\n    --input: var(--gray-11);\n    --muted-foreground: var(--gray-12);\n  }\n}\n\n/* Forced colors (Windows High Contrast): let the system palette win, but keep\n   structure that would otherwise disappear with backgrounds. */\n@media (forced-colors: active) {\n  :focus-visible {\n    outline-color: Highlight;\n  }\n\n  [data-slot=\"switch-thumb\"],\n  [data-slot=\"slider-thumb\"],\n  [data-slot=\"progress-indicator\"],\n  [data-slot=\"slider-range\"] {\n    forced-color-adjust: none;\n    background-color: CanvasText;\n  }\n}\n\n@media print {\n  :root,\n  .dark {\n    color-scheme: light;\n  }\n\n  body {\n    background: white;\n    color: black;\n  }\n}\n",
      "type": "registry:file",
      "target": "styles/prfct/base.css"
    },
    {
      "path": "styles/utilities.css",
      "content": "/**\n * prfct utilities.\n *\n * Small, composable behaviors shared across components. Each one encodes a\n * system decision (motion choreography, focus appearance) so components stay\n * consistent without repeating long class lists.\n */\n\n/* -------------------------------------------------------------------------- */\n/*                                   Motion                                   */\n/* -------------------------------------------------------------------------- */\n\n/*\n * Floating surfaces (menus, popovers, selects, tooltips, hover cards).\n * Enter: fade + scale from the trigger, nudged away from the anchor side.\n * Exit: faster, accelerating — things leave quicker than they arrive.\n */\n@utility popup-motion {\n  transform-origin: var(--transform-origin, center);\n  transition-property: opacity, scale, translate;\n  transition-duration: var(--duration-moderate);\n  transition-timing-function: var(--ease-enter);\n\n  &[data-starting-style],\n  &[data-ending-style] {\n    opacity: 0;\n    scale: 0.96;\n  }\n\n  &[data-side=\"bottom\"]:is([data-starting-style], [data-ending-style]) {\n    translate: 0 -4px;\n  }\n  &[data-side=\"top\"]:is([data-starting-style], [data-ending-style]) {\n    translate: 0 4px;\n  }\n  &:is([data-side=\"right\"], [data-side=\"inline-end\"]):is([data-starting-style], [data-ending-style]) {\n    translate: -4px 0;\n  }\n  &:is([data-side=\"left\"], [data-side=\"inline-start\"]):is([data-starting-style], [data-ending-style]) {\n    translate: 4px 0;\n  }\n\n  &[data-ending-style] {\n    transition-duration: var(--duration-fast);\n    transition-timing-function: var(--ease-exit);\n  }\n\n  /* Instant when a sibling popup takes over (e.g. hovering between menus). */\n  &[data-instant] {\n    transition-duration: 0ms;\n  }\n}\n\n/*\n * Modal surfaces (dialogs, alert dialogs, command palette). Animates\n * `transform` so the `translate` property stays free for positioning.\n */\n@utility modal-motion {\n  transition-property: opacity, transform;\n  transition-duration: var(--duration-slow);\n  transition-timing-function: var(--ease-enter);\n\n  &[data-starting-style],\n  &[data-ending-style] {\n    opacity: 0;\n    transform: translateY(0.5rem) scale(0.96);\n  }\n\n  &[data-ending-style] {\n    transition-duration: var(--duration-base);\n    transition-timing-function: var(--ease-exit);\n  }\n}\n\n/* Scrims behind modal surfaces. */\n@utility backdrop-motion {\n  transition-property: opacity, backdrop-filter;\n  transition-duration: var(--duration-slow);\n  transition-timing-function: var(--ease-standard);\n\n  &[data-starting-style],\n  &[data-ending-style] {\n    opacity: 0;\n  }\n\n  &[data-ending-style] {\n    transition-duration: var(--duration-base);\n  }\n}\n\n/* -------------------------------------------------------------------------- */\n/*                                    Focus                                   */\n/* -------------------------------------------------------------------------- */\n\n/*\n * Tailwind v4's `outline-none` and `outline-hidden` set --tw-outline-style to\n * none, which also blanks any `focus-visible:outline-*` utility on the same\n * element — the focus ring silently disappears. Restore the style while focus\n * is visible. Unlayered on purpose, so it outranks the utility layer; the\n * property doesn't inherit, so only the focused element is affected.\n */\n.outline-none:focus-visible,\n.outline-hidden:focus-visible,\n.outline-none:has(:focus-visible),\n.outline-hidden:has(:focus-visible) {\n  --tw-outline-style: solid;\n}\n\n/* Discrete controls: a crisp 2px ring offset from the element. */\n@utility focus-ring {\n  &:focus-visible {\n    outline: 2px solid var(--ring);\n    outline-offset: 2px;\n  }\n}\n\n/* Controls inside tight containers (list items, table cells): drawn inside. */\n@utility focus-ring-inset {\n  &:focus-visible {\n    outline: 2px solid var(--ring);\n    outline-offset: -2px;\n  }\n}\n\n/*\n * Text fields: brand border plus a soft halo. `outline` stays transparent so\n * forced-colors mode still paints a system focus ring.\n */\n@utility focus-field {\n  &:focus-visible,\n  &:focus-within:has(:focus-visible) {\n    outline: 2px solid transparent;\n    outline-offset: 2px;\n    border-color: var(--ring);\n    box-shadow:\n      0 0 0 3px color-mix(in oklab, var(--ring) 20%, transparent),\n      var(--prfct-shadow-xs);\n  }\n\n  &[aria-invalid=\"true\"]:focus-visible,\n  &:has([aria-invalid=\"true\"]):focus-within:has(:focus-visible) {\n    border-color: var(--red-9);\n    box-shadow:\n      0 0 0 3px color-mix(in oklab, var(--red-9) 20%, transparent),\n      var(--prfct-shadow-xs);\n  }\n}\n\n/* -------------------------------------------------------------------------- */\n/*                                   Surface                                  */\n/* -------------------------------------------------------------------------- */\n\n/* A 1px inner highlight on solid fills — the quiet bevel of a physical key. */\n@utility bevel {\n  box-shadow:\n    inset 0 1px 0 0 color-mix(in oklab, white 14%, transparent),\n    inset 0 -1px 0 0 color-mix(in oklab, black 8%, transparent),\n    var(--prfct-shadow-xs);\n}\n\n@utility scrollbar-thin {\n  scrollbar-width: thin;\n  scrollbar-color: var(--gray-7) transparent;\n}\n\n/* Tabular figures for data that must align in columns. */\n@utility numeric {\n  font-variant-numeric: tabular-nums;\n}\n\n/* Blueprint grid used on documentation and marketing canvases. */\n@utility bg-grid {\n  background-image:\n    linear-gradient(to right, var(--gray-4) 1px, transparent 1px),\n    linear-gradient(to bottom, var(--gray-4) 1px, transparent 1px);\n  background-size: 2rem 2rem;\n}\n\n@utility bg-dots {\n  background-image: radial-gradient(var(--gray-7) 1px, transparent 1px);\n  background-size: 1rem 1rem;\n}\n\n/* -------------------------------------------------------------------------- */\n/*                                 Keyframes                                  */\n/* -------------------------------------------------------------------------- */\n\n@keyframes skeleton-sweep {\n  from {\n    translate: -100% 0;\n  }\n  to {\n    translate: 100% 0;\n  }\n}\n\n@keyframes progress-indeterminate {\n  from {\n    translate: -100% 0;\n  }\n  to {\n    translate: 300% 0;\n  }\n}\n",
      "type": "registry:file",
      "target": "styles/prfct/utilities.css"
    },
    {
      "path": "components/theme-provider.tsx",
      "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ThemeProvider as NextThemesProvider, useTheme } from \"next-themes\"\n\nfunction ThemeProvider({\n  children,\n  ...props\n}: React.ComponentProps<typeof NextThemesProvider>) {\n  return (\n    <NextThemesProvider\n      attribute=\"class\"\n      defaultTheme=\"system\"\n      enableSystem\n      disableTransitionOnChange\n      {...props}\n    >\n      <ThemeHotkey />\n      {children}\n    </NextThemesProvider>\n  )\n}\n\nfunction isTypingTarget(target: EventTarget | null) {\n  if (!(target instanceof HTMLElement)) {\n    return false\n  }\n\n  return (\n    target.isContentEditable ||\n    target.tagName === \"INPUT\" ||\n    target.tagName === \"TEXTAREA\" ||\n    target.tagName === \"SELECT\"\n  )\n}\n\nfunction ThemeHotkey() {\n  const { resolvedTheme, setTheme } = useTheme()\n\n  React.useEffect(() => {\n    function onKeyDown(event: KeyboardEvent) {\n      if (event.defaultPrevented || event.repeat) {\n        return\n      }\n\n      if (event.metaKey || event.ctrlKey || event.altKey) {\n        return\n      }\n\n      if (event.key.toLowerCase() !== \"d\") {\n        return\n      }\n\n      if (isTypingTarget(event.target)) {\n        return\n      }\n\n      setTheme(resolvedTheme === \"dark\" ? \"light\" : \"dark\")\n    }\n\n    window.addEventListener(\"keydown\", onKeyDown)\n\n    return () => {\n      window.removeEventListener(\"keydown\", onKeyDown)\n    }\n  }, [resolvedTheme, setTheme])\n\n  return null\n}\n\nexport { ThemeProvider }\n",
      "type": "registry:component"
    }
  ],
  "docs": "prfct is installed. Two more steps:\n\n1. In your global stylesheet, import prfct after shadcn's variants and remove\n   the :root, .dark and @theme inline blocks `shadcn init` generated:\n     @import \"../styles/prfct/index.css\";\n\n2. Download the Inter subset into public/fonts:\n     curl --create-dirs -o public/fonts/inter-4.1-variable.woff2 https://www.prfct.dev/fonts/inter-4.1-variable.woff2\n     curl -o public/fonts/inter-4.1-variable-italic.woff2 https://www.prfct.dev/fonts/inter-4.1-variable-italic.woff2",
  "type": "registry:style"
}