{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "hirael",
  "homepage": "https://hirael.com",
  "items": [
    {
      "name": "multi-select",
      "type": "registry:component",
      "title": "Multi Select",
      "description": "Chip-based multi-select with command-palette dropdown, search, select-all and a loading state. Compound and single-prop APIs.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "command",
        "input-group",
        "popover",
        "spinner",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/multi-select.tsx",
          "type": "registry:component",
          "target": "components/multi-select.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/multi-select"
        }
      }
    },
    {
      "name": "number-range",
      "type": "registry:component",
      "title": "Number Range",
      "description": "Two-thumb slider paired with synced number inputs. Min/max/step, currency or unit formatting, keyboard-first.",
      "categories": [
        "inputs"
      ],
      "dependencies": [],
      "registryDependencies": [
        "input-group",
        "slider",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/number-range.tsx",
          "type": "registry:component",
          "target": "components/number-range.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/number-range"
        }
      }
    },
    {
      "name": "year-picker",
      "type": "registry:component",
      "title": "Year Picker",
      "description": "Decade-grid year picker with keyboard nav, min/max bounds, single or range mode.",
      "categories": [
        "pickers"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "popover",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/year-picker.tsx",
          "type": "registry:component",
          "target": "components/year-picker.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/pickers/year-picker"
        }
      }
    },
    {
      "name": "tag-input",
      "type": "registry:component",
      "title": "Tag Input",
      "description": "Chip input with paste-to-split, dedupe, validation hook and max tags.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "https://hirael.com/r/compose-refs.json",
        "input-group",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/tag-input.tsx",
          "type": "registry:component",
          "target": "components/tag-input.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/tag-input"
        }
      }
    },
    {
      "name": "duration-input",
      "type": "registry:component",
      "title": "Duration Input",
      "description": "Segmented duration field over days, hours, minutes and seconds. Digits auto-advance, arrows step, and the value stays a plain number of seconds.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "input-group",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/duration-input.tsx",
          "type": "registry:component",
          "target": "components/duration-input.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/duration-input"
        }
      }
    },
    {
      "name": "number-field",
      "type": "registry:component",
      "title": "Number Field",
      "description": "Number input with step buttons, arrow-key and hold-to-repeat stepping, min and max, and Intl formatting for currency, percent or units. Submits the raw number.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json",
        "input-group",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/number-field.tsx",
          "type": "registry:component",
          "target": "components/number-field.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/number-field"
        }
      }
    },
    {
      "name": "segmented-control",
      "type": "registry:component",
      "title": "Segmented Control",
      "description": "Single-choice control with a sliding thumb. Keyboard works like a radio group and mirrors in RTL. Two sizes, icons, disabled options and a full-width mode.",
      "categories": [
        "inputs"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/segmented-control.tsx",
          "type": "registry:component",
          "target": "components/segmented-control.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/segmented-control"
        }
      }
    },
    {
      "name": "autocomplete",
      "type": "registry:component",
      "title": "Autocomplete",
      "description": "A free-text input with suggestions from a local list or an async search, with optional inline completion, groups and recent entries. The value is whatever you type.",
      "categories": [
        "inputs"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json",
        "input-group",
        "popover",
        "spinner",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/autocomplete.tsx",
          "type": "registry:component",
          "target": "components/autocomplete.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/autocomplete"
        }
      }
    },
    {
      "name": "checkbox-group",
      "type": "registry:component",
      "title": "Checkbox Group",
      "description": "A group of checkboxes with a select-all parent, nested groups, min and max limits, and an optional search that narrows the list.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "checkbox",
        "input-group",
        "label",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/checkbox-group.tsx",
          "type": "registry:component",
          "target": "components/checkbox-group.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/checkbox-group"
        }
      }
    },
    {
      "name": "lazy-select",
      "type": "registry:component",
      "title": "Lazy Select",
      "description": "Autocomplete single-select that defers loading until open and pages through results on scroll. Debounced server-side search with a pluggable lazy paginator hook.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "command",
        "popover",
        "spinner",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/lazy-select.tsx",
          "type": "registry:component",
          "target": "components/lazy-select.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/lazy-select"
        }
      }
    },
    {
      "name": "password-input",
      "type": "registry:component",
      "title": "Password Input",
      "description": "Password field with a show/hide toggle and an optional pluggable strength meter.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "input-group",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/password-input.tsx",
          "type": "registry:component",
          "target": "components/password-input.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/password-input"
        }
      }
    },
    {
      "name": "currency-input",
      "type": "registry:component",
      "title": "Currency Input",
      "description": "Locale-aware grouping with currency-symbol prefix and configurable decimal precision.",
      "categories": [
        "inputs"
      ],
      "dependencies": [],
      "registryDependencies": [
        "input-group",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/currency-input.tsx",
          "type": "registry:component",
          "target": "components/currency-input.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/currency-input"
        }
      }
    },
    {
      "name": "phone-input",
      "type": "registry:component",
      "title": "Phone Input",
      "description": "Phone number field with a country dial-code picker and E.164 output from libphonenumber-js.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "libphonenumber-js",
        "lucide-react"
      ],
      "registryDependencies": [
        "command",
        "https://hirael.com/r/country-select.json",
        "input-group",
        "popover"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/phone-input.tsx",
          "type": "registry:component",
          "target": "components/phone-input.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/phone-input"
        }
      }
    },
    {
      "name": "file-dropzone",
      "type": "registry:component",
      "title": "File Dropzone",
      "description": "Drag-and-drop or click upload zone on react-dropzone, with a file list, type and size validation, and readable rejection messages.",
      "categories": [
        "files"
      ],
      "dependencies": [
        "lucide-react",
        "react-dropzone"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/format-bytes.json",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/file-dropzone.tsx",
          "type": "registry:component",
          "target": "components/file-dropzone.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/files/file-dropzone"
        }
      }
    },
    {
      "name": "rating",
      "type": "registry:component",
      "title": "Rating",
      "description": "Star rating with hover preview, half-star precision, read-only mode and sm / md / lg sizes.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/rating.tsx",
          "type": "registry:component",
          "target": "components/rating.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/rating"
        }
      }
    },
    {
      "name": "timeline",
      "type": "registry:component",
      "title": "Timeline",
      "description": "Vertical event timeline with default or icon dots, tone variants and labelled time / title / description parts.",
      "categories": [
        "data"
      ],
      "dependencies": [
        "class-variance-authority"
      ],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/timeline.tsx",
          "type": "registry:component",
          "target": "components/timeline.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/timeline"
        }
      }
    },
    {
      "name": "kbd-button",
      "type": "registry:component",
      "title": "Kbd Button",
      "description": "A pressable 3D keycap with hover lift and a pressed state, for shortcut legends and keyboard-driven UIs. Pairs with shadcn's Kbd and KbdGroup for inline shortcuts and chords.",
      "categories": [
        "display"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/kbd-button.tsx",
          "type": "registry:component",
          "target": "components/kbd-button.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/kbd-button"
        }
      }
    },
    {
      "name": "callout",
      "type": "registry:component",
      "title": "Callout",
      "description": "MDX-style admonition with neutral / info / success / warning / destructive variants, CalloutTitle and CalloutDescription parts, and an optional icon override. Ships --info / --success / --warning theme tokens.",
      "categories": [
        "display"
      ],
      "dependencies": [
        "class-variance-authority",
        "lucide-react"
      ],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/callout.tsx",
          "type": "registry:component",
          "target": "components/callout.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/callout"
        }
      }
    },
    {
      "name": "scroll-progress",
      "type": "registry:component",
      "title": "Scroll Progress",
      "description": "Fixed reading progress bar. Tracks document scroll by default or a scoped container ref.",
      "categories": [
        "display"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/scroll-progress.tsx",
          "type": "registry:component",
          "target": "components/scroll-progress.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/scroll-progress"
        }
      }
    },
    {
      "name": "hero-01",
      "type": "registry:block",
      "title": "Hero 01",
      "description": "Full-bleed hero card over an animated light-beam shader, with a glass pill nav, a trust badge, a serif headline, dual CTA and a three-stat footer.",
      "categories": [
        "blocks",
        "hero"
      ],
      "dependencies": [
        "lucide-react",
        "shaders"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/use-reduced-motion.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/hero-01/hero-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-01.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/blocks/hero-01/hero-01-backdrop.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-01-backdrop.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/hero/hero-01"
        }
      }
    },
    {
      "name": "hero-02",
      "type": "registry:block",
      "title": "Hero 02",
      "description": "Centered hero over animated gradient bars, with a release pill, a serif headline with an underlined accent, dual CTA and a wordmark strip.",
      "categories": [
        "blocks",
        "hero"
      ],
      "dependencies": [
        "lucide-react",
        "shaders"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/use-reduced-motion.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/hero-02/hero-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-02.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/blocks/hero-02/hero-02-backdrop.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-02-backdrop.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/hero/hero-02"
        }
      }
    },
    {
      "name": "hero-03",
      "type": "registry:block",
      "title": "Hero 03",
      "description": "Editorial centered hero on a faded grid, with a serif headline, sub-copy, dual CTA and a logo cloud of customer wordmarks.",
      "categories": [
        "blocks",
        "hero"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/hero-03/hero-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/hero/hero-03"
        }
      }
    },
    {
      "name": "hero-04",
      "type": "registry:block",
      "title": "Hero 04",
      "description": "Full-bleed image-banner hero with a dark scrim, a slim nav, a serif headline and dual CTA aligned to the bottom.",
      "categories": [
        "blocks",
        "hero"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/hero-04/hero-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/hero/hero-04"
        }
      }
    },
    {
      "name": "hero-05",
      "type": "registry:block",
      "title": "Hero 05",
      "description": "Full-bleed hero card over an animated aurora shader, with a pill nav, a live status pill, a serif headline, dual CTA and an avatar social-proof row.",
      "categories": [
        "blocks",
        "hero"
      ],
      "dependencies": [
        "lucide-react",
        "shaders"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/use-reduced-motion.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/hero-05/hero-05.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-05.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/blocks/hero-05/hero-05-backdrop.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-05-backdrop.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/hero/hero-05"
        }
      }
    },
    {
      "name": "feature-01",
      "type": "registry:block",
      "title": "Feature 01",
      "description": "One bordered card of stacked stripes: a centered intro, three alternating rows pairing an indexed layer with a small deploys, previews or release-rules mockup, then a three-column primitives row and a pair of link calls to action.",
      "categories": [
        "blocks",
        "feature"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/feature-01/feature-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/feature-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/features/feature-01"
        }
      }
    },
    {
      "name": "feature-02",
      "type": "registry:block",
      "title": "Feature 02",
      "description": "Centered header above a six-item list of what every catalog item includes, laid out on hairline rows with a tabular index kicker.",
      "categories": [
        "blocks",
        "feature"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/feature-02/feature-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/feature-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/features/feature-02"
        }
      }
    },
    {
      "name": "pricing-01",
      "type": "registry:block",
      "title": "Pricing 01",
      "description": "Three-tier card row with a monthly/yearly toggle that swaps each price and billing note, a featured middle plan, feature checklist and CTA.",
      "categories": [
        "blocks",
        "pricing"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "card",
        "separator",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/pricing-01/pricing-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/pricing-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/pricing/pricing-01"
        }
      }
    },
    {
      "name": "pricing-02",
      "type": "registry:block",
      "title": "Pricing 02",
      "description": "Plan comparison table with grouped feature rows and a per-plan CTA in the header; on small screens a plan picker shows one plan column at a time.",
      "categories": [
        "blocks",
        "pricing"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "table",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/pricing-02/pricing-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/pricing-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/pricing/pricing-02"
        }
      }
    },
    {
      "name": "pricing-03",
      "type": "registry:block",
      "title": "Pricing 03",
      "description": "Three-tier card row with a monthly/yearly billing toggle that tweens the price, a featured plan, per-plan icon, feature checklist and CTA.",
      "categories": [
        "blocks",
        "pricing"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/animated-number.json",
        "badge",
        "button",
        "card",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/pricing-03/pricing-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/pricing-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/pricing/pricing-03"
        }
      }
    },
    {
      "name": "testimonial-01",
      "type": "registry:block",
      "title": "Testimonial 01",
      "description": "Centered single quote with stylized open-mark, author block (avatar, name, role, company) and a muted wordmark row below.",
      "categories": [
        "blocks",
        "testimonial"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/testimonial-01/testimonial-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/testimonial-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/testimonials/testimonial-01"
        }
      }
    },
    {
      "name": "testimonial-02",
      "type": "registry:block",
      "title": "Testimonial 02",
      "description": "Masonry quote grid (CSS columns) with ~6 bordered quote cards of varying length and author rows.",
      "categories": [
        "blocks",
        "testimonial"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/testimonial-02/testimonial-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/testimonial-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/testimonials/testimonial-02"
        }
      }
    },
    {
      "name": "cta-01",
      "type": "registry:block",
      "title": "CTA 01",
      "description": "Framed CTA card with headline and sub-copy on the left, and an install command with a copy button above a browse button on the right.",
      "categories": [
        "blocks",
        "cta"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/copy-button.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/cta-01/cta-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/cta-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cta/cta-01"
        }
      }
    },
    {
      "name": "cta-02",
      "type": "registry:block",
      "title": "CTA 02",
      "description": "Full-bleed centered CTA with framing top/bottom rules, highlight underlay on the key word, and an install command with a copy button.",
      "categories": [
        "blocks",
        "cta"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/copy-button.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/cta-02/cta-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/cta-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cta/cta-02"
        }
      }
    },
    {
      "name": "cta-03",
      "type": "registry:block",
      "title": "CTA 03",
      "description": "Full-bleed CTA card with an animated dithered shader backdrop, an eyebrow pill, a serif headline and a pill action button.",
      "categories": [
        "blocks",
        "cta"
      ],
      "dependencies": [
        "lucide-react",
        "shaders"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/use-reduced-motion.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/cta-03/cta-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/cta-03.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/blocks/cta-03/cta-03-backdrop.tsx",
          "type": "registry:block",
          "target": "components/blocks/cta-03-backdrop.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cta/cta-03"
        }
      }
    },
    {
      "name": "faq-01",
      "type": "registry:block",
      "title": "FAQ 01",
      "description": "Two-column FAQ: sticky heading and a hairline help note on the start side, numbered accordion on the end side.",
      "categories": [
        "blocks",
        "faq"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/accordion.json",
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/faq-01/faq-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/faq-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/faqs/faq-01"
        }
      }
    },
    {
      "name": "faq-02",
      "type": "registry:block",
      "title": "FAQ 02",
      "description": "Centered heading with two-column accordion grid below. Each row tagged with a Qn index.",
      "categories": [
        "blocks",
        "faq"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/accordion.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/faq-02/faq-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/faq-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/faqs/faq-02"
        }
      }
    },
    {
      "name": "faq-03",
      "type": "registry:block",
      "title": "FAQ 03",
      "description": "Searchable FAQ with category tabs, a live-filtered accordion, an empty state for missed queries and a support CTA strip.",
      "categories": [
        "blocks",
        "faq"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/accordion.json",
        "button",
        "empty",
        "input-group",
        "tabs"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/faq-03/faq-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/faq-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/faqs/faq-03"
        }
      }
    },
    {
      "name": "faq-04",
      "type": "registry:block",
      "title": "FAQ 04",
      "description": "Framed single-column FAQ with side rules, a centered display header with a topic jump nav, five topic groups each pairing a heading with its own accordion, and a support footer line.",
      "categories": [
        "blocks",
        "faq"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/accordion.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/faq-04/faq-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/faq-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/faqs/faq-04"
        }
      }
    },
    {
      "name": "login-01",
      "type": "registry:block",
      "title": "Login 01",
      "description": "Centered sign-in: logo and heading above a card with email, password and an inline forgot-password link, a passkey option, an alert for failed attempts and a create-account line below.",
      "categories": [
        "blocks",
        "login"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "card",
        "field",
        "input",
        "https://hirael.com/r/password-input.json",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/login-01/login-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/login-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/auth/login-01"
        }
      }
    },
    {
      "name": "login-02",
      "type": "registry:block",
      "title": "Login 02",
      "description": "Split login with a testimonial pane. The form leads with Google and GitHub, then email and password with an inline forgot link and an alert for failed attempts. The pane holds a quote and two results over a world map drawn in the foreground token.",
      "categories": [
        "blocks",
        "login"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "alert",
        "button",
        "field",
        "input",
        "https://hirael.com/r/password-input.json",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/login-02/login-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/login-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/auth/login-02"
        }
      }
    },
    {
      "name": "login-03",
      "type": "registry:block",
      "title": "Login 03",
      "description": "Split-screen sign-in: a decorative animated-paths aside with a brand mark and a short quote, paired with a clean GitHub-only sign-in pane. A back-to-home link, mobile-collapsing layout, and token-based radial glows behind the form.",
      "categories": [
        "blocks",
        "login"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "button",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/login-03/login-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/login-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/auth/login-03"
        }
      }
    },
    {
      "name": "login-04",
      "type": "registry:block",
      "title": "Login 04",
      "description": "Identifier-first sign-in in one wide card: heading on one side, fields on the other. Email first, then password, with an account chip to switch back and a hidden username field so password managers fill the right account.",
      "categories": [
        "blocks",
        "login"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "card",
        "field",
        "input",
        "https://hirael.com/r/password-input.json",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/login-04/login-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/login-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/auth/login-04"
        }
      }
    },
    {
      "name": "login-05",
      "type": "registry:block",
      "title": "Login 05",
      "description": "Provider-first sign-in: stacked Continue with GitHub, Google and Apple buttons, plus email and passkey options. Email sends a magic link and swaps to a check-your-email state.",
      "categories": [
        "blocks",
        "login"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "field",
        "input",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/login-05/login-05.tsx",
          "type": "registry:block",
          "target": "components/blocks/login-05.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/auth/login-05"
        }
      }
    },
    {
      "name": "signup-01",
      "type": "registry:block",
      "title": "Sign Up 01",
      "description": "Centered signup card: GitHub and Google first, then name, email and a password with a strength meter and hint. Terms sit under the card as plain text, and submitting swaps to a check-your-email state.",
      "categories": [
        "blocks",
        "login"
      ],
      "dependencies": [],
      "registryDependencies": [
        "button",
        "card",
        "field",
        "input",
        "https://hirael.com/r/password-input.json",
        "spinner"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/signup-01/signup-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/signup-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/auth/signup-01"
        }
      }
    },
    {
      "name": "forgot-password-01",
      "type": "registry:block",
      "title": "Forgot Password 01",
      "description": "Centered reset request: one email field with inline validation, then a check-your-email state that echoes the address, links back to sign in and offers a resend.",
      "categories": [
        "blocks",
        "login"
      ],
      "dependencies": [],
      "registryDependencies": [
        "button",
        "card",
        "field",
        "input",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/forgot-password-01/forgot-password-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/forgot-password-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/auth/forgot-password-01"
        }
      }
    },
    {
      "name": "otp-verify-01",
      "type": "registry:block",
      "title": "OTP Verify 01",
      "description": "Centered verification card built on InputOTP: six slots that fit a phone screen, paste support, auto-verify on the last digit, a 30s resend countdown and a verified state.",
      "categories": [
        "blocks",
        "login"
      ],
      "dependencies": [],
      "registryDependencies": [
        "button",
        "card",
        "field",
        "input-otp",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/otp-verify-01/otp-verify-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/otp-verify-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/auth/otp-verify-01"
        }
      }
    },
    {
      "name": "two-factor-setup-01",
      "type": "registry:block",
      "title": "Two-Factor Setup 01",
      "description": "Three-step 2FA enrollment card: scan a real otpauth QR or copy the key, confirm a six-digit code, then save recovery codes with copy, download and a checkbox-gated finish. Ships composable parts.",
      "categories": [
        "blocks",
        "login"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "checkbox",
        "https://hirael.com/r/copy-button.json",
        "field",
        "input-otp",
        "https://hirael.com/r/qr-code.json",
        "spinner",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/two-factor-setup-01/two-factor-setup-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/two-factor-setup-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/auth/two-factor-setup-01"
        }
      }
    },
    {
      "name": "header-01",
      "type": "registry:block",
      "title": "Header 01",
      "description": "Sticky top nav with brand monogram, centered anchor links, dual auth CTAs and a slide-down mobile menu.",
      "categories": [
        "blocks",
        "header"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "drawer",
        "dropdown-menu"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/header-01/header-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/header-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/header/header-01"
        }
      }
    },
    {
      "name": "header-02",
      "type": "registry:block",
      "title": "Header 02",
      "description": "Floating nav that runs full width at the top of the page and shrinks into a blurred pill once you scroll past 100px, with a spring-animated width change. Links share a sliding hover highlight; on mobile a toggle opens an animated dropdown menu. Ships composable parts and a scroll-container prop for embedded layouts.",
      "categories": [
        "blocks",
        "header"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/header-02/header-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/header-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/header/header-02"
        }
      }
    },
    {
      "name": "header-03",
      "type": "registry:block",
      "title": "Header 03",
      "description": "Sticky marketing header with Product, Solutions and Resources mega menus, each a two-column link list beside a featured entry, plain Pricing and Docs links, and a side sheet with collapsible groups on small screens.",
      "categories": [
        "blocks",
        "header"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/accordion.json",
        "button",
        "navigation-menu",
        "sheet"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/header-03/header-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/header-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/header/header-03"
        }
      }
    },
    {
      "name": "footer-01",
      "type": "registry:block",
      "title": "Footer 01",
      "description": "Brand + tagline column alongside Product / Company / Resources link columns, with a copyright row and social icons below a thin rule.",
      "categories": [
        "blocks",
        "footer"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/footer-01/footer-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/footer-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/footer/footer-01"
        }
      }
    },
    {
      "name": "not-found-01",
      "type": "registry:block",
      "title": "Not Found 01",
      "description": "Centered 404 with mono eyebrow, display headline, paired CTAs and a 'try one of these' suggested-routes list.",
      "categories": [
        "blocks",
        "not-found"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/not-found-01/not-found-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/not-found-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/not-found/not-found-01"
        }
      }
    },
    {
      "name": "month-picker",
      "type": "registry:component",
      "title": "Month Picker",
      "description": "4×3 month grid with year stepper, keyboard nav, min/max bounds, single or range mode.",
      "categories": [
        "pickers"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "popover",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/month-picker.tsx",
          "type": "registry:component",
          "target": "components/month-picker.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/pickers/month-picker"
        }
      }
    },
    {
      "name": "time-picker",
      "type": "registry:component",
      "title": "Time Picker",
      "description": "Hour, minute and optional second scroll columns with 12/24h modes, step intervals and keyboard nav.",
      "categories": [
        "pickers"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "popover",
        "tabs",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/time-picker.tsx",
          "type": "registry:component",
          "target": "components/time-picker.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/pickers/time-picker"
        }
      }
    },
    {
      "name": "color-picker",
      "type": "registry:component",
      "title": "Color Picker",
      "description": "Color picker on react-colorful with HEX / RGB / HSL inputs (colord), an eyedropper where supported, and recent swatches.",
      "categories": [
        "pickers"
      ],
      "dependencies": [
        "colord",
        "lucide-react",
        "react-colorful"
      ],
      "registryDependencies": [
        "button",
        "input",
        "popover",
        "tabs",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/color-picker.tsx",
          "type": "registry:component",
          "target": "components/color-picker.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/pickers/color-picker"
        }
      }
    },
    {
      "name": "avatar-stack",
      "type": "registry:component",
      "title": "Avatar Stack",
      "description": "Overlapping avatar group with size (sm/md/lg) and spacing (tight/normal/loose) variants, image or fallback support, numeric overflow chip, and asChild on items/overflow so each avatar can render as a link or button.",
      "categories": [
        "data"
      ],
      "dependencies": [
        "@radix-ui/react-slot",
        "class-variance-authority"
      ],
      "registryDependencies": [
        "avatar"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/avatar-stack.tsx",
          "type": "registry:component",
          "target": "components/avatar-stack.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/avatar-stack"
        }
      }
    },
    {
      "name": "announcement-bar",
      "type": "registry:component",
      "title": "Announcement Bar",
      "description": "Top-of-page banner with default / primary / muted tones, optional dismiss button and localStorage persistence.",
      "categories": [
        "display"
      ],
      "dependencies": [
        "class-variance-authority",
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/announcement-bar.tsx",
          "type": "registry:component",
          "target": "components/announcement-bar.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/announcement-bar"
        }
      }
    },
    {
      "name": "logo-cloud-01",
      "type": "registry:block",
      "title": "Logo Cloud 01",
      "description": "Centered eyebrow + headline above a 6-column bordered wordmark grid, with stat strip and case-study link below.",
      "categories": [
        "blocks",
        "logo-cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/logo-cloud-01/logo-cloud-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/logo-cloud-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/logo-cloud/logo-cloud-01"
        }
      }
    },
    {
      "name": "logo-cloud-02",
      "type": "registry:block",
      "title": "Logo Cloud 02",
      "description": "Two full-bleed marquee rows of wordmarks running in opposite directions, edges faded into the page, each row holding still on hover.",
      "categories": [
        "blocks",
        "logo-cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/marquee.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/logo-cloud-02/logo-cloud-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/logo-cloud-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/logo-cloud/logo-cloud-02"
        }
      }
    },
    {
      "name": "logo-cloud-03",
      "type": "registry:block",
      "title": "Logo Cloud 03",
      "description": "Quiet single-row wordmark strip that brightens on hover, a rule, then a pull quote with an avatar and attribution.",
      "categories": [
        "blocks",
        "logo-cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "separator"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/logo-cloud-03/logo-cloud-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/logo-cloud-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/logo-cloud/logo-cloud-03"
        }
      }
    },
    {
      "name": "logo-cloud-04",
      "type": "registry:block",
      "title": "Logo Cloud 04",
      "description": "Six customer wordmarks as tabs, each opening a proof panel with a metric, a short quote and a story link. It advances on its own, pauses on hover or focus, and stops once you pick one.",
      "categories": [
        "blocks",
        "logo-cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "tabs"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/logo-cloud-04/logo-cloud-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/logo-cloud-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/logo-cloud/logo-cloud-04"
        }
      }
    },
    {
      "name": "contact-01",
      "type": "registry:block",
      "title": "Contact 01",
      "description": "Production contact form with controlled state, inline validation, character counter, topic select, consent checkbox and a pending/sent state machine. Channel list and remote-location note alongside.",
      "categories": [
        "blocks",
        "contact"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "card",
        "checkbox",
        "field",
        "input",
        "select",
        "separator",
        "spinner",
        "textarea"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/contact-01/contact-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/contact-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/contact/contact-01"
        }
      }
    },
    {
      "name": "blog-01",
      "type": "registry:block",
      "title": "Blog 01",
      "description": "Editorial blog index with a featured post on top and a 4-column grid of post cards underneath. Built on Card and Badge.",
      "categories": [
        "blocks",
        "blog"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "card",
        "separator",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/blog-01/blog-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/blog-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/blog/blog-01"
        }
      }
    },
    {
      "name": "blog-02",
      "type": "registry:block",
      "title": "Blog 02",
      "description": "Editorial post index as dated rows with a thumbnail that surfaces on hover, category tabs with counts that filter the list, and an empty state for a category with nothing in it yet.",
      "categories": [
        "blocks",
        "blog"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "empty",
        "tabs"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/blog-02/blog-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/blog-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/blog/blog-02"
        }
      }
    },
    {
      "name": "ecommerce-01",
      "type": "registry:block",
      "title": "Ecommerce 01",
      "description": "Product grid with category filter pills, sale and new badges, wishlist toggles, star ratings, compare-at pricing and add-to-cart buttons that update a live cart count.",
      "categories": [
        "blocks",
        "ecommerce"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "https://hirael.com/r/rating.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/ecommerce-01/ecommerce-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/ecommerce-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/ecommerce/ecommerce-01"
        }
      }
    },
    {
      "name": "ecommerce-02",
      "type": "registry:block",
      "title": "Ecommerce 02",
      "description": "Shopping cart with capped quantity steppers, animated line-item removal, promo-code validation, a free-shipping threshold, live totals, a checkout that confirms with an order number, and an empty-cart state.",
      "categories": [
        "blocks",
        "ecommerce"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "card",
        "empty",
        "input-group",
        "separator",
        "spinner"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/ecommerce-02/ecommerce-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/ecommerce-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/ecommerce/ecommerce-02"
        }
      }
    },
    {
      "name": "ecommerce-03",
      "type": "registry:block",
      "title": "Ecommerce 03",
      "description": "Product detail page with a thumbnail gallery, colour swatches, a size grid that knows what is sold out in each colour, a stock-capped quantity stepper, add to cart, and details in an accordion.",
      "categories": [
        "blocks",
        "ecommerce"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/accordion.json",
        "badge",
        "breadcrumb",
        "button",
        "input-group",
        "radio-group",
        "https://hirael.com/r/rating.json",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/ecommerce-03/ecommerce-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/ecommerce-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/ecommerce/ecommerce-03"
        }
      }
    },
    {
      "name": "ecommerce-04",
      "type": "registry:block",
      "title": "Ecommerce 04",
      "description": "Category page with a sticky filter sidebar (category counts that react to the other filters, price range, colour, stock, rating), removable filter chips, sorting, an empty state, and a filter sheet on small screens.",
      "categories": [
        "blocks",
        "ecommerce"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "checkbox",
        "empty",
        "field",
        "radio-group",
        "https://hirael.com/r/rating.json",
        "select",
        "sheet",
        "slider",
        "switch",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/ecommerce-04/ecommerce-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/ecommerce-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/ecommerce/ecommerce-04"
        }
      }
    },
    {
      "name": "dashboard-01",
      "type": "registry:block",
      "title": "Dashboard 01",
      "description": "Operations dashboard with a Tabs date-range switcher (1d / 7d / 30d / 90d), a 4-up metric strip, a weekly bar chart and a recent-activity feed. Every metric declares which direction is good news, so falling churn reads green; each chart bucket is a focusable control, so the numbers reach the keyboard as well as the mouse.",
      "categories": [
        "blocks",
        "dashboard"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "card",
        "select",
        "separator",
        "tabs",
        "tooltip"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/dashboard-01/dashboard-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/dashboard-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/dashboard/dashboard-01"
        }
      }
    },
    {
      "name": "dashboard-02",
      "type": "registry:block",
      "title": "Dashboard 02",
      "description": "Analytics dashboard with a date-range select, four sparkline KPI tiles, a layered two-series area chart and top-pages and channel-share side cards. Deltas carry their own unit (percent vs percentage points) and the direction that counts as good, and the area chart ships a screen-reader data table of the same numbers.",
      "categories": [
        "blocks",
        "dashboard"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "card",
        "select",
        "separator",
        "https://hirael.com/r/sparkline.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/dashboard-02/dashboard-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/dashboard-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/dashboard/dashboard-02"
        }
      }
    },
    {
      "name": "dashboard-03",
      "type": "registry:block",
      "title": "Dashboard 03",
      "description": "Revenue dashboard with a month stepper, a plan-mix donut and legend, an invoice status list and a paginated transactions list. Amounts are numbers formatted through Intl, and every colour comes from a lookup keyed by plan or status, so no Tailwind class is stored in the data.",
      "categories": [
        "blocks",
        "dashboard"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "card",
        "separator"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/dashboard-03/dashboard-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/dashboard-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/dashboard/dashboard-03"
        }
      }
    },
    {
      "name": "dashboard-04",
      "type": "registry:block",
      "title": "Dashboard 04",
      "description": "Commerce operations dashboard in a card-in-card style: four inset stat tiles, a Today band pairing an hourly two-series revenue chart with ad-budget and peak-hours cards, and a week-in-review band driven by a range select. The budget bar is a real progressbar, both charts ship a screen-reader data table, and each panel only shows an action when it has one.",
      "categories": [
        "blocks",
        "dashboard"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "card",
        "select",
        "https://hirael.com/r/sparkline.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/dashboard-04/dashboard-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/dashboard-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/dashboard/dashboard-04"
        }
      }
    },
    {
      "name": "dashboard-05",
      "type": "registry:block",
      "title": "Dashboard 05",
      "description": "Observability dashboard composed as one bordered lattice: greeting strip with range select, four sparkline KPI cells, cache and duration chart cells, an AI-insight callout, a P50/P95/P99 latency distribution measured against a stated target, and an active-deployments list. The deployment taking traffic is marked in the primary color and its pulse respects prefers-reduced-motion.",
      "categories": [
        "blocks",
        "dashboard"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "select",
        "https://hirael.com/r/sparkline.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/dashboard-05/dashboard-05.tsx",
          "type": "registry:block",
          "target": "components/blocks/dashboard-05.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/dashboard/dashboard-05"
        }
      }
    },
    {
      "name": "integrations-01",
      "type": "registry:block",
      "title": "Integrations 01",
      "description": "Two-column integrations section with copy and a linked integration list on the left, and an orbit diagram (central hub with 6 spokes) on the right that highlights the spoke you hover.",
      "categories": [
        "blocks",
        "integrations"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/integrations-01/integrations-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/integrations-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/integrations/integrations-01"
        }
      }
    },
    {
      "name": "integrations-02",
      "type": "registry:block",
      "title": "Integrations 02",
      "description": "Filterable connector grid: a category toggle group above a card grid, where each card connects or disconnects with a pending state and a running connected count.",
      "categories": [
        "blocks",
        "integrations"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "spinner",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/integrations-02/integrations-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/integrations-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/integrations/integrations-02"
        }
      }
    },
    {
      "name": "integrations-03",
      "type": "registry:block",
      "title": "Integrations 03",
      "description": "Two-column integrations page: a sticky intro with a request-an-integration popover form beside a ruled list of linked connectors and their status.",
      "categories": [
        "blocks",
        "integrations"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "field",
        "input",
        "popover",
        "separator",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/integrations-03/integrations-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/integrations-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/integrations/integrations-03"
        }
      }
    },
    {
      "name": "integrations-04",
      "type": "registry:block",
      "title": "Integrations 04",
      "description": "Centered integrations section: heading and copy above a hub with 6 linked tool tiles on straight spokes, with pulses travelling in and out along each line.",
      "categories": [
        "blocks",
        "integrations"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/integrations-04/integrations-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/integrations-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/integrations/integrations-04"
        }
      }
    },
    {
      "name": "integrations-05",
      "type": "registry:block",
      "title": "Integrations 05",
      "description": "Centered integrations section with three source tools on one side and three targets on the other, joined to a central hub by curved paths that carry travelling pulses.",
      "categories": [
        "blocks",
        "integrations"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/integrations-05/integrations-05.tsx",
          "type": "registry:block",
          "target": "components/blocks/integrations-05.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/integrations/integrations-05"
        }
      }
    },
    {
      "name": "integrations-06",
      "type": "registry:block",
      "title": "Integrations 06",
      "description": "Centered integrations section with a row of tool tiles hung on a shallow arc over a faded grid, each lifting on hover.",
      "categories": [
        "blocks",
        "integrations"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/integrations-06/integrations-06.tsx",
          "type": "registry:block",
          "target": "components/blocks/integrations-06.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/integrations/integrations-06"
        }
      }
    },
    {
      "name": "integrations-07",
      "type": "registry:block",
      "title": "Integrations 07",
      "description": "Two-column integrations section with copy and a call to action beside a 3 by 3 tile grid whose featured tile cycles on its own, pauses on hover and focus, and can be picked directly.",
      "categories": [
        "blocks",
        "integrations"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/integrations-07/integrations-07.tsx",
          "type": "registry:block",
          "target": "components/blocks/integrations-07.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/integrations/integrations-07"
        }
      }
    },
    {
      "name": "integrations-08",
      "type": "registry:block",
      "title": "Integrations 08",
      "description": "Minimal integrations section: a short heading, a single row of tool icons and a link to the full list.",
      "categories": [
        "blocks",
        "integrations"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/integrations-08/integrations-08.tsx",
          "type": "registry:block",
          "target": "components/blocks/integrations-08.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/integrations/integrations-08"
        }
      }
    },
    {
      "name": "image-gallery-01",
      "type": "registry:block",
      "title": "Image Gallery 01",
      "description": "Studio-style masonry gallery with a Tabs category filter showing counts, photo tiles in varied aspect ratios that open in a lightbox with thumbnails, and an empty state for categories with no work yet.",
      "categories": [
        "blocks",
        "image-gallery"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "empty",
        "https://hirael.com/r/lightbox.json",
        "tabs"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/image-gallery-01/image-gallery-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/image-gallery-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/image-gallery/image-gallery-01"
        }
      }
    },
    {
      "name": "image-gallery-02",
      "type": "registry:block",
      "title": "Image Gallery 02",
      "description": "Photo grid with a Grid and Rows layout switch, captions on hover or focus, and a lightbox with thumbnails that opens at the chosen photo and returns focus to it on close.",
      "categories": [
        "blocks",
        "image-gallery"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/lightbox.json",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/image-gallery-02/image-gallery-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/image-gallery-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/image-gallery/image-gallery-02"
        }
      }
    },
    {
      "name": "app-shell-01",
      "type": "registry:block",
      "title": "App Shell 01",
      "description": "Drop-in admin shell built on the shadcn Sidebar primitive: collapsible icon rail with nav badges and an account menu in the footer, sticky topbar with breadcrumb and a ⌘K search that really focuses, plus an accounts table that filters live and sorts by any column with aria-sort.",
      "categories": [
        "blocks",
        "app-shell"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "card",
        "direction",
        "dropdown-menu",
        "empty",
        "input-group",
        "kbd",
        "separator",
        "sidebar",
        "table"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/app-shell-01/app-shell-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/app-shell-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/app-shell/app-shell-01"
        }
      }
    },
    {
      "name": "app-shell-02",
      "type": "registry:block",
      "title": "App Shell 02",
      "description": "Sidebar-free admin shell with a sticky top bar over a working settings screen: vertical tabs with roving keyboard focus, a header search that filters every section and counts matches per tab, and rows that actually do their thing (inline edit, copy to clipboard, or a switch) with a live save status.",
      "categories": [
        "blocks",
        "app-shell"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "https://hirael.com/r/copy-button.json",
        "dropdown-menu",
        "empty",
        "https://hirael.com/r/inline-edit.json",
        "input-group",
        "separator",
        "switch",
        "tabs"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/app-shell-02/app-shell-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/app-shell-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/app-shell/app-shell-02"
        }
      }
    },
    {
      "name": "app-shell-03",
      "type": "registry:block",
      "title": "App Shell 03",
      "description": "Split-pane inbox shell: icon rail with unread indicator, a searchable conversation listbox you can walk with the arrow keys, and a reading pane where star, archive and delete all work, with undo. Collapses to one pane on phones with a back button, and the composer sends on ⌘+Enter so Enter still makes a new line.",
      "categories": [
        "blocks",
        "app-shell"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "direction",
        "empty",
        "input-group",
        "separator",
        "tabs",
        "textarea",
        "tooltip"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/app-shell-03/app-shell-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/app-shell-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/app-shell/app-shell-03"
        }
      }
    },
    {
      "name": "app-shell-04",
      "type": "registry:block",
      "title": "App Shell 04",
      "description": "Starter shell on the shadcn Sidebar primitive (inset variant): a workspace switcher that switches, a ⌘K field that filters the nav, icon-collapsible items with tooltips, an inset header with an account menu and notification count, and a campaign board overview with a stat row and four stage columns.",
      "categories": [
        "blocks",
        "app-shell"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "direction",
        "dropdown-menu",
        "input-group",
        "kbd",
        "separator",
        "sidebar"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/app-shell-04/app-shell-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/app-shell-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/app-shell/app-shell-04"
        }
      }
    },
    {
      "name": "copy-button",
      "type": "registry:component",
      "title": "Copy Button",
      "description": "Click-to-copy button with copied feedback, icon-only or labelled, ghost / outline variants and a non-secure-context clipboard fallback.",
      "categories": [
        "display"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/copy-button.tsx",
          "type": "registry:component",
          "target": "components/copy-button.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/copy-button"
        }
      }
    },
    {
      "name": "icon-stack",
      "type": "registry:component",
      "title": "Icon Stack",
      "description": "Isometric stack of plates with an icon skewed onto the front face, for feature headers and empty states. Layer count is a prop, and the plates take their color from the surrounding text.",
      "categories": [
        "display"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/icon-stack.tsx",
          "type": "registry:component",
          "target": "components/icon-stack.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/icon-stack"
        }
      }
    },
    {
      "name": "marquee",
      "type": "registry:component",
      "title": "Marquee",
      "description": "Infinite scrolling row or column for logos and testimonials, with pause-on-hover, reverse and vertical modes. Keyframes ship inline, zero config.",
      "categories": [
        "display"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/marquee.tsx",
          "type": "registry:component",
          "target": "components/marquee.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/marquee"
        }
      }
    },
    {
      "name": "tree-view",
      "type": "registry:component",
      "title": "Tree View",
      "description": "Collapsible nested tree for file explorers and hierarchical data, with auto folder/file icons, depth indentation, selection and keyboard focus.",
      "categories": [
        "data"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "collapsible",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/tree-view.tsx",
          "type": "registry:component",
          "target": "components/tree-view.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/tree-view"
        }
      }
    },
    {
      "name": "animated-number",
      "type": "registry:component",
      "title": "Animated Number",
      "description": "Count-up number that tweens to its target with easing, Intl formatting (currency, compact, percent), prefix/suffix and reduced-motion support.",
      "categories": [
        "data"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/use-reduced-motion.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/animated-number.tsx",
          "type": "registry:component",
          "target": "components/animated-number.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/animated-number"
        }
      }
    },
    {
      "name": "stepper",
      "type": "registry:component",
      "title": "Stepper",
      "description": "Multi-step progress indicator with horizontal and vertical orientation, completed / active / inactive states, clickable steps and a compound API.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/stepper.tsx",
          "type": "registry:component",
          "target": "components/stepper.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/stepper"
        }
      }
    },
    {
      "name": "sortable",
      "type": "registry:component",
      "title": "Sortable",
      "description": "Drag-to-reorder list on dnd-kit: pointer and keyboard sorting, handle or whole-item dragging, and controls inside items that stay clickable.",
      "categories": [
        "data"
      ],
      "dependencies": [
        "@dnd-kit/core",
        "@dnd-kit/sortable",
        "@dnd-kit/utilities",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/sortable.tsx",
          "type": "registry:component",
          "target": "components/sortable.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/sortable"
        }
      }
    },
    {
      "name": "date-picker",
      "type": "registry:component",
      "title": "Date Picker",
      "description": "Single-date picker: a trigger that formats the date, opening shadcn Calendar in a popover. Takes react-day-picker matchers for bounds and disabled days.",
      "categories": [
        "pickers"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "popover",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/date-picker.tsx",
          "type": "registry:component",
          "target": "components/date-picker.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/pickers/date-picker"
        }
      }
    },
    {
      "name": "date-range-picker",
      "type": "registry:component",
      "title": "Date Range Picker",
      "description": "Range picker on shadcn Calendar: preset column, one or two months, and react-day-picker matchers for bounds and disabled days.",
      "categories": [
        "pickers"
      ],
      "dependencies": [
        "lucide-react",
        "react-day-picker"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "popover",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/date-range-picker.tsx",
          "type": "registry:component",
          "target": "components/date-range-picker.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/pickers/date-range-picker"
        }
      }
    },
    {
      "name": "mention-input",
      "type": "registry:component",
      "title": "Mention Input",
      "description": "@-mention textarea with caret-anchored autocomplete, highlighted mention chips, async search and multiple trigger characters.",
      "categories": [
        "inputs"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json",
        "spinner",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/mention-input.tsx",
          "type": "registry:component",
          "target": "components/mention-input.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/mention-input"
        }
      }
    },
    {
      "name": "rich-text-editor",
      "type": "registry:component",
      "title": "Rich Text Editor",
      "description": "Tiptap editor with a formatting toolbar (headings, lists, links, highlight, alignment) and a hover bubble to edit or unlink links inline. Outputs HTML, controlled or uncontrolled, with composable parts.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "@tiptap/core",
        "@tiptap/extension-highlight",
        "@tiptap/extension-placeholder",
        "@tiptap/extension-text-align",
        "@tiptap/pm",
        "@tiptap/react",
        "@tiptap/starter-kit",
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "input",
        "popover",
        "separator",
        "skeleton",
        "toggle",
        "tooltip"
      ],
      "docs": "Pulls in Tiptap's editor engine (seven @tiptap/* packages), so expect a heavier bundle than the other input components.",
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/rich-text-editor.tsx",
          "type": "registry:component",
          "target": "components/rich-text-editor.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/rich-text-editor"
        }
      }
    },
    {
      "name": "inline-edit",
      "type": "registry:component",
      "title": "Inline Edit",
      "description": "Click-to-edit text with preview, validation, async submit and confirm/cancel controls. Input and textarea modes.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "@radix-ui/react-slot",
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/compose-refs.json",
        "input",
        "spinner",
        "textarea",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/inline-edit.tsx",
          "type": "registry:component",
          "target": "components/inline-edit.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/inline-edit"
        }
      }
    },
    {
      "name": "signature-pad",
      "type": "registry:component",
      "title": "Signature Pad",
      "description": "Signature capture on signature_pad: smooth ink, per-stroke undo, ink that follows the theme, and PNG/JPEG export via ref.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react",
        "signature_pad"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/signature-pad.tsx",
          "type": "registry:component",
          "target": "components/signature-pad.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/signature-pad"
        }
      }
    },
    {
      "name": "image-cropper",
      "type": "registry:component",
      "title": "Image Cropper",
      "description": "Pan-and-zoom image cropper on react-easy-crop: rect or round mask, fixed aspect, zoom slider and canvas export via ref.",
      "categories": [
        "files"
      ],
      "dependencies": [
        "react-easy-crop"
      ],
      "registryDependencies": [
        "slider",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/image-cropper.tsx",
          "type": "registry:component",
          "target": "components/image-cropper.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/files/image-cropper"
        }
      }
    },
    {
      "name": "image-compare",
      "type": "registry:component",
      "title": "Image Compare",
      "description": "Before/after comparison slider with a draggable, keyboard-accessible divider, horizontal or vertical orientation and hover-follow mode.",
      "categories": [
        "display"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/image-compare.tsx",
          "type": "registry:component",
          "target": "components/image-compare.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/image-compare"
        }
      }
    },
    {
      "name": "lightbox",
      "type": "registry:component",
      "title": "Lightbox",
      "description": "Fullscreen image lightbox on Radix Dialog with gallery navigation, zoom and pan, swipe gestures, captions and a thumbnail strip.",
      "categories": [
        "display"
      ],
      "dependencies": [
        "@radix-ui/react-dialog",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/lightbox.tsx",
          "type": "registry:component",
          "target": "components/lightbox.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/lightbox"
        }
      }
    },
    {
      "name": "countdown-timer",
      "type": "registry:component",
      "title": "Countdown Timer",
      "description": "Count-down-to-date timer with boxed / inline / minimal variants, a useCountdown hook, digit animation and completion content.",
      "categories": [
        "data"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/use-reduced-motion.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/countdown-timer.tsx",
          "type": "registry:component",
          "target": "components/countdown-timer.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/countdown-timer"
        }
      }
    },
    {
      "name": "relative-time",
      "type": "registry:component",
      "title": "Relative Time",
      "description": "Live \"3 minutes ago\" label on a semantic <time>, formatted with Intl for any locale. Every instance shares one timer per refresh rate, and old dates refresh hourly.",
      "categories": [
        "data"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/relative-time.tsx",
          "type": "registry:component",
          "target": "components/relative-time.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/relative-time"
        }
      }
    },
    {
      "name": "qr-code",
      "type": "registry:component",
      "title": "QR Code",
      "description": "QR code on uqr, rendered as crisp SVG, with L/M/Q/H error correction, quiet-zone control and custom colors.",
      "categories": [
        "display"
      ],
      "dependencies": [
        "uqr"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/qr-code.tsx",
          "type": "registry:component",
          "target": "components/qr-code.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/qr-code"
        }
      }
    },
    {
      "name": "calendar-heatmap",
      "type": "registry:component",
      "title": "Calendar Heatmap",
      "description": "GitHub-style contribution heatmap with month and weekday labels, tooltips, configurable intensity scale and a legend.",
      "categories": [
        "data"
      ],
      "dependencies": [
        "date-fns"
      ],
      "registryDependencies": [
        "tooltip"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/calendar-heatmap.tsx",
          "type": "registry:component",
          "target": "components/calendar-heatmap.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/calendar-heatmap"
        }
      }
    },
    {
      "name": "code-block",
      "type": "registry:component",
      "title": "Code Block",
      "description": "Code display with built-in dependency-free syntax highlighting via theme tokens, line numbers, line highlights, diff gutters, copy button and collapsible max-height.",
      "categories": [
        "display"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "https://hirael.com/r/copy-button.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/code-block.tsx",
          "type": "registry:component",
          "target": "components/code-block.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/code-block"
        }
      }
    },
    {
      "name": "masonry",
      "type": "registry:component",
      "title": "Masonry",
      "description": "True masonry layout that balances children into the shortest column by measured height, order-preserving, responsive, dependency-free.",
      "categories": [
        "display"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/masonry.tsx",
          "type": "registry:component",
          "target": "components/masonry.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/masonry"
        }
      }
    },
    {
      "name": "audio-player",
      "type": "registry:component",
      "title": "Audio Player",
      "description": "Composable audio player with play/pause, scrub-safe seek with buffered tint, skip, time readouts, volume and playback rate.",
      "categories": [
        "display"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "slider"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/audio-player.tsx",
          "type": "registry:component",
          "target": "components/audio-player.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/audio-player"
        }
      }
    },
    {
      "name": "video-player",
      "type": "registry:component",
      "title": "Video Player",
      "description": "Composable video player with click or Space to play, scrub-safe seek with buffered tint, time readouts, volume, full screen, and controls that fade out while it plays.",
      "categories": [
        "display"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "button",
        "slider"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/video-player.tsx",
          "type": "registry:component",
          "target": "components/video-player.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/video-player"
        }
      }
    },
    {
      "name": "media-input",
      "type": "registry:component",
      "title": "Media Input",
      "description": "Local media file picker that previews via an object URL; empty-state prompt, replace and clear, size validation. Nothing leaves the browser.",
      "categories": [
        "files"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/format-bytes.json",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/media-input.tsx",
          "type": "registry:component",
          "target": "components/media-input.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/files/media-input"
        }
      }
    },
    {
      "name": "tour",
      "type": "registry:component",
      "title": "Tour",
      "description": "Onboarding spotlight that dims the page around a target element and walks users through steps with a positioned coach-mark card.",
      "categories": [
        "navigation"
      ],
      "dependencies": [],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/tour.tsx",
          "type": "registry:component",
          "target": "components/tour.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/tour"
        }
      }
    },
    {
      "name": "activity-feed",
      "type": "registry:block",
      "title": "Activity Feed",
      "description": "Avatar-led event feed with a connecting rail, actor and action lines, timestamps, quoted bodies and date dividers. Ships composable parts.",
      "categories": [
        "blocks",
        "widgets"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/activity-feed/activity-feed.tsx",
          "type": "registry:block",
          "target": "components/blocks/activity-feed.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/widgets/activity-feed"
        }
      }
    },
    {
      "name": "audit-log",
      "type": "registry:block",
      "title": "Audit Log",
      "description": "Compliance-style event log with expandable rows that reveal actor, action, status and request metadata. Composable disclosure parts.",
      "categories": [
        "blocks",
        "saas"
      ],
      "dependencies": [
        "class-variance-authority",
        "lucide-react"
      ],
      "registryDependencies": [
        "collapsible"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/audit-log/audit-log.tsx",
          "type": "registry:block",
          "target": "components/blocks/audit-log.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/saas/audit-log"
        }
      }
    },
    {
      "name": "blur-reveal",
      "type": "registry:component",
      "title": "Blur Reveal",
      "description": "Reveals content with a blur, fade and lift as it scrolls into view. Configurable delay, duration and threshold; respects reduced-motion.",
      "categories": [
        "animation"
      ],
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://hirael.com/r/reveal-observer.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/blur-reveal.tsx",
          "type": "registry:component",
          "target": "components/blur-reveal.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/animation/blur-reveal"
        }
      }
    },
    {
      "name": "text-reveal",
      "type": "registry:component",
      "title": "Text Reveal",
      "description": "Staggered text entrance that masks and slides each word, character or line into place on scroll. Respects reduced-motion.",
      "categories": [
        "animation"
      ],
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://hirael.com/r/reveal-observer.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/text-reveal.tsx",
          "type": "registry:component",
          "target": "components/text-reveal.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/animation/text-reveal"
        }
      }
    },
    {
      "name": "text-shimmer",
      "type": "registry:component",
      "title": "Text Shimmer",
      "description": "Text with a moving highlight for loading labels like \"Thinking...\". CSS only, follows the text colour, runs the other way in RTL and stays still when reduced motion is on.",
      "categories": [
        "animation"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/text-shimmer.tsx",
          "type": "registry:component",
          "target": "components/text-shimmer.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/animation/text-shimmer"
        }
      }
    },
    {
      "name": "scroll-reveal",
      "type": "registry:component",
      "title": "Scroll Reveal",
      "description": "Fades and slides content in from any direction as it enters the viewport. Configurable distance, delay and replay; respects reduced-motion.",
      "categories": [
        "animation"
      ],
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://hirael.com/r/reveal-observer.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/scroll-reveal.tsx",
          "type": "registry:component",
          "target": "components/scroll-reveal.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/animation/scroll-reveal"
        }
      }
    },
    {
      "name": "spotlight-card",
      "type": "registry:component",
      "title": "Spotlight Card",
      "description": "Card surface with a crisp spotlight that tracks the cursor and fades in on hover. Built on Cursor Glow and design tokens.",
      "categories": [
        "animation"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/cursor-glow.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/spotlight-card.tsx",
          "type": "registry:component",
          "target": "components/spotlight-card.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/animation/spotlight-card"
        }
      }
    },
    {
      "name": "magnetic-button",
      "type": "registry:component",
      "title": "Magnetic Button",
      "description": "Button that pulls toward the cursor and springs back on leave. Adjustable strength, asChild to wrap a link, respects reduced-motion.",
      "categories": [
        "animation"
      ],
      "dependencies": [
        "@radix-ui/react-slot",
        "motion"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/magnetic-button.tsx",
          "type": "registry:component",
          "target": "components/magnetic-button.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/animation/magnetic-button"
        }
      }
    },
    {
      "name": "cursor-glow",
      "type": "registry:component",
      "title": "Cursor Glow",
      "description": "Ambient glow layer that follows the pointer across its container and fades when it leaves. Drop it behind heroes, grids or feature panels.",
      "categories": [
        "animation"
      ],
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/cursor-glow.tsx",
          "type": "registry:component",
          "target": "components/cursor-glow.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/animation/cursor-glow"
        }
      }
    },
    {
      "name": "sparkles",
      "type": "registry:component",
      "title": "Sparkles",
      "description": "Canvas particle field that drifts and twinkles behind any container. Density scales with size, colors resolve from tokens, and it pauses offscreen and under reduced-motion. No dependencies.",
      "categories": [
        "animation"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/sparkles.tsx",
          "type": "registry:component",
          "target": "components/sparkles.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/animation/sparkles"
        }
      }
    },
    {
      "name": "tilt-card",
      "type": "registry:component",
      "title": "Tilt Card",
      "description": "3D pointer tilt with optional cursor-following glare and configurable max angle, scale and perspective. Respects reduced-motion.",
      "categories": [
        "animation"
      ],
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/tilt-card.tsx",
          "type": "registry:component",
          "target": "components/tilt-card.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/animation/tilt-card"
        }
      }
    },
    {
      "name": "morphing-dialog",
      "type": "registry:component",
      "title": "Morphing Dialog",
      "description": "A trigger card that morphs into a centered dialog via shared-layout animation, with focus trapping, scroll lock, Esc to close and reduced-motion support.",
      "categories": [
        "animation"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/compose-refs.json",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/morphing-dialog.tsx",
          "type": "registry:component",
          "target": "components/morphing-dialog.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/animation/morphing-dialog"
        }
      }
    },
    {
      "name": "dock",
      "type": "registry:component",
      "title": "Dock",
      "description": "macOS-style dock with cursor magnification: icons scale and spring as the pointer passes, with hover and focus labels. Built on motion.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/dock.tsx",
          "type": "registry:component",
          "target": "components/dock.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/dock"
        }
      }
    },
    {
      "name": "floating-action-button",
      "type": "registry:component",
      "title": "Floating Action Button",
      "description": "Expanding speed-dial FAB: a primary trigger that rotates open to stagger a stack of secondary actions on any side. Compound API.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/floating-action-button.tsx",
          "type": "registry:component",
          "target": "components/floating-action-button.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/floating-action-button"
        }
      }
    },
    {
      "name": "floating-toolbar",
      "type": "registry:component",
      "title": "Floating Toolbar",
      "description": "Floating pill toolbar for text selection and canvas actions, with toggle buttons, separators and labels. Position it anywhere.",
      "categories": [
        "navigation"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/floating-toolbar.tsx",
          "type": "registry:component",
          "target": "components/floating-toolbar.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/floating-toolbar"
        }
      }
    },
    {
      "name": "split-view",
      "type": "registry:component",
      "title": "Split View",
      "description": "Two-pane master/detail layout with a draggable, keyboard-accessible divider and min/max bounds, built on shadcn Resizable.",
      "categories": [
        "navigation"
      ],
      "dependencies": [],
      "registryDependencies": [
        "resizable"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/split-view.tsx",
          "type": "registry:component",
          "target": "components/split-view.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/split-view"
        }
      }
    },
    {
      "name": "inspector-panel",
      "type": "registry:block",
      "title": "Inspector Panel",
      "description": "Design-tool inspector with a header, collapsible sections and label/control rows. Composable parts for property panels and sidebars.",
      "categories": [
        "blocks",
        "widgets"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "collapsible",
        "input-group",
        "native-select"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/inspector-panel/inspector-panel.tsx",
          "type": "registry:block",
          "target": "components/blocks/inspector-panel.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/widgets/inspector-panel"
        }
      }
    },
    {
      "name": "tenant-switcher",
      "type": "registry:block",
      "title": "Tenant Switcher",
      "description": "Workspace, organization or project switcher for multi-tenant apps. Logo or initials, plan or role caption, grouped and searchable list, and a create action. Ships composable parts.",
      "categories": [
        "blocks",
        "widgets"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "command",
        "dialog",
        "field",
        "input",
        "popover",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/tenant-switcher/tenant-switcher.tsx",
          "type": "registry:block",
          "target": "components/blocks/tenant-switcher.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/widgets/tenant-switcher"
        }
      }
    },
    {
      "name": "kpi-grid",
      "type": "registry:block",
      "title": "KPI Grid",
      "description": "Hairline-joined grid of KPI tiles with label, value, an up/down/flat delta chip and a sparkline. Ships composable parts.",
      "categories": [
        "blocks",
        "widgets"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/sparkline.json",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/kpi-grid/kpi-grid.tsx",
          "type": "registry:block",
          "target": "components/blocks/kpi-grid.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/widgets/kpi-grid"
        }
      }
    },
    {
      "name": "quick-actions",
      "type": "registry:block",
      "title": "Quick Actions",
      "description": "Grid of dashboard shortcut tiles with icon, label and description; each opens a small form and shows its result in place. Each tile is a button or, via asChild, a link. Ships composable parts.",
      "categories": [
        "blocks",
        "widgets"
      ],
      "dependencies": [
        "@radix-ui/react-slot",
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "field",
        "input",
        "popover"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/quick-actions/quick-actions.tsx",
          "type": "registry:block",
          "target": "components/blocks/quick-actions.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/widgets/quick-actions"
        }
      }
    },
    {
      "name": "notifications",
      "type": "registry:block",
      "title": "Notifications",
      "description": "Notification panel with an All/Unread filter, mark all read, per-item mark read and dismiss, an empty state, and a primary-colored unread marker. Ships composable parts.",
      "categories": [
        "blocks",
        "widgets"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "empty",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/notifications/notifications.tsx",
          "type": "registry:block",
          "target": "components/blocks/notifications.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/widgets/notifications"
        }
      }
    },
    {
      "name": "billing-card",
      "type": "registry:block",
      "title": "Billing Card",
      "description": "Current-plan summary with price, a usage meter, billing detail rows and footer actions. Composable parts for billing settings.",
      "categories": [
        "blocks",
        "saas"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "progress",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/billing-card/billing-card.tsx",
          "type": "registry:block",
          "target": "components/blocks/billing-card.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/saas/billing-card"
        }
      }
    },
    {
      "name": "subscription-plans",
      "type": "registry:block",
      "title": "Subscription Plans",
      "description": "In-app plan selector with featured and current states, a badge, feature checklist and per-plan action. Ships composable parts.",
      "categories": [
        "blocks",
        "saas"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "alert-dialog",
        "badge",
        "button",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/subscription-plans/subscription-plans.tsx",
          "type": "registry:block",
          "target": "components/blocks/subscription-plans.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/saas/subscription-plans"
        }
      }
    },
    {
      "name": "api-keys",
      "type": "registry:block",
      "title": "API Keys",
      "description": "API key manager with reveal/hide, copy-to-clipboard, key metadata and a create action. Ships composable parts.",
      "categories": [
        "blocks",
        "saas"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/copy-button.json",
        "empty"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/api-keys/api-keys.tsx",
          "type": "registry:block",
          "target": "components/blocks/api-keys.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/saas/api-keys"
        }
      }
    },
    {
      "name": "usage-dashboard",
      "type": "registry:block",
      "title": "Usage Dashboard",
      "description": "Metered usage panel with per-resource progress bars that tint amber near the limit and red over it. Ships composable parts.",
      "categories": [
        "blocks",
        "saas"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/usage-dashboard/usage-dashboard.tsx",
          "type": "registry:block",
          "target": "components/blocks/usage-dashboard.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/saas/usage-dashboard"
        }
      }
    },
    {
      "name": "creative-studio",
      "type": "registry:block",
      "title": "Creative Studio",
      "description": "Dark, cinematic creative-studio landing page: a full-viewport hero with an animated backdrop and pull-up wordmark, a scroll-revealed about section, and a staggered feature-card grid. Framer Motion throughout, with a self-contained warm-cream palette.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/creative-studio/creative-studio.tsx",
          "type": "registry:block",
          "target": "components/templates/creative-studio/creative-studio.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/creative-studio/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/creative-studio/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/creative-studio/about.tsx",
          "type": "registry:block",
          "target": "components/templates/creative-studio/about.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/creative-studio/features.tsx",
          "type": "registry:block",
          "target": "components/templates/creative-studio/features.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/creative-studio/footer.tsx",
          "type": "registry:block",
          "target": "components/templates/creative-studio/footer.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/creative-studio/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/creative-studio/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/creative-studio/fonts.ts",
          "type": "registry:block",
          "target": "components/templates/creative-studio/fonts.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/creative-studio"
        }
      }
    },
    {
      "name": "agency-landing",
      "type": "registry:block",
      "title": "Agency Landing",
      "description": "Bright, shader-lit agency landing page: a full-viewport hero with an animated WebGL backdrop and pill navigation, an editorial about section, a featured-work grid of autoplaying video cards, and a dark closing footer with a call to action. Built on the shaders package, with a self-contained light palette.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "lucide-react",
        "shaders"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/agency-landing/agency-landing.tsx",
          "type": "registry:block",
          "target": "components/templates/agency-landing/agency-landing.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/agency-landing/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/agency-landing/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/agency-landing/about.tsx",
          "type": "registry:block",
          "target": "components/templates/agency-landing/about.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/agency-landing/case-studies.tsx",
          "type": "registry:block",
          "target": "components/templates/agency-landing/case-studies.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/agency-landing/footer.tsx",
          "type": "registry:block",
          "target": "components/templates/agency-landing/footer.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/agency-landing/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/agency-landing/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/agency-landing/shader-background.tsx",
          "type": "registry:block",
          "target": "components/templates/agency-landing/shader-background.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/agency-landing"
        }
      }
    },
    {
      "name": "mindloop",
      "type": "registry:block",
      "title": "Mindloop",
      "description": "Dark, monochrome newsletter landing page: a full-screen video hero with an inline subscribe form, an answer-engine section, scroll-revealed mission copy, a four-up feature grid and a streaming-video call to action. Framer Motion throughout, with a self-contained pure-black palette and liquid-glass accents.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "button",
        "field"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/mindloop/mindloop.tsx",
          "type": "registry:block",
          "target": "components/templates/mindloop/mindloop.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/mindloop/navbar.tsx",
          "type": "registry:block",
          "target": "components/templates/mindloop/navbar.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/mindloop/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/mindloop/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/mindloop/search.tsx",
          "type": "registry:block",
          "target": "components/templates/mindloop/search.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/mindloop/mission.tsx",
          "type": "registry:block",
          "target": "components/templates/mindloop/mission.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/mindloop/solution.tsx",
          "type": "registry:block",
          "target": "components/templates/mindloop/solution.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/mindloop/cta.tsx",
          "type": "registry:block",
          "target": "components/templates/mindloop/cta.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/mindloop/footer.tsx",
          "type": "registry:block",
          "target": "components/templates/mindloop/footer.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/mindloop/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/mindloop/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/mindloop/styles.tsx",
          "type": "registry:block",
          "target": "components/templates/mindloop/styles.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/mindloop/fonts.ts",
          "type": "registry:block",
          "target": "components/templates/mindloop/fonts.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/mindloop"
        }
      }
    },
    {
      "name": "portfolio",
      "type": "registry:block",
      "title": "Portfolio",
      "description": "Dark, single-page personal portfolio: a counter loading screen, an HLS video hero with a floating nav and a cycling role line, a bento work grid, a journal list, a scroll-pinned parallax gallery with lightbox, count-up stats and a video contact footer. Self-contained dark palette, driven by GSAP and Framer Motion.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "gsap",
        "motion"
      ],
      "registryDependencies": [
        "button"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/portfolio.tsx",
          "type": "registry:block",
          "target": "components/templates/portfolio/portfolio.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/loading-screen.tsx",
          "type": "registry:block",
          "target": "components/templates/portfolio/loading-screen.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/portfolio/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/selected-works.tsx",
          "type": "registry:block",
          "target": "components/templates/portfolio/selected-works.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/journal.tsx",
          "type": "registry:block",
          "target": "components/templates/portfolio/journal.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/explorations.tsx",
          "type": "registry:block",
          "target": "components/templates/portfolio/explorations.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/stats.tsx",
          "type": "registry:block",
          "target": "components/templates/portfolio/stats.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/contact.tsx",
          "type": "registry:block",
          "target": "components/templates/portfolio/contact.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/background-video.tsx",
          "type": "registry:block",
          "target": "components/templates/portfolio/background-video.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/portfolio/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/fonts.ts",
          "type": "registry:block",
          "target": "components/templates/portfolio/fonts.ts"
        },
        {
          "path": "registry/hirael/bases/radix/templates/portfolio/styles.ts",
          "type": "registry:block",
          "target": "components/templates/portfolio/styles.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/portfolio"
        }
      }
    },
    {
      "name": "usd-halo",
      "type": "registry:block",
      "title": "USD Halo",
      "description": "Premium fintech landing page for a stablecoin: a full-bleed video hero with a custom halo wordmark and an infinite brand marquee, a meet-the-product card grid, a backers marquee, and a use-modes split with an autoplaying video panel, closing on a dark anchor footer. Self-contained light palette.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/usd-halo/usd-halo.tsx",
          "type": "registry:block",
          "target": "components/templates/usd-halo/usd-halo.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/usd-halo/navbar.tsx",
          "type": "registry:block",
          "target": "components/templates/usd-halo/navbar.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/usd-halo/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/usd-halo/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/usd-halo/info.tsx",
          "type": "registry:block",
          "target": "components/templates/usd-halo/info.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/usd-halo/backed-by.tsx",
          "type": "registry:block",
          "target": "components/templates/usd-halo/backed-by.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/usd-halo/use-cases.tsx",
          "type": "registry:block",
          "target": "components/templates/usd-halo/use-cases.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/usd-halo/footer.tsx",
          "type": "registry:block",
          "target": "components/templates/usd-halo/footer.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/usd-halo/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/usd-halo/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/usd-halo/fonts.ts",
          "type": "registry:block",
          "target": "components/templates/usd-halo/fonts.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/usd-halo"
        }
      }
    },
    {
      "name": "rivr",
      "type": "registry:block",
      "title": "Rivr",
      "description": "DeFi staking landing page for a fluid-asset protocol: a video hero on a rounded card with glass stat cards and a carved documentation corner, a metrics band, a bento feature grid, a video call to action and a light footer. Self-contained light palette, Helvetica system type, Framer Motion throughout.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/rivr/rivr.tsx",
          "type": "registry:block",
          "target": "components/templates/rivr/rivr.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/rivr/navbar.tsx",
          "type": "registry:block",
          "target": "components/templates/rivr/navbar.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/rivr/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/rivr/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/rivr/metrics.tsx",
          "type": "registry:block",
          "target": "components/templates/rivr/metrics.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/rivr/features.tsx",
          "type": "registry:block",
          "target": "components/templates/rivr/features.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/rivr/cta.tsx",
          "type": "registry:block",
          "target": "components/templates/rivr/cta.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/rivr/footer.tsx",
          "type": "registry:block",
          "target": "components/templates/rivr/footer.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/rivr/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/rivr/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/rivr/styles.tsx",
          "type": "registry:block",
          "target": "components/templates/rivr/styles.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/rivr"
        }
      }
    },
    {
      "name": "velorah",
      "type": "registry:block",
      "title": "Velorah",
      "description": "Dark, premium landing page for an electric RV brand: a full-screen video hero with liquid-glass navigation, a centered tagline, a split feature card with switchable tabs, an HLS streaming statement with a stats row, a video preorder call to action and a multi-column footer. Self-contained pure-black palette, Inter + Instrument Serif type.",
      "categories": [
        "templates"
      ],
      "dependencies": [],
      "registryDependencies": [
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/velorah/velorah.tsx",
          "type": "registry:block",
          "target": "components/templates/velorah/velorah.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/velorah/navbar.tsx",
          "type": "registry:block",
          "target": "components/templates/velorah/navbar.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/velorah/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/velorah/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/velorah/tagline.tsx",
          "type": "registry:block",
          "target": "components/templates/velorah/tagline.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/velorah/feature.tsx",
          "type": "registry:block",
          "target": "components/templates/velorah/feature.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/velorah/statement.tsx",
          "type": "registry:block",
          "target": "components/templates/velorah/statement.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/velorah/cta.tsx",
          "type": "registry:block",
          "target": "components/templates/velorah/cta.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/velorah/footer.tsx",
          "type": "registry:block",
          "target": "components/templates/velorah/footer.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/velorah/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/velorah/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/velorah/styles.tsx",
          "type": "registry:block",
          "target": "components/templates/velorah/styles.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/velorah/fonts.ts",
          "type": "registry:block",
          "target": "components/templates/velorah/fonts.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/velorah"
        }
      }
    },
    {
      "name": "asme",
      "type": "registry:block",
      "title": "Asme",
      "description": "Dark, liquid-glass marketing landing page: a full-viewport hero with a cross-fading background video, a frosted glass pill nav and an inline email form, then scroll-revealed about, featured-video, philosophy and services sections, closing on a multi-column footer. Framer Motion throughout, with a self-contained pure-black palette and Instrument Serif accents.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "button",
        "field"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/asme/asme.tsx",
          "type": "registry:block",
          "target": "components/templates/asme/asme.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/asme/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/asme/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/asme/navbar.tsx",
          "type": "registry:block",
          "target": "components/templates/asme/navbar.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/asme/about.tsx",
          "type": "registry:block",
          "target": "components/templates/asme/about.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/asme/featured-video.tsx",
          "type": "registry:block",
          "target": "components/templates/asme/featured-video.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/asme/philosophy.tsx",
          "type": "registry:block",
          "target": "components/templates/asme/philosophy.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/asme/services.tsx",
          "type": "registry:block",
          "target": "components/templates/asme/services.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/asme/footer.tsx",
          "type": "registry:block",
          "target": "components/templates/asme/footer.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/asme/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/asme/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/asme/styles.tsx",
          "type": "registry:block",
          "target": "components/templates/asme/styles.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/asme/fonts.ts",
          "type": "registry:block",
          "target": "components/templates/asme/fonts.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/asme"
        }
      }
    },
    {
      "name": "prism",
      "type": "registry:block",
      "title": "Prism",
      "description": "Dark, liquid-glass landing page for an AI web design agency: a fixed glass pill nav, a full-screen video hero whose headline blurs in word by word over a partners row, a video-backed how-it-works statement, alternating feature rows with looping media, a four-card benefits grid, a stats band over a desaturated video, three testimonials and a video call to action that carries the footer. Self-contained pure-black palette, Barlow + Instrument Serif type, CSS entrances only.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/prism/prism.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/prism.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/navbar.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/navbar.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/process.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/process.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/features.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/features.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/benefits.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/benefits.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/stats.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/stats.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/testimonials.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/testimonials.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/cta.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/cta.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/footer.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/footer.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/styles.tsx",
          "type": "registry:block",
          "target": "components/templates/prism/styles.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/prism/fonts.ts",
          "type": "registry:block",
          "target": "components/templates/prism/fonts.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/prism"
        }
      }
    },
    {
      "name": "akor",
      "type": "registry:block",
      "title": "AKOR",
      "description": "Dark landing page for an intelligent-security firm: a fixed uppercase navbar, a full-screen video hero with copy anchored bottom-start, an inverted near-white services band with a 2x2 numbered card grid, a black about split with a looping video beside a heading-and-mission column, and a simple footer. Self-contained charcoal palette with a vivid green primary, Sora type, CSS entrances only.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/akor/akor.tsx",
          "type": "registry:block",
          "target": "components/templates/akor/akor.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/akor/navbar.tsx",
          "type": "registry:block",
          "target": "components/templates/akor/navbar.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/akor/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/akor/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/akor/services.tsx",
          "type": "registry:block",
          "target": "components/templates/akor/services.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/akor/about.tsx",
          "type": "registry:block",
          "target": "components/templates/akor/about.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/akor/footer.tsx",
          "type": "registry:block",
          "target": "components/templates/akor/footer.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/akor/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/akor/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/akor/styles.tsx",
          "type": "registry:block",
          "target": "components/templates/akor/styles.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/akor/fonts.ts",
          "type": "registry:block",
          "target": "components/templates/akor/fonts.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/akor"
        }
      }
    },
    {
      "name": "nexacore",
      "type": "registry:block",
      "title": "NexaCore",
      "description": "Light enterprise-infrastructure landing page: a floating pill navbar that shrinks on scroll, a full-screen video hero, a dark service-card grid that unfolds on hover, a chaos-versus-control split around a circular streaming video, and a four-pillar delivery staircase. Self-contained navy-and-lavender palette with multi-stop brand gradients, driven by lucide-react.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/nexacore/nexacore.tsx",
          "type": "registry:block",
          "target": "components/templates/nexacore/nexacore.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/nexacore/navbar.tsx",
          "type": "registry:block",
          "target": "components/templates/nexacore/navbar.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/nexacore/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/nexacore/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/nexacore/trusted.tsx",
          "type": "registry:block",
          "target": "components/templates/nexacore/trusted.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/nexacore/service-card.tsx",
          "type": "registry:block",
          "target": "components/templates/nexacore/service-card.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/nexacore/freedom.tsx",
          "type": "registry:block",
          "target": "components/templates/nexacore/freedom.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/nexacore/precision.tsx",
          "type": "registry:block",
          "target": "components/templates/nexacore/precision.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/nexacore/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/nexacore/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/nexacore/styles.tsx",
          "type": "registry:block",
          "target": "components/templates/nexacore/styles.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/nexacore/fonts.ts",
          "type": "registry:block",
          "target": "components/templates/nexacore/fonts.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/nexacore"
        }
      }
    },
    {
      "name": "aurael",
      "type": "registry:block",
      "title": "Aurael",
      "description": "Bilingual (EN/AR) landing page for a home-solar brand, built around a day/night control that re-themes the whole page: a full-height photographic hero that cross-fades between morning and night, then hairline-ruled bands with a sticky meta rail for how it works, cases, about, careers, resources and customers. Self-contained morning/night palettes, Inter + Manrope with Cairo for Arabic, and RTL that follows the surrounding document.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/aurael/aurael.tsx",
          "type": "registry:block",
          "target": "components/templates/aurael/aurael.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/aurael/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/aurael/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/aurael/how-it-works.tsx",
          "type": "registry:block",
          "target": "components/templates/aurael/how-it-works.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/aurael/cases.tsx",
          "type": "registry:block",
          "target": "components/templates/aurael/cases.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/aurael/about.tsx",
          "type": "registry:block",
          "target": "components/templates/aurael/about.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/aurael/careers.tsx",
          "type": "registry:block",
          "target": "components/templates/aurael/careers.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/aurael/resources.tsx",
          "type": "registry:block",
          "target": "components/templates/aurael/resources.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/aurael/customers.tsx",
          "type": "registry:block",
          "target": "components/templates/aurael/customers.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/aurael/footer.tsx",
          "type": "registry:block",
          "target": "components/templates/aurael/footer.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/aurael/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/aurael/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/aurael/styles.tsx",
          "type": "registry:block",
          "target": "components/templates/aurael/styles.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/aurael/fonts.ts",
          "type": "registry:block",
          "target": "components/templates/aurael/fonts.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/aurael"
        }
      }
    },
    {
      "name": "novael",
      "type": "registry:block",
      "title": "Novael",
      "description": "Bilingual (EN/AR) landing page for a technology services firm: a fixed scroll-spy navbar over a headline that sits on a photographic band, an overlapping intro card and count-up stats, a marquee of past employers, a teal service slab, a project grid whose captions expand on hover, and a contact section that doubles as the footer. Self-contained dark palette, Inter + Manrope with Cairo for Arabic, and RTL that follows the surrounding document.",
      "categories": [
        "templates"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/marquee.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/templates/novael/novael.tsx",
          "type": "registry:block",
          "target": "components/templates/novael/novael.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/novael/navbar.tsx",
          "type": "registry:block",
          "target": "components/templates/novael/navbar.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/novael/hero.tsx",
          "type": "registry:block",
          "target": "components/templates/novael/hero.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/novael/team.tsx",
          "type": "registry:block",
          "target": "components/templates/novael/team.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/novael/services.tsx",
          "type": "registry:block",
          "target": "components/templates/novael/services.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/novael/works.tsx",
          "type": "registry:block",
          "target": "components/templates/novael/works.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/novael/contact.tsx",
          "type": "registry:block",
          "target": "components/templates/novael/contact.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/novael/primitives.tsx",
          "type": "registry:block",
          "target": "components/templates/novael/primitives.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/novael/styles.tsx",
          "type": "registry:block",
          "target": "components/templates/novael/styles.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/templates/novael/fonts.ts",
          "type": "registry:block",
          "target": "components/templates/novael/fonts.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/templates/novael"
        }
      }
    },
    {
      "name": "hero-06",
      "type": "registry:block",
      "title": "Hero 06",
      "description": "Centered personal hero: a live \"available for work\" badge, a serif headline with a primary-tinted emphasis span, a sub-line, a three-stat row with hairline dividers, dual rounded CTAs, and a tooltip-backed core-stack icon row framed by gradient rules. Rotated geometric border accents zoom in behind it (and stay still under reduced motion).",
      "categories": [
        "blocks",
        "hero"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "tooltip"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/hero-06/hero-06.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-06.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/hero/hero-06"
        }
      }
    },
    {
      "name": "hero-07",
      "type": "registry:block",
      "title": "Hero 07",
      "description": "Centered hero with a word-by-word blur-in serif headline, a glass beta badge with a live dot, dual rounded CTAs, and animated beam line-art SVGs that trace the top, bottom, and both sides of the section. Respects reduced-motion.",
      "categories": [
        "blocks",
        "hero"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/hero-07/hero-07.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-07.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/hero/hero-07"
        }
      }
    },
    {
      "name": "hero-08",
      "type": "registry:block",
      "title": "Hero 08",
      "description": "Centered hero on a framed, token-lit panel: a pill badge, a serif headline with an italic emphasis span, sub-copy, dual CTA buttons, and a window preview of a task board with named cards and statuses. Everything rises in with a staggered entrance that respects reduced motion.",
      "categories": [
        "blocks",
        "hero"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/hero-08/hero-08.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-08.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/hero/hero-08"
        }
      }
    },
    {
      "name": "testimonial-03",
      "type": "registry:block",
      "title": "Testimonial 03",
      "description": "Centered statement quote with a serif display, an inline quote glyph in the corner, gradient hairline dividers, and a highlighted phrase, closed by a small attribution line.",
      "categories": [
        "blocks",
        "testimonial"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/testimonial-03/testimonial-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/testimonial-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/testimonials/testimonial-03"
        }
      }
    },
    {
      "name": "testimonial-04",
      "type": "registry:block",
      "title": "Testimonial 04",
      "description": "Three-column quote grid under a centered pill badge and word-by-word headline. Each card opens with a quote mark, then the quote and an author line. Cards rise in with a short stagger.",
      "categories": [
        "blocks",
        "testimonial"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/testimonial-04/testimonial-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/testimonial-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/testimonials/testimonial-04"
        }
      }
    },
    {
      "name": "testimonial-05",
      "type": "registry:block",
      "title": "Testimonial 05",
      "description": "Customer stories carousel where each card leads with a measured result, then a short quote, the person behind it and a link to the case study, with a slide counter and a segmented progress bar.",
      "categories": [
        "blocks",
        "testimonial"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "carousel"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/testimonial-05/testimonial-05.tsx",
          "type": "registry:block",
          "target": "components/blocks/testimonial-05.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/testimonials/testimonial-05"
        }
      }
    },
    {
      "name": "cta-04",
      "type": "registry:block",
      "title": "CTA 04",
      "description": "Centered get-in-touch CTA with a pill eyebrow, serif headline, mail button, a copy-to-clipboard email address, and GitHub and LinkedIn icon buttons, capped by a soft radial glow dome with a starfield speckle.",
      "categories": [
        "blocks",
        "cta"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/copy-button.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/cta-04/cta-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/cta-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cta/cta-04"
        }
      }
    },
    {
      "name": "cta-05",
      "type": "registry:block",
      "title": "CTA 05",
      "description": "Contact CTA panel with a scroll-reactive radial glow, an eyebrow badge, a word-by-word reveal headline, and two contact actions (email and call) each pairing a button with its detail line.",
      "categories": [
        "blocks",
        "cta"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/copy-button.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/cta-05/cta-05.tsx",
          "type": "registry:block",
          "target": "components/blocks/cta-05.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cta/cta-05"
        }
      }
    },
    {
      "name": "cta-06",
      "type": "registry:block",
      "title": "CTA 06",
      "description": "CTA banner on one tokenized gradient surface: an eyebrow label, a serif headline with an italic emphasis, short sub-copy, and a primary action button that rises in.",
      "categories": [
        "blocks",
        "cta"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/cta-06/cta-06.tsx",
          "type": "registry:block",
          "target": "components/blocks/cta-06.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cta/cta-06"
        }
      }
    },
    {
      "name": "footer-02",
      "type": "registry:block",
      "title": "Footer 02",
      "description": "Rounded-top footer with a brand block beside a multi-column link grid. Each column caps at five links and shows a \"View all\" arrow when there are more. A soft radial tint sits behind the top edge, and a bottom meta row carries the copyright and secondary links.",
      "categories": [
        "blocks",
        "footer"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/footer-02/footer-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/footer-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/footer/footer-02"
        }
      }
    },
    {
      "name": "footer-03",
      "type": "registry:block",
      "title": "Footer 03",
      "description": "Boxed link-column footer: a two-column brand block with wordmark, blurb, and ghost social buttons, two link columns, and a divided copyright row. Sits in a soft outlined panel.",
      "categories": [
        "blocks",
        "footer"
      ],
      "dependencies": [],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/footer-03/footer-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/footer-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/footer/footer-03"
        }
      }
    },
    {
      "name": "footer-04",
      "type": "registry:block",
      "title": "Footer 04",
      "description": "Four-column footer lit by slow light rays falling from the top edge: brand mark and blurb, a contact column with WhatsApp and email links, a location column, and a subscribe form whose placeholder cycles through prompts. Columns and links rise in with staggered motion; a divided copyright row closes it. Rays hold still under reduced-motion.",
      "categories": [
        "blocks",
        "footer"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "button",
        "input",
        "separator"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/footer-04/footer-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/footer-04.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/blocks/footer-04/footer-04-beams.tsx",
          "type": "registry:block",
          "target": "components/blocks/footer-04-beams.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/footer/footer-04"
        }
      }
    },
    {
      "name": "faq-05",
      "type": "registry:block",
      "title": "FAQ 05",
      "description": "Two-column FAQ block: an eyebrow, serif headline and short intro sit on the start side; a single-open accordion of five questions sits on the end side, split by a vertical divider that collapses to a stacked layout on mobile.",
      "categories": [
        "blocks",
        "faq"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/accordion.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/faq-05/faq-05.tsx",
          "type": "registry:block",
          "target": "components/blocks/faq-05.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/faqs/faq-05"
        }
      }
    },
    {
      "name": "faq-06",
      "type": "registry:block",
      "title": "FAQ 06",
      "description": "Centered FAQ with a pill badge, a word-by-word headline reveal and a short intro above a multi-open accordion where each question is its own bordered card that rises in with a staggered delay and tints slightly when open. Ships composable parts.",
      "categories": [
        "blocks",
        "faq"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/accordion.json",
        "badge"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/faq-06/faq-06.tsx",
          "type": "registry:block",
          "target": "components/blocks/faq-06.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/faqs/faq-06"
        }
      }
    },
    {
      "name": "contact-02",
      "type": "registry:block",
      "title": "Contact 02",
      "description": "Bordered contact section with a serif header and a three-column info grid: email with a copy button, location, and social pills.",
      "categories": [
        "blocks",
        "contact"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "separator"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/contact-02/contact-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/contact-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/contact/contact-02"
        }
      }
    },
    {
      "name": "contact-03",
      "type": "registry:block",
      "title": "Contact 03",
      "description": "Centered contact panel whose bottom glow widens as the section scrolls into view, with a pill badge, a word-by-word headline reveal, two short paragraphs, and a two-column CTA grid: an email button with the address and a copy button beneath it and an outline call button that opens a WhatsApp chat. Ships composable parts.",
      "categories": [
        "blocks",
        "contact"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/contact-03/contact-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/contact-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/contact/contact-03"
        }
      }
    },
    {
      "name": "contact-04",
      "type": "registry:block",
      "title": "Contact 04",
      "description": "Support contact section with a live reply-time line from fixed support hours, contact channels, common questions, and a ticket form that suggests help articles as you type the subject.",
      "categories": [
        "blocks",
        "contact"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/accordion.json",
        "button",
        "field",
        "input",
        "select",
        "spinner",
        "textarea"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/contact-04/contact-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/contact-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/contact/contact-04"
        }
      }
    },
    {
      "name": "toc",
      "type": "registry:component",
      "title": "Table of Contents",
      "description": "On-this-page navigation that tracks the active heading as you scroll and highlights it with a moving border marker. Takes a flat or nested items list, or composes from parts. Smooth scroll respects reduced-motion.",
      "categories": [
        "navigation"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/toc.tsx",
          "type": "registry:component",
          "target": "components/toc.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/toc"
        }
      }
    },
    {
      "name": "app-shell-05",
      "type": "registry:block",
      "title": "App Shell 05",
      "description": "Inset sidebar app shell: a collapsible icon sidebar with a brand header, grouped Workspace and Tools nav (with a Beta badge), and an account menu in the footer, paired with a sticky header carrying the sidebar toggle and a breadcrumb. The inset holds a documents list with status filters that actually filter.",
      "categories": [
        "blocks",
        "app-shell"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "badge",
        "breadcrumb",
        "button",
        "direction",
        "dropdown-menu",
        "separator",
        "sidebar"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/app-shell-05/app-shell-05.tsx",
          "type": "registry:block",
          "target": "components/blocks/app-shell-05.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/app-shell/app-shell-05"
        }
      }
    },
    {
      "name": "app-shell-06",
      "type": "registry:block",
      "title": "App Shell 06",
      "description": "A nested app sidebar for shadcn/ui. Open a project or settings and the whole sidebar slides to its own links, like the Vercel dashboard, instead of expanding a dropdown. A back row slides out again, the breadcrumb follows the path, and multi-level menus go as deep as you need. Built from sidebar tokens, so it takes on your theme.",
      "categories": [
        "blocks",
        "app-shell"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "breadcrumb",
        "direction",
        "separator",
        "sidebar"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/app-shell-06/app-shell-06.tsx",
          "type": "registry:block",
          "target": "components/blocks/app-shell-06.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/app-shell/app-shell-06"
        }
      }
    },
    {
      "name": "dashboard-06",
      "type": "registry:block",
      "title": "Dashboard 06",
      "description": "Pipeline overview dashboard: four stat cards for success, failure, skipped, and live activity, a clickable latest-runs bar chart with a run breakdown panel, and a recent-runs list. The active-now stat uses the primary color for live state; every color is a theme token, so it works in light and dark.",
      "categories": [
        "blocks",
        "dashboard"
      ],
      "dependencies": [
        "lucide-react",
        "recharts"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "card",
        "chart",
        "empty"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "docs": "Charts run on recharts via the shadcn chart primitive. Give ChartContainer's parent an explicit height, and update chartConfig's keys when you swap in real data.",
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/dashboard-06/dashboard-06.tsx",
          "type": "registry:block",
          "target": "components/blocks/dashboard-06.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/dashboard/dashboard-06"
        }
      }
    },
    {
      "name": "confirm",
      "type": "registry:component",
      "title": "Confirm",
      "description": "Imperative confirmation dialog: a root provider plus a useConfirm hook that resolves a promise on confirm or cancel. Default or destructive tone, an optional icon, and an async confirm action with a pending spinner.",
      "categories": [
        "display"
      ],
      "dependencies": [],
      "registryDependencies": [
        "alert-dialog",
        "button",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/confirm.tsx",
          "type": "registry:component",
          "target": "components/confirm.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/confirm"
        }
      }
    },
    {
      "name": "unsaved-guard",
      "type": "registry:component",
      "title": "Unsaved Guard",
      "description": "Unsaved-changes guard: a root provider plus a useUnsavedGuard hook. Warns before reload, tab close and in-app link navigation, and returns a guard(proceed) to wrap programmatic navigation in a confirm dialog.",
      "categories": [
        "display"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/confirm.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/unsaved-guard.tsx",
          "type": "registry:component",
          "target": "components/unsaved-guard.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/unsaved-guard"
        }
      }
    },
    {
      "name": "data-table",
      "type": "registry:component",
      "title": "Data Table",
      "description": "TanStack-powered data table: faceted, text, range and date filters, sortable columns, column visibility, row selection and pagination, with page, sort and filters kept in the URL. One useDataTable hook drives it: pass pageCount to query server-side, or omit it to sort, filter and page a local array in memory. Ships as a folder of composable parts.",
      "categories": [
        "data"
      ],
      "dependencies": [
        "@tanstack/react-table",
        "lucide-react",
        "nuqs",
        "react-day-picker",
        "zod"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "calendar",
        "command",
        "dropdown-menu",
        "field",
        "input",
        "popover",
        "select",
        "separator",
        "skeleton",
        "slider",
        "table"
      ],
      "docs": "Needs a NuqsAdapter wrapping your app (nuqs) or the URL-synced page/sort/filter state won't work. Built for @tanstack/react-table v9; the table's features, row models and column meta typing live in data-table-features.ts. Component files keep a \"use no memo\" pragma, required under the React Compiler because column/row getter reads would otherwise be memoized stale, so don't remove it.",
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table.tsx",
          "type": "registry:component",
          "target": "components/data-table/data-table.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-toolbar.tsx",
          "type": "registry:component",
          "target": "components/data-table/data-table-toolbar.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-column-header.tsx",
          "type": "registry:component",
          "target": "components/data-table/data-table-column-header.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-pagination.tsx",
          "type": "registry:component",
          "target": "components/data-table/data-table-pagination.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-view-options.tsx",
          "type": "registry:component",
          "target": "components/data-table/data-table-view-options.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-faceted-filter.tsx",
          "type": "registry:component",
          "target": "components/data-table/data-table-faceted-filter.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-slider-filter.tsx",
          "type": "registry:component",
          "target": "components/data-table/data-table-slider-filter.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-date-filter.tsx",
          "type": "registry:component",
          "target": "components/data-table/data-table-date-filter.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-skeleton.tsx",
          "type": "registry:component",
          "target": "components/data-table/data-table-skeleton.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/use-data-table.ts",
          "type": "registry:hook",
          "target": "components/data-table/use-data-table.ts"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-features.ts",
          "type": "registry:lib",
          "target": "components/data-table/data-table-features.ts"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-parsers.ts",
          "type": "registry:lib",
          "target": "components/data-table/data-table-parsers.ts"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-utils.ts",
          "type": "registry:lib",
          "target": "components/data-table/data-table-utils.ts"
        },
        {
          "path": "registry/hirael/bases/radix/components/data-table/data-table-labels.ts",
          "type": "registry:lib",
          "target": "components/data-table/data-table-labels.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/data-table"
        }
      }
    },
    {
      "name": "process-01",
      "type": "registry:block",
      "title": "Process 01",
      "description": "Team onboarding in three indexed steps (invite, connect tools, ship the first project), each with a primary hairline, a title, a body and a short detail line.",
      "categories": [
        "blocks",
        "process"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/process-01/process-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/process-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/process/process-01"
        }
      }
    },
    {
      "name": "process-02",
      "type": "registry:block",
      "title": "Process 02",
      "description": "Four-step install section. Picking a step fills the connector up to it and swaps in a detail panel with a short checklist, and the section closes on a copyable install command.",
      "categories": [
        "blocks",
        "process"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/copy-button.json",
        "tabs"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/process-02/process-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/process-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/process/process-02"
        }
      }
    },
    {
      "name": "feature-03",
      "type": "registry:block",
      "title": "Feature 03",
      "description": "Bento explaining install: a lead tile with the shadcn add command and the files it writes, beside five indexed tiles on dependencies, aliases, npm packages, tokens and runtime.",
      "categories": [
        "blocks",
        "feature"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/feature-03/feature-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/feature-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/features/feature-03"
        }
      }
    },
    {
      "name": "feature-04",
      "type": "registry:block",
      "title": "Feature 04",
      "description": "Services grid: a pill badge, title and intro over a three-column set of cards, each with a large thin icon, title, blurb and a three-point bullet list, lit by a static primary radial glow. Cards rise in with a staggered CSS entrance.",
      "categories": [
        "blocks",
        "feature"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/feature-04/feature-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/feature-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/features/feature-04"
        }
      }
    },
    {
      "name": "feature-05",
      "type": "registry:block",
      "title": "Feature 05",
      "description": "Values section: a centered header over a two-column, offset grid of six glass cards, each backed by a static dot pattern in the primary color, rising in with a staggered CSS entrance.",
      "categories": [
        "blocks",
        "feature"
      ],
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/feature-05/feature-05.tsx",
          "type": "registry:block",
          "target": "components/blocks/feature-05.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/features/feature-05"
        }
      }
    },
    {
      "name": "feature-06",
      "type": "registry:block",
      "title": "Feature 06",
      "description": "About section: a centered animated header over two equal story cards, each decorated with a fading SVG grid pattern and a token-lit gradient, with a heading and two paragraphs that rise in after the card. Reduced-motion renders everything in place.",
      "categories": [
        "blocks",
        "feature"
      ],
      "dependencies": [],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/feature-06/feature-06.tsx",
          "type": "registry:block",
          "target": "components/blocks/feature-06.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/features/feature-06"
        }
      }
    },
    {
      "name": "comparison-01",
      "type": "registry:block",
      "title": "Comparison 01",
      "description": "Two-column us-and-them panel: a featured column of checked points beside a muted column of the usual trade-offs, split by a divider that stacks on mobile.",
      "categories": [
        "blocks",
        "comparison"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/comparison-01/comparison-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/comparison-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/comparison/comparison-01"
        }
      }
    },
    {
      "name": "comparison-02",
      "type": "registry:block",
      "title": "Comparison 02",
      "description": "Three-column feature matrix with a highlighted middle column, mixed tick and text cells, and a call to action in the footer row.",
      "categories": [
        "blocks",
        "comparison"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/comparison-02/comparison-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/comparison-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/comparison/comparison-02"
        }
      }
    },
    {
      "name": "comparison-03",
      "type": "registry:block",
      "title": "Comparison 03",
      "description": "Before and after panels side by side, the old way muted with crosses and the new way ticked, a Before/After switch on small screens, closing on an outcome strip.",
      "categories": [
        "blocks",
        "comparison"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/comparison-03/comparison-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/comparison-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/comparison/comparison-03"
        }
      }
    },
    {
      "name": "comparison-04",
      "type": "registry:block",
      "title": "Comparison 04",
      "description": "Three-plan feature matrix with a sticky plan header, a column highlight that follows the pointer, a switch that hides rows where every plan is equal, and a single-plan picker on small screens.",
      "categories": [
        "blocks",
        "comparison"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "label",
        "switch",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/comparison-04/comparison-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/comparison-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/comparison/comparison-04"
        }
      }
    },
    {
      "name": "newsletter-01",
      "type": "registry:block",
      "title": "Newsletter 01",
      "description": "Centered subscribe panel with an inline email form, inline validation and a success state that swaps in a confirmation once a valid address is entered.",
      "categories": [
        "blocks",
        "newsletter"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "field",
        "input"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/newsletter-01/newsletter-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/newsletter-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/newsletter/newsletter-01"
        }
      }
    },
    {
      "name": "newsletter-02",
      "type": "registry:block",
      "title": "Newsletter 02",
      "description": "Waitlist form that validates the address, shows a brief loading state, then returns your place in line with an invite link to copy and the referral rewards it unlocks.",
      "categories": [
        "blocks",
        "newsletter"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/animated-number.json",
        "https://hirael.com/r/avatar-stack.json",
        "button",
        "https://hirael.com/r/copy-button.json",
        "field",
        "input-group",
        "progress",
        "spinner"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/newsletter-02/newsletter-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/newsletter-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/newsletter/newsletter-02"
        }
      }
    },
    {
      "name": "careers-01",
      "type": "registry:block",
      "title": "Careers 01",
      "description": "Open-roles list with department filter pills and rows that show title, department, location and type, each linking out with a hover arrow.",
      "categories": [
        "blocks",
        "careers"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/careers-01/careers-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/careers-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/careers/careers-01"
        }
      }
    },
    {
      "name": "careers-02",
      "type": "registry:block",
      "title": "Careers 02",
      "description": "Single job posting with the role details, a numbered hiring process and a sticky apply form with CV upload, validation and a success state. On small screens a sticky button jumps to the form.",
      "categories": [
        "blocks",
        "careers"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "field",
        "https://hirael.com/r/file-dropzone.json",
        "input",
        "separator",
        "spinner",
        "textarea"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/careers-02/careers-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/careers-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/careers/careers-02"
        }
      }
    },
    {
      "name": "hero-09",
      "type": "registry:block",
      "title": "Hero 09",
      "description": "Full-viewport product hero on a rounded card that zooms out as the page scrolls: an inline nav with brand and actions, a serif headline, sub-copy, dual CTAs, a labelled step-type strip, a drifting WebGL gradient mixed from the theme tokens, a bouncing scroll cue and a carved stat corner. Reduced-motion aware.",
      "categories": [
        "blocks",
        "hero"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/hero-09/hero-09.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-09.tsx"
        },
        {
          "path": "registry/hirael/bases/radix/blocks/hero-09/hero-09-backdrop.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-09-backdrop.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/hero/hero-09"
        }
      }
    },
    {
      "name": "feature-07",
      "type": "registry:block",
      "title": "Feature 07",
      "description": "Problem-framing trio: a badge and serif headline with a muted second half above three cards, each an orb icon in concentric rings with a soft radial glow, a title and a short description. Cards fade up in sequence, stilled under reduced motion.",
      "categories": [
        "blocks",
        "feature"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/feature-07/feature-07.tsx",
          "type": "registry:block",
          "target": "components/blocks/feature-07.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/features/feature-07"
        }
      }
    },
    {
      "name": "feature-08",
      "type": "registry:block",
      "title": "Feature 08",
      "description": "Six-card feature grid on hairline rails: each card carries an inline icon beside its title, a title and a description, corner crosshair marks, and a radial spotlight that follows the pointer on hover. Warm-tinted top glow per card.",
      "categories": [
        "blocks",
        "feature"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/feature-08/feature-08.tsx",
          "type": "registry:block",
          "target": "components/blocks/feature-08.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/features/feature-08"
        }
      }
    },
    {
      "name": "feature-09",
      "type": "registry:block",
      "title": "Feature 09",
      "description": "Selectable catalog bento on a hairline grid: step cells with a large faded icon, title and description; picking one shows its sample settings in a panel below. Crosshair frames clip at the cell edge.",
      "categories": [
        "blocks",
        "feature"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/feature-09/feature-09.tsx",
          "type": "registry:block",
          "target": "components/blocks/feature-09.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/features/feature-09"
        }
      }
    },
    {
      "name": "feature-10",
      "type": "registry:block",
      "title": "Feature 10",
      "description": "Mixed-cell overview bento: a quote with attribution, two metric tiles, a latest-drop card with a CardAction, and a three-job list, all on one hairline lattice.",
      "categories": [
        "blocks",
        "feature"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "card"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/feature-10/feature-10.tsx",
          "type": "registry:block",
          "target": "components/blocks/feature-10.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/features/feature-10"
        }
      }
    },
    {
      "name": "feature-11",
      "type": "registry:block",
      "title": "Feature 11",
      "description": "Feature switcher for a shared inbox: a vertical tab list of three capabilities beside a panel previewing each one, from assigned conversations to saved replies and snooze times. Arrow keys move between tabs and the panel follows.",
      "categories": [
        "blocks",
        "feature"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "tabs"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/feature-11/feature-11.tsx",
          "type": "registry:block",
          "target": "components/blocks/feature-11.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/features/feature-11"
        }
      }
    },
    {
      "name": "bento-01",
      "type": "registry:block",
      "title": "Bento 01",
      "description": "A developer platform bento where a deploy log streams when you press Deploy, region latencies update live, and a 90-day uptime strip, install command and usage chart all respond to input. Ships composable parts.",
      "categories": [
        "blocks",
        "bento"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/animated-number.json",
        "badge",
        "button",
        "https://hirael.com/r/copy-button.json",
        "https://hirael.com/r/sparkline.json",
        "spinner",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/bento-01/bento-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/bento-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/bento/bento-01"
        }
      }
    },
    {
      "name": "bento-02",
      "type": "registry:block",
      "title": "Bento 02",
      "description": "A team collaboration bento with live presence you can follow, a comment thread you can reply to and resolve, a kanban whose cards move by drag or arrows, integration switches and notification settings with a weekly estimate. Ships composable parts.",
      "categories": [
        "blocks",
        "bento"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/animated-number.json",
        "avatar",
        "button",
        "input",
        "switch",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/bento-02/bento-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/bento-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/bento/bento-02"
        }
      }
    },
    {
      "name": "bento-03",
      "type": "registry:block",
      "title": "Bento 03",
      "description": "An analytics bento where a range toggle, segment chips and saved reports drive one shared dataset, so the visitor count, funnel and country list always add up.",
      "categories": [
        "blocks",
        "bento"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/animated-number.json",
        "button",
        "https://hirael.com/r/sparkline.json",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/bento-03/bento-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/bento-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/bento/bento-03"
        }
      }
    },
    {
      "name": "bento-04",
      "type": "registry:block",
      "title": "Bento 04",
      "description": "A security and compliance bento with a live audit trail you can pause, a role permission matrix with save and discard, a 2FA adoption meter, certificate expiry countdowns with renew, and a validated access request form. Ships composable parts.",
      "categories": [
        "blocks",
        "bento"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/animated-number.json",
        "badge",
        "button",
        "checkbox",
        "field",
        "select",
        "spinner",
        "switch",
        "table",
        "textarea",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/bento-04/bento-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/bento-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/bento/bento-04"
        }
      }
    },
    {
      "name": "pricing-04",
      "type": "registry:block",
      "title": "Pricing 04",
      "description": "Three-tier pricing row with a monthly/yearly toggle, an uppercase plan label, a large price with billing note, a tagline, a full-width CTA and a check-marked quota list; the featured tier gets a primary border, a top radial glow and a most-popular badge.",
      "categories": [
        "blocks",
        "pricing"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/pricing-04/pricing-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/pricing-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/pricing/pricing-04"
        }
      }
    },
    {
      "name": "pricing-05",
      "type": "registry:block",
      "title": "Pricing 05",
      "description": "Usage pricing calculator with sliders for active users and build minutes, a priority support switch, and a live monthly estimate broken into line items with a volume tier note and monthly or yearly billing.",
      "categories": [
        "blocks",
        "pricing"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/animated-number.json",
        "button",
        "field",
        "separator",
        "slider",
        "switch",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/pricing-05/pricing-05.tsx",
          "type": "registry:block",
          "target": "components/blocks/pricing-05.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/pricing/pricing-05"
        }
      }
    },
    {
      "name": "faq-07",
      "type": "registry:block",
      "title": "FAQ 07",
      "description": "Split FAQ: a heading, lead and numbered topic index on the start side; picking a topic opens its answer in the single-open accordion on the end side.",
      "categories": [
        "blocks",
        "faq"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/accordion.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/faq-07/faq-07.tsx",
          "type": "registry:block",
          "target": "components/blocks/faq-07.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/faqs/faq-07"
        }
      }
    },
    {
      "name": "cta-07",
      "type": "registry:block",
      "title": "CTA 07",
      "description": "Closing CTA panel wrapped in a scroll-reactive primary rim glow that widens as the section moves through the viewport, with an eyebrow badge, a two-tone serif headline, sub-copy and dual CTAs. Static glow under reduced motion.",
      "categories": [
        "blocks",
        "cta"
      ],
      "dependencies": [
        "lucide-react",
        "motion"
      ],
      "registryDependencies": [
        "badge",
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/cta-07/cta-07.tsx",
          "type": "registry:block",
          "target": "components/blocks/cta-07.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cta/cta-07"
        }
      }
    },
    {
      "name": "hero-10",
      "type": "registry:block",
      "title": "Hero 10",
      "description": "Bordered hero card over a blurred full-bleed image: a rocket badge, a large centered headline, sub-copy and dual CTAs that rise into place on load. Reduced-motion aware.",
      "categories": [
        "blocks",
        "hero"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/hero-10/hero-10.tsx",
          "type": "registry:block",
          "target": "components/blocks/hero-10.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/hero/hero-10"
        }
      }
    },
    {
      "name": "footer-06",
      "type": "registry:block",
      "title": "Footer 06",
      "description": "Two-part footer: a bordered CTA panel over a rotated, blurred image with a headline, sub-copy and a wide sign-up button, above a brand block with social icons, two link columns and a hairline copyright row.",
      "categories": [
        "blocks",
        "footer"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/footer-06/footer-06.tsx",
          "type": "registry:block",
          "target": "components/blocks/footer-06.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/footer/footer-06"
        }
      }
    },
    {
      "name": "footer-05",
      "type": "registry:block",
      "title": "Footer 05",
      "description": "Floating card footer inset from the page edge: a brand block with mark and tagline, three link columns, and a hairline-divided legal row with copyright and a sign-off line.",
      "categories": [
        "blocks",
        "footer"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/footer-05/footer-05.tsx",
          "type": "registry:block",
          "target": "components/blocks/footer-05.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/footer/footer-05"
        }
      }
    },
    {
      "name": "status-01",
      "type": "registry:block",
      "title": "Status 01",
      "description": "Service status page: an operational banner with an inline check, a 90-day uptime grid of tooltip-backed day bars per service with a status legend, and a dated incident history where each update carries a tone-colored badge, a timestamp and a note.",
      "categories": [
        "blocks",
        "not-found"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "tooltip"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/status-01/status-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/status-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/not-found/status-01"
        }
      }
    },
    {
      "name": "status-02",
      "type": "registry:block",
      "title": "Status 02",
      "description": "Service health cards in a responsive grid: each with a status dot, a response-time sparkline tinted by state, a status label, and an uptime and response stat pair. One service runs degraded.",
      "categories": [
        "blocks",
        "not-found"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/sparkline.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/status-02/status-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/status-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/not-found/status-02"
        }
      }
    },
    {
      "name": "metric-card",
      "type": "registry:component",
      "title": "Metric Card",
      "description": "Compact metric card with a value and unit, a tone-aware sparkline and an up / down trend line. Compound API.",
      "categories": [
        "data"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/metric-card.tsx",
          "type": "registry:component",
          "target": "components/metric-card.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/metric-card"
        }
      }
    },
    {
      "name": "yaml-editor",
      "type": "registry:component",
      "title": "YAML Editor",
      "description": "Editable code field with dependency-free YAML syntax highlighting, a line-number gutter and tab-to-indent. Controlled or uncontrolled.",
      "categories": [
        "inputs"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/yaml-editor.tsx",
          "type": "registry:component",
          "target": "components/yaml-editor.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/yaml-editor"
        }
      }
    },
    {
      "name": "server-card",
      "type": "registry:block",
      "title": "Server Card",
      "description": "Fleet of host cards, each with a status pill, region, CPU / memory / disk specs and threshold-tinted usage meters. Ships composable parts.",
      "categories": [
        "blocks",
        "cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/server-card/server-card.tsx",
          "type": "registry:block",
          "target": "components/blocks/server-card.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cloud/server-card"
        }
      }
    },
    {
      "name": "vm-table",
      "type": "registry:block",
      "title": "VM Table",
      "description": "Virtual-machine instance table with live status dots, size, region, IP and uptime. Self-contained parts, no table primitive required.",
      "categories": [
        "blocks",
        "cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "empty",
        "table",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/vm-table/vm-table.tsx",
          "type": "registry:block",
          "target": "components/blocks/vm-table.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cloud/vm-table"
        }
      }
    },
    {
      "name": "k8s-pod-table",
      "type": "registry:block",
      "title": "Kubernetes Pod Table",
      "description": "Kubernetes pod table with phase pills (Running, Pending, CrashLoopBackOff), ready and restart counts that flag unhealthy pods.",
      "categories": [
        "blocks",
        "cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "empty",
        "table",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/k8s-pod-table/k8s-pod-table.tsx",
          "type": "registry:block",
          "target": "components/blocks/k8s-pod-table.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cloud/k8s-pod-table"
        }
      }
    },
    {
      "name": "resource-status",
      "type": "registry:block",
      "title": "Resource Status",
      "description": "Statuspage-style panel: an overall banner over a list of resources, each with an operational / degraded / outage / maintenance state and uptime.",
      "categories": [
        "blocks",
        "cloud"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/resource-status/resource-status.tsx",
          "type": "registry:block",
          "target": "components/blocks/resource-status.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cloud/resource-status"
        }
      }
    },
    {
      "name": "cluster-map",
      "type": "registry:block",
      "title": "Cluster Map",
      "description": "Grid heatmap of cluster nodes, each cell tinted by health and load with a hover label, plus a legend. Ships composable parts.",
      "categories": [
        "blocks",
        "cloud"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/cluster-map/cluster-map.tsx",
          "type": "registry:block",
          "target": "components/blocks/cluster-map.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cloud/cluster-map"
        }
      }
    },
    {
      "name": "network-topology",
      "type": "registry:block",
      "title": "Network Topology",
      "description": "Coordinate-placed topology diagram: nodes with status and icons over an SVG edge layer, with animated active links. Ships composable parts.",
      "categories": [
        "blocks",
        "cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/network-topology/network-topology.tsx",
          "type": "registry:block",
          "target": "components/blocks/network-topology.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cloud/network-topology"
        }
      }
    },
    {
      "name": "storage-browser",
      "type": "registry:block",
      "title": "Storage Browser",
      "description": "Object-storage file browser with a clickable path breadcrumb, folder and file rows, sizes and modified dates, and a details row for the selected file. Ships composable parts.",
      "categories": [
        "blocks",
        "cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/storage-browser/storage-browser.tsx",
          "type": "registry:block",
          "target": "components/blocks/storage-browser.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cloud/storage-browser"
        }
      }
    },
    {
      "name": "log-viewer",
      "type": "registry:block",
      "title": "Log Viewer",
      "description": "Streaming log panel with severity-colored lines, timestamps and sources, a level filter with counts, and a Follow toggle that tails new lines and unpins when you scroll up. Ships composable parts.",
      "categories": [
        "blocks",
        "cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "empty",
        "toggle",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/log-viewer/log-viewer.tsx",
          "type": "registry:block",
          "target": "components/blocks/log-viewer.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cloud/log-viewer"
        }
      }
    },
    {
      "name": "terminal",
      "type": "registry:block",
      "title": "Terminal",
      "description": "Terminal surface with a title bar, output lines and an interactive prompt input with command-history recall. Ships composable parts.",
      "categories": [
        "blocks",
        "cloud"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/terminal/terminal.tsx",
          "type": "registry:block",
          "target": "components/blocks/terminal.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cloud/terminal"
        }
      }
    },
    {
      "name": "deployment-history",
      "type": "registry:block",
      "title": "Deployment History",
      "description": "Deployment feed on a connecting rail: version, environment and status (deployed, failed, building, rolled back) with commit and author meta.",
      "categories": [
        "blocks",
        "cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "spinner"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/deployment-history/deployment-history.tsx",
          "type": "registry:block",
          "target": "components/blocks/deployment-history.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cloud/deployment-history"
        }
      }
    },
    {
      "name": "kanban",
      "type": "registry:component",
      "title": "Kanban",
      "description": "Board of columns and cards on dnd-kit: pointer and keyboard drag-and-drop across columns, a drag overlay, an empty-column hint, and one commit per move.",
      "categories": [
        "data"
      ],
      "dependencies": [
        "@dnd-kit/core",
        "@dnd-kit/sortable",
        "@dnd-kit/utilities",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/sortable.json",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/kanban.tsx",
          "type": "registry:component",
          "target": "components/kanban.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/kanban"
        }
      }
    },
    {
      "name": "sparkline",
      "type": "registry:component",
      "title": "Sparkline",
      "description": "Tiny inline chart on recharts in line, area or bar form with optional curve, last-point dot, reference line and hover tooltip. Tints with currentColor.",
      "categories": [
        "data"
      ],
      "dependencies": [
        "recharts"
      ],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/sparkline.tsx",
          "type": "registry:component",
          "target": "components/sparkline.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/sparkline"
        }
      }
    },
    {
      "name": "gauge",
      "type": "registry:component",
      "title": "Gauge",
      "description": "Radial SVG gauge for a single reading on a scale, with threshold bands that recolour the arc, an animated sweep and a centred value and caption. Any start and end angle, from a half circle to a full ring.",
      "categories": [
        "data"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/gauge.tsx",
          "type": "registry:component",
          "target": "components/gauge.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/gauge"
        }
      }
    },
    {
      "name": "meter",
      "type": "registry:component",
      "title": "Meter",
      "description": "Linear meter for how much of a limit is used, like storage or an API quota, with stacked segments, a legend and thresholds that change the colour. Unlike Progress, which tracks a task, it shows an amount against a limit.",
      "categories": [
        "data"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/meter.tsx",
          "type": "registry:component",
          "target": "components/meter.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/meter"
        }
      }
    },
    {
      "name": "json-viewer",
      "type": "registry:component",
      "title": "JSON Viewer",
      "description": "Collapsible JSON tree with typed value colors, item counts on closed nodes, long-string truncation, expand or collapse all, copy, and arrow-key navigation.",
      "categories": [
        "display"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/copy-button.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/json-viewer.tsx",
          "type": "registry:component",
          "target": "components/json-viewer.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/display/json-viewer"
        }
      }
    },
    {
      "name": "cron-editor",
      "type": "registry:component",
      "title": "Cron Editor",
      "description": "Visual cron builder kept in sync with the raw expression. Presets, per-field modes, validation, a plain-English preview, and the next run times.",
      "categories": [
        "inputs"
      ],
      "dependencies": [],
      "registryDependencies": [
        "button",
        "field",
        "input",
        "native-select",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/cron-editor.tsx",
          "type": "registry:component",
          "target": "components/cron-editor.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/cron-editor"
        }
      }
    },
    {
      "name": "country-select",
      "type": "registry:component",
      "title": "Country Select",
      "description": "Searchable country picker with flag emoji, pinned countries, optional dial codes, and single or multiple selection. Search by name or ISO code.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "command",
        "popover",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/country-select.tsx",
          "type": "registry:component",
          "target": "components/country-select.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/country-select"
        }
      }
    },
    {
      "name": "command-palette",
      "type": "registry:component",
      "title": "Command Palette",
      "description": "Keyboard-first command menu with a platform shortcut, nested pages, remembered recents and shortcut hints on each row.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "command",
        "kbd",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/command-palette.tsx",
          "type": "registry:component",
          "target": "components/command-palette.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/command-palette"
        }
      }
    },
    {
      "name": "address-input",
      "type": "registry:component",
      "title": "Address Input",
      "description": "Postal address field group that follows the selected country: which fields appear, the order they sit in, and what they are called.",
      "categories": [
        "inputs"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/country-select.json",
        "field",
        "input",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/address-input.tsx",
          "type": "registry:component",
          "target": "components/address-input.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/address-input"
        }
      }
    },
    {
      "name": "credit-card-input",
      "type": "registry:component",
      "title": "Credit Card Input",
      "description": "Card number, expiry, and CVC in one row with brand detection, per-brand grouping, Luhn and expiry validation, and auto-advance between fields.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json",
        "input"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/credit-card-input.tsx",
          "type": "registry:component",
          "target": "components/credit-card-input.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/credit-card-input"
        }
      }
    },
    {
      "name": "emoji-picker",
      "type": "registry:component",
      "title": "Emoji Picker",
      "description": "Emoji picker on frimousse: the full emoji set by category, search, skin tones, keyboard navigation and a hover preview.",
      "categories": [
        "pickers"
      ],
      "dependencies": [
        "frimousse",
        "lucide-react"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/emoji-picker.tsx",
          "type": "registry:component",
          "target": "components/emoji-picker.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/pickers/emoji-picker"
        }
      }
    },
    {
      "name": "avatar-upload",
      "type": "registry:component",
      "title": "Avatar Upload",
      "description": "Click or drop an image, crop it to a circle or square with zoom, and preview the result. Initials fallback, size and type limits, remove control.",
      "categories": [
        "files"
      ],
      "dependencies": [
        "lucide-react",
        "react-dropzone"
      ],
      "registryDependencies": [
        "button",
        "dialog",
        "https://hirael.com/r/format-bytes.json",
        "https://hirael.com/r/image-cropper.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/avatar-upload.tsx",
          "type": "registry:component",
          "target": "components/avatar-upload.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/files/avatar-upload"
        }
      }
    },
    {
      "name": "settings-01",
      "type": "registry:block",
      "title": "Settings 01",
      "description": "Account settings page with a sticky section nav, card sections with label/control rows that stack on mobile, dirty-aware Save/Cancel footers, and a Danger zone with an alert-dialog confirm. Ships composable parts.",
      "categories": [
        "blocks",
        "saas"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "alert-dialog",
        "avatar",
        "badge",
        "button",
        "field",
        "input",
        "input-group",
        "select",
        "textarea"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/settings-01/settings-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/settings-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/saas/settings-01"
        }
      }
    },
    {
      "name": "settings-02",
      "type": "registry:block",
      "title": "Settings 02",
      "description": "Security and notifications settings in tabs: change password with strength meter, two-factor toggle, revocable session list, and grouped notification switches under a Pause all master. Ships composable parts.",
      "categories": [
        "blocks",
        "saas"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "alert-dialog",
        "badge",
        "button",
        "field",
        "https://hirael.com/r/password-input.json",
        "spinner",
        "switch",
        "tabs"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/settings-02/settings-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/settings-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/saas/settings-02"
        }
      }
    },
    {
      "name": "members-01",
      "type": "registry:block",
      "title": "Members 01",
      "description": "Team members management: live search, inline role select, status badges, row actions menu, a pending-invites list with resend/revoke, and an invite dialog that validates emails as tags. Ships composable parts.",
      "categories": [
        "blocks",
        "saas"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "alert-dialog",
        "avatar",
        "badge",
        "button",
        "dialog",
        "dropdown-menu",
        "empty",
        "field",
        "input-group",
        "select",
        "table",
        "https://hirael.com/r/tag-input.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/members-01/members-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/members-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/saas/members-01"
        }
      }
    },
    {
      "name": "onboarding-01",
      "type": "registry:block",
      "title": "Onboarding 01",
      "description": "Four-step setup wizard on the Stepper: controlled or uncontrolled step, per-step validation gating Continue, Skip, Back, a Finish that fires onComplete, and a fade between steps. Ships composable parts.",
      "categories": [
        "blocks",
        "saas"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "card",
        "field",
        "input",
        "input-group",
        "progress",
        "radio-group",
        "select",
        "https://hirael.com/r/stepper.json",
        "switch"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/onboarding-01/onboarding-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/onboarding-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/saas/onboarding-01"
        }
      }
    },
    {
      "name": "coming-soon-01",
      "type": "registry:block",
      "title": "Coming Soon 01",
      "description": "Full-viewport launch page with a live countdown, an email notify form that shows an inline success state, and a GitHub link in the footer. Ships composable parts.",
      "categories": [
        "blocks",
        "not-found"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/countdown-timer.json",
        "field",
        "input"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/coming-soon-01/coming-soon-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/coming-soon-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/not-found/coming-soon-01"
        }
      }
    },
    {
      "name": "coming-soon-02",
      "type": "registry:block",
      "title": "Coming Soon 02",
      "description": "Full-viewport launch teaser: a pill badge, a word-by-word serif headline, sub-copy and an email notify form with inline validation and a confirmation, above a glowing horizon of sparkles with a rounded planet edge. Motion respects reduced-motion.",
      "categories": [
        "blocks",
        "not-found"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "field",
        "input",
        "https://hirael.com/r/sparkles.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/coming-soon-02/coming-soon-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/coming-soon-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/not-found/coming-soon-02"
        }
      }
    },
    {
      "name": "maintenance-01",
      "type": "registry:block",
      "title": "Maintenance 01",
      "description": "Scheduled maintenance page with a pulsing status dot, window card showing start, expected return and migration progress, a notify-me popover with email validation, a status page link and a timestamped updates list. Ships composable parts.",
      "categories": [
        "blocks",
        "not-found"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "field",
        "input",
        "popover"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/maintenance-01/maintenance-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/maintenance-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/not-found/maintenance-01"
        }
      }
    },
    {
      "name": "maintenance-02",
      "type": "registry:block",
      "title": "Maintenance 02",
      "description": "Full-viewport offline page with a blurred primary glow and a sparkle field behind a pill badge, a word-by-word serif headline, a short status message and a spinner line. Message area is a live region.",
      "categories": [
        "blocks",
        "not-found"
      ],
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "https://hirael.com/r/sparkles.json",
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/maintenance-02/maintenance-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/maintenance-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/not-found/maintenance-02"
        }
      }
    },
    {
      "name": "error-01",
      "type": "registry:block",
      "title": "Error 01",
      "description": "500 page with a retry action, home link, collapsible technical details (request id, timestamp, copy button) and a system status line. Ships composable parts.",
      "categories": [
        "blocks",
        "not-found"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "collapsible",
        "https://hirael.com/r/copy-button.json",
        "spinner"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/error-01/error-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/error-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/not-found/error-01"
        }
      }
    },
    {
      "name": "team-01",
      "type": "registry:block",
      "title": "Team 01",
      "description": "Team section with a serif headline, a department filter, a grid of members with portraits or initials, roles, bios and GitHub links, and a hiring footer. Ships composable parts.",
      "categories": [
        "blocks",
        "team"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/team-01/team-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/team-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/team/team-01"
        }
      }
    },
    {
      "name": "team-02",
      "type": "registry:block",
      "title": "Team 02",
      "description": "Single-profile experience section: a four-up metric strip, a bio card with a grid-pattern backdrop, and a competencies card that ends in three pause-on-hover marquee rows of skill chips with edge fades. Every element rises in on scroll and respects reduced-motion.",
      "categories": [
        "blocks",
        "team"
      ],
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "https://hirael.com/r/marquee.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/team-02/team-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/team-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/team/team-02"
        }
      }
    },
    {
      "name": "team-03",
      "type": "registry:block",
      "title": "Team 03",
      "description": "Distributed team directory grouped by department, showing each person’s live local time and whether they are inside working hours, with a department filter and a sort by time zone.",
      "categories": [
        "blocks",
        "team"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "toggle-group",
        "tooltip"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/team-03/team-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/team-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/team/team-03"
        }
      }
    },
    {
      "name": "stats-01",
      "type": "registry:block",
      "title": "Stats 01",
      "description": "Metrics band with four large numbers that count up on scroll, labels, optional deltas, and a two-column header on large screens. Ships composable parts.",
      "categories": [
        "blocks",
        "stats"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/animated-number.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/stats-01/stats-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/stats-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/stats/stats-01"
        }
      }
    },
    {
      "name": "stats-02",
      "type": "registry:block",
      "title": "Stats 02",
      "description": "Four metric tiles with a 4w, 12w or 52w range toggle that swaps each figure, trend chip and sparkline; one metric trends the wrong way.",
      "categories": [
        "blocks",
        "stats"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/sparkline.json",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/stats-02/stats-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/stats-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/stats/stats-02"
        }
      }
    },
    {
      "name": "stats-03",
      "type": "registry:block",
      "title": "Stats 03",
      "description": "Split stats section: a short growth story on one side, four metrics tracked against their targets on the other. Bars fill from zero on load and a Quarter / Year toggle swaps the figures.",
      "categories": [
        "blocks",
        "stats"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "progress",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/stats-03/stats-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/stats-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/stats/stats-03"
        }
      }
    },
    {
      "name": "cookie-consent",
      "type": "registry:block",
      "title": "Cookie Consent",
      "description": "Floating consent banner with per-category switches, accept, reject, and save actions, and a choice persisted in localStorage. Ships composable parts.",
      "categories": [
        "blocks",
        "widgets"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "field",
        "switch"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/cookie-consent/cookie-consent.tsx",
          "type": "registry:block",
          "target": "components/blocks/cookie-consent.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/widgets/cookie-consent"
        }
      }
    },
    {
      "name": "changelog-01",
      "type": "registry:block",
      "title": "Changelog 01",
      "description": "Release notes with a sticky date rail, version badges, New / Improved / Fixed tags, a subscribe button, and a filter that narrows entries. Ships composable parts.",
      "categories": [
        "blocks",
        "changelog"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "field",
        "input",
        "popover",
        "toggle-group",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/changelog-01/changelog-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/changelog-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/changelog/changelog-01"
        }
      }
    },
    {
      "name": "changelog-02",
      "type": "registry:block",
      "title": "Changelog 02",
      "description": "Public roadmap board with Now, Next and Later columns. Every item can be upvoted, the board sorts by votes or by date, and on small screens tabs pick the column.",
      "categories": [
        "blocks",
        "changelog"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "tabs",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/changelog-02/changelog-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/changelog-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/changelog/changelog-02"
        }
      }
    },
    {
      "name": "not-found-02",
      "type": "registry:block",
      "title": "Not Found 02",
      "description": "A 404 page framed by side rails, with a photo, an error code, a home link and a band of popular pages. Ships composable parts.",
      "categories": [
        "blocks",
        "not-found"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/not-found-02/not-found-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/not-found-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/not-found/not-found-02"
        }
      }
    },
    {
      "name": "page-header-01",
      "type": "registry:block",
      "title": "Page Header 01",
      "description": "Detail page header with a breadcrumb that collapses on small screens, a status badge, owner and contributor meta, and Share, Edit and overflow actions. Share copies the link, Edit renames in place, Archive locks the page until restored and Delete can be undone. Ships composable parts.",
      "categories": [
        "blocks",
        "page-header"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "badge",
        "breadcrumb",
        "button",
        "dropdown-menu",
        "empty",
        "field",
        "input"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/page-header-01/page-header-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/page-header-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/page-header/page-header-01"
        }
      }
    },
    {
      "name": "page-header-02",
      "type": "registry:block",
      "title": "Page Header 02",
      "description": "Workspace header with a primary action and line tabs for Overview, Members, Billing and Settings, kept in sync with the URL hash. Inviting someone updates the member count and the billing total, and renaming the workspace updates the title. Ships composable parts.",
      "categories": [
        "blocks",
        "page-header"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "badge",
        "button",
        "field",
        "input",
        "tabs"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/page-header-02/page-header-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/page-header-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/page-header/page-header-02"
        }
      }
    },
    {
      "name": "page-header-03",
      "type": "registry:block",
      "title": "Page Header 03",
      "description": "Invoice list header with a live count, a New invoice dialog and a toolbar for search, status filter, sort and list or grid layout. Shows an empty result with Clear filters when nothing matches. Ships composable parts.",
      "categories": [
        "blocks",
        "page-header"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "dialog",
        "empty",
        "field",
        "input",
        "input-group",
        "select",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/page-header-03/page-header-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/page-header-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/page-header/page-header-03"
        }
      }
    },
    {
      "name": "page-header-04",
      "type": "registry:block",
      "title": "Page Header 04",
      "description": "Analytics header with a 7, 30 or 90 day range and CSV export, above a strip of four metrics with animated values, sparklines and change chips colored by whether the change is good or bad. Ships composable parts.",
      "categories": [
        "blocks",
        "page-header"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/animated-number.json",
        "button",
        "https://hirael.com/r/sparkline.json",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/page-header-04/page-header-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/page-header-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/page-header/page-header-04"
        }
      }
    },
    {
      "name": "empty-state-01",
      "type": "registry:block",
      "title": "Empty State 01",
      "description": "A first-run projects panel. Create a project with a validated name or import a GitHub repo, and the list replaces the empty state.",
      "categories": [
        "blocks",
        "empty-state"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "dialog",
        "empty",
        "field",
        "input",
        "radio-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/empty-state-01/empty-state-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/empty-state-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/empty-states/empty-state-01"
        }
      }
    },
    {
      "name": "empty-state-02",
      "type": "registry:block",
      "title": "Empty State 02",
      "description": "A customer list with search and plan and status filters. When nothing matches, it repeats the query, says how many matches the filters hide, suggests close matches and offers to clear filters.",
      "categories": [
        "blocks",
        "empty-state"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "empty",
        "input-group",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/empty-state-02/empty-state-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/empty-state-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/empty-states/empty-state-02"
        }
      }
    },
    {
      "name": "empty-state-03",
      "type": "registry:block",
      "title": "Empty State 03",
      "description": "A deployments panel that failed to load, with a copyable error reference and a support link. Try again shows loading rows, fails once more, then loads the data.",
      "categories": [
        "blocks",
        "empty-state"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "https://hirael.com/r/copy-button.json",
        "empty",
        "skeleton"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/empty-state-03/empty-state-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/empty-state-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/empty-states/empty-state-03"
        }
      }
    },
    {
      "name": "empty-state-04",
      "type": "registry:block",
      "title": "Empty State 04",
      "description": "A members panel with an invite form inside the empty state. Invites are validated and listed as pending, and revoking the last one brings the empty state back.",
      "categories": [
        "blocks",
        "empty-state"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "badge",
        "button",
        "empty",
        "field",
        "input",
        "select"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/empty-state-04/empty-state-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/empty-state-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/empty-states/empty-state-04"
        }
      }
    },
    {
      "name": "search-01",
      "type": "registry:block",
      "title": "Search 01",
      "description": "Docs search with type, product area and date facets whose counts reflect the other active filters, removable filter chips and relevance or newest sorting. Ships composable parts.",
      "categories": [
        "blocks",
        "search"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "checkbox",
        "empty",
        "input-group",
        "radio-group",
        "sheet",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/search-01/search-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/search-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/search/search-01"
        }
      }
    },
    {
      "name": "search-02",
      "type": "registry:block",
      "title": "Search 02",
      "description": "Search field with a suggestion dropdown: recent and popular searches when empty, matching pages and people while typing. Slash focuses it and the arrow keys move through results.",
      "categories": [
        "blocks",
        "search"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "input-group",
        "kbd"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/search-02/search-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/search-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/search/search-02"
        }
      }
    },
    {
      "name": "search-03",
      "type": "registry:block",
      "title": "Search 03",
      "description": "Search results page with type tabs and counts, results laid out for docs, people and files, a spelling correction when nothing matches, and paged loading.",
      "categories": [
        "blocks",
        "search"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "empty",
        "input-group",
        "tabs"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/search-03/search-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/search-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/search/search-03"
        }
      }
    },
    {
      "name": "search-04",
      "type": "registry:block",
      "title": "Search 04",
      "description": "Help center search section with popular topics that fill the query, live matching articles as you type, and a category index when the field is empty.",
      "categories": [
        "blocks",
        "search"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "empty",
        "input-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/search-04/search-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/search-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/search/search-04"
        }
      }
    },
    {
      "name": "survey-01",
      "type": "registry:block",
      "title": "Survey 01",
      "description": "NPS card built on Questionnaire: a 0 to 10 scale with number-key shortcuts, then a required follow-up question that changes with the score. Submitting shows the score with a Change answer action. Ships composable parts.",
      "categories": [
        "blocks",
        "survey"
      ],
      "dependencies": [
        "@shadcn/react",
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "kbd",
        "questionnaire"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/survey-01/survey-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/survey-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/survey/survey-01"
        }
      }
    },
    {
      "name": "survey-02",
      "type": "registry:block",
      "title": "Survey 02",
      "description": "Four-question feedback card built on the Questionnaire: single choice, pick up to 3, a 1 to 5 rating and an optional comment you can skip. Required questions validate inline, and a review step lets you edit any answer before submitting.",
      "categories": [
        "blocks",
        "survey"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "questionnaire"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/survey-02/survey-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/survey-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/survey/survey-02"
        }
      }
    },
    {
      "name": "survey-03",
      "type": "registry:block",
      "title": "Survey 03",
      "description": "Plan card with a cancellation survey in a dialog, built on Questionnaire. The reason you pick decides the follow-up step (a discount, a pause or a feedback question), and the card shows the result with an undo.",
      "categories": [
        "blocks",
        "survey"
      ],
      "dependencies": [],
      "registryDependencies": [
        "badge",
        "button",
        "dialog",
        "questionnaire"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/survey-03/survey-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/survey-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/survey/survey-03"
        }
      }
    },
    {
      "name": "survey-04",
      "type": "registry:block",
      "title": "Survey 04",
      "description": "Full-height survey that shows one question per screen, with letter-key answers, Enter to continue and a thin progress bar. One answer skips a later question, and the flow ends on a personal thank-you with a restart.",
      "categories": [
        "blocks",
        "survey"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "kbd",
        "questionnaire"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/survey-04/survey-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/survey-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/survey/survey-04"
        }
      }
    },
    {
      "name": "chart-01",
      "type": "registry:block",
      "title": "Chart 01",
      "description": "Monthly revenue bar chart by plan with a year select, a stacked or grouped toggle, totals above the bars and a summary line computed from the data.",
      "categories": [
        "blocks",
        "charts"
      ],
      "dependencies": [
        "recharts"
      ],
      "registryDependencies": [
        "card",
        "chart",
        "direction",
        "select",
        "toggle-group"
      ],
      "docs": "Charts run on recharts via the shadcn chart primitive. Give ChartContainer's parent an explicit height, and update chartConfig's keys when you swap in real data.",
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/chart-01/chart-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/chart-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/charts/chart-01"
        }
      }
    },
    {
      "name": "chart-02",
      "type": "registry:block",
      "title": "Chart 02",
      "description": "Traffic area charts for visitors and signups with a 7, 30 or 90 day range, legend cards that turn each series on or off, and a crosshair tooltip shared across both panels.",
      "categories": [
        "blocks",
        "charts"
      ],
      "dependencies": [
        "lucide-react",
        "recharts"
      ],
      "registryDependencies": [
        "card",
        "chart",
        "direction",
        "toggle-group"
      ],
      "docs": "Charts run on recharts via the shadcn chart primitive. Give ChartContainer's parent an explicit height, and update chartConfig's keys when you swap in real data.",
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/chart-02/chart-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/chart-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/charts/chart-02"
        }
      }
    },
    {
      "name": "chart-03",
      "type": "registry:block",
      "title": "Chart 03",
      "description": "Revenue by channel donut with the total in the centre and a ranked list of value, share and change. Hovering a row highlights its slice and hovering a slice highlights its row.",
      "categories": [
        "blocks",
        "charts"
      ],
      "dependencies": [
        "lucide-react",
        "recharts"
      ],
      "registryDependencies": [
        "card",
        "chart",
        "direction",
        "toggle-group"
      ],
      "docs": "Charts run on recharts via the shadcn chart primitive. Give ChartContainer's parent an explicit height, and update chartConfig's keys when you swap in real data.",
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/chart-03/chart-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/chart-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/charts/chart-03"
        }
      }
    },
    {
      "name": "chart-04",
      "type": "registry:block",
      "title": "Chart 04",
      "description": "Signup funnel from visited to subscribed, showing the count, share of visitors, step conversion and drop-off at each step, with an All, Organic or Paid segment toggle.",
      "categories": [
        "blocks",
        "charts"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "card",
        "toggle-group",
        "tooltip"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/chart-04/chart-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/chart-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/charts/chart-04"
        }
      }
    },
    {
      "name": "chat-01",
      "type": "registry:block",
      "title": "Chat 01",
      "description": "Messenger with a searchable conversation list, unread counts that clear when opened, and a thread that sticks to the newest message, with attachments and an emoji picker in the composer. On phones the list and thread become two screens. Ships composable parts.",
      "categories": [
        "blocks",
        "chat"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "badge",
        "button",
        "https://hirael.com/r/emoji-picker.json",
        "empty",
        "https://hirael.com/r/format-bytes.json",
        "input-group",
        "item",
        "popover"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/chat-01/chat-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/chat-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/chat/chat-01"
        }
      }
    },
    {
      "name": "chat-02",
      "type": "registry:block",
      "title": "Chat 02",
      "description": "Floating support widget with the typical reply time, quick replies, an agent that answers a few topics after a typing indicator, and a rating when the conversation ends. Ships composable parts.",
      "categories": [
        "blocks",
        "chat"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "badge",
        "button",
        "input-group",
        "https://hirael.com/r/rating.json",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/chat-02/chat-02.tsx",
          "type": "registry:block",
          "target": "components/blocks/chat-02.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/chat/chat-02"
        }
      }
    },
    {
      "name": "chat-03",
      "type": "registry:block",
      "title": "Chat 03",
      "description": "Team channel with emoji reactions, a pinned message, @mentions in the composer, and replies that open in a side thread with its own composer. Ships composable parts.",
      "categories": [
        "blocks",
        "chat"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "https://hirael.com/r/mention-input.json",
        "popover",
        "toggle"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/chat-03/chat-03.tsx",
          "type": "registry:block",
          "target": "components/blocks/chat-03.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/chat/chat-03"
        }
      }
    },
    {
      "name": "chat-04",
      "type": "registry:block",
      "title": "Chat 04",
      "description": "Shared customer inbox with Open, Snoozed and Closed tabs, an assignee filter, internal notes in the composer, saved replies, and snooze and close actions that move conversations between tabs. Ships composable parts.",
      "categories": [
        "blocks",
        "chat"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "dropdown-menu",
        "empty",
        "input-group",
        "item",
        "tabs",
        "toggle-group"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/chat-04/chat-04.tsx",
          "type": "registry:block",
          "target": "components/blocks/chat-04.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/chat/chat-04"
        }
      }
    },
    {
      "name": "env-editor",
      "type": "registry:block",
      "title": "Env Variables Editor",
      "description": "Environment variables editor with masked secrets, copy, per-environment chips, .env import, key validation, and unsaved-change tracking. Ships composable parts.",
      "categories": [
        "blocks",
        "cloud"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "https://hirael.com/r/copy-button.json",
        "dialog",
        "empty",
        "field",
        "input",
        "input-group",
        "textarea",
        "toggle-group"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/env-editor/env-editor.tsx",
          "type": "registry:block",
          "target": "components/blocks/env-editor.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/cloud/env-editor"
        }
      }
    },
    {
      "name": "prompt-input",
      "type": "registry:block",
      "title": "Prompt Input",
      "description": "Chat composer with an auto-growing textarea, Enter to send, attachments, a model picker, and a Stop button while streaming. Ships composable parts.",
      "categories": [
        "blocks",
        "ai"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu",
        "https://hirael.com/r/format-bytes.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/prompt-input/prompt-input.tsx",
          "type": "registry:block",
          "target": "components/blocks/prompt-input.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/ai/prompt-input"
        }
      }
    },
    {
      "name": "message-thread",
      "type": "registry:block",
      "title": "Message Thread",
      "description": "Message list that follows streaming output, with tool calls, reasoning, sources, hover actions, typing dots, and a streaming cursor. Ships composable parts.",
      "categories": [
        "blocks",
        "ai"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "collapsible",
        "https://hirael.com/r/copy-button.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/message-thread/message-thread.tsx",
          "type": "registry:block",
          "target": "components/blocks/message-thread.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/ai/message-thread"
        }
      }
    },
    {
      "name": "ai-chat-01",
      "type": "registry:block",
      "title": "AI Chat 01",
      "description": "Full chat screen: grouped history sidebar that collapses to a sheet, top bar with model badge, streaming thread, and pinned composer. Ships composable parts.",
      "categories": [
        "blocks",
        "ai"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "alert-dialog",
        "badge",
        "button",
        "dropdown-menu",
        "input-group",
        "sheet"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/blocks/ai-chat-01/ai-chat-01.tsx",
          "type": "registry:block",
          "target": "components/blocks/ai-chat-01.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/blocks/ai/ai-chat-01"
        }
      }
    },
    {
      "name": "use-controllable-state",
      "type": "registry:hook",
      "title": "useControllableState",
      "description": "A value that is controlled through a prop or kept internally, with one setter that updates either and reports the change. The pattern behind value and defaultValue.",
      "categories": [
        "utilities"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/hooks/use-controllable-state.ts",
          "type": "registry:hook",
          "target": "hooks/use-controllable-state.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/utilities/hooks/use-controllable-state"
        }
      }
    },
    {
      "name": "use-reduced-motion",
      "type": "registry:hook",
      "title": "useReducedMotion",
      "description": "Live prefers-reduced-motion match without an animation library. Renders false on the server, so hydration never mismatches, and updates when the setting changes.",
      "categories": [
        "utilities"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/hooks/use-reduced-motion.ts",
          "type": "registry:hook",
          "target": "hooks/use-reduced-motion.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/utilities/hooks/use-reduced-motion"
        }
      }
    },
    {
      "name": "compose-refs",
      "type": "registry:lib",
      "title": "composeRefs",
      "description": "Merges several refs into one callback ref, so a part can keep its own ref and still forward the element. Returns React 19 ref cleanups.",
      "categories": [
        "utilities"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/lib/compose-refs.ts",
          "type": "registry:lib",
          "target": "lib/compose-refs.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/utilities/utils/compose-refs"
        }
      }
    },
    {
      "name": "format-bytes",
      "type": "registry:lib",
      "title": "formatBytes",
      "description": "Human-readable file sizes in binary steps, such as 1.5 KB or 12.0 MB, for upload lists and storage meters.",
      "categories": [
        "utilities"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/lib/format-bytes.ts",
          "type": "registry:lib",
          "target": "lib/format-bytes.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/utilities/utils/format-bytes"
        }
      }
    },
    {
      "name": "use-media-query",
      "type": "registry:hook",
      "title": "useMediaQuery",
      "description": "Live match for any CSS media query, like a breakpoint, dark mode or a touch screen. Renders a fixed value on the server so hydration never mismatches, then follows the real match.",
      "categories": [
        "utilities"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/hooks/use-media-query.ts",
          "type": "registry:hook",
          "target": "hooks/use-media-query.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/utilities/hooks/use-media-query"
        }
      }
    },
    {
      "name": "use-debounce",
      "type": "registry:hook",
      "title": "useDebounce",
      "description": "useDebouncedValue holds a value back until it stops changing, for search as you type. useDebouncedCallback returns a stable function with cancel and flush, for autosave.",
      "categories": [
        "utilities"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/hooks/use-debounce.ts",
          "type": "registry:hook",
          "target": "hooks/use-debounce.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/utilities/hooks/use-debounce"
        }
      }
    },
    {
      "name": "use-copy-to-clipboard",
      "type": "registry:hook",
      "title": "useCopyToClipboard",
      "description": "Copies text and reports copied for a moment, so a copy button can swap to a check mark. Returns false instead of throwing when the browser refuses.",
      "categories": [
        "utilities"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/hooks/use-copy-to-clipboard.ts",
          "type": "registry:hook",
          "target": "hooks/use-copy-to-clipboard.ts"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/utilities/hooks/use-copy-to-clipboard"
        }
      }
    },
    {
      "name": "description-list",
      "type": "registry:component",
      "title": "Description List",
      "description": "Label and value pairs for detail pages, like an invoice, a user or a server. Terms sit beside their values when there is room and stack on narrow screens, with optional columns, dividers and icons.",
      "categories": [
        "data"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/description-list.tsx",
          "type": "registry:component",
          "target": "components/description-list.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/description-list"
        }
      }
    },
    {
      "name": "theme-toggle",
      "type": "registry:component",
      "title": "Theme Toggle",
      "description": "Light and dark mode controls on next-themes: a one-click toggle, a Light / Dark / System menu, and a three-way switcher with arrow-key support. Icons swap with CSS, so the button is right before hydration.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "lucide-react",
        "next-themes"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu"
      ],
      "docs": "Wrap your app in ThemeProvider from next-themes with attribute=\"class\", as in the shadcn dark mode guide.",
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/theme-toggle.tsx",
          "type": "registry:component",
          "target": "components/theme-toggle.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/theme-toggle"
        }
      }
    },
    {
      "name": "language-switcher",
      "type": "registry:component",
      "title": "Language Switcher",
      "description": "Locale menu that lists each language in its own script, with the translated name beside it. The trigger shows the name, the short code or just an icon, and changes report the text direction so the page can flip to RTL.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "dropdown-menu",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/language-switcher.tsx",
          "type": "registry:component",
          "target": "components/language-switcher.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/language-switcher"
        }
      }
    },
    {
      "name": "date-time-picker",
      "type": "registry:component",
      "title": "Date Time Picker",
      "description": "One field for a day and a time: a calendar beside hour and minute columns, with an AM/PM column on a 12-hour clock. Picking a day keeps the time, minutes snap to a step, and the value is a single Date.",
      "categories": [
        "pickers"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "popover",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/date-time-picker.tsx",
          "type": "registry:component",
          "target": "components/date-time-picker.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/pickers/date-time-picker"
        }
      }
    },
    {
      "name": "masked-input",
      "type": "registry:component",
      "title": "Masked Input",
      "description": "A shadcn Input that formats as you type, for IBANs, postcodes, dates, licence plates or your own pattern. Reports the masked text, the bare characters and whether the mask is complete. Ships presets for common formats.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "@react-input/mask"
      ],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json",
        "input"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/masked-input.tsx",
          "type": "registry:component",
          "target": "components/masked-input.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/masked-input"
        }
      }
    },
    {
      "name": "filter-builder",
      "type": "registry:component",
      "title": "Filter Builder",
      "description": "A Linear-style filter bar for lists and tables: pick a field, then an option, and get a chip with an operator menu and a value editor. Handles options, multi-select, text, number ranges and date ranges, keeps every filter in one array you can save to the URL, and ships applyFilters for client-side lists.",
      "categories": [
        "inputs"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "calendar",
        "command",
        "dropdown-menu",
        "input",
        "popover",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/filter-builder.tsx",
          "type": "registry:component",
          "target": "components/filter-builder.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/inputs/filter-builder"
        }
      }
    },
    {
      "name": "reasoning",
      "type": "registry:component",
      "title": "Reasoning",
      "description": "A collapsible panel for a model's thinking. It opens while the reasoning streams in with a shimmering label, times itself, then folds away into \"Thought for 6s\" once the answer starts, unless the reader opened it.",
      "categories": [
        "ai"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "collapsible",
        "https://hirael.com/r/text-shimmer.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/reasoning.tsx",
          "type": "registry:component",
          "target": "components/reasoning.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/ai/reasoning"
        }
      }
    },
    {
      "name": "tool-call",
      "type": "registry:component",
      "title": "Tool Call",
      "description": "Shows a tool the model called: its name, a status from pending to done, the input and output as formatted JSON, and errors. Calls that need a human get Allow and Deny buttons and stay open until answered.",
      "categories": [
        "ai"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "badge",
        "button",
        "collapsible",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/tool-call.tsx",
          "type": "registry:component",
          "target": "components/tool-call.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/ai/tool-call"
        }
      }
    },
    {
      "name": "sources",
      "type": "registry:component",
      "title": "Sources",
      "description": "Citations for AI answers: numbered inline chips that preview their page on hover or focus, and a \"Used 4 sources\" line that opens into a list of links with their sites.",
      "categories": [
        "ai"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "collapsible",
        "hover-card"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/sources.tsx",
          "type": "registry:component",
          "target": "components/sources.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/ai/sources"
        }
      }
    },
    {
      "name": "model-selector",
      "type": "registry:component",
      "title": "Model Selector",
      "description": "A searchable model picker grouped by provider, showing each model's context size, a short description and what it can do: read images, use tools, reason or read files. Fits in a prompt toolbar.",
      "categories": [
        "ai"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "command",
        "popover",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/model-selector.tsx",
          "type": "registry:component",
          "target": "components/model-selector.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/ai/model-selector"
        }
      }
    },
    {
      "name": "comment-thread",
      "type": "registry:component",
      "title": "Comment Thread",
      "description": "A discussion thread for documents, designs or issues: comments with avatars, emoji reactions you can toggle, indented replies, a composer that sends with Ctrl or ⌘ + Enter, and a resolve button that folds the thread away.",
      "categories": [
        "data"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "avatar",
        "button",
        "popover",
        "textarea",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/comment-thread.tsx",
          "type": "registry:component",
          "target": "components/comment-thread.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/comment-thread"
        }
      }
    },
    {
      "name": "virtual-list",
      "type": "registry:component",
      "title": "Virtual List",
      "description": "A list that renders only the rows in view, so thousands of items scroll smoothly. Rows can be any height and are measured as they render, and it asks for the next page as the reader nears the end, with a loading row and an empty state.",
      "categories": [
        "data"
      ],
      "dependencies": [
        "@tanstack/react-virtual"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/virtual-list.tsx",
          "type": "registry:component",
          "target": "components/virtual-list.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/data/virtual-list"
        }
      }
    },
    {
      "name": "time-slot-picker",
      "type": "registry:component",
      "title": "Time Slot Picker",
      "description": "Pick a meeting time: a calendar where days without free slots are disabled, beside the times for the chosen day. Booked slots show crossed out, and arrow keys skip over them.",
      "categories": [
        "pickers"
      ],
      "dependencies": [],
      "registryDependencies": [
        "calendar",
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/time-slot-picker.tsx",
          "type": "registry:component",
          "target": "components/time-slot-picker.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/pickers/time-slot-picker"
        }
      }
    },
    {
      "name": "pdf-viewer",
      "type": "registry:component",
      "title": "PDF Viewer",
      "description": "Shows a PDF in your page on react-pdf: page arrows and a page number field, zoom steps, fit to width and a download button. Text can be selected and links work, and the arrow keys turn pages.",
      "categories": [
        "files"
      ],
      "dependencies": [
        "lucide-react",
        "react-pdf"
      ],
      "registryDependencies": [
        "button",
        "input",
        "separator",
        "skeleton"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/pdf-viewer.tsx",
          "type": "registry:component",
          "target": "components/pdf-viewer.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/files/pdf-viewer"
        }
      }
    },
    {
      "name": "file-card",
      "type": "registry:component",
      "title": "File Card",
      "description": "A file as a row for lists or a tile for grids: an icon picked from the type, or an image preview, with the name, size and your own actions. FileIcon and fileKindOf are exported for your own layouts.",
      "categories": [
        "files"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://hirael.com/r/format-bytes.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/file-card.tsx",
          "type": "registry:component",
          "target": "components/file-card.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/files/file-card"
        }
      }
    },
    {
      "name": "upload-queue",
      "type": "registry:component",
      "title": "Upload Queue",
      "description": "Uploads files a few at a time with progress for each and overall, plus cancel, retry and clear finished. useUploadQueue takes your upload function, so it works with S3, a signed URL or your own API, and pairs with File Dropzone.",
      "categories": [
        "files"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "button",
        "https://hirael.com/r/file-card.json",
        "https://hirael.com/r/format-bytes.json",
        "progress"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/upload-queue.tsx",
          "type": "registry:component",
          "target": "components/upload-queue.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/files/upload-queue"
        }
      }
    },
    {
      "name": "bottom-nav",
      "type": "registry:component",
      "title": "Bottom Navigation",
      "description": "A mobile tab bar with icons, labels, an active pill and count or dot badges. Items can be your router links, it can pin to the bottom clear of the home indicator, and it mirrors in RTL.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "@radix-ui/react-slot"
      ],
      "registryDependencies": [
        "https://hirael.com/r/use-controllable-state.json"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/bottom-nav.tsx",
          "type": "registry:component",
          "target": "components/bottom-nav.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/bottom-nav"
        }
      }
    },
    {
      "name": "swipe-actions",
      "type": "registry:component",
      "title": "Swipe Actions",
      "description": "List rows that slide aside to reveal actions, like archive or delete in a mail app. Works with a finger or the mouse, leaves vertical scrolling alone, snaps open or shut, mirrors in RTL, and tabbing to an action slides it into view.",
      "categories": [
        "navigation"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://hirael.com/r/compose-refs.json"
      ],
      "cssVars": {
        "light": {
          "success": "oklch(0.527 0.154 150.069)",
          "warning": "oklch(0.555 0.163 48.998)",
          "info": "oklch(0.55 0.2 260)"
        },
        "dark": {
          "success": "oklch(0.696 0.17 162.48)",
          "warning": "oklch(0.769 0.188 70.08)",
          "info": "oklch(0.62 0.19 260)"
        }
      },
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/swipe-actions.tsx",
          "type": "registry:component",
          "target": "components/swipe-actions.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/swipe-actions"
        }
      }
    },
    {
      "name": "pull-to-refresh",
      "type": "registry:component",
      "title": "Pull to Refresh",
      "description": "A scroll area that refreshes when pulled down from the top, with a rubber-band feel, an arrow that flips when letting go will refresh, and your shadcn Spinner while it loads. Keeps the page from bouncing underneath.",
      "categories": [
        "navigation"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "spinner"
      ],
      "files": [
        {
          "path": "registry/hirael/bases/radix/components/pull-to-refresh.tsx",
          "type": "registry:component",
          "target": "components/pull-to-refresh.tsx"
        }
      ],
      "meta": {
        "links": {
          "docs": "https://hirael.com/components/navigation/pull-to-refresh"
        }
      }
    },
    {
      "name": "reveal-observer",
      "type": "registry:lib",
      "title": "Reveal Observer",
      "description": "One shared IntersectionObserver per threshold for scroll reveals, so a page of reveal components costs a handful of observers.",
      "categories": [
        "primitives"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/lib/reveal-observer.ts",
          "type": "registry:lib",
          "target": "lib/reveal-observer.ts"
        }
      ]
    },
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "description": "Radix-powered accordion primitive used by the FAQ blocks. Plus icon rotates to an X on open.",
      "categories": [
        "primitives"
      ],
      "dependencies": [
        "lucide-react",
        "radix-ui"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/hirael/bases/radix/ui/accordion.tsx",
          "type": "registry:ui",
          "target": "components/ui/accordion.tsx"
        }
      ]
    },
    {
      "name": "theme-emerald",
      "type": "registry:theme",
      "title": "Emerald theme",
      "description": "Emerald accent preset for the hirael palette. Sets --primary, --primary-foreground and --ring for light and dark.",
      "categories": [
        "themes"
      ],
      "dependencies": [],
      "registryDependencies": [],
      "cssVars": {
        "light": {
          "primary": "oklch(0.52 0.14 155)",
          "primary-foreground": "oklch(0.98 0.01 155)",
          "ring": "oklch(0.58 0.14 155)"
        },
        "dark": {
          "primary": "oklch(0.72 0.16 155)",
          "primary-foreground": "oklch(0.14 0.02 155)",
          "ring": "oklch(0.68 0.16 155)"
        }
      }
    }
  ]
}
