# Component inventory and design reuse map

Snapshot: **29 September 2026** · Source checkout: `frontend-v1`

This catalog maps **356 presentation implementation modules**, including **55 design-system modules**, to their original source and direct Storybook coverage. The machine-readable inventory records imports, local dependencies, public asset references, CSS modules and literal variant evidence. It is a design-source reference, not a promise that each file runs alone.

## Start here

| Design need | Source references | How to use |
| --- | --- | --- |
| Brand, color, type and primitive language | `packages/tokens/src/design-tokens.ts`; `apps/web/app/components/design-system/` | Use the current semantic tokens and Cade marks. Match shapes and proportions; keep body, display and numeric typography distinct. |
| Current homepage | `apps/web/app/landing/components/CadeLandingResponsiveShell.tsx`, `CadeLandingPageShell.tsx`, `CadeLandingMobileShell.tsx`; source stories under `landing/components/` | Preserve comic art, ticket hierarchy, market cards and responsive density while extending discovery to Memecoins, Sports and Stocks. Existing campaign labels are historical content. |
| Coin market detail, reusable for stocks | `apps/web/app/meme-madness/market/components/MemeMadnessMarketPageShell.tsx`; `apps/web/app/components/market/` and `market/duel-frame/` | Reuse the detail hierarchy, chart/ticket arrangement, result treatment and trade controls. Stocks do not require a separate visual market page in the brief. |
| Existing live sports language | `apps/web/app/sports/components/SoccerPitchViz.tsx`, `SoccerScoreboard.tsx`, `SoccerEventPanel.tsx`; `apps/web/app/cade-cup/components/CadeCupLiveMatchBoard.tsx` | Soccer/Cade Cup is the implemented reference for field art, ball motion, live event labels and scoring. |
| Baseball and football starting artwork | `apps/web/public/design-system/charts/sports-playfieldviz-diamond.svg`, `sports-playfieldviz-gridiron.svg`; `apps/web/public/design-system/sports/sports-matchscoreboard-baseball.svg`, `sports-matchscoreboard-football.svg` | These are existing SVG reference surfaces. They do not establish a working baseball/football animation system or 3D scene. |
| Silhouettes | `packages/shapes/src/index.ts`, `packages/shapes/src/api.ts`; `shape-inventory.json` | 23 percentage polygons plus a curved scoreboard SVG path and natural sizes. Preserve the geometry. |

## Current source authority

- Current identity is **Cade**. `CadeWordmark` and `CadeCMark` document the current mark explicitly. `Logo` and `brand-logo.svg` retain the legacy Pumpcade lettermark; its old component comment must not override the newer Cade source.
- `packages/tokens/src/design-tokens.ts` is the canonical campaign token source. Its `pcColor` palette is synchronized with `--pc-*` variables in `apps/web/app/globals.css`. `DESIGN.md` says its old color table is superseded. Do not import that older table as an additional equal-priority theme.
- The current source palette includes paper `#EFE9D8`, orange `#FFA800`, violet `#9652EF`, yellow `#FAF424`, yes/positive `#91BB4F` and no/negative `#EA2A46`. Semantic jobs remain separate even where values match.
- Hard offset shadows, clipped paper/ticket silhouettes and halftones coexist with dense trading UI. Not every current operational surface uses thick outlines or torn art. Reuse the relevant production composition rather than applying the most decorative primitive everywhere.
- `packages/core` contains utilities such as number/time formatting and storage helpers. It is not a component package. There is no tracked `packages/ui` package in this snapshot, despite an aspirational comment in the Storybook configuration.

## State and responsive review

The supplied JSON links direct companion/importing source stories and their named exports. **127 modules have a direct story match**; others can still appear inside composed page stories. A source story is not evidence that it was rendered or verified for this handoff. The top-level handoff guide records the shipped viewer and verification status.

For Figma, treat states as part of each component definition: default, hover/press, focus, disabled, selected, loading, empty, unavailable/error, closed/settled, long labels and responsive variants where the source supports them. Do not manufacture supported variants from a filename. Use `variantEvidence` in JSON and the source prop/story declarations.

The original Storybook registers 320, 360, 390, 430 and 480px phone/frame widths, 768 and 960px tablet widths, and 961, 1280 and 1440px desktop widths. In particular 768 and 960/961 are actual branch boundaries. Shape data uses a historic 1920px design width and a measured 478px mobile shape reference; these measurements are not interchangeable with viewport breakpoints.

## Sports: implemented reference versus work to design

The production field component is soccer-specific. Its props describe event history, latest event, projected ball coordinates, path, authoritative position, movement source, match state, hydrating/waiting state, field frame, floating prediction amounts and optional audio. Motion helpers and event effects live beside the component. These are useful references for pacing and overlay hierarchy; they are not a football/baseball event model.

The added `tooling/handoff.stories.tsx` uses the production soccer field and scoreboard with fictional teams, deterministic coordinates and manual ball advancement. It provides BallMovement, WaitingForMatch, HalfTime and Mobile source stories, labels the data as synthetic, uses no live sports service, and disables audio. Its original source is included for traceability; build verification is recorded by the main handoff process.

The original `apps/web/app/sports/page.stories.tsx` only documents no-live-match and failure states. Its comments explain that successful provider match data was not captured. It should not be mistaken for a populated live-sports design reference. Cade Cup and soccer components are the starting point instead.

The v2 design work should cover football start/end run position and event sequence; baseball pitch placement, hit trajectory and runner advances; field depth/perspective; scoreboard/event-feed hierarchy; and each sport’s loading, scheduled, live, break, final and unavailable presentation. Existing SVG field and scoreboard artwork is a starting asset, not proof that these behaviors or immersive 3D designs already exist.

## Asset and typography scope

- The token source explicitly says the Futura PT/Futura Condensed PT license does not travel. Those binaries are not needed to use the fallback design system. Display fallback is **Barlow Condensed**, body fallback is **Inter**, numeric/data face is **JetBrains Mono** with a monospace fallback. Font substitutions can change line breaks and require a visual pass.
- The original `globals.css` contains Futura and Colombo font declarations. A plain Storybook build can embed those binaries as hashed assets even when `public/fonts` is not separately copied. The handoff build must use sanitized font declarations, with licensed source fonts excluded.
- Source `.storybook/fonts.css` loads fallback fonts from Google-hosted URLs; that source alone is not an offline font package. Use the handoff’s locally included open font files and license notices for the delivered viewer.
- Sports audio assets are not required for wireframes or the field showcase. The source SFX README names Mixkit material and a separately user-supplied goal cheer. The handoff excludes SFX files; the sports showcase has audio disabled.
- Token logos, team identities, campaign portraits and third-party marks are visual references. Their presence in application assets is not a new grant of branding or redistribution rights. Avoid treating campaign portraits and obsolete tournament copy as v2 requirements.

## Storybook portability notes

The original `apps/storybook` is a Next/Vite Storybook 10.5 workspace app. Its unfiltered story glob includes internal/admin views, so it is not the external bundle boundary. The curated handoff viewer must select stories explicitly.

The original setup depends on React/Next, workspace packages, `@` aliased to `apps/web`, CSS modules, Tailwind globals, local public assets and a preview provider tree. Privy is aliased to local mocks. Route stories use MSW fixtures and offline API placeholders. Cross-origin asset requests are permitted by the original preview, so offline API behavior is not the same as offline images/fonts. Some stories import prototype/review modules and should not be represented as production behavior.

An already built static viewer is the easiest browsing option for designers. It must be served over localhost/HTTP, not opened with `file://`, for modules and service-worker-backed stories. Building or running arbitrary copied source requires the relevant dependencies and mocks; the component inventory alone does not supply that environment.

## Design-system modules

Names below are source module names; exported symbols can differ (`Button.tsx` exports `DsButton`, for example). The JSON records exported component/constant names and evidence precisely.

### Auth

| Module | Source | Direct story exports |
| --- | --- | --- |
| WalletOption | `apps/web/app/components/design-system/auth/WalletOption.tsx` | Providers; CustomLabelAndIcon; Disabled |

### Badges

