{
  "$schema": "https://edwson.com/eds/components.schema.json",
  "name": "Edwson Design System — component contracts",
  "version": "1.29.0",
  "generated": "derived from design-system-showcase.html: categories = ds-section ids minus the 8 overview/meta sections; registers = four-cell ds-logic blocks; frameworks = extracted from the anchor cells themselves, not from a hand-kept list. Regenerate and the numbers move with the page.",
  "counts": {
    "categories": 244,
    "domains": 9,
    "withDecisionRegister": 115,
    "citingNamedRegulation": 84,
    "frameworksReferenced": 20
  },
  "byDomain": {
    "components": 62,
    "financial": 41,
    "ai": 41,
    "patterns": 29,
    "compliance": 25,
    "b2b": 24,
    "aml": 10,
    "foundations": 7,
    "data": 5
  },
  "frameworks": [
    "ASIC",
    "Basel / BCBS",
    "CFPB",
    "CFTC",
    "Dodd-Frank",
    "EU AI Act",
    "FATF",
    "FCA",
    "FINRA",
    "Federal Reserve",
    "FinCEN",
    "GDPR",
    "ISDA",
    "ISO",
    "MiFID / MiFIR",
    "NACHA",
    "NIST",
    "SEC",
    "SOC 2",
    "WCAG"
  ],
  "honestScope": "Not every entry carries the full four-cell register — foundations, token pages and labs carry only the cells that apply to them. A colour ramp has no 'when not to'.",
  "mcp": {
    "server": "https://github.com/Edwson/eds-mcp",
    "note": "This file is the static contract. The runnable MCP server (23 tools, 65 contracts / 14 domains) serves the same shapes and can additionally scaffold, lint and refuse."
  },
  "components": [
    {
      "id": "tokens-code",
      "name": "Tokens · Code Export",
      "domain": "foundations",
      "url": "https://edwson.com/design-system-showcase.html#sec-tokens-code",
      "summary": "Every foundation token in three formats — CSS custom properties, JSON, and Tailwind config. Copy whatever your stack needs."
    },
    {
      "id": "color",
      "name": "Color",
      "domain": "foundations",
      "url": "https://edwson.com/design-system-showcase.html#sec-color",
      "summary": "The color system supports visual hierarchy, accessibility, and product differentiation. All tokens respond to light/dark theme toggle."
    },
    {
      "id": "typography",
      "name": "Typography",
      "domain": "foundations",
      "url": "https://edwson.com/design-system-showcase.html#sec-typography",
      "summary": "A clear type hierarchy optimized for financial data density. System fonts for performance; monospace for market data."
    },
    {
      "id": "spacing",
      "name": "Spacing",
      "domain": "foundations",
      "url": "https://edwson.com/design-system-showcase.html#sec-spacing",
      "summary": "A 4px base grid ensures consistent rhythm across all components. Spacing tokens scale from 4px to 96px."
    },
    {
      "id": "elevation",
      "name": "Elevation",
      "domain": "foundations",
      "url": "https://edwson.com/design-system-showcase.html#sec-elevation",
      "summary": "Elevation communicates hierarchy and interactivity. Shadows scale from subtle borders to prominent overlays."
    },
    {
      "id": "iconography",
      "name": "Iconography",
      "domain": "foundations",
      "url": "https://edwson.com/design-system-showcase.html#sec-iconography",
      "summary": "Tabler-based SVG icon system — 5 semantic categories, 3 density sizes, consistent 2px stroke weight. Every icon is inline SVG for full colour control and zero network requests. Click any icon to copy its SVG."
    },
    {
      "id": "button",
      "name": "Button",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-button",
      "summary": "Buttons trigger actions. Variants communicate importance hierarchy from primary CTA to ghost actions.",
      "register": {
        "whenToUse": "Use for actions — submit, confirm, execute — never for navigation (that is a link). One primary button per view region; the hierarchy is the decision, not the decoration.",
        "whenNotTo": "Do not use danger styling for emphasis — it is reserved for destructive or capital-committing actions, and those always pair with a confirm step. Avoid icon-only buttons for irreversible actions.",
        "a11yContract": "Loading state disables the control and sets aria-busy to prevent double-submit — in an order path, a double-click is a duplicate order. Focus ring is never removed, only restyled.",
        "anchor": "Destructive financial actions (close position, cancel all) require a typed or two-step confirm so the action leaves an auditable intent trail (SEC 17a-4 discipline).",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "input",
      "name": "Input",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-input",
      "summary": "Form inputs for financial data entry. States communicate validation status for compliance workflows.",
      "register": {
        "whenToUse": "Use for free-form single-line entry. Labels are always visible — placeholder-as-label fails the moment a user starts typing, and screen readers lose context.",
        "whenNotTo": "Do not validate on submit only. Financial forms validate pre-flight, field by field, because a round-trip costs latency the user can feel (the FIX order-entry budget is 8–12ms).",
        "a11yContract": "Errors bind via aria-describedby and never rely on colour alone. Numeric fields use inputmode + tabular-nums so digits align in review.",
        "anchor": "Fields collecting personal data show why beside the field — in-context citation reduced KYC support tickets and lifted completion in the EDD studies.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "toggle",
      "name": "Toggle & Checkbox",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-toggle",
      "summary": "Selection controls for settings and multi-choice forms.",
      "register": {
        "whenToUse": "Toggle is for instant-effect settings only — the state change IS the action. Checkbox is for declarations collected now, applied on submit.",
        "whenNotTo": "Never use a toggle where a submit follows — the user cannot tell whether the change took effect. Never pre-tick consent checkboxes.",
        "a11yContract": "Both controls keep a 44px touch target regardless of visual size; state is announced via aria-checked, not colour.",
        "anchor": "Consent to data processing or marketing must be an explicit affirmative act — unticked by default, granular per purpose, with withdrawal on the same surface (GDPR / MiFID client-communication rules).",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "badge",
      "name": "Badge & Tag",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-badge",
      "summary": "Status indicators and categorical labels for financial workflows."
    },
    {
      "id": "card",
      "name": "Card",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-card",
      "summary": "Cards group related content and data. Hover states signal interactivity."
    },
    {
      "id": "alert",
      "name": "Alert & Toast",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-alert",
      "summary": "Feedback patterns for system messages, confirmations, and compliance notifications.",
      "register": {
        "whenToUse": "Severity maps to consequence, not excitement: info (no action), warning (action may be needed), critical (action required now). The ladder is fixed system-wide so colour carries meaning.",
        "whenNotTo": "Toasts auto-dismiss, so they never carry compliance-relevant or loss-relevant information — anything a user might need to prove they saw must persist until acknowledged.",
        "a11yContract": "Alerts announce via aria-live (polite for info, assertive for critical). Icons + colour dual-encode severity for colour-blind users.",
        "anchor": "Margin calls and trade rejections render as persistent banners with timestamps, never toasts — if it can end up in a dispute, it stays on screen and in the log.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "table",
      "name": "Data Table",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-table",
      "summary": "Sortable data tables for portfolio holdings, transaction history, and compliance logs.",
      "register": {
        "whenToUse": "The default register for financial data. Numbers right-align in tabular-nums; text left-aligns; headers are real th elements with scope.",
        "whenNotTo": "Do not centre numeric columns or truncate identifiers (order IDs, ISINs) — truncation is how a wrong-instrument error survives review.",
        "a11yContract": "Sticky headers above 20 rows; sort state is visible and announced; density is a user setting, not a designer preference.",
        "anchor": "Columns that feed compliance review (timestamps, venue, status) are never hideable — configurability stops where the audit requirement starts.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "progress",
      "name": "Progress",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-progress",
      "summary": "Progress indicators for onboarding flows, file uploads, and multi-step compliance processes."
    },
    {
      "id": "modal",
      "name": "Modal & Dialog",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-modal",
      "summary": "Modals for confirmations, signatures, and compliance acknowledgments. Focus-trapped with keyboard navigation (WCAG 2.1 AA).",
      "register": {
        "whenToUse": "Interrupt only when the user must decide before anything else can happen: irreversible actions, capital commitment, regulatory acknowledgement.",
        "whenNotTo": "Do not use modals for repeat disclosures — the 18-month RG 268 study showed dismissal time decays from 18s to 0.6s as muscle memory forms. Repeat-exposure content belongs inline at the decision point.",
        "a11yContract": "Focus is trapped, Escape closes (unless legally gated), focus returns to the trigger on close. Exactly one primary action; the safe option is never visually dominant by accident.",
        "anchor": "When a modal carries a regulatory acknowledgement, the render event and dismissal are logged with timestamps — the audit trail is the deliverable, not the pixels.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "tooltip",
      "name": "Tooltip",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-tooltip",
      "summary": "Contextual hints for data points, regulatory terms, and abbreviations. Accessible via keyboard focus."
    },
    {
      "id": "avatar",
      "name": "Avatar",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-avatar",
      "summary": "User identity indicators for RM profiles, client accounts, and team displays."
    },
    {
      "id": "skeleton",
      "name": "Skeleton",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-skeleton",
      "summary": "Loading placeholders that maintain layout structure while data fetches. Reduces perceived latency."
    },
    {
      "id": "disclosure",
      "name": "Disclosure",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-disclosure",
      "summary": "Regulatory disclosure patterns for SEC, FINRA, and ASIC requirements. Expandable by default to meet visibility mandates while preserving UI cleanliness.",
      "register": {
        "whenToUse": "Disclosure is a render event, not a paragraph: jurisdiction-routed copy computed from client × product × licence, logged with a timestamp when it enters the viewport.",
        "whenNotTo": "Never reuse one global disclosure string — the RG 268 engagement standard is jurisdiction-specific, and generic text fails it even when displayed correctly.",
        "a11yContract": "Contextual inline at the decision point beat modal and header-strip patterns across 18 months: 1.6s sustained read, 0.4% abandonment, and it survived two regulation revisions without redesign.",
        "anchor": "The backend event log is the deliverable — when the regulator asks 'was it shown, when, in what form', Legal answers from the log, not from a screenshot.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "consent",
      "name": "Consent Flow",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-consent",
      "summary": "Stepped consent patterns for GDPR, COPPA, and financial services agreements. Consent is recorded with timestamp for audit trail compliance.",
      "register": {
        "whenToUse": "Granular, per-purpose consent collected at the moment the purpose becomes real — not a wall of checkboxes at signup for things that may never happen.",
        "whenNotTo": "Pre-ticked boxes and bundled consent are design debt that becomes a finding. Decline is always as reachable as accept.",
        "a11yContract": "The consent record stores what was shown (copy version), when, and the affirmative act — versioned copy because the text at the time of consent is what was consented to.",
        "anchor": "Withdrawal lives on the same surface as the grant (GDPR Art. 7(3) symmetry) — burying revocation in support email is the anti-pattern this component exists to prevent.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "kyc",
      "name": "KYC Stepper",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-kyc",
      "summary": "Multi-step Know Your Customer onboarding. Progressive disclosure collects all AML/FINRA-required information across 5 validated steps — Identity, Source of Wealth, Entity Structure, Investment Policy, and Compliance Review.",
      "register": {
        "whenToUse": "Progressive disclosure, one question per screen — the 'dentist model': never show the whole instrument tray at once. Completion doubled (27% → 55%, GA4) when the wall became a corridor.",
        "whenNotTo": "Do not front-load document upload — sequence identity → residency → income → source of funds so each ask is anchored by the trust built before it.",
        "a11yContract": "Save-and-resume via 30-day magic link, because UHNW clients need days to locate source-of-wealth documents. Abandonment is mostly a pause, not a refusal — unless you make resuming impossible.",
        "anchor": "Every intrusive question cites its regulation beside the field (FinCEN CDD 31 CFR § 1010.230, FATF Rec 10) — sophisticated clients respond to legal framing, not friendly copy.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "risk",
      "name": "Risk Warning",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-risk",
      "summary": "Contextual risk indicators for leveraged products, margin calls, and position sizing. ASIC and ESMA mandated visibility at point of action."
    },
    {
      "id": "suitability",
      "name": "Suitability",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-suitability",
      "summary": "FINRA Rule 2111 suitability assessment components. Captures risk tolerance, investment horizon, and financial situation for compliance-grade audit trails.",
      "register": {
        "whenToUse": "The FINRA 2111 / Reg BI gate rendered as product UI: the questionnaire scores into a profile, and the profile gates product access — visibly, with reasons.",
        "whenNotTo": "Suitability is not advisory copy beside a buy button. If the gate can be scrolled past, it is not a gate — it is decoration that a plaintiff's lawyer will screenshot.",
        "a11yContract": "A failed gate routes to education and a cooling-off path, never to a retry-until-pass loop — retake limits are part of the control.",
        "anchor": "Answers, score, and gate outcome are stored against the copy version shown — the suitability decision must be reconstructable years later.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "session",
      "name": "Session Timeout",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-session",
      "summary": "Session management for authenticated financial portals. Preserves in-progress state and provides graceful re-authentication (WCAG 2.2.1 Timing Adjustable)."
    },
    {
      "id": "accordion",
      "name": "Accordion",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-accordion",
      "summary": "Expandable content panels for FAQ, regulatory disclosures, and progressive information architecture."
    },
    {
      "id": "tabs",
      "name": "Tabs",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-tabs",
      "summary": "Content segmentation for multi-view interfaces. Active tab maintains keyboard focus for WCAG compliance."
    },
    {
      "id": "breadcrumb",
      "name": "Breadcrumb",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-breadcrumb",
      "summary": "Navigation trail for deep hierarchies. Provides context within multi-level information architecture."
    },
    {
      "id": "pagination",
      "name": "Pagination",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-pagination",
      "summary": "Page navigation for transaction logs, audit trails, and large data sets."
    },
    {
      "id": "divider",
      "name": "Divider",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-divider",
      "summary": "Visual separators for content sections. Horizontal and labeled variants."
    },
    {
      "id": "dropdown",
      "name": "Dropdown",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-dropdown",
      "summary": "Action menus and selection lists with keyboard navigation support."
    },
    {
      "id": "spinner",
      "name": "Spinner",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-spinner",
      "summary": "Loading indicators for asynchronous operations. Sizes scale with density mode."
    },
    {
      "id": "banner",
      "name": "Banner",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-banner",
      "summary": "Page-level announcements for system maintenance, regulatory updates, and critical alerts."
    },
    {
      "id": "emptystate",
      "name": "Empty State",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-emptystate",
      "summary": "Placeholder content when data is unavailable. Provides context and actionable next steps."
    },
    {
      "id": "drawer",
      "name": "Drawer",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-drawer",
      "summary": "Slide-out panels for detail views, filters, and secondary content without leaving context."
    },
    {
      "id": "fileupload",
      "name": "File Upload",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-fileupload",
      "summary": "Document upload for KYC verification, tax forms, and compliance documentation."
    },
    {
      "id": "textarea",
      "name": "Textarea",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-textarea",
      "summary": "Multi-line text input for notes, descriptions, and compliance remarks."
    },
    {
      "id": "chip",
      "name": "Chip Select",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-chip",
      "summary": "Multi-select chips for filtering, tagging, and categorical selection."
    },
    {
      "id": "timeline",
      "name": "Timeline",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-timeline",
      "summary": "Chronological event display for audit trails, trade history, and compliance logs."
    },
    {
      "id": "stat",
      "name": "Stat / Metric",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-stat",
      "summary": "Key performance indicators and summary metrics for dashboards and reports."
    },
    {
      "id": "keyvalue",
      "name": "Key-Value",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-keyvalue",
      "summary": "Structured data display for account details, transaction records, and compliance metadata."
    },
    {
      "id": "link",
      "name": "Link",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-link",
      "summary": "Navigational links with accessible focus indicators. External links include visual indicator per WCAG."
    },
    {
      "id": "stepindicator",
      "name": "Step Indicator",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-stepindicator",
      "summary": "Compact horizontal step tracker for multi-step flows."
    },
    {
      "id": "pricedisplay",
      "name": "Price Display",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-pricedisplay",
      "summary": "Real-time price rendering with directional indicators, color coding, and flash-on-change animation.",
      "register": {
        "whenToUse": "The atomic unit of every trading surface. Tabular numerals, fixed decimal precision per instrument convention, tick direction encoded by colour AND glyph.",
        "whenNotTo": "Never animate price changes with movement — a blinking or sliding price draws attention disproportionate to its information. Flash the background, not the position.",
        "a11yContract": "Colour-only tick direction fails colour-blind users on the highest-stakes signal on screen — the arrow glyph is non-negotiable.",
        "anchor": "A stale quote is a risk event: past the staleness threshold the price greys out and timestamps itself rather than silently showing the last print.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "orderentry",
      "name": "Order Entry",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-orderentry",
      "summary": "Trade execution form with buy/sell toggle, order type selection, and pre-trade risk check.",
      "register": {
        "whenToUse": "The highest-stakes form in the system. Validation is pre-flight and continuous — by the time SEND activates, rejection should be near-impossible.",
        "whenNotTo": "No confirm modal on the hot path — it adds 300–500ms of human dismissal and trains click-through. Use reversible execution instead: one-click send, a visible 3-second cancel window on the blotter.",
        "a11yContract": "Keyboard-first: every field reachable without a mouse, shortcuts for size presets, Enter is never bound to SEND without explicit arming.",
        "anchor": "UI state is driven by the FIX ExecutionReport (35=8) state machine — what the venue says happened, not what the click intended. That distinction is the audit trail.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "positioncard",
      "name": "Position Card",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-positioncard",
      "summary": "Active position display with real-time P&L, entry price, and allocation weight."
    },
    {
      "id": "tradeticket",
      "name": "Trade Ticket",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-tradeticket",
      "summary": "Confirmation receipt for executed trades with compliance-grade audit metadata.",
      "register": {
        "whenToUse": "The decision surface: instrument, size, direction, and consequence in one frame. Margin impact and worst-case loss render before submit, not after.",
        "whenNotTo": "Do not collapse the ticket into a one-tap buy button for leveraged products — friction at the point of leverage is a regulatory feature, not a UX failure.",
        "a11yContract": "Size steppers respect lot conventions; switching direction re-runs validation; everything visible at 360px width because the mobile ticket is the real ticket.",
        "anchor": "Suitability gating (FINRA 2111 / ASIC RG 227): if the client profile fails the product gate, the ticket routes to education — it never just hides the button.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "pnl",
      "name": "P&L Display",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-pnl",
      "summary": "Profit and loss rendering with directional formatting, color coding, and arrow indicators."
    },
    {
      "id": "watchlist",
      "name": "Watchlist Row",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-watchlist",
      "summary": "Compact instrument display for watchlists with sparkline area, last price, and change."
    },
    {
      "id": "minichart",
      "name": "Sparkline",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-minichart",
      "summary": "Inline mini-charts for trend visualization within table rows, cards, and compact displays."
    },
    {
      "id": "depthchart",
      "name": "Depth Indicator",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-depthchart",
      "summary": "Order book depth visualization showing bid/ask volume at each price level."
    },
    {
      "id": "heatmap",
      "name": "Heatmap Cell",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-heatmap",
      "summary": "Color-intensity cells for market sector performance, correlation matrices, and risk grids."
    },
    {
      "id": "orderbook",
      "name": "Order Book",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-orderbook",
      "summary": "Full bid/ask price ladder with quantity, cumulative depth bars, and spread highlight. Designed for HD-density trading terminals.",
      "register": {
        "whenToUse": "Level-2 depth where bar length encodes size and colour intensity encodes proximity to touch — the book's shape is readable before any number is.",
        "whenNotTo": "Do not smooth or animate book updates for elegance — a book that moves prettily misrepresents microstructure. Updates snap; only the aggression highlight pulses.",
        "a11yContract": "Aggressor prints flash on the tape side, not the resting side — direction of initiative is the signal traders actually read.",
        "anchor": "Time priority is honest to the feed's granularity: if the feed is conflated, the UI says so rather than implying microsecond precision it does not have.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "instrumentheader",
      "name": "Instrument Header",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-instrumentheader",
      "summary": "Full instrument identity strip — symbol, name, exchange, asset class, currency, and live session status. Used at the top of charts and order panels."
    },
    {
      "id": "leveragesel",
      "name": "Leverage Selector",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-leveragesel",
      "summary": "Interactive leverage input with risk-level color gradient and maximum allowed indicator. Risk disclosure updates dynamically per ASIC/ESMA regulatory constraints.",
      "register": {
        "whenToUse": "Leverage selection renders the jurisdiction cap as a hard boundary — the selector physically cannot exceed the client's regulatory maximum.",
        "whenNotTo": "Do not present leverage as a neutral slider to the max — the warning band begins at the threshold where margin-call probability inflects, not at the legal cap.",
        "a11yContract": "Each step shows the margin requirement consequence live; the control is a disclosure surface, not just an input.",
        "anchor": "Caps are config from the jurisdiction matrix (ASIC RG 227, ESMA intervention measures) — when a regulator moves the cap, the token updates, no rebuild.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "marginpanel",
      "name": "Margin Panel",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-marginpanel",
      "summary": "Account margin overview with used/available balance, margin level percentage, and warning thresholds. Color shifts to amber at 150% margin level and red at 110% (margin call zone).",
      "register": {
        "whenToUse": "Margin utilisation with three fixed thresholds (70 / 85 / 95%) that colour the entire panel context, plus projected utilisation on order hover — consequence before commitment.",
        "whenNotTo": "Never hide the liquidation price behind a tap or tooltip — it is the single number a leveraged client must always see.",
        "a11yContract": "The panel is the same component on desktop dock and mobile sheet; thresholds and copy come from tokens, not per-platform forks.",
        "anchor": "Margin-call states persist with timestamps and are never auto-dismissed (dispute evidence). The 95% state pre-arms the deposit flow.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "orderstatus",
      "name": "Order Status",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-orderstatus",
      "summary": "State badges and inline status rows for the full order lifecycle. Each state maps to a deterministic UI color and icon to support rapid scanning in high-volume queues.",
      "register": {
        "whenToUse": "Maps FIX Tag 39 OrdStatus to user language: New, Partially Filled, Filled, Cancelled, Rejected — each with a distinct visual register.",
        "whenNotTo": "Never collapse partial fills into a binary done/not-done — a PM managing a working order needs filled quantity, remaining, and average price at a glance.",
        "a11yContract": "Status transitions announce via aria-live; a rejection always carries the venue reason code translated into action language.",
        "anchor": "The status chip is the same component on the blotter, the ticket, and the position view — one source of truth for the same Tag 39 value everywhere.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "sltp",
      "name": "SL / TP Config",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-sltp",
      "summary": "Stop Loss and Take Profit configuration with pip distance, price equivalence, and estimated P&L impact. The dual-input layout reduces cognitive load by showing both absolute price and distance simultaneously.",
      "register": {
        "whenToUse": "Stop-loss / take-profit entry shows both the absolute price and the distance (% and currency) — traders think in both, and mismatch errors are expensive.",
        "whenNotTo": "Never frame the stop as a percentage alone — loss is felt in currency. The projected loss at stop renders in account currency beside the field.",
        "a11yContract": "Values validate against tick size and minimum stop distance per instrument; invalid entries explain the constraint, not just reject.",
        "anchor": "Default SL/TP from the last trade was the single biggest abandonment fix in the order-flow study — defaults are a design decision with measurable money attached.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "volumebar",
      "name": "Volume Bar",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-volumebar",
      "summary": "Volume histogram showing today's trading activity relative to the 20-day average. Above-average bars are highlighted in accent color to signal unusual activity."
    },
    {
      "id": "timesales",
      "name": "Time & Sales",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-timesales",
      "summary": "Live execution tape showing individual trades with timestamp, aggressor side, price, and size. Color coding distinguishes buyer-initiated (green) from seller-initiated (red) trades."
    },
    {
      "id": "econrow",
      "name": "Economic Calendar",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-econrow",
      "summary": "Event row with impact tier indicator, consensus vs. previous values, and countdown. High-impact events trigger pre-event risk warnings in connected order entry components."
    },
    {
      "id": "sessionclock",
      "name": "Session Clock",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-sessionclock",
      "summary": "Multi-timezone market session display showing open/closed status for major exchanges. Critical for institutional traders managing positions across jurisdictions."
    },
    {
      "id": "allocation",
      "name": "Allocation",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-allocation",
      "summary": "Visual portfolio allocation breakdown across asset classes. The bar-based approach is preferred over pie charts in high-density trading UIs for accurate proportional comparison at small sizes."
    },
    {
      "id": "spread",
      "name": "Spread Display",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-spread",
      "summary": "Bid/ask spread visualization with pip value and cost-per-lot calculation. Tight spreads are shown in green; widening spreads during low liquidity shift to amber with a visual indicator."
    },
    {
      "id": "riskmatrix",
      "name": "Risk Matrix",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-riskmatrix",
      "summary": "Two-dimensional risk grid mapping position size against market volatility. Each cell's background intensity communicates aggregate risk level at a glance — designed to surface tail-risk concentrations without requiring mental arithmetic.",
      "register": {
        "whenToUse": "Concentration and exposure as a matrix where colour intensity AND a glyph encode severity — dual encoding because risk review includes colour-blind reviewers.",
        "whenNotTo": "A heat cell is never a dead end: every cell drills to the evidence behind it (positions, metrics, conditions). A naked number a reviewer cannot interrogate is a compliance liability.",
        "a11yContract": "Keyboard navigation walks cells in reading order with the cell's full context announced — the matrix is a table semantically, a heatmap visually.",
        "anchor": "Built for the SR 11-7 effective-challenge standard: the surface exists so a human can challenge the model's aggregation, not just admire it.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "alertconfig",
      "name": "Alert Config",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-alertconfig",
      "summary": "Price alert configuration with condition logic, notification channel selection, and expiry. Supports absolute price, percentage move, and crossover triggers for professional traders managing multiple instruments."
    },
    {
      "id": "tradehistory",
      "name": "Trade History",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-tradehistory",
      "summary": "Closed position history row with entry/exit prices, duration, and realized P&L. Color-coded P&L with directional indicators enables rapid performance scanning across hundreds of historical trades."
    },
    {
      "id": "candlestick",
      "name": "Candlestick",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-candlestick",
      "summary": "OHLC candle display with body, wicks, and data annotation. The side panel shows Open / High / Low / Close values with directional color. Used in chart tooltips, trade review panels, and daily summary cards."
    },
    {
      "id": "screener",
      "name": "Screener",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-screener",
      "summary": "Instrument scanner with filter chips and ranked results. The chip-based filter pattern reduces the form footprint compared to dropdowns while keeping all active criteria visible — critical for traders who run multiple simultaneous scans."
    },
    {
      "id": "fundingrate",
      "name": "Funding Rate",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-fundingrate",
      "summary": "Perpetual swap funding rate display with next payment countdown, annualized rate, and long/short cost indication. Positive rates mean longs pay shorts; negative rates reverse the flow."
    },
    {
      "id": "apicred",
      "name": "API Credential",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-apicred",
      "summary": "API key management card with reveal/conceal toggle, one-click copy, environment badge, and expiry indicator. Designed for the ACY Connect institutional B2B onboarding flow — credential issuance is the final step before a counterparty can connect their trading system."
    },
    {
      "id": "quotecomp",
      "name": "Quote Comparison",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-quotecomp",
      "summary": "Multi-broker quote comparison for best execution analysis. Highlights the tightest spread and lowest slippage per column. Used in institutional prime brokerage dashboards to satisfy best execution obligations under MiFID II."
    },
    {
      "id": "motion",
      "name": "Motion",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-motion",
      "summary": "Animation timing functions for transitions, micro-interactions, and loading states. Click each card to preview."
    },
    {
      "id": "animation-types",
      "name": "Animation\n        Types",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-animation-types",
      "summary": "A motion taxonomy for production UI: entrance, exit, feedback, loading, data-change, and spatial transitions. Each pattern names its duration, easing, risk, and reduced-motion fallback."
    },
    {
      "id": "animation-saas",
      "name": "Animation (SaaS)",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-animation-saas",
      "summary": "Five complete interaction studies for SaaS product moments &mdash; command execution, plan upgrade, inbox triage, integration handshake, and workspace provisioning. Pure CSS + vanilla JS, state-driven (data-state), token-themed for both themes, with prefers-reduced-motion fallbacks. Motion here is product feedback, not decoration: every study animates a moment where the user needs confirmation that the system heard them."
    },
    {
      "id": "animation-media",
      "name": "Animation (Media)",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-animation-media",
      "summary": "Five interaction studies for media products &mdash; player morph, chapter scrubbing, karaoke captions, story rings, and waveform mood states. Same contract as every animation in this system: pure CSS + vanilla JS, data-state driven, dual-theme tokens, reduced-motion safe. Media motion has one extra duty: it carries the content's emotion without upstaging it."
    },
    {
      "id": "mi-countup",
      "name": "Count-Up Numbers",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-mi-countup",
      "summary": "Animated number reveal for stats and KPIs — requestAnimationFrame with an ease-out curve and tabular numerals so the layout never jitters. Under prefers-reduced-motion the final value renders instantly.",
      "register": {
        "whenToUse": "Dashboard stats, impact numbers, fundraising totals — moments where the arrival of a number is part of the story.",
        "whenNotTo": "Never on live trading or financial-decision data: an animating price is a misrepresentation of the feed. Numbers a user acts on render instantly, always.",
        "a11yContract": "Runs once on demand, uses font-variant-numeric: tabular-nums to prevent reflow, and stays out of the screen reader's way — AT gets the final value, not 60 intermediate ones.",
        "anchor": "WCAG 2.2.2 (short, user-initiated, replayable run); reduced-motion honoured by skipping straight to the final value.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "mi-easing",
      "name": "Easing Playground",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-mi-easing",
      "summary": "The same 320px journey under five easing functions — linear, ease-out, ease-in-out, spring, and bounce — implemented in pure JS (rAF) so spring physics aren't faked with keyframes. Watching the difference is the fastest way to teach motion taste.",
      "register": {
        "whenToUse": "Design-system education and motion-spec reviews: when an engineer asks 'which easing', point at the difference instead of describing it.",
        "whenNotTo": "Don't ship bounce or heavy spring on serious product surfaces — overshoot reads as playful; institutional contexts use the ease-out family almost exclusively.",
        "a11yContract": "Buttons are real buttons; the stage is aria-hidden with the active easing named in visible text; reduced-motion jumps the ball to the end state.",
        "anchor": "WCAG 2.3.3 Animation from Interactions — motion is user-initiated, brief, and disabled by the OS preference.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "mi-toastlab",
      "name": "Toast Queue (Live)",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-mi-toastlab",
      "summary": "A working toast manager, not a static mock: spawn, stack (max 3, oldest evicted), auto-dismiss with a visible progress bar, pause-on-hover, manual close — and a split aria-live strategy (polite for info/success, assertive for critical).",
      "register": {
        "whenToUse": "Transient confirmations of completed actions: saved, sent, copied. The queue cap and eviction policy are the design decisions most toast libraries skip.",
        "whenNotTo": "Never for compliance-relevant or loss-relevant content — auto-dismissing evidence is the anti-pattern; that register belongs to persistent banners (see Alert &amp; Toast).",
        "a11yContract": "Hover pauses the timer; close buttons are focusable; critical toasts use aria-live=assertive, the rest polite so screen readers aren't interrupted by good news.",
        "anchor": "WCAG 4.1.3 Status Messages — announced without focus theft; 2.2.1 Timing Adjustable via pause-on-hover + manual dismiss.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "mi-tilt",
      "name": "Pointer Tilt Card",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-mi-tilt",
      "summary": "A 3D tilt that tracks the pointer with damped rotation and a radial glare that follows the cursor — pure JS transforms, springs back on leave, and switches itself off for touch devices and reduced-motion users.",
      "register": {
        "whenToUse": "Hero cards, feature highlights, award-page registers — one or two per view as a focal accent.",
        "whenNotTo": "Not for dense grids or anything containing text the user must read while interacting — motion under the reading surface costs comprehension. Never on form containers.",
        "a11yContract": "Activates only on (hover:hover) and (pointer:fine); rotation capped at 7&deg;; springs back to rest on leave; purely decorative and invisible to assistive tech.",
        "anchor": "WCAG 2.3.3 — interaction-triggered motion fully disabled under reduced-motion; no information is conveyed by the motion itself.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "mi-magnetic",
      "name": "Magnetic + Ripple",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-mi-magnetic",
      "summary": "Two press-feedback classics done with restraint: a magnetic pull capped at 6px that eases the button toward the cursor, and a ripple from the press point. Both are decoration on top of a fully functional, keyboard-perfect button.",
      "register": {
        "whenToUse": "Primary CTAs on marketing and portfolio surfaces where a moment of delight is on-register.",
        "whenNotTo": "Skip both in dense product UI — magnetism on a 24px-tall table action is noise. The ripple must never be the only press feedback (focus + active states stay).",
        "a11yContract": "Works identically by keyboard (ripple fires from center on Enter/Space); magnet caps at 6px so the hit target never escapes the pointer; reduced-motion disables both.",
        "anchor": "WCAG 2.5.2 Pointer Cancellation — action binds to the click, ripple on down is feedback only; 2.4.7 focus visible at all times.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "mi-stagger",
      "name": "Stagger Text Reveal",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-mi-stagger",
      "summary": "Character-level entrance for display headlines: JS splits the line into spans, each rises and settles with a 28ms cascade. The original string stays in the DOM for assistive tech; the animated copy is decorative.",
      "register": {
        "whenToUse": "Hero headlines and section moments on editorial/marketing surfaces — the typographic equivalent of a curtain rise.",
        "whenNotTo": "Never on body copy, navigation, or anything read mid-task; once per page load is the ceiling — repeated stagger becomes a tic.",
        "a11yContract": "Split spans are aria-hidden with the full sentence kept in a visually-hidden element; replay is user-initiated; reduced-motion renders the line instantly.",
        "anchor": "WCAG 1.3.1 — the programmatic text is the real sentence, not 34 orphan characters; reduced-motion honoured.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "mi-type",
      "name": "Typewriter Reveal",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-mi-type",
      "summary": "Types a headline out character by character behind a blinking caret — JS appends one glyph at a time while the full sentence stays in the DOM for assistive tech. The animated copy is decorative.",
      "register": {
        "whenToUse": "Terminal, code, or editorial moments where the &ldquo;being written now&rdquo; feeling earns attention — once per view.",
        "whenNotTo": "Never on navigation, body copy, or anything read mid-task; a slow type-out in front of content the user wants now reads as a delay, not delight.",
        "a11yContract": "The real sentence sits in a visually-hidden span; the typed copy is aria-hidden; replay is user-initiated and reduced-motion prints the line instantly.",
        "anchor": "WCAG 1.3.1 + 2.3.3 — programmatic text is the full string, not a stream of orphan characters; motion fully removed under reduced-motion.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "mi-scramble",
      "name": "Decode / Scramble",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-mi-scramble",
      "summary": "A cipher that resolves left-to-right: each position cycles random glyphs, then locks to its real character — the &ldquo;decrypting&rdquo; register, done with restraint.",
      "register": {
        "whenToUse": "Security, data, or AI surfaces where a &ldquo;resolving&rdquo; metaphor fits the content — a loading-to-truth moment.",
        "whenNotTo": "Not for long strings or anything time-critical; the scramble adds perceived latency. Never on numbers a user must trust mid-update.",
        "a11yContract": "Full text kept in a visually-hidden span; cycling glyphs are aria-hidden; reduced-motion skips straight to the resolved string.",
        "anchor": "WCAG 2.2.2 — no essential meaning is conveyed only by the transient glyphs; the settled text is the source of truth.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "mi-wordfade",
      "name": "Word Fade-Up",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-mi-wordfade",
      "summary": "Reveals a line word by word, each rising out of a soft blur into focus — a calmer, more legible cascade than per-character motion for longer headlines.",
      "register": {
        "whenToUse": "Longer display headlines and section intros where character-level motion would feel busy — the editorial default.",
        "whenNotTo": "Not for single words (use a simpler fade) or dense paragraphs; blur-in on body copy hurts reading speed.",
        "a11yContract": "Words are aria-hidden spans with the full sentence in a visually-hidden element; one play per load; reduced-motion renders sharp instantly.",
        "anchor": "WCAG 1.3.1 + 2.3.3 — the readable sentence is programmatic, not reconstructed from fragments; blur/motion removed under reduced-motion.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "mi-mask",
      "name": "Mask Wipe",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-mi-mask",
      "summary": "The whole line is revealed by a hard-edged wipe sweeping left to right via animated clip-path — no character splitting, so the text stays selectable and natively readable.",
      "register": {
        "whenToUse": "Logotype lockups and single-line statements where you want one clean gesture rather than a cascade.",
        "whenNotTo": "Not for multi-line blocks (the wipe reads as a glitch across wraps); not where the text must appear immediately.",
        "a11yContract": "No DOM splitting — the element holds the real text, fully selectable and read normally; reduced-motion shows it un-clipped at once.",
        "anchor": "WCAG 1.3.1 — text is never fragmented; the wipe is purely presentational and disabled under reduced-motion.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "mi-flip",
      "name": "3D Char Flip",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-mi-flip",
      "summary": "Each character flips up on its X-axis from flat to upright with a staggered cascade — a dimensional cousin of the stagger reveal for high-impact hero moments.",
      "register": {
        "whenToUse": "Hero headlines on award or launch surfaces where a single, deliberate flourish sets the tone.",
        "whenNotTo": "Never on body copy or repeated elements; 3D rotation per character is the most attention-expensive of the set — use sparingly.",
        "a11yContract": "Split spans are aria-hidden with the sentence in a visually-hidden element; replay is user-initiated; reduced-motion renders flat and upright instantly.",
        "anchor": "WCAG 1.3.1 + 2.3.3 — the real sentence is programmatic; rotation removed entirely under reduced-motion.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ax-contrast",
      "name": "Contrast Checker",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-ax-contrast",
      "summary": "Pick any foreground and background: the checker computes the WCAG relative-luminance ratio live and grades it against AA and AAA for normal and large text, plus the 3:1 non-text minimum. The math is the spec formula, not an approximation.",
      "register": {
        "whenToUse": "Token decisions, theme reviews, and the recurring 'is this gold readable on white' argument — settle it with the formula in front of both people.",
        "whenNotTo": "A passing ratio doesn't end the audit: 1.4.1 colour-only signalling and state contrast still need review. The checker is one control, not the conformance story.",
        "a11yContract": "Inputs are native colour pickers with visible labels; results render as text chips (never colour alone); the live ratio is announced via a polite region on change.",
        "anchor": "WCAG 1.4.3 Contrast (Minimum, AA 4.5:1 / 3:1 large), 1.4.6 (AAA), 1.4.11 Non-text Contrast — computed per the WCAG 2.x relative-luminance definition.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ax-focustrap",
      "name": "Focus Trap",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-ax-focustrap",
      "summary": "A live dialog focus trap done right: Tab and Shift+Tab cycle inside, Escape closes, and focus returns to the trigger that opened it. The trap is the easy half — the restore is the half everyone forgets.",
      "register": {
        "whenToUse": "Modals, drawers, command palettes — any layer that takes over the page must own focus for exactly as long as it exists.",
        "whenNotTo": "Don't trap focus in non-modal UI (popovers should dismiss on tab-out), and never trap without a keyboard exit — that's the violation this pattern exists to prevent.",
        "a11yContract": "Open moves focus to the first control; Tab wraps both directions; Escape closes; focus restores to the trigger; the dialog carries role=dialog and aria-modal with a labelled heading.",
        "anchor": "WCAG 2.1.2 No Keyboard Trap, 2.4.3 Focus Order — the ARIA APG dialog pattern.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ax-announce",
      "name": "Live Region Announcer",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-ax-announce",
      "summary": "Status messages that screen readers actually hear: a polite region for ambient updates and an assertive region for must-know-now — with a visible log so sighted reviewers can verify what was announced and when.",
      "register": {
        "whenToUse": "Async results: save confirmations, background sync, validation outcomes — anything that changes without a focus move.",
        "whenNotTo": "Don't announce continuous noise (every keystroke, every price tick) and never use assertive for good news — interruption is a cost you spend on emergencies.",
        "a11yContract": "Regions exist in the DOM from load (late-inserted live regions are unreliable); messages are swapped, not appended forever; the visible log mirrors exactly what AT received.",
        "anchor": "WCAG 4.1.3 Status Messages — programmatically determinable without receiving focus; polite vs assertive chosen by consequence.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ax-errorsum",
      "name": "Form Error Summary",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-ax-errorsum",
      "summary": "On failed submit: focus moves to a summary box that names every error as a link; each link jumps to its field; each field carries aria-invalid and an aria-describedby message. The pattern that turns 'something is wrong' into a fixable list.",
      "register": {
        "whenToUse": "Any form longer than two fields — and mandatory on regulated flows (KYC, payments) where an abandoned form has a measurable cost.",
        "whenNotTo": "Don't rely on inline messages alone for long forms (screen-reader users get no overview), and never use colour as the only error signal.",
        "a11yContract": "Summary receives focus on submit (tabindex=-1); links move focus to the field; messages bind via aria-describedby; errors announce once, not per keystroke.",
        "anchor": "WCAG 3.3.1 Error Identification, 3.3.2 Labels, 3.3.3 Error Suggestion, 2.4.3 Focus Order — the GOV.UK-validated error-summary pattern.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ax-skip",
      "name": "Skip Link",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-ax-skip",
      "summary": "The first Tab press on a page should offer a way past the navigation. Visually hidden until focused, then unmissable — try it: click into the demo and press Tab.",
      "register": {
        "whenToUse": "Every page with repeated navigation before the main content — which is every page. The cheapest AA fix on the entire checklist.",
        "whenNotTo": "Don't hide it with display:none (unfocusable) or leave it permanently visible (clutter); reveal-on-focus is the contract.",
        "a11yContract": "First focusable element in the demo DOM; on activation moves focus to the main region (tabindex=-1); visible focus style when revealed.",
        "anchor": "WCAG 2.4.1 Bypass Blocks — the canonical technique.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ax-target",
      "name": "Touch Target Size",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-ax-target",
      "summary": "24px icons feel fine with a mouse and fail with a thumb. Toggle the overlay to see each control's true hit area against the 44&times;44 reference — and how padding grows the target without growing the icon.",
      "register": {
        "whenToUse": "Mobile-reachable UI review: table row actions, chip closers, player controls — anywhere small glyphs accumulate.",
        "whenNotTo": "Don't inflate the visible control to fix the metric — grow the hit area (padding / pseudo-element) and keep the visual weight. Density and reachability are not enemies.",
        "a11yContract": "The overlay shows real interactive bounds; the small target demonstrates the failure, the padded target shows the fix at identical visual size; all controls stay keyboard-operable.",
        "anchor": "WCAG 2.5.8 Target Size Minimum (24px, AA in WCAG 2.2) and 2.5.5 (44px, AAA) — labelled honestly: this system targets 44px on primary touch surfaces.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "accessibility",
      "name": "Accessibility",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-accessibility",
      "summary": "WCAG 2.1 AA baseline with Finance-Specific Accessibility (FSA) protocols for institutional environments."
    },
    {
      "id": "density",
      "name": "Density",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-density",
      "summary": "Components adapt across three density modes. HD for trading terminals, MD for dashboards, LD for client portals."
    },
    {
      "id": "state",
      "name": "Infrastructure & State",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-state",
      "summary": "API-driven UI architecture for high-concurrency financial environments. We design the data lifecycle, not just the visual layer."
    },
    {
      "id": "figma",
      "name": "Figma Libraries",
      "domain": "foundations",
      "url": "https://edwson.com/design-system-showcase.html#sec-figma",
      "summary": "Source Figma files for the complete Zerologix component library and brand system."
    },
    {
      "id": "datepicker",
      "name": "Date Picker",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-datepicker",
      "summary": "Date and date-range selection for transaction filtering, reporting periods, and regulatory filing deadlines. Essential for compliance date queries and historical data analysis."
    },
    {
      "id": "combobox",
      "name": "Select / Combobox",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-combobox",
      "summary": "Three variants: a native styled Select for simple lists, a fully keyboard-navigable Combobox with type-ahead for instrument search, and a Multi-Select Tag input. All support grouped options and ARIA roles. Keyboard: ↑↓ navigate, Enter select, Esc dismiss."
    },
    {
      "id": "radiogroup",
      "name": "Radio Group",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-radiogroup",
      "summary": "Exclusive choice selection for order type, account tier, and risk classification. Supports both horizontal and vertical layouts with descriptive labels for compliance contexts."
    },
    {
      "id": "rangeslider",
      "name": "Range Slider",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-rangeslider",
      "summary": "Dual-handle range input for price filters, allocation percentages, and risk tolerance bands. Visual range display with real-time value updates for portfolio rebalancing."
    },
    {
      "id": "otpinput",
      "name": "OTP Input",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-otpinput",
      "summary": "One-time password entry field for two-factor authentication, wire transfer confirmation, and sensitive admin actions. Secure digit-by-digit input with auto-focus between fields."
    },
    {
      "id": "commandpalette",
      "name": "Command Palette",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-commandpalette",
      "summary": "Keyboard-driven command interface (Cmd+K) for power users navigating instruments, executing trades, and accessing settings. Type-ahead command search with grouped action categories."
    },
    {
      "id": "bottomsheet",
      "name": "Bottom Sheet",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-bottomsheet",
      "summary": "Mobile-first panel for order confirmation, filter selection, and quick actions. Dismissible sheet with drag handle and smooth scroll behavior for touch devices."
    },
    {
      "id": "resizablepanel",
      "name": "Resizable Panel",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-resizablepanel",
      "summary": "Drag the divider handle to resize panel areas. Used in trading workspaces for chart/order-book splits and multi-panel layouts. Supports both horizontal and vertical orientations with min/max constraints."
    },
    {
      "id": "stickyheader",
      "name": "Sticky Header",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-stickyheader",
      "summary": "Persistent context bar for instrument identity, account status, and active session info. Remains visible during scroll for quick reference to critical data."
    },
    {
      "id": "sidebarnav",
      "name": "Sidebar Nav",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-sidebarnav",
      "summary": "Collapsible left sidebar with grouped navigation links, notification badges, and active state indicators. Supports deep nesting for multi-level information architecture."
    },
    {
      "id": "datagrid",
      "name": "Data Grid",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-datagrid",
      "summary": "Sortable, filterable, and paginated data grid for holdings, transaction history, and compliance logs. Column-based layout with sort indicators and selection checkboxes for bulk actions."
    },
    {
      "id": "treeview",
      "name": "Tree View",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-treeview",
      "summary": "Hierarchical account and portfolio structure with interactive expand/collapse, keyboard navigation, and optional checkbox selection. Used for fund-of-funds, sub-account hierarchies, and permission scopes."
    },
    {
      "id": "kanban",
      "name": "Kanban Board",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-kanban",
      "summary": "Workflow visualization for compliance task tracking, trade lifecycle states, and review pipelines. Drag-and-drop card management with status column organization."
    },
    {
      "id": "calendarview",
      "name": "Calendar View",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-calendarview",
      "summary": "Event calendar for earnings announcements, regulatory filings, dividend dates, and economic events. Visual event markers with details on hover or click."
    },
    {
      "id": "codeblock",
      "name": "Code Block",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-codeblock",
      "summary": "Syntax-highlighted code display for API documentation, FIX protocol messages, and WebSocket payload examples. Copyable code with line numbers and language identifier."
    },
    {
      "id": "notificationcenter",
      "name": "Notification Center",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-notificationcenter",
      "summary": "Aggregated notification feed for price alerts, compliance deadlines, and system messages. Categorized and dismissible notifications with priority indicators."
    },
    {
      "id": "confirmdialog",
      "name": "Confirmation\n        Dialog",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-confirmdialog",
      "summary": "High-stakes action confirmation for trade execution, wire transfers, and account changes. Modal dialog with warning icon, destructive action button, and cancel option."
    },
    {
      "id": "contextmenu",
      "name": "Context Menu",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-contextmenu",
      "summary": "Right-click action menu for chart annotations, watchlist management, and quick trade execution. Floating menu with grouped actions and keyboard shortcuts."
    },
    {
      "id": "dragdrop",
      "name": "Drag & Drop",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-dragdrop",
      "summary": "Reorderable lists for dashboard widget arrangement and watchlist prioritization. Visual feedback during drag operations with drop zone indicators."
    },
    {
      "id": "kbshortcuts",
      "name": "Keyboard Shortcuts",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-kbshortcuts",
      "summary": "Keyboard shortcut reference panel for trading terminal hotkeys. Organized by category with searchable help modal for power users."
    },
    {
      "id": "reg-overview",
      "name": "DS Reference Map",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-reg-overview",
      "summary": "This system was built by studying 8+ reference-grade design systems — from institutional finance (institutional terminals, Stripe) to government compliance (Gov.uk, USWDS). Below: what each reference taught us and how it shaped component decisions."
    },
    {
      "id": "mifid2",
      "name": "MiFID II Suite",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-mifid2",
      "summary": "MiFID II (Markets in Financial Instruments Directive II) mandates pre-trade transparency, post-trade reporting, best execution disclosure, and transaction cost reporting. These components encode those requirements as interactive UI patterns — not PDF documents."
    },
    {
      "id": "esma-warning",
      "name": "ESMA / FCA\n        Warning",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-esma-warning",
      "summary": "ESMA (European Securities and Markets Authority) and FCA (Financial Conduct Authority) mandate specific risk warnings for retail CFD clients, including the percentage of retail investors who lose money. These are legally required — not optional copy."
    },
    {
      "id": "jurisdiction",
      "name": "Jurisdiction Simulator",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-jurisdiction",
      "summary": "The same Order Entry component renders differently across regulatory jurisdictions. Switch between EU (MiFID II/ESMA), UK (FCA post-Brexit), Australia (ASIC), and US (CFTC/FINRA) to see how compliance requirements alter the interface — warnings, leverage caps, disclosures, and required fields all adapt automatically."
    },
    {
      "id": "best-execution",
      "name": "Best Execution",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-best-execution",
      "summary": "Investment firms must demonstrate best execution — the best possible result for clients considering price, costs, speed, likelihood of execution, size, and market impact. This panel shows the Smart Order Router's venue decision in real-time."
    },
    {
      "id": "fca-cass",
      "name": "FCA CASS / Client Money",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-fca-cass",
      "summary": "The FCA's Client Assets Sourcebook (CASS) requires firms to segregate client money from firm money. This panel surfaces client money status for both the end-client view and the RM operational view — distinct audiences, distinct information needs."
    },
    {
      "id": "sec-10b51",
      "name": "SEC Rule 10b5-1 Plan",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-sec-10b51",
      "summary": "Visual scheduler and execution monitor enforcing statutory cooling-off periods and transaction caps for corporate insiders.",
      "register": {
        "whenToUse": "In executive equity dashboards, stock administration platforms, and compliance panels tracking scheduled insider transactions.",
        "whenNotTo": "Do not use for standard discretionary retail trades. Use basic limit order status forms instead.",
        "a11yContract": "Expose status via standard aria-live=\"polite\" when scheduled tranches change. Ensure execution list has ARIA tables structure.",
        "anchor": "SEC Exchange Act Rule 10b5-1(c)(1)(ii)(B) (governing mandatory cooling-off periods for directors and officers).",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "sec-form4",
      "name": "SEC Form 4 Ledger",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-sec-form4",
      "summary": "Real-time ledger showing insider equity transactions, transaction codes, and beneficial ownership filings within the 2-business-day window.",
      "register": {
        "whenToUse": "Use inside compliance trade portals, equity platforms, and public investor relationship pages to show institutional insider tracking.",
        "whenNotTo": "Do not use for general market client transactions. Use general client trade confirmations instead.",
        "a11yContract": "Tables should include ARIA labels for sorting headers and semantic details for transaction codes S (Sale) and P (Purchase).",
        "anchor": "Section 16(a) of the Securities Exchange Act of 1934 and SEC Rule 16a-3 (mandatory filing within two business days).",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "sec-15c33",
      "name": "SEC Rule 15c3-3 Reserve",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-sec-15c33",
      "summary": "Special Reserve Bank Account calculator displaying credits, debits, and reserve cash deposit requirements for broker-dealers holding customer assets.",
      "register": {
        "whenToUse": "In back-office broker-dealer ledger audits, compliance reporting dashboards, and treasury reserve controls.",
        "whenNotTo": "Do not expose in standard retail customer account pages. Use simple credit interest statements instead.",
        "a11yContract": "The calculation result must have role=\"status\" and aria-live=\"polite\" to let screen readers know when the inputs change.",
        "anchor": "SEC Rule 15c3-3 (Customer Protection Rule) under the Securities Exchange Act of 1934 (requiring a Special Reserve Bank Account).",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "sec-best-interest",
      "name": "SEC Reg BI Gate",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-sec-best-interest",
      "summary": "Multi-step retail investor stepper enforcing Regulation Best Interest disclosure rules, ensuring Form CRS receipt and acknowledgement prior to recommendation execution.",
      "register": {
        "whenToUse": "In retail brokerage onboarding, advisory client signups, and before delivering recommendations to retail accounts.",
        "whenNotTo": "Do not enforce on institutional accounts or eligible contract participants (ECPs), where Reg BI does not apply.",
        "a11yContract": "The disclosure PDF link must have a descriptive label. The checkbox must have an explicit aria-required=\"true\".",
        "anchor": "SEC Regulation Best Interest (Reg BI) under Exchange Act Rule 15l-1 (requiring timely delivery of Form CRS).",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "sec-17a4",
      "name": "SEC 17a-4 WORM Seal",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-sec-17a4",
      "summary": "Visual indicators confirming Write-Once-Read-Many (WORM) storage locks, hash integrity checks, and retention scheduling for broker-dealer communications.",
      "register": {
        "whenToUse": "In document vaults, record-retention auditor dashboards, and trade statement export wizards.",
        "whenNotTo": "Do not use for temporary application state caches or draft files where edits are expected.",
        "a11yContract": "Display status icon with appropriate aria-label=\"Write-Once-Read-Many storage lock active\". SHA-256 hashes must have monospace font representation.",
        "anchor": "SEC Rule 17a-4(f) under the Securities Exchange Act (governing electronic storage media integrity standards).",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "isda-csa",
      "name": "ISDA CSA Margin Call",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-isda-csa",
      "summary": "Collateral management dashboard calculating variation and initial margins, thresholds, and final payout requests under bilateral agreements.",
      "register": {
        "whenToUse": "In collateral operation desks, trade negotiation screens, and post-trade settlement systems.",
        "whenNotTo": "Do not use for cleared swap margin requirements (which are handled by Central Counterparties / CCPs).",
        "a11yContract": "The margin call result should update with an ARIA notification and include proper financial units display.",
        "anchor": "CFTC Margin Requirements for Uncleared Swaps and Basel III BCBS-IOSCO framework.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "isda-clause",
      "name": "ISDA Agreement Clauses",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-isda-clause",
      "summary": "Bilateral negotiation interface showing termination threshold differentials and cross-default clauses between two contracting entities.",
      "register": {
        "whenToUse": "In derivative onboarding systems, legal ops negotiator dashboards, and counterparties consensus reviews.",
        "whenNotTo": "Do not use for automated algorithmic clearing arrangements. Use structured rules engines instead.",
        "a11yContract": "Compare layouts side-by-side using screen reader landmarks like aria-describedby pointing to change descriptions.",
        "anchor": "Dodd-Frank Title VII Recordkeeping obligations (requiring clear auditability of agreement negotiations).",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "isda-upi",
      "name": "ISDA UPI Resolver",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-isda-upi",
      "summary": "Schema mapping interface generating Unique Product Identifiers (UPI) and CFI codes from raw swap attribute fields for reporting trade data to Repositories.",
      "register": {
        "whenToUse": "In post-trade compliance interfaces, transaction reporting templates, and DTCC swap reporting workflows.",
        "whenNotTo": "Do not use for plain vanilla equity trades, which use standard ISIN or CUSIP identifiers.",
        "a11yContract": "Always display the CFI code and resolved UPI in raw accessible text, not inside images, so screen readers can copy it.",
        "anchor": "CFTC Part 43 &amp; 45 Swap Data Recordkeeping and reporting rules (requiring unique product identifiers).",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "isda-simm",
      "name": "ISDA SIMM Risk Exposure",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-isda-simm",
      "summary": "Risk parameter matrix entry grid mapping Delta, Vega, and Curvature vectors to compute Initial Margin requirements under Uncleared Margin Rules.",
      "register": {
        "whenToUse": "In derivatives risk dashboards, quantitative trading portals, and capital reserve calculation tools.",
        "whenNotTo": "Do not use for retail accounts or standard brokerage margin accounts (which use Regulation T / SPAN margins).",
        "a11yContract": "Matrix inputs must have descriptive aria-label describing the intersection (e.g. \"Vega for 5 year tenor\").",
        "anchor": "BCBS-IOSCO framework on Margin requirements for non-centrally cleared derivatives.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "isda-stay",
      "name": "ISDA QFC Stay Status",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-isda-stay",
      "summary": "System warning banner detailing contract stay provisions under Qualified Financial Contracts (QFC) rules preventing cross-default close-outs.",
      "register": {
        "whenToUse": "In trade confirmations, risk settlement interfaces, and legal compliance tracking panels.",
        "whenNotTo": "Do not use for exchange-traded derivatives or cleared swap contracts, where stays do not apply in this format.",
        "a11yContract": "Use a high-visibility warning status (such as role=\"alert\") if the counterparty enters default administration, triggering stays.",
        "anchor": "Federal Reserve Board, FDIC, and OCC Qualified Financial Contract (QFC) Stay Rules.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "filterbar",
      "name": "Filter Bar",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-filterbar",
      "summary": "Chip-based active filter display with search, date range picker, and status toggles. Used in data grids, trade blotters, and compliance logs to surface active filter state clearly."
    },
    {
      "id": "splitbtn",
      "name": "Split Button",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-splitbtn",
      "summary": "Primary action button with a dropdown chevron for variant actions. Used for order entry (Buy / Buy Limit / Buy Stop), export (CSV / PDF / JSON), and report generation actions."
    },
    {
      "id": "audittrail",
      "name": "Audit Trail",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-audittrail",
      "summary": "Immutable chronological log of system events, user actions, and compliance decisions. Required for MiFID II best execution reporting, SOX audit support, and internal controls. Each entry is cryptographically linked to prevent tampering.",
      "register": {
        "whenToUse": "Append-only event stream with hash chaining — each entry carries actor, action, payload diff, and timestamp; the chain makes silent edits cryptographically loud.",
        "whenNotTo": "Do not render the trail as raw JSON — the audience is a compliance officer under time pressure. Each event renders as a human-readable sentence with the diff one click away.",
        "a11yContract": "Filterable by actor, surface, and event class, but never editable or deletable from the UI — the viewer has zero write paths by design.",
        "anchor": "Built to the SEC 17a-4(f) WORM standard: write once, read many. The same pattern seals AI recommendations in the Double-Blind protocol — sign-off is a first-class event.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "livedata",
      "name": "Live\n        Data",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-livedata",
      "summary": "Design components consuming real production APIs — zero mock numbers. Every price, rate, and filing shown here is fetched live. Demonstrates loading skeletons, stale-data detection (72-second window), error boundaries with last-known-good cache, and WebSocket reconnection with exponential backoff."
    },
    {
      "id": "b2b-kyc-verify",
      "name": "KYC/AML Identity Stepper",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2b-kyc-verify",
      "summary": "Multi-step identity verification flow used by regulated financial platforms for onboarding under FinCEN CDD, FCA SYSC 6, and MAS AML/CFT requirements. Handles document upload, liveness check, sanctions screening, and risk scoring with clear failure states and manual-review escalation paths."
    },
    {
      "id": "b2b-rbac",
      "name": "RBAC Permission Matrix",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2b-rbac",
      "summary": "Granular permission editor for multi-tenant enterprise platforms. Each cell represents a policy decision logged to the audit trail. Used for SOC 2 CC6.1 access controls, Type I/II attestations, and regulatory separation-of-duties reviews. Supports role templates, permission inheritance, and \"who changed this\" hover tooltips."
    },
    {
      "id": "b2b-approval",
      "name": "Multi-Approver Workflow",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2b-approval",
      "summary": "N-of-M signoff pattern for high-stakes actions — trade cancellation, policy changes, vendor contracts, client offboarding. Each approver sees full context (proposed change, diff, requestor, SLA), can approve/reject/request changes, and is logged to the audit trail. Parallel or sequential, with optional hierarchy routing."
    },
    {
      "id": "b2b-lineage",
      "name": "Data Lineage Graph",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2b-lineage",
      "summary": "Visualises where data originated, every transformation it passed through, and every downstream consumer. Critical for BCBS 239 risk-data aggregation, GDPR Article 30 processing records, and IFRS 17 actuarial assumption traceability. Each node shows owner, freshness, and PII status; each edge shows the transformation contract."
    },
    {
      "id": "b2b-sla",
      "name": "SLA Status Board",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2b-sla",
      "summary": "Real-time service health board with p50/p95/p99 latency, error budget burn, and incident history. Pattern used in Stripe Status, Atlassian Statuspage, and Datadog SLO dashboards. Each service shows 90-day uptime sparkline, current SLA commitment, and remaining error-budget percentage."
    },
    {
      "id": "b2b-recon",
      "name": "Reconciliation Diff",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2b-recon",
      "summary": "Side-by-side comparison of two datasets with automatic mismatch highlighting. Used for trade reconciliation (our books vs. prime broker statement), GL-to-subledger checks, MiFID II trade reporting vs. ARM acknowledgement, and daily position-break investigations. Mismatches grouped by severity with resolution actions."
    },
    {
      "id": "b2b-tenant",
      "name": "Tenant Switcher",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2b-tenant",
      "summary": "Multi-tenant navigation pattern for MSP dashboards, consultancy portals, and enterprise SaaS. Shows current tenant prominently, recents, search, and role-per-tenant. Keyboard-driven (⌘K opens, arrow keys, enter selects). Switching reloads workspace without full navigation to preserve scroll context."
    },
    {
      "id": "b2b-apikeys",
      "name": "API Keys &amp; Webhooks",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2b-apikeys",
      "summary": "Credential lifecycle with scoped permissions, rotation policy, and delivery health. Modeled on Stripe/Plaid developer consoles with institutional audit expectations. Reg alignment: SOC 2 CC6.1 (logical access), PCI DSS 3.2.1 (key management), OWASP API Security Top 10."
    },
    {
      "id": "b2b-regtriage",
      "name": "Regulatory Alert Triage",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2b-regtriage",
      "summary": "Compliance inbox for surveillance hits — AML, market abuse, sanctions, PEP. Each alert carries regulatory source, severity scoring, SLA clock, and case linkage. Pattern reference: NICE Actimize, Nasdaq SMARTS, internal tools at tier-1 banks. Reg alignment: FINRA Rule 3110, MAS Notice 626, FCA SYSC 6, OFAC SDN screening."
    },
    {
      "id": "b2b-seats",
      "name": "Seat &amp; License Manager",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2b-seats",
      "summary": "Enterprise SaaS seat allocation with role tiers, utilization reporting, and contract-aware provisioning. Covers the \"are we paying for ghosts\" question that FP&amp;A asks every quarter. Reg alignment: ISO 27001 A.9 (access control), SOC 2 CC6.2 (user deprovisioning)."
    },
    {
      "id": "soc-composer",
      "name": "Post Composer",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-soc-composer",
      "summary": "Rich content composer with media attachments, @mention autocomplete, emoji picker, draft save, visibility scoping, and character limit with live counter. Pattern reference: Twitter/X, LinkedIn, Bluesky composer. Accessibility: full keyboard control, SR announcements, reduced-motion aware."
    },
    {
      "id": "soc-feedpost",
      "name": "Feed Post Card",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-soc-feedpost",
      "summary": "Timeline post with author meta, repost attribution, rich content, media grid, reactions bar, and action row (reply, repost, like, share, bookmark). Pattern reference: Twitter/X, Threads, LinkedIn native post. Handles quote-repost chain and collapsed-thread continuation."
    },
    {
      "id": "soc-stories",
      "name": "Story Ring Carousel",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-soc-stories",
      "summary": "Horizontally scrolling story row with viewed/unviewed ring states, live indicator, and \"your story\" affordance. Pattern reference: Instagram, LinkedIn video spotlight, WhatsApp status. Gradient ring signals unseen content; muted ring = already watched."
    },
    {
      "id": "soc-threads",
      "name": "Threaded Comments",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-soc-threads",
      "summary": "Nested comment thread with collapse/expand, author highlighting, reaction pills, reply composer inline, and OP/verified badges. Pattern reference: Reddit, Hacker News, Linear comments. Scales to 5+ levels of depth with visual rail to anchor the reading eye."
    },
    {
      "id": "soc-profile",
      "name": "Profile Header",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-soc-profile",
      "summary": "Identity block with banner, avatar, name row (verified badge, pronouns), bio, stats (followers, following, posts), action CTAs (follow, message, share), and tab navigation. Pattern reference: Twitter/X, LinkedIn, Bluesky profile. Collapses cleanly at mobile breakpoints."
    },
    {
      "id": "soc-notifs",
      "name": "Notification Feed",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-soc-notifs",
      "summary": "Aggregated notification stream with type iconography, actor stacking, time grouping (new vs earlier), action previews, and filter tabs. Pattern reference: GitHub, Linear, Twitter/X notifications. Groups identical actions (\"12 people liked your post\") to reduce noise."
    },
    {
      "id": "soc-trending",
      "name": "Trending Hashtags",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-soc-trending",
      "summary": "Right-rail trend unit with rank, category context, post volume, and engagement delta (Δ 24h). Pattern reference: Twitter/X \"What's happening\", LinkedIn news, Bluesky discover. Numeric trend indicator avoids the \"going viral now!\" coercion and just reports the data."
    },
    {
      "id": "soc-dm",
      "name": "Direct Message Chat",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-soc-dm",
      "summary": "1:1 chat surface with paired conversation list (left) and thread view (right). Features read receipts, typing indicator, day separators, reaction picker, inline media/link previews, and message composer. Pattern reference: Slack DMs, iMessage, Twitter/X DMs."
    },
    {
      "id": "soc-analytics",
      "name": "Engagement Analytics",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-soc-analytics",
      "summary": "Creator-facing post performance panel with impressions, engagement rate, audience growth, top referrers, and 7-day sparkline. Pattern reference: Twitter/X Analytics, LinkedIn Creator Dashboard, YouTube Studio. Uses Ben Fry's \"show the data first\" principle over dashboard theatre."
    },
    {
      "id": "soc-verified",
      "name": "Verified Creator Badge",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-soc-verified",
      "summary": "Multi-tier verification mark (Individual, Professional, Organization, Government) with hover-tooltip explaining authority, issue date, and scope. Pattern reference: Twitter/X Verified, Bluesky moderation labels, Meta Meta-verified. Disambiguates trust signals so users can tell \"celebrity\" from \"actual regulatory body\"."
    },
    {
      "id": "aml-sanctions",
      "name": "Sanctions Screening",
      "domain": "aml",
      "url": "https://edwson.com/design-system-showcase.html#sec-aml-sanctions",
      "summary": "Real-time name-match screening against 12 sanctions lists (OFAC SDN, EU CFSP, UN Consolidated, UK HMT, MAS TSOFA, AUSTRAC DFAT). Fuzzy-match scoring, AKA alias expansion, transliteration support (Cyrillic/Arabic/CJK). Reg alignment: OFAC 31 CFR 501, EU (EC) 2580/2001, UK SAMLA 2018."
    },
    {
      "id": "aml-pep",
      "name": "PEP &amp; Adverse Media",
      "domain": "aml",
      "url": "https://edwson.com/design-system-showcase.html#sec-aml-pep",
      "summary": "Politically Exposed Persons monitoring with three-tier FATF classification (Foreign · Domestic · IO), family member &amp; close associate expansion, adverse media signal ingestion. Reg alignment: FATF Rec 12, EU AMLD6 Art 20, UK MLR 2017 Reg 35."
    },
    {
      "id": "aml-txn-risk",
      "name": "Transaction Risk Scoring",
      "domain": "aml",
      "url": "https://edwson.com/design-system-showcase.html#sec-aml-txn-risk",
      "summary": "Real-time multi-factor transaction risk scoring: amount velocity, geography, counterparty risk, typology fingerprint. Adjustable weights per risk appetite. Reg alignment: FinCEN 31 CFR 1010.320, BSA/AML, Wolfsberg Guidance on Risk-Based Approach."
    },
    {
      "id": "aml-sar",
      "name": "SAR / STR Filing",
      "domain": "aml",
      "url": "https://edwson.com/design-system-showcase.html#sec-aml-sar",
      "summary": "Suspicious Activity Report drafting with narrative scaffolding, evidence attachment, MLRO review, and regulatory submission (FinCEN BSA E-Filing, UK NCA SAR Online, HK JFIU). 30-day FinCEN filing clock visible at all times. Reg alignment: 31 USC 5318(g), POCA 2002 s.330, FATF Rec 20."
    },
    {
      "id": "aml-ubo",
      "name": "UBO Ownership Graph",
      "domain": "aml",
      "url": "https://edwson.com/design-system-showcase.html#sec-aml-ubo",
      "summary": "Multi-level corporate ownership unwinding with &gt;25% threshold detection per FinCEN CDD Rule. Circular holdings, trust interposition, nominee flag. Reg alignment: 31 CFR 1010.230, EU AMLD5 Art 30, UK PSC Register, Singapore RoRC."
    },
    {
      "id": "aml-monitoring",
      "name": "Ongoing Monitoring Queue",
      "domain": "aml",
      "url": "https://edwson.com/design-system-showcase.html#sec-aml-monitoring",
      "summary": "Triage-ready alert queue from behavioural-rule and ML-model detection layers. SLA-banded disposition: clear, escalate, RFI, SAR. Reg alignment: FATF Rec 10(d), FinCEN 31 CFR 1020.210(b)(2)(v), JMLSG Part I 5.7."
    },
    {
      "id": "aml-jurisdiction",
      "name": "Jurisdiction\n        Heatmap",
      "domain": "aml",
      "url": "https://edwson.com/design-system-showcase.html#sec-aml-jurisdiction",
      "summary": "FATF grey / black list status blended with Basel AML Index, Transparency International CPI, and sanctions regime density. Per-country exposure weighted by book volume. Reg alignment: FATF Public Statements, EU AMLD5 Annex III, Basel Committee AML/CFT Principles."
    },
    {
      "id": "aml-cdd",
      "name": "CDD Trigger Events",
      "domain": "aml",
      "url": "https://edwson.com/design-system-showcase.html#sec-aml-cdd",
      "summary": "Ongoing Customer Due Diligence refresh schedule blended with trigger-event detection (address change, ownership restructure, adverse media, unusual activity). Reg alignment: FATF Rec 10, EU AMLD5 Art 14(5), MAS AML Notice 626 §8."
    },
    {
      "id": "aml-typology",
      "name": "Typology Library",
      "domain": "aml",
      "url": "https://edwson.com/design-system-showcase.html#sec-aml-typology",
      "summary": "Reference library of money-laundering typologies sourced from FATF, APG, Egmont Group, MENAFATF with bound detection rules and real case exemplars. Reg alignment: FATF Typologies Reports, Egmont Case Book, UK NCA Red Flag Indicators."
    },
    {
      "id": "aml-regchange",
      "name": "Regulatory Change Feed",
      "domain": "aml",
      "url": "https://edwson.com/design-system-showcase.html#sec-aml-regchange",
      "summary": "Real-time ingestion of OFAC SDN updates, HMT Sanctions Notices, EU Council Regulations, MAS Circulars, HKMA Guidelines. Auto-diff old vs new lists, impact-surface against current book, CCO routing. Reg alignment: OFAC OFAC Recent Actions feed, HMT Financial Sanctions Notice, EU OJL, MAS MAS-Notices-RSS."
    },
    {
      "id": "ai-confidence",
      "name": "Calibrated Confidence",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-confidence",
      "summary": "Confidence as a calibrated, decision-grade signal — score bands (HIGH / MEDIUM / ABSTAIN) tied to measured calibration error, not raw softmax. The abstain state is designed, not hidden. Production pattern from Duo-Shou's three-tier valuation. Reg alignment: SR 11-7 model uncertainty disclosure, EU AI Act Art. 13 transparency.",
      "register": {
        "whenToUse": "Attach to every AI output a user might act on. The badge communicates how much to trust this specific output — banded, calibrated, and honest about coverage.",
        "whenNotTo": "Never show raw model probability as if it were accuracy — an uncalibrated 0.92 is marketing, not measurement. If you cannot measure calibration (ECE), ship a qualitative band, not a number.",
        "a11yContract": "Bands are colour + label dual-encoded; ABSTAIN renders the fallback path (human review, more data) instead of an empty value. Screen readers get the band name and what it implies, not the percentage alone.",
        "anchor": "SR 11-7 requires known model limitations to be visible at the point of use; EU AI Act Art. 13 requires output interpretability. The calibration date in the corner is the audit hook.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-reasoning",
      "name": "Reasoning Chain",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-reasoning",
      "summary": "Every AI recommendation decomposes into challengeable steps, each with its evidence source and provenance label (live data / versioned document / model estimate). Pattern shipped in ConnectX and Aureus \\u201cWhy this recommendation\\u201d drawers. Reg alignment: SEC Reg BI Conflict (a)(2)(iv), SR 11-7 effective challenge.",
      "register": {
        "whenToUse": "Required wherever an AI recommendation can move money or risk: the user's job is to challenge the synthesis, not to admire the conclusion.",
        "whenNotTo": "Do not paste a free-text 'explanation' paragraph generated after the fact — that is rationalisation theatre. If the pipeline cannot expose real intermediate steps, show inputs honestly instead.",
        "a11yContract": "Steps are a semantic ordered list; each step links to its evidence; estimates are visually distinct from facts. Keyboard expands steps; the chain reads top-to-bottom as one argument.",
        "anchor": "SR 11-7 effective challenge requires that a reviewer can interrogate the model's reasoning; Reg BI requires the basis of a recommendation to be articulable. This surface is that articulation.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-autonomy",
      "name": "Autonomy Tier Selector",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-autonomy",
      "summary": "Four explicit autonomy tiers — Ambient → Co-pilot → Assertive → Autonomous — as a governance primitive, not a settings toggle. Each tier states what the AI may do, in scope terms a compliance officer can sign. Production pattern from ConnectX's 8-agent framework. Reg alignment: SR 11-7 model governance, EU AI Act human-oversight Art. 14.",
      "register": {
        "whenToUse": "Use wherever an AI system can take actions of varying consequence — the tier ladder turns 'how much do we trust the AI' from a vibe into a signed configuration.",
        "whenNotTo": "Not a feature flag and not a personalisation preference — do not bury it in settings. If the system has only one autonomy mode, state the mode; do not fake a ladder.",
        "a11yContract": "Escalating a tier re-presents the full scope contract and requires re-auth; de-escalating is instant. The active tier is announced on every affected surface. Tier state is per-client, not global.",
        "anchor": "EU AI Act Art. 14 requires meaningful human oversight proportionate to risk; SR 11-7 requires documented model-use boundaries. The tier definition IS that documentation, user-facing.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-signoff",
      "name": "Human Sign-off Gate",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-signoff",
      "summary": "The moment AI hands control to a human: typed confirmation bound to the specific proposal ID, impact and reversibility surfaced pre-commit, and the decision hash-sealed into an append-only trail. Production pattern from Aureus Decision Room and Double-Blind sealed commits. Reg alignment: SEC Reg BI Care Obligation, SEC 17a-4(f), SR 11-7.",
      "register": {
        "whenToUse": "Mandatory wherever an AI proposal becomes an irreversible or capital-committing action. The gate is the architectural promise that AI surfaces options and humans hold the commit.",
        "whenNotTo": "Do not use for low-stakes accepts (that is the suggestion card's job) — gate fatigue destroys the gate. One sign-off per decision, never a daily batch blanket-approval.",
        "a11yContract": "Typed confirmation is bound to the proposal ID (no generic 'CONFIRM'); the commit button stays disabled until the exact string matches; reject requires a reason that enters the same trail.",
        "anchor": "Reg BI Care Obligation expects a deliberation surface, not a click-through; 17a-4(f) expects the decision record to be tamper-evident. The hash seal makes sign-off forensically defensible.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-suggestion",
      "name": "AI Suggestion Card",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-suggestion",
      "summary": "The unit of human-AI collaboration below the sign-off threshold: a suggestion with provenance chips, calibrated confidence, and three first-class responses — accept, modify, reject-with-reason. Rejected suggestions stay visible with their reason. Pattern from ConnectX RM workflow and Aureus proposals.",
      "register": {
        "whenToUse": "The default container for any AI-initiated idea: nudges, drafts, flags. If the action is irreversible or moves capital, escalate to the Sign-off Gate instead.",
        "whenNotTo": "Never auto-accept on timeout, and never bury the reject option — a suggestion UI where accepting is easier than rejecting is an autonomy escalation in disguise.",
        "a11yContract": "All three actions are keyboard-reachable and logged; modify opens the draft for edit rather than regenerating; provenance chips link to the actual source records.",
        "anchor": "Reg BI conflict rules require the basis of a recommendation to be inspectable — the provenance chips are that basis. The rejection log is the SR 11-7 challenge record.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-stream",
      "name": "Streaming Response",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-stream",
      "summary": "Token streaming with the honest affordances: visible model identity, time-to-first-token and throughput, a Stop control that actually halts spend, and an explicit \\u201cunverified until complete\\u201d register for financial figures.",
      "register": {
        "whenToUse": "Use for any generation longer than ~2 seconds — perceived latency drops when language arrives progressively, and Stop gives the user real control over cost and time.",
        "whenNotTo": "Do not stream numbers into a decision surface as if final — a half-generated figure looks identical to a real one. Execution-grade values render only after the grounding pass.",
        "a11yContract": "Stop is keyboard-reachable and cancels the request server-side, not just visually. Completion announces via aria-live. The caret is decorative and hidden from screen readers.",
        "anchor": "Model identity and generation status visible at point of use (EU AI Act Art. 50 transparency); the 'unverified during stream' register prevents a half-truth from becoming an order.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-composer",
      "name": "Prompt Composer",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-composer",
      "summary": "Structured prompt input for professional surfaces: explicit context chips (what the model can see), a token-budget meter, and injection-safe paste — pasted text is data, not instructions. The composer makes the context window a visible, auditable object.",
      "register": {
        "whenToUse": "Use wherever users direct an AI with real stakes — the chips answer 'what does the model know right now', which is the question every audit and every confused user asks.",
        "whenNotTo": "A bare chat textarea is fine for exploration, wrong for regulated work: invisible context produces unexplainable outputs. Don't silently inject CRM data the user can't see.",
        "a11yContract": "Chips are removable and inspectable; the budget meter warns before truncation (silent context loss is the worst failure); paste-sanitisation status is visible, and flagged content shows why.",
        "anchor": "The context chips double as the disclosure of processing basis (GDPR) and make prompt-injection a surfaced, loggable event rather than a silent compromise.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-disclosure",
      "name": "AI Disclosure Label",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-disclosure",
      "summary": "Per-artefact provenance labelling: AI-assisted (human reviewed and named) vs fully automated (rule-bounded, no review). The label travels with the content — letters, summaries, trade confirmations. Reg alignment: EU AI Act Art. 50 transparency obligations, FINRA 2210 communications standards.",
      "register": {
        "whenToUse": "Label every client-facing artefact an AI touched. The two-state taxonomy (assisted vs automated) is the minimum honest vocabulary — most policies fail by having only one.",
        "whenNotTo": "Do not watermark internal scratch work into noise, and never use the label as a liability shield for unreviewed content ('AI-assisted' with no named reviewer is the anti-pattern).",
        "a11yContract": "The label is part of the document model, not a CSS overlay — it survives export, print, and forward. Reviewer name and date are mandatory fields for the assisted state.",
        "anchor": "EU AI Act Art. 50 requires AI-generated content be identifiable; FINRA 2210 holds the firm responsible for communications regardless of authorship — the named reviewer is who answers.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-model-picker",
      "name": "Model Fallback Chain",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-model-picker",
      "summary": "Model selection as visible infrastructure: an ordered fallback chain with live health, latency, and an honest 'reduced quality' label on the last resort. Production pattern from Ed's Agent (edwson.com) 7-model NVIDIA NIM chain.",
      "register": {
        "whenToUse": "Use when a product depends on third-party model availability — a single-model dependency is an outage waiting for a deprecation notice.",
        "whenNotTo": "Do not expose a raw model dropdown to end users in a regulated product — model choice is a governance decision; users choose outcomes, operators choose models.",
        "a11yContract": "The serving model is attached to every output (attributability); chain order is config, not code; degraded-quality fallbacks are labelled so support can explain output variance.",
        "anchor": "Model inventory and version control are SR 11-7 baseline expectations; attributing each output to its producing model is what makes incident review possible.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-agent-trace",
      "name": "Agent Tool-Call Trace",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-agent-trace",
      "summary": "Every step an agent takes — tool, arguments, result, latency, status — as a readable flight recorder. Write-actions visibly stop at the approval boundary. The trace is what turns 'the agent did something' into an account a compliance officer can read.",
      "register": {
        "whenToUse": "Mandatory for any agent that calls tools with side effects. The trace is also the debugging surface — most agent failures are visible as a wrong argument, not a wrong model.",
        "whenNotTo": "Do not collapse the trace into a cute 'thinking…' spinner for professional users — opacity is a trust cost. Keep raw payloads one click deep, not in the row.",
        "a11yContract": "Rows are append-only and timestamped; write-actions show their gate state; the table is semantically a table (screen-reader navigable), with tool names in mono.",
        "anchor": "Mirrors the 17a-4 audit-trail register applied to agents: actor (agent), action (tool+args), outcome, and the human gate where one exists. NIST AI RMF 'traceability' made concrete.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-grounding",
      "name": "Grounding Indicator",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-grounding",
      "summary": "Claim-level verification rendered in the text itself: every factual claim in an AI draft is grounded (source linked), ungrounded (no source), or contradicted (source disagrees) — with the worst state visually loudest. This is the hallucination guard as a shipping component, not a research demo.",
      "register": {
        "whenToUse": "Run on any AI draft containing facts that will reach a client or a regulator — letters, summaries, reports. The component answers 'which sentence do I need to check' instead of 'is this whole thing trustworthy'.",
        "whenNotTo": "Do not gate casual internal chat on full grounding — the cost is real and the register is wrong. And never average the three states into one 'trust score'; a single contradicted number outweighs ten grounded ones.",
        "a11yContract": "Highlights are colour + underline-style dual-encoded; each claim links to its source or its absence; contradicted claims block one-click send until resolved or overridden with a logged reason.",
        "anchor": "FINRA 2210 prohibits false or misleading communications — claim-level grounding is the operational control. The override log is the evidence the control existed.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-feedback",
      "name": "Effective Challenge",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-feedback",
      "summary": "Two distinct instruments deliberately kept apart: lightweight thumbs (ranking telemetry) and a structured challenge with a typed defect taxonomy that routes to the model owner under an SLA. Conflating them is how 'effective challenge' degrades into a like button. Reg alignment: SR 11-7.",
      "register": {
        "whenToUse": "Deploy both wherever professionals consume model output: thumbs for cheap signal density, the challenge form for the failures that matter.",
        "whenNotTo": "Never let thumbs-down silently stand in for a defect report — a regulator will ask where challenges go, and 'into the ranking model' is the wrong answer.",
        "a11yContract": "The challenge form requires a defect class + free text; filing returns a tracking ID; resolution is reported back to the filer — the loop closes or the instrument dies.",
        "anchor": "SR 11-7 effective challenge requires documented, routed, answered criticism by qualified staff — the taxonomy, routing line, and SLA on this card are that requirement as UI.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-guardrail",
      "name": "Safety Guardrails",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-guardrail",
      "summary": "Real-time input/output moderation checking prompts and outputs against compliance guardrails.",
      "register": {
        "whenToUse": "Deploy as a sync interceptor on all public-facing LLM input and output streams to prevent jailbreaks and toxic generation.",
        "whenNotTo": "Do not use as a replacement for system prompts; guardrails act as a defense-in-depth secondary filter model (e.g., LlamaGuard).",
        "a11yContract": "Status badges transition dynamically; triggered rules are read sequentially by screen readers with explicit ARIA alert status.",
        "anchor": "EU AI Act Art. 50 transparency; CFTC Rule 1.51 order transmission verification requirements.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-rag-citation",
      "name": "RAG Citation Map",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-rag-citation",
      "summary": "Visual attribution mapping retrieved source chunks to specific model statements with similarity weights.",
      "register": {
        "whenToUse": "Essential for advisory and compliance reporting tools where claims must be verified by reference documents (prospectuses, SEC filings).",
        "whenNotTo": "Avoid for tasks not requiring factual evidence (e.g. code formatting, UI scaffolding generators).",
        "a11yContract": "Citations link to document overlays; screen readers read the full citation source name and context block via aria-details.",
        "anchor": "FINRA Rule 2210 communications with the public; SEC Investment Advisers Act compliance auditing.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-cost-tracker",
      "name": "Cost &amp; Token Budget",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-cost-tracker",
      "summary": "Real-time budget tracking slider and loop termination controls to manage agentic recursion expenses.",
      "register": {
        "whenToUse": "Incorporate on all agent playbooks and loop execution views to prevent recursive feedback-loop cost escalations.",
        "whenNotTo": "Not required for basic single-turn API calls with predictable execution overheads.",
        "a11yContract": "Dynamic token bars update with input range sliders; budget breach triggers a visible warn-status color shift and terminates further loops.",
        "anchor": "SOC 2 financial and operational control standards; corporate board fiduciary oversight requirements.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-agent-dag",
      "name": "Agent Loop Execution",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-agent-dag",
      "summary": "Directed execution graph illustrating the state, steps, and tool calls of autonomous multi-agent planning loops.",
      "register": {
        "whenToUse": "Use for compound workflows involving loops, retry limits, self-correction, or multi-model evaluations.",
        "whenNotTo": "Do not use for linear pipeline executions with no conditional routing. A simple timeline matches those use cases better.",
        "a11yContract": "Nodes are colored by operational state; interactive checkpoints require manual user sign-off to exit the loop; accessible labels trace path outcomes.",
        "anchor": "NIST AI Risk Management Framework Section 3 (Accountability &amp; Tracking); CFTC records for algorithmic order execution origins.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-uncertainty",
      "name": "Uncertainty Heatmap",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-uncertainty",
      "summary": "Visual attribution highlighting token-level log-probabilities to flag potential hallucinations and uncertain model statements.",
      "register": {
        "whenToUse": "Deploy in investment research generators, automated commentary tools, or reports where exact precision of numerical claims is critical.",
        "whenNotTo": "Do not show to regular consumers without plain-language explanations. The raw metrics are meant for analysts and risk assessors.",
        "a11yContract": "Uncertain words are highlighted (orange/red overlay based on entropy); keyboard focus triggers a popup menu displaying top alternate tokens.",
        "anchor": "SR 11-7 Model Risk Management (effective validation and uncertainty limits); ESMA rules for clear, not misleading client communication.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-adversarial",
      "name": "Adversarial Prompt Tester",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-adversarial",
      "summary": "Security validation panel displaying system leak protections, indirect injections, and prompt audit success scores.",
      "register": {
        "whenToUse": "Integrate in model evaluation pipelines and release staging environments to stress-test prompt injection barriers before deployment.",
        "whenNotTo": "Do not use for normal application functional QA. Adversarial testing specifically aims to break the safety alignment of LLMs.",
        "a11yContract": "Presents tabular threat assessment reports; security levels are color-coded (Red/Green indicators) and categorized with clear labels.",
        "anchor": "NIST AI Risk Management Framework (Adversarial Robustness guidelines); ISO/IEC 42001 (AI Management System Security).",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-rlhf-arena",
      "name": "RLHF Pairwise\n        Arena",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-rlhf-arena",
      "summary": "Analyst interface for pairwise model output evaluation to rate compliance, formatting, and alignment metrics.",
      "register": {
        "whenToUse": "Deploy in post-training alignment toolchains where expert operators label preference data for supervised fine-tuning.",
        "whenNotTo": "Avoid for direct end-user screens; consumers do not want to choose between multiple model outputs. Use single output interfaces instead.",
        "a11yContract": "Keyboard selectors (Option A vs B) mapped to numeric hotkeys; checkboxes for qualitative wins; clean column grids.",
        "anchor": "Institutional oversight of model parameters under SEC guidance; documented audit trails of human preference feedback.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-audit-registry",
      "name": "Audit Trail Registry",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-audit-registry",
      "summary": "Chained cryptographic block ledger to log model interactions, hashes, and timestamps, ensuring compliance record immutability.",
      "register": {
        "whenToUse": "Deploy on algorithmic execution, risk exception overrides, and compliance reporting logs where actions must survive external auditor scrutiny.",
        "whenNotTo": "Do not use when high-throughput logging of low-risk telemetry is required. Database audit tables are better for generic event tracking.",
        "a11yContract": "Blocks are visually linked with verification checks; copies hash values on single-click with visual success indicators.",
        "anchor": "SEC Rule 17a-4 (immutable data storage format requirement); FINRA Rule 4511 general compliance record keeping.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-schema-validator",
      "name": "Schema Validator",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-schema-validator",
      "summary": "Visual mapping converting raw LLM response text to strictly typed JSON objects with validation and coercion rules.",
      "register": {
        "whenToUse": "Use when connecting model-generated text outputs directly to transactional backend databases and execution systems requiring structural validation.",
        "whenNotTo": "Not necessary for free-form conversational chatbots where structured output is not passed to downstream APIs.",
        "a11yContract": "Displays side-by-side parsed fields; highlights validation errors, missing parameters, and automatic type conversions (coercions) with distinct alerts.",
        "anchor": "SEC Regulation Systems Compliance and Integrity (Reg SCI) strict operational data validation standards.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ai-attribution",
      "name": "Local Feature Attribution",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ai-attribution",
      "summary": "Attribution weights visualization mapping the positive and negative impact of specific variable vectors driving a model choice.",
      "register": {
        "whenToUse": "Use for explaining credit approvals, transaction classification, or high-risk algorithmic trading triggers where reasons must be auditable.",
        "whenNotTo": "Avoid in scenarios with thousands of complex inputs where aggregated feature importance is more representative than local attribution.",
        "a11yContract": "Attributes and weights are represented both visually (horizontal bars) and numerically (percentages); colors map to positive vs negative indicators.",
        "anchor": "Equal Credit Opportunity Act (ECOA) adverse action notice requirements; GDPR Article 22 explanation rights.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ml-modelcard",
      "name": "Model Card",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ml-modelcard",
      "summary": "The model's passport: version, owner, training window, headline metrics, intended use, and — most load-bearing — the known-limits panel stating what the model must NOT be used for. Rendered in product, not buried in a wiki. Reg alignment: SR 11-7 model documentation, EU AI Act Annex IV.",
      "register": {
        "whenToUse": "One card per deployed model, linked from every surface that consumes its scores. The intended-use and do-not-use sections are the contract between model team and product team.",
        "whenNotTo": "Not a research README — no hyperparameter dumps in the product view. If a model has no owner or no documented limits, the card's emptiness is the finding; don't pad it.",
        "a11yContract": "Version is mono and copyable; limits panel renders in the warning register and cannot be collapsed by default; metric definitions link to their evaluation protocol.",
        "anchor": "SR 11-7 requires documented purpose, design, and limitations; EU AI Act Annex IV requires the same for high-risk systems. The card is that documentation at the point of use.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ml-confusion",
      "name": "Confusion Matrix",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ml-confusion",
      "summary": "The four-cell truth table with business semantics attached: false negatives labelled as missed risk, false positives as analyst cost. Read together with the threshold tuner — the matrix is the evidence, the tuner is the decision.",
      "register": {
        "whenToUse": "Use when reviewing any binary classifier that gates real workflows — fraud, AML, churn. The matrix is the only honest summary of what a threshold choice does.",
        "whenNotTo": "Do not show accuracy as the headline on imbalanced data — 96.6% accuracy here would hide 56 missed-risk events. Lead with the error cells.",
        "a11yContract": "Cells are colour + label dual-encoded; counts are real counts (not percentages alone); each cell drills to the actual cases behind it.",
        "anchor": "AML model validation expects error analysis by consequence class — the matrix with business labels is the artifact examiners actually read.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ml-features",
      "name": "Feature Importance",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ml-features",
      "summary": "Global feature attribution (mean |SHAP|) as ranked bars with mono feature names — plus the caveat rendered into the component, because this chart gets screenshotted into policy decks: importance is association, not causation.",
      "register": {
        "whenToUse": "Use for model review, drift investigation, and explaining 'what drives the score' to risk committees. Pair with per-decision attribution for case-level questions.",
        "whenNotTo": "Never present as causal levers ('reduce feature X to lower risk') and never expose raw feature names that leak protected attributes — display names are a curated mapping.",
        "a11yContract": "Bars sort by magnitude with values printed (not colour-only); the list is a semantic list; feature names link to their definitions in the feature store.",
        "anchor": "Fair-lending and AML validation both ask 'what is the model using' — this surface answers it, and the curated display-name layer is the protected-attribute control.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ml-drift",
      "name": "Drift Monitor",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ml-drift",
      "summary": "Population-stability tracking with the thresholds drawn in (PSI 0.10 / 0.20 bands), the action state visible (retrain queued), and label-delay honesty — performance drift is invisible until labels arrive, so input drift is the early-warning system.",
      "register": {
        "whenToUse": "Standing surface for every production model — drift review is a calendar event, not an incident response. The threshold bands make 'how bad is 0.14' a settled question.",
        "whenNotTo": "Do not alert on every wiggle (alert fatigue kills the monitor) and do not wait for accuracy to drop — with a 41-day label delay, accuracy is a rear-view mirror.",
        "a11yContract": "Bands are encoded in colour AND stated numerically; the action state is part of the component; each month drills to the distribution comparison behind the score.",
        "anchor": "Ongoing monitoring is an explicit SR 11-7 and EU AI Act Art. 61 (post-market monitoring) obligation — this surface is the evidence it happens on schedule.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ml-experiments",
      "name": "Experiment Tracker",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ml-experiments",
      "summary": "Training runs as a disciplined ledger: config, metric, status — with reproducibility (data snapshot + commit + seed) as the admission rule and a fairness-report gate before any run can become a challenger.",
      "register": {
        "whenToUse": "The working surface for model iteration — and the provenance record for 'where did the production model come from', which is an audit question, not a curiosity.",
        "whenNotTo": "Not a leaderboard: do not sort by metric alone or the team will overfit the eval. Failed runs stay visible — deleted failures are how teams repeat them.",
        "a11yContract": "Status is colour + text; configs are copyable mono; each run links to its artefacts. The promote action is a gated workflow, not a button on this table.",
        "anchor": "SR 11-7 development evidence and EU AI Act record-keeping both expect exactly this trail from data to deployed weights.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ml-champion",
      "name": "Champion&ndash;Challenger",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ml-champion",
      "summary": "Side-by-side production model vs shadow candidate over a fixed evaluation window — with promotion gated on the full criteria set, so an accuracy win cannot buy its way past a fairness regression. The blocked state is the component's reason to exist.",
      "register": {
        "whenToUse": "The standard replacement path for any production model — challengers earn promotion in shadow on live traffic, never on offline eval alone.",
        "whenNotTo": "Do not run perpetual shadow without a decision date (zombie challengers), and never let a single headline metric decide — the gate is multi-criteria by construction.",
        "a11yContract": "Deltas are signed and colour-coded; the blocking criterion is named in plain language; the Promote control is disabled with the reason adjacent, and override is a routed sign-off, not a click.",
        "anchor": "SR 11-7 effective challenge and change-control expectations; fair-lending model governance. The blocked-promotion record is the strongest evidence the gates are real.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "b2bs-clm",
      "name": "Contract Lifecycle",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2bs-clm",
      "summary": "CLM kanban for enterprise sales ops: draft → redline → legal review → signature → active → renewal. SLA countdown, clause-change alerting, counterparty party-of-record tracker. Reg alignment: SOX §302, GDPR Art 28 DPA, e-signature compliance (eIDAS, UETA)."
    },
    {
      "id": "b2bs-usage-pricing",
      "name": "Usage-Based Pricing",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2bs-usage-pricing",
      "summary": "Metered billing simulator with tiered pricing, overage bands, volume discount curves, commit vs. true-up logic. Critical for FP&amp;A and sales-engineering alignment. Patterns: Stripe Billing, AWS tiered, Datadog per-host. Reg alignment: ASC 606 revenue recognition, SEC Rev Rec disclosure."
    },
    {
      "id": "b2bs-health",
      "name": "Customer Health Score",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2bs-health",
      "summary": "Composite health scoring blending product engagement, support sentiment, billing signals, contract renewal window, executive sponsorship attrition. Exposes the \"quiet-quit\" customers BEFORE they send non-renewal notice."
    },
    {
      "id": "b2bs-provisioning",
      "name": "Enterprise Provisioning",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2bs-provisioning",
      "summary": "Day-0 onboarding flow for enterprise buyers: workspace create → SSO (SAML/OIDC) bind → SCIM provisioning → role mapping → IP allow-list → domain claim. Post-DPA first-value under 30 minutes. Reg alignment: SOC 2 CC6.1/CC6.2, ISO 27001 A.9."
    },
    {
      "id": "b2bs-quota",
      "name": "Quota &amp; Rate Limit",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2bs-quota",
      "summary": "Per-tenant request ceiling visualization with token bucket state, burst allowance, auto-escalation recommendations. Surfaces the \"we're about to 429\" signal before customer calls support. Reg alignment: SOC 2 CC7.2 (monitoring), AWS Well-Architected Reliability Pillar."
    },
    {
      "id": "b2bs-incident",
      "name": "Incident Command",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2bs-incident",
      "summary": "Active-incident war room: severity badge, timeline with ROLE-prefixed updates (IC / COMMS / OPS), blast radius calculation, downstream dependency graph, customer comms staging. Pattern: PagerDuty × Statuspage × Atlassian SRE. Reg alignment: SOC 2 CC7.3 (incident response), ISO 27001 A.16."
    },
    {
      "id": "b2bs-audit-export",
      "name": "Audit Evidence Export",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2bs-audit-export",
      "summary": "One-pane evidence bundle builder for SOC 2, ISO 27001, PCI DSS auditors: access logs, change log, incident records, DPA history, backup restore evidence. Time-scoped, signed, tamper-evident. Reg alignment: SOC 2 AICPA TSC, ISO 27001 A.18, PCI DSS 10.7."
    },
    {
      "id": "b2bs-partner",
      "name": "Partner Portal",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2bs-partner",
      "summary": "Channel partner deal-registration flow with discount tier, named-account conflict resolution, co-sell marketing assets, commission tracker. Reg alignment: SOX revenue recognition for channel, anti-corruption FCPA/UKBA conflict-check."
    },
    {
      "id": "b2bs-waterfall",
      "name": "ARR Waterfall",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2bs-waterfall",
      "summary": "Period-over-period ARR composition: new logo · expansion · contraction · churn · reactivation. The GAAP-aligned view finance + BOD expect on every QBR. Reg alignment: ASC 606, SaaS metric SEC disclosure comment-letter patterns."
    },
    {
      "id": "b2bs-sso-scim",
      "name": "SSO / SCIM Console",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-b2bs-sso-scim",
      "summary": "IdP identity bridge ongoing state: active session count, SCIM provisioning delta, group → role mapping health, JIT provisioning toggle, session policy (idle timeout, MFA enforcement). Reg alignment: SOC 2 CC6.1 · ISO 27001 A.9.2 · NIST SP 800-63B authenticator assurance."
    },
    {
      "id": "tk-cost",
      "name": "Token Cost",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-tk-cost",
      "summary": "Estimate per-request and per-1k-call spend from input/output token counts and per-million pricing. Preset chips load common model tiers.",
      "register": {
        "whenToUse": "Sizing the unit economics of an AI feature before committing to a model tier, or comparing vendors at a glance.",
        "whenNotTo": "For finalized billing reconciliation use the provider's metered invoice — this is a planning estimate, not an authoritative ledger.",
        "a11yContract": "Recalculates on every input; preset chips are toggle buttons with aria-pressed; numeric fields are labelled and keyboard-operable.",
        "anchor": "Frontier models price output ~5x input; mid/small tiers trade quality for an order-of-magnitude lower blended cost.",
        "anchorType": "domain"
      }
    },
    {
      "id": "tk-estimate",
      "name": "Tokenizer Est.",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-tk-estimate",
      "summary": "Approximate the token footprint of arbitrary text as a range, with live character and word counts.",
      "register": {
        "whenToUse": "Quickly gauging whether a prompt, document, or system message fits a budget before sending it to a real tokenizer or API.",
        "whenNotTo": "For exact accounting use the model's own tokenizer (tiktoken, etc.) — heuristics drift on code, CJK, and emoji.",
        "a11yContract": "Updates on input; the estimate region is aria-live=\"polite\" so screen readers hear the running range without focus loss.",
        "anchor": "English averages ~4 chars/token; the words×1.3 upper bound captures subword splits on rarer vocabulary.",
        "anchorType": "domain"
      }
    },
    {
      "id": "tk-context",
      "name": "Context Budget",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-tk-context",
      "summary": "Visualize how much of a model's context window is consumed, with near-limit and overflow warnings.",
      "register": {
        "whenToUse": "Monitoring a long conversation, RAG payload, or document load against the active model's window ceiling.",
        "whenNotTo": "Not a substitute for runtime truncation logic — it informs the user, the application still has to enforce the cap.",
        "a11yContract": "The meter is a role=\"progressbar\" with aria-valuenow/min/max; overflow raises a role=\"alert\" so assistive tech announces it.",
        "anchor": "Exceeding the window truncates the oldest tokens silently — surfacing the ≥80% threshold prevents lost-context failures.",
        "anchorType": "domain"
      }
    },
    {
      "id": "tk-cache",
      "name": "Cache Savings",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-tk-cache",
      "summary": "Model the dollar and percentage savings from caching a portion of repeated input tokens.",
      "register": {
        "whenToUse": "Deciding whether a large stable system prompt or context block justifies enabling prompt caching.",
        "whenNotTo": "Skip when prompts are unique per call — caching only pays off above a hit-rate and cache-lifetime break-even.",
        "a11yContract": "Percentage inputs clamp to 0–100; results recompute live and are exposed via an aria-live region.",
        "anchor": "Cached input tokens commonly bill at ~10% of base rate, so a 90% discount on a high-cache-hit prompt slashes blended cost.",
        "anchorType": "domain"
      }
    },
    {
      "id": "tk-stream",
      "name": "Stream Meter",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-tk-stream",
      "summary": "Simulate a streaming generation to show time-to-first-token, throughput, and a growing token count.",
      "register": {
        "whenToUse": "Demonstrating perceived-latency behaviour of streaming UIs, or prototyping a live generation indicator.",
        "whenNotTo": "This is a simulation; wire to real SSE/stream events for production telemetry rather than synthetic timing.",
        "a11yContract": "Run is disabled mid-stream; reduced-motion users jump straight to the final state; the feed is aria-live=\"polite\".",
        "anchor": "TTFT and tokens/sec are the two metrics that govern how fast a generation *feels* — independent of total length.",
        "anchorType": "domain"
      }
    },
    {
      "id": "dx-schema",
      "name": "Schema Editor",
      "domain": "data",
      "url": "https://edwson.com/design-system-showcase.html#sec-dx-schema",
      "summary": "Define a table's columns — name, type, nullability — and watch a typed schema table and a CREATE TABLE DDL regenerate live. The contract a data scientist hands to engineering before a single row is written.",
      "register": {
        "whenToUse": "When authoring a data contract or table definition collaboratively — analysts specify intent, the DDL is the artifact engineering ships.",
        "whenNotTo": "For free-form exploratory CSVs use schema-on-read inference instead; this is for governed, schema-on-write tables.",
        "a11yContract": "Each row is a labelled fieldset; type is a native &lt;select&gt;, nullable a real checkbox; DDL updates on any change. Remove buttons carry aria-labels.",
        "anchor": "Mirrors schema-on-write data contracts (dbt models, Delta table DDL). The NOT NULL constraint is the cheapest data-quality control there is — enforced at write time, not discovered at query time.",
        "anchorType": "domain"
      }
    },
    {
      "id": "dx-quality",
      "name": "Quality Profiler",
      "domain": "data",
      "url": "https://edwson.com/design-system-showcase.html#sec-dx-quality",
      "summary": "Per-column null-rate, distinct cardinality and a PASS/WARN verdict over a profiled sample — the first thing a data scientist checks before trusting a feature. Frames bad data as downstream cost, not just a number.",
      "register": {
        "whenToUse": "At ingestion or before model training — to catch null-heavy or low-cardinality columns before they silently degrade a pipeline.",
        "whenNotTo": "Not a replacement for a full great-expectations / Deequ suite; this is the at-a-glance triage layer above it.",
        "a11yContract": "Bars carry numeric text alongside (never colour-only); WARN flags use a labelled badge plus a written threshold so the verdict is screen-reader legible.",
        "anchor": "Standard column profiling (null-rate, distinct count) as run by data-profiling jobs. A 20%+ null rate on a feature column is a recall-time surprise — surface it at ingest.",
        "anchorType": "domain"
      }
    },
    {
      "id": "dx-lineage",
      "name": "Lineage DAG",
      "domain": "data",
      "url": "https://edwson.com/design-system-showcase.html#sec-dx-lineage",
      "summary": "Source → transform → table provenance as a clickable directed graph. Click any node to light up everything upstream (where it came from) and downstream (what breaks if it changes). Impact analysis at a glance.",
      "register": {
        "whenToUse": "For impact analysis before a schema change, or root-cause when a downstream dashboard goes stale — trace the dependency chain.",
        "whenNotTo": "For hundreds of nodes use a dedicated lineage tool (OpenLineage / Unity Catalog); this is a focused single-pipeline view.",
        "a11yContract": "Nodes are real buttons, keyboard-activatable; selection state is announced; connectors are decorative SVG with the relationship also encoded in node borders, not colour alone.",
        "anchor": "Column- and table-level lineage as captured by OpenLineage / dbt graphs. Provenance is the precondition for trust — and for GDPR / data-residency audits.",
        "anchorType": "domain"
      }
    },
    {
      "id": "dx-grid",
      "name": "Query Grid",
      "domain": "data",
      "url": "https://edwson.com/design-system-showcase.html#sec-dx-grid",
      "summary": "A query result set with a type chip on every column header and click-to-sort with stable type-aware ordering (numbers numerically, timestamps chronologically). The grid an analyst stares at all day, done right.",
      "register": {
        "whenToUse": "To render the output of an ad-hoc query or notebook cell where column types and quick re-sorting matter.",
        "whenNotTo": "For million-row result sets use a virtualised grid with server-side sort; this is for the typical sampled preview.",
        "a11yContract": "Headers are keyboard-operable, carry aria-sort, and sort is type-aware not lexical. The rows/latency footer reports the actual rendered count.",
        "anchor": "The result-grid contract of any warehouse client (Databricks SQL, BigQuery console). Type-correct sorting prevents the classic \"string-sorted numbers\" analyst error.",
        "anchorType": "domain"
      }
    },
    {
      "id": "dx-delta",
      "name": "Version Diff",
      "domain": "data",
      "url": "https://edwson.com/design-system-showcase.html#sec-dx-delta",
      "summary": "Compare two snapshots of a table (v1 vs v2): rows added, changed, removed, with a colour-and-label-coded change list. The Delta-Lake time-travel idea — answer \"what changed between yesterday's run and today's?\" without re-querying raw logs.",
      "register": {
        "whenToUse": "To audit a pipeline run, validate a backfill, or explain a metric jump — diff two versions instead of diffing in your head.",
        "whenNotTo": "For schema (not row) drift use the schema editor's contract diff; this compares row-level state between versions.",
        "a11yContract": "Every change carries a text badge (ADDED / CHANGED / REMOVED), not just colour; old→new values are shown inline so the delta is readable without colour vision.",
        "anchor": "Delta Lake / Iceberg time-travel and DESCRIBE HISTORY. Version diffing turns \"the numbers moved\" into an attributable, auditable change set.",
        "anchorType": "domain"
      }
    },
    {
      "id": "osx-adaptive",
      "name": "Cross-Platform",
      "domain": "patterns",
      "url": "https://edwson.com/design-system-showcase.html#sec-osx-adaptive",
      "summary": "The same component across four operating systems and eight browsers. The OS sets window chrome, fonts, scrollbars, and ⌘/Ctrl grammar; the browser's engine (Blink, Gecko, WebKit) sets what CSS resolves. One token set with defensive @supports fallbacks — native feel everywhere, broken layout nowhere.",
      "register": {
        "whenToUse": "Any surface shipped to more than one OS — desktop trading terminals, Electron back-office tools, web apps that must feel native on macOS, Windows, GNOME, and Ubuntu alike.",
        "whenNotTo": "Don't hand-paint OS chrome inside a real native or Electron app — let the OS draw its own title bar. This pattern is for previews, embedded simulations, and design documentation, not for overriding the host window manager.",
        "a11yContract": "OS switch is a button group with aria-pressed; the live region announces the active OS. Control clusters use logical placement so the layout mirrors correctly under RTL. Reduced-motion disables all transitions. Window controls are decorative (aria-hidden) — never the only path to an action.",
        "anchor": "Cross-platform consistency via system font stacks (-apple-system, Segoe&nbsp;UI, Ubuntu/Cantarell), logical properties for direction-safe layout, and native conventions (control side, scrollbar weight, ⌘ vs Ctrl, locale formatting) so intent stays identical while the surface feels at home on each desktop.",
        "anchorType": "domain"
      }
    },
    {
      "id": "ag-builder",
      "name": "Agent Builder",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ag-builder",
      "summary": "A NotebookLM-style editor where an agent is nothing more than a markdown file plus a list of source URLs. Seed from a template, edit the form, and watch agent.md regenerate live — copy-ready frontmatter and all.",
      "register": {
        "whenToUse": "When a user needs to template, fork, or hand-tune an AI agent and wants the underlying agent.md contract to stay visible and version-controllable instead of hidden behind a settings panel.",
        "whenNotTo": "Not for runtime chat or tool execution — this only authors the definition. For a multi-agent roster use the Cluster Manager; for keyword-routed skills use the Skill Card Editor.",
        "a11yContract": "Every keystroke re-renders the markdown deterministically; all typed text is HTML-escaped before injection. Inputs carry real labels, the model picker is a native &lt;select&gt;, and source rows are keyboard-removable. Reduced-motion safe.",
        "anchor": "An agent is a versionable markdown contract: YAML frontmatter (name, role, model, sources) over a system-prompt body. A cluster of these is just a folder of .md files — diffable, reviewable, portable.",
        "anchorType": "domain"
      }
    },
    {
      "id": "ag-skill",
      "name": "Skill Card",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ag-skill",
      "summary": "A skill is a SKILL.md plus trigger keywords and resource URLs. The description here is not prose for a human — it is the routing signal the keyword matcher reads to decide whether to pull this skill in.",
      "register": {
        "whenToUse": "When authoring a narrow, keyword-triggered capability that the agent loader should grab automatically — the description and triggers are tuned for the matcher, not for a reader.",
        "whenNotTo": "Not for full conversational agents with a persona and model — use the Agent Definition Builder. Skills are leaf capabilities a parent agent routes to.",
        "a11yContract": "Keyword chips and resource rows add/remove live; the SKILL.md preview re-renders on every change with all text HTML-escaped. Chips are removable via a labelled control. Reduced-motion safe.",
        "anchor": "Description-as-routing-signal: the matcher reads the description + triggers to score relevance, so they are written to be grabbed by keyword. A skill is a versionable markdown contract that lives beside its agents in the cluster folder.",
        "anchorType": "domain"
      }
    },
    {
      "id": "ag-registry",
      "name": "Cluster Manager",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ag-registry",
      "summary": "A cluster is just a folder of markdown files. Search by keyword to see how the matcher grabs the right one, toggle each between Enabled and Draft, and watch the enabled count update live.",
      "register": {
        "whenToUse": "When organizing a mixed roster of agents and skills — enabling, drafting, and finding the one the router will pick by keyword across name, description, and triggers.",
        "whenNotTo": "Not for editing a single definition's body — open it in the Agent or Skill editor. This is the folder-level view, not the file-level view.",
        "a11yContract": "The search box filters the roster live on input (name + keywords + description); status toggles are real buttons with aria semantics conveyed by visible text. The summary recomputes on every toggle. Reduced-motion safe.",
        "anchor": "A cluster is a folder of .md files. Keyword search demonstrates description-as-routing-signal — the AI grabs the right contract by keyword, exactly as the loader does at runtime.",
        "anchorType": "domain"
      }
    },
    {
      "id": "ag-team",
      "name": "Expert Team",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ag-team",
      "summary": "Switch the domain preset to swap the roster of AI agents, toggle each member active or inactive, and watch the live \"active team\" summary recompose the auditable workflow.",
      "register": {
        "whenToUse": "When a single-pass AI output needs an adversarial, multi-role team to harden it &mdash; a composable roster where each agent owns one accountability (ceiling, attack, de-AI, quantification, distribution).",
        "whenNotTo": "For a throwaway draft with no review bar, skip the team &mdash; use a plain prompt. Don't compose a five-agent pipeline for a one-line answer; the governance overhead is the point only when stakes are real.",
        "a11yContract": "Preset buttons are aria-pressed radio-style; agent toggles are role=\"switch\" with aria-checked, keyboard-operable, and update an aria-live summary. Reduced-motion safe; dual-theme via tokens only.",
        "anchor": "An agent team is a composable, auditable workflow: adversarial review + quantification + de-AI become governance primitives, not vibes. Every output passes a hardcore buyer, a data officer, and a humanizer before it ships.",
        "anchorType": "domain"
      }
    },
    {
      "id": "ag-sop",
      "name": "Adversarial SOP",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-ag-sop",
      "summary": "A clickable four-step pipeline &mdash; Diagnostic, Debate, Humanizing, Final &mdash; showing which agents act at each stage, plus the hard constraints and the fixed output format the team must obey.",
      "register": {
        "whenToUse": "When you need a repeatable standard operating procedure that forces raw input through blind diagnosis, adversarial debate, de-AI humanizing, and a final optimized version &mdash; so quality is procedural, not accidental.",
        "whenNotTo": "If the input is already validated and shipped, don't re-run the full SOP &mdash; use a lightweight spot-check. Skipping the Debate step to save time defeats the governance value; if you can't afford the attack, you can't afford the claim.",
        "a11yContract": "Stepper is a tablist with aria-selected steps and a linked tabpanel detail; arrow-key and click navigation, focus-visible. Static Constraints and Output-format panels are always readable. Tokens-only theming, reduced-motion safe.",
        "anchor": "Adversarial review + quantification + de-AI form one governance pipeline: every claim is challenged for real user/business benefit, quantified to a result (cost &darr;, ROI &uarr;, efficiency &times;2), and stripped of AI-tone before the optimized version is allowed out.",
        "anchorType": "domain"
      }
    },
    {
      "id": "clx-topology",
      "name": "AI Cluster Topology",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-clx-topology",
      "summary": "An EXO-style distributed inference cluster shown two ways at once: human-readable node cards on the left, and the machine-readable manifest an AI orchestrator consumes on the right. Same cluster, two readable forms — both regenerate on every change.",
      "register": {
        "whenToUse": "When you run models on-prem across several machines and need operators to grasp the cluster shape in seconds while agents read the same state as structured config.",
        "whenNotTo": "Not for single-device inference or cloud-hosted endpoints. If one machine holds the model, skip the cluster framing and show a plain model card instead.",
        "a11yContract": "Add/remove are real buttons with text labels; pooled-memory readout updates live and is announced via a polite live region. Manifest mirrors the visual state exactly so neither view drifts.",
        "anchor": "On-prem &amp; data-residency: nothing leaves the building. Pooled unified memory (est.) lets a cluster run models larger than any one device. Human view + machine manifest keep cluster state legible to both audiences.",
        "anchorType": "domain"
      }
    },
    {
      "id": "clx-fit",
      "name": "Model Fit &amp; Sharding",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-clx-fit",
      "summary": "Estimate whether a model fits the cluster's pooled memory at a given quantization and context, then show how EXO would shard it across nodes weighted by each device's memory.",
      "register": {
        "whenToUse": "Before committing a model to a cluster — to sanity-check fit, headroom, and how the weights spread across heterogeneous devices under topology-aware auto-parallelism.",
        "whenNotTo": "Not a substitute for a real load test. Estimates exclude activation spikes and framework overhead beyond the flat KV margin; benchmark before production.",
        "a11yContract": "Native selects and number input; verdict text states FITS / DOESN'T FIT in words plus headroom %, not colour alone. Shard bar segments carry text labels and recompute on every input change.",
        "anchor": "EXO topology-aware parallelism splits a model from a realtime resource view; tensor parallel cites EXO's published 1.8× (2 devices) / 3.2× (4 devices). All memory figures labelled est.",
        "anchorType": "domain"
      }
    },
    {
      "id": "clx-serve",
      "name": "Distributed Inference",
      "domain": "ai",
      "url": "https://edwson.com/design-system-showcase.html#sec-clx-serve",
      "summary": "Simulate a streamed completion fanning across the cluster ring — tokens/sec climbing, nodes lighting up — backed by the OpenAI / Claude / Ollama-compatible API EXO serves at localhost:52415.",
      "register": {
        "whenToUse": "To demonstrate that the cluster serves a drop-in compatible endpoint, and to visualise that a single request is computed collaboratively across participating nodes.",
        "whenNotTo": "This is a UI simulation, not a live benchmark. For real throughput numbers, run the model and read EXO's dashboard at :52415 rather than this animation.",
        "a11yContract": "Send is a button; the stream uses requestAnimationFrame and snaps to the final state under prefers-reduced-motion. The curl block is selectable text, not an image.",
        "anchor": "EXO exposes OpenAI Chat Completions, Claude Messages and Ollama-compatible APIs on-prem; the same request runs across the pooled cluster, keeping inference and data inside your network.",
        "anchorType": "domain"
      }
    },
    {
      "id": "pay-rail",
      "name": "Payment Rails",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-pay-rail",
      "summary": "Pick a money-movement rail and read its real trade-offs live — settlement speed, cost, cut-off, finality, and limit. The same rail metadata an AI agent weighs before routing a payment.",
      "register": {
        "whenToUse": "Any send-money flow where the rail materially changes speed, cost, or finality and the payer (or an agent) must choose between them.",
        "whenNotTo": "Single-rail products — show a static rail badge, not a chooser of one. Never imply a choice that doesn't exist.",
        "a11yContract": "Rails are real buttons in a group; each announces speed + cost + finality as text. Irrevocable rails say so in words, never colour alone; the cut-off is text.",
        "anchor": "NACHA Operating Rules (ACH), ISO 20022 (wire / RTP messaging), Reg E 12 CFR 1005 (consumer EFT). Finality and return rights differ by rail and are stated, not hidden.",
        "anchorType": "domain"
      }
    },
    {
      "id": "pay-track",
      "name": "Money Movement",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-pay-track",
      "summary": "Walk a payment through its lifecycle — initiated, risk hold, clearing, settled — or post a return with a real NACHA return code. Honest about which stages a rail actually has.",
      "register": {
        "whenToUse": "After a payment is submitted, on any status surface the payer or an ops team sees while funds are in flight.",
        "whenNotTo": "Instant, irreversible rails with no intermediate states — a single settled badge is honest; don't fake stages that don't exist.",
        "a11yContract": "Status is a live region; the stage list is ordered with the current stage marked in text. Return codes resolve to plain-language meaning, not just a code.",
        "anchor": "NACHA return codes (R01&ndash;R85), Reg E error resolution (12 CFR 1005.11), ISO 20022 pacs.002 status report. The reversibility window is stated explicitly.",
        "anchorType": "domain"
      }
    },
    {
      "id": "pay-fx",
      "name": "FX Quote Ticket",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-pay-fx",
      "summary": "Quote a cross-currency transfer with the markup over mid-market shown in the open — you-send, they-receive, fee, and a re-pricing timer. Transparency is the design.",
      "register": {
        "whenToUse": "Any multi-currency send where the rate and fee must be disclosed before the user commits.",
        "whenNotTo": "Same-currency transfers — no FX surface, and never invent a rate to fill the space.",
        "a11yContract": "Rate-expiry is counted-down text in a live region; the markup over mid-market is a separate, explicit line — never folded silently into the rate.",
        "anchor": "Reg E remittance rule (12 CFR 1005 Subpart B), consumer FX transparency (mid-market disclosure), PSD2 (EEA payment transparency). Rates here are indicative.",
        "anchorType": "domain"
      }
    },
    {
      "id": "pay-recon",
      "name": "Reconciliation",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-pay-recon",
      "summary": "Match statement lines against ledger entries — matched, unmatched, exception — with a confidence read and a manual-match path that leaves an audit note. Post-settlement, not a gate.",
      "register": {
        "whenToUse": "Treasury, ops, or finance surfaces reconciling money movement to the ledger after settlement.",
        "whenNotTo": "Real-time pre-trade checks — this is post-settlement reconciliation, not an execution gate. Use a pre-trade control there.",
        "a11yContract": "Match state carries a text label plus icon, never colour alone; manual-match is keyboard-operable and reversible, and writes an audit line.",
        "anchor": "SOC 1 / ICFR (reconciliation control), ISO 20022 camt.053 (bank statement), SEC 17a-4 (audit-trail retention where applicable).",
        "anchorType": "domain"
      }
    },
    {
      "id": "pay-retry",
      "name": "Retry &amp; Dunning",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-pay-retry",
      "summary": "Recover a failed charge intelligently: the reason code decides whether to retry on a schedule or stop and ask for a new method. Not every decline should be retried.",
      "register": {
        "whenToUse": "Subscription or billing surfaces after a recurring charge fails and you must decide retry vs. require-update.",
        "whenNotTo": "One-time payments with no recurring relationship — a single error + retry is enough; no dunning ladder.",
        "a11yContract": "The reason code is translated to plain language; the retry schedule is text; the update-method CTA is the primary action, never buried.",
        "anchor": "Reg E (consumer EFT), card-network retry rules (Visa / Mastercard), PSD2 SCA (re-authentication on method update). Hard declines are never retried.",
        "anchorType": "domain"
      }
    },
    {
      "id": "pay-mandate",
      "name": "Debit Mandate",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-pay-mandate",
      "summary": "Capture a pull-debit authorization the way regulation expects — payee, amount cap, frequency — with the live mandate text and a revoke path as easy to find as grant.",
      "register": {
        "whenToUse": "Setting up any pull-based recurring debit where the payer must authorize in advance.",
        "whenNotTo": "Push payments the user initiates each time — there is no standing mandate to capture, so don't ask for one.",
        "a11yContract": "The authorization text is readable before consent; revoke is as findable as grant; consent state (draft / active / revoked) is announced in text.",
        "anchor": "NACHA authorization rules (WEB / PPD / CCD), SEPA Direct Debit Mandate (Rulebook), Reg E preauthorized transfers (12 CFR 1005.10).",
        "anchorType": "domain"
      }
    },
    {
      "id": "pay-payout",
      "name": "Payout Schedule",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-pay-payout",
      "summary": "Show a payee when money lands: available, in-transit, next payout date, and a rolling reserve that moves as you change the hold — the marketplace seller's mental model, made legible.",
      "register": {
        "whenToUse": "Marketplace or platform payout surfaces where sellers or contractors track money owed and when it arrives.",
        "whenNotTo": "Instant-settlement contexts with no schedule — show a single balance, not a timeline that implies waiting.",
        "a11yContract": "Amounts are tabular-aligned with explicit currency; the next-payout date is text; the reserve hold is explained, not just shown as a number.",
        "anchor": "Money-transmission / payout licensing (state MTL where applicable), IRS 1099-K reporting thresholds, rolling-reserve disclosure.",
        "anchorType": "domain"
      }
    },
    {
      "id": "txn-deposit",
      "name": "Deposit",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-txn-deposit",
      "summary": "Add money to a balance and see the real cost of each method up front — card vs ACH vs wire vs instant rail — with the fee, ETA, and resulting balance computed live.",
      "register": {
        "whenToUse": "Any add-funds surface where the method changes fee and speed and the user should choose with eyes open.",
        "whenNotTo": "Not for a single funding method — show a static method row, not a chooser. Never hide the card processing fee.",
        "a11yContract": "Method is a labelled control; fee and ETA update as text; the resulting balance is announced, not just colour-coded.",
        "anchor": "NACHA (ACH) · ISO 20022 (wire / RTP) · card-network interchange + processing-fee disclosure (Reg E for consumer EFT).",
        "anchorType": "domain"
      }
    },
    {
      "id": "txn-withdraw",
      "name": "Withdrawal",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-txn-withdraw",
      "summary": "Move money out to a linked bank with the guardrails that matter — available balance, daily limit, and a clear blocked state when a rule is hit, not a silent failure at submit.",
      "register": {
        "whenToUse": "Any cash-out surface where balance and velocity limits gate the action.",
        "whenNotTo": "Not where there are no limits or holds; do not fabricate a limit to look secure. Never let an over-limit amount reach submit.",
        "a11yContract": "Limit and balance checks resolve to a text BLOCKED / OK state with the reason; the disabled reason is announced, never colour-only.",
        "anchor": "Reg E (consumer EFT) · BSA velocity / structuring monitoring · NACHA (ACH) and ISO 20022 (RTP) for the outbound rail.",
        "anchorType": "domain"
      }
    },
    {
      "id": "txn-detail",
      "name": "Transaction Detail",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-txn-detail",
      "summary": "The full record for one transaction — amount, status, counterparty, rail, fee, timestamps, and reference — the canonical &ldquo;tap a row to see everything&rdquo; surface, with status in words.",
      "register": {
        "whenToUse": "Any drill-in from a list where the user needs the complete, citable record of a single movement.",
        "whenNotTo": "Not as the list itself (use Transaction History); not a place to bury the status behind an icon with no label.",
        "a11yContract": "Status carries a text label plus badge; the amount sign is explicit (+ / −); every field is selectable text for support and audit.",
        "anchor": "ISO 20022 references (end-to-end + transaction id) · SEC 17a-4 / SOC 1 audit-trail retention · Reg E dispute reference.",
        "anchorType": "domain"
      }
    },
    {
      "id": "txn-history",
      "name": "Transaction History",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-txn-history",
      "summary": "A filterable ledger: search and filter by type, each row showing direction, description, signed amount, and status — the everyday statement view, fast to scan and honest about pending items.",
      "register": {
        "whenToUse": "Account, wallet, or treasury surfaces where users review what moved and when.",
        "whenNotTo": "Not for a single record (use Transaction Detail); not where realtime streaming is required — this is a settled-ledger view.",
        "a11yContract": "Filter tabs are buttons with pressed state; search is a labelled field; pending vs settled is stated in text on every row.",
        "anchor": "ISO 20022 camt.053 (statement) · SEC 17a-4 retention · Reg E 60-day error-resolution window surfaced per row where relevant.",
        "anchorType": "domain"
      }
    },
    {
      "id": "txn-log",
      "name": "Activity &amp; Audit Log",
      "domain": "financial",
      "url": "https://edwson.com/design-system-showcase.html#sec-txn-log",
      "summary": "An append-only event log — sequence number, severity, timestamp, and a short integrity hash per entry. Append new events; existing rows never mutate, which is the whole point of an audit trail.",
      "register": {
        "whenToUse": "Compliance, security, and ops surfaces that must show who did what, when — and prove it was not edited after the fact.",
        "whenNotTo": "Not for user-facing notifications (those are dismissible); not a place to allow deleting or editing past entries.",
        "a11yContract": "New entries prepend; past entries are immutable; severity is a text label; the log region is announced as a live region.",
        "anchor": "SEC 17a-4(f) WORM retention · SOC 2 audit logging · append-only with per-entry hash chaining for tamper-evidence.",
        "anchorType": "domain"
      }
    },
    {
      "id": "cfe-forensic",
      "name": "Forensic Data Auditor",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-cfe-forensic",
      "summary": "Real-time ledger scanning and anomaly profiling interface. Designed for Certified Fraud Examiners (CFE) and data compliance managers to screen training or inference datasets for mathematical anomalies, duplicate sequence injections, and rounding irregularities before AI processing. Reg alignment: SEC Rule 17a-4 data integrity, CFE Forensic Standards.",
      "register": {
        "whenToUse": "Deploy as a gatekeeper dashboard when feeding external or client-submitted financial telemetry logs into LLM scoring models. Essential to detect AI poisoning and transaction falsification.",
        "whenNotTo": "For raw text, document schemas, or code repositories. If auditing system actions rather than dataset inputs, use ongoing AML Monitoring Queues or Audit Trail Registries.",
        "a11yContract": "Interactive table uses distinct visual borders and aria-live terminal output. Screen readers receive updates on logs and analysis status. Focus targets are keyboard accessible.",
        "anchor": "SEC Rule 17a-4 and FINRA Rule 4511 require pristine, auditable, and immutable books and records. Downstream model audits depend on proof of untampered source datasets.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "cfe-precision",
      "name": "High-Precision Monitor",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-cfe-precision",
      "summary": "A dense ledger and micro-transaction rounding auditor. Displays values up to 8 decimal places to reveal sub-penny rounded remainders and intercept salami-slicing fraud signatures (the redirection of tiny fractional remnants to unauthorized vaults). Reg alignment: GAAP general ledger rules, ISDA Clause 8 netting protocols.",
      "register": {
        "whenToUse": "Required in blockchain-based custody systems, high-frequency currency arbitrage netting dashboards, and algorithmic commodity execution screens where micro-fractions aggregate into significant value.",
        "whenNotTo": "For standard consumer banking apps or fiat credit card checkout screens where the legal limit of resolution is exactly 2 decimal places. Use plain Price Displays there.",
        "a11yContract": "Renders fractional differences in monospace. Highlight states use distinct sign indicators (+ / -) in addition to red/green colors for colorblind accessibility. Announces threshold triggers to screen readers.",
        "anchor": "ISDA contracts require strict precision rounding adherence. GAAP requires complete double-entry verification of all decimal residuals. Programmatic theft targets these invisible remainders.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "cfe-ai-report",
      "name": "AI Markdown Auditor",
      "domain": "compliance",
      "url": "https://edwson.com/design-system-showcase.html#sec-cfe-ai-report",
      "summary": "An interactive parser that validates AI-generated markdown reports against primary ledger facts. Downstream components automatically compare numerical claims inside structured AI outputs against verified databases, marking claims as Verified (green) or Hallucinated (red) with inline links to sources. Reg alignment: EU AI Act Article 13 transparency, SEC Rule 10b-5 truthfulness.",
      "register": {
        "whenToUse": "Required whenever presenting unstructured AI analysis to clients or legal compliance personnel. Prevents AI hallucinations from entering formal files or client notifications.",
        "whenNotTo": "If reports contain no numerical claims or are entirely generated from hardcoded static rules. If the model operates in a closed loop with no natural language output, use Calibrated Confidence Badges.",
        "a11yContract": "Markdown elements render with accessible headings. Verified tags are keyboard focusable buttons with tooltip announcements describing the database query hash and timestamp.",
        "anchor": "EU AI Act transparency guidelines mandate that outputs from generative AI must be traceable to verification anchors. SEC 10b-5 forbids any material misstatements of fact.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "cs-chat",
      "name": "Live Support Chat",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-cs-chat",
      "summary": "An embeddable conversational support surface: presence indicator, agent and customer message bubbles, a typing indicator, quick-reply deflection chips, and a composer. Built so a self-serve answer can resolve the contact before it ever reaches a human agent.",
      "register": {
        "whenToUse": "For real-time, low-latency support where a customer expects a person or a bot to answer now — billing disputes, account access, or order status. Pair with quick-reply chips to deflect the common 60%.",
        "whenNotTo": "For complex, document-heavy cases that need attachments and an audit trail, route to a Support Ticket. For broad self-service, lead with Help Center search before opening a live channel.",
        "a11yContract": "Message log is an aria-live=\"polite\" region; new messages announce without stealing focus. Quick-reply chips are real buttons, keyboard-operable with visible focus. Typing indicator is decorative (aria-hidden) and respects reduced-motion.",
        "anchor": "In regulated finance, chat transcripts are business records under SEC Rule 17a-4 / FINRA 4511 — the surface must support retention and supervision. Disclosures given in chat carry the same weight as any other channel.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "cs-ticket",
      "name": "Support Ticket &amp; SLA",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-cs-ticket",
      "summary": "The agent-side record for an asynchronous case: subject, priority and channel badges, a live SLA countdown that shifts colour as the deadline approaches, and a status stepper from New through Resolved. The SLA bar makes \"are we about to breach?\" pre-attentive.",
      "register": {
        "whenToUse": "For cases that persist across sessions and agents — anything needing attachments, internal notes, or a handoff. The SLA bar belongs anywhere a contractual response time is promised.",
        "whenNotTo": "For instant, single-turn questions use Live Chat. Do not use a ticket to surface a system-wide outage — that is a Banner / status-page concern, not a per-customer record.",
        "a11yContract": "Status uses an icon + text label, never colour alone. The stepper is keyboard-operable; advancing status moves focus logically. SLA percentage is exposed as text, not just bar width, for screen readers.",
        "anchor": "Complaint handling in regulated finance (e.g. FCA DISP, ASIC RG 271) sets mandatory response and resolution timeframes — the SLA clock is a compliance instrument, not just an ops metric.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "cs-helpcenter",
      "name": "Help Center Search",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-cs-helpcenter",
      "summary": "A self-service deflection surface: instant, type-ahead article suggestions over a known knowledge base, with a contact escalation when nothing matches. The job is to resolve the question before it becomes a ticket — and to fail gracefully into a human channel when it can't.",
      "register": {
        "whenToUse": "As the first surface in any support flow. Lead with search so the high-frequency \"how do I…\" questions self-resolve, reserving live agents for genuinely novel or sensitive cases.",
        "whenNotTo": "Do not hide an account-blocking or money-movement issue behind search-only. When the query signals urgency or risk, surface a direct contact route immediately rather than forcing self-service.",
        "a11yContract": "Combobox pattern: input owns the results list, results are operable by arrow keys and Enter, and the result count is announced via a live region. The empty state always offers an explicit escalation, never a dead end.",
        "anchor": "Published help content that touches fees, risk, or eligibility must stay consistent with the regulated disclosures (PDS/TMD, FCA COBS) — the knowledge base is part of the compliance surface, not marketing copy.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "cs-csat",
      "name": "CSAT &amp; Feedback",
      "domain": "b2b",
      "url": "https://edwson.com/design-system-showcase.html#sec-cs-csat",
      "summary": "A post-resolution satisfaction surface: a five-point emoji scale that progressively discloses a reason picker and free-text only after a rating is chosen, then confirms with a thank-you. Designed to maximise completion by asking for the minimum first.",
      "register": {
        "whenToUse": "Immediately after a ticket resolves or a chat closes, while the experience is fresh. The single-tap rating is the commitment; the follow-up is optional and progressive.",
        "whenNotTo": "Not for relationship-level loyalty measurement — that is NPS on a longer cadence. Never gate access to the product behind a rating, and never re-prompt a customer who already responded.",
        "a11yContract": "Faces are a radio group: each is a labelled button with an accessible name (\"Very satisfied\"), keyboard operable, never colour- or emoji-only. The follow-up reveals without a layout jump and respects reduced-motion.",
        "anchor": "Free-text feedback can contain a complaint that triggers regulated handling obligations (FCA DISP / ASIC RG 271). The capture surface should route negative sentiment into the formal complaints process, not a dead inbox.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ui-scrollbars",
      "name": "Scrollbar Variants",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-ui-scrollbars",
      "summary": "Five scroll affordances for different contexts: a thin themed bar, a minimal grey bar that strengthens on hover, an inset fade that signals more content without chrome, a horizontal snap carousel, and a scroll-progress meter. All token-driven, dual-theme, and built on standard scrollbar-width / ::-webkit-scrollbar with graceful fallback.",
      "register": {
        "whenToUse": "Thin/themed for dense dashboards; minimal-grey for content areas; fade for short overflow where a visible bar is noisy; snap for card carousels; progress for long-form reading or multi-step forms.",
        "whenNotTo": "Never fully hide a scrollbar on a region that is the only way to reach content on a non-trackpad device — pair hidden bars with a fade or arrows. Don't restyle the OS scrollbar on whole-page scroll.",
        "a11yContract": "All regions stay keyboard-scrollable (focusable, arrow/Page keys work) regardless of bar styling. Snap doesn't trap focus. Custom colours preserve a visible thumb at WCAG non-text contrast against the track.",
        "anchor": "WCAG 2.1 — 1.4.13 (content on hover), 2.1.1 (keyboard), 1.4.11 (non-text contrast for the thumb). A scrollbar is a control: it must remain perceivable and operable, not purely decorative.",
        "anchorType": "regulatory"
      }
    },
    {
      "id": "ui-cta",
      "name": "CTA Buttons",
      "domain": "components",
      "url": "https://edwson.com/design-system-showcase.html#sec-ui-cta",
      "summary": "A complete CTA vocabulary — primary, secondary, ghost, outline, gradient, and destructive — plus the structural variants teams actually need: pill, block, icon-only, split (action + overflow), an async loading state, and a floating action button. One hierarchy, so \"the most important action on this screen\" is never ambiguous.",
      "register": {
        "whenToUse": "Exactly one primary CTA per view — the single most important action. Secondary/ghost for alternatives, outline for medium-emphasis, destructive for irreversible actions, split when a default action has variants.",
        "whenNotTo": "Never show two primaries competing for attention. Don't use a gradient CTA on a regulated trading surface where it could imply urgency or inducement — reserve it for marketing contexts. Icon-only needs a tooltip + label.",
        "a11yContract": "Every CTA is a real &lt;button&gt; / &lt;a&gt; with a text accessible name (icon-only uses aria-label). Loading sets aria-busy and disables re-submit. Focus is always visible; hit area meets 44px where touch is expected.",
        "anchor": "WCAG 2.1 — 2.5.5 / 2.5.8 target size, 2.4.7 focus visible, 4.1.2 name-role-value. In finance, a CTA that commits an order or moves money must not pre-tick, auto-submit, or use pressure language (FCA COBS, ASIC RG 234).",
        "anchorType": "regulatory"
      }
    }
  ],
  "frameworkCitations": {
    "SEC": 22,
    "WCAG": 19,
    "Federal Reserve": 12,
    "EU AI Act": 9,
    "CFPB": 9,
    "FINRA": 7,
    "ISO": 7,
    "GDPR": 5,
    "ASIC": 5,
    "NACHA": 5,
    "CFTC": 4,
    "FCA": 4,
    "NIST": 3,
    "Basel / BCBS": 2,
    "SOC 2": 2,
    "MiFID / MiFIR": 1,
    "FinCEN": 1,
    "FATF": 1,
    "Dodd-Frank": 1,
    "ISDA": 1
  },
  "normalisation": "Framework counts fold each citation to the body that ISSUES it (SEC Rule 17a-4, Reg BI and Reg SCI all count once, under SEC). The mapping is published here so the arithmetic can be checked rather than trusted."
}