{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "ssych-ui",
  "homepage": "https://ssych.com/library",
  "items": [
    {
      "name": "profile-card",
      "type": "registry:ui",
      "title": "Profile Card",
      "description": "Profile header, stats and a tabbed feed — a gliding tab underline and a Follow button that quiets down once pressed.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "coverflow-rail",
      "type": "registry:ui",
      "title": "Coverflow Rail",
      "description": "A cover rail you throw with a finger — the centre card faces you square, neighbours rake away and sink back, and a flick carries at most two cards before it settles.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "sidebar",
      "type": "registry:ui",
      "title": "Sidebar",
      "description": "Collapsible accordion sidebar with icon'd sections, an active rail, and socials.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "macos-dock",
      "type": "registry:ui",
      "title": "macOS Dock",
      "description": "macOS-style magnifying dock — cursor-driven icon springs, click bounce, floor reflections, running-app dots, and a ⌘K command menu.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "browser-window",
      "type": "registry:ui",
      "title": "Browser Window",
      "description": "Chrome / Safari mock window frame for screenshots and embeds.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "tailwind-merge"
      ]
    },
    {
      "name": "macbook-frame",
      "type": "registry:ui",
      "title": "MacBook Frame",
      "description": "Front-facing MacBook mockup — drop a screenshot, gradient, or live UI on the screen.",
      "dependencies": [
        "clsx",
        "tailwind-merge"
      ]
    },
    {
      "name": "card-stack",
      "type": "registry:ui",
      "title": "Card Stack",
      "description": "Draggable stacked-card carousel — swipe or drag the top card, click to expand into a details modal with a floating dock.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ],
      "registryDependencies": [
        "https://ssych.com/r/project-card.json"
      ]
    },
    {
      "name": "card-grid",
      "type": "registry:ui",
      "title": "Card Grid",
      "description": "Responsive grid of project cards with hover-reveal actions and a shared details modal.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ],
      "registryDependencies": [
        "https://ssych.com/r/project-card.json"
      ]
    },
    {
      "name": "card-list",
      "type": "registry:ui",
      "title": "Card List",
      "description": "Vertical list of horizontal project cards with media, copy, and a shared details modal.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ],
      "registryDependencies": [
        "https://ssych.com/r/project-card.json"
      ]
    },
    {
      "name": "bento-gallery",
      "type": "registry:ui",
      "title": "Bento Gallery",
      "description": "Draggable bento grid of media that expands into a shared lightbox modal with a floating dock switcher.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ],
      "registryDependencies": [
        "https://ssych.com/r/macos-dock.json"
      ]
    },
    {
      "name": "cutout-card",
      "type": "registry:ui",
      "title": "Cutout Card",
      "description": "Media card with a scooped-out content tray (concave corners), hover-reveal action button, and gradient overlay.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "gradient-button-group",
      "type": "registry:ui",
      "title": "Gradient Button Group",
      "description": "Segmented icon switcher with a sliding gradient selection pill driven by a shared layout animation.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "description": "Expanding accordion rows — each reveals its body, a checklist, and a visual.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ],
      "registryDependencies": [
        "https://ssych.com/r/macbook-frame.json"
      ]
    },
    {
      "name": "project-card",
      "type": "registry:ui",
      "title": "Project Card",
      "description": "Shared cutout project card with blurred-gradient media and a liquid-metal hover ring.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "metal-fx",
        "motion",
        "tailwind-merge"
      ],
      "registryDependencies": [
        "https://ssych.com/r/bento-gallery.json",
        "https://ssych.com/r/cutout-card.json"
      ]
    },
    {
      "name": "historical-eps",
      "type": "registry:ui",
      "title": "Historical EPS",
      "description": "Forecast-vs-reported quarterly bars — dashed forecasts, a derived Beat-by tip, and a surprise tooltip.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "price-target-fan",
      "type": "registry:ui",
      "title": "Price Target Fan",
      "description": "Analyst targets — history walks to now, dashed projections fan to High / Mean / Low with a scrub-following KPI card.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "market-watchlist",
      "type": "registry:ui",
      "title": "Market Watchlist",
      "description": "Sortable quote register — trend sparklines, signed day changes, accent spine on the selected row.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "sma-chart",
      "type": "registry:ui",
      "title": "SMA Chart",
      "description": "Moving-average chart — price line with fast/slow SMA overlays, crosshair scrubbing with a three-series tooltip, and a signed change chip.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "market-snapshot",
      "type": "registry:ui",
      "title": "Market Snapshot",
      "description": "Price snapshot card — animated headline price, period-sliced line chart with crosshair scrubbing, and a gliding period switcher.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "index-card",
      "type": "registry:ui",
      "title": "Index Card",
      "description": "Markets sidebar card — one big price over a full-bleed scrubbable line, a tab underline that walks between indices, and the one-paragraph read below.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "range-navigator",
      "type": "registry:ui",
      "title": "Range Navigator",
      "description": "Focus + context price history — a detail chart over a mini-map you drag to pan and pull to zoom, with a hover crosshair reading price and date.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "sectors-donut",
      "type": "registry:ui",
      "title": "Sectors Donut",
      "description": "Allocation ring with legend cross-highlight — hovering isolates one weight at a time.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "ratings-radar",
      "type": "registry:ui",
      "title": "Ratings Radar",
      "description": "Analyst-ratings pentagon with hairline rings and one green wedge toward the dominant rating.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "analyst-radar",
      "type": "registry:ui",
      "title": "Analyst Radar",
      "description": "Two-series factor radar — subject filled against a dashed peer outline, a hovered spoke reading both values, and a legend that mutes a series.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "kpi-card-row",
      "type": "registry:ui",
      "title": "KPI Card Row",
      "description": "Dashboard stat band — count-up headlines with signed deltas over full-bleed area charts you can hover to read any sample with its date.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "heat-calendar",
      "type": "registry:ui",
      "title": "Heat Calendar",
      "description": "Weeks of activity as a sequential single-hue grid with per-cell hover counts.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "returns-calendar",
      "type": "registry:ui",
      "title": "Returns Calendar",
      "description": "Monthly-returns heat grid — years × months diverging up/down by magnitude, a compounded year-total column, and a hover read-out that dims everything unrelated.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "holdings-table",
      "type": "registry:ui",
      "title": "Holdings Table",
      "description": "Fund-holdings register with YTD pills and tick-comb weight bars.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "request-log",
      "type": "registry:ui",
      "title": "Request Log",
      "description": "API log rows with status pills that unfold their response body inline.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "new-items-pill",
      "type": "registry:ui",
      "title": "New Items Pill",
      "description": "A live tape that pins the row you are reading — arrivals stop pushing the list down and count into a pill until you tap back to the top.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "inbox",
      "type": "registry:ui",
      "title": "Inbox",
      "description": "Notification inbox — unread dots dissolve on read, mark-all clears the column.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ],
      "registryDependencies": [
        "https://ssych.com/r/avatar-stack.json"
      ]
    },
    {
      "name": "project-index",
      "type": "registry:ui",
      "title": "Project Index",
      "description": "Bare project rows where the cover only exists while you hover, floating beside the cursor.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "news-card",
      "type": "registry:ui",
      "title": "News Card",
      "description": "Auto-cycling news module with an ink headline and dot pagination.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "alert-stack",
      "type": "registry:ui",
      "title": "Alert Stack",
      "description": "Collapsed notification deck that fans open on hover; each dismiss re-settles the pile.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "onboarding-checklist",
      "type": "registry:ui",
      "title": "Onboarding Checklist",
      "description": "Setup checklist — the check draws in and the progress bar keeps a derivable score.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "preferences-card",
      "type": "registry:ui",
      "title": "Preferences Card",
      "description": "Settings rows with icon tiles, one-line hints, and a chevron that walks in on hover.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "empty-state",
      "type": "registry:ui",
      "title": "Empty State",
      "description": "A dotted field, a hairline icon chip, one line of ink and one quiet action.",
      "dependencies": [
        "clsx",
        "tailwind-merge"
      ]
    },
    {
      "name": "swap-ticket",
      "type": "registry:ui",
      "title": "Swap Ticket",
      "description": "Composed trade card. A flip button on the seam really swaps the cards, a token-select overlay covers the ticket, and the CTA label is the validation state.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "segmented-control",
      "type": "registry:ui",
      "title": "Segmented Control",
      "description": "Hairline pill whose thumb glides between options with a shared-layout spring.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "avatar-stack",
      "type": "registry:ui",
      "title": "Avatar Stack",
      "description": "Overlapping gradient-orb coins with a surface ring. Hovering lifts and names a coin, and the overflow count floats the hidden names without widening the stack.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "amount",
      "type": "registry:ui",
      "title": "Amount",
      "description": "Money-formatting family — Fiat, Crypto and Percent agree on symbol placement, precision, abbreviation and sign colouring.",
      "dependencies": [
        "clsx",
        "tailwind-merge"
      ]
    },
    {
      "name": "crypto-fiat",
      "type": "registry:ui",
      "title": "Crypto/Fiat",
      "description": "Dual-denomination amount field. Type in fiat or units, the toggle carries the value through the rate, and the headline steps down a size tier as it grows.",
      "dependencies": [
        "clsx",
        "lucide-react",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "screen-shuffle",
      "type": "registry:ui",
      "title": "Screen Shuffle",
      "description": "Stacked screens where the front card arcs to the back on a timer or click.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "mouse-trail-cta",
      "type": "registry:ui",
      "title": "Mouse-Trail CTA",
      "description": "CTA stage where the cursor's particle trail gravitates into the pill and feeds its glow.",
      "dependencies": [
        "clsx",
        "motion",
        "tailwind-merge"
      ]
    },
    {
      "name": "portfolio-book",
      "type": "registry:block",
      "title": "portfolio-book (paid screen)",
      "meta": {
        "screen": true
      },
      "dependencies": [
        "@phosphor-icons/react",
        "lucide-react",
        "motion"
      ]
    },
    {
      "name": "portfolio-allocation",
      "type": "registry:block",
      "title": "portfolio-allocation (paid screen)",
      "meta": {
        "screen": true
      },
      "dependencies": [
        "@phosphor-icons/react",
        "lucide-react",
        "motion"
      ]
    },
    {
      "name": "portfolio-tiers",
      "type": "registry:block",
      "title": "portfolio-tiers (paid screen)",
      "meta": {
        "screen": true
      },
      "dependencies": [
        "@phosphor-icons/react",
        "lucide-react",
        "motion"
      ]
    },
    {
      "name": "discover-board",
      "type": "registry:block",
      "title": "discover-board (paid screen)",
      "meta": {
        "screen": true
      },
      "dependencies": [
        "@phosphor-icons/react",
        "lucide-react",
        "motion"
      ]
    },
    {
      "name": "discover-screener",
      "type": "registry:block",
      "title": "discover-screener (paid screen)",
      "meta": {
        "screen": true
      },
      "dependencies": [
        "@phosphor-icons/react",
        "lucide-react",
        "motion"
      ]
    },
    {
      "name": "terminal-dex",
      "type": "registry:block",
      "title": "terminal-dex (paid screen)",
      "meta": {
        "screen": true
      },
      "dependencies": [
        "lucide-react",
        "motion",
        "react-router-dom"
      ]
    },
    {
      "name": "tradeboard-landing",
      "type": "registry:block",
      "title": "tradeboard-landing (paid screen)",
      "meta": {
        "screen": true
      },
      "dependencies": [
        "@phosphor-icons/react",
        "motion",
        "react-router-dom"
      ]
    },
    {
      "name": "stablecoin-landing",
      "type": "registry:block",
      "title": "stablecoin-landing (paid screen)",
      "meta": {
        "screen": true
      },
      "dependencies": [
        "lucide-react",
        "motion",
        "react-router-dom"
      ]
    },
    {
      "name": "simple-landing",
      "type": "registry:block",
      "title": "simple-landing (paid screen)",
      "meta": {
        "screen": true
      },
      "dependencies": [
        "@phosphor-icons/react",
        "clsx",
        "lucide-react",
        "metal-fx",
        "motion",
        "react-router-dom",
        "tailwind-merge"
      ]
    }
  ]
}