| Module | Source | Direct story exports |
| --- | --- | --- |
| BoltBadge | `apps/web/app/components/design-system/badges/BoltBadge.tsx` | ProfileOrnament; RankStarAndActivityBolt; ChampionStarHex |
| CheckBadge | `apps/web/app/components/design-system/badges/CheckBadge.tsx` | Decorative; Labelled; OnACardCorner; CoinTones; Selected; RosterScale; RibbonAndSeal |
| CoinBadge | `apps/web/app/components/design-system/badges/CoinBadge.tsx` | CoinTones; Selected; RosterScale; RibbonAndSeal |
| KickerBanner | `apps/web/app/components/design-system/badges/KickerBanner.tsx` | Default; BattleHeroHost; LeaderboardHost; LongWordVersusShort; Phone320; Phone390; Phone430; Desktop |
| LiveTag | `apps/web/app/components/design-system/badges/LiveTag.tsx` | EmphasisLozenge; WordierState; Wide; Battle; OtherWord |
| RankRibbon | `apps/web/app/components/design-system/badges/RankRibbon.tsx` | CoinTones; Selected; RosterScale; RibbonAndSeal; Standing; PinnedToACard |
| StarBadge | `apps/web/app/components/design-system/badges/StarBadge.tsx` | ProfileOrnament; RankStarAndActivityBolt; ChampionStarHex |
| StatusBadge | `apps/web/app/components/design-system/badges/StatusBadge.tsx` | Lifecycle; CustomWording |

### Brand

| Module | Source | Direct story exports |
| --- | --- | --- |
| CadeBrandSheet | `apps/web/app/components/design-system/brand/CadeBrandSheet.tsx` | AllAssets; ProfilePicturesAndMark; Banners |
| CadeCMark | `apps/web/app/components/design-system/brand/CadeCMark.tsx` | Mark; Tones; ButtonWatermark |
| CadeWordmark | `apps/web/app/components/design-system/brand/CadeWordmark.tsx` | Ink; White; HalfScale |
| Logo | `apps/web/app/components/design-system/brand/Logo.tsx` | Wordmark; Mobile |

### Buttons

| Module | Source | Direct story exports |
| --- | --- | --- |
| Button | `apps/web/app/components/design-system/buttons/Button.tsx` | Tones; DisabledTones |
| CTASlat | `apps/web/app/components/design-system/buttons/CTASlat.tsx` | Primary; Sizes; Disabled; WagerPair; Small; CTASlats |
| CloseButton | `apps/web/app/components/design-system/buttons/CloseButton.tsx` | Default; Disabled |
| SlatButton | `apps/web/app/components/design-system/buttons/SlatButton.tsx` | WagerPair; Small; CTASlats |

### Chips

| Module | Source | Direct story exports |
| --- | --- | --- |
| BattleDurationChip | `apps/web/app/components/design-system/chips/BattleDurationChip.tsx` | Tones; Expiring; Zero |
| ChipRow | `apps/web/app/components/design-system/chips/ChipRow.tsx` | StakePresets; Overflowing |

### Data

| Module | Source | Direct story exports |
| --- | --- | --- |
| DataRibbon | `apps/web/app/components/design-system/data/DataRibbon.tsx` | Activity; Leaderboard; Stats; Summary; Compact |

### Feedback

| Module | Source | Direct story exports |
| --- | --- | --- |
| AlertStrip | `apps/web/app/components/design-system/feedback/AlertStrip.tsx` | Tones; Single |

### Foundations

| Module | Source | Direct story exports |
| --- | --- | --- |
| ColorTokenGrid | `apps/web/app/components/design-system/foundations/ColorTokenGrid.tsx` | Audit |
| ElevationLadder | `apps/web/app/components/design-system/foundations/ElevationLadder.tsx` | Ladder |
| GridOverlay | `apps/web/app/components/design-system/foundations/GridOverlay.tsx` | Desktop1440; Mobile480 |
| HalftoneTexture | `apps/web/app/components/design-system/foundations/HalftoneTexture.tsx` | BgDots; EdgeDots; Light; Violet |
| PoolStarburst | `apps/web/app/components/design-system/foundations/PoolStarburst.tsx` | Flat; Textured; HalfWidth |
| halftone | `apps/web/app/components/design-system/foundations/halftone.tsx` | OnAVioletPlate; AgainstUntreated; CssRendererFromTheSameTable |

### Icons

| Module | Source | Direct story exports |
| --- | --- | --- |
| ArcadeIcon | `apps/web/app/components/design-system/icons/ArcadeIcon.tsx` | Default; Sizes; InheritsColor; AllIcons; SearchFiltersTheSet |
| IconGrid | `apps/web/app/components/design-system/icons/IconGrid.tsx` | AllIcons; SearchFiltersTheSet |

### Indicators

| Module | Source | Direct story exports |
| --- | --- | --- |
| CoinMedallion | `apps/web/app/components/design-system/indicators/CoinMedallion.tsx` | Battle; AllVariants; DuelTones |
| Medallion | `apps/web/app/components/design-system/indicators/Medallion.tsx` | Heartbeat; Kicker |
| PlatelessCoinMedallion | `apps/web/app/components/design-system/indicators/PlatelessCoinMedallion.tsx` | No direct story found |
| TrendArrow | `apps/web/app/components/design-system/indicators/TrendArrow.tsx` | AllDirections; BesideARankCell |

### Inputs

| Module | Source | Direct story exports |
| --- | --- | --- |
| Field | `apps/web/app/components/design-system/inputs/Field.tsx` | Empty; Filled; Invalid; Disabled |
| SearchField | `apps/web/app/components/design-system/inputs/SearchField.tsx` | Empty; Filled; Disabled; Invalid |

### Layout

| Module | Source | Direct story exports |
| --- | --- | --- |
| ModalHost | `apps/web/app/components/design-system/layout/ModalHost.tsx` | Scrim |

### Lib

| Module | Source | Direct story exports |
| --- | --- | --- |
| Plate | `apps/web/app/components/design-system/lib/Plate.tsx` | No direct story found |

### Market

| Module | Source | Direct story exports |
| --- | --- | --- |
| MarketRow | `apps/web/app/components/design-system/market/MarketRow.tsx` | SeedColumn; Disabled |
| Masthead | `apps/web/app/components/design-system/market/Masthead.tsx` | Markets; WithCallout |
| ShareSplitBar | `apps/web/app/components/design-system/market/ShareSplitBar.tsx` | Default; NarrowSideStepsDown; DeadHeat; SeamClampedAtTheEdge; HalfwayRounding; NamedSides; NoSplitYet; SeamMoves; +3 more in JSON |

### Navigation

| Module | Source | Direct story exports |
| --- | --- | --- |
| HamburgerButton | `apps/web/app/components/design-system/navigation/HamburgerButton.tsx` | Menu; Renamed; Loading; Desktop; MobilePair; Disabled |
| NavItem | `apps/web/app/components/design-system/navigation/NavItem.tsx` | Default; CurrentPage; Disabled; Loading |
| SportsTab | `apps/web/app/components/design-system/navigation/SportsTab.tsx` | States |
| WalletButton | `apps/web/app/components/design-system/navigation/WalletButton.tsx` | Desktop; MobilePair; Disabled |

### Selects

| Module | Source | Direct story exports |
| --- | --- | --- |
| DropdownMenu | `apps/web/app/components/design-system/selects/DropdownMenu.tsx` | SortOptions; Loading; FilterToolbar; Disabled; OpenPanel |
| DropdownSelect | `apps/web/app/components/design-system/selects/DropdownSelect.tsx` | FilterToolbar; Disabled; OpenPanel |

### Share

| Module | Source | Direct story exports |
| --- | --- | --- |
| PnlCard | `apps/web/app/components/design-system/share/PnlCard.tsx` | No direct story found |

### Surfaces

| Module | Source | Direct story exports |
| --- | --- | --- |
| Burst | `apps/web/app/components/design-system/surfaces/Burst.tsx` | Default; Pool; Champion; Loading |
| LabelBanner | `apps/web/app/components/design-system/surfaces/LabelBanner.tsx` | Default; Loading |
| ModalPanel | `apps/web/app/components/design-system/surfaces/ModalPanel.tsx` | Scrim; Default; Loading |
| TornPanel | `apps/web/app/components/design-system/surfaces/TornPanel.tsx` | Default; Loading; RulesVariantTones |

### Typography

