{
  "name": "Viewership UI",
  "description": "A gallery of crafted, copy-in UI components for Astro: server-rendered markup, vanilla TypeScript behaviour, token-driven theming and accessibility built in.",
  "docs": {
    "llms": "https://viewership.ai/design/llms.txt",
    "llmsFull": "https://viewership.ai/design/llms-full.txt",
    "overview": "https://viewership.ai/design/index.md",
    "conventions": "https://viewership.ai/design/conventions.md",
    "foundations": "https://viewership.ai/design/stylesheets.md",
    "foundationCss": "https://viewership.ai/design/raw/foundation.css.txt"
  },
  "items": [
    {
      "slug": "button",
      "title": "Button",
      "description": "Pill-shaped action button in six variants and three sizes.",
      "kind": "atom",
      "category": "Actions",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "Button.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/button",
        "markdown": "https://viewership.ai/design/components/button.md",
        "json": "https://viewership.ai/design/components/button.json",
        "bundle": "https://viewership.ai/design/components/button.bundle.txt"
      }
    },
    {
      "slug": "hero-statement",
      "title": "Hero Statement",
      "description": "Centred headline and actions above a wide media panel.",
      "kind": "section",
      "category": "Hero",
      "source": "Viewership UI",
      "dependencies": [
        "button"
      ],
      "files": [
        "HeroStatement.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/hero-statement",
        "markdown": "https://viewership.ai/design/components/hero-statement.md",
        "json": "https://viewership.ai/design/components/hero-statement.json",
        "bundle": "https://viewership.ai/design/components/hero-statement.bundle.txt"
      }
    },
    {
      "slug": "glide-menu",
      "title": "Glide Menu",
      "description": "One highlight that glides to the hovered or focused row.",
      "kind": "atom",
      "category": "Navigation",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "GlideMenu.astro",
        "glide-menu.ts"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/glide-menu",
        "markdown": "https://viewership.ai/design/components/glide-menu.md",
        "json": "https://viewership.ai/design/components/glide-menu.json",
        "bundle": "https://viewership.ai/design/components/glide-menu.bundle.txt"
      }
    },
    {
      "slug": "hero-split",
      "title": "Hero Split",
      "description": "Headline and actions beside a media panel; stacks when narrow, flips with one prop.",
      "kind": "section",
      "category": "Hero",
      "source": "Viewership UI",
      "dependencies": [
        "button"
      ],
      "files": [
        "HeroSplit.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/hero-split",
        "markdown": "https://viewership.ai/design/components/hero-split.md",
        "json": "https://viewership.ai/design/components/hero-split.json",
        "bundle": "https://viewership.ai/design/components/hero-split.bundle.txt"
      }
    },
    {
      "slug": "entity-chip",
      "title": "Entity Chip",
      "description": "Inline reference to a client, person or record, as a monogram and name.",
      "kind": "atom",
      "category": "Content",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "EntityChip.astro",
        "Monogram.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/entity-chip",
        "markdown": "https://viewership.ai/design/components/entity-chip.md",
        "json": "https://viewership.ai/design/components/entity-chip.json",
        "bundle": "https://viewership.ai/design/components/entity-chip.bundle.txt"
      }
    },
    {
      "slug": "hero-index",
      "title": "Hero Index",
      "description": "Oversized left-aligned headline over a ruled row of facts. Type-led, no media.",
      "kind": "section",
      "category": "Hero",
      "source": "Viewership UI",
      "dependencies": [
        "button"
      ],
      "files": [
        "HeroIndex.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/hero-index",
        "markdown": "https://viewership.ai/design/components/hero-index.md",
        "json": "https://viewership.ai/design/components/hero-index.json",
        "bundle": "https://viewership.ai/design/components/hero-index.bundle.txt"
      }
    },
    {
      "slug": "hero-poster",
      "title": "Hero Poster",
      "description": "Full-bleed image or video with the headline set over it, bottom left, behind a soft scrim.",
      "kind": "section",
      "category": "Hero",
      "source": "Viewership UI",
      "dependencies": [
        "button"
      ],
      "files": [
        "HeroPoster.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/hero-poster",
        "markdown": "https://viewership.ai/design/components/hero-poster.md",
        "json": "https://viewership.ai/design/components/hero-poster.json",
        "bundle": "https://viewership.ai/design/components/hero-poster.bundle.txt"
      }
    },
    {
      "slug": "value-pill",
      "title": "Value Pill",
      "description": "Inline badge that sets a value off from running text.",
      "kind": "atom",
      "category": "Content",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "ValuePill.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/value-pill",
        "markdown": "https://viewership.ai/design/components/value-pill.md",
        "json": "https://viewership.ai/design/components/value-pill.json",
        "bundle": "https://viewership.ai/design/components/value-pill.bundle.txt"
      }
    },
    {
      "slug": "shimmer",
      "title": "Shimmer",
      "description": "Label with a moving light sweep that shows the agent is working.",
      "kind": "atom",
      "category": "Feedback",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "Shimmer.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/shimmer",
        "markdown": "https://viewership.ai/design/components/shimmer.md",
        "json": "https://viewership.ai/design/components/shimmer.json",
        "bundle": "https://viewership.ai/design/components/shimmer.bundle.txt"
      }
    },
    {
      "slug": "stream-text",
      "title": "Stream Text",
      "description": "Text that streams in like model output, with a blurred edge and caret.",
      "kind": "atom",
      "category": "Feedback",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "StreamText.astro",
        "stream-text.ts"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/stream-text",
        "markdown": "https://viewership.ai/design/components/stream-text.md",
        "json": "https://viewership.ai/design/components/stream-text.json",
        "bundle": "https://viewership.ai/design/components/stream-text.bundle.txt"
      }
    },
    {
      "slug": "chip",
      "title": "Chip",
      "description": "Monospace chip for code values and field names in text.",
      "kind": "atom",
      "category": "Content",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "Chip.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/chip",
        "markdown": "https://viewership.ai/design/components/chip.md",
        "json": "https://viewership.ai/design/components/chip.json",
        "bundle": "https://viewership.ai/design/components/chip.bundle.txt"
      }
    },
    {
      "slug": "status-pill",
      "title": "Status Pill",
      "description": "Tinted status label with a leading dot, in five tones.",
      "kind": "atom",
      "category": "Feedback",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "StatusPill.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/status-pill",
        "markdown": "https://viewership.ai/design/components/status-pill.md",
        "json": "https://viewership.ai/design/components/status-pill.json",
        "bundle": "https://viewership.ai/design/components/status-pill.bundle.txt"
      }
    },
    {
      "slug": "segmented-control",
      "title": "Segmented Control",
      "description": "Equal-width segments with a sliding thumb, as a radio group.",
      "kind": "atom",
      "category": "Inputs",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "SegmentedControl.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/segmented-control",
        "markdown": "https://viewership.ai/design/components/segmented-control.md",
        "json": "https://viewership.ai/design/components/segmented-control.json",
        "bundle": "https://viewership.ai/design/components/segmented-control.bundle.txt"
      }
    },
    {
      "slug": "switch",
      "title": "Switch",
      "description": "On/off toggle on a native checkbox, in two sizes and two tones.",
      "kind": "atom",
      "category": "Inputs",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "Switch.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/switch",
        "markdown": "https://viewership.ai/design/components/switch.md",
        "json": "https://viewership.ai/design/components/switch.json",
        "bundle": "https://viewership.ai/design/components/switch.bundle.txt"
      }
    },
    {
      "slug": "feature-cards",
      "title": "Feature Cards",
      "description": "Features as a joined index grid: numbered cells sharing hairlines, display-face titles, optional tags and links.",
      "kind": "section",
      "category": "Features",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "FeatureCards.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/feature-cards",
        "markdown": "https://viewership.ai/design/components/feature-cards.md",
        "json": "https://viewership.ai/design/components/feature-cards.json",
        "bundle": "https://viewership.ai/design/components/feature-cards.bundle.txt"
      }
    },
    {
      "slug": "progress-ring",
      "title": "Progress Ring",
      "description": "Small progress ring with a count or glyph in the center.",
      "kind": "atom",
      "category": "Data",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "ProgressRing.astro",
        "progress-ring.ts"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/progress-ring",
        "markdown": "https://viewership.ai/design/components/progress-ring.md",
        "json": "https://viewership.ai/design/components/progress-ring.json",
        "bundle": "https://viewership.ai/design/components/progress-ring.bundle.txt"
      }
    },
    {
      "slug": "feature-rules",
      "title": "Feature Rules",
      "description": "Headline pinned left, numbered features ruled like an index on the right.",
      "kind": "section",
      "category": "Features",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "FeatureRules.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/feature-rules",
        "markdown": "https://viewership.ai/design/components/feature-rules.md",
        "json": "https://viewership.ai/design/components/feature-rules.json",
        "bundle": "https://viewership.ai/design/components/feature-rules.bundle.txt"
      }
    },
    {
      "slug": "text-row",
      "title": "Text Row",
      "description": "Label on the left, value and optional meta on the right.",
      "kind": "atom",
      "category": "Data",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "TextRow.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/text-row",
        "markdown": "https://viewership.ai/design/components/text-row.md",
        "json": "https://viewership.ai/design/components/text-row.json",
        "bundle": "https://viewership.ai/design/components/text-row.bundle.txt"
      }
    },
    {
      "slug": "feature-bento",
      "title": "Feature Bento",
      "description": "One large accent tile, three light tiles and a dark closer. Built for five features, with optional figures.",
      "kind": "section",
      "category": "Features",
      "source": "Viewership UI",
      "dependencies": [
        "icon"
      ],
      "files": [
        "FeatureBento.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/feature-bento",
        "markdown": "https://viewership.ai/design/components/feature-bento.md",
        "json": "https://viewership.ai/design/components/feature-bento.json",
        "bundle": "https://viewership.ai/design/components/feature-bento.bundle.txt"
      }
    },
    {
      "slug": "feature-alternating",
      "title": "Feature Alternating",
      "description": "Image and copy rows that swap sides as you scroll, for features that each deserve a picture.",
      "kind": "section",
      "category": "Features",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "FeatureAlternating.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/feature-alternating",
        "markdown": "https://viewership.ai/design/components/feature-alternating.md",
        "json": "https://viewership.ai/design/components/feature-alternating.json",
        "bundle": "https://viewership.ai/design/components/feature-alternating.bundle.txt"
      }
    },
    {
      "slug": "overlay",
      "title": "Overlay core",
      "description": "Positioning, dismissal, focus-trap and roving-focus helpers for popovers, menus and dialogs.",
      "kind": "atom",
      "category": "Overlays",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "overlay.ts"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/overlay",
        "markdown": "https://viewership.ai/design/components/overlay.md",
        "json": "https://viewership.ai/design/components/overlay.json",
        "bundle": "https://viewership.ai/design/components/overlay.bundle.txt"
      }
    },
    {
      "slug": "testimonial-spotlight",
      "title": "Testimonial Spotlight",
      "description": "One customer quote set large in the display face, with up to three supporting quotes beneath.",
      "kind": "section",
      "category": "Proof",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "TestimonialSpotlight.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/testimonial-spotlight",
        "markdown": "https://viewership.ai/design/components/testimonial-spotlight.md",
        "json": "https://viewership.ai/design/components/testimonial-spotlight.json",
        "bundle": "https://viewership.ai/design/components/testimonial-spotlight.bundle.txt"
      }
    },
    {
      "slug": "testimonial-cards",
      "title": "Testimonial Cards",
      "description": "Quotes as an even row of cards with optional star ratings and initials avatars.",
      "kind": "section",
      "category": "Proof",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "TestimonialCards.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/testimonial-cards",
        "markdown": "https://viewership.ai/design/components/testimonial-cards.md",
        "json": "https://viewership.ai/design/components/testimonial-cards.json",
        "bundle": "https://viewership.ai/design/components/testimonial-cards.bundle.txt"
      }
    },
    {
      "slug": "testimonial-wall",
      "title": "Testimonial Wall",
      "description": "Staggered columns of quotes in mixed tones. Takes quotes of any length.",
      "kind": "section",
      "category": "Proof",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "TestimonialWall.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/testimonial-wall",
        "markdown": "https://viewership.ai/design/components/testimonial-wall.md",
        "json": "https://viewership.ai/design/components/testimonial-wall.json",
        "bundle": "https://viewership.ai/design/components/testimonial-wall.bundle.txt"
      }
    },
    {
      "slug": "logo-row",
      "title": "Logo Row",
      "description": "A lead-in line and one wrapping row of client or press logos. Names become wordmarks when there is no image.",
      "kind": "section",
      "category": "Proof",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "LogoRow.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/logo-row",
        "markdown": "https://viewership.ai/design/components/logo-row.md",
        "json": "https://viewership.ai/design/components/logo-row.json",
        "bundle": "https://viewership.ai/design/components/logo-row.bundle.txt"
      }
    },
    {
      "slug": "logo-grid",
      "title": "Logo Grid",
      "description": "Logos in bordered cells beside a short statement, like a spec sheet.",
      "kind": "section",
      "category": "Proof",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "LogoGrid.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/logo-grid",
        "markdown": "https://viewership.ai/design/components/logo-grid.md",
        "json": "https://viewership.ai/design/components/logo-grid.json",
        "bundle": "https://viewership.ai/design/components/logo-grid.bundle.txt"
      }
    },
    {
      "slug": "logo-marquee",
      "title": "Logo Marquee",
      "description": "Logos drifting in a slow loop with faded edges. Pauses on hover, static under reduced motion.",
      "kind": "section",
      "category": "Proof",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "LogoMarquee.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/logo-marquee",
        "markdown": "https://viewership.ai/design/components/logo-marquee.md",
        "json": "https://viewership.ai/design/components/logo-marquee.json",
        "bundle": "https://viewership.ai/design/components/logo-marquee.bundle.txt"
      }
    },
    {
      "slug": "stats-band",
      "title": "Stats Band",
      "description": "Headline figures on a dark band, each with a label, a footnote and a source line.",
      "kind": "section",
      "category": "Proof",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "StatsBand.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/stats-band",
        "markdown": "https://viewership.ai/design/components/stats-band.md",
        "json": "https://viewership.ai/design/components/stats-band.json",
        "bundle": "https://viewership.ai/design/components/stats-band.bundle.txt"
      }
    },
    {
      "slug": "pricing-columns",
      "title": "Pricing Columns",
      "description": "Plans side by side as cards, with the featured plan inverted onto ink.",
      "kind": "section",
      "category": "Pricing",
      "source": "Viewership UI",
      "dependencies": [
        "button",
        "icon"
      ],
      "files": [
        "PricingColumns.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/pricing-columns",
        "markdown": "https://viewership.ai/design/components/pricing-columns.md",
        "json": "https://viewership.ai/design/components/pricing-columns.json",
        "bundle": "https://viewership.ai/design/components/pricing-columns.bundle.txt"
      }
    },
    {
      "slug": "pricing-rows",
      "title": "Pricing Rows",
      "description": "One plan per ruled row with name, inclusions, price and action. Handles many plans and long lists.",
      "kind": "section",
      "category": "Pricing",
      "source": "Viewership UI",
      "dependencies": [
        "button",
        "icon"
      ],
      "files": [
        "PricingRows.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/pricing-rows",
        "markdown": "https://viewership.ai/design/components/pricing-rows.md",
        "json": "https://viewership.ai/design/components/pricing-rows.json",
        "bundle": "https://viewership.ai/design/components/pricing-rows.bundle.txt"
      }
    },
    {
      "slug": "pricing-commission",
      "title": "Pricing Commission",
      "description": "One lead offer shown large with the other packages as a quiet list. For services that quote by appointment.",
      "kind": "section",
      "category": "Pricing",
      "source": "Viewership UI",
      "dependencies": [
        "button",
        "icon"
      ],
      "files": [
        "PricingCommission.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/pricing-commission",
        "markdown": "https://viewership.ai/design/components/pricing-commission.md",
        "json": "https://viewership.ai/design/components/pricing-commission.json",
        "bundle": "https://viewership.ai/design/components/pricing-commission.bundle.txt"
      }
    },
    {
      "slug": "pricing-toggle",
      "title": "Pricing Toggle",
      "description": "Plans with a monthly or yearly switch built from native radios and CSS. No JavaScript.",
      "kind": "section",
      "category": "Pricing",
      "source": "Viewership UI",
      "dependencies": [
        "button",
        "icon"
      ],
      "files": [
        "PricingToggle.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/pricing-toggle",
        "markdown": "https://viewership.ai/design/components/pricing-toggle.md",
        "json": "https://viewership.ai/design/components/pricing-toggle.json",
        "bundle": "https://viewership.ai/design/components/pricing-toggle.bundle.txt"
      }
    },
    {
      "slug": "faq-accordion",
      "title": "FAQ Accordion",
      "description": "A centred column of expandable question cards on native details, with FAQPage structured data.",
      "kind": "section",
      "category": "Conversion",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "FaqAccordion.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/faq-accordion",
        "markdown": "https://viewership.ai/design/components/faq-accordion.md",
        "json": "https://viewership.ai/design/components/faq-accordion.json",
        "bundle": "https://viewership.ai/design/components/faq-accordion.bundle.txt"
      }
    },
    {
      "slug": "faq-split",
      "title": "FAQ Split",
      "description": "Headline and a contact link pinned left, numbered ruled questions on the right. FAQPage data included.",
      "kind": "section",
      "category": "Conversion",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "FaqSplit.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/faq-split",
        "markdown": "https://viewership.ai/design/components/faq-split.md",
        "json": "https://viewership.ai/design/components/faq-split.json",
        "bundle": "https://viewership.ai/design/components/faq-split.bundle.txt"
      }
    },
    {
      "slug": "faq-open",
      "title": "FAQ Open",
      "description": "Every answer visible in a two-column grid on a tinted ground. For short answers people skim.",
      "kind": "section",
      "category": "Conversion",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "FaqOpen.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/faq-open",
        "markdown": "https://viewership.ai/design/components/faq-open.md",
        "json": "https://viewership.ai/design/components/faq-open.json",
        "bundle": "https://viewership.ai/design/components/faq-open.bundle.txt"
      }
    },
    {
      "slug": "cta-band",
      "title": "CTA Band",
      "description": "The closing call to action on a full-width accent band, centred.",
      "kind": "section",
      "category": "Conversion",
      "source": "Viewership UI",
      "dependencies": [
        "button"
      ],
      "files": [
        "CtaBand.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/cta-band",
        "markdown": "https://viewership.ai/design/components/cta-band.md",
        "json": "https://viewership.ai/design/components/cta-band.json",
        "bundle": "https://viewership.ai/design/components/cta-band.bundle.txt"
      }
    },
    {
      "slug": "cta-card",
      "title": "CTA Card",
      "description": "An inset card with copy beside the actions and an optional square image.",
      "kind": "section",
      "category": "Conversion",
      "source": "Viewership UI",
      "dependencies": [
        "button"
      ],
      "files": [
        "CtaCard.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/cta-card",
        "markdown": "https://viewership.ai/design/components/cta-card.md",
        "json": "https://viewership.ai/design/components/cta-card.json",
        "bundle": "https://viewership.ai/design/components/cta-card.bundle.txt"
      }
    },
    {
      "slug": "cta-ink",
      "title": "CTA Ink",
      "description": "A dark band with an oversized headline and the actions tucked bottom right.",
      "kind": "section",
      "category": "Conversion",
      "source": "Viewership UI",
      "dependencies": [
        "button"
      ],
      "files": [
        "CtaInk.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/cta-ink",
        "markdown": "https://viewership.ai/design/components/cta-ink.md",
        "json": "https://viewership.ai/design/components/cta-ink.json",
        "bundle": "https://viewership.ai/design/components/cta-ink.bundle.txt"
      }
    },
    {
      "slug": "newsletter",
      "title": "Newsletter",
      "description": "Email sign-up with a short pitch and privacy line. A plain HTML form you point at any provider.",
      "kind": "section",
      "category": "Conversion",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "Newsletter.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/newsletter",
        "markdown": "https://viewership.ai/design/components/newsletter.md",
        "json": "https://viewership.ai/design/components/newsletter.json",
        "bundle": "https://viewership.ai/design/components/newsletter.bundle.txt"
      }
    },
    {
      "slug": "header-bar",
      "title": "Header Bar",
      "description": "Brand left, links and a call to action right. Folds into a native details menu when narrow. No JavaScript.",
      "kind": "section",
      "category": "Site chrome",
      "source": "Viewership UI",
      "dependencies": [
        "button"
      ],
      "files": [
        "HeaderBar.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/header-bar",
        "markdown": "https://viewership.ai/design/components/header-bar.md",
        "json": "https://viewership.ai/design/components/header-bar.json",
        "bundle": "https://viewership.ai/design/components/header-bar.bundle.txt"
      }
    },
    {
      "slug": "icon",
      "title": "Icon",
      "description": "Twenty Lucide glyphs as inline SVG, sized and labelled through props.",
      "kind": "atom",
      "category": "Content",
      "source": "Lucide",
      "dependencies": [],
      "files": [
        "Icon.astro",
        "icons.ts"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/icon",
        "markdown": "https://viewership.ai/design/components/icon.md",
        "json": "https://viewership.ai/design/components/icon.json",
        "bundle": "https://viewership.ai/design/components/icon.bundle.txt"
      }
    },
    {
      "slug": "header-centered",
      "title": "Header Centered",
      "description": "Brand in the middle, links split either side, optional announcement strip. Folds into a details menu.",
      "kind": "section",
      "category": "Site chrome",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "HeaderCentered.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/header-centered",
        "markdown": "https://viewership.ai/design/components/header-centered.md",
        "json": "https://viewership.ai/design/components/header-centered.json",
        "bundle": "https://viewership.ai/design/components/header-centered.bundle.txt"
      }
    },
    {
      "slug": "footer-columns",
      "title": "Footer Columns",
      "description": "Brand and tagline beside link columns, with a ruled legal line beneath.",
      "kind": "section",
      "category": "Site chrome",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "FooterColumns.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/footer-columns",
        "markdown": "https://viewership.ai/design/components/footer-columns.md",
        "json": "https://viewership.ai/design/components/footer-columns.json",
        "bundle": "https://viewership.ai/design/components/footer-columns.bundle.txt"
      }
    },
    {
      "slug": "footer-minimal",
      "title": "Footer Minimal",
      "description": "One line with the brand, a few links and the legal note. For landing pages and small sites.",
      "kind": "section",
      "category": "Site chrome",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "FooterMinimal.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/footer-minimal",
        "markdown": "https://viewership.ai/design/components/footer-minimal.md",
        "json": "https://viewership.ai/design/components/footer-minimal.json",
        "bundle": "https://viewership.ai/design/components/footer-minimal.bundle.txt"
      }
    },
    {
      "slug": "footer-wordmark",
      "title": "Footer Wordmark",
      "description": "Link columns on a dark ground with the brand set across the full width beneath.",
      "kind": "section",
      "category": "Site chrome",
      "source": "Viewership UI",
      "dependencies": [],
      "files": [
        "FooterWordmark.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/footer-wordmark",
        "markdown": "https://viewership.ai/design/components/footer-wordmark.md",
        "json": "https://viewership.ai/design/components/footer-wordmark.json",
        "bundle": "https://viewership.ai/design/components/footer-wordmark.bundle.txt"
      }
    },
    {
      "slug": "loading-state",
      "title": "Loading State",
      "description": "Pixel-grid loader with a shimmering label and elapsed timer.",
      "kind": "component",
      "category": "Feedback",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "LoadingState.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/loading-state",
        "markdown": "https://viewership.ai/design/components/loading-state.md",
        "json": "https://viewership.ai/design/components/loading-state.json",
        "bundle": "https://viewership.ai/design/components/loading-state.bundle.txt"
      }
    },
    {
      "slug": "thinking-state",
      "title": "Thinking",
      "description": "Expandable agent trace for steps, reasoning, search or tool calls.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "ThinkingState.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/thinking-state",
        "markdown": "https://viewership.ai/design/components/thinking-state.md",
        "json": "https://viewership.ai/design/components/thinking-state.json",
        "bundle": "https://viewership.ai/design/components/thinking-state.bundle.txt"
      }
    },
    {
      "slug": "streaming-text",
      "title": "Streaming Text",
      "description": "Streamed answer with inline citations, sources, actions and follow-ups.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "StreamingText.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/streaming-text",
        "markdown": "https://viewership.ai/design/components/streaming-text.md",
        "json": "https://viewership.ai/design/components/streaming-text.json",
        "bundle": "https://viewership.ai/design/components/streaming-text.bundle.txt"
      }
    },
    {
      "slug": "approval-card",
      "title": "Approval Card",
      "description": "Questions an agent asks, one step at a time, before acting.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [
        "button",
        "glide-menu"
      ],
      "files": [
        "ApprovalCard.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/approval-card",
        "markdown": "https://viewership.ai/design/components/approval-card.md",
        "json": "https://viewership.ai/design/components/approval-card.json",
        "bundle": "https://viewership.ai/design/components/approval-card.bundle.txt"
      }
    },
    {
      "slug": "tool-chips",
      "title": "Tool Chips",
      "description": "Agent run as expandable tool-call rows, then file-diff chips.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "ToolChips.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/tool-chips",
        "markdown": "https://viewership.ai/design/components/tool-chips.md",
        "json": "https://viewership.ai/design/components/tool-chips.json",
        "bundle": "https://viewership.ai/design/components/tool-chips.bundle.txt"
      }
    },
    {
      "slug": "task-rows",
      "title": "Task Rows",
      "description": "Live agent task status as expandable capsules or a list.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "TaskRows.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/task-rows",
        "markdown": "https://viewership.ai/design/components/task-rows.md",
        "json": "https://viewership.ai/design/components/task-rows.json",
        "bundle": "https://viewership.ai/design/components/task-rows.bundle.txt"
      }
    },
    {
      "slug": "chat-composer",
      "title": "Chat",
      "description": "Tabbed chat panel with reasoning replies and a growing composer.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "ChatComposer.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/chat-composer",
        "markdown": "https://viewership.ai/design/components/chat-composer.md",
        "json": "https://viewership.ai/design/components/chat-composer.json",
        "bundle": "https://viewership.ai/design/components/chat-composer.bundle.txt"
      }
    },
    {
      "slug": "prompt-bar",
      "title": "Prompt Bar",
      "description": "Message composer with @ sources, / commands and a model picker.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [
        "glide-menu"
      ],
      "files": [
        "PromptBar.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/prompt-bar",
        "markdown": "https://viewership.ai/design/components/prompt-bar.md",
        "json": "https://viewership.ai/design/components/prompt-bar.json",
        "bundle": "https://viewership.ai/design/components/prompt-bar.bundle.txt"
      }
    },
    {
      "slug": "recommendation-card",
      "title": "Recommendation Card",
      "description": "Agent suggestion with a confidence meter and alternatives.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [
        "button",
        "entity-chip",
        "value-pill"
      ],
      "files": [
        "RecommendationCard.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/recommendation-card",
        "markdown": "https://viewership.ai/design/components/recommendation-card.md",
        "json": "https://viewership.ai/design/components/recommendation-card.json",
        "bundle": "https://viewership.ai/design/components/recommendation-card.bundle.txt"
      }
    },
    {
      "slug": "context-cards",
      "title": "Context Cards",
      "description": "Retrieved knowledge chunks with sources, entering in sequence.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "ContextCards.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/context-cards",
        "markdown": "https://viewership.ai/design/components/context-cards.md",
        "json": "https://viewership.ai/design/components/context-cards.json",
        "bundle": "https://viewership.ai/design/components/context-cards.bundle.txt"
      }
    },
    {
      "slug": "diff-table",
      "title": "Diff Table",
      "description": "AI-proposed table edits you include or skip, then apply.",
      "kind": "component",
      "category": "Data",
      "source": "Beautiful UI",
      "dependencies": [
        "button"
      ],
      "files": [
        "DiffTable.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/diff-table",
        "markdown": "https://viewership.ai/design/components/diff-table.md",
        "json": "https://viewership.ai/design/components/diff-table.json",
        "bundle": "https://viewership.ai/design/components/diff-table.bundle.txt"
      }
    },
    {
      "slug": "records-table",
      "title": "Records Table",
      "description": "CRM-style AI spreadsheet with tags, sorting and configurable AI columns.",
      "kind": "component",
      "category": "Data",
      "source": "Beautiful UI",
      "dependencies": [
        "glide-menu",
        "switch"
      ],
      "files": [
        "RecordsTable.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/records-table",
        "markdown": "https://viewership.ai/design/components/records-table.md",
        "json": "https://viewership.ai/design/components/records-table.json",
        "bundle": "https://viewership.ai/design/components/records-table.bundle.txt"
      }
    },
    {
      "slug": "filter-table",
      "title": "Filter Table",
      "description": "Status chips that filter a table in place.",
      "kind": "component",
      "category": "Data",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "FilterTable.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/filter-table",
        "markdown": "https://viewership.ai/design/components/filter-table.md",
        "json": "https://viewership.ai/design/components/filter-table.json",
        "bundle": "https://viewership.ai/design/components/filter-table.bundle.txt"
      }
    },
    {
      "slug": "sidebar-nav",
      "title": "Sidebar Nav",
      "description": "Collapsible workspace and chat navigation with searchable history.",
      "kind": "component",
      "category": "Navigation",
      "source": "Beautiful UI",
      "dependencies": [
        "glide-menu"
      ],
      "files": [
        "SidebarNav.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/sidebar-nav",
        "markdown": "https://viewership.ai/design/components/sidebar-nav.md",
        "json": "https://viewership.ai/design/components/sidebar-nav.json",
        "bundle": "https://viewership.ai/design/components/sidebar-nav.bundle.txt"
      }
    },
    {
      "slug": "search",
      "title": "Search",
      "description": "Command search with live filtering and an empty state.",
      "kind": "component",
      "category": "Navigation",
      "source": "Beautiful UI",
      "dependencies": [
        "glide-menu"
      ],
      "files": [
        "SearchList.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/search",
        "markdown": "https://viewership.ai/design/components/search.md",
        "json": "https://viewership.ai/design/components/search.json",
        "bundle": "https://viewership.ai/design/components/search.bundle.txt"
      }
    },
    {
      "slug": "flowchart",
      "title": "Flowchart",
      "description": "Workflow trigger and condition cards on a dotted canvas with draggable steps.",
      "kind": "component",
      "category": "Data",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "Flowchart.astro",
        "layout.ts"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/flowchart",
        "markdown": "https://viewership.ai/design/components/flowchart.md",
        "json": "https://viewership.ai/design/components/flowchart.json",
        "bundle": "https://viewership.ai/design/components/flowchart.bundle.txt"
      }
    },
    {
      "slug": "insight-cards",
      "title": "Insight Cards",
      "description": "Paged agent insights with scrubbable SVG charts and follow-up prompts.",
      "kind": "component",
      "category": "Data",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "InsightCards.astro",
        "insight-chart.ts"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/insight-cards",
        "markdown": "https://viewership.ai/design/components/insight-cards.md",
        "json": "https://viewership.ai/design/components/insight-cards.json",
        "bundle": "https://viewership.ai/design/components/insight-cards.bundle.txt"
      }
    },
    {
      "slug": "code-block",
      "title": "Code Block",
      "description": "Line-numbered code listing with copy, or a unified diff.",
      "kind": "component",
      "category": "Content",
      "source": "Beautiful UI",
      "dependencies": [],
      "files": [
        "CodeBlock.astro",
        "highlight.ts"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/code-block",
        "markdown": "https://viewership.ai/design/components/code-block.md",
        "json": "https://viewership.ai/design/components/code-block.json",
        "bundle": "https://viewership.ai/design/components/code-block.bundle.txt"
      }
    },
    {
      "slug": "fine-tune-card",
      "title": "Fine-tune Card",
      "description": "Compact inspector the agent adjusts, then hands back to you.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [
        "glide-menu"
      ],
      "files": [
        "FineTuneCard.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/fine-tune-card",
        "markdown": "https://viewership.ai/design/components/fine-tune-card.md",
        "json": "https://viewership.ai/design/components/fine-tune-card.json",
        "bundle": "https://viewership.ai/design/components/fine-tune-card.bundle.txt"
      }
    },
    {
      "slug": "selection-actions",
      "title": "Selection Actions",
      "description": "Select text and a floating toolbar rewrites it in place.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [
        "button",
        "shimmer",
        "stream-text"
      ],
      "files": [
        "SelectionActions.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/selection-actions",
        "markdown": "https://viewership.ai/design/components/selection-actions.md",
        "json": "https://viewership.ai/design/components/selection-actions.json",
        "bundle": "https://viewership.ai/design/components/selection-actions.bundle.txt"
      }
    },
    {
      "slug": "agent-screen",
      "title": "Agent Screen",
      "description": "An agent's live screen with an expandable viewer and recording.",
      "kind": "component",
      "category": "Agent",
      "source": "Beautiful UI",
      "dependencies": [
        "button"
      ],
      "files": [
        "AgentScreen.astro"
      ],
      "urls": {
        "page": "https://viewership.ai/design/components/agent-screen",
        "markdown": "https://viewership.ai/design/components/agent-screen.md",
        "json": "https://viewership.ai/design/components/agent-screen.json",
        "bundle": "https://viewership.ai/design/components/agent-screen.bundle.txt"
      }
    }
  ]
}