{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "tokens",
  "type": "registry:style",
  "title": "Astry tokens",
  "description": "CSS variables (light + dark) and Tailwind theme extension. Brand primitives → semantic tokens.",
  "homepage": "https://brand.astry.agency",
  "files": [
    {
      "path": "app/globals.css",
      "type": "registry:style",
      "target": "app/globals.css",
      "content": "@layer base {\n  :root,\n  [data-theme=\"light\"] {\n    /* Brand primitives */\n    --astry-blue: #0051FF;\n    --astry-blue-2: #2D6BFF;\n    --deep-navy: #0B1F3A;\n    --charcoal: #111111;\n    --paper-white: #F4F4F2;\n    --cloud-blue: #E0EAFF;\n\n    /* Semantic — light */\n    --bg: #F4F4F2;\n    --canvas: #FFFFFF;\n    --subtle: #F2F4F8;\n    --subtler: #FAFAF9;\n    --surface: #FFFFFF;\n    --surface-raised: #FFFFFF;\n\n    --border: #E2E5EA;\n    --border-strong: #C9CFD8;\n\n    --text: #111111;\n    --text-muted: #4F5560;\n    --text-subtle: #7A818D;\n    --text-on-brand: #FFFFFF;\n\n    --brand: #0051FF;\n    --brand-hover: #0042D6;\n    --brand-pressed: #0036B0;\n    --brand-soft: #E0EAFF;\n    --brand-softer: #F0F4FF;\n\n    --success: #16A34A;\n    --success-soft: #DCFCE7;\n    --warning: #D97706;\n    --warning-soft: #FEF3C7;\n    --danger: #DC2626;\n    --danger-soft: #FEE2E2;\n    --info: #0051FF;\n    --info-soft: #E0EAFF;\n\n    /* Type */\n    --font-sans: var(--font-neue-haas), \"Neue Haas Grotesk Display Pro\", \"Helvetica Neue\", system-ui, sans-serif;\n    --font-mono: var(--font-inter), \"Inter\", ui-monospace, monospace;\n\n    /* Radius — Astry runs sharp. No radius globally. Pill kept for switch / dots / slider thumb. */\n    --radius-xs: 0;\n    --radius-sm: 0;\n    --radius-md: 0;\n    --radius-lg: 0;\n    --radius-xl: 0;\n    --radius-2xl: 0;\n    --radius-pill: 9999px;\n    --radius: 0;\n\n    /* Spacing 4-px scale */\n    --space-1: 4px;\n    --space-2: 8px;\n    --space-3: 12px;\n    --space-4: 16px;\n    --space-5: 20px;\n    --space-6: 24px;\n    --space-8: 32px;\n    --space-10: 40px;\n    --space-12: 48px;\n    --space-16: 64px;\n    --space-20: 80px;\n    --space-24: 96px;\n\n    /* Elevation */\n    --shadow-xs: 0 1px 0 rgba(11, 31, 58, 0.05);\n    --shadow-sm: 0 1px 2px rgba(11, 31, 58, 0.06), 0 1px 3px rgba(11, 31, 58, 0.04);\n    --shadow-md: 0 4px 8px rgba(11, 31, 58, 0.08), 0 2px 4px rgba(11, 31, 58, 0.04);\n    --shadow-lg: 0 12px 24px rgba(11, 31, 58, 0.12), 0 4px 8px rgba(11, 31, 58, 0.06);\n\n    /* Motion */\n    --dur-instant: 80ms;\n    --dur-fast: 140ms;\n    --dur-base: 200ms;\n    --dur-slow: 320ms;\n    --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);\n  }\n\n  [data-theme=\"dark\"] {\n    /* Astry palette — Slate base · Ivory ink · Infra-red accent ·\n       Deep-blue + Forest as tonal accent surfaces. */\n    --bg: #0F1115;\n    --canvas: #14161B;\n    --subtle: #191B22;\n    --subtler: #131519;\n    --surface: #14161B;\n    --surface-raised: #1C1F27;\n\n    --border: #262932;\n    --border-strong: #3B3F4B;\n\n    --text: #F2F1EC;\n    --text-muted: #9C9C95;\n    --text-subtle: #6B6C68;\n    --text-on-brand: #F2F1EC;\n\n    --brand: #E43D1A;\n    --brand-hover: #F1502D;\n    --brand-pressed: #C0330F;\n    --brand-soft: rgba(228, 61, 26, 0.15);\n    --brand-softer: rgba(228, 61, 26, 0.07);\n\n    --success: #4FA56F;\n    --success-soft: rgba(79, 165, 111, 0.14);\n    --warning: #D7A046;\n    --warning-soft: rgba(215, 160, 70, 0.14);\n    --danger: #E43D1A;\n    --danger-soft: rgba(228, 61, 26, 0.14);\n    --info: #5A7AC8;\n    --info-soft: rgba(90, 122, 200, 0.16);\n\n    --shadow-xs: 0 1px 0 rgba(0, 0, 0, 0.4);\n    --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.5), 0 1px 3px rgba(0, 0, 0, 0.3);\n    --shadow-md: 0 4px 8px rgba(0, 0, 0, 0.55), 0 2px 4px rgba(0, 0, 0, 0.35);\n    --shadow-lg: 0 12px 24px rgba(0, 0, 0, 0.65), 0 4px 8px rgba(0, 0, 0, 0.45);\n  }\n\n  /* shadcn/radix legacy shim — kept so dashboard primitives don't explode */\n  :root {\n    --background: 60 6% 95%;\n    --foreground: 0 0% 7%;\n    --card: 0 0% 100%;\n    --card-foreground: 0 0% 7%;\n    --popover: 0 0% 100%;\n    --popover-foreground: 0 0% 7%;\n    --primary: 222 73% 48%;\n    --primary-foreground: 0 0% 100%;\n    --secondary: 220 35% 94%;\n    --secondary-foreground: 0 0% 7%;\n    --muted: 220 35% 94%;\n    --muted-foreground: 220 9% 35%;\n    --accent: 220 35% 94%;\n    --accent-foreground: 0 0% 7%;\n    --destructive: 0 73% 50%;\n    --destructive-foreground: 0 0% 100%;\n    --input: 220 12% 90%;\n    --ring: 222 73% 48%;\n    --chart-1: 222 73% 48%;\n    --chart-2: 213 60% 14%;\n    --chart-3: 142 71% 35%;\n    --chart-4: 30 91% 41%;\n    --chart-5: 0 73% 50%;\n    --sidebar-background: 0 0% 98%;\n    --sidebar-foreground: 0 0% 7%;\n    --sidebar-primary: 222 73% 48%;\n    --sidebar-primary-foreground: 0 0% 100%;\n    --sidebar-accent: 220 35% 94%;\n    --sidebar-accent-foreground: 0 0% 7%;\n    --sidebar-border: 220 12% 90%;\n    --sidebar-ring: 222 73% 48%;\n  }\n\n  html, body {\n    background-color: var(--bg);\n    color: var(--text);\n    font-family: var(--font-sans);\n    font-feature-settings: \"ss01\", \"cv01\";\n  }\n\n  ::selection { background: var(--brand); color: var(--text-on-brand); }\n  *:focus { outline: none; }\n  *:focus-visible {\n    outline: 2px solid var(--brand);\n    outline-offset: 2px;\n    border-radius: var(--radius-sm);\n  }\n\n  .btn { @apply !capitalize; }\n}"
    }
  ],
  "cssVars": {
    "light": {
      "--astry-blue": "#0051FF",
      "--astry-blue-2": "#2D6BFF",
      "--deep-navy": "#0B1F3A",
      "--charcoal": "#111111",
      "--paper-white": "#F4F4F2",
      "--cloud-blue": "#E0EAFF",
      "--bg": "#F4F4F2",
      "--canvas": "#FFFFFF",
      "--subtle": "#F2F4F8",
      "--subtler": "#FAFAF9",
      "--surface": "#FFFFFF",
      "--surface-raised": "#FFFFFF",
      "--border": "#E2E5EA",
      "--border-strong": "#C9CFD8",
      "--text": "#111111",
      "--text-muted": "#4F5560",
      "--text-subtle": "#7A818D",
      "--text-on-brand": "#FFFFFF",
      "--brand": "#0051FF",
      "--brand-hover": "#0042D6",
      "--brand-pressed": "#0036B0",
      "--brand-soft": "#E0EAFF",
      "--brand-softer": "#F0F4FF",
      "--success": "#16A34A",
      "--success-soft": "#DCFCE7",
      "--warning": "#D97706",
      "--warning-soft": "#FEF3C7",
      "--danger": "#DC2626",
      "--danger-soft": "#FEE2E2",
      "--info": "#0051FF",
      "--info-soft": "#E0EAFF",
      "--font-sans": "var(--font-neue-haas), \"Neue Haas Grotesk Display Pro\", \"Helvetica Neue\", system-ui, sans-serif",
      "--font-mono": "var(--font-inter), \"Inter\", ui-monospace, monospace",
      "--radius-xs": "0",
      "--radius-sm": "0",
      "--radius-md": "0",
      "--radius-lg": "0",
      "--radius-xl": "0",
      "--radius-2xl": "0",
      "--radius-pill": "9999px",
      "--radius": "0",
      "--space-1": "4px",
      "--space-2": "8px",
      "--space-3": "12px",
      "--space-4": "16px",
      "--space-5": "20px",
      "--space-6": "24px",
      "--space-8": "32px",
      "--space-10": "40px",
      "--space-12": "48px",
      "--space-16": "64px",
      "--space-20": "80px",
      "--space-24": "96px",
      "--shadow-xs": "0 1px 0 rgba(11, 31, 58, 0.05)",
      "--shadow-sm": "0 1px 2px rgba(11, 31, 58, 0.06), 0 1px 3px rgba(11, 31, 58, 0.04)",
      "--shadow-md": "0 4px 8px rgba(11, 31, 58, 0.08), 0 2px 4px rgba(11, 31, 58, 0.04)",
      "--shadow-lg": "0 12px 24px rgba(11, 31, 58, 0.12), 0 4px 8px rgba(11, 31, 58, 0.06)",
      "--dur-instant": "80ms",
      "--dur-fast": "140ms",
      "--dur-base": "200ms",
      "--dur-slow": "320ms",
      "--ease-standard": "cubic-bezier(0.4, 0, 0.2, 1)"
    },
    "dark": {
      "--bg": "#0F1115",
      "--canvas": "#14161B",
      "--subtle": "#191B22",
      "--subtler": "#131519",
      "--surface": "#14161B",
      "--surface-raised": "#1C1F27",
      "--border": "#262932",
      "--border-strong": "#3B3F4B",
      "--text": "#F2F1EC",
      "--text-muted": "#9C9C95",
      "--text-subtle": "#6B6C68",
      "--text-on-brand": "#F2F1EC",
      "--brand": "#E43D1A",
      "--brand-hover": "#F1502D",
      "--brand-pressed": "#C0330F",
      "--brand-soft": "rgba(228, 61, 26, 0.15)",
      "--brand-softer": "rgba(228, 61, 26, 0.07)",
      "--success": "#4FA56F",
      "--success-soft": "rgba(79, 165, 111, 0.14)",
      "--warning": "#D7A046",
      "--warning-soft": "rgba(215, 160, 70, 0.14)",
      "--danger": "#E43D1A",
      "--danger-soft": "rgba(228, 61, 26, 0.14)",
      "--info": "#5A7AC8",
      "--info-soft": "rgba(90, 122, 200, 0.16)",
      "--shadow-xs": "0 1px 0 rgba(0, 0, 0, 0.4)",
      "--shadow-sm": "0 1px 2px rgba(0, 0, 0, 0.5), 0 1px 3px rgba(0, 0, 0, 0.3)",
      "--shadow-md": "0 4px 8px rgba(0, 0, 0, 0.55), 0 2px 4px rgba(0, 0, 0, 0.35)",
      "--shadow-lg": "0 12px 24px rgba(0, 0, 0, 0.65), 0 4px 8px rgba(0, 0, 0, 0.45)"
    }
  },
  "tailwind": {
    "config": {
      "theme": {
        "extend": {
          "colors": {
            "bg": "var(--bg)",
            "canvas": "var(--canvas)",
            "subtle": "var(--subtle)",
            "subtler": "var(--subtler)",
            "surface": "var(--surface)",
            "surface-raised": "var(--surface-raised)",
            "text": "var(--text)",
            "text-muted": "var(--text-muted)",
            "text-subtle": "var(--text-subtle)",
            "text-on-brand": "var(--text-on-brand)",
            "brand": "var(--brand)",
            "brand-hover": "var(--brand-hover)",
            "brand-pressed": "var(--brand-pressed)",
            "brand-soft": "var(--brand-soft)",
            "brand-softer": "var(--brand-softer)",
            "success": "var(--success)",
            "success-soft": "var(--success-soft)",
            "warning": "var(--warning)",
            "warning-soft": "var(--warning-soft)",
            "danger": "var(--danger)",
            "danger-soft": "var(--danger-soft)",
            "info": "var(--info)",
            "info-soft": "var(--info-soft)",
            "border": "var(--border)",
            "border-strong": "var(--border-strong)",
            "astry-blue": "var(--astry-blue)",
            "astry-blue-2": "var(--astry-blue-2)",
            "deep-navy": "var(--deep-navy)",
            "charcoal": "var(--charcoal)",
            "paper-white": "var(--paper-white)",
            "cloud-blue": "var(--cloud-blue)"
          },
          "borderRadius": {
            "xs": "var(--radius-xs)",
            "sm": "var(--radius-sm)",
            "md": "var(--radius-md)",
            "lg": "var(--radius-lg)",
            "xl": "var(--radius-xl)",
            "2xl": "var(--radius-2xl)",
            "pill": "var(--radius-pill)"
          },
          "transitionDuration": {
            "instant": "var(--dur-instant)",
            "fast": "var(--dur-fast)",
            "base": "var(--dur-base)",
            "slow": "var(--dur-slow)"
          },
          "transitionTimingFunction": {
            "standard": "var(--ease-standard)"
          }
        }
      }
    }
  },
  "meta": {
    "brand": "#0051FF",
    "radiusPolicy": "All sizes resolve to 0 except --radius-pill (9999px) reserved for switch knobs, slider thumbs, status dots, avatar status indicators.",
    "shadowPolicy": "Astry stays flat. No card shadows by default. Hover darkens the border, no translate."
  }
}