| Module | Source | Direct story exports |
| --- | --- | --- |
| DisplayTitle | `apps/web/app/components/design-system/typography/DisplayTitle.tsx` | Default; Pool; Champion; Loading; Md; Lg; Xl |
| GlyphCheck | `apps/web/app/components/design-system/typography/GlyphCheck.tsx` | Default; OnOutcomeGreen |
| SectionHeading | `apps/web/app/components/design-system/typography/SectionHeading.tsx` | Default; AsH2 |
| TypeScaleSpecimen | `apps/web/app/components/design-system/typography/TypeScaleSpecimen.tsx` | Desktop; Mobile |

## Core and composed UI

These modules expose the real composition and responsive rules around the primitive system. Lists are grouped by responsibility; use the JSON for imports, variant declarations and direct story names.

### Core UI / arcade

| Module | Source | Direct story exports |
| --- | --- | --- |
| ArcadeFitText | `apps/web/app/components/arcade/ArcadeFitText.tsx` | No direct story found |
| ArcadeMobileDrawerShell | `apps/web/app/components/arcade/ArcadeMobileDrawerShell.tsx` | No direct story found |
| ArcadePageBlackFrame | `apps/web/app/components/arcade/ArcadePageBlackFrame.tsx` | No direct story found |
| ArcadePageFrame | `apps/web/app/components/arcade/ArcadePageFrame.tsx` | No direct story found |
| ArcadeScrollArea | `apps/web/app/components/arcade/ArcadeScrollArea.tsx` | No direct story found |
| ArtButtonHitArea | `apps/web/app/components/arcade/ArtButtonHitArea.tsx` | No direct story found |
| AssetShell | `apps/web/app/components/arcade/AssetShell.tsx` | No direct story found |
| AutoFitRow | `apps/web/app/components/arcade/AutoFitRow.tsx` | No direct story found |
| AutoFitText | `apps/web/app/components/arcade/AutoFitText.tsx` | No direct story found |
| LoopingSnapSelector | `apps/web/app/components/arcade/LoopingSnapSelector.tsx` | No direct story found |

### Core UI / auth

| Module | Source | Direct story exports |
| --- | --- | --- |
| OAuthRecoveryDialog | `apps/web/app/components/auth/OAuthRecoveryDialog.tsx` | XLinkFailure; MobileXLinkFailure; GoogleLinkFailure; MobileGoogleLinkFailure |

### Core UI / banners

| Module | Source | Direct story exports |
| --- | --- | --- |
| CampaignBannerModal | `apps/web/app/components/banners/CampaignBannerModal.tsx` | Campaign; WithoutHero; WithCountdown; Critical; Phone; SmallPhone; PhoneWithoutHero; SmallPhoneWithoutHero; +6 more in JSON |
| GlobalBannerStrip | `apps/web/app/components/banners/GlobalBannerStrip.tsx` | Campaign; WithoutHero; WithCountdown; Critical; Phone; SmallPhone; PhoneWithoutHero; SmallPhoneWithoutHero; +48 more in JSON |
| GlobalBanners | `apps/web/app/components/banners/GlobalBanners.tsx` | No direct story found |
| MemeMadnessMaintenanceTakeover | `apps/web/app/components/banners/MemeMadnessMaintenanceTakeover.tsx` | SettlingStandings; WithBattleResult; LiveRoundDrawsNoHero; WithoutBattle; AwaitingBattleDrawsNoHero; StripAndTakeover |

### Core UI / brand

| Module | Source | Direct story exports |
| --- | --- | --- |
| BrandAsset | `apps/web/app/components/brand/BrandAsset.tsx` | No direct story found |
| BrandIcon | `apps/web/app/components/brand/BrandIcon.tsx` | No direct story found |
| CadeChip | `apps/web/app/components/brand/CadeChip.tsx` | No direct story found |
| Wordmark | `apps/web/app/components/brand/Wordmark.tsx` | No direct story found |

### Core UI / error-pages

| Module | Source | Direct story exports |
| --- | --- | --- |
| ArcadeErrorPage | `apps/web/app/components/error-pages/ArcadeErrorPage.tsx` | Default; Mobile |
| GlobalErrorSurface | `apps/web/app/components/error-pages/GlobalErrorSurface.tsx` | Default; Mobile |

### Core UI / header

| Module | Source | Direct story exports |
| --- | --- | --- |
| ArcadeHeaderChrome | `apps/web/app/components/header/ArcadeHeaderChrome.tsx` | Rest; KeyboardFocus; NoCurrentPage; LeaderboardCurrent; WideHeaderEdge; Comparison; MobileProposals; DesktopProposals; +8 more in JSON |
| CreditBalanceContext | `apps/web/app/components/header/CreditBalanceContext.tsx` | No direct story found |
| HeaderAccountMenu | `apps/web/app/components/header/HeaderAccountMenu.tsx` | PhoneSheet; PhoneSheetFunded; PhoneSheetCreditsHideClaims; PhoneSheetDismissal; PhoneSheetWidestPhone; DropdownAtMdBoundary; DesktopDropdown; DesktopCreditsHideClaims |
| HeaderAccountSheet | `apps/web/app/components/header/HeaderAccountSheet.tsx` | PhoneSheet; PhoneSheetFunded; PhoneSheetCreditsHideClaims; PhoneSheetDismissal; PhoneSheetWidestPhone; DropdownAtMdBoundary; DesktopDropdown; DesktopCreditsHideClaims |
| HeaderBrandMark | `apps/web/app/components/header/HeaderBrandMark.tsx` | Comparison; MobileProposals; DesktopProposals; Interactive; SplitLedgerTooltip; SplitLedgerDesktopModal; SplitLedgerMobileSheet; WithdrawalMaintenanceDesktop; +2 more in JSON |
| HeaderIdentityBadge | `apps/web/app/components/header/HeaderIdentityBadge.tsx` | No direct story found |
| HeaderModalStack | `apps/web/app/components/header/HeaderModalStack.tsx` | No direct story found |
| HeaderPrizeClaimControl | `apps/web/app/components/header/HeaderPrizeClaimControl.tsx` | No direct story found |
| HeaderPrizeWithdrawalModal | `apps/web/app/components/header/HeaderPrizeWithdrawalModal.tsx` | No direct story found |
| MobileAppBottomNav | `apps/web/app/components/header/MobileAppBottomNav.tsx` | Bar; MoreOnly; CentreAlignment; CentreInactive; CentreActive; ActiveNeighbourRing; MoreSheet; MoreSheetSignedOut; +3 more in JSON |
| MobileNavMoreSheet | `apps/web/app/components/header/MobileNavMoreSheet.tsx` | Bar; MoreOnly; CentreAlignment; CentreInactive; CentreActive; ActiveNeighbourRing; MoreSheet; MoreSheetSignedOut; +3 more in JSON |

### Core UI / home

| Module | Source | Direct story exports |
| --- | --- | --- |
| FAQAccordion | `apps/web/app/components/home/FAQAccordion.tsx` | No direct story found |
| FeatureCard | `apps/web/app/components/home/FeatureCard.tsx` | No direct story found |
| HeroSection | `apps/web/app/components/home/HeroSection.tsx` | No direct story found |

### Core UI / modal

| Module | Source | Direct story exports |
| --- | --- | --- |
| InterceptedModalBoundary | `apps/web/app/components/modal/InterceptedModalBoundary.tsx` | No direct story found |

### Core UI / onboarding

| Module | Source | Direct story exports |
| --- | --- | --- |
| FtueOverlay | `apps/web/app/components/onboarding/FtueOverlay.tsx` | No direct story found |
| FtuePrimitives | `apps/web/app/components/onboarding/FtuePrimitives.tsx` | No direct story found |
| HelpModal | `apps/web/app/components/onboarding/HelpModal.tsx` | No direct story found |
| OnboardingRouteGuard | `apps/web/app/components/onboarding/OnboardingRouteGuard.tsx` | No direct story found |
| OnboardingShell | `apps/web/app/components/onboarding/OnboardingShell.tsx` | No direct story found |

### Core UI / pnl-card

| Module | Source | Direct story exports |
| --- | --- | --- |
| PnlCardArtwork | `apps/web/app/components/pnl-card/PnlCardArtwork.tsx` | No direct story found |
| PnlShareActions | `apps/web/app/components/pnl-card/PnlShareActions.tsx` | No direct story found |
| visual-primitives | `apps/web/app/components/pnl-card/visual-primitives.tsx` | No direct story found |

### Core UI / positions-panel

