{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "storekit",
  "homepage": "https://storekit-eight.vercel.app",
  "items": [
    {
      "name": "announcement-marquee",
      "type": "registry:component",
      "title": "Marquee announcement bar",
      "description": "Infinite scrolling strip of short messages that pauses on hover.",
      "categories": [
        "announcement-bar",
        "any"
      ],
      "files": [
        {
          "path": "announcement-bar/announcement-marquee.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "announcement-countdown",
      "type": "registry:component",
      "title": "Dispatch cutoff countdown",
      "description": "Live countdown to a same-day dispatch cutoff with flipping digits.",
      "categories": [
        "announcement-bar",
        "any"
      ],
      "files": [
        {
          "path": "announcement-bar/announcement-countdown.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "announcement-promo",
      "type": "registry:component",
      "title": "Dismissible promo bar",
      "description": "Promo strip with a copyable code chip and a remembered dismiss.",
      "categories": [
        "announcement-bar",
        "any"
      ],
      "files": [
        {
          "path": "announcement-bar/announcement-promo.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "nav-minimal",
      "type": "registry:block",
      "title": "Minimal sticky header",
      "description": "Wordmark, centered links, and a cart badge that springs on change. Hairline appears on scroll.",
      "categories": [
        "nav",
        "any"
      ],
      "files": [
        {
          "path": "nav/nav-minimal.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "nav-mega",
      "type": "registry:block",
      "title": "Mega menu header",
      "description": "Shop panel with categories, a featured product, and a promo tile. Hover, click, or keyboard.",
      "categories": [
        "nav",
        "any"
      ],
      "files": [
        {
          "path": "nav/nav-mega.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "nav-drawer",
      "type": "registry:block",
      "title": "Mobile drawer nav",
      "description": "Hamburger header with a focus-trapped left drawer, nested categories, search, and account rows.",
      "categories": [
        "nav",
        "any"
      ],
      "files": [
        {
          "path": "nav/nav-drawer.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-split",
      "type": "registry:block",
      "title": "Split product hero",
      "description": "Headline and CTAs beside a product render, with a four-cell mono spec ledger.",
      "categories": [
        "hero",
        "supplements",
        "wellness"
      ],
      "files": [
        {
          "path": "hero/hero-split.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-editorial",
      "type": "registry:block",
      "title": "Editorial scene hero",
      "description": "Full-bleed scene photograph with a directional scrim, bottom-left headline, CTA pair and a trust chip.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-editorial.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-trio",
      "type": "registry:block",
      "title": "Fanned trio hero",
      "description": "Centered headline with a drawn underline over three fanned, gently floating product renders.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-trio.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-spec-sheet",
      "type": "registry:block",
      "title": "Spec sheet hero",
      "description": "Data sheet composition: giant mono figure, wide product banner on graph hairlines and a ledger with a lab results chip.",
      "categories": [
        "hero",
        "supplements",
        "wellness"
      ],
      "files": [
        {
          "path": "hero/hero-spec-sheet.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-video",
      "type": "registry:block",
      "title": "Cinemagraph hero",
      "description": "Poster-first muted loop with a centered headline, rotating proof chips and a fade into the page.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-video.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-color-field",
      "type": "registry:block",
      "title": "Color field hero",
      "description": "Packshot in a framed tile on a full accent color field, with an inverted CTA, fact row and a pinned price tag.",
      "categories": [
        "hero",
        "beverage",
        "wellness",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-color-field.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-macro",
      "type": "registry:block",
      "title": "Macro detail hero",
      "description": "Hard crop into one texture or ingredient with a zoom and focal point, a corner copy card and a mono caption.",
      "categories": [
        "hero",
        "beauty",
        "supplements",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-macro.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-before-after",
      "type": "registry:block",
      "title": "Before and after hero",
      "description": "Draggable comparison slider beside the copy, keyboard operable, with fixed-contrast labels and a results disclaimer.",
      "categories": [
        "hero",
        "beauty",
        "wellness",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-before-after.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-video-card",
      "type": "registry:block",
      "title": "Video card hero",
      "description": "Product demo clip contained in a card beside the copy, poster first, with one play and pause control and a caption with run time.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-video-card.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-cinemagraph",
      "type": "registry:block",
      "title": "Cinemagraph micro-motion hero",
      "description": "One still photo with a single living region (sway, breathe or glint) isolated by a soft mask, no video file, with a pause control.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-cinemagraph.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-ugc",
      "type": "registry:block",
      "title": "UGC customer hero",
      "description": "Customer photos or vertical clips lead: a tall featured post and two supporting posts with handle, verified mark, quote and shop link.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-ugc.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-endorsement",
      "type": "registry:block",
      "title": "Founder or creator endorsement hero",
      "description": "Portrait card with a product chip beside a large pull quote, name, role, credentials and an FTC disclosure line for paid partners.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-endorsement.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-multi-panel",
      "type": "registry:block",
      "title": "Multi-panel campaign hero",
      "description": "Two to four static campaign tiles at once instead of a rotating slider, lead tile carries the h1, each tile is one link.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-multi-panel.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-carousel",
      "type": "registry:block",
      "title": "Manual carousel hero",
      "description": "Split slides that change only on arrows, numbered tabs, Arrow keys or swipe. No autoplay, with carousel ARIA and a polite slide announcement.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-carousel.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-offer",
      "type": "registry:block",
      "title": "Offer-led hero",
      "description": "The discount is the headline: oversized offer figure, tap-to-copy promo code, eligibility line and a tagged packshot.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-offer.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-countdown",
      "type": "registry:block",
      "title": "Countdown hero",
      "description": "Live timer tied to a required real deadline, flip digits, minute-level polite announcements and an expired state.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-countdown.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-hotspots",
      "type": "registry:block",
      "title": "Shoppable hotspots hero",
      "description": "Lifestyle or flat-lay scene with a dot on each product; dots open a card with price and add to cart, and drive a product rail on mobile.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-hotspots.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-quiz",
      "type": "registry:block",
      "title": "Quiz entry hero",
      "description": "The finder's first question lives in the hero as a card radio group; the start button carries the chosen goal into the quiz.",
      "categories": [
        "hero",
        "supplements",
        "wellness",
        "beauty"
      ],
      "files": [
        {
          "path": "hero/hero-quiz.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-category-tiles",
      "type": "registry:block",
      "title": "Category tiles hero",
      "description": "Compact headline over three to six category, goal or audience tiles with counts; an optional feature tile spans two columns.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-category-tiles.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-bestseller-shelf",
      "type": "registry:block",
      "title": "Best-seller shelf hero",
      "description": "Store rating headline over the top products with rank badges, stars, price and quick add; scrolls sideways with a peek on mobile.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-bestseller-shelf.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-magazine",
      "type": "registry:block",
      "title": "Editorial magazine hero",
      "description": "Issue-style masthead, cover story with image and headline, and a numbered contents column of linked stories.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-magazine.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-type",
      "type": "registry:block",
      "title": "Kinetic type hero",
      "description": "Oversized display type is the visual: a spring-swapped kinetic word in a fixed slot and inline product pills, with a pause control.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-type.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-seasonal",
      "type": "registry:block",
      "title": "Seasonal collection hero",
      "description": "One `preset` (spring, summer, autumn, holiday, new year, valentines, back to school, gifting) swaps copy, motif and band tone over a seasonal edit.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-seasonal.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-drop",
      "type": "registry:block",
      "title": "Drop launch hero",
      "description": "Coming soon teaser with the real release date, compact countdown and notify-me email form that flips to available now after release.",
      "categories": [
        "hero",
        "apparel",
        "beverage",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-drop.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-trust-strip",
      "type": "registry:block",
      "title": "Trust strip hero",
      "description": "Split product hero with a welded strip of three to five reassurances (shipping, returns, testing, rating) above or below it.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-trust-strip.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "hero-proof",
      "type": "registry:block",
      "title": "Proof-led hero",
      "description": "Oversized average rating and review count lead, with a pinned featured review, award chips and press quotes as text wordmarks.",
      "categories": [
        "hero",
        "any"
      ],
      "files": [
        {
          "path": "hero/hero-proof.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "trust-stats",
      "type": "registry:block",
      "title": "Stats strip",
      "description": "Four big numbers that count up once in view, with mono labels and hairline dividers.",
      "categories": [
        "trust",
        "any"
      ],
      "files": [
        {
          "path": "trust/trust-stats.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "trust-coa-proof",
      "type": "registry:block",
      "title": "Lab results proof",
      "description": "Lab results lookup with a typewriter placeholder beside a third-party test card with a sequenced 44-segment score bar.",
      "categories": [
        "trust",
        "supplements",
        "wellness"
      ],
      "files": [
        {
          "path": "trust/trust-coa-proof.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "trust-guarantees",
      "type": "registry:block",
      "title": "Guarantee cards",
      "description": "Three guarantee cards with tinted icons, a title and one line each.",
      "categories": [
        "trust",
        "any"
      ],
      "files": [
        {
          "path": "trust/trust-guarantees.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "trust-logos",
      "type": "registry:block",
      "title": "Lab and press marquee",
      "description": "Mono wordmark marquee with masked edges that pauses on hover and stays static for reduced motion.",
      "categories": [
        "trust",
        "any"
      ],
      "files": [
        {
          "path": "trust/trust-logos.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "product-card-minimal",
      "type": "registry:component",
      "title": "Minimal product card",
      "description": "One-link tile with synchronized hover zoom, category eyebrow, a two-line title, price and an always-visible Add on the image with loading and Added states.",
      "categories": [
        "product-card",
        "any"
      ],
      "files": [
        {
          "path": "product-card/product-card-minimal.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "product-card-quickadd",
      "type": "registry:component",
      "title": "Quick-add product card",
      "description": "Size chips over the image swap the price with a crossfade; stepper and Add in the footer; stock badge.",
      "categories": [
        "product-card",
        "supplements",
        "wellness"
      ],
      "files": [
        {
          "path": "product-card/product-card-quickadd.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "product-card-variant",
      "type": "registry:component",
      "title": "Variant select product card",
      "description": "In-card option select that swaps price and crossfades the image, a spring-pop wishlist heart and a rating row.",
      "categories": [
        "product-card",
        "any"
      ],
      "files": [
        {
          "path": "product-card/product-card-variant.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "product-card-editorial",
      "type": "registry:component",
      "title": "Editorial product card",
      "description": "Portrait tile that swaps to a second image on hover, display title, price and a benefit line. The whole card is one link.",
      "categories": [
        "product-card",
        "any"
      ],
      "files": [
        {
          "path": "product-card/product-card-editorial.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "collection-grid",
      "type": "registry:block",
      "title": "Filterable collection grid",
      "description": "Responsive product grid with result count, sort select and form filter chips; tiles reflow with a layout animation.",
      "categories": [
        "collection",
        "any"
      ],
      "files": [
        {
          "path": "collection/collection-grid.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "collection-rail",
      "type": "registry:block",
      "title": "Product rail",
      "description": "Scroll-snap product rail with prev and next buttons, a scroll progress bar and a View all link. No carousel library.",
      "categories": [
        "collection",
        "any"
      ],
      "files": [
        {
          "path": "collection/collection-rail.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "collection-categories",
      "type": "registry:block",
      "title": "Category tiles",
      "description": "Three category link tiles with a zooming render, mono count and an arrow that nudges on hover.",
      "categories": [
        "collection",
        "any"
      ],
      "files": [
        {
          "path": "collection/collection-categories.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "collection-benefits",
      "type": "registry:block",
      "title": "Shop by goal",
      "description": "Six goal tiles with an icon and a product count; the border turns accent on hover.",
      "categories": [
        "collection",
        "any"
      ],
      "files": [
        {
          "path": "collection/collection-benefits.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "pdp-gallery",
      "type": "registry:component",
      "title": "Product gallery",
      "description": "Crossfading main image, thumbnail strip, 2x hover lens and arrow key navigation.",
      "categories": [
        "pdp",
        "any"
      ],
      "files": [
        {
          "path": "pdp/pdp-gallery.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-buybox",
      "type": "registry:block",
      "title": "Buy box",
      "description": "Rating, title, live price, variant pills with sold out state, subscribe and save, quantity, add to cart, trust row and accordion.",
      "categories": [
        "pdp",
        "any"
      ],
      "files": [
        {
          "path": "pdp/pdp-buybox.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "pdp-variant-cards",
      "type": "registry:component",
      "title": "Variant cards",
      "description": "Variant selector as image cards with per-serving pricing and a best value badge. Arrow key radiogroup.",
      "categories": [
        "pdp",
        "supplements",
        "wellness"
      ],
      "files": [
        {
          "path": "pdp/pdp-variant-cards.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-sticky-atc",
      "type": "registry:component",
      "title": "Sticky add to cart",
      "description": "Bottom bar that slides up once the buy button scrolls away, with thumb, variant, price and add.",
      "categories": [
        "pdp",
        "any"
      ],
      "files": [
        {
          "path": "pdp/pdp-sticky-atc.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-specs",
      "type": "registry:component",
      "title": "Spec tabs",
      "description": "Overview, details, ingredients and shipping tabs with a sliding underline and a mono spec ledger.",
      "categories": [
        "pdp",
        "supplements",
        "wellness"
      ],
      "files": [
        {
          "path": "pdp/pdp-specs.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-coa-band",
      "type": "registry:block",
      "title": "Lab results band",
      "description": "Full width lab results band: a third-party test report as letterhead beside the case for testing every batch.",
      "categories": [
        "pdp",
        "supplements",
        "wellness"
      ],
      "files": [
        {
          "path": "pdp/pdp-coa-band.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "pdp-bundle-tiers",
      "type": "registry:component",
      "title": "Bundle tiers",
      "description": "Buy 1, 3 or 5 tiles with per unit price, total and savings. The selection frame glides between tiles.",
      "categories": [
        "pdp",
        "any"
      ],
      "files": [
        {
          "path": "pdp/pdp-bundle-tiers.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-usage-note",
      "type": "registry:component",
      "title": "Usage note",
      "description": "Calm bordered note with numbered how-to-use steps and a fine-print line.",
      "categories": [
        "pdp",
        "supplements",
        "wellness"
      ],
      "files": [
        {
          "path": "pdp/pdp-usage-note.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-swatch-colors",
      "type": "registry:component",
      "title": "Color swatches",
      "description": "Color-dot radiogroup with a gliding selected ring, live color label and a diagonal strike for sold out colors.",
      "categories": [
        "pdp",
        "beauty",
        "apparel"
      ],
      "files": [
        {
          "path": "pdp/pdp-swatch-colors.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-swatch-photo",
      "type": "registry:component",
      "title": "Photo swatches",
      "description": "Photographic finish or format swatches with the selected name, detail and price under the row.",
      "categories": [
        "pdp",
        "any"
      ],
      "files": [
        {
          "path": "pdp/pdp-swatch-photo.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-option-matrix",
      "type": "registry:component",
      "title": "Option matrix",
      "description": "Dependent color x size selectors. Combos that are not made or sold out are disabled with the reason in a tooltip.",
      "categories": [
        "pdp",
        "apparel",
        "beauty"
      ],
      "files": [
        {
          "path": "pdp/pdp-option-matrix.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-swatch-more",
      "type": "registry:component",
      "title": "Swatches plus more",
      "description": "Featured swatches with a +N more panel grid grouped by family. A pick from the long tail is promoted into view.",
      "categories": [
        "pdp",
        "beauty",
        "apparel"
      ],
      "files": [
        {
          "path": "pdp/pdp-swatch-more.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-dropdown-stack",
      "type": "registry:component",
      "title": "Dropdown stack",
      "description": "Numbered native selects with label and value always visible, sequential unlock, price deltas and a running total.",
      "categories": [
        "pdp",
        "any"
      ],
      "files": [
        {
          "path": "pdp/pdp-dropdown-stack.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-preorder",
      "type": "registry:component",
      "title": "Pre-order state",
      "description": "Pre-order CTA with release date, ship window, charge timing, due today and cancel terms right above it.",
      "categories": [
        "pdp",
        "any"
      ],
      "files": [
        {
          "path": "pdp/pdp-preorder.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-back-in-stock",
      "type": "registry:component",
      "title": "Back in stock capture",
      "description": "For a sold out variant the add to cart becomes an email or SMS capture tied to that variant, with a confirmation state.",
      "categories": [
        "pdp",
        "any"
      ],
      "files": [
        {
          "path": "pdp/pdp-back-in-stock.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-low-stock",
      "type": "registry:component",
      "title": "Low stock line",
      "description": "Exact count from real inventory, hidden above the threshold and at zero. Plain ink, no urgency color.",
      "categories": [
        "pdp",
        "any"
      ],
      "files": [
        {
          "path": "pdp/pdp-low-stock.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-delivery-estimate",
      "type": "registry:component",
      "title": "Delivery estimate",
      "description": "ZIP input and an arrival window computed from today in business days, with a pickup option row.",
      "categories": [
        "pdp",
        "any"
      ],
      "files": [
        {
          "path": "pdp/pdp-delivery-estimate.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pdp-rating-row",
      "type": "registry:component",
      "title": "Rating row",
      "description": "Stars, average, review count and one short verified quote under the title, linking to the reviews section.",
      "categories": [
        "pdp",
        "any"
      ],
      "files": [
        {
          "path": "pdp/pdp-rating-row.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-drawer",
      "type": "registry:block",
      "title": "Cart drawer",
      "description": "Right-side cart with a free-shipping meter, animated line items, a two-item upsell, a collapsible discount code and totals. Focus trap, Escape, scroll lock.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-drawer.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "cart-line-item",
      "type": "registry:component",
      "title": "Cart line item",
      "description": "Cart row with thumb, variant chip, stepper, line price with compare-at and a hover-reveal remove.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-line-item.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-shipping-bar",
      "type": "registry:component",
      "title": "Free shipping bar",
      "description": "Progress toward a free-shipping threshold that computes the remainder and flips to a confirmation.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-shipping-bar.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-empty",
      "type": "registry:component",
      "title": "Empty cart",
      "description": "Token-drawn bag illustration, a human line of copy, a bestsellers action and a two-item rail.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-empty.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-mini",
      "type": "registry:component",
      "title": "Mini cart",
      "description": "Header cart icon with a count badge and a popover preview with View cart and Checkout.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-mini.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-page",
      "type": "registry:block",
      "title": "Cart page",
      "description": "Two-column cart page: line items with steppers on the left, a sticky order summary with shipping math and checkout on the right. Stacks on mobile.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-page.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "cart-sheet",
      "type": "registry:component",
      "title": "Cart bottom sheet",
      "description": "Mobile bottom sheet after add to cart with a drag handle, the added item, cart subtotal, View cart and Checkout. Focus trap, Escape, scroll lock.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-sheet.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "atc-toast",
      "type": "registry:component",
      "title": "Add to cart toast",
      "description": "Confirmation toast with thumbnail, item and a View cart action. Auto-dismisses after 4s and pauses on hover or focus.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/atc-toast.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "atc-modal",
      "type": "registry:component",
      "title": "Add to cart modal",
      "description": "Centered confirmation with the item, cart subtotal, Continue shopping and Checkout. Focus trap, Escape, scroll lock, focus return.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/atc-modal.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-tier-rewards",
      "type": "registry:component",
      "title": "Tiered rewards bar",
      "description": "One progress track with three milestones at their real thresholds (free shipping, 10% off, free gift). Markers fill as reached.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-tier-rewards.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-gift-unlock",
      "type": "registry:component",
      "title": "Gift unlock",
      "description": "Locked row that names the amount left, then opens a choose-one-of-three gift picker at the threshold.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-gift-unlock.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-upsell-carousel",
      "type": "registry:component",
      "title": "Upsell carousel",
      "description": "Horizontal snap carousel of add-on cards with one-tap add, arrow paging and end-aware arrows.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-upsell-carousel.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-routine-grid",
      "type": "registry:component",
      "title": "Complete the routine",
      "description": "Three numbered routine steps for the cart page; each explains its role, steps in the cart show as included, add the rest in one click.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-routine-grid.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-service-addon",
      "type": "registry:component",
      "title": "Service add-ons",
      "description": "One-tap switches for gift wrap and priority handling with prices on the label and a running add-on total.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-service-addon.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-subscribe-switch",
      "type": "registry:component",
      "title": "Cart subscribe switch",
      "description": "Per-line Subscribe and save switch that updates the line to the per-delivery price and reveals a cadence picker.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-subscribe-switch.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-buy-more",
      "type": "registry:component",
      "title": "Buy more, save more",
      "description": "Line-level quantity break message with one-click add of the missing units; shows the applied discount once reached.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-buy-more.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-auto-discount",
      "type": "registry:component",
      "title": "Automatic best offer",
      "description": "Prices every eligible offer against the cart, applies the best one without a code and explains why in a disclosure.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-auto-discount.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-note",
      "type": "registry:component",
      "title": "Cart note and gift message",
      "description": "Labeled order note with a live character count and a gift switch that reveals a printed gift message.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-note.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-protection",
      "type": "registry:component",
      "title": "Shipping protection",
      "description": "Opt-in shipping protection switch, off by default, with a computed fee and plain-language terms.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-protection.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-delivery-eta",
      "type": "registry:component",
      "title": "Cart delivery estimate",
      "description": "Arrival range in business days and a real warehouse cutoff countdown, computed after mount in the warehouse time zone.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-delivery-eta.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-saved-later",
      "type": "registry:component",
      "title": "Saved for later",
      "description": "Cart with a saved-for-later list below it; lines move between the two and the subtotal only counts the cart.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-saved-later.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-qty-undo",
      "type": "registry:component",
      "title": "Typed quantity with undo",
      "description": "Validated typed quantity input that explains bad values, and removal with a 5-second Undo that restores the line in place.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-qty-undo.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-timer",
      "type": "registry:component",
      "title": "Reservation timer",
      "description": "Countdown to a real stock-hold expiry. Renders nothing without expiresAt and says plainly when the hold has ended.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-timer.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-trust",
      "type": "registry:component",
      "title": "Cart trust row",
      "description": "Compact two-by-two trust grid, a guarantee line and accepted payment chips for under the checkout button.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-trust.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-points",
      "type": "registry:component",
      "title": "Loyalty points",
      "description": "Points balance and value, points earned on this order, and a redeem switch in fixed blocks.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-points.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-samples",
      "type": "registry:component",
      "title": "Free sample chooser",
      "description": "Grid of free samples; choose up to two, the rest dim at the limit and say why.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-samples.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cart-donation",
      "type": "registry:component",
      "title": "Round-up donation",
      "description": "Opt-in round-up row that computes the cents to the next dollar and names the cause.",
      "categories": [
        "cart",
        "any"
      ],
      "files": [
        {
          "path": "cart/cart-donation.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "checkout-layout",
      "type": "registry:block",
      "title": "Single-page checkout",
      "description": "Numbered Contact, Address, Method and Payment sections that collapse to summaries with Edit, beside a sticky order summary.",
      "categories": [
        "checkout",
        "any"
      ],
      "files": [
        {
          "path": "checkout/checkout-layout.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "checkout-address",
      "type": "registry:component",
      "title": "Address form",
      "description": "Shipping address with blur validation, an address combobox that fills city, state and ZIP, and a save checkbox.",
      "categories": [
        "checkout",
        "any"
      ],
      "files": [
        {
          "path": "checkout/checkout-address.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "checkout-summary",
      "type": "registry:component",
      "title": "Order summary",
      "description": "Checkout sidebar card with quantity-badged thumbs, an expandable discount code and a display-face total.",
      "categories": [
        "checkout",
        "any"
      ],
      "files": [
        {
          "path": "checkout/checkout-summary.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "checkout-express",
      "type": "registry:component",
      "title": "Express checkout",
      "description": "Three wallet buttons as mono text marks, an or divider and a short trust row.",
      "categories": [
        "checkout",
        "any"
      ],
      "files": [
        {
          "path": "checkout/checkout-express.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "checkout-shipping-method",
      "type": "registry:component",
      "title": "Shipping method",
      "description": "Radio cards with a gliding accent frame and delivery dates computed from today in business days.",
      "categories": [
        "checkout",
        "any"
      ],
      "files": [
        {
          "path": "checkout/checkout-shipping-method.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "upsell-bulk-tiers",
      "type": "registry:component",
      "title": "Bulk rate table",
      "description": "Stock-up pricing by quantity band. The matching row highlights as the stepper changes.",
      "categories": [
        "upsell",
        "supplements",
        "wellness"
      ],
      "files": [
        {
          "path": "upsell/upsell-bulk-tiers.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "upsell-fbt",
      "type": "registry:block",
      "title": "Frequently bought together",
      "description": "Three products with animated checkboxes, a flipping total, set savings and a single add button.",
      "categories": [
        "upsell",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-fbt.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "upsell-subscribe",
      "type": "registry:component",
      "title": "Subscribe and save",
      "description": "One-time vs subscribe radio cards, frequency chips and a benefits list that opens on subscribe.",
      "categories": [
        "upsell",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-subscribe.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "upsell-cross-sell-rail",
      "type": "registry:component",
      "title": "Cross-sell rail",
      "description": "Pairs well with: a compact snapping rail of mini cards with quick add buttons.",
      "categories": [
        "upsell",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-cross-sell-rail.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "upsell-purchase-tabs",
      "type": "registry:block",
      "title": "One-time or subscribe tabs",
      "description": "Two tabs that each carry their own price, benefits and call to action, with a per-serving line.",
      "categories": [
        "upsell",
        "supplements",
        "beverage",
        "beauty"
      ],
      "files": [
        {
          "path": "upsell/upsell-purchase-tabs.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "upsell-subscription-only",
      "type": "registry:block",
      "title": "Subscription-only buy box",
      "description": "No one-time option: cadence, next charge date, how to cancel and the guarantee all sit above the button.",
      "categories": [
        "upsell",
        "supplements",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-subscription-only.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "upsell-prepaid-cards",
      "type": "registry:block",
      "title": "Prepaid duration cards",
      "description": "30, 60 and 90 day cards stating total today, the monthly equivalent and the saving.",
      "categories": [
        "upsell",
        "supplements",
        "beverage"
      ],
      "files": [
        {
          "path": "upsell/upsell-prepaid-cards.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "upsell-best-value-tabs",
      "type": "registry:block",
      "title": "Single vs best value tabs",
      "description": "A single unit and a multipack as two tabs, with the per-unit price and saving shown on the pack.",
      "categories": [
        "upsell",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-best-value-tabs.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "upsell-mix-match",
      "type": "registry:block",
      "title": "Mix and match builder",
      "description": "Pick a pack size, spread units across flavors with steppers, watch the meter fill and add when complete.",
      "categories": [
        "upsell",
        "beverage",
        "supplements"
      ],
      "files": [
        {
          "path": "upsell/upsell-mix-match.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "upsell-addon-checkbox",
      "type": "registry:component",
      "title": "Add-on checkbox",
      "description": "One optional add-on row: warranty, refill, sample or packaging. Unchecked by default.",
      "categories": [
        "upsell",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-addon-checkbox.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "upsell-quantity-unlock",
      "type": "registry:block",
      "title": "Quantity unlock meter",
      "description": "A stepper drives a threshold meter and one line says what the next unit unlocks.",
      "categories": [
        "upsell",
        "supplements",
        "beverage",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-quantity-unlock.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "upsell-gift-chooser",
      "type": "registry:component",
      "title": "Gift with purchase chooser",
      "description": "Locked gift options with the exact remainder to spend, then a single pick once the threshold is met.",
      "categories": [
        "upsell",
        "beauty",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-gift-chooser.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "upsell-gift-options",
      "type": "registry:component",
      "title": "Gift options",
      "description": "This is a gift toggle that opens wrapping, a gift note with a character count and hidden prices.",
      "categories": [
        "upsell",
        "beauty",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-gift-options.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "upsell-financing",
      "type": "registry:component",
      "title": "Financing line",
      "description": "Or 4 interest-free payments under the price, with a modal showing the exact schedule and terms.",
      "categories": [
        "upsell",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-financing.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "upsell-policy-strip",
      "type": "registry:component",
      "title": "Pre-CTA policy strip",
      "description": "Delivery window, returns and guarantee in one row above add to cart, each opening a short detail.",
      "categories": [
        "upsell",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-policy-strip.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "upsell-express-row",
      "type": "registry:block",
      "title": "Add to cart with express row",
      "description": "Add to cart stays primary; express wallets sit beneath as a quieter row of text wordmarks.",
      "categories": [
        "upsell",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-express-row.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "upsell-dispatch-cutoff",
      "type": "registry:component",
      "title": "Dispatch cutoff",
      "description": "A countdown to the real warehouse cutoff in its own time zone that names the next dispatch day after it passes.",
      "categories": [
        "upsell",
        "any"
      ],
      "files": [
        {
          "path": "upsell/upsell-dispatch-cutoff.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "reviews-summary",
      "type": "registry:block",
      "title": "Review summary",
      "description": "Big average, star histogram that grows into view, write a review and most mentioned chips.",
      "categories": [
        "reviews",
        "any"
      ],
      "files": [
        {
          "path": "reviews/reviews-summary.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "reviews-list",
      "type": "registry:block",
      "title": "Review list",
      "description": "Filter chips, sort, review cards with verified badge, photo thumb and a springy helpful count.",
      "categories": [
        "reviews",
        "any"
      ],
      "files": [
        {
          "path": "reviews/reviews-list.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "reviews-ugc-wall",
      "type": "registry:block",
      "title": "UGC wall",
      "description": "Even grid of customer photos and pull quotes with a Shop this chip on hover.",
      "categories": [
        "reviews",
        "any"
      ],
      "files": [
        {
          "path": "reviews/reviews-ugc-wall.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "faq-accordion",
      "type": "registry:block",
      "title": "FAQ accordion",
      "description": "Five questions, one open at a time, with a still-have-questions contact card beside it on desktop.",
      "categories": [
        "marketing",
        "any"
      ],
      "files": [
        {
          "path": "marketing/faq-accordion.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "comparison-table",
      "type": "registry:block",
      "title": "Comparison table",
      "description": "Us vs typical vendor across six rows, the brand column tinted and marked, rows staggered in on view.",
      "categories": [
        "marketing",
        "any"
      ],
      "files": [
        {
          "path": "marketing/comparison-table.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "how-it-works",
      "type": "registry:block",
      "title": "How it works",
      "description": "Three concrete steps on a spine that draws itself in view, each with a mono numeral and a tiny product photo.",
      "categories": [
        "marketing",
        "any"
      ],
      "files": [
        {
          "path": "marketing/how-it-works.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "cta-band",
      "type": "registry:block",
      "title": "CTA band",
      "description": "Full-bleed ink closing band with a display headline, inline email capture and a drifting product tile.",
      "categories": [
        "marketing",
        "any"
      ],
      "files": [
        {
          "path": "marketing/cta-band.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "feature-bento",
      "type": "registry:block",
      "title": "Feature bento",
      "description": "Five tiles of different kinds: product image, stat, customer quote and two benefits. Staggered in, 2px hover lift.",
      "categories": [
        "marketing",
        "any"
      ],
      "files": [
        {
          "path": "marketing/feature-bento.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "age-gate",
      "type": "registry:component",
      "title": "Age gate",
      "description": "Full-screen 18+ interstitial that fades out on confirm and remembers the answer for 30 days.",
      "categories": [
        "compliance",
        "any"
      ],
      "files": [
        {
          "path": "compliance/age-gate.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "email-capture",
      "type": "registry:component",
      "title": "Email capture popup",
      "description": "Split modal with a product render, 10% off offer, loading and success states, and every dismiss path.",
      "categories": [
        "compliance",
        "any"
      ],
      "files": [
        {
          "path": "compliance/email-capture.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "disclaimer-banner",
      "type": "registry:component",
      "title": "Disclaimer banner",
      "description": "Slim supplement disclaimer band with an expandable full statement.",
      "categories": [
        "compliance",
        "any"
      ],
      "files": [
        {
          "path": "compliance/disclaimer-banner.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cookie-consent",
      "type": "registry:component",
      "title": "Cookie consent card",
      "description": "Bottom-left card with equal-weight reject and accept, a manage layer with per-category switches. Persists the choice.",
      "categories": [
        "compliance",
        "any"
      ],
      "files": [
        {
          "path": "compliance/cookie-consent.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "footer-columns",
      "type": "registry:block",
      "title": "Column footer with newsletter",
      "description": "Brand blurb with an inline newsletter form, three link columns, payment marks, and legal row.",
      "categories": [
        "footer",
        "any"
      ],
      "files": [
        {
          "path": "footer/footer-columns.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "footer-minimal",
      "type": "registry:block",
      "title": "Minimal footer",
      "description": "One compact row: mark, inline links, social icons, and copyright.",
      "categories": [
        "footer",
        "any"
      ],
      "files": [
        {
          "path": "footer/footer-minimal.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "footer-proof",
      "type": "registry:block",
      "title": "Proof footer",
      "description": "Inverse color band that reprises testing, ingredients, dispatch, and guarantee, then ends on a clipped wordmark.",
      "categories": [
        "footer",
        "any"
      ],
      "files": [
        {
          "path": "footer/footer-proof.tsx",
          "type": "registry:block"
        }
      ]
    },
    {
      "name": "page-store",
      "type": "registry:page",
      "title": "Example store",
      "description": "The full example storefront in one install: announcement, nav with a mobile drawer, hero, proof, categories, grid, product detail, lab results, reviews, guarantees, how it works, FAQ, CTA, footer and a working cart drawer.",
      "categories": [
        "page",
        "any"
      ],
      "files": [
        {
          "path": "page/page-store.tsx",
          "type": "registry:component"
        },
        {
          "path": "page/store-page.tsx",
          "type": "registry:page"
        }
      ]
    },
    {
      "name": "cn",
      "type": "registry:lib",
      "title": "cn + money",
      "description": "Class merge helper and currency formatter every StoreKit item uses.",
      "categories": [
        "ui"
      ],
      "files": [
        {
          "path": "lib/cn.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "sk-analytics",
      "type": "registry:hook",
      "title": "Self-instrumentation hook",
      "description": "useSkBlock gives a block its data-sk-* attributes and emits view, interact and convert events to any analytics sink already on the page (GA4 dataLayer, PostHog, Clarity, Shopify, rrweb).",
      "categories": [
        "ui"
      ],
      "files": [
        {
          "path": "lib/sk-analytics.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "button",
      "type": "registry:ui",
      "title": "Button",
      "description": "Solid, outline, ghost and ink variants. Loading state, 2% press scale, visible focus ring.",
      "categories": [
        "ui"
      ],
      "files": [
        {
          "path": "ui/button.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "price",
      "type": "registry:ui",
      "title": "Price",
      "description": "Tabular price with compare-at strike, sale color, savings chip, and per-unit or per-serving pricing.",
      "categories": [
        "ui"
      ],
      "files": [
        {
          "path": "ui/price.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "badge",
      "type": "registry:ui",
      "title": "Badge",
      "description": "Product state label: new, sale, bundle, low stock, verified. Optional live dot.",
      "categories": [
        "ui"
      ],
      "files": [
        {
          "path": "ui/badge.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "stars",
      "type": "registry:ui",
      "title": "Stars",
      "description": "Fractional star rating with count, filled by a clipped overlay.",
      "categories": [
        "ui"
      ],
      "files": [
        {
          "path": "ui/stars.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "stepper",
      "type": "registry:ui",
      "title": "Quantity stepper",
      "description": "Accessible quantity control with min and max.",
      "categories": [
        "ui"
      ],
      "files": [
        {
          "path": "ui/stepper.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "input",
      "type": "registry:ui",
      "title": "Input",
      "description": "Labelled text input with hint and error states, sized to match Button.",
      "categories": [
        "ui"
      ],
      "files": [
        {
          "path": "ui/input.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "product-image",
      "type": "registry:ui",
      "title": "Product image",
      "description": "Image on the surface token with shimmer, fade-in, hover zoom and optional hover swap.",
      "categories": [
        "ui"
      ],
      "files": [
        {
          "path": "ui/product-image.tsx",
          "type": "registry:ui"
        }
      ]
    },
    {
      "name": "style-morrow",
      "type": "registry:theme",
      "title": "Morrow style",
      "description": "Warm oat paper, forest green ink, one tangerine accent.",
      "categories": [
        "style",
        "wellness",
        "supplements",
        "warm",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-ember-roast",
      "type": "registry:theme",
      "title": "Ember Roast style",
      "description": "Low-lit roastery black, bone type and italic serif labels like a midnight menu.",
      "categories": [
        "style",
        "coffee",
        "warm",
        "dark",
        "luxe",
        "calm"
      ],
      "files": []
    },
    {
      "name": "style-noir-atelier",
      "type": "registry:theme",
      "title": "Noir Atelier style",
      "description": "Pure black and white, wide-tracked capitals, nothing allowed but the photograph.",
      "categories": [
        "style",
        "luxe",
        "dark",
        "apparel",
        "modern",
        "calm"
      ],
      "files": []
    },
    {
      "name": "style-desert-velvet",
      "type": "registry:theme",
      "title": "Desert Velvet style",
      "description": "Black velvet ground with butter-yellow serif headings and sun-flared photography.",
      "categories": [
        "style",
        "jewelry",
        "luxe",
        "dark",
        "warm",
        "apparel"
      ],
      "files": []
    },
    {
      "name": "style-night-beam",
      "type": "registry:theme",
      "title": "Night Beam style",
      "description": "A blacked-out showroom where one orange beam lights the hardware on its plinth.",
      "categories": [
        "style",
        "tech",
        "futurist",
        "dark",
        "bold",
        "modern"
      ],
      "files": []
    },
    {
      "name": "style-heavy-metal",
      "type": "registry:theme",
      "title": "Heavy Metal style",
      "description": "Vending machine for a metal band. Hard black, bone white, a little tarnished gold.",
      "categories": [
        "style",
        "beverage",
        "raw",
        "bold",
        "dark"
      ],
      "files": []
    },
    {
      "name": "style-red-line",
      "type": "registry:theme",
      "title": "Red Line style",
      "description": "Charcoal stage, whisper-weight headlines and a single red call to action.",
      "categories": [
        "style",
        "fitness",
        "bold",
        "cool",
        "dark",
        "modern"
      ],
      "files": []
    },
    {
      "name": "style-candle-brasserie",
      "type": "registry:theme",
      "title": "Candle Brasserie style",
      "description": "Oxblood dark dining room, wide-tracked type and a lemon yellow call to order.",
      "categories": [
        "style",
        "food",
        "warm",
        "dark",
        "bold"
      ],
      "files": []
    },
    {
      "name": "style-expedition",
      "type": "registry:theme",
      "title": "Expedition style",
      "description": "Twilight field kit. Near-black bands, thin technical type, spec sheet calm.",
      "categories": [
        "style",
        "outdoor",
        "raw",
        "cool",
        "dark",
        "modern"
      ],
      "files": []
    },
    {
      "name": "style-riso-night",
      "type": "registry:theme",
      "title": "Riso Night style",
      "description": "Riso zine on black card stock. Giant condensed type, cyan panels, magenta ink.",
      "categories": [
        "style",
        "raw",
        "bold",
        "playful",
        "dark",
        "streetwear"
      ],
      "files": []
    },
    {
      "name": "style-spice-market",
      "type": "registry:theme",
      "title": "Spice Market style",
      "description": "Rust walls, turmeric gold and poster-sized condensed type shouting the menu.",
      "categories": [
        "style",
        "food",
        "warm",
        "bold",
        "dark"
      ],
      "files": []
    },
    {
      "name": "style-listening-room",
      "type": "registry:theme",
      "title": "Listening Room style",
      "description": "Evergreen walls after dusk, warm serif labels and walnut hi-fi under lamplight.",
      "categories": [
        "style",
        "home",
        "tech",
        "retro",
        "70s",
        "warm",
        "dark"
      ],
      "files": []
    },
    {
      "name": "style-honey-barn",
      "type": "registry:theme",
      "title": "Honey Barn style",
      "description": "Painted barn-side sign. Cocoa ground, honey gold, fat serif lettering.",
      "categories": [
        "style",
        "food",
        "retro",
        "warm",
        "dark",
        "bold"
      ],
      "files": []
    },
    {
      "name": "style-cold-press-tile",
      "type": "registry:theme",
      "title": "Cold Press Tile style",
      "description": "White subway tile, orange grout lines and sticker buttons with a hard burgundy drop.",
      "categories": [
        "style",
        "raw",
        "bold",
        "light",
        "beverage",
        "food"
      ],
      "files": []
    },
    {
      "name": "style-sour-cobalt",
      "type": "registry:theme",
      "title": "Sour Cobalt style",
      "description": "Lavender candy aisle printed in one electric cobalt, with sour lime stabs.",
      "categories": [
        "style",
        "y2k",
        "playful",
        "bold",
        "light",
        "food"
      ],
      "files": []
    },
    {
      "name": "style-cotton-candy",
      "type": "registry:theme",
      "title": "Cotton Candy style",
      "description": "Glossy rainbow pebbles on a cotton candy sky. Everything rounded, nothing sharp.",
      "categories": [
        "style",
        "y2k",
        "playful",
        "kids",
        "light",
        "beauty"
      ],
      "files": []
    },
    {
      "name": "style-gallery-white",
      "type": "registry:theme",
      "title": "Gallery White style",
      "description": "White cube, hairline rules, a thin editorial serif. Only the photographs have color.",
      "categories": [
        "style",
        "luxe",
        "apparel",
        "calm",
        "light",
        "modern"
      ],
      "files": []
    },
    {
      "name": "style-lookbook",
      "type": "registry:theme",
      "title": "Lookbook style",
      "description": "Printed lookbook on bone white. Tracked capitals, cream panels, pill buttons.",
      "categories": [
        "style",
        "streetwear",
        "apparel",
        "calm",
        "light",
        "modern"
      ],
      "files": []
    },
    {
      "name": "style-arcade-skate",
      "type": "registry:theme",
      "title": "Arcade Skate style",
      "description": "Pixel type on a skate shop counter. Checkerboard, cream, one green buy button.",
      "categories": [
        "style",
        "streetwear",
        "retro",
        "playful",
        "light",
        "apparel"
      ],
      "files": []
    },
    {
      "name": "style-base-camp",
      "type": "registry:theme",
      "title": "Base Camp style",
      "description": "Field post at dusk. Massive grotesk headings, map-label mono, one signal red.",
      "categories": [
        "style",
        "outdoor",
        "bold",
        "cool",
        "light",
        "apparel"
      ],
      "files": []
    },
    {
      "name": "style-fjord-cobalt",
      "type": "registry:theme",
      "title": "Fjord Cobalt style",
      "description": "Nordic showroom in white and bone with a single cobalt stroke of intent.",
      "categories": [
        "style",
        "home",
        "calm",
        "cool",
        "light",
        "modern"
      ],
      "files": []
    },
    {
      "name": "style-specimen-lab",
      "type": "registry:theme",
      "title": "Specimen Lab style",
      "description": "Living cultures under glass. Forest green ink, light headlines, lime highlights.",
      "categories": [
        "style",
        "clinical",
        "supplements",
        "calm",
        "light",
        "modern"
      ],
      "files": []
    },
    {
      "name": "style-soda-fountain",
      "type": "registry:theme",
      "title": "Soda Fountain style",
      "description": "A soda fountain menu on warm paper. Fat retro serif, forest teal, flavor pastels.",
      "categories": [
        "style",
        "beverage",
        "retro",
        "playful",
        "warm",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-parlor-marquee",
      "type": "registry:theme",
      "title": "Parlor Marquee style",
      "description": "Ice cream parlor shopfront. Cherry trim, stacked marquee letters, cream cards.",
      "categories": [
        "style",
        "food",
        "retro",
        "playful",
        "warm",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-olive-deli",
      "type": "registry:theme",
      "title": "Olive Deli style",
      "description": "Sunlit deli counter. Tall serif headlines, typewriter body, mustard and leaf bands.",
      "categories": [
        "style",
        "food",
        "warm",
        "retro",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-aperitivo",
      "type": "registry:theme",
      "title": "Aperitivo style",
      "description": "Vintage aperitif label at sunset. Burgundy bands, condensed caps, lemon stickers.",
      "categories": [
        "style",
        "beverage",
        "warm",
        "retro",
        "luxe",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-puppy-love",
      "type": "registry:theme",
      "title": "Puppy Love style",
      "description": "Blush and sky washes, cocoa type, pill buttons and very good dogs.",
      "categories": [
        "style",
        "pets",
        "playful",
        "warm",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-toy-box",
      "type": "registry:theme",
      "title": "Toy Box style",
      "description": "A freshly opened set on a white table. Primary yellow, brick orange, square badges.",
      "categories": [
        "style",
        "kids",
        "playful",
        "bold",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-butcher-paper",
      "type": "registry:theme",
      "title": "Butcher Paper style",
      "description": "Scarlet ink on butcher paper. Hairline serif display, soft rounded image blocks.",
      "categories": [
        "style",
        "coffee",
        "warm",
        "calm",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-vitrine",
      "type": "registry:theme",
      "title": "Vitrine style",
      "description": "Silent museum case. Achromatic, wide letterspaced caps, each piece alone.",
      "categories": [
        "style",
        "jewelry",
        "luxe",
        "calm",
        "light",
        "modern"
      ],
      "files": []
    },
    {
      "name": "style-finish-line",
      "type": "registry:theme",
      "title": "Finish Line style",
      "description": "Race day in a cleanroom. Compressed black slab headings, one fuel orange tab.",
      "categories": [
        "style",
        "fitness",
        "supplements",
        "clinical",
        "bold",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-toile-garden",
      "type": "registry:theme",
      "title": "Toile Garden style",
      "description": "Botanical sketchbook. Indigo toile line art, honey blobs, tall tracked caps.",
      "categories": [
        "style",
        "food",
        "warm",
        "playful",
        "light",
        "retro"
      ],
      "files": []
    },
    {
      "name": "style-moss-stone",
      "type": "registry:theme",
      "title": "Moss Stone style",
      "description": "A still forest floor. Warm grays, sumi black, small type and wide silence.",
      "categories": [
        "style",
        "home",
        "calm",
        "light",
        "modern"
      ],
      "files": []
    },
    {
      "name": "style-deco-folio",
      "type": "registry:theme",
      "title": "Deco Folio style",
      "description": "Art deco catalogue. Bodoni on vellum, burnished gold hairlines, black bands.",
      "categories": [
        "style",
        "deco",
        "luxe",
        "retro",
        "light",
        "jewelry"
      ],
      "files": []
    },
    {
      "name": "style-workshop-zine",
      "type": "registry:theme",
      "title": "Workshop Zine style",
      "description": "Newsprint zine taped to a workshop wall. Black grid lines, squeezed heads, blue.",
      "categories": [
        "style",
        "raw",
        "apparel",
        "retro",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-hot-sauce-billboard",
      "type": "registry:theme",
      "title": "Hot Sauce Billboard style",
      "description": "Condiment billboard in midday sun. All yellow, fat marker type, black outlines.",
      "categories": [
        "style",
        "food",
        "playful",
        "bold",
        "light",
        "retro"
      ],
      "files": []
    },
    {
      "name": "style-prescription-violet",
      "type": "registry:theme",
      "title": "Prescription Violet style",
      "description": "Porcelain pages in prescription violet ink, floating rounded tablets of content.",
      "categories": [
        "style",
        "clinical",
        "beauty",
        "cool",
        "calm",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-vinyl-sleeve",
      "type": "registry:theme",
      "title": "Vinyl Sleeve style",
      "description": "Record sleeve in afternoon sun. Espresso ink, burnt orange, mono labels.",
      "categories": [
        "style",
        "coffee",
        "retro",
        "70s",
        "warm",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-lipstick-press",
      "type": "registry:theme",
      "title": "Lipstick Press style",
      "description": "Magazine splash in lipstick pink. Ultra black stacked caps over forest green ink.",
      "categories": [
        "style",
        "beauty",
        "bold",
        "playful",
        "light"
      ],
      "files": []
    },
    {
      "name": "style-acid-poster",
      "type": "registry:theme",
      "title": "Acid Poster style",
      "description": "An activist poster on acid lime paper. Thin serif, black slabs, zero curves.",
      "categories": [
        "style",
        "bold",
        "raw",
        "light",
        "beverage",
        "supplements"
      ],
      "files": []
    },
    {
      "name": "style-marshmallow",
      "type": "registry:theme",
      "title": "Marshmallow style",
      "description": "Marshmallow pastel washes on white, with one raspberry button doing the work.",
      "categories": [
        "style",
        "beauty",
        "playful",
        "calm",
        "light"
      ],
      "files": []
    }
  ]
}