| Module | Source | Direct story exports |
| --- | --- | --- |
| LazyPositionsPanels | `apps/web/app/components/positions-panel/LazyPositionsPanels.tsx` | No direct story found |
| LazyPositionsScreen | `apps/web/app/components/positions-panel/LazyPositionsScreen.tsx` | No direct story found |
| PositionDrawerTicket | `apps/web/app/components/positions-panel/PositionDrawerTicket.tsx` | No direct story found |
| PositionsPanelList | `apps/web/app/components/positions-panel/PositionsPanelList.tsx` | No direct story found |
| PositionsScreen | `apps/web/app/components/positions-panel/PositionsScreen.tsx` | ReadyToSettle; Empty |
| positionsPanelState | `apps/web/app/components/positions-panel/positionsPanelState.tsx` | No direct story found |

### Core UI / shared

| Module | Source | Direct story exports |
| --- | --- | --- |
| ActorAvatar | `apps/web/app/components/ActorAvatar.tsx` | Comparison; MobileProposals; DesktopProposals; Interactive; SplitLedgerTooltip; SplitLedgerDesktopModal; SplitLedgerMobileSheet; WithdrawalMaintenanceDesktop; +2 more in JSON |
| ActorLabel | `apps/web/app/components/ActorLabel.tsx` | No direct story found |
| AnimatedNumber | `apps/web/app/components/AnimatedNumber.tsx` | No direct story found |
| ArcadeShadowText | `apps/web/app/components/ArcadeShadowText.tsx` | No direct story found |
| DepositModal | `apps/web/app/components/DepositModal.tsx` | No direct story found |
| DepositPanel | `apps/web/app/components/DepositPanel.tsx` | No direct story found |
| Header | `apps/web/app/components/Header.tsx` | No direct story found |
| HeaderSearch | `apps/web/app/components/HeaderSearch.tsx` | No direct story found |
| LiveSourceChart | `apps/web/app/components/LiveSourceChart.tsx` | Default; WheelZoomFromTheGutter; ClampedAtBothEnds; PageScrollSurvivesTheChart; KeyboardZoom; ZoomedPastTheLiveValue; HotMarketPresentation; ZoomDisabled |
| MarketCreationLoader | `apps/web/app/components/MarketCreationLoader.tsx` | No direct story found |
| MobileMenuOverlay | `apps/web/app/components/MobileMenuOverlay.tsx` | No direct story found |
| NextEventLandingPage | `apps/web/app/components/NextEventLandingPage.tsx` | Default; ReducedMotion |
| OddsChart | `apps/web/app/components/OddsChart.tsx` | DesktopAndCompact; Compact390 |
| OnboardingGuide | `apps/web/app/components/OnboardingGuide.tsx` | No direct story found |
| PositionShareIcon | `apps/web/app/components/PositionShareIcon.tsx` | No direct story found |
| PositionsPanel | `apps/web/app/components/PositionsPanel.tsx` | No direct story found |
| TransactionToastViewport | `apps/web/app/components/TransactionToastViewport.tsx` | DesktopWithAction; PhoneWithAction; PhoneStacked; AutoDismissTimer; LandingUnavailable; LandingBattleOrVotesUnavailable; BattleCampaignUnavailable; BattleSessionExpired; +14 more in JSON |
| UsernameForm | `apps/web/app/components/UsernameForm.tsx` | No direct story found |
| WalletAccountMenuContent | `apps/web/app/components/WalletAccountMenuContent.tsx` | No direct story found |
| icons | `apps/web/app/components/icons.tsx` | No direct story found |

### Core UI / shell

| Module | Source | Direct story exports |
| --- | --- | --- |
| AppShell | `apps/web/app/components/shell/AppShell.tsx` | NoLiveMatches; RequestedMatchFeedUnavailable; LiveMatchListUnavailable |
| OfflineNotice | `apps/web/app/components/shell/OfflineNotice.tsx` | Online; Offline; OfflineAfterBlockedTap; Reconnected; LiveConnection |

### Core UI / site

| Module | Source | Direct story exports |
| --- | --- | --- |
| CadeFooterEmailSignup | `apps/web/app/components/site/CadeFooterEmailSignup.tsx` | Idle; PhoneFooterIdle; Empty; RejectsATypo; Submitting; Subscribed; SignedOut; AddressRejected; +4 more in JSON |
| CadeSiteFooter | `apps/web/app/components/site/CadeSiteFooter.tsx` | Default; Narrow; PhoneHiddenByDefault; HreflessEntry; HiddenOnDesktop; OneSignupOnThePhone |

### Core UI / ui

| Module | Source | Direct story exports |
| --- | --- | --- |
| ArcadeSectionHeading | `apps/web/app/components/ui/ArcadeSectionHeading.tsx` | No direct story found |
| ArcadeTornPanel | `apps/web/app/components/ui/ArcadeTornPanel.tsx` | No direct story found |
| AsyncStatus | `apps/web/app/components/ui/AsyncStatus.tsx` | CachedHistory; CachedHistoryWithoutTime; InvalidTournament; Phone |
| CadeFixedArtButton | `apps/web/app/components/ui/CadeFixedArtButton.tsx` | No direct story found |
| ImageWithFallback | `apps/web/app/components/ui/ImageWithFallback.tsx` | No direct story found |
| PumpArtifact | `apps/web/app/components/ui/PumpArtifact.tsx` | No direct story found |
| PumpButton | `apps/web/app/components/ui/PumpButton.tsx` | No direct story found |
| ResponsiveSheet | `apps/web/app/components/ui/ResponsiveSheet.tsx` | Comparison; MobileProposals; DesktopProposals; Interactive; SplitLedgerTooltip; SplitLedgerDesktopModal; SplitLedgerMobileSheet; WithdrawalMaintenanceDesktop; +5 more in JSON |
| SegmentedFilter | `apps/web/app/components/ui/SegmentedFilter.tsx` | No direct story found |

### Homepage / Cade landing

| Module | Source | Direct story exports |
| --- | --- | --- |
| CadeLandingAction | `apps/web/app/landing/components/CadeLandingAction.tsx` | No direct story found |
| CadeLandingAllStars | `apps/web/app/landing/components/CadeLandingAllStars.tsx` | No direct story found |
| CadeLandingArena | `apps/web/app/landing/components/CadeLandingArena.tsx` | No direct story found |
| CadeLandingCoinPlate | `apps/web/app/landing/components/CadeLandingCoinPlate.tsx` | No direct story found |
| CadeLandingFeed | `apps/web/app/landing/components/CadeLandingFeed.tsx` | Desktop; DesktopEmpty; Mobile; MobileEmpty |
| CadeLandingHero | `apps/web/app/landing/components/CadeLandingHero.tsx` | No direct story found |
| CadeLandingHeroSkeleton | `apps/web/app/landing/components/CadeLandingHeroSkeleton.tsx` | No direct story found |
| CadeLandingLiveTime | `apps/web/app/landing/components/CadeLandingLiveTime.tsx` | No direct story found |
| CadeLandingMaintenanceStatus | `apps/web/app/landing/components/CadeLandingMaintenanceStatus.tsx` | No direct story found |
| CadeLandingMobileAllStarBoard | `apps/web/app/landing/components/CadeLandingMobileAllStarBoard.tsx` | Populated |
| CadeLandingMobileAllStars | `apps/web/app/landing/components/CadeLandingMobileAllStars.tsx` | No direct story found |
| CadeLandingMobileArena | `apps/web/app/landing/components/CadeLandingMobileArena.tsx` | No direct story found |
| CadeLandingMobileFeed | `apps/web/app/landing/components/CadeLandingMobileFeed.tsx` | No direct story found |
| CadeLandingMobileHero | `apps/web/app/landing/components/CadeLandingMobileHero.tsx` | No direct story found |
| CadeLandingMobileShapes | `apps/web/app/landing/components/CadeLandingMobileShapes.tsx` | Mobile; SmallPhone; PlaceholdersSitOnTheRealGeometry; SkeletonEndsWithTheFrame; SkeletonAriaContract |
| CadeLandingMobileShell | `apps/web/app/landing/components/CadeLandingMobileShell.tsx` | Desktop; DesktopEmpty; Mobile; MobileEmpty; HeroAndAllStars; AboveTheFoldArtJoinsOnMint; MobileHeroAndAllStars; SmallPhone; +3 more in JSON |
| CadeLandingOddsChip | `apps/web/app/landing/components/CadeLandingOddsChip.tsx` | LongLatinVsCjk; CjkVsLongLatin; ShortNames |
| CadeLandingPageShell | `apps/web/app/landing/components/CadeLandingPageShell.tsx` | Desktop; DesktopEmpty; Mobile; MobileEmpty; HeroAndAllStars; AboveTheFoldArtJoinsOnMint; MobileHeroAndAllStars; LiveDemo; +27 more in JSON |
| CadeLandingResponsiveShell | `apps/web/app/landing/components/CadeLandingResponsiveShell.tsx` | LongLatinVsCjk; CjkVsLongLatin; ShortNames; Desktop; LiveDemo; SectionsAndBrand; AllStarSeats; AllStarSeatsClosed; +24 more in JSON |
| CadeLandingRuntime | `apps/web/app/landing/components/CadeLandingRuntime.tsx` | No direct story found |
| CadeLandingSectionsSkeleton | `apps/web/app/landing/components/CadeLandingSectionsSkeleton.tsx` | Desktop; PlaceholdersSitOnTheRealGeometry; SkeletonAriaContract; Mobile |
| CadeLandingShapes | `apps/web/app/landing/components/CadeLandingShapes.tsx` | Desktop; PlaceholdersSitOnTheRealGeometry; SkeletonAriaContract; Mobile |
| CadeLandingTicker | `apps/web/app/landing/components/CadeLandingTicker.tsx` | No direct story found |
| CadeLandingUpdatesSignup | `apps/web/app/landing/components/CadeLandingUpdatesSignup.tsx` | Default; HiddenOnDesktop; OneSignupOnThePhone |
| CadeLandingVoteMedallion | `apps/web/app/landing/components/CadeLandingVoteMedallion.tsx` | No direct story found |

### Homepage / campaign card references

| Module | Source | Direct story exports |
| --- | --- | --- |
| AllStarCardGhost | `apps/web/app/meme-madness/home/components/AllStarCardGhost.tsx` | No direct story found |
| AllStarMarketMetrics | `apps/web/app/meme-madness/home/components/AllStarMarketMetrics.tsx` | No direct story found |
| AllStarPredictionActivity | `apps/web/app/meme-madness/home/components/AllStarPredictionActivity.tsx` | No direct story found |
| MemeMadnessAllStarCard | `apps/web/app/meme-madness/home/components/MemeMadnessAllStarCard.tsx` | HeroAndAllStars; AboveTheFoldArtJoinsOnMint; MobileHeroAndAllStars; Desktop; LiveDemo; SectionsAndBrand; AllStarSeats; AllStarSeatsClosed; +31 more in JSON |
| MemeMadnessLandingAllStarsSection | `apps/web/app/meme-madness/home/components/MemeMadnessLandingAllStarsSection.tsx` | No direct story found |

### Homepage / discovery and market cards

| Module | Source | Direct story exports |
| --- | --- | --- |
| HomeAlwaysLiveTicker | `apps/web/app/components/markets/HomeAlwaysLiveTicker.tsx` | No direct story found |
| HomeArcadeStageShell | `apps/web/app/components/markets/HomeArcadeStageShell.tsx` | EntrySignIn; EntrySignup; GoogleDidNotOpen; StorageBlocked; SessionStorageDegraded; ExternalBrowserRecovery; EmailFallback; XLinkFailure; +28 more in JSON |
| HomeComicMarketCard | `apps/web/app/components/markets/HomeComicMarketCard.tsx` | No direct story found |
| HomeMarketRowShell | `apps/web/app/components/markets/HomeMarketRowShell.tsx` | No direct story found |
| HomeMarketRows | `apps/web/app/components/markets/HomeMarketRows.tsx` | No direct story found |
| HomeMarketsBootstrapSkeleton | `apps/web/app/components/markets/HomeMarketsBootstrapSkeleton.tsx` | EntrySignIn; EntrySignup; GoogleDidNotOpen; StorageBlocked; SessionStorageDegraded; ExternalBrowserRecovery; EmailFallback; XLinkFailure; +28 more in JSON |
| HomeMarketsStackContent | `apps/web/app/components/markets/HomeMarketsStackContent.tsx` | No direct story found |
| HotMarketPanel | `apps/web/app/components/markets/HotMarketPanel.tsx` | No direct story found |
| LazyMarketDiscoveryChrome | `apps/web/app/components/markets/LazyMarketDiscoveryChrome.tsx` | No direct story found |
| MarketCardRow | `apps/web/app/components/markets/MarketCardRow.tsx` | No direct story found |
| MarketDiscoveryControls | `apps/web/app/components/markets/MarketDiscoveryControls.tsx` | No direct story found |
| MarketStackGrid | `apps/web/app/components/markets/MarketStackGrid.tsx` | No direct story found |
| MarketsDiscoveryStackContent | `apps/web/app/components/markets/MarketsDiscoveryStackContent.tsx` | No direct story found |
| MarketsStackContentFrame | `apps/web/app/components/markets/MarketsStackContentFrame.tsx` | No direct story found |
| MarketsStackExperience | `apps/web/app/components/markets/MarketsStackExperience.tsx` | No direct story found |
| MemeMadnessHomeSlatePanel | `apps/web/app/components/markets/MemeMadnessHomeSlatePanel.tsx` | No direct story found |
| SoccerHotMarketPitch | `apps/web/app/components/markets/SoccerHotMarketPitch.tsx` | No direct story found |

### Market / battle references

| Module | Source | Direct story exports |
| --- | --- | --- |
| BattleCoinMedallion | `apps/web/app/meme-madness/battle/components/BattleCoinMedallion.tsx` | No direct story found |
| BattleHeroBadge | `apps/web/app/meme-madness/battle/components/BattleHeroBadge.tsx` | No direct story found |
| BattleHeroCharacter | `apps/web/app/meme-madness/battle/components/BattleHeroCharacter.tsx` | No direct story found |
| BattleInlinePredict | `apps/web/app/meme-madness/battle/components/BattleInlinePredict.tsx` | MarketDesktop; MarketMobile390; BattleDesktop; BattleMobile390; ReducedMotion; Default; StakeFromBalanceChip; CreditsReady; +44 more in JSON |
| BattleMarketPoolActivity | `apps/web/app/meme-madness/battle/components/BattleMarketPoolActivity.tsx` | No direct story found |
| BattleMobileDuel | `apps/web/app/meme-madness/battle/components/BattleMobileDuel.tsx` | No direct story found |
| BattlePickVerdict | `apps/web/app/meme-madness/battle/components/BattlePickVerdict.tsx` | No direct story found |
| BattlePicksTable | `apps/web/app/meme-madness/battle/components/BattlePicksTable.tsx` | Default; MidPagination; FilteredActive; PhoneAt390; Empty; SignedOut |
| BattleQuickPredictModal | `apps/web/app/meme-madness/battle/components/BattleQuickPredictModal.tsx` | HigherEntry; LowerEntry; Submitting; SuccessTicket; HigherEntryPhone; SuccessTicketPhone; ErrorState; BettingClosed; +29 more in JSON |
| MemeMadnessBattleHero | `apps/web/app/meme-madness/battle/components/MemeMadnessBattleHero.tsx` | No direct story found |
| MemeMadnessBattlePageRuntime | `apps/web/app/meme-madness/battle/components/MemeMadnessBattlePageRuntime.tsx` | ReceiptBeforeCanonicalHistory; FailedReceiptRetractsScopedArrow; ExpiredReceiptRetractsScopedArrow; WrongScopeTerminalKeepsReceiptArrow; NoStatusResponseKeepsArrowHidden; FutureReceiptWaitsForPaintedCoverage |
| MemeMadnessBattlePageShell | `apps/web/app/meme-madness/battle/components/MemeMadnessBattlePageShell.tsx` | Workbench; Phone; Battle; BattlePhone; NetLossReturn; NetLossReturnPhone; BattleNetLossReturn; BattleNetLossReturnPhone; +85 more in JSON |
| PicksBoard | `apps/web/app/meme-madness/battle/components/PicksBoard.tsx` | No direct story found |

### Market / coin detail

| Module | Source | Direct story exports |
| --- | --- | --- |
| MemeMadnessCoinEmptyPage | `apps/web/app/meme-madness/market/components/MemeMadnessCoinEmptyPage.tsx` | AllStar; WatchOnlyMotion; Battle; Unlisted; EmptyMetadata; EmptyMetadataAllStar; AllStarPhone; EmptyMetadataPhone |
| MemeMadnessCoinEmptyState | `apps/web/app/meme-madness/market/components/MemeMadnessCoinEmptyState.tsx` | AllStar; WatchOnlyMotion; Battle; Unlisted; EmptyMetadata; EmptyMetadataAllStar; AllStarPhone; EmptyMetadataPhone |
| MemeMadnessCoinWatchChart | `apps/web/app/meme-madness/market/components/MemeMadnessCoinWatchChart.tsx` | AllStar; WatchOnlyMotion; Battle; Unlisted; EmptyMetadata; EmptyMetadataAllStar; AllStarPhone; EmptyMetadataPhone; +5 more in JSON |
| MemeMadnessMarketPageShell | `apps/web/app/meme-madness/market/components/MemeMadnessMarketPageShell.tsx` | No direct story found |

### Market / discovery board

| Module | Source | Direct story exports |
| --- | --- | --- |
| MemeMadnessMarketsBoardSkeleton | `apps/web/app/meme-madness/markets/components/MemeMadnessMarketsBoardSkeleton.tsx` | Desktop; SeatsMatchTheCardBox; SkeletonAriaContract |
| MemeMadnessMarketsMobileList | `apps/web/app/meme-madness/markets/components/MemeMadnessMarketsMobileList.tsx` | No direct story found |
| MemeMadnessMarketsPageShell | `apps/web/app/meme-madness/markets/components/MemeMadnessMarketsPageShell.tsx` | LiveMarkets; MixedLiveAndClosedRounds; MobileMarkets; AwaitingLineup; Phone390; Phone390Awaiting; Phone390MissingSpread; BattleSettled; +1 more in JSON |
| MemeMadnessMarketsRuntime | `apps/web/app/meme-madness/markets/components/MemeMadnessMarketsRuntime.tsx` | No direct story found |

### Market / shared detail and trading

| Module | Source | Direct story exports |
| --- | --- | --- |
| ActivityFeed | `apps/web/app/components/market/ActivityFeed.tsx` | PendingToConfirmedAndFinalized; OtherParticipantUpdatesPublicState; CustomStatusSnapshotWithoutMarketWebSocket; FailedPrediction; ReorderedDuplicateAndFinality; OrphanCorrectionRemovesStaleConfirmation |
| ArcadeActivityFeed | `apps/web/app/components/market/ArcadeActivityFeed.tsx` | No direct story found |
| ArcadeHeroField | `apps/web/app/components/market/ArcadeHeroField.tsx` | No direct story found |
| ArcadeHotMarketStage | `apps/web/app/components/market/ArcadeHotMarketStage.tsx` | No direct story found |
| ArcadeMarketBaseline | `apps/web/app/components/market/ArcadeMarketBaseline.tsx` | No direct story found |
| ArcadeMarketInfoGrid | `apps/web/app/components/market/ArcadeMarketInfoGrid.tsx` | No direct story found |
| ArcadeMarketStage | `apps/web/app/components/market/ArcadeMarketStage.tsx` | No direct story found |
| ArcadeMarketStatsCluster | `apps/web/app/components/market/ArcadeMarketStatsCluster.tsx` | Plate; Burst; NotLive; Open; LazyMarketStartAndPriceRail; SealedCreditsStartBeforeFirstPrediction; SealedCreditsPhone; SealedCreditsThreeMinute; +47 more in JSON |
| ArcadeMarketTradeStage | `apps/web/app/components/market/ArcadeMarketTradeStage.tsx` | No direct story found |
| ArcadeOutcomeSlats | `apps/web/app/components/market/ArcadeOutcomeSlats.tsx` | No direct story found |
| ArcadePredictionOddsPanel | `apps/web/app/components/market/ArcadePredictionOddsPanel.tsx` | DesktopAndCompact; Compact390 |
| ArcadePredictionSideButtons | `apps/web/app/components/market/ArcadePredictionSideButtons.tsx` | No direct story found |
| ArcadeRulesPanel | `apps/web/app/components/market/ArcadeRulesPanel.tsx` | No direct story found |
| ArcadeSectionLabel | `apps/web/app/components/market/ArcadeSectionLabel.tsx` | No direct story found |
| ArcadeTradeAmountControls | `apps/web/app/components/market/ArcadeTradeAmountControls.tsx` | No direct story found |
| AssetPriceDisplay | `apps/web/app/components/market/AssetPriceDisplay.tsx` | No direct story found |
| ControlledMarketCutoffNotice | `apps/web/app/components/market/ControlledMarketCutoffNotice.tsx` | Running; PredictionsClosed; MissingResolutionTime; SyncingTime; Hidden; Phone |
| CountdownTimer | `apps/web/app/components/market/CountdownTimer.tsx` | Running; FinalMinute; FinalSeconds; WaitingForTime; Delayed; SettlementFailed; Resolved; AwaitingResolution; +1 more in JSON |
| EspnScoreboard | `apps/web/app/components/market/EspnScoreboard.tsx` | No direct story found |
| ExpandedMarketView | `apps/web/app/components/market/ExpandedMarketView.tsx` | No direct story found |
| GridCard | `apps/web/app/components/market/GridCard.tsx` | No direct story found |
| LazyQuickPredictModal | `apps/web/app/components/market/LazyQuickPredictModal.tsx` | No direct story found |
| LightweightPlot | `apps/web/app/components/market/LightweightPlot.tsx` | Width390; Width900 |
| LivePayoutTracker | `apps/web/app/components/market/LivePayoutTracker.tsx` | No direct story found |
| MarketBetTicker | `apps/web/app/components/market/MarketBetTicker.tsx` | Open; LazyMarketStartAndPriceRail; SealedCreditsStartBeforeFirstPrediction; SealedCreditsPhone; SealedCreditsThreeMinute; SealedCreditsFiveMinute; SealedCreditsZoomed; HistoricalMarketStarts; +44 more in JSON |
| MarketCasinoOutcomeCard | `apps/web/app/components/market/MarketCasinoOutcomeCard.tsx` | No direct story found |
| MarketDeltaBadge | `apps/web/app/components/market/MarketDeltaBadge.tsx` | No direct story found |
| MarketDetails | `apps/web/app/components/market/MarketDetails.tsx` | No direct story found |
| MarketLabel | `apps/web/app/components/market/MarketLabel.tsx` | No direct story found |
| MarketLiveChart | `apps/web/app/components/market/MarketLiveChart.tsx` | ContinuousMarketSequence; StaticHistoryCurveReview; LiveCadenceCurveReview; LiveCadenceCurveZoomedReview; AppendGeometryReview; ComparisonUnavailable; Stale; NotComparable; +94 more in JSON |
| MarketNetResult | `apps/web/app/components/market/MarketNetResult.tsx` | No direct story found |
| MarketOutcomeTransition | `apps/web/app/components/market/MarketOutcomeTransition.tsx` | Workbench; Phone; Battle; BattlePhone; NetLossReturn; NetLossReturnPhone; BattleNetLossReturn; BattleNetLossReturnPhone; +2 more in JSON |
| MarketPageSkeleton | `apps/web/app/components/market/MarketPageSkeleton.tsx` | No direct story found |
| MarketPayoutBurst | `apps/web/app/components/market/MarketPayoutBurst.tsx` | NetGain; NetLoss; BreakEven; BothSidesNetLoss; BothSidesNetGain; BothSidesFlat; Refunded; Phone |
| MarketRouteChrome | `apps/web/app/components/market/MarketRouteChrome.tsx` | No direct story found |
| MarketRules | `apps/web/app/components/market/MarketRules.tsx` | No direct story found |
| MarketSourceIcon | `apps/web/app/components/market/MarketSourceIcon.tsx` | No direct story found |
| MarketSummaryHeader | `apps/web/app/components/market/MarketSummaryHeader.tsx` | No direct story found |
| MarketTypeLabel | `apps/web/app/components/market/MarketTypeLabel.tsx` | No direct story found |
| MobileMarketCountdownText | `apps/web/app/components/market/MobileMarketCountdownText.tsx` | No direct story found |
| PokemonRecentPulls | `apps/web/app/components/market/PokemonRecentPulls.tsx` | No direct story found |
| PositionPreviewSummary | `apps/web/app/components/market/PositionPreviewSummary.tsx` | No direct story found |
| PredictionActionButtons | `apps/web/app/components/market/PredictionActionButtons.tsx` | Desktop; Mobile; PlacementDesktop; PlacementMobile |
| PriceComparisonDisplay | `apps/web/app/components/market/PriceComparisonDisplay.tsx` | No direct story found |
| QuickPredictControls | `apps/web/app/components/market/QuickPredictControls.tsx` | MarketDetailStateMatrix; BattleStateMatrix; MarketDetailSuccessReset; MarketDetailFailureRetention; CutoffDuringPending; RolloverStartsEmpty; BattleSuccessResetAndCoinIndependence; ConfirmationModalReview; +13 more in JSON |
| QuickPredictModal | `apps/web/app/components/market/QuickPredictModal.tsx` | DesktopDialog; MobileSheet; NoSide; DarkSheetSurface |
| ShortcutsPanel | `apps/web/app/components/market/ShortcutsPanel.tsx` | No direct story found |
| StatusFilter | `apps/web/app/components/market/StatusFilter.tsx` | No direct story found |
| TradeEconomicsSummary | `apps/web/app/components/market/TradeEconomicsSummary.tsx` | No direct story found |
| TradePredictionPreviewSummary | `apps/web/app/components/market/TradePredictionPreviewSummary.tsx` | No direct story found |
| TradeTicketInputFeedback | `apps/web/app/components/market/TradeTicketInputFeedback.tsx` | No direct story found |
| TradeTicketPreviewStack | `apps/web/app/components/market/TradeTicketPreviewStack.tsx` | No direct story found |
| TradingPanel | `apps/web/app/components/market/TradingPanel.tsx` | No direct story found |
| TradingViewLiveChart | `apps/web/app/components/market/TradingViewLiveChart.tsx` | Desktop; Live; Phone; BelowEntry; StateOpen; StateAboveEntry; StateBelowEntry; StateClosing; +47 more in JSON |
| UrgencySignals | `apps/web/app/components/market/UrgencySignals.tsx` | No direct story found |
| WinLossBanner | `apps/web/app/components/market/WinLossBanner.tsx` | No direct story found |
| DetailRow | `apps/web/app/components/market/details/DetailRow.tsx` | No direct story found |
| EventMarketDetails | `apps/web/app/components/market/details/EventMarketDetails.tsx` | No direct story found |
| MarketCapDetails | `apps/web/app/components/market/details/MarketCapDetails.tsx` | No direct story found |
| MarketDetailFacts | `apps/web/app/components/market/details/MarketDetailFacts.tsx` | No direct story found |
| MarketDetailSourceLink | `apps/web/app/components/market/details/MarketDetailSourceLink.tsx` | No direct story found |
| OddsDetails | `apps/web/app/components/market/details/OddsDetails.tsx` | No direct story found |
| PriceDetails | `apps/web/app/components/market/details/PriceDetails.tsx` | No direct story found |
| SourcePriceDetails | `apps/web/app/components/market/details/SourcePriceDetails.tsx` | No direct story found |
| MarketActivityPanel | `apps/web/app/components/market/duel-frame/MarketActivityPanel.tsx` | LoadingActivity; FailedActivity; StaleActivity; InconsistentActivity; PendingRowsHidden; Default; Streaming; PhoneAt390; +2 more in JSON |
| MarketDetailRail | `apps/web/app/components/market/duel-frame/MarketDetailRail.tsx` | FundedPool; EmptyPool; OneSidedPool; Loading; PendingToConfirmedAndFinalized; OtherParticipantUpdatesPublicState; CustomStatusSnapshotWithoutMarketWebSocket; FailedPrediction; +27 more in JSON |
| MarketDuelPanel | `apps/web/app/components/market/duel-frame/MarketDuelPanel.tsx` | Workbench; Phone; Battle; BattlePhone; NetLossReturn; NetLossReturnPhone; BattleNetLossReturn; BattleNetLossReturnPhone; +12 more in JSON |
| MarketOddsSparkline | `apps/web/app/components/market/duel-frame/MarketOddsSparkline.tsx` | Empty; Closed; Streaming; Resize390; AutoHeight; IdleTailAdvances; TargetChangeHoldsThenTransitions; LongerHistoryCannotRepaint; +4 more in JSON |
| MarketPredictTicket | `apps/web/app/components/market/duel-frame/MarketPredictTicket.tsx` | Desktop; Mobile; PlacementDesktop; PlacementMobile; MarketDesktop; MarketMobile390; BattleDesktop; BattleMobile390; +28 more in JSON |
| MarketSimilarMarkets | `apps/web/app/components/market/duel-frame/MarketSimilarMarkets.tsx` | No direct story found |
| MarketTermsPanel | `apps/web/app/components/market/duel-frame/MarketTermsPanel.tsx` | No direct story found |
| MarketTicketSheet | `apps/web/app/components/market/duel-frame/MarketTicketSheet.tsx` | No direct story found |
| duel-frame-kit | `apps/web/app/components/market/duel-frame/duel-frame-kit.tsx` | Desktop; Mobile; PlacementDesktop; PlacementMobile; Running; PredictionsClosedAt390; WaitingForTime; Delayed; +42 more in JSON |
| trading-view-chart-subcomponents | `apps/web/app/components/market/trading-view-chart-subcomponents.tsx` | No direct story found |

### Sports / Cade Cup composition

| Module | Source | Direct story exports |
| --- | --- | --- |
| CadeCupHowRows | `apps/web/app/cade-cup/components/CadeCupHowRows.tsx` | No direct story found |
| CadeCupInteractiveSection | `apps/web/app/cade-cup/components/CadeCupInteractiveSection.tsx` | No direct story found |
| CadeCupLiveMarketPreview | `apps/web/app/cade-cup/components/CadeCupLiveMarketPreview.tsx` | No direct story found |
| CadeCupLiveMatchBoard | `apps/web/app/cade-cup/components/CadeCupLiveMatchBoard.tsx` | No direct story found |
| CadeCupPageShell | `apps/web/app/cade-cup/components/CadeCupPageShell.tsx` | Default; SlateSyncing; SignedOut |
| CadeCupPanels | `apps/web/app/cade-cup/components/CadeCupPanels.tsx` | No direct story found |
| CadeCupReferralStatus | `apps/web/app/cade-cup/components/CadeCupReferralStatus.tsx` | No direct story found |
| CadeCupRegistrationCard | `apps/web/app/cade-cup/components/CadeCupRegistrationCard.tsx` | No direct story found |
| CadeCupRegistrationPageShell | `apps/web/app/cade-cup/components/CadeCupRegistrationPageShell.tsx` | Default; SignedOut; PartiallyCompleted; Registered; RegistrationUnavailable |
| CadeCupShadowText | `apps/web/app/cade-cup/components/CadeCupShadowText.tsx` | No direct story found |
| CadeCupUpcomingSlate | `apps/web/app/cade-cup/components/CadeCupUpcomingSlate.tsx` | No direct story found |

### Sports / soccer implementation

| Module | Source | Direct story exports |
| --- | --- | --- |
| RealSoccerExpandedMarketDetails | `apps/web/app/sports/components/RealSoccerExpandedMarketDetails.tsx` | No direct story found |
| SimulationSoccerExpandedMarketDetails | `apps/web/app/sports/components/SimulationSoccerExpandedMarketDetails.tsx` | No direct story found |
| SoccerBallMarkerIcon | `apps/web/app/sports/components/SoccerBallMarkerIcon.tsx` | No direct story found |
| SoccerEventLog | `apps/web/app/sports/components/SoccerEventLog.tsx` | No direct story found |
| SoccerEventPanel | `apps/web/app/sports/components/SoccerEventPanel.tsx` | No direct story found |
| SoccerFieldStatBars | `apps/web/app/sports/components/SoccerFieldStatBars.tsx` | No direct story found |
| SoccerLiveBadge | `apps/web/app/sports/components/SoccerLiveBadge.tsx` | No direct story found |
| SoccerMatchInfoPanel | `apps/web/app/sports/components/SoccerMatchInfoPanel.tsx` | No direct story found |
| SoccerPitchEffects | `apps/web/app/sports/components/SoccerPitchEffects.tsx` | No direct story found |
| SoccerPitchSoundEffects | `apps/web/app/sports/components/SoccerPitchSoundEffects.tsx` | No direct story found |
| SoccerPitchViz | `apps/web/app/sports/components/SoccerPitchViz.tsx` | No direct story found |
| SoccerPredictionMarkets | `apps/web/app/sports/components/SoccerPredictionMarkets.tsx` | No direct story found |
| SoccerScoreboard | `apps/web/app/sports/components/SoccerScoreboard.tsx` | No direct story found |
| SoccerSkeletonPrimitives | `apps/web/app/sports/components/SoccerSkeletonPrimitives.tsx` | No direct story found |
| SoccerTeamPlateIdentity | `apps/web/app/sports/components/SoccerTeamPlateIdentity.tsx` | No direct story found |
| SoccerYourActivityPanel | `apps/web/app/sports/components/SoccerYourActivityPanel.tsx` | No direct story found |
| SportsArcadeTradeTicket | `apps/web/app/sports/components/SportsArcadeTradeTicket.tsx` | No direct story found |
| SportsEffectsControls | `apps/web/app/sports/components/SportsEffectsControls.tsx` | No direct story found |
| SportsEffectsTestPanel | `apps/web/app/sports/components/SportsEffectsTestPanel.tsx` | No direct story found |
| SportsExpandedMarketDetails | `apps/web/app/sports/components/SportsExpandedMarketDetails.tsx` | No direct story found |
| SportsPageShell | `apps/web/app/sports/components/SportsPageShell.tsx` | NoLiveMatches; RequestedMatchFeedUnavailable; LiveMatchListUnavailable |
| SportsPrimitives | `apps/web/app/sports/components/SportsPrimitives.tsx` | No direct story found |
| SportsEffectsProvider | `apps/web/app/sports/effects/SportsEffectsProvider.tsx` | NoLiveMatches; RequestedMatchFeedUnavailable; LiveMatchListUnavailable |

### Supporting screens / activity

| Module | Source | Direct story exports |
| --- | --- | --- |
| ActivityArcadePage | `apps/web/app/activity/components/ActivityArcadePage.tsx` | No direct story found |
| ActivityArcadeRow | `apps/web/app/activity/components/ActivityArcadeRow.tsx` | No direct story found |
| ActivityArcadeRows | `apps/web/app/activity/components/ActivityArcadeRows.tsx` | No direct story found |
| ActivityFilterControls | `apps/web/app/activity/components/ActivityFilterControls.tsx` | No direct story found |

### Supporting screens / leaderboard

| Module | Source | Direct story exports |
| --- | --- | --- |
| AutoFitText | `apps/web/app/leaderboard/components/AutoFitText.tsx` | No direct story found |
| LeaderboardArcadeBoard | `apps/web/app/leaderboard/components/LeaderboardArcadeBoard.tsx` | Populated; BillionDollarPodiumVolume; PopulatedPhone; Revised; RevisedPhone; Partial; PartialPhone; Empty; +5 more in JSON |
| LeaderboardAwardRow | `apps/web/app/leaderboard/components/LeaderboardAwardRow.tsx` | No direct story found |
| LeaderboardBoard | `apps/web/app/leaderboard/components/LeaderboardBoard.tsx` | No direct story found |
| LeaderboardChrome | `apps/web/app/leaderboard/components/LeaderboardChrome.tsx` | No direct story found |
| LeaderboardReadNotice | `apps/web/app/leaderboard/components/LeaderboardReadNotice.tsx` | Unavailable; CadeCupUnavailable; Retrying; Phone |
| PodiumCards | `apps/web/app/leaderboard/components/PodiumCards.tsx` | No direct story found |
| PodiumPrimitives | `apps/web/app/leaderboard/components/PodiumPrimitives.tsx` | No direct story found |
| RankRows | `apps/web/app/leaderboard/components/RankRows.tsx` | No direct story found |
| ResultSelectionStamp | `apps/web/app/leaderboard/components/ResultSelectionStamp.tsx` | No direct story found |

### Supporting screens / profile

| Module | Source | Direct story exports |
| --- | --- | --- |
| AccountCenterRows | `apps/web/app/profile/components/AccountCenterRows.tsx` | No direct story found |
| AccountCenterSections | `apps/web/app/profile/components/AccountCenterSections.tsx` | OptedIn; OptedOut; NoEmailOnFile; Saving; MfaRequired; ReadyToExport; WalletUnavailable |
| AccountCenterShell | `apps/web/app/profile/components/AccountCenterShell.tsx` | No direct story found |
| ActivitySection | `apps/web/app/profile/components/ActivitySection.tsx` | No direct story found |
| AvatarSettings | `apps/web/app/profile/components/AvatarSettings.tsx` | No direct story found |
| DossierSelect | `apps/web/app/profile/components/DossierSelect.tsx` | No direct story found |
| DossierTickerSearch | `apps/web/app/profile/components/DossierTickerSearch.tsx` | No direct story found |
| OverallPnlExport | `apps/web/app/profile/components/OverallPnlExport.tsx` | No direct story found |
| PositionsSection | `apps/web/app/profile/components/PositionsSection.tsx` | No direct story found |
| ProfileActivityCardsOverlay | `apps/web/app/profile/components/ProfileActivityCardsOverlay.tsx` | No direct story found |
| ProfileActivityFeed | `apps/web/app/profile/components/ProfileActivityFeed.tsx` | No direct story found |
| ProfileArcadeShell | `apps/web/app/profile/components/ProfileArcadeShell.tsx` | No direct story found |
| ProfileBackButton | `apps/web/app/profile/components/ProfileBackButton.tsx` | No direct story found |
| ProfileDossier | `apps/web/app/profile/components/ProfileDossier.tsx` | No direct story found |
| ProfileEmailUpdatesSettings | `apps/web/app/profile/components/ProfileEmailUpdatesSettings.tsx` | No direct story found |
| ProfileHeader | `apps/web/app/profile/components/ProfileHeader.tsx` | No direct story found |
| ProfileLoadMoreButton | `apps/web/app/profile/components/ProfileLoadMoreButton.tsx` | No direct story found |
| ProfilePredictionCard | `apps/web/app/profile/components/ProfilePredictionCard.tsx` | No direct story found |
| ProfileReferralArcadeOverlay | `apps/web/app/profile/components/ProfileReferralArcadeOverlay.tsx` | No direct story found |
| ProfileSettingsSurface | `apps/web/app/profile/components/ProfileSettingsSurface.tsx` | No direct story found |
| ProfileTicketSkeleton | `apps/web/app/profile/components/ProfileTicketSkeleton.tsx` | No direct story found |
| ProfileUsernameSettingsModal | `apps/web/app/profile/components/ProfileUsernameSettingsModal.tsx` | No direct story found |
| PublicProfileRouteView | `apps/web/app/profile/components/PublicProfileRouteView.tsx` | No direct story found |
| ReferralSection | `apps/web/app/profile/components/ReferralSection.tsx` | No direct story found |
| UpdateEmailForm | `apps/web/app/profile/components/UpdateEmailForm.tsx` | No direct story found |
| UpdateEmailModal | `apps/web/app/profile/components/UpdateEmailModal.tsx` | EmailStep; LinkStep; CodeStep; SendFailed; SendingCode; CheckingCode |
| UsernameSettings | `apps/web/app/profile/components/UsernameSettings.tsx` | No direct story found |
| WinningsStub | `apps/web/app/profile/components/WinningsStub.tsx` | No direct story found |

## Inventory coverage and limitations

`component-inventory.json` contains all tracked implementation TSX modules in the selected design and presentation areas: design-system; ui; arcade; brand; header; shell; site; market; markets; home; pnl-card; positions-panel; modal; error-pages; onboarding; auth; banners; current landing components; sports components/effects; Cade Cup components; campaign homepage/coin/market/battle components; profile; leaderboard; and activity. Selected shared root UI modules are also included. Tests, Storybook files and backend/admin routes are excluded from the implementation count.

This is intentionally broader than the primitive component list so a designer can see how the kit becomes a real page. It is not a list of 356 ready-to-install independent React packages. Some entries are render helpers, context wrappers or compositions.

Direct imports and literal type-union evidence were extracted mechanically. Dynamic assets, indirect story coverage and all possible prop combinations are not exhaustively inferred. The original source remains authoritative. Source paths are relative to `frontend-v1`; consult the main bundle guide for where the selected reference source was copied.
