@agentiffai/design 1.5.4 → 1.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/theme/tokens.ts","../../src/components/workflow/WorkflowCard.tsx","../../src/components/workflow/WorkflowDiscoveryCard.tsx","../../src/components/workflow/WorkflowErrorAlert.tsx","../../src/components/workflow/WorkflowProgressBar.tsx","../../src/components/workflow/WorkflowResultPanel.tsx","../../src/components/workflow/WorkflowStatusBadge.tsx"],"names":["jsxs","jsx","styled","useState","useCallback","Card","keyframes","css","Actions","ChevronIcon","Header","Title","Content","pulse","statusColors","IconContainer"],"mappings":"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","file":"index.cjs","sourcesContent":["export const tokens = {\n colors: {\n primary: '#2CB0AB',\n secondary: '#264E68',\n accent: '#459FB9',\n seaGreen: '#4EB999',\n\n background: {\n darkest: '#0a1b2a',\n darker: '#151a26',\n dark: '#1b2230',\n light: '#252d3d',\n },\n\n text: {\n primary: '#FFFFFF',\n secondary: '#B4B8C5',\n tertiary: '#9CA3AF',\n disabled: '#4B5563',\n },\n\n success: '#2CB0AB',\n error: '#EF4444',\n warning: '#F59E0B',\n info: '#459FB9',\n\n status: {\n pending: '#6B7280',\n editing: '#3B82F6',\n idle: '#6B7280',\n running: '#459FB9',\n completed: '#2CB0AB',\n failed: '#EF4444',\n timeout: '#F59E0B',\n online: '#2CB0AB',\n offline: '#EF4444',\n busy: '#459FB9',\n },\n\n connection: {\n connected: '#2CB0AB',\n streaming: '#459FB9',\n disconnected: '#EF4444',\n reconnecting: '#F59E0B',\n },\n\n surface: {\n base: '#1b2230',\n elevated: '#252d3d',\n overlay: 'rgba(255, 255, 255, 0.05)',\n overlayHover: 'rgba(255, 255, 255, 0.1)',\n overlayActive: 'rgba(255, 255, 255, 0.15)',\n subtle: 'rgba(255, 255, 255, 0.02)',\n glass: 'rgba(255, 255, 255, 0.26)',\n glassBorder: 'rgba(255, 255, 255, 0.3)',\n },\n\n border: {\n default: 'rgba(255, 255, 255, 0.1)',\n subtle: 'rgba(255, 255, 255, 0.05)',\n hover: 'rgba(255, 255, 255, 0.2)',\n focus: '#2CB0AB',\n error: '#EF4444',\n },\n\n category: {\n setup: '#459FB9',\n integration: '#8B5CF6',\n generation: '#2CB0AB',\n image: '#EC4899',\n scheduling: '#F59E0B',\n completion: '#4EB999',\n processing: '#459FB9',\n custom: '#6B7280',\n notion: '#6B7280',\n },\n\n scrollbar: {\n track: 'transparent',\n thumb: 'rgba(255, 255, 255, 0.2)',\n thumbHover: 'rgba(255, 255, 255, 0.3)',\n },\n\n message: {\n user: '#264E68',\n ai: '#1b2230',\n system: '#151a26',\n },\n\n overlay: 'rgba(0, 0, 0, 0.5)',\n backdrop: 'rgba(27, 34, 48, 0.95)',\n\n icon: {\n default: '#B4B8C5',\n muted: '#6B7280',\n active: '#2CB0AB',\n },\n\n platform: {\n facebook: '#1877F2',\n instagram: '#E4405F',\n linkedin: '#0A66C2',\n x: '#000000',\n twitter: '#1DA1F2',\n youtube: '#FF0000',\n reddit: '#FF4500',\n slack: '#4A154B',\n telegram: '#0088CC',\n whatsapp: '#25D366',\n gmail: '#EA4335',\n },\n },\n\n typography: {\n fontFamily: {\n primary:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n heading:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n monospace: \"'Roboto Mono', 'Monaco', 'Menlo', 'Ubuntu Mono', monospace\",\n },\n fontSize: {\n xs: '0.875rem',\n sm: '1rem',\n base: '1.125rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '1.875rem',\n '4xl': '2.25rem',\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n '2xl': '3rem',\n '3xl': '4rem',\n },\n\n borderRadius: {\n none: '0',\n sm: '0.25rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n '2xl': '1.5rem',\n full: '9999px',\n },\n\n shadows: {\n none: 'none',\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n card: '0 4px 20px rgba(0, 0, 0, 0.3)',\n glow: {\n primary: '0 0 20px rgba(44, 176, 171, 0.3)',\n secondary: '0 0 20px rgba(38, 78, 104, 0.3)',\n accent: '0 0 20px rgba(69, 159, 185, 0.3)',\n },\n },\n\n transitions: {\n fast: '150ms ease-in-out',\n normal: '250ms ease-in-out',\n slow: '350ms ease-in-out',\n },\n\n animation: {\n duration: {\n micro: '150ms',\n short: '200ms',\n medium: '300ms',\n long: '500ms',\n },\n easing: {\n enter: 'cubic-bezier(0.4, 0, 0.2, 1)',\n exit: 'cubic-bezier(0.4, 0, 1, 1)',\n smooth: 'cubic-bezier(0.4, 0, 0.2, 1)',\n linear: 'linear',\n },\n overlay: {\n duration: '200ms',\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n },\n typewriter: {\n speed: '50ms',\n },\n spinner: {\n duration: '1000ms',\n },\n pulse: {\n duration: '2000ms',\n },\n },\n\n zIndex: {\n base: 0,\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n overlay: 1100,\n modal: 1200,\n popover: 1300,\n tooltip: 1400,\n toast: 1500,\n },\n\n breakpoints: {\n mobile: 640,\n tablet: 1024,\n desktop: 1280,\n },\n} as const;\n\nexport type Tokens = typeof tokens;\n","/**\n * WorkflowCard Component\n *\n * A card for displaying available workflows in a list.\n * Used for browsing and activating workflows, showing\n * integrations and input requirements.\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface WorkflowIntegration {\n /** Icon URL or path */\n icon: string;\n /** Integration name for alt text */\n name: string;\n /** Whether this integration is connected */\n connected?: boolean;\n /** Whether this integration is optional (softer visual when not connected) */\n optional?: boolean;\n}\n\nexport interface WorkflowCardProps {\n /** Unique identifier for the workflow */\n id: string;\n /** Workflow name */\n name: string;\n /** Workflow description */\n description?: string;\n /** List of required integrations */\n integrations?: WorkflowIntegration[];\n /** Whether the workflow needs setup (not yet provisioned) */\n needsSetup?: boolean;\n /** Estimated cost per run (e.g., \"~$0.15\") */\n estimatedCostPerRun?: string;\n /** Click handler */\n onClick?: () => void;\n /** Whether the card is disabled */\n disabled?: boolean;\n /** Optional className for styling */\n className?: string;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const WorkflowCard: React.FC<WorkflowCardProps> = ({\n id,\n name,\n description,\n integrations = [],\n needsSetup = false,\n estimatedCostPerRun,\n onClick,\n disabled = false,\n className,\n}) => {\n const missingCount = integrations.filter((i) => i.connected === false && !i.optional).length;\n const hasFooter = integrations.length > 0 || needsSetup || !!estimatedCostPerRun;\n\n return (\n <Card\n data-testid={`workflow-card-${id}`}\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={className}\n type=\"button\"\n >\n <WorkflowName data-testid=\"workflow-card-name\">{name}</WorkflowName>\n\n {description && <Description>{description}</Description>}\n\n {hasFooter && (\n <CardFooter>\n <IntegrationList>\n {integrations.map((integration) => (\n <IntegrationIconWrapper\n key={integration.name}\n $connected={integration.connected !== false}\n $optional={!!integration.optional}\n title={`${integration.name}${integration.connected === false ? (integration.optional ? ' (optional)' : ' (not connected)') : ''}`}\n >\n <IntegrationIcon src={integration.icon} alt={integration.name} />\n </IntegrationIconWrapper>\n ))}\n </IntegrationList>\n\n <Indicators>\n {estimatedCostPerRun && (\n <IndicatorPill\n $variant=\"info\"\n title={`Estimated cost: ${estimatedCostPerRun}${estimatedCostPerRun.includes('/') ? '' : ' per run'}`}\n >\n <IndicatorText>\n {estimatedCostPerRun}\n {estimatedCostPerRun.includes('/') ? '' : '/run'}\n </IndicatorText>\n </IndicatorPill>\n )}\n {missingCount > 0 && (\n <IndicatorPill\n $variant=\"warning\"\n data-testid=\"workflow-card-status\"\n title={`${missingCount} integration${missingCount > 1 ? 's' : ''} not connected`}\n >\n <IndicatorDot $variant=\"warning\" />\n <IndicatorText>{missingCount} missing</IndicatorText>\n </IndicatorPill>\n )}\n {needsSetup && (\n <IndicatorPill\n $variant=\"warning\"\n data-testid=\"workflow-card-needs-setup\"\n title=\"Setup required before use\"\n >\n <IndicatorDot $variant=\"warning\" />\n <IndicatorText>Needs Setup</IndicatorText>\n </IndicatorPill>\n )}\n </Indicators>\n </CardFooter>\n )}\n </Card>\n );\n};\n\nWorkflowCard.displayName = 'WorkflowCard';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Card = styled.button`\n display: grid;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.xl};\n border: 1px solid ${tokens.colors.border.default};\n cursor: pointer;\n text-align: left;\n width: 100%;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: border-color ${tokens.transitions.fast}, background-color ${tokens.transitions.fast};\n\n &:hover:not(:disabled) {\n border-color: ${tokens.colors.border.hover};\n background: ${tokens.colors.background.light};\n }\n\n &:active:not(:disabled) {\n background: ${tokens.colors.surface.overlayActive};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n`;\n\nconst WorkflowName = styled.h3`\n margin: 0;\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n`;\n\nconst Description = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n line-height: ${tokens.typography.lineHeight.normal};\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n word-break: break-word;\n min-width: 0;\n`;\n\nconst CardFooter = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding-top: ${tokens.spacing.sm};\n border-top: 1px solid ${tokens.colors.border.subtle};\n width: 100%;\n`;\n\nconst IntegrationList = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\ninterface IntegrationIconWrapperProps {\n $connected: boolean;\n $optional?: boolean;\n}\n\nconst IntegrationIconWrapper = styled.span<IntegrationIconWrapperProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: ${tokens.borderRadius.sm};\n background: ${tokens.colors.background.light};\n opacity: ${({ $connected, $optional }) => ($connected ? 1 : $optional ? 0.3 : 0.4)};\n position: relative;\n flex-shrink: 0;\n\n ${({ $connected, $optional }) =>\n !$connected &&\n `\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n border: 1px dashed ${$optional ? tokens.colors.border.default : tokens.colors.warning};\n border-radius: ${tokens.borderRadius.sm};\n }\n `}\n`;\n\nconst IntegrationIcon = styled.img`\n width: 16px;\n height: 16px;\n object-fit: contain;\n`;\n\nconst Indicators = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: ${tokens.spacing.xs};\n margin-left: auto;\n min-width: 0;\n`;\n\ninterface IndicatorVariantProps {\n $variant: 'warning' | 'info';\n}\n\nconst IndicatorPill = styled.span<IndicatorVariantProps>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${({ $variant }) =>\n $variant === 'warning' ? `${tokens.colors.warning}15` : `${tokens.colors.info}15`};\n border: 1px solid ${({ $variant }) =>\n $variant === 'warning' ? `${tokens.colors.warning}30` : `${tokens.colors.info}30`};\n`;\n\nconst IndicatorDot = styled.span<IndicatorVariantProps>`\n width: 6px;\n height: 6px;\n border-radius: ${tokens.borderRadius.full};\n background: ${({ $variant }) =>\n $variant === 'warning' ? tokens.colors.warning : tokens.colors.info};\n flex-shrink: 0;\n`;\n\nconst IndicatorText = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n white-space: nowrap;\n`;\n\nexport default WorkflowCard;\n","/**\n * WorkflowDiscoveryCard Component (v2 of WorkflowCard)\n *\n * Linear: APP-262 — Design subtask: Workflow list card UI and metadata states\n * Linear: AGE-56 — Workflow Card Design and Implementation\n *\n * The next-generation workflow list card. Designed for the workflows discovery\n * screen where users browse and pick a workflow to run.\n *\n * Why this is a new component (vs editing WorkflowCard):\n * - The existing WorkflowCard answers \"what's the name and which integrations\".\n * That isn't enough for users facing 100s of workflows. They also need to\n * know \"can I run this now?\", \"do I need n8n / a paid sub / a Google login?\",\n * \"is there a demo I can watch?\".\n * - Keeping the original simple card stable for places it is still used.\n *\n * Card has two states:\n * • Collapsed — compact, scannable. Name, 1-line summary, readiness\n * status, integration icons, tiny metadata icons.\n * • Expanded — the \"decision layer\". Full description, setup checklist,\n * required vs optional integrations, paid sheet trigger, demo player,\n * source link, run button.\n *\n * Designed to be responsive — works at mobile, tablet, and desktop widths.\n * Extensible — accepts arbitrary `customIndicators` for future flags\n * (secure/private LLM, community node, etc.) without code changes here.\n *\n * Ranking/popularity slot is always reserved per Nick's note on Linear: even\n * when the feature is not backed yet, design the indicator in and let the\n * slot render empty.\n */\n\nimport type React from 'react';\nimport { useCallback, useState } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Readiness state — the single most important piece of info on the card.\n * Translates \"can the user run this workflow right now?\" into one clear label.\n */\nexport type WorkflowReadiness =\n | 'ready'\n | 'setup-required'\n | 'needs-n8n'\n | 'paid'\n | 'provisioning'\n | 'failed'\n | 'unavailable';\n\nexport interface WorkflowDiscoveryIntegration {\n /** Icon — string URL or a React node (e.g. an icon component) */\n icon: string | React.ReactNode;\n /** Integration name for alt text / tooltip */\n name: string;\n /** Whether the integration is connected */\n connected?: boolean;\n /** Whether the integration is optional */\n optional?: boolean;\n}\n\nexport interface PaidIntegrationInfo {\n /** Name of the paid integration (e.g. \"Apify\", \"Postiz\") */\n name: string;\n /** Short pricing note, e.g. \"$5/mo · free trial available\" */\n pricingNote?: string;\n /** True if the integration offers a free trial */\n hasFreeTrial?: boolean;\n /** Affiliate signup URL */\n signupUrl?: string;\n /** Optional Loom/YouTube setup video URL */\n setupVideoUrl?: string;\n}\n\nexport type SetupRequirementType = 'oauth' | 'api-key' | 'n8n' | 'paid' | 'apify-rental';\n\nexport interface SetupRequirement {\n /** Unique key */\n id: string;\n /** Kind of requirement (drives icon / styling) */\n type: SetupRequirementType;\n /** Human-readable label, e.g. \"Connect Google\", \"Deploy n8n\" */\n label: string;\n /** Whether this requirement is already satisfied */\n done?: boolean;\n /** Label for the action button, e.g. \"Connect\", \"Set up\" */\n actionLabel?: string;\n /** Action callback */\n onAction?: () => void;\n}\n\nexport interface PopularityInfo {\n /** Total run count (e.g. 1240) */\n runCount?: number;\n /** Ranking position (e.g. 2 = #2) */\n rank?: number;\n /** \"Trending\" flag */\n trending?: boolean;\n}\n\nexport interface CustomIndicator {\n /** Unique key */\n id: string;\n /** Small icon (16px target) */\n icon: React.ReactNode;\n /** Tooltip / aria-label text */\n tooltip: string;\n /** Optional accent color */\n color?: string;\n}\n\nexport interface ProvenanceSource {\n /** Display label, e.g. \"n8n.io template\" */\n label: string;\n /** Source URL */\n url: string;\n}\n\n/**\n * Community voting state for a workflow. Lives in design exploration only —\n * each brainstorm variation can place it differently to see how it feels.\n */\nexport interface VotesInfo {\n /** Upvote count */\n up: number;\n /** Downvote count */\n down: number;\n /** What the current user has voted (or null if not voted) */\n userVote?: 'up' | 'down' | null;\n}\n\n/**\n * Where the voting affordance renders on the card. Each placement is a\n * distinct design hypothesis — we audition them in the brainstorm story\n * so product + design can pick the right home for voting.\n */\nexport type VotesPlacement =\n /** Tiny compact arrow + count in the metadata icon row (top-right) */\n | 'metadata'\n /** Full pill (up arrow + count + down arrow + count) on the collapsed bottom row */\n | 'bottom-row'\n /** Block at the bottom of the expanded view */\n | 'expanded-footer';\n\n/**\n * Where the support / report-issue affordance renders on the card.\n */\nexport type SupportPlacement =\n /** Tiny icon in the metadata icon row (top-right) */\n | 'metadata'\n /** Button in the expanded view footer */\n | 'expanded-footer';\n\nexport interface WorkflowDiscoveryCardProps {\n /** Unique workflow identifier */\n id: string;\n /** Workflow display name */\n name: string;\n /** 1-line plain English summary (collapsed view) */\n summary: string;\n /** Longer description (expanded view). Falls back to `summary` if absent. */\n description?: string;\n /** Optional category */\n category?: 'social_media' | 'ops' | 'crm' | string;\n /** Optional workflow icon (URL or node) */\n icon?: string | React.ReactNode;\n /** Readiness state — drives the status label color and copy */\n readiness: WorkflowReadiness;\n /** Custom status label override (otherwise derived from `readiness`) */\n statusLabel?: string;\n /** Integration icons (collapsed view shows up to 4, rest as \"+N\") */\n integrations?: WorkflowDiscoveryIntegration[];\n /** Optional integrations — shown separately in expanded view */\n optionalIntegrations?: WorkflowDiscoveryIntegration[];\n /** Setup checklist for expanded view */\n setupRequirements?: SetupRequirement[];\n /** When set, the card shows a play-demo affordance */\n demoVideoUrl?: string;\n /** When set, the card shows the paid affiliate indicator + expanded sheet */\n paidIntegration?: PaidIntegrationInfo;\n /**\n * Whether the workflow uses n8n under the hood. Shows a small n8n badge\n * in the metadata icon row — except when the status already says \"Needs n8n\",\n * in which case the badge is hidden to avoid duplication.\n */\n usesN8n?: boolean;\n /** Provenance source (e.g. n8n.io template the workflow was based on) */\n source?: ProvenanceSource;\n /** Popularity info — always reserves a slot per Nick's design ask */\n popularity?: PopularityInfo;\n /** Reserve popularity slot even if data is empty (defaults to true) */\n reservePopularitySpace?: boolean;\n /** Future-proofing — extra indicators (secure LLM, community node, etc.) */\n customIndicators?: CustomIndicator[];\n /** Estimated cost per run, e.g. \"~$0.15\" */\n estimatedCostPerRun?: string;\n /** Whether the card starts expanded (uncontrolled) */\n defaultExpanded?: boolean;\n /** Controlled expanded state */\n isExpanded?: boolean;\n /** Called when the expand state toggles */\n onToggleExpanded?: (id: string, nextExpanded: boolean) => void;\n /** Called when the user clicks Run (or the primary action) */\n onRun?: (id: string) => void;\n /** Called when the user wants to play the demo */\n onPlayDemo?: (id: string, url: string) => void;\n /** Called when the user wants to open the paid-integration sheet */\n onOpenPaidSheet?: (id: string, info: PaidIntegrationInfo) => void;\n /**\n * Community voting state. When provided the voting affordance renders in\n * the placement specified by `votesPlacement` (defaults to expanded-footer).\n */\n votes?: VotesInfo;\n /** Where to render the voting affordance. Only used if `votes` is set. */\n votesPlacement?: VotesPlacement;\n /** Called when the user up/down votes */\n onVote?: (id: string, direction: 'up' | 'down') => void;\n /**\n * Called when the user wants to report an issue with this workflow. The\n * workflow name is passed so the consumer can pre-fill the support form\n * with it as context (as Nick asked). Pass this callback to render the\n * support affordance in the placement set by `supportPlacement`.\n */\n onReportIssue?: (id: string, workflowName: string) => void;\n /** Where to render the support affordance. Only used if `onReportIssue` is set. */\n supportPlacement?: SupportPlacement;\n /** Disabled state (greyed out, not interactive) */\n disabled?: boolean;\n /** Custom className */\n className?: string;\n}\n\n// =============================================================================\n// Readiness → label/color mapping\n// =============================================================================\n\ninterface ReadinessVisual {\n label: string;\n /** Token color name */\n color: string;\n /** Background color (semi-transparent of color) */\n bg: string;\n /** Border color (semi-transparent of color) */\n border: string;\n /** Whether to render an animated dot (e.g. provisioning) */\n animated?: boolean;\n}\n\nconst readinessVisuals: Record<WorkflowReadiness, ReadinessVisual> = {\n ready: {\n label: 'Ready',\n color: tokens.colors.status.completed,\n bg: `${tokens.colors.status.completed}1A`,\n border: `${tokens.colors.status.completed}4D`,\n },\n 'setup-required': {\n label: 'Setup required',\n color: tokens.colors.warning,\n bg: `${tokens.colors.warning}1A`,\n border: `${tokens.colors.warning}4D`,\n },\n 'needs-n8n': {\n label: 'Needs n8n',\n color: tokens.colors.warning,\n bg: `${tokens.colors.warning}1A`,\n border: `${tokens.colors.warning}4D`,\n },\n paid: {\n label: 'Paid · free trial',\n color: tokens.colors.accent,\n bg: `${tokens.colors.accent}1A`,\n border: `${tokens.colors.accent}4D`,\n },\n provisioning: {\n label: 'Provisioning',\n color: tokens.colors.status.busy,\n bg: `${tokens.colors.status.busy}1A`,\n border: `${tokens.colors.status.busy}4D`,\n animated: true,\n },\n failed: {\n label: 'Failed',\n color: tokens.colors.error,\n bg: `${tokens.colors.error}1A`,\n border: `${tokens.colors.error}4D`,\n },\n unavailable: {\n label: 'Unavailable',\n color: tokens.colors.text.tertiary,\n bg: 'rgba(255, 255, 255, 0.04)',\n border: 'rgba(255, 255, 255, 0.1)',\n },\n};\n\n// =============================================================================\n// Inline icons (Lucide-style line-art, sized for clarity at small scale)\n// =============================================================================\n\nconst PlayIcon = () => (\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M8 5.14v13.72L19 12 8 5.14z\" />\n </svg>\n);\n\nconst PlayIconLarge = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n style={{ marginLeft: 2 /* optical centering for triangle */ }}\n >\n <path d=\"M8 5.14v13.72L19 12 8 5.14z\" />\n </svg>\n);\n\n/** n8n indicator — stylised workflow nodes connected by edges */\nconst N8nIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"6\" cy=\"12\" r=\"2.2\" />\n <circle cx=\"18\" cy=\"6\" r=\"2.2\" />\n <circle cx=\"18\" cy=\"18\" r=\"2.2\" />\n <path d=\"M8.2 12L15.8 6.8\" />\n <path d=\"M8.2 12L15.8 17.2\" />\n </svg>\n);\n\n/** Dollar sign — clean Lucide-style */\nconst PaidIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"21\" />\n <path d=\"M17 6H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\" />\n </svg>\n);\n\n/** External link / chain */\nconst LinkIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.72\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"12\"\n height=\"12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"3 17 9 11 13 15 21 7\" />\n <polyline points=\"15 7 21 7 21 13\" />\n </svg>\n);\n\nconst ChevronIcon = ({ open }: { open: boolean }) => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n style={{\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: `transform ${tokens.transitions.fast}`,\n }}\n >\n <path d=\"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\" />\n </svg>\n);\n\nconst CheckIcon = () => (\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n);\n\n/** Up-arrow used for upvoting */\nconst ArrowUpIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 19V5\" />\n <path d=\"M5 12l7-7 7 7\" />\n </svg>\n);\n\n/** Down-arrow used for downvoting */\nconst ArrowDownIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 5v14\" />\n <path d=\"M19 12l-7 7-7-7\" />\n </svg>\n);\n\n/** Life-ring / help icon for the support affordance */\nconst SupportIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <line x1=\"4.93\" y1=\"4.93\" x2=\"9.17\" y2=\"9.17\" />\n <line x1=\"14.83\" y1=\"14.83\" x2=\"19.07\" y2=\"19.07\" />\n <line x1=\"14.83\" y1=\"9.17\" x2=\"19.07\" y2=\"4.93\" />\n <line x1=\"14.83\" y1=\"9.17\" x2=\"18.36\" y2=\"5.64\" />\n <line x1=\"4.93\" y1=\"19.07\" x2=\"9.17\" y2=\"14.83\" />\n </svg>\n);\n\nconst DotIcon = () => (\n <svg viewBox=\"0 0 24 24\" width=\"10\" height=\"10\" fill=\"currentColor\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n </svg>\n);\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const WorkflowDiscoveryCard: React.FC<WorkflowDiscoveryCardProps> = ({\n id,\n name,\n summary,\n description,\n category,\n icon,\n readiness,\n statusLabel,\n integrations = [],\n optionalIntegrations = [],\n setupRequirements = [],\n demoVideoUrl,\n paidIntegration,\n usesN8n = false,\n source,\n popularity,\n reservePopularitySpace = true,\n customIndicators = [],\n estimatedCostPerRun,\n defaultExpanded = false,\n isExpanded: controlledExpanded,\n onToggleExpanded,\n onRun,\n onPlayDemo,\n onOpenPaidSheet,\n votes,\n votesPlacement = 'expanded-footer',\n onVote,\n onReportIssue,\n supportPlacement = 'metadata',\n disabled = false,\n className,\n}) => {\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n const expanded = controlledExpanded ?? internalExpanded;\n const visual = readinessVisuals[readiness];\n const displayedStatusLabel = statusLabel ?? visual.label;\n\n const handleToggleExpanded = useCallback(() => {\n const next = !expanded;\n if (controlledExpanded === undefined) {\n setInternalExpanded(next);\n }\n onToggleExpanded?.(id, next);\n }, [expanded, controlledExpanded, onToggleExpanded, id]);\n\n const handleRun = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onRun?.(id);\n },\n [onRun, id]\n );\n\n const handlePlayDemo = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (demoVideoUrl) onPlayDemo?.(id, demoVideoUrl);\n },\n [onPlayDemo, id, demoVideoUrl]\n );\n\n const handleOpenPaid = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (paidIntegration) onOpenPaidSheet?.(id, paidIntegration);\n },\n [onOpenPaidSheet, id, paidIntegration]\n );\n\n const handleVote = useCallback(\n (e: React.MouseEvent, direction: 'up' | 'down') => {\n e.stopPropagation();\n onVote?.(id, direction);\n },\n [onVote, id]\n );\n\n const handleReportIssue = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onReportIssue?.(id, name);\n },\n [onReportIssue, id, name]\n );\n\n // Collapsed-row metadata indicators — small, right side, only when relevant.\n // Dedupe rule: if the status pill already announces \"Needs n8n\" or \"Paid\",\n // skip the matching metadata icon to avoid visual repetition.\n const hasDemo = Boolean(demoVideoUrl);\n const hasN8n = usesN8n && readiness !== 'needs-n8n';\n const hasPaid = Boolean(paidIntegration) && readiness !== 'paid';\n const hasSource = Boolean(source);\n\n // Popularity slot — render even if empty so the design has consistent spacing\n const popularityNode = (() => {\n if (popularity?.trending) {\n return (\n <PopularityPill title=\"Trending\">\n <TrendingIcon />\n <span>Trending</span>\n </PopularityPill>\n );\n }\n if (popularity?.rank != null) {\n return (\n <PopularityPill title={`Ranked #${popularity.rank}`}>\n <span>#{popularity.rank}</span>\n </PopularityPill>\n );\n }\n if (popularity?.runCount != null) {\n return (\n <PopularityPill title={`${popularity.runCount} runs`}>\n <span>{formatRunCount(popularity.runCount)} runs</span>\n </PopularityPill>\n );\n }\n if (reservePopularitySpace) {\n return <PopularitySlotPlaceholder aria-hidden=\"true\" />;\n }\n return null;\n })();\n\n const visibleIntegrations = integrations.slice(0, 4);\n const overflowCount = Math.max(0, integrations.length - 4);\n\n return (\n <Card\n data-testid={`workflow-discovery-card-${id}`}\n $disabled={disabled}\n $expanded={expanded}\n className={className}\n aria-label={`${name} — ${displayedStatusLabel}`}\n >\n {/* ---------- Header (always visible) ---------- */}\n <HeaderButton\n type=\"button\"\n onClick={handleToggleExpanded}\n disabled={disabled}\n aria-expanded={expanded}\n aria-controls={`workflow-discovery-card-${id}-details`}\n >\n <HeaderTop>\n {icon !== undefined && (\n <IconSlot aria-hidden=\"true\">\n {typeof icon === 'string' ? <IconImg src={icon} alt=\"\" /> : icon}\n </IconSlot>\n )}\n\n <TitleColumn>\n {/* Name + top-right cluster share ONE flex row. The cluster is\n anchored to the top of the row (align-items: flex-start) so\n it doesn't drift when the title wraps to 2 lines. */}\n <NameRow>\n <Name>{name}</Name>\n <HeaderTopRight>\n {category && <CategoryTag>{formatCategoryLabel(category)}</CategoryTag>}\n <MetadataIcons>\n {hasDemo && (\n <MetadataIcon\n aria-hidden=\"true\"\n title=\"Demo video available\"\n $accent={tokens.colors.primary}\n >\n <PlayIcon />\n </MetadataIcon>\n )}\n {hasN8n && (\n <MetadataIcon\n aria-hidden=\"true\"\n title=\"Uses n8n\"\n $accent={tokens.colors.accent}\n >\n <N8nIcon />\n </MetadataIcon>\n )}\n {hasPaid && (\n <MetadataIcon\n aria-hidden=\"true\"\n title=\"Paid integration\"\n $accent={tokens.colors.accent}\n >\n <PaidIcon />\n </MetadataIcon>\n )}\n {hasSource && (\n <MetadataIcon\n aria-hidden=\"true\"\n title={`Based on ${source?.label}`}\n $accent={tokens.colors.text.tertiary}\n >\n <LinkIcon />\n </MetadataIcon>\n )}\n {customIndicators.map((ind) => (\n <MetadataIcon\n key={ind.id}\n aria-hidden=\"true\"\n title={ind.tooltip}\n $accent={ind.color ?? tokens.colors.text.secondary}\n >\n {ind.icon}\n </MetadataIcon>\n ))}\n {votes && votesPlacement === 'metadata' && (\n <MetadataVoteCompact\n $userVote={votes.userVote ?? null}\n onClick={(e) => handleVote(e, 'up')}\n title={`Upvote (${votes.up})`}\n type=\"button\"\n aria-label={`Upvote — ${votes.up} so far`}\n >\n <ArrowUpIcon />\n <span>{formatVoteCount(votes.up - votes.down)}</span>\n </MetadataVoteCompact>\n )}\n {onReportIssue && supportPlacement === 'metadata' && (\n <MetadataIconButton\n $accent={tokens.colors.text.tertiary}\n onClick={handleReportIssue}\n title=\"Report an issue with this workflow\"\n type=\"button\"\n aria-label=\"Report an issue\"\n >\n <SupportIcon />\n </MetadataIconButton>\n )}\n </MetadataIcons>\n </HeaderTopRight>\n </NameRow>\n <Summary>{summary}</Summary>\n </TitleColumn>\n </HeaderTop>\n\n <HeaderBottom>\n <HeaderBottomContent>\n <StatusPill\n $bg={visual.bg}\n $border={visual.border}\n $color={visual.color}\n $animated={visual.animated}\n >\n <StatusDot $color={visual.color} $animated={visual.animated}>\n <DotIcon />\n </StatusDot>\n {displayedStatusLabel}\n </StatusPill>\n\n {visibleIntegrations.length > 0 && (\n <IntegrationRow>\n {visibleIntegrations.map((it) => (\n <IntegrationIconSlot\n key={it.name}\n $connected={it.connected !== false}\n $optional={!!it.optional}\n title={`${it.name}${\n it.connected === false\n ? it.optional\n ? ' (optional)'\n : ' (not connected)'\n : ''\n }`}\n >\n {typeof it.icon === 'string' ? (\n <IntegrationImg src={it.icon} alt={it.name} />\n ) : (\n it.icon\n )}\n </IntegrationIconSlot>\n ))}\n {overflowCount > 0 && (\n <OverflowBadge title={`${overflowCount} more`}>+{overflowCount}</OverflowBadge>\n )}\n </IntegrationRow>\n )}\n\n {popularityNode}\n\n {estimatedCostPerRun && (\n <CostPill title={`Estimated ${estimatedCostPerRun} per run`}>\n {estimatedCostPerRun}\n {estimatedCostPerRun.includes('/') ? '' : '/run'}\n </CostPill>\n )}\n\n {votes && votesPlacement === 'bottom-row' && (\n <VotePill role=\"group\" aria-label=\"Workflow voting\">\n <VoteArrowButton\n type=\"button\"\n $active={votes.userVote === 'up'}\n $direction=\"up\"\n onClick={(e) => handleVote(e, 'up')}\n aria-label={`Upvote — ${votes.up} so far`}\n >\n <ArrowUpIcon />\n </VoteArrowButton>\n <VoteCount>{formatVoteCount(votes.up - votes.down)}</VoteCount>\n <VoteArrowButton\n type=\"button\"\n $active={votes.userVote === 'down'}\n $direction=\"down\"\n onClick={(e) => handleVote(e, 'down')}\n aria-label={`Downvote — ${votes.down} so far`}\n >\n <ArrowDownIcon />\n </VoteArrowButton>\n </VotePill>\n )}\n </HeaderBottomContent>\n\n <ChevronWrapper aria-hidden=\"true\">\n <ChevronIcon open={expanded} />\n </ChevronWrapper>\n </HeaderBottom>\n </HeaderButton>\n\n {/* ---------- Expanded panel ---------- */}\n <DetailsPanel\n id={`workflow-discovery-card-${id}-details`}\n $expanded={expanded}\n aria-hidden={!expanded}\n >\n <DetailsInner>\n <DescriptionBlock>{description ?? summary}</DescriptionBlock>\n\n {setupRequirements.length > 0 && (\n <Section>\n <SectionTitle>Setup required</SectionTitle>\n <SetupList>\n {setupRequirements.map((req) => (\n <SetupRow key={req.id} $done={!!req.done}>\n <SetupStatus $done={!!req.done} aria-hidden=\"true\">\n {req.done ? <CheckIcon /> : <DotIcon />}\n </SetupStatus>\n <SetupLabel $done={!!req.done}>{req.label}</SetupLabel>\n {!req.done && req.actionLabel && (\n <SetupAction\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n req.onAction?.();\n }}\n >\n {req.actionLabel}\n </SetupAction>\n )}\n </SetupRow>\n ))}\n </SetupList>\n </Section>\n )}\n\n {(integrations.length > 0 || optionalIntegrations.length > 0) && (\n <Section>\n <SectionTitle>Integrations</SectionTitle>\n {/* Required and Optional sit side-by-side (Required left, Optional\n right) via justify-content: space-between. Saves one vertical\n row on the expanded card. Wraps back to stacked on narrow\n viewports thanks to flex-wrap. */}\n <IntegrationGroupsRow>\n {integrations.length > 0 && (\n <IntegrationGroup>\n <IntegrationGroupLabel>Required</IntegrationGroupLabel>\n <IntegrationRow>\n {integrations.map((it) => (\n <IntegrationIconSlot\n key={`req-${it.name}`}\n $connected={it.connected !== false}\n $optional={false}\n title={`${it.name}${it.connected === false ? ' (not connected)' : ''}`}\n >\n {typeof it.icon === 'string' ? (\n <IntegrationImg src={it.icon} alt={it.name} />\n ) : (\n it.icon\n )}\n </IntegrationIconSlot>\n ))}\n </IntegrationRow>\n </IntegrationGroup>\n )}\n {optionalIntegrations.length > 0 && (\n <IntegrationGroup>\n <IntegrationGroupLabel>Optional</IntegrationGroupLabel>\n <IntegrationRow>\n {optionalIntegrations.map((it) => (\n <IntegrationIconSlot\n key={`opt-${it.name}`}\n $connected={it.connected !== false}\n $optional={true}\n title={`${it.name} (optional)`}\n >\n {typeof it.icon === 'string' ? (\n <IntegrationImg src={it.icon} alt={it.name} />\n ) : (\n it.icon\n )}\n </IntegrationIconSlot>\n ))}\n </IntegrationRow>\n </IntegrationGroup>\n )}\n </IntegrationGroupsRow>\n </Section>\n )}\n\n {paidIntegration && (\n <PaidBanner>\n <PaidBannerHeader>\n <PaidIcon />\n <PaidBannerTitle>\n {paidIntegration.name} requires a paid subscription\n {paidIntegration.hasFreeTrial ? ' · free trial available' : ''}\n </PaidBannerTitle>\n </PaidBannerHeader>\n {paidIntegration.pricingNote && (\n <PaidBannerNote>{paidIntegration.pricingNote}</PaidBannerNote>\n )}\n <PaidBannerActions>\n <PrimaryPillButton type=\"button\" onClick={handleOpenPaid}>\n {paidIntegration.hasFreeTrial ? 'Start free trial' : 'View pricing'}\n </PrimaryPillButton>\n {paidIntegration.setupVideoUrl && (\n <SecondaryPillButton type=\"button\" onClick={handleOpenPaid}>\n <PlayIcon /> Watch setup\n </SecondaryPillButton>\n )}\n </PaidBannerActions>\n </PaidBanner>\n )}\n\n {demoVideoUrl && (\n <DemoBanner type=\"button\" onClick={handlePlayDemo} aria-label=\"Play demo video\">\n <DemoPlayBubble>\n <PlayIconLarge />\n </DemoPlayBubble>\n <DemoText>\n <DemoTitle>Watch the demo</DemoTitle>\n <DemoSubtitle>See this workflow in action before you run it</DemoSubtitle>\n </DemoText>\n </DemoBanner>\n )}\n\n <Actions>\n {readiness === 'unavailable' ? (\n <UnavailableNote>This workflow is not available on your plan.</UnavailableNote>\n ) : readiness === 'failed' ? (\n <UnavailableNote>\n Provisioning failed. Retry from settings, or contact support.\n </UnavailableNote>\n ) : (\n <PrimaryActionButton\n type=\"button\"\n onClick={handleRun}\n disabled={disabled || readiness === 'provisioning'}\n >\n {readiness === 'ready'\n ? 'Run workflow'\n : readiness === 'provisioning'\n ? 'Provisioning…'\n : 'Set up to run'}\n </PrimaryActionButton>\n )}\n </Actions>\n\n {(votes && votesPlacement === 'expanded-footer') ||\n (onReportIssue && supportPlacement === 'expanded-footer') ? (\n <ExpandedFooterActions>\n {votes && votesPlacement === 'expanded-footer' && (\n <VoteBlock role=\"group\" aria-label=\"Was this workflow helpful?\">\n <VoteBlockLabel>Was this helpful?</VoteBlockLabel>\n <VoteBlockButtons>\n <VoteBlockButton\n type=\"button\"\n $active={votes.userVote === 'up'}\n $direction=\"up\"\n onClick={(e) => handleVote(e, 'up')}\n aria-label={`Upvote — ${votes.up} so far`}\n >\n <ArrowUpIcon />\n <span>{formatVoteCount(votes.up)}</span>\n </VoteBlockButton>\n <VoteBlockButton\n type=\"button\"\n $active={votes.userVote === 'down'}\n $direction=\"down\"\n onClick={(e) => handleVote(e, 'down')}\n aria-label={`Downvote — ${votes.down} so far`}\n >\n <ArrowDownIcon />\n <span>{formatVoteCount(votes.down)}</span>\n </VoteBlockButton>\n </VoteBlockButtons>\n </VoteBlock>\n )}\n {onReportIssue && supportPlacement === 'expanded-footer' && (\n <SupportButton type=\"button\" onClick={handleReportIssue}>\n <SupportIcon />\n <span>Report an issue</span>\n </SupportButton>\n )}\n </ExpandedFooterActions>\n ) : null}\n\n {source && (\n <SourceFooter>\n Based on{' '}\n <SourceLink href={source.url} target=\"_blank\" rel=\"noopener noreferrer\">\n {source.label}\n </SourceLink>\n </SourceFooter>\n )}\n </DetailsInner>\n </DetailsPanel>\n </Card>\n );\n};\n\nWorkflowDiscoveryCard.displayName = 'WorkflowDiscoveryCard';\n\n// =============================================================================\n// Utilities\n// =============================================================================\n\nfunction formatRunCount(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(1)}K`;\n return String(n);\n}\n\n/**\n * Turn raw category enum values like \"social_media\" into \"SOCIAL MEDIA\"\n * for the small uppercase tag — keeps the label readable on the card\n * without losing the all-caps visual style.\n */\nfunction formatCategoryLabel(category: string): string {\n return category.replace(/_/g, ' ');\n}\n\n/**\n * Compact vote count: 1_240 -> \"1.2K\", 0 -> \"0\".\n * Net score (up - down) can be negative; sign is preserved.\n */\nfunction formatVoteCount(n: number): string {\n const sign = n < 0 ? '-' : '';\n const abs = Math.abs(n);\n if (abs >= 1_000_000) return `${sign}${(abs / 1_000_000).toFixed(1)}M`;\n if (abs >= 1_000) return `${sign}${(abs / 1_000).toFixed(1)}K`;\n return `${sign}${abs}`;\n}\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst pulse = keyframes`\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n`;\n\nconst expandIn = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`;\n\nconst Card = styled.article<{ $disabled: boolean; $expanded: boolean }>`\n display: flex;\n flex-direction: column;\n width: 100%;\n background: ${tokens.colors.background.dark};\n border: 1px solid\n ${(p) => (p.$expanded ? tokens.colors.border.hover : tokens.colors.border.default)};\n border-radius: ${tokens.borderRadius.xl};\n overflow: hidden;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: border-color ${tokens.transitions.fast},\n background-color ${tokens.transitions.fast};\n opacity: ${(p) => (p.$disabled ? 0.55 : 1)};\n\n &:hover {\n border-color: ${(p) =>\n p.$disabled ? tokens.colors.border.default : tokens.colors.border.hover};\n }\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n /* Slightly more breathing room on larger screens */\n border-radius: ${tokens.borderRadius.xl};\n }\n`;\n\nconst HeaderButton = styled.button`\n all: unset;\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n cursor: pointer;\n text-align: left;\n width: 100%;\n box-sizing: border-box;\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: -2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n }\n`;\n\nconst HeaderTop = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.sm};\n width: 100%;\n`;\n\nconst IconSlot = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n padding: 6px;\n box-sizing: border-box;\n flex-shrink: 0;\n background: ${tokens.colors.background.light};\n border-radius: ${tokens.borderRadius.md};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst IconImg = styled.img`\n width: 100%;\n height: 100%;\n object-fit: contain;\n`;\n\nconst TitleColumn = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n`;\n\n/**\n * Top row inside TitleColumn — holds the Name + the top-right cluster\n * (category tag + metadata icons). Using align-items: flex-start so the\n * cluster stays anchored to the FIRST line of the title even if the title\n * wraps to 2 lines. The Summary below this row is a sibling of NameRow,\n * so it gets the full TitleColumn width and can flow under the cluster.\n */\nconst NameRow = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.sm};\n min-width: 0;\n`;\n\nconst Name = styled.h3`\n flex: 1 1 auto;\n margin: 0;\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n /* Allow up to 2 lines on narrow screens (e.g. 320px). On wider screens\n the title will naturally render as 1 line because there's room. We use\n overflow-wrap (not word-break) so words don't split mid-character —\n they only break when a single word is too long for one line. */\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n overflow-wrap: break-word;\n min-width: 0;\n`;\n\nconst CategoryTag = styled.span`\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.medium};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: ${tokens.colors.text.tertiary};\n background: ${tokens.colors.surface.overlay};\n padding: 2px ${tokens.spacing.xs};\n border-radius: ${tokens.borderRadius.sm};\n flex-shrink: 0;\n`;\n\nconst Summary = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.normal};\n /* Clamp to 2 lines so mobile shows the gist (instead of cutting at ~25 chars\n with a single-line ellipsis) while wider screens still mostly render as\n one line because of the available width. overflow-wrap (not word-break)\n keeps full words intact unless a single word genuinely doesn't fit. */\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n overflow-wrap: break-word;\n min-width: 0;\n`;\n\n/**\n * Top-right cluster — holds the category tag and the metadata icon row.\n * Sits at the top of HeaderTop (because HeaderTop has align-items: flex-start)\n * so the category tag never drifts down when the title wraps to 2 lines.\n */\nconst HeaderTopRight = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\nconst MetadataIcons = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\nconst MetadataIcon = styled.span<{ $accent: string }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) => `${p.$accent}1F`};\n color: ${(p) => p.$accent};\n flex-shrink: 0;\n`;\n\n/** Same visual as MetadataIcon but as a real button (for support + compact-vote) */\nconst MetadataIconButton = styled.button<{ $accent: string }>`\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) => `${p.$accent}1F`};\n color: ${(p) => p.$accent};\n flex-shrink: 0;\n cursor: pointer;\n transition: background ${tokens.transitions.fast};\n\n &:hover {\n background: ${(p) => `${p.$accent}33`};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\n/**\n * Compact vote affordance for the metadata icon row — a single button with\n * up-arrow + net-score, optimised for very tight horizontal space. Tap toggles\n * the user's upvote. (Downvote not exposed in this placement.)\n */\nconst MetadataVoteCompact = styled.button<{ $userVote: 'up' | 'down' | null }>`\n all: unset;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n height: 26px;\n padding: 0 ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) =>\n p.$userVote === 'up' ? `${tokens.colors.primary}33` : `${tokens.colors.text.tertiary}1F`};\n color: ${(p) => (p.$userVote === 'up' ? tokens.colors.primary : tokens.colors.text.secondary)};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n cursor: pointer;\n transition: background ${tokens.transitions.fast}, color ${tokens.transitions.fast};\n\n &:hover {\n background: ${(p) =>\n p.$userVote === 'up' ? `${tokens.colors.primary}40` : `${tokens.colors.text.tertiary}33`};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\n/**\n * Bottom row of the collapsed card. Two flex children:\n * 1. HeaderBottomContent — all the status/integration/pill content, wraps as needed\n * 2. ChevronWrapper — the expand/collapse indicator, anchored right\n * Using justify-content: space-between + align-items: center means the chevron\n * stays visually anchored to the right of the row no matter how much the\n * content wraps to 2+ lines.\n */\nconst HeaderBottom = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${tokens.spacing.sm};\n width: 100%;\n`;\n\nconst HeaderBottomContent = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: ${tokens.spacing.xs};\n flex: 1 1 auto;\n min-width: 0;\n`;\n\nconst StatusPill = styled.span<{\n $bg: string;\n $border: string;\n $color: string;\n $animated?: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: 4px ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) => p.$bg};\n border: 1px solid ${(p) => p.$border};\n color: ${(p) => p.$color};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n line-height: 1;\n`;\n\nconst StatusDot = styled.span<{ $color: string; $animated?: boolean }>`\n display: inline-flex;\n width: 8px;\n height: 8px;\n color: ${(p) => p.$color};\n ${(p) =>\n p.$animated &&\n css`\n animation: ${pulse} ${tokens.animation.pulse.duration} ease-in-out infinite;\n `}\n\n svg {\n width: 100%;\n height: 100%;\n }\n`;\n\nconst IntegrationRow = styled.div`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n`;\n\nconst IntegrationIconSlot = styled.span<{ $connected: boolean; $optional: boolean }>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 5px;\n box-sizing: border-box;\n background: rgba(255, 255, 255, 0.06);\n border-radius: ${tokens.borderRadius.md};\n opacity: ${(p) => (p.$connected ? 1 : p.$optional ? 0.45 : 0.55)};\n flex-shrink: 0;\n\n ${(p) =>\n !p.$connected &&\n css`\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: ${tokens.borderRadius.md};\n border: 1px dashed\n ${p.$optional ? tokens.colors.border.default : tokens.colors.warning};\n pointer-events: none;\n }\n `}\n`;\n\nconst IntegrationImg = styled.img`\n width: 100%;\n height: 100%;\n object-fit: contain;\n`;\n\nconst OverflowBadge = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n height: 28px;\n padding: 0 ${tokens.spacing.xs};\n background: ${tokens.colors.surface.overlay};\n border-radius: ${tokens.borderRadius.md};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.tertiary};\n flex-shrink: 0;\n`;\n\nconst PopularityPill = styled.span`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: 3px ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.subtle};\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.tertiary};\n`;\n\n/**\n * Reserved popularity slot — per Nick's note, the design should always\n * include the indicator space so we can light it up later without re-layout.\n * Renders an invisible-but-spatial placeholder.\n */\nconst PopularitySlotPlaceholder = styled.span`\n display: inline-block;\n min-width: 48px;\n height: 1px;\n`;\n\nconst CostPill = styled.span`\n display: inline-flex;\n align-items: center;\n padding: 3px ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.subtle};\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.tertiary};\n`;\n\n/**\n * Bottom-row vote pill (collapsed view) — Reddit-style: up arrow + count +\n * down arrow in a single pill. Each arrow is a real button so clicks register\n * even though the pill sits inside the card's toggle button.\n */\nconst VotePill = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px ${tokens.spacing.xs};\n border-radius: ${tokens.borderRadius.full};\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.subtle};\n`;\n\nconst VoteArrowButton = styled.button<{ $active: boolean; $direction: 'up' | 'down' }>`\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: ${tokens.borderRadius.full};\n cursor: pointer;\n color: ${(p) =>\n p.$active\n ? p.$direction === 'up'\n ? tokens.colors.primary\n : tokens.colors.error\n : tokens.colors.text.tertiary};\n background: ${(p) =>\n p.$active\n ? p.$direction === 'up'\n ? `${tokens.colors.primary}26`\n : `${tokens.colors.error}26`\n : 'transparent'};\n transition: background ${tokens.transitions.fast}, color ${tokens.transitions.fast};\n\n &:hover {\n color: ${(p) => (p.$direction === 'up' ? tokens.colors.primary : tokens.colors.error)};\n background: ${(p) =>\n p.$direction === 'up' ? `${tokens.colors.primary}1F` : `${tokens.colors.error}1F`};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst VoteCount = styled.span`\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.secondary};\n min-width: 18px;\n text-align: center;\n`;\n\nconst ChevronWrapper = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: ${tokens.colors.text.tertiary};\n`;\n\n// ---------- Expanded panel ----------\n\nconst DetailsPanel = styled.div<{ $expanded: boolean }>`\n overflow: hidden;\n max-height: ${(p) => (p.$expanded ? '2000px' : '0')};\n opacity: ${(p) => (p.$expanded ? 1 : 0)};\n transition: max-height ${tokens.transitions.normal},\n opacity ${tokens.transitions.fast};\n\n ${(p) =>\n p.$expanded &&\n css`\n animation: ${expandIn} ${tokens.transitions.fast};\n `}\n`;\n\nconst DetailsInner = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.md};\n padding: 0 ${tokens.spacing.md} ${tokens.spacing.md};\n border-top: 1px solid ${tokens.colors.border.subtle};\n padding-top: ${tokens.spacing.md};\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n padding: ${tokens.spacing.md} ${tokens.spacing.lg} ${tokens.spacing.lg};\n padding-top: ${tokens.spacing.md};\n }\n`;\n\nconst DescriptionBlock = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.relaxed};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst Section = styled.section`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n`;\n\nconst SectionTitle = styled.h4`\n margin: 0;\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n letter-spacing: 0.5px;\n text-transform: uppercase;\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst SetupList = styled.ul`\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n`;\n\nconst SetupRow = styled.li<{ $done: boolean }>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n background: ${tokens.colors.surface.subtle};\n border-radius: ${tokens.borderRadius.md};\n`;\n\nconst SetupStatus = styled.span<{ $done: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) => (p.$done ? `${tokens.colors.success}1A` : tokens.colors.surface.overlay)};\n color: ${(p) => (p.$done ? tokens.colors.success : tokens.colors.text.tertiary)};\n flex-shrink: 0;\n`;\n\nconst SetupLabel = styled.span<{ $done: boolean }>`\n flex: 1;\n font-size: ${tokens.typography.fontSize.xs};\n color: ${(p) => (p.$done ? tokens.colors.text.tertiary : tokens.colors.text.primary)};\n text-decoration: ${(p) => (p.$done ? 'line-through' : 'none')};\n`;\n\nconst SetupAction = styled.button`\n all: unset;\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.primary};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.sm};\n cursor: pointer;\n transition: background ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlay};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\n/**\n * Wraps the Required + Optional integration groups so they sit side-by-side\n * (Required anchored left, Optional anchored right) on wider viewports, and\n * gracefully wrap back to stacked on narrow viewports.\n */\nconst IntegrationGroupsRow = styled.div`\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n gap: ${tokens.spacing.md} ${tokens.spacing.lg};\n width: 100%;\n`;\n\nconst IntegrationGroup = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n`;\n\nconst IntegrationGroupLabel = styled.span`\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.medium};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst PaidBanner = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background: ${tokens.colors.accent}14;\n border: 1px solid ${tokens.colors.accent}33;\n border-radius: ${tokens.borderRadius.md};\n`;\n\nconst PaidBannerHeader = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n color: ${tokens.colors.accent};\n`;\n\nconst PaidBannerTitle = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n`;\n\nconst PaidBannerNote = styled.p`\n margin: 0;\n font-size: 11px;\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst PaidBannerActions = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n flex-wrap: wrap;\n`;\n\nconst PrimaryPillButton = styled.button`\n all: unset;\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.md};\n background: ${tokens.colors.accent};\n color: #fff;\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n border-radius: ${tokens.borderRadius.full};\n cursor: pointer;\n transition: opacity ${tokens.transitions.fast};\n\n &:hover {\n opacity: 0.92;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst SecondaryPillButton = styled.button`\n all: unset;\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.md};\n background: transparent;\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.full};\n cursor: pointer;\n transition: background ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlay};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst DemoBanner = styled.button`\n all: unset;\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.md};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background: ${tokens.colors.primary}14;\n border: 1px solid ${tokens.colors.primary}33;\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: background ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.primary}1F;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst DemoPlayBubble = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: ${tokens.borderRadius.full};\n background: ${tokens.colors.primary};\n color: #fff;\n flex-shrink: 0;\n`;\n\nconst DemoText = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`;\n\nconst DemoTitle = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n`;\n\nconst DemoSubtitle = styled.span`\n font-size: 11px;\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst Actions = styled.div`\n display: flex;\n justify-content: stretch;\n width: 100%;\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n justify-content: flex-end;\n }\n`;\n\nconst PrimaryActionButton = styled.button`\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.lg};\n background: ${tokens.colors.primary};\n color: #fff;\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n width: 100%;\n text-align: center;\n transition: opacity ${tokens.transitions.fast},\n transform ${tokens.transitions.fast};\n\n &:hover:not(:disabled) {\n opacity: 0.92;\n }\n\n &:active:not(:disabled) {\n transform: translateY(1px);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n }\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n width: auto;\n min-width: 160px;\n }\n`;\n\nconst UnavailableNote = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n`;\n\n/**\n * Holds the voting block + support button below the main action row in the\n * expanded view. Lays them out side by side on wider viewports, stacks on\n * narrow ones.\n */\nconst ExpandedFooterActions = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: ${tokens.spacing.sm};\n padding-top: ${tokens.spacing.xs};\n border-top: 1px solid ${tokens.colors.border.subtle};\n`;\n\nconst VoteBlock = styled.div`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\nconst VoteBlockLabel = styled.span`\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst VoteBlockButtons = styled.div`\n display: inline-flex;\n gap: ${tokens.spacing.xs};\n`;\n\nconst VoteBlockButton = styled.button<{ $active: boolean; $direction: 'up' | 'down' }>`\n all: unset;\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n cursor: pointer;\n color: ${(p) =>\n p.$active\n ? p.$direction === 'up'\n ? tokens.colors.primary\n : tokens.colors.error\n : tokens.colors.text.secondary};\n background: ${(p) =>\n p.$active\n ? p.$direction === 'up'\n ? `${tokens.colors.primary}26`\n : `${tokens.colors.error}26`\n : tokens.colors.surface.overlay};\n border: 1px solid\n ${(p) =>\n p.$active\n ? p.$direction === 'up'\n ? `${tokens.colors.primary}66`\n : `${tokens.colors.error}66`\n : tokens.colors.border.subtle};\n transition: background ${tokens.transitions.fast}, color ${tokens.transitions.fast},\n border-color ${tokens.transitions.fast};\n\n &:hover {\n color: ${(p) => (p.$direction === 'up' ? tokens.colors.primary : tokens.colors.error)};\n background: ${(p) =>\n p.$direction === 'up' ? `${tokens.colors.primary}1F` : `${tokens.colors.error}1F`};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst SupportButton = styled.button`\n all: unset;\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n transition: color ${tokens.transitions.fast},\n background ${tokens.transitions.fast};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.surface.overlay};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst SourceFooter = styled.div`\n margin-top: ${tokens.spacing.xs};\n font-size: 11px;\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst SourceLink = styled.a`\n color: ${tokens.colors.text.secondary};\n text-decoration: underline;\n text-decoration-color: ${tokens.colors.border.default};\n text-underline-offset: 2px;\n\n &:hover {\n color: ${tokens.colors.text.primary};\n text-decoration-color: ${tokens.colors.border.hover};\n }\n`;\n\nexport default WorkflowDiscoveryCard;\n","/**\n * WorkflowErrorAlert Component\n *\n * Displays workflow execution errors with inline, banner, or modal variants.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// Severity color mapping using design tokens\nconst severityColors = {\n error: tokens.colors.error,\n warning: tokens.colors.warning,\n info: tokens.colors.info,\n};\n\ninterface AlertContainerProps {\n variant: 'inline' | 'banner' | 'modal';\n severity: 'error' | 'warning' | 'info';\n}\n\nconst AlertContainer = styled.div<AlertContainerProps>`\n display: flex;\n flex-direction: column;\n background-color: ${(props) => {\n const alpha = props.variant === 'modal' ? '26' : props.variant === 'banner' ? '1a' : '0d';\n return `${severityColors[props.severity]}${alpha}`;\n }};\n border: 1px solid ${(props) => {\n const alpha = props.variant === 'modal' ? '66' : '4d';\n return `${severityColors[props.severity]}${alpha}`;\n }};\n border-radius: ${(props) => (props.variant === 'banner' ? '0' : tokens.borderRadius.md)};\n padding: ${(props) => (props.variant === 'modal' ? tokens.spacing.lg : tokens.spacing.md)};\n margin: ${(props) => (props.variant === 'banner' ? '0' : `${tokens.spacing.sm} 0`)};\n width: ${(props) => (props.variant === 'modal' ? 'auto' : '100%')};\n max-width: ${(props) => (props.variant === 'inline' ? '600px' : '100%')};\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst ModalOverlay = styled.div<{ isOpen: boolean }>`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${tokens.colors.overlay};\n display: ${(props) => (props.isOpen ? 'flex' : 'none')};\n align-items: center;\n justify-content: center;\n z-index: ${tokens.zIndex.modal};\n padding: ${tokens.spacing.lg};\n`;\n\nconst ModalContent = styled.div`\n background-color: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.lg};\n max-width: 500px;\n width: 100%;\n box-shadow: ${tokens.shadows.xl};\n`;\n\nconst Header = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.md};\n`;\n\nconst IconContainer = styled.div<{ severity: 'error' | 'warning' | 'info' }>`\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n color: ${(props) => severityColors[props.severity]};\n`;\n\nconst Content = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n`;\n\nconst Title = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst ErrorMessage = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst ErrorCode = styled.div`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n font-family: ${tokens.typography.fontFamily.monospace};\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst Timestamp = styled.div`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst Details = styled.details`\n margin-top: ${tokens.spacing.md};\n cursor: pointer;\n\n summary {\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n user-select: none;\n list-style: none;\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &::-webkit-details-marker {\n display: none;\n }\n }\n`;\n\nconst DetailsIcon = styled.span<{ open: boolean }>`\n display: inline-block;\n transition: transform ${tokens.transitions.fast};\n transform: ${(props) => (props.open ? 'rotate(90deg)' : 'rotate(0deg)')};\n`;\n\nconst StackTrace = styled.pre`\n margin: ${tokens.spacing.sm} 0 0 0;\n padding: ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.subtle};\n border-radius: ${tokens.borderRadius.sm};\n font-family: ${tokens.typography.fontFamily.monospace};\n font-size: ${tokens.typography.fontSize.xs};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n white-space: pre-wrap;\n word-break: break-word;\n overflow-x: auto;\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n margin-top: ${tokens.spacing.md};\n`;\n\nconst Button = styled.button<{ variant: 'primary' | 'secondary' }>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${(props) => (props.variant === 'primary' ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n background: ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.surface.overlay)};\n border: 1px solid\n ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.border.default)};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${(props) =>\n props.variant === 'primary' ? tokens.colors.error : tokens.colors.surface.overlayHover};\n border-color: ${(props) =>\n props.variant === 'primary' ? tokens.colors.error : tokens.colors.border.hover};\n }\n\n &:active {\n transform: scale(0.98);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst CloseButton = styled.button`\n position: absolute;\n top: ${tokens.spacing.md};\n right: ${tokens.spacing.md};\n width: 32px;\n height: 32px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n border-radius: ${tokens.borderRadius.sm};\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 20px;\n height: 20px;\n }\n`;\n\n// Icons\nconst ErrorIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n);\n\nconst WarningIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n </svg>\n);\n\nconst InfoIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n);\n\nconst CloseIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n);\n\nexport interface WorkflowErrorAlertProps {\n /** Error object or message */\n error: Error | string;\n /** Optional error code */\n errorCode?: string;\n /** Timestamp of the error */\n timestamp?: string;\n /** Visual variant */\n variant?: 'inline' | 'banner' | 'modal';\n /** Severity level */\n severity?: 'error' | 'warning' | 'info';\n /** Whether the error can be retried */\n retryable?: boolean;\n /** Callback when retry is clicked */\n onRetry?: () => void;\n /** Callback when dismiss is clicked */\n onDismiss?: () => void;\n /** Whether to show details section */\n showDetails?: boolean;\n /** Stack trace to display */\n stackTrace?: string;\n /** Custom title */\n title?: string;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowErrorAlert component for displaying workflow errors\n *\n * Features:\n * - Inline, banner, and modal variants\n * - Severity levels (error/warning/info)\n * - Error code and timestamp display\n * - Expandable stack trace\n * - Retry and dismiss actions\n * - Accessible error reporting\n */\nexport const WorkflowErrorAlert: React.FC<WorkflowErrorAlertProps> = ({\n error,\n errorCode,\n timestamp,\n variant = 'inline',\n severity = 'error',\n retryable = false,\n onRetry,\n onDismiss,\n showDetails = false,\n stackTrace,\n title,\n className,\n}) => {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [isModalOpen, setIsModalOpen] = useState(variant === 'modal');\n\n const errorMessage = typeof error === 'string' ? error : error.message;\n const defaultTitle =\n severity === 'error' ? 'Workflow Error' : severity === 'warning' ? 'Warning' : 'Information';\n const displayTitle = title || defaultTitle;\n\n const handleDismiss = () => {\n if (variant === 'modal') {\n setIsModalOpen(false);\n }\n onDismiss?.();\n };\n\n const getIcon = () => {\n switch (severity) {\n case 'error':\n return <ErrorIcon />;\n case 'warning':\n return <WarningIcon />;\n case 'info':\n return <InfoIcon />;\n }\n };\n\n const alertContent = (\n <AlertContainer\n variant={variant}\n severity={severity}\n className={className}\n data-testid=\"error-alert\"\n role=\"alert\"\n >\n <Header>\n <IconContainer severity={severity} aria-hidden=\"true\">\n {getIcon()}\n </IconContainer>\n <Content>\n <Title>{displayTitle}</Title>\n <ErrorMessage>{errorMessage}</ErrorMessage>\n {errorCode && <ErrorCode>Error Code: {errorCode}</ErrorCode>}\n {timestamp && <Timestamp>{new Date(timestamp).toLocaleString()}</Timestamp>}\n\n {showDetails && (stackTrace || (typeof error === 'object' && error.stack)) && (\n <Details\n open={detailsOpen}\n onToggle={(e) => setDetailsOpen((e.target as HTMLDetailsElement).open)}\n >\n <summary>\n <DetailsIcon open={detailsOpen}>\n <ChevronIcon />\n </DetailsIcon>\n Show Details\n </summary>\n <StackTrace>\n {stackTrace || (typeof error === 'object' ? error.stack : '')}\n </StackTrace>\n </Details>\n )}\n\n {(retryable || onDismiss) && (\n <Actions>\n {retryable && onRetry && (\n <Button variant=\"primary\" onClick={onRetry}>\n Retry\n </Button>\n )}\n {onDismiss && (\n <Button variant=\"secondary\" onClick={handleDismiss}>\n Dismiss\n </Button>\n )}\n </Actions>\n )}\n </Content>\n {variant !== 'modal' && onDismiss && (\n <CloseButton onClick={handleDismiss} aria-label=\"Dismiss alert\">\n <CloseIcon />\n </CloseButton>\n )}\n </Header>\n </AlertContainer>\n );\n\n if (variant === 'modal') {\n return (\n <ModalOverlay isOpen={isModalOpen} onClick={handleDismiss}>\n <ModalContent onClick={(e) => e.stopPropagation()}>\n {alertContent}\n <CloseButton onClick={handleDismiss} aria-label=\"Close modal\">\n <CloseIcon />\n </CloseButton>\n </ModalContent>\n </ModalOverlay>\n );\n }\n\n return alertContent;\n};\n\nWorkflowErrorAlert.displayName = 'WorkflowErrorAlert';\n","/**\n * WorkflowProgressBar Component\n *\n * Displays workflow execution progress with linear or circular variants.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst indeterminate = keyframes`\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(400%);\n }\n`;\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\n// Status color mapping using design tokens\nconst statusColors = {\n pending: tokens.colors.status.pending,\n running: tokens.colors.status.running,\n completed: tokens.colors.status.completed,\n failed: tokens.colors.status.failed,\n timeout: tokens.colors.status.timeout,\n};\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n width: 100%;\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst ProgressMessage = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.normal};\n`;\n\nconst ProgressInfo = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ${tokens.spacing.xs};\n`;\n\nconst PercentageText = styled.span<{ size: 'sm' | 'md' | 'lg' }>`\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n`;\n\n// Linear Progress Bar\nconst LinearTrack = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n position: relative;\n width: 100%;\n height: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return '6px';\n }\n }};\n background-color: ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.full};\n overflow: hidden;\n`;\n\ninterface LinearFillProps {\n progress: number;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n animated: boolean;\n indeterminate: boolean;\n}\n\nconst LinearFill = styled.div<LinearFillProps>`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: ${(props) => (props.indeterminate ? '25%' : `${props.progress}%`)};\n background-color: ${(props) => statusColors[props.status]};\n border-radius: ${tokens.borderRadius.full};\n transition: ${(props) => (props.animated && !props.indeterminate ? `width ${tokens.transitions.normal}` : 'none')};\n animation: ${(props) => (props.indeterminate ? indeterminate : 'none')} 1.5s ease-in-out infinite;\n`;\n\n// Circular Progress Bar\nconst CircularContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst CircularSvg = styled.svg<{ size: 'sm' | 'md' | 'lg' }>`\n width: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xl;\n case 'lg':\n return '80px';\n case 'md':\n default:\n return '60px';\n }\n }};\n height: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xl;\n case 'lg':\n return '80px';\n case 'md':\n default:\n return '60px';\n }\n }};\n transform: rotate(-90deg);\n`;\n\ninterface CircularTrackProps {\n size: 'sm' | 'md' | 'lg';\n}\n\nconst getCircularSize = (size: 'sm' | 'md' | 'lg') => {\n switch (size) {\n case 'sm':\n return { radius: 16, strokeWidth: 3 };\n case 'lg':\n return { radius: 36, strokeWidth: 6 };\n case 'md':\n default:\n return { radius: 26, strokeWidth: 4 };\n }\n};\n\nconst CircularTrack = styled.circle<CircularTrackProps>`\n fill: none;\n stroke: ${tokens.colors.border.default};\n stroke-width: ${(props) => getCircularSize(props.size).strokeWidth};\n`;\n\ninterface CircularFillProps {\n progress: number;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n size: 'sm' | 'md' | 'lg';\n animated: boolean;\n indeterminate: boolean;\n}\n\nconst CircularFill = styled.circle<CircularFillProps>`\n fill: none;\n stroke: ${(props) => statusColors[props.status]};\n stroke-width: ${(props) => getCircularSize(props.size).strokeWidth};\n stroke-dasharray: ${(props) => {\n const { radius } = getCircularSize(props.size);\n const circumference = 2 * Math.PI * radius;\n return props.indeterminate ? `${circumference * 0.25} ${circumference}` : circumference;\n }};\n stroke-dashoffset: ${(props) => {\n const { radius } = getCircularSize(props.size);\n const circumference = 2 * Math.PI * radius;\n return props.indeterminate ? 0 : circumference * (1 - props.progress / 100);\n }};\n stroke-linecap: round;\n transition: ${(props) => (props.animated && !props.indeterminate ? `stroke-dashoffset ${tokens.transitions.normal}` : 'none')};\n animation: ${(props) => (props.indeterminate ? rotate : 'none')} 1.5s linear infinite;\n`;\n\nconst CircularPercentage = styled.text<{ size: 'sm' | 'md' | 'lg' }>`\n fill: ${tokens.colors.text.primary};\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.xs;\n }\n }};\n font-weight: ${tokens.typography.fontWeight.semibold};\n text-anchor: middle;\n dominant-baseline: middle;\n transform: rotate(90deg);\n transform-origin: center;\n`;\n\nexport interface WorkflowProgressBarProps {\n /** Progress percentage (0-100), or undefined for indeterminate */\n progress?: number;\n /** Optional message to display */\n message?: string;\n /** Status affects the color */\n status?: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n /** Visual variant */\n variant?: 'linear' | 'circular';\n /** Size of the progress bar */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show percentage text */\n showPercentage?: boolean;\n /** Whether to animate progress changes */\n animated?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowProgressBar component for showing workflow execution progress\n *\n * Features:\n * - Linear and circular variants\n * - Determinate and indeterminate modes\n * - Color-coded status (gray/blue/green/red/orange)\n * - Size options (sm/md/lg)\n * - Optional percentage display\n * - Smooth animations\n * - Progress message support\n */\nexport const WorkflowProgressBar: React.FC<WorkflowProgressBarProps> = ({\n progress,\n message,\n status = 'running',\n variant = 'linear',\n size = 'md',\n showPercentage = true,\n animated = true,\n className,\n}) => {\n const isIndeterminate = progress === undefined;\n const progressValue = progress ?? 0;\n\n if (variant === 'circular') {\n const { radius } = getCircularSize(size);\n const center = radius + getCircularSize(size).strokeWidth;\n\n return (\n <Container className={className}>\n {message && <ProgressMessage size={size}>{message}</ProgressMessage>}\n <CircularContainer>\n <CircularSvg\n size={size}\n viewBox={`0 0 ${center * 2} ${center * 2}`}\n role=\"progressbar\"\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={message || `${progressValue}% complete`}\n >\n <CircularTrack size={size} cx={center} cy={center} r={radius} />\n <CircularFill\n progress={progressValue}\n status={status}\n size={size}\n animated={animated}\n indeterminate={isIndeterminate}\n cx={center}\n cy={center}\n r={radius}\n />\n {showPercentage && !isIndeterminate && (\n <CircularPercentage size={size} x={center} y={center}>\n {Math.round(progressValue)}%\n </CircularPercentage>\n )}\n </CircularSvg>\n </CircularContainer>\n </Container>\n );\n }\n\n return (\n <Container className={className}>\n {(message || showPercentage) && (\n <ProgressInfo>\n {message && <ProgressMessage size={size}>{message}</ProgressMessage>}\n {showPercentage && !isIndeterminate && (\n <PercentageText size={size}>{Math.round(progressValue)}%</PercentageText>\n )}\n </ProgressInfo>\n )}\n <LinearTrack\n size={size}\n role=\"progressbar\"\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={message || `${progressValue}% complete`}\n >\n <LinearFill\n progress={progressValue}\n status={status}\n animated={animated}\n indeterminate={isIndeterminate}\n />\n </LinearTrack>\n </Container>\n );\n};\n\nWorkflowProgressBar.displayName = 'WorkflowProgressBar';\n","/**\n * WorkflowResultPanel Component\n *\n * Displays workflow execution results with JSON/formatted/table views.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst Panel = styled.div<{ collapsible: boolean; expanded: boolean }>`\n display: flex;\n flex-direction: column;\n background-color: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n overflow: hidden;\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst Header = styled.div<{ collapsible: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.subtle};\n border-bottom: 1px solid ${tokens.colors.border.default};\n cursor: ${(props) => (props.collapsible ? 'pointer' : 'default')};\n user-select: none;\n\n &:hover {\n background-color: ${(props) => (props.collapsible ? tokens.colors.surface.overlay : tokens.colors.surface.subtle)};\n }\n`;\n\nconst Title = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n`;\n\nconst IconButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n border-color: ${tokens.colors.border.hover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nconst CollapseIcon = styled.div<{ expanded: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform ${tokens.transitions.fast};\n transform: ${(props) => (props.expanded ? 'rotate(180deg)' : 'rotate(0deg)')};\n color: ${tokens.colors.text.secondary};\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nconst Content = styled.div<{ maxHeight?: string; expanded: boolean }>`\n padding: ${tokens.spacing.md};\n max-height: ${(props) => {\n if (!props.expanded) return '0';\n return props.maxHeight || '400px';\n }};\n overflow: ${(props) => (props.expanded ? 'auto' : 'hidden')};\n transition: max-height ${tokens.transitions.normal};\n\n /* Custom scrollbar */\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: ${tokens.colors.scrollbar.thumbHover};\n }\n`;\n\nconst JsonView = styled.pre`\n margin: 0;\n font-family: ${tokens.typography.fontFamily.monospace};\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n white-space: pre-wrap;\n word-break: break-word;\n`;\n\nconst FormattedView = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst TableView = styled.table`\n width: 100%;\n border-collapse: collapse;\n font-size: ${tokens.typography.fontSize.sm};\n\n th {\n text-align: left;\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm};\n background-color: ${tokens.colors.surface.overlay};\n border-bottom: 1px solid ${tokens.colors.border.default};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n }\n\n td {\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm};\n border-bottom: 1px solid ${tokens.colors.border.subtle};\n color: ${tokens.colors.text.secondary};\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n`;\n\nconst EmptyState = styled.div`\n padding: ${tokens.spacing.xl};\n text-align: center;\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.sm};\n`;\n\n// Icons\nconst DownloadIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\" />\n </svg>\n);\n\nconst CopyIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\" />\n </svg>\n);\n\nexport interface WorkflowResultPanelProps {\n /** Output data to display */\n outputData: unknown;\n /** Visual variant */\n variant?: 'json' | 'formatted' | 'table';\n /** Whether the panel can be collapsed */\n collapsible?: boolean;\n /** Default expanded state */\n defaultExpanded?: boolean;\n /** Maximum height of content area */\n maxHeight?: string;\n /** Callback when download is clicked */\n onDownload?: () => void;\n /** Callback when copy is clicked */\n onCopy?: () => void;\n /** Custom title */\n title?: string;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowResultPanel component for displaying workflow results\n *\n * Features:\n * - JSON, formatted, and table view variants\n * - Collapsible content\n * - Download and copy actions\n * - Maximum height with scrolling\n * - Empty state handling\n * - Syntax highlighting for JSON\n */\nexport const WorkflowResultPanel: React.FC<WorkflowResultPanelProps> = ({\n outputData,\n variant = 'json',\n collapsible = true,\n defaultExpanded = true,\n maxHeight,\n onDownload,\n onCopy,\n title = 'Result',\n className,\n}) => {\n const [expanded, setExpanded] = useState(defaultExpanded);\n\n const handleToggle = () => {\n if (collapsible) {\n setExpanded(!expanded);\n }\n };\n\n const renderContent = () => {\n if (!outputData) {\n return <EmptyState>No results available</EmptyState>;\n }\n\n switch (variant) {\n case 'json':\n return <JsonView>{JSON.stringify(outputData, null, 2)}</JsonView>;\n\n case 'formatted':\n if (typeof outputData === 'object') {\n return (\n <FormattedView>\n {Object.entries(outputData as Record<string, unknown>).map(([key, value]) => (\n <div key={key}>\n <strong>{key}:</strong> {String(value)}\n </div>\n ))}\n </FormattedView>\n );\n }\n return <FormattedView>{String(outputData)}</FormattedView>;\n\n case 'table':\n if (Array.isArray(outputData) && outputData.length > 0) {\n const keys = Object.keys(outputData[0] as Record<string, unknown>);\n return (\n <TableView>\n <thead>\n <tr>\n {keys.map((key) => (\n <th key={key}>{key}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {outputData.map((row, idx) => (\n <tr key={idx}>\n {keys.map((key) => (\n <td key={key}>{String((row as Record<string, unknown>)[key])}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </TableView>\n );\n }\n return <EmptyState>Data is not in table format</EmptyState>;\n\n default:\n return <EmptyState>Unsupported variant</EmptyState>;\n }\n };\n\n return (\n <Panel\n collapsible={collapsible}\n expanded={expanded}\n className={className}\n data-testid=\"result-panel\"\n >\n <Header collapsible={collapsible} onClick={handleToggle}>\n <Title>\n {title}\n {collapsible && (\n <CollapseIcon expanded={expanded}>\n <ChevronIcon />\n </CollapseIcon>\n )}\n </Title>\n <Actions onClick={(e) => e.stopPropagation()}>\n {onCopy && (\n <IconButton onClick={onCopy} title=\"Copy to clipboard\" aria-label=\"Copy to clipboard\">\n <CopyIcon />\n </IconButton>\n )}\n {onDownload && (\n <IconButton onClick={onDownload} title=\"Download\" aria-label=\"Download results\">\n <DownloadIcon />\n </IconButton>\n )}\n </Actions>\n </Header>\n <Content maxHeight={maxHeight} expanded={expanded}>\n {renderContent()}\n </Content>\n </Panel>\n );\n};\n\nWorkflowResultPanel.displayName = 'WorkflowResultPanel';\n","/**\n * WorkflowStatusBadge Component\n *\n * Displays workflow execution status with color coding.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n`;\n\n// Status color mapping using design tokens\nconst statusColors = {\n pending: tokens.colors.status.pending,\n running: tokens.colors.status.running,\n completed: tokens.colors.status.completed,\n failed: tokens.colors.status.failed,\n timeout: tokens.colors.status.timeout,\n};\n\ninterface BadgeContainerProps {\n $status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n $size: 'sm' | 'md' | 'lg';\n}\n\nconst BadgeContainer = styled.div<BadgeContainerProps>`\n display: inline-flex;\n align-items: center;\n gap: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return '6px';\n }\n }};\n padding: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return `${tokens.spacing.xs} ${tokens.spacing.sm}`;\n case 'lg':\n return `${tokens.spacing.sm} ${tokens.spacing.md}`;\n case 'md':\n default:\n return `6px ${tokens.spacing.md}`;\n }\n }};\n background-color: ${(props) => `${statusColors[props.$status]}1A`};\n border: 1px solid ${(props) => `${statusColors[props.$status]}4D`};\n border-radius: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return tokens.borderRadius.sm;\n case 'lg':\n return tokens.borderRadius.md;\n case 'md':\n default:\n return tokens.borderRadius.md;\n }\n }};\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return '11px';\n case 'lg':\n return '15px';\n case 'md':\n default:\n return '13px';\n }\n }};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${(props) => statusColors[props.$status]};\n line-height: 1.4;\n`;\n\ninterface IconContainerProps {\n $animated?: boolean;\n $status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n}\n\nconst IconContainer = styled.div<IconContainerProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n animation: ${(props) => {\n if (props.$animated) {\n if (props.$status === 'running') return spin;\n if (props.$status === 'pending') return pulse;\n }\n return 'none';\n }}\n ${(props) => (props.$status === 'running' ? '1s' : '2s')} linear infinite;\n`;\n\n// Status icons\nconst PendingIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z\" />\n </svg>\n);\n\nconst RunningIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n opacity=\"0.3\"\n />\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" />\n </svg>\n);\n\nconst CompletedIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n);\n\nconst FailedIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\" />\n </svg>\n);\n\nconst TimeoutIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n </svg>\n);\n\nconst Label = styled.span`\n white-space: nowrap;\n`;\n\nexport interface WorkflowStatusBadgeProps {\n /** Workflow execution status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n /** Size of the badge */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show status icon */\n showIcon?: boolean;\n /** Whether to show status label */\n showLabel?: boolean;\n /** Whether to animate the icon */\n animated?: boolean;\n /** Custom status label text */\n label?: string;\n /** Custom className */\n className?: string;\n}\n\nconst getDefaultLabel = (status: WorkflowStatusBadgeProps['status']): string => {\n switch (status) {\n case 'pending':\n return 'Pending';\n case 'running':\n return 'Running';\n case 'completed':\n return 'Completed';\n case 'failed':\n return 'Failed';\n case 'timeout':\n return 'Timeout';\n }\n};\n\nconst getStatusIcon = (status: WorkflowStatusBadgeProps['status']): React.ReactNode => {\n switch (status) {\n case 'pending':\n return <PendingIcon />;\n case 'running':\n return <RunningIcon />;\n case 'completed':\n return <CompletedIcon />;\n case 'failed':\n return <FailedIcon />;\n case 'timeout':\n return <TimeoutIcon />;\n }\n};\n\n/**\n * WorkflowStatusBadge component for showing workflow execution status\n *\n * Features:\n * - Color-coded status badges (gray/blue/green/red/orange)\n * - Status icons with optional animations\n * - Size options (sm/md/lg)\n * - Optional status labels\n * - Spinning animation for running state\n * - Pulse animation for pending state\n */\nexport const WorkflowStatusBadge: React.FC<WorkflowStatusBadgeProps> = ({\n status,\n size = 'md',\n showIcon = true,\n showLabel = true,\n animated = true,\n label,\n className,\n}) => {\n const displayLabel = label || getDefaultLabel(status);\n\n return (\n <BadgeContainer\n $status={status}\n $size={size}\n className={className}\n data-testid=\"execution-status-badge\"\n role=\"status\"\n aria-label={displayLabel}\n >\n {showIcon && (\n <IconContainer $animated={animated} $status={status} aria-hidden=\"true\">\n {getStatusIcon(status)}\n </IconContainer>\n )}\n {showLabel && <Label>{displayLabel}</Label>}\n </BadgeContainer>\n );\n};\n\nWorkflowStatusBadge.displayName = 'WorkflowStatusBadge';\n"]}
1
+ {"version":3,"sources":["../../src/theme/tokens.ts","../../src/components/workflow/WorkflowCard.tsx","../../src/components/workflow/WorkflowDiscoveryCard.tsx","../../src/components/workflow/WorkflowDiscoveryPage.tsx","../../src/components/workflow/WorkflowErrorAlert.tsx","../../src/components/workflow/WorkflowProgressBar.tsx","../../src/components/workflow/WorkflowResultPanel.tsx","../../src/components/workflow/WorkflowStatusBadge.tsx"],"names":["jsxs","jsx","styled","useState","useCallback","Card","keyframes","css","useMemo","pulse","Actions","ChevronIcon","Header","Title","Content","statusColors","IconContainer"],"mappings":"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","file":"index.cjs","sourcesContent":["export const tokens = {\n colors: {\n primary: '#2CB0AB',\n secondary: '#264E68',\n accent: '#459FB9',\n seaGreen: '#4EB999',\n\n background: {\n darkest: '#0a1b2a',\n darker: '#151a26',\n dark: '#1b2230',\n light: '#252d3d',\n },\n\n text: {\n primary: '#FFFFFF',\n secondary: '#B4B8C5',\n tertiary: '#9CA3AF',\n disabled: '#4B5563',\n },\n\n success: '#2CB0AB',\n error: '#EF4444',\n warning: '#F59E0B',\n info: '#459FB9',\n\n status: {\n pending: '#6B7280',\n editing: '#3B82F6',\n idle: '#6B7280',\n running: '#459FB9',\n completed: '#2CB0AB',\n failed: '#EF4444',\n timeout: '#F59E0B',\n online: '#2CB0AB',\n offline: '#EF4444',\n busy: '#459FB9',\n },\n\n connection: {\n connected: '#2CB0AB',\n streaming: '#459FB9',\n disconnected: '#EF4444',\n reconnecting: '#F59E0B',\n },\n\n surface: {\n base: '#1b2230',\n elevated: '#252d3d',\n overlay: 'rgba(255, 255, 255, 0.05)',\n overlayHover: 'rgba(255, 255, 255, 0.1)',\n overlayActive: 'rgba(255, 255, 255, 0.15)',\n subtle: 'rgba(255, 255, 255, 0.02)',\n glass: 'rgba(255, 255, 255, 0.26)',\n glassBorder: 'rgba(255, 255, 255, 0.3)',\n },\n\n border: {\n default: 'rgba(255, 255, 255, 0.1)',\n subtle: 'rgba(255, 255, 255, 0.05)',\n hover: 'rgba(255, 255, 255, 0.2)',\n focus: '#2CB0AB',\n error: '#EF4444',\n },\n\n category: {\n setup: '#459FB9',\n integration: '#8B5CF6',\n generation: '#2CB0AB',\n image: '#EC4899',\n scheduling: '#F59E0B',\n completion: '#4EB999',\n processing: '#459FB9',\n custom: '#6B7280',\n notion: '#6B7280',\n },\n\n scrollbar: {\n track: 'transparent',\n thumb: 'rgba(255, 255, 255, 0.2)',\n thumbHover: 'rgba(255, 255, 255, 0.3)',\n },\n\n message: {\n user: '#264E68',\n ai: '#1b2230',\n system: '#151a26',\n },\n\n overlay: 'rgba(0, 0, 0, 0.5)',\n backdrop: 'rgba(27, 34, 48, 0.95)',\n\n icon: {\n default: '#B4B8C5',\n muted: '#6B7280',\n active: '#2CB0AB',\n },\n\n platform: {\n facebook: '#1877F2',\n instagram: '#E4405F',\n linkedin: '#0A66C2',\n x: '#000000',\n twitter: '#1DA1F2',\n youtube: '#FF0000',\n reddit: '#FF4500',\n slack: '#4A154B',\n telegram: '#0088CC',\n whatsapp: '#25D366',\n gmail: '#EA4335',\n },\n },\n\n typography: {\n fontFamily: {\n primary:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n heading:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n monospace: \"'Roboto Mono', 'Monaco', 'Menlo', 'Ubuntu Mono', monospace\",\n },\n fontSize: {\n xs: '0.875rem',\n sm: '1rem',\n base: '1.125rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '1.875rem',\n '4xl': '2.25rem',\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n\n spacing: {\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n '2xl': '3rem',\n '3xl': '4rem',\n },\n\n borderRadius: {\n none: '0',\n sm: '0.25rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n '2xl': '1.5rem',\n full: '9999px',\n },\n\n shadows: {\n none: 'none',\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n card: '0 4px 20px rgba(0, 0, 0, 0.3)',\n glow: {\n primary: '0 0 20px rgba(44, 176, 171, 0.3)',\n secondary: '0 0 20px rgba(38, 78, 104, 0.3)',\n accent: '0 0 20px rgba(69, 159, 185, 0.3)',\n },\n },\n\n transitions: {\n fast: '150ms ease-in-out',\n normal: '250ms ease-in-out',\n slow: '350ms ease-in-out',\n },\n\n animation: {\n duration: {\n micro: '150ms',\n short: '200ms',\n medium: '300ms',\n long: '500ms',\n },\n easing: {\n enter: 'cubic-bezier(0.4, 0, 0.2, 1)',\n exit: 'cubic-bezier(0.4, 0, 1, 1)',\n smooth: 'cubic-bezier(0.4, 0, 0.2, 1)',\n linear: 'linear',\n },\n overlay: {\n duration: '200ms',\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n },\n typewriter: {\n speed: '50ms',\n },\n spinner: {\n duration: '1000ms',\n },\n pulse: {\n duration: '2000ms',\n },\n },\n\n zIndex: {\n base: 0,\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n overlay: 1100,\n modal: 1200,\n popover: 1300,\n tooltip: 1400,\n toast: 1500,\n },\n\n breakpoints: {\n mobile: 640,\n tablet: 1024,\n desktop: 1280,\n },\n} as const;\n\nexport type Tokens = typeof tokens;\n","/**\n * WorkflowCard Component\n *\n * A card for displaying available workflows in a list.\n * Used for browsing and activating workflows, showing\n * integrations and input requirements.\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface WorkflowIntegration {\n /** Icon URL or path */\n icon: string;\n /** Integration name for alt text */\n name: string;\n /** Whether this integration is connected */\n connected?: boolean;\n /** Whether this integration is optional (softer visual when not connected) */\n optional?: boolean;\n}\n\nexport interface WorkflowCardProps {\n /** Unique identifier for the workflow */\n id: string;\n /** Workflow name */\n name: string;\n /** Workflow description */\n description?: string;\n /** List of required integrations */\n integrations?: WorkflowIntegration[];\n /** Whether the workflow needs setup (not yet provisioned) */\n needsSetup?: boolean;\n /** Estimated cost per run (e.g., \"~$0.15\") */\n estimatedCostPerRun?: string;\n /** Click handler */\n onClick?: () => void;\n /** Whether the card is disabled */\n disabled?: boolean;\n /** Optional className for styling */\n className?: string;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const WorkflowCard: React.FC<WorkflowCardProps> = ({\n id,\n name,\n description,\n integrations = [],\n needsSetup = false,\n estimatedCostPerRun,\n onClick,\n disabled = false,\n className,\n}) => {\n const missingCount = integrations.filter((i) => i.connected === false && !i.optional).length;\n const hasFooter = integrations.length > 0 || needsSetup || !!estimatedCostPerRun;\n\n return (\n <Card\n data-testid={`workflow-card-${id}`}\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={className}\n type=\"button\"\n >\n <WorkflowName data-testid=\"workflow-card-name\">{name}</WorkflowName>\n\n {description && <Description>{description}</Description>}\n\n {hasFooter && (\n <CardFooter>\n <IntegrationList>\n {integrations.map((integration) => (\n <IntegrationIconWrapper\n key={integration.name}\n $connected={integration.connected !== false}\n $optional={!!integration.optional}\n title={`${integration.name}${integration.connected === false ? (integration.optional ? ' (optional)' : ' (not connected)') : ''}`}\n >\n <IntegrationIcon src={integration.icon} alt={integration.name} />\n </IntegrationIconWrapper>\n ))}\n </IntegrationList>\n\n <Indicators>\n {estimatedCostPerRun && (\n <IndicatorPill\n $variant=\"info\"\n title={`Estimated cost: ${estimatedCostPerRun}${estimatedCostPerRun.includes('/') ? '' : ' per run'}`}\n >\n <IndicatorText>\n {estimatedCostPerRun}\n {estimatedCostPerRun.includes('/') ? '' : '/run'}\n </IndicatorText>\n </IndicatorPill>\n )}\n {missingCount > 0 && (\n <IndicatorPill\n $variant=\"warning\"\n data-testid=\"workflow-card-status\"\n title={`${missingCount} integration${missingCount > 1 ? 's' : ''} not connected`}\n >\n <IndicatorDot $variant=\"warning\" />\n <IndicatorText>{missingCount} missing</IndicatorText>\n </IndicatorPill>\n )}\n {needsSetup && (\n <IndicatorPill\n $variant=\"warning\"\n data-testid=\"workflow-card-needs-setup\"\n title=\"Setup required before use\"\n >\n <IndicatorDot $variant=\"warning\" />\n <IndicatorText>Needs Setup</IndicatorText>\n </IndicatorPill>\n )}\n </Indicators>\n </CardFooter>\n )}\n </Card>\n );\n};\n\nWorkflowCard.displayName = 'WorkflowCard';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Card = styled.button`\n display: grid;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.xl};\n border: 1px solid ${tokens.colors.border.default};\n cursor: pointer;\n text-align: left;\n width: 100%;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: border-color ${tokens.transitions.fast}, background-color ${tokens.transitions.fast};\n\n &:hover:not(:disabled) {\n border-color: ${tokens.colors.border.hover};\n background: ${tokens.colors.background.light};\n }\n\n &:active:not(:disabled) {\n background: ${tokens.colors.surface.overlayActive};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n`;\n\nconst WorkflowName = styled.h3`\n margin: 0;\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n`;\n\nconst Description = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n line-height: ${tokens.typography.lineHeight.normal};\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n word-break: break-word;\n min-width: 0;\n`;\n\nconst CardFooter = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding-top: ${tokens.spacing.sm};\n border-top: 1px solid ${tokens.colors.border.subtle};\n width: 100%;\n`;\n\nconst IntegrationList = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\ninterface IntegrationIconWrapperProps {\n $connected: boolean;\n $optional?: boolean;\n}\n\nconst IntegrationIconWrapper = styled.span<IntegrationIconWrapperProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: ${tokens.borderRadius.sm};\n background: ${tokens.colors.background.light};\n opacity: ${({ $connected, $optional }) => ($connected ? 1 : $optional ? 0.3 : 0.4)};\n position: relative;\n flex-shrink: 0;\n\n ${({ $connected, $optional }) =>\n !$connected &&\n `\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n border: 1px dashed ${$optional ? tokens.colors.border.default : tokens.colors.warning};\n border-radius: ${tokens.borderRadius.sm};\n }\n `}\n`;\n\nconst IntegrationIcon = styled.img`\n width: 16px;\n height: 16px;\n object-fit: contain;\n`;\n\nconst Indicators = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: ${tokens.spacing.xs};\n margin-left: auto;\n min-width: 0;\n`;\n\ninterface IndicatorVariantProps {\n $variant: 'warning' | 'info';\n}\n\nconst IndicatorPill = styled.span<IndicatorVariantProps>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${({ $variant }) =>\n $variant === 'warning' ? `${tokens.colors.warning}15` : `${tokens.colors.info}15`};\n border: 1px solid ${({ $variant }) =>\n $variant === 'warning' ? `${tokens.colors.warning}30` : `${tokens.colors.info}30`};\n`;\n\nconst IndicatorDot = styled.span<IndicatorVariantProps>`\n width: 6px;\n height: 6px;\n border-radius: ${tokens.borderRadius.full};\n background: ${({ $variant }) =>\n $variant === 'warning' ? tokens.colors.warning : tokens.colors.info};\n flex-shrink: 0;\n`;\n\nconst IndicatorText = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n white-space: nowrap;\n`;\n\nexport default WorkflowCard;\n","/**\n * WorkflowDiscoveryCard Component (v2 of WorkflowCard)\n *\n * Linear: APP-262 — Design subtask: Workflow list card UI and metadata states\n * Linear: AGE-56 — Workflow Card Design and Implementation\n *\n * The next-generation workflow list card. Designed for the workflows discovery\n * screen where users browse and pick a workflow to run.\n *\n * Why this is a new component (vs editing WorkflowCard):\n * - The existing WorkflowCard answers \"what's the name and which integrations\".\n * That isn't enough for users facing 100s of workflows. They also need to\n * know \"can I run this now?\", \"do I need n8n / a paid sub / a Google login?\",\n * \"is there a demo I can watch?\".\n * - Keeping the original simple card stable for places it is still used.\n *\n * Card has two states:\n * • Collapsed — compact, scannable. Name, 1-line summary, readiness\n * status, integration icons, tiny metadata icons.\n * • Expanded — the \"decision layer\". Full description, setup checklist,\n * required vs optional integrations, paid sheet trigger, demo player,\n * source link, run button.\n *\n * Designed to be responsive — works at mobile, tablet, and desktop widths.\n * Extensible — accepts arbitrary `customIndicators` for future flags\n * (secure/private LLM, community node, etc.) without code changes here.\n *\n * Ranking/popularity slot is always reserved per Nick's note on Linear: even\n * when the feature is not backed yet, design the indicator in and let the\n * slot render empty.\n */\n\nimport type React from 'react';\nimport { useCallback, useState } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Readiness state — the single most important piece of info on the card.\n * Translates \"can the user run this workflow right now?\" into one clear label.\n */\nexport type WorkflowReadiness =\n | 'ready'\n | 'setup-required'\n | 'needs-n8n'\n | 'paid'\n | 'provisioning'\n | 'failed'\n | 'unavailable';\n\nexport interface WorkflowDiscoveryIntegration {\n /** Icon — string URL or a React node (e.g. an icon component) */\n icon: string | React.ReactNode;\n /** Integration name for alt text / tooltip */\n name: string;\n /** Whether the integration is connected */\n connected?: boolean;\n /** Whether the integration is optional */\n optional?: boolean;\n}\n\nexport interface PaidIntegrationInfo {\n /** Name of the paid integration (e.g. \"Apify\", \"Postiz\") */\n name: string;\n /** Short pricing note, e.g. \"$5/mo · free trial available\" */\n pricingNote?: string;\n /** True if the integration offers a free trial */\n hasFreeTrial?: boolean;\n /** Affiliate signup URL */\n signupUrl?: string;\n /** Optional Loom/YouTube setup video URL */\n setupVideoUrl?: string;\n}\n\nexport type SetupRequirementType = 'oauth' | 'api-key' | 'n8n' | 'paid' | 'apify-rental';\n\nexport interface SetupRequirement {\n /** Unique key */\n id: string;\n /** Kind of requirement (drives icon / styling) */\n type: SetupRequirementType;\n /** Human-readable label, e.g. \"Connect Google\", \"Deploy n8n\" */\n label: string;\n /** Whether this requirement is already satisfied */\n done?: boolean;\n /** Label for the action button, e.g. \"Connect\", \"Set up\" */\n actionLabel?: string;\n /** Action callback */\n onAction?: () => void;\n}\n\nexport interface PopularityInfo {\n /** Total run count (e.g. 1240) */\n runCount?: number;\n /** Ranking position (e.g. 2 = #2) */\n rank?: number;\n /** \"Trending\" flag */\n trending?: boolean;\n}\n\nexport interface CustomIndicator {\n /** Unique key */\n id: string;\n /** Small icon (16px target) */\n icon: React.ReactNode;\n /** Tooltip / aria-label text */\n tooltip: string;\n /** Optional accent color */\n color?: string;\n}\n\nexport interface ProvenanceSource {\n /** Display label, e.g. \"n8n.io template\" */\n label: string;\n /** Source URL */\n url: string;\n}\n\n/**\n * Community voting state for a workflow. Lives in design exploration only —\n * each brainstorm variation can place it differently to see how it feels.\n */\nexport interface VotesInfo {\n /** Upvote count */\n up: number;\n /** Downvote count */\n down: number;\n /** What the current user has voted (or null if not voted) */\n userVote?: 'up' | 'down' | null;\n}\n\n/**\n * Where the voting affordance renders on the card. Each placement is a\n * distinct design hypothesis — we audition them in the brainstorm story\n * so product + design can pick the right home for voting.\n */\nexport type VotesPlacement =\n /** Tiny compact arrow + count in the metadata icon row (top-right) */\n | 'metadata'\n /** Full pill (up arrow + count + down arrow + count) on the collapsed bottom row */\n | 'bottom-row'\n /** Block at the bottom of the expanded view */\n | 'expanded-footer';\n\n/**\n * Where the support / report-issue affordance renders on the card.\n */\nexport type SupportPlacement =\n /** Tiny icon in the metadata icon row (top-right) */\n | 'metadata'\n /** Button in the expanded view footer */\n | 'expanded-footer';\n\nexport interface WorkflowDiscoveryCardProps {\n /** Unique workflow identifier */\n id: string;\n /** Workflow display name */\n name: string;\n /** 1-line plain English summary (collapsed view) */\n summary: string;\n /** Longer description (expanded view). Falls back to `summary` if absent. */\n description?: string;\n /** Optional category */\n category?: 'social_media' | 'ops' | 'crm' | string;\n /** Optional workflow icon (URL or node) */\n icon?: string | React.ReactNode;\n /** Readiness state — drives the status label color and copy */\n readiness: WorkflowReadiness;\n /** Custom status label override (otherwise derived from `readiness`) */\n statusLabel?: string;\n /** Integration icons (collapsed view shows up to 4, rest as \"+N\") */\n integrations?: WorkflowDiscoveryIntegration[];\n /** Optional integrations — shown separately in expanded view */\n optionalIntegrations?: WorkflowDiscoveryIntegration[];\n /** Setup checklist for expanded view */\n setupRequirements?: SetupRequirement[];\n /** When set, the card shows a play-demo affordance */\n demoVideoUrl?: string;\n /** When set, the card shows the paid affiliate indicator + expanded sheet */\n paidIntegration?: PaidIntegrationInfo;\n /**\n * Whether the workflow uses n8n under the hood. Shows a small n8n badge\n * in the metadata icon row — except when the status already says \"Needs n8n\",\n * in which case the badge is hidden to avoid duplication.\n */\n usesN8n?: boolean;\n /** Provenance source (e.g. n8n.io template the workflow was based on) */\n source?: ProvenanceSource;\n /** Popularity info — always reserves a slot per Nick's design ask */\n popularity?: PopularityInfo;\n /** Reserve popularity slot even if data is empty (defaults to true) */\n reservePopularitySpace?: boolean;\n /** Future-proofing — extra indicators (secure LLM, community node, etc.) */\n customIndicators?: CustomIndicator[];\n /** Estimated cost per run, e.g. \"~$0.15\" */\n estimatedCostPerRun?: string;\n /** Whether the card starts expanded (uncontrolled) */\n defaultExpanded?: boolean;\n /** Controlled expanded state */\n isExpanded?: boolean;\n /** Called when the expand state toggles */\n onToggleExpanded?: (id: string, nextExpanded: boolean) => void;\n /** Called when the user clicks Run (or the primary action) */\n onRun?: (id: string) => void;\n /** Called when the user wants to play the demo */\n onPlayDemo?: (id: string, url: string) => void;\n /** Called when the user wants to open the paid-integration sheet */\n onOpenPaidSheet?: (id: string, info: PaidIntegrationInfo) => void;\n /**\n * Community voting state. When provided the voting affordance renders in\n * the placement specified by `votesPlacement` (defaults to expanded-footer).\n */\n votes?: VotesInfo;\n /** Where to render the voting affordance. Only used if `votes` is set. */\n votesPlacement?: VotesPlacement;\n /** Called when the user up/down votes */\n onVote?: (id: string, direction: 'up' | 'down') => void;\n /**\n * Called when the user wants to report an issue with this workflow. The\n * workflow name is passed so the consumer can pre-fill the support form\n * with it as context (as Nick asked). Pass this callback to render the\n * support affordance in the placement set by `supportPlacement`.\n */\n onReportIssue?: (id: string, workflowName: string) => void;\n /** Where to render the support affordance. Only used if `onReportIssue` is set. */\n supportPlacement?: SupportPlacement;\n /** Disabled state (greyed out, not interactive) */\n disabled?: boolean;\n /** Custom className */\n className?: string;\n}\n\n// =============================================================================\n// Readiness → label/color mapping\n// =============================================================================\n\ninterface ReadinessVisual {\n label: string;\n /** Token color name */\n color: string;\n /** Background color (semi-transparent of color) */\n bg: string;\n /** Border color (semi-transparent of color) */\n border: string;\n /** Whether to render an animated dot (e.g. provisioning) */\n animated?: boolean;\n}\n\nconst readinessVisuals: Record<WorkflowReadiness, ReadinessVisual> = {\n ready: {\n label: 'Ready',\n color: tokens.colors.status.completed,\n bg: `${tokens.colors.status.completed}1A`,\n border: `${tokens.colors.status.completed}4D`,\n },\n 'setup-required': {\n label: 'Setup required',\n color: tokens.colors.warning,\n bg: `${tokens.colors.warning}1A`,\n border: `${tokens.colors.warning}4D`,\n },\n 'needs-n8n': {\n label: 'Needs n8n',\n color: tokens.colors.warning,\n bg: `${tokens.colors.warning}1A`,\n border: `${tokens.colors.warning}4D`,\n },\n paid: {\n label: 'Paid · free trial',\n color: tokens.colors.accent,\n bg: `${tokens.colors.accent}1A`,\n border: `${tokens.colors.accent}4D`,\n },\n provisioning: {\n label: 'Provisioning',\n color: tokens.colors.status.busy,\n bg: `${tokens.colors.status.busy}1A`,\n border: `${tokens.colors.status.busy}4D`,\n animated: true,\n },\n failed: {\n label: 'Failed',\n color: tokens.colors.error,\n bg: `${tokens.colors.error}1A`,\n border: `${tokens.colors.error}4D`,\n },\n unavailable: {\n label: 'Unavailable',\n color: tokens.colors.text.tertiary,\n bg: 'rgba(255, 255, 255, 0.04)',\n border: 'rgba(255, 255, 255, 0.1)',\n },\n};\n\n// =============================================================================\n// Inline icons (Lucide-style line-art, sized for clarity at small scale)\n// =============================================================================\n\nconst PlayIcon = () => (\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M8 5.14v13.72L19 12 8 5.14z\" />\n </svg>\n);\n\nconst PlayIconLarge = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n style={{ marginLeft: 2 /* optical centering for triangle */ }}\n >\n <path d=\"M8 5.14v13.72L19 12 8 5.14z\" />\n </svg>\n);\n\n/** n8n indicator — stylised workflow nodes connected by edges */\nconst N8nIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"6\" cy=\"12\" r=\"2.2\" />\n <circle cx=\"18\" cy=\"6\" r=\"2.2\" />\n <circle cx=\"18\" cy=\"18\" r=\"2.2\" />\n <path d=\"M8.2 12L15.8 6.8\" />\n <path d=\"M8.2 12L15.8 17.2\" />\n </svg>\n);\n\n/** Dollar sign — clean Lucide-style */\nconst PaidIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"21\" />\n <path d=\"M17 6H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\" />\n </svg>\n);\n\n/** External link / chain */\nconst LinkIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.72\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"12\"\n height=\"12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"3 17 9 11 13 15 21 7\" />\n <polyline points=\"15 7 21 7 21 13\" />\n </svg>\n);\n\nconst ChevronIcon = ({ open }: { open: boolean }) => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n style={{\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: `transform ${tokens.transitions.fast}`,\n }}\n >\n <path d=\"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\" />\n </svg>\n);\n\nconst CheckIcon = () => (\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\" />\n </svg>\n);\n\n/** Up-arrow used for upvoting */\nconst ArrowUpIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 19V5\" />\n <path d=\"M5 12l7-7 7 7\" />\n </svg>\n);\n\n/** Down-arrow used for downvoting */\nconst ArrowDownIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 5v14\" />\n <path d=\"M19 12l-7 7-7-7\" />\n </svg>\n);\n\n/** Life-ring / help icon for the support affordance */\nconst SupportIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <line x1=\"4.93\" y1=\"4.93\" x2=\"9.17\" y2=\"9.17\" />\n <line x1=\"14.83\" y1=\"14.83\" x2=\"19.07\" y2=\"19.07\" />\n <line x1=\"14.83\" y1=\"9.17\" x2=\"19.07\" y2=\"4.93\" />\n <line x1=\"14.83\" y1=\"9.17\" x2=\"18.36\" y2=\"5.64\" />\n <line x1=\"4.93\" y1=\"19.07\" x2=\"9.17\" y2=\"14.83\" />\n </svg>\n);\n\nconst DotIcon = () => (\n <svg viewBox=\"0 0 24 24\" width=\"10\" height=\"10\" fill=\"currentColor\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n </svg>\n);\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const WorkflowDiscoveryCard: React.FC<WorkflowDiscoveryCardProps> = ({\n id,\n name,\n summary,\n description,\n category,\n icon,\n readiness,\n statusLabel,\n integrations = [],\n optionalIntegrations = [],\n setupRequirements = [],\n demoVideoUrl,\n paidIntegration,\n usesN8n = false,\n source,\n popularity,\n reservePopularitySpace = true,\n customIndicators = [],\n estimatedCostPerRun,\n defaultExpanded = false,\n isExpanded: controlledExpanded,\n onToggleExpanded,\n onRun,\n onPlayDemo,\n onOpenPaidSheet,\n votes,\n votesPlacement = 'expanded-footer',\n onVote,\n onReportIssue,\n supportPlacement = 'metadata',\n disabled = false,\n className,\n}) => {\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n const expanded = controlledExpanded ?? internalExpanded;\n const visual = readinessVisuals[readiness];\n const displayedStatusLabel = statusLabel ?? visual.label;\n\n const handleToggleExpanded = useCallback(() => {\n const next = !expanded;\n if (controlledExpanded === undefined) {\n setInternalExpanded(next);\n }\n onToggleExpanded?.(id, next);\n }, [expanded, controlledExpanded, onToggleExpanded, id]);\n\n const handleRun = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onRun?.(id);\n },\n [onRun, id]\n );\n\n const handlePlayDemo = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (demoVideoUrl) onPlayDemo?.(id, demoVideoUrl);\n },\n [onPlayDemo, id, demoVideoUrl]\n );\n\n const handleOpenPaid = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (paidIntegration) onOpenPaidSheet?.(id, paidIntegration);\n },\n [onOpenPaidSheet, id, paidIntegration]\n );\n\n const handleVote = useCallback(\n (e: React.MouseEvent, direction: 'up' | 'down') => {\n e.stopPropagation();\n onVote?.(id, direction);\n },\n [onVote, id]\n );\n\n const handleReportIssue = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onReportIssue?.(id, name);\n },\n [onReportIssue, id, name]\n );\n\n // Collapsed-row metadata indicators — small, right side, only when relevant.\n // Dedupe rule: if the status pill already announces \"Needs n8n\" or \"Paid\",\n // skip the matching metadata icon to avoid visual repetition.\n const hasDemo = Boolean(demoVideoUrl);\n const hasN8n = usesN8n && readiness !== 'needs-n8n';\n const hasPaid = Boolean(paidIntegration) && readiness !== 'paid';\n const hasSource = Boolean(source);\n\n // Popularity slot — render even if empty so the design has consistent spacing\n const popularityNode = (() => {\n if (popularity?.trending) {\n return (\n <PopularityPill title=\"Trending\">\n <TrendingIcon />\n <span>Trending</span>\n </PopularityPill>\n );\n }\n if (popularity?.rank != null) {\n return (\n <PopularityPill title={`Ranked #${popularity.rank}`}>\n <span>#{popularity.rank}</span>\n </PopularityPill>\n );\n }\n if (popularity?.runCount != null) {\n return (\n <PopularityPill title={`${popularity.runCount} runs`}>\n <span>{formatRunCount(popularity.runCount)} runs</span>\n </PopularityPill>\n );\n }\n if (reservePopularitySpace) {\n return <PopularitySlotPlaceholder aria-hidden=\"true\" />;\n }\n return null;\n })();\n\n const visibleIntegrations = integrations.slice(0, 4);\n const overflowCount = Math.max(0, integrations.length - 4);\n\n return (\n <Card\n data-testid={`workflow-discovery-card-${id}`}\n $disabled={disabled}\n $expanded={expanded}\n className={className}\n aria-label={`${name} — ${displayedStatusLabel}`}\n >\n {/* ---------- Header (always visible) ---------- */}\n <HeaderButton\n type=\"button\"\n onClick={handleToggleExpanded}\n disabled={disabled}\n aria-expanded={expanded}\n aria-controls={`workflow-discovery-card-${id}-details`}\n >\n <HeaderTop>\n {icon !== undefined && (\n <IconSlot aria-hidden=\"true\">\n {typeof icon === 'string' ? <IconImg src={icon} alt=\"\" /> : icon}\n </IconSlot>\n )}\n\n <TitleColumn>\n {/* Name + top-right cluster share ONE flex row. The cluster is\n anchored to the top of the row (align-items: flex-start) so\n it doesn't drift when the title wraps to 2 lines. */}\n <NameRow>\n <Name>{name}</Name>\n <HeaderTopRight>\n {category && <CategoryTag>{formatCategoryLabel(category)}</CategoryTag>}\n <MetadataIcons>\n {hasDemo && (\n <MetadataIcon\n aria-hidden=\"true\"\n title=\"Demo video available\"\n $accent={tokens.colors.primary}\n >\n <PlayIcon />\n </MetadataIcon>\n )}\n {hasN8n && (\n <MetadataIcon\n aria-hidden=\"true\"\n title=\"Uses n8n\"\n $accent={tokens.colors.accent}\n >\n <N8nIcon />\n </MetadataIcon>\n )}\n {hasPaid && (\n <MetadataIcon\n aria-hidden=\"true\"\n title=\"Paid integration\"\n $accent={tokens.colors.accent}\n >\n <PaidIcon />\n </MetadataIcon>\n )}\n {hasSource && (\n <MetadataIcon\n aria-hidden=\"true\"\n title={`Based on ${source?.label}`}\n $accent={tokens.colors.text.tertiary}\n >\n <LinkIcon />\n </MetadataIcon>\n )}\n {customIndicators.map((ind) => (\n <MetadataIcon\n key={ind.id}\n aria-hidden=\"true\"\n title={ind.tooltip}\n $accent={ind.color ?? tokens.colors.text.secondary}\n >\n {ind.icon}\n </MetadataIcon>\n ))}\n {votes && votesPlacement === 'metadata' && (\n <MetadataVoteCompact\n $userVote={votes.userVote ?? null}\n onClick={(e) => handleVote(e, 'up')}\n title={`Upvote (${votes.up})`}\n type=\"button\"\n aria-label={`Upvote — ${votes.up} so far`}\n >\n <ArrowUpIcon />\n <span>{formatVoteCount(votes.up - votes.down)}</span>\n </MetadataVoteCompact>\n )}\n {onReportIssue && supportPlacement === 'metadata' && (\n <MetadataIconButton\n $accent={tokens.colors.text.tertiary}\n onClick={handleReportIssue}\n title=\"Report an issue with this workflow\"\n type=\"button\"\n aria-label=\"Report an issue\"\n >\n <SupportIcon />\n </MetadataIconButton>\n )}\n </MetadataIcons>\n </HeaderTopRight>\n </NameRow>\n <Summary>{summary}</Summary>\n </TitleColumn>\n </HeaderTop>\n\n <HeaderBottom>\n <HeaderBottomContent>\n <StatusPill\n $bg={visual.bg}\n $border={visual.border}\n $color={visual.color}\n $animated={visual.animated}\n >\n <StatusDot $color={visual.color} $animated={visual.animated}>\n <DotIcon />\n </StatusDot>\n {displayedStatusLabel}\n </StatusPill>\n\n {visibleIntegrations.length > 0 && (\n <IntegrationRow>\n {visibleIntegrations.map((it) => (\n <IntegrationIconSlot\n key={it.name}\n $connected={it.connected !== false}\n $optional={!!it.optional}\n title={`${it.name}${\n it.connected === false\n ? it.optional\n ? ' (optional)'\n : ' (not connected)'\n : ''\n }`}\n >\n {typeof it.icon === 'string' ? (\n <IntegrationImg src={it.icon} alt={it.name} />\n ) : (\n it.icon\n )}\n </IntegrationIconSlot>\n ))}\n {overflowCount > 0 && (\n <OverflowBadge title={`${overflowCount} more`}>+{overflowCount}</OverflowBadge>\n )}\n </IntegrationRow>\n )}\n\n {popularityNode}\n\n {estimatedCostPerRun && (\n <CostPill title={`Estimated ${estimatedCostPerRun} per run`}>\n {estimatedCostPerRun}\n {estimatedCostPerRun.includes('/') ? '' : '/run'}\n </CostPill>\n )}\n\n {votes && votesPlacement === 'bottom-row' && (\n <VotePill role=\"group\" aria-label=\"Workflow voting\">\n <VoteArrowButton\n type=\"button\"\n $active={votes.userVote === 'up'}\n $direction=\"up\"\n onClick={(e) => handleVote(e, 'up')}\n aria-label={`Upvote — ${votes.up} so far`}\n >\n <ArrowUpIcon />\n </VoteArrowButton>\n <VoteCount>{formatVoteCount(votes.up - votes.down)}</VoteCount>\n <VoteArrowButton\n type=\"button\"\n $active={votes.userVote === 'down'}\n $direction=\"down\"\n onClick={(e) => handleVote(e, 'down')}\n aria-label={`Downvote — ${votes.down} so far`}\n >\n <ArrowDownIcon />\n </VoteArrowButton>\n </VotePill>\n )}\n </HeaderBottomContent>\n\n <ChevronWrapper aria-hidden=\"true\">\n <ChevronIcon open={expanded} />\n </ChevronWrapper>\n </HeaderBottom>\n </HeaderButton>\n\n {/* ---------- Expanded panel ---------- */}\n <DetailsPanel\n id={`workflow-discovery-card-${id}-details`}\n $expanded={expanded}\n aria-hidden={!expanded}\n >\n <DetailsInner>\n <DescriptionBlock>{description ?? summary}</DescriptionBlock>\n\n {setupRequirements.length > 0 && (\n <Section>\n <SectionTitle>Setup required</SectionTitle>\n <SetupList>\n {setupRequirements.map((req) => (\n <SetupRow key={req.id} $done={!!req.done}>\n <SetupStatus $done={!!req.done} aria-hidden=\"true\">\n {req.done ? <CheckIcon /> : <DotIcon />}\n </SetupStatus>\n <SetupLabel $done={!!req.done}>{req.label}</SetupLabel>\n {!req.done && req.actionLabel && (\n <SetupAction\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n req.onAction?.();\n }}\n >\n {req.actionLabel}\n </SetupAction>\n )}\n </SetupRow>\n ))}\n </SetupList>\n </Section>\n )}\n\n {(integrations.length > 0 || optionalIntegrations.length > 0) && (\n <Section>\n <SectionTitle>Integrations</SectionTitle>\n {/* Required and Optional sit side-by-side (Required left, Optional\n right) via justify-content: space-between. Saves one vertical\n row on the expanded card. Wraps back to stacked on narrow\n viewports thanks to flex-wrap. */}\n <IntegrationGroupsRow>\n {integrations.length > 0 && (\n <IntegrationGroup>\n <IntegrationGroupLabel>Required</IntegrationGroupLabel>\n <IntegrationRow>\n {integrations.map((it) => (\n <IntegrationIconSlot\n key={`req-${it.name}`}\n $connected={it.connected !== false}\n $optional={false}\n title={`${it.name}${it.connected === false ? ' (not connected)' : ''}`}\n >\n {typeof it.icon === 'string' ? (\n <IntegrationImg src={it.icon} alt={it.name} />\n ) : (\n it.icon\n )}\n </IntegrationIconSlot>\n ))}\n </IntegrationRow>\n </IntegrationGroup>\n )}\n {optionalIntegrations.length > 0 && (\n <IntegrationGroup>\n <IntegrationGroupLabel>Optional</IntegrationGroupLabel>\n <IntegrationRow>\n {optionalIntegrations.map((it) => (\n <IntegrationIconSlot\n key={`opt-${it.name}`}\n $connected={it.connected !== false}\n $optional={true}\n title={`${it.name} (optional)`}\n >\n {typeof it.icon === 'string' ? (\n <IntegrationImg src={it.icon} alt={it.name} />\n ) : (\n it.icon\n )}\n </IntegrationIconSlot>\n ))}\n </IntegrationRow>\n </IntegrationGroup>\n )}\n </IntegrationGroupsRow>\n </Section>\n )}\n\n {paidIntegration && (\n <PaidBanner>\n <PaidBannerHeader>\n <PaidIcon />\n <PaidBannerTitle>\n {paidIntegration.name} requires a paid subscription\n {paidIntegration.hasFreeTrial ? ' · free trial available' : ''}\n </PaidBannerTitle>\n </PaidBannerHeader>\n {paidIntegration.pricingNote && (\n <PaidBannerNote>{paidIntegration.pricingNote}</PaidBannerNote>\n )}\n <PaidBannerActions>\n <PrimaryPillButton type=\"button\" onClick={handleOpenPaid}>\n {paidIntegration.hasFreeTrial ? 'Start free trial' : 'View pricing'}\n </PrimaryPillButton>\n {paidIntegration.setupVideoUrl && (\n <SecondaryPillButton type=\"button\" onClick={handleOpenPaid}>\n <PlayIcon /> Watch setup\n </SecondaryPillButton>\n )}\n </PaidBannerActions>\n </PaidBanner>\n )}\n\n {demoVideoUrl && (\n <DemoBanner type=\"button\" onClick={handlePlayDemo} aria-label=\"Play demo video\">\n <DemoPlayBubble>\n <PlayIconLarge />\n </DemoPlayBubble>\n <DemoText>\n <DemoTitle>Watch the demo</DemoTitle>\n <DemoSubtitle>See this workflow in action before you run it</DemoSubtitle>\n </DemoText>\n </DemoBanner>\n )}\n\n <Actions>\n {readiness === 'unavailable' ? (\n <UnavailableNote>This workflow is not available on your plan.</UnavailableNote>\n ) : readiness === 'failed' ? (\n <UnavailableNote>\n Provisioning failed. Retry from settings, or contact support.\n </UnavailableNote>\n ) : (\n <PrimaryActionButton\n type=\"button\"\n onClick={handleRun}\n disabled={disabled || readiness === 'provisioning'}\n >\n {readiness === 'ready'\n ? 'Run workflow'\n : readiness === 'provisioning'\n ? 'Provisioning…'\n : 'Set up to run'}\n </PrimaryActionButton>\n )}\n </Actions>\n\n {(votes && votesPlacement === 'expanded-footer') ||\n (onReportIssue && supportPlacement === 'expanded-footer') ? (\n <ExpandedFooterActions>\n {votes && votesPlacement === 'expanded-footer' && (\n <VoteBlock role=\"group\" aria-label=\"Was this workflow helpful?\">\n <VoteBlockLabel>Was this helpful?</VoteBlockLabel>\n <VoteBlockButtons>\n <VoteBlockButton\n type=\"button\"\n $active={votes.userVote === 'up'}\n $direction=\"up\"\n onClick={(e) => handleVote(e, 'up')}\n aria-label={`Upvote — ${votes.up} so far`}\n >\n <ArrowUpIcon />\n <span>{formatVoteCount(votes.up)}</span>\n </VoteBlockButton>\n <VoteBlockButton\n type=\"button\"\n $active={votes.userVote === 'down'}\n $direction=\"down\"\n onClick={(e) => handleVote(e, 'down')}\n aria-label={`Downvote — ${votes.down} so far`}\n >\n <ArrowDownIcon />\n <span>{formatVoteCount(votes.down)}</span>\n </VoteBlockButton>\n </VoteBlockButtons>\n </VoteBlock>\n )}\n {onReportIssue && supportPlacement === 'expanded-footer' && (\n <SupportButton type=\"button\" onClick={handleReportIssue}>\n <SupportIcon />\n <span>Report an issue</span>\n </SupportButton>\n )}\n </ExpandedFooterActions>\n ) : null}\n\n {source && (\n <SourceFooter>\n Based on{' '}\n <SourceLink href={source.url} target=\"_blank\" rel=\"noopener noreferrer\">\n {source.label}\n </SourceLink>\n </SourceFooter>\n )}\n </DetailsInner>\n </DetailsPanel>\n </Card>\n );\n};\n\nWorkflowDiscoveryCard.displayName = 'WorkflowDiscoveryCard';\n\n// =============================================================================\n// Utilities\n// =============================================================================\n\nfunction formatRunCount(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(1)}K`;\n return String(n);\n}\n\n/**\n * Turn raw category enum values like \"social_media\" into \"SOCIAL MEDIA\"\n * for the small uppercase tag — keeps the label readable on the card\n * without losing the all-caps visual style.\n */\nfunction formatCategoryLabel(category: string): string {\n return category.replace(/_/g, ' ');\n}\n\n/**\n * Compact vote count: 1_240 -> \"1.2K\", 0 -> \"0\".\n * Net score (up - down) can be negative; sign is preserved.\n */\nfunction formatVoteCount(n: number): string {\n const sign = n < 0 ? '-' : '';\n const abs = Math.abs(n);\n if (abs >= 1_000_000) return `${sign}${(abs / 1_000_000).toFixed(1)}M`;\n if (abs >= 1_000) return `${sign}${(abs / 1_000).toFixed(1)}K`;\n return `${sign}${abs}`;\n}\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst pulse = keyframes`\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n`;\n\nconst expandIn = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`;\n\nconst Card = styled.article<{ $disabled: boolean; $expanded: boolean }>`\n display: flex;\n flex-direction: column;\n width: 100%;\n background: ${tokens.colors.background.dark};\n border: 1px solid\n ${(p) => (p.$expanded ? tokens.colors.border.hover : tokens.colors.border.default)};\n border-radius: ${tokens.borderRadius.xl};\n overflow: hidden;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: border-color ${tokens.transitions.fast},\n background-color ${tokens.transitions.fast};\n opacity: ${(p) => (p.$disabled ? 0.55 : 1)};\n\n &:hover {\n border-color: ${(p) =>\n p.$disabled ? tokens.colors.border.default : tokens.colors.border.hover};\n }\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n /* Slightly more breathing room on larger screens */\n border-radius: ${tokens.borderRadius.xl};\n }\n`;\n\nconst HeaderButton = styled.button`\n all: unset;\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n cursor: pointer;\n text-align: left;\n width: 100%;\n box-sizing: border-box;\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: -2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n }\n`;\n\nconst HeaderTop = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.sm};\n width: 100%;\n`;\n\nconst IconSlot = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n padding: 6px;\n box-sizing: border-box;\n flex-shrink: 0;\n background: ${tokens.colors.background.light};\n border-radius: ${tokens.borderRadius.md};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst IconImg = styled.img`\n width: 100%;\n height: 100%;\n object-fit: contain;\n`;\n\nconst TitleColumn = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n`;\n\n/**\n * Top row inside TitleColumn — holds the Name + the top-right cluster\n * (category tag + metadata icons). Using align-items: flex-start so the\n * cluster stays anchored to the FIRST line of the title even if the title\n * wraps to 2 lines. The Summary below this row is a sibling of NameRow,\n * so it gets the full TitleColumn width and can flow under the cluster.\n */\nconst NameRow = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.sm};\n min-width: 0;\n`;\n\nconst Name = styled.h3`\n flex: 1 1 auto;\n margin: 0;\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n /* Allow up to 2 lines on narrow screens (e.g. 320px). On wider screens\n the title will naturally render as 1 line because there's room. We use\n overflow-wrap (not word-break) so words don't split mid-character —\n they only break when a single word is too long for one line. */\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n overflow-wrap: break-word;\n min-width: 0;\n`;\n\nconst CategoryTag = styled.span`\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.medium};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: ${tokens.colors.text.tertiary};\n background: ${tokens.colors.surface.overlay};\n padding: 2px ${tokens.spacing.xs};\n border-radius: ${tokens.borderRadius.sm};\n flex-shrink: 0;\n`;\n\nconst Summary = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.normal};\n /* Clamp to 2 lines so mobile shows the gist (instead of cutting at ~25 chars\n with a single-line ellipsis) while wider screens still mostly render as\n one line because of the available width. overflow-wrap (not word-break)\n keeps full words intact unless a single word genuinely doesn't fit. */\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n overflow-wrap: break-word;\n min-width: 0;\n`;\n\n/**\n * Top-right cluster — holds the category tag and the metadata icon row.\n * Sits at the top of HeaderTop (because HeaderTop has align-items: flex-start)\n * so the category tag never drifts down when the title wraps to 2 lines.\n */\nconst HeaderTopRight = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\nconst MetadataIcons = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\nconst MetadataIcon = styled.span<{ $accent: string }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) => `${p.$accent}1F`};\n color: ${(p) => p.$accent};\n flex-shrink: 0;\n`;\n\n/** Same visual as MetadataIcon but as a real button (for support + compact-vote) */\nconst MetadataIconButton = styled.button<{ $accent: string }>`\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) => `${p.$accent}1F`};\n color: ${(p) => p.$accent};\n flex-shrink: 0;\n cursor: pointer;\n transition: background ${tokens.transitions.fast};\n\n &:hover {\n background: ${(p) => `${p.$accent}33`};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\n/**\n * Compact vote affordance for the metadata icon row — a single button with\n * up-arrow + net-score, optimised for very tight horizontal space. Tap toggles\n * the user's upvote. (Downvote not exposed in this placement.)\n */\nconst MetadataVoteCompact = styled.button<{ $userVote: 'up' | 'down' | null }>`\n all: unset;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n height: 26px;\n padding: 0 ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) =>\n p.$userVote === 'up' ? `${tokens.colors.primary}33` : `${tokens.colors.text.tertiary}1F`};\n color: ${(p) => (p.$userVote === 'up' ? tokens.colors.primary : tokens.colors.text.secondary)};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n cursor: pointer;\n transition: background ${tokens.transitions.fast}, color ${tokens.transitions.fast};\n\n &:hover {\n background: ${(p) =>\n p.$userVote === 'up' ? `${tokens.colors.primary}40` : `${tokens.colors.text.tertiary}33`};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\n/**\n * Bottom row of the collapsed card. Two flex children:\n * 1. HeaderBottomContent — all the status/integration/pill content, wraps as needed\n * 2. ChevronWrapper — the expand/collapse indicator, anchored right\n * Using justify-content: space-between + align-items: center means the chevron\n * stays visually anchored to the right of the row no matter how much the\n * content wraps to 2+ lines.\n */\nconst HeaderBottom = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${tokens.spacing.sm};\n width: 100%;\n`;\n\nconst HeaderBottomContent = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: ${tokens.spacing.xs};\n flex: 1 1 auto;\n min-width: 0;\n`;\n\nconst StatusPill = styled.span<{\n $bg: string;\n $border: string;\n $color: string;\n $animated?: boolean;\n}>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: 4px ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) => p.$bg};\n border: 1px solid ${(p) => p.$border};\n color: ${(p) => p.$color};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n line-height: 1;\n`;\n\nconst StatusDot = styled.span<{ $color: string; $animated?: boolean }>`\n display: inline-flex;\n width: 8px;\n height: 8px;\n color: ${(p) => p.$color};\n ${(p) =>\n p.$animated &&\n css`\n animation: ${pulse} ${tokens.animation.pulse.duration} ease-in-out infinite;\n `}\n\n svg {\n width: 100%;\n height: 100%;\n }\n`;\n\nconst IntegrationRow = styled.div`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n`;\n\nconst IntegrationIconSlot = styled.span<{ $connected: boolean; $optional: boolean }>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 5px;\n box-sizing: border-box;\n background: rgba(255, 255, 255, 0.06);\n border-radius: ${tokens.borderRadius.md};\n opacity: ${(p) => (p.$connected ? 1 : p.$optional ? 0.45 : 0.55)};\n flex-shrink: 0;\n\n ${(p) =>\n !p.$connected &&\n css`\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: ${tokens.borderRadius.md};\n border: 1px dashed\n ${p.$optional ? tokens.colors.border.default : tokens.colors.warning};\n pointer-events: none;\n }\n `}\n`;\n\nconst IntegrationImg = styled.img`\n width: 100%;\n height: 100%;\n object-fit: contain;\n`;\n\nconst OverflowBadge = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n height: 28px;\n padding: 0 ${tokens.spacing.xs};\n background: ${tokens.colors.surface.overlay};\n border-radius: ${tokens.borderRadius.md};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.tertiary};\n flex-shrink: 0;\n`;\n\nconst PopularityPill = styled.span`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: 3px ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.subtle};\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.tertiary};\n`;\n\n/**\n * Reserved popularity slot — per Nick's note, the design should always\n * include the indicator space so we can light it up later without re-layout.\n * Renders an invisible-but-spatial placeholder.\n */\nconst PopularitySlotPlaceholder = styled.span`\n display: inline-block;\n min-width: 48px;\n height: 1px;\n`;\n\nconst CostPill = styled.span`\n display: inline-flex;\n align-items: center;\n padding: 3px ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.subtle};\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.tertiary};\n`;\n\n/**\n * Bottom-row vote pill (collapsed view) — Reddit-style: up arrow + count +\n * down arrow in a single pill. Each arrow is a real button so clicks register\n * even though the pill sits inside the card's toggle button.\n */\nconst VotePill = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px ${tokens.spacing.xs};\n border-radius: ${tokens.borderRadius.full};\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.subtle};\n`;\n\nconst VoteArrowButton = styled.button<{ $active: boolean; $direction: 'up' | 'down' }>`\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: ${tokens.borderRadius.full};\n cursor: pointer;\n color: ${(p) =>\n p.$active\n ? p.$direction === 'up'\n ? tokens.colors.primary\n : tokens.colors.error\n : tokens.colors.text.tertiary};\n background: ${(p) =>\n p.$active\n ? p.$direction === 'up'\n ? `${tokens.colors.primary}26`\n : `${tokens.colors.error}26`\n : 'transparent'};\n transition: background ${tokens.transitions.fast}, color ${tokens.transitions.fast};\n\n &:hover {\n color: ${(p) => (p.$direction === 'up' ? tokens.colors.primary : tokens.colors.error)};\n background: ${(p) =>\n p.$direction === 'up' ? `${tokens.colors.primary}1F` : `${tokens.colors.error}1F`};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst VoteCount = styled.span`\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.secondary};\n min-width: 18px;\n text-align: center;\n`;\n\nconst ChevronWrapper = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: ${tokens.colors.text.tertiary};\n`;\n\n// ---------- Expanded panel ----------\n\nconst DetailsPanel = styled.div<{ $expanded: boolean }>`\n overflow: hidden;\n max-height: ${(p) => (p.$expanded ? '2000px' : '0')};\n opacity: ${(p) => (p.$expanded ? 1 : 0)};\n transition: max-height ${tokens.transitions.normal},\n opacity ${tokens.transitions.fast};\n\n ${(p) =>\n p.$expanded &&\n css`\n animation: ${expandIn} ${tokens.transitions.fast};\n `}\n`;\n\nconst DetailsInner = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.md};\n padding: 0 ${tokens.spacing.md} ${tokens.spacing.md};\n border-top: 1px solid ${tokens.colors.border.subtle};\n padding-top: ${tokens.spacing.md};\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n padding: ${tokens.spacing.md} ${tokens.spacing.lg} ${tokens.spacing.lg};\n padding-top: ${tokens.spacing.md};\n }\n`;\n\nconst DescriptionBlock = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.relaxed};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst Section = styled.section`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n`;\n\nconst SectionTitle = styled.h4`\n margin: 0;\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n letter-spacing: 0.5px;\n text-transform: uppercase;\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst SetupList = styled.ul`\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n`;\n\nconst SetupRow = styled.li<{ $done: boolean }>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n background: ${tokens.colors.surface.subtle};\n border-radius: ${tokens.borderRadius.md};\n`;\n\nconst SetupStatus = styled.span<{ $done: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) => (p.$done ? `${tokens.colors.success}1A` : tokens.colors.surface.overlay)};\n color: ${(p) => (p.$done ? tokens.colors.success : tokens.colors.text.tertiary)};\n flex-shrink: 0;\n`;\n\nconst SetupLabel = styled.span<{ $done: boolean }>`\n flex: 1;\n font-size: ${tokens.typography.fontSize.xs};\n color: ${(p) => (p.$done ? tokens.colors.text.tertiary : tokens.colors.text.primary)};\n text-decoration: ${(p) => (p.$done ? 'line-through' : 'none')};\n`;\n\nconst SetupAction = styled.button`\n all: unset;\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.primary};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.sm};\n cursor: pointer;\n transition: background ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlay};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\n/**\n * Wraps the Required + Optional integration groups so they sit side-by-side\n * (Required anchored left, Optional anchored right) on wider viewports, and\n * gracefully wrap back to stacked on narrow viewports.\n */\nconst IntegrationGroupsRow = styled.div`\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n gap: ${tokens.spacing.md} ${tokens.spacing.lg};\n width: 100%;\n`;\n\nconst IntegrationGroup = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n`;\n\nconst IntegrationGroupLabel = styled.span`\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.medium};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst PaidBanner = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background: ${tokens.colors.accent}14;\n border: 1px solid ${tokens.colors.accent}33;\n border-radius: ${tokens.borderRadius.md};\n`;\n\nconst PaidBannerHeader = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n color: ${tokens.colors.accent};\n`;\n\nconst PaidBannerTitle = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n`;\n\nconst PaidBannerNote = styled.p`\n margin: 0;\n font-size: 11px;\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst PaidBannerActions = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n flex-wrap: wrap;\n`;\n\nconst PrimaryPillButton = styled.button`\n all: unset;\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.md};\n background: ${tokens.colors.accent};\n color: #fff;\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n border-radius: ${tokens.borderRadius.full};\n cursor: pointer;\n transition: opacity ${tokens.transitions.fast};\n\n &:hover {\n opacity: 0.92;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst SecondaryPillButton = styled.button`\n all: unset;\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.md};\n background: transparent;\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.full};\n cursor: pointer;\n transition: background ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlay};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst DemoBanner = styled.button`\n all: unset;\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.md};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background: ${tokens.colors.primary}14;\n border: 1px solid ${tokens.colors.primary}33;\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: background ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.primary}1F;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst DemoPlayBubble = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: ${tokens.borderRadius.full};\n background: ${tokens.colors.primary};\n color: #fff;\n flex-shrink: 0;\n`;\n\nconst DemoText = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`;\n\nconst DemoTitle = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n`;\n\nconst DemoSubtitle = styled.span`\n font-size: 11px;\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst Actions = styled.div`\n display: flex;\n justify-content: stretch;\n width: 100%;\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n justify-content: flex-end;\n }\n`;\n\nconst PrimaryActionButton = styled.button`\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.lg};\n background: ${tokens.colors.primary};\n color: #fff;\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n width: 100%;\n text-align: center;\n transition: opacity ${tokens.transitions.fast},\n transform ${tokens.transitions.fast};\n\n &:hover:not(:disabled) {\n opacity: 0.92;\n }\n\n &:active:not(:disabled) {\n transform: translateY(1px);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n }\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n width: auto;\n min-width: 160px;\n }\n`;\n\nconst UnavailableNote = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n`;\n\n/**\n * Holds the voting block + support button below the main action row in the\n * expanded view. Lays them out side by side on wider viewports, stacks on\n * narrow ones.\n */\nconst ExpandedFooterActions = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: ${tokens.spacing.sm};\n padding-top: ${tokens.spacing.xs};\n border-top: 1px solid ${tokens.colors.border.subtle};\n`;\n\nconst VoteBlock = styled.div`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\nconst VoteBlockLabel = styled.span`\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst VoteBlockButtons = styled.div`\n display: inline-flex;\n gap: ${tokens.spacing.xs};\n`;\n\nconst VoteBlockButton = styled.button<{ $active: boolean; $direction: 'up' | 'down' }>`\n all: unset;\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n cursor: pointer;\n color: ${(p) =>\n p.$active\n ? p.$direction === 'up'\n ? tokens.colors.primary\n : tokens.colors.error\n : tokens.colors.text.secondary};\n background: ${(p) =>\n p.$active\n ? p.$direction === 'up'\n ? `${tokens.colors.primary}26`\n : `${tokens.colors.error}26`\n : tokens.colors.surface.overlay};\n border: 1px solid\n ${(p) =>\n p.$active\n ? p.$direction === 'up'\n ? `${tokens.colors.primary}66`\n : `${tokens.colors.error}66`\n : tokens.colors.border.subtle};\n transition: background ${tokens.transitions.fast}, color ${tokens.transitions.fast},\n border-color ${tokens.transitions.fast};\n\n &:hover {\n color: ${(p) => (p.$direction === 'up' ? tokens.colors.primary : tokens.colors.error)};\n background: ${(p) =>\n p.$direction === 'up' ? `${tokens.colors.primary}1F` : `${tokens.colors.error}1F`};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst SupportButton = styled.button`\n all: unset;\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n transition: color ${tokens.transitions.fast},\n background ${tokens.transitions.fast};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.surface.overlay};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst SourceFooter = styled.div`\n margin-top: ${tokens.spacing.xs};\n font-size: 11px;\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst SourceLink = styled.a`\n color: ${tokens.colors.text.secondary};\n text-decoration: underline;\n text-decoration-color: ${tokens.colors.border.default};\n text-underline-offset: 2px;\n\n &:hover {\n color: ${tokens.colors.text.primary};\n text-decoration-color: ${tokens.colors.border.hover};\n }\n`;\n\nexport default WorkflowDiscoveryCard;\n","/**\n * WorkflowDiscoveryPage — the page-level layout that hosts WorkflowDiscoveryCard instances.\n *\n * Linear: APP-263 — Design subtask: Workflow list search, filters, tags, and voting\n * (note: this PR is the list-integration step that Nick asked for; search/filters/voting\n * themselves are a later piece of APP-263 — we just reserve the slot here)\n *\n * What this file ships:\n * 1. `WorkflowDiscoveryPage` — the page chrome (header, tabs, filter slot, footer slot)\n * 2. `WorkflowDiscoverySection` — a labelled section that lays out cards in a 1/2/3-col grid\n * 3. `WorkflowDiscoveryEmptyState` — empty state body\n * 4. `WorkflowDiscoveryErrorState` — error state body\n * 5. `WorkflowDiscoveryLoadingState` — skeleton state body (matches the new card shape)\n * 6. `WorkflowDiscoveryUpgradeBanner` — the \"these need a higher plan\" banner for Unavailable tab\n *\n * Layout decisions (settled in Step 2 planning):\n * - Tabs: Available / Unavailable (kept from current app for now; can become filter chips later)\n * - Sections by category (Trending → Social Media → Ops → CRM)\n * - Filter slot reserved above the list for the eventual APP-263 search/filter UI\n * - Responsive grid: 1-col mobile, 2-col tablet, 3-col desktop\n * - Expanded card spans the full row of the section's grid (handled in WorkflowDiscoveryCard via GridCell)\n *\n * The Page itself is \"headless\" in the sense that the BODY is a children slot — each story\n * decides whether to render sections, an empty state, an error, or a loading skeleton. That\n * makes the chrome reusable across all 5 states without prop-bloat.\n */\n\nimport type React from 'react';\nimport { useMemo } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\nimport { WorkflowDiscoveryCard, type WorkflowDiscoveryCardProps } from './WorkflowDiscoveryCard';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface WorkflowDiscoveryPageTab {\n /** Unique tab id, used as the controlled value */\n id: string;\n /** Visible label, e.g. \"Available\" */\n label: string;\n /** Optional count shown in parentheses */\n count?: number;\n}\n\nexport interface WorkflowDiscoveryPageProps {\n /** Page heading text (defaults to \"Workflows\") */\n title?: string;\n /**\n * Optional subtitle / supporting copy under the title. Keep it short — the\n * cards do the heavy lifting.\n */\n subtitle?: string;\n /** Tabs to render in the segmented control. Pass 0–N tabs. */\n tabs?: WorkflowDiscoveryPageTab[];\n /** Currently selected tab id (controlled) */\n activeTabId?: string;\n /** Called when the user switches tabs */\n onTabChange?: (id: string) => void;\n /**\n * Slot reserved for the eventual APP-263 filters / search bar. Pass any\n * ReactNode and it renders between the header and the body. Pass nothing\n * and the slot is collapsed — no empty space.\n */\n filterSlot?: React.ReactNode;\n /**\n * Slot rendered at the bottom of the page, AFTER the body. Used for the\n * \"Upgrade your plan\" banner on the Unavailable tab.\n */\n footerSlot?: React.ReactNode;\n /** Body content — sections, empty state, error state, etc. */\n children?: React.ReactNode;\n /** Custom className */\n className?: string;\n}\n\nexport interface WorkflowDiscoverySectionProps {\n /** Section label (e.g. \"Trending\", \"Social Media\"). Pass undefined for an unlabelled section. */\n label?: string;\n /** Optional count shown next to the label */\n count?: number;\n /**\n * Workflows to render inside this section. Each is rendered as a\n * WorkflowDiscoveryCard inside a responsive grid cell. The expanded card\n * (if any) spans the full grid row.\n */\n workflows: WorkflowDiscoveryCardProps[];\n /** Which card id is currently expanded (controlled) */\n expandedId?: string | null;\n /** Called when a card toggles expansion */\n onToggle?: (id: string, next: boolean) => void;\n}\n\nexport interface WorkflowDiscoveryEmptyStateProps {\n /** Headline message */\n title?: string;\n /** Supporting text */\n message?: string;\n /** Optional CTA label */\n ctaLabel?: string;\n /** Optional CTA handler */\n onCta?: () => void;\n}\n\nexport interface WorkflowDiscoveryErrorStateProps {\n /** Headline */\n title?: string;\n /** Error message */\n message?: string;\n /** Retry handler */\n onRetry?: () => void;\n}\n\nexport interface WorkflowDiscoveryLoadingStateProps {\n /** How many skeleton cards to render (defaults to a sensible count) */\n count?: number;\n}\n\nexport interface WorkflowDiscoveryUpgradeBannerProps {\n /** Top line, e.g. \"These workflows require a higher plan\" */\n title?: string;\n /** Optional supporting copy */\n message?: string;\n /** CTA label */\n ctaLabel?: string;\n /** CTA handler */\n onLearnMore?: () => void;\n}\n\n// =============================================================================\n// Page chrome\n// =============================================================================\n\nexport const WorkflowDiscoveryPage: React.FC<WorkflowDiscoveryPageProps> = ({\n title = 'Workflows',\n subtitle,\n tabs,\n activeTabId,\n onTabChange,\n filterSlot,\n footerSlot,\n children,\n className,\n}) => {\n return (\n <PageRoot className={className} data-testid=\"workflow-discovery-page\">\n <PageHeader>\n <PageTitleColumn>\n <PageTitle>{title}</PageTitle>\n {subtitle && <PageSubtitle>{subtitle}</PageSubtitle>}\n </PageTitleColumn>\n\n {tabs && tabs.length > 0 && (\n <TabRow role=\"tablist\" aria-label=\"Workflow availability\">\n {tabs.map((tab) => {\n const active = tab.id === activeTabId;\n return (\n <TabButton\n key={tab.id}\n $active={active}\n role=\"tab\"\n type=\"button\"\n aria-selected={active}\n onClick={() => onTabChange?.(tab.id)}\n >\n {tab.label}\n {tab.count != null && <TabCount $active={active}>{tab.count}</TabCount>}\n </TabButton>\n );\n })}\n </TabRow>\n )}\n </PageHeader>\n\n {/* Reserved slot for APP-263 filters. Renders only if content provided. */}\n {filterSlot && <FilterRow>{filterSlot}</FilterRow>}\n\n <PageBody>{children}</PageBody>\n\n {footerSlot && <PageFooter>{footerSlot}</PageFooter>}\n </PageRoot>\n );\n};\n\nWorkflowDiscoveryPage.displayName = 'WorkflowDiscoveryPage';\n\n// =============================================================================\n// Section — labelled group of cards in a responsive grid\n// =============================================================================\n\nexport const WorkflowDiscoverySection: React.FC<WorkflowDiscoverySectionProps> = ({\n label,\n count,\n workflows,\n expandedId,\n onToggle,\n}) => {\n // Stable wiring per card — `isExpanded` controlled by parent, `onToggleExpanded`\n // bubbles up to the section so only one card stays open at a time.\n const renderedCards = useMemo(\n () =>\n workflows.map((wf) => {\n const isExpanded = expandedId === wf.id;\n return (\n <SectionGridCell key={wf.id} $expanded={isExpanded}>\n <WorkflowDiscoveryCard\n {...wf}\n isExpanded={isExpanded}\n onToggleExpanded={(id, next) => onToggle?.(id, next)}\n />\n </SectionGridCell>\n );\n }),\n [workflows, expandedId, onToggle]\n );\n\n return (\n <SectionRoot>\n {label && (\n <SectionHeader>\n <SectionLabel>{label}</SectionLabel>\n {count != null && <SectionCount>{count}</SectionCount>}\n </SectionHeader>\n )}\n <SectionGrid>{renderedCards}</SectionGrid>\n </SectionRoot>\n );\n};\n\nWorkflowDiscoverySection.displayName = 'WorkflowDiscoverySection';\n\n// =============================================================================\n// Empty state\n// =============================================================================\n\nconst ClipboardIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"32\"\n height=\"32\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <rect x=\"8\" y=\"4\" width=\"8\" height=\"3\" rx=\"1\" />\n <path d=\"M16 5h2a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2\" />\n <path d=\"M9 12h6M9 16h4\" />\n </svg>\n);\n\nconst AlertIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"32\"\n height=\"32\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"13\" />\n <circle cx=\"12\" cy=\"16.5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const WorkflowDiscoveryEmptyState: React.FC<WorkflowDiscoveryEmptyStateProps> = ({\n title = 'No workflows yet',\n message = 'Workflows will appear here once they are enabled for your account.',\n ctaLabel,\n onCta,\n}) => (\n <StateRoot data-testid=\"workflow-discovery-empty\">\n <StateIconWrap $tone=\"neutral\">\n <ClipboardIcon />\n </StateIconWrap>\n <StateTitle>{title}</StateTitle>\n <StateMessage>{message}</StateMessage>\n {ctaLabel && onCta && (\n <StatePrimaryButton type=\"button\" onClick={onCta}>\n {ctaLabel}\n </StatePrimaryButton>\n )}\n </StateRoot>\n);\n\nWorkflowDiscoveryEmptyState.displayName = 'WorkflowDiscoveryEmptyState';\n\n// =============================================================================\n// Error state\n// =============================================================================\n\nexport const WorkflowDiscoveryErrorState: React.FC<WorkflowDiscoveryErrorStateProps> = ({\n title = 'Failed to load workflows',\n message = 'Something went wrong while fetching your workflows. Check your connection and try again.',\n onRetry,\n}) => (\n <StateRoot data-testid=\"workflow-discovery-error\">\n <StateIconWrap $tone=\"error\">\n <AlertIcon />\n </StateIconWrap>\n <StateTitle>{title}</StateTitle>\n <StateMessage>{message}</StateMessage>\n {onRetry && (\n <StatePrimaryButton type=\"button\" onClick={onRetry}>\n Retry\n </StatePrimaryButton>\n )}\n </StateRoot>\n);\n\nWorkflowDiscoveryErrorState.displayName = 'WorkflowDiscoveryErrorState';\n\n// =============================================================================\n// Loading state — skeleton cards matching the new card shape\n// =============================================================================\n\nexport const WorkflowDiscoveryLoadingState: React.FC<WorkflowDiscoveryLoadingStateProps> = ({\n count = 6,\n}) => {\n const items = useMemo(() => Array.from({ length: count }, (_, i) => i), [count]);\n return (\n <SectionGrid data-testid=\"workflow-discovery-loading\">\n {items.map((i) => (\n <SectionGridCell key={`skeleton-${i}`} $expanded={false}>\n <SkeletonCard>\n <SkeletonHeaderRow>\n <SkeletonTitleBlock>\n <SkeletonLine $width=\"60%\" $height=\"16px\" />\n <SkeletonLine $width=\"90%\" $height=\"12px\" />\n </SkeletonTitleBlock>\n <SkeletonChip $width=\"24px\" $height=\"24px\" $rounded />\n </SkeletonHeaderRow>\n <SkeletonFooterRow>\n <SkeletonChip $width=\"70px\" $height=\"20px\" />\n <SkeletonChip $width=\"24px\" $height=\"24px\" $rounded />\n <SkeletonChip $width=\"24px\" $height=\"24px\" $rounded />\n <SkeletonChip $width=\"50px\" $height=\"20px\" />\n </SkeletonFooterRow>\n </SkeletonCard>\n </SectionGridCell>\n ))}\n </SectionGrid>\n );\n};\n\nWorkflowDiscoveryLoadingState.displayName = 'WorkflowDiscoveryLoadingState';\n\n// =============================================================================\n// Upgrade banner — for the bottom of Unavailable tab\n// =============================================================================\n\nconst ExternalLinkIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n);\n\nexport const WorkflowDiscoveryUpgradeBanner: React.FC<WorkflowDiscoveryUpgradeBannerProps> = ({\n title = 'Upgrade your plan to unlock these automations',\n message,\n ctaLabel = 'Learn more',\n onLearnMore,\n}) => (\n <BannerRoot data-testid=\"workflow-discovery-upgrade-banner\">\n <BannerTextColumn>\n <BannerTitle>{title}</BannerTitle>\n {message && <BannerMessage>{message}</BannerMessage>}\n </BannerTextColumn>\n {onLearnMore && (\n <BannerCta type=\"button\" onClick={onLearnMore}>\n <ExternalLinkIcon />\n <span>{ctaLabel}</span>\n </BannerCta>\n )}\n </BannerRoot>\n);\n\nWorkflowDiscoveryUpgradeBanner.displayName = 'WorkflowDiscoveryUpgradeBanner';\n\n// =============================================================================\n// Styled components\n// =============================================================================\n\n// ---------- Page chrome ----------\n\nconst PageRoot = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.primary};\n`;\n\nconst PageHeader = styled.header`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.md};\n padding-bottom: ${tokens.spacing.lg};\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n flex-direction: row;\n align-items: flex-end;\n justify-content: space-between;\n gap: ${tokens.spacing.lg};\n }\n`;\n\nconst PageTitleColumn = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n min-width: 0;\n`;\n\nconst PageTitle = styled.h1`\n margin: 0;\n font-size: ${tokens.typography.fontSize['2xl']};\n font-weight: ${tokens.typography.fontWeight.bold};\n line-height: ${tokens.typography.lineHeight.tight};\n color: ${tokens.colors.text.primary};\n`;\n\nconst PageSubtitle = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n line-height: ${tokens.typography.lineHeight.normal};\n`;\n\n/**\n * Segmented control tab row. Matches the visual style of the current mobile\n * app's view toggle for visual continuity, but anchored at the right of the\n * header on desktop instead of stacked under the title.\n */\nconst TabRow = styled.div`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs};\n background: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.lg};\n align-self: flex-start;\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n align-self: flex-end;\n }\n`;\n\nconst TabButton = styled.button<{ $active: boolean }>`\n all: unset;\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.lg};\n background: ${(p) => (p.$active ? tokens.colors.primary : 'transparent')};\n color: ${(p) => (p.$active ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n border-radius: ${tokens.borderRadius.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n cursor: pointer;\n transition: background ${tokens.transitions.fast},\n color ${tokens.transitions.fast};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n background: ${(p) => (p.$active ? tokens.colors.primary : tokens.colors.surface.overlay)};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nconst TabCount = styled.span<{ $active: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) => (p.$active ? 'rgba(255, 255, 255, 0.18)' : tokens.colors.surface.overlay)};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: inherit;\n`;\n\n/**\n * Reserved row for filters / search (APP-263). Renders only when the consumer\n * provides content via `filterSlot` — collapses cleanly otherwise.\n */\nconst FilterRow = styled.div`\n padding-bottom: ${tokens.spacing.md};\n`;\n\nconst PageBody = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xl};\n`;\n\nconst PageFooter = styled.div`\n padding-top: ${tokens.spacing.lg};\n`;\n\n// ---------- Section ----------\n\nconst SectionRoot = styled.section`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n`;\n\nconst SectionHeader = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding-bottom: ${tokens.spacing.xs};\n`;\n\nconst SectionLabel = styled.h2`\n margin: 0;\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n letter-spacing: 0.5px;\n text-transform: uppercase;\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst SectionCount = styled.span`\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.tertiary};\n background: ${tokens.colors.surface.overlay};\n padding: 1px ${tokens.spacing.xs};\n border-radius: ${tokens.borderRadius.full};\n`;\n\n/**\n * Responsive grid. 1 column on mobile, 2 on tablet (≥ 768px), 3 on desktop\n * (≥ 1280px). When a card is expanded the cell spans the full row of the\n * current grid, so the rows below stay neatly aligned.\n */\nconst SectionGrid = styled.div`\n display: grid;\n grid-template-columns: 1fr;\n gap: ${tokens.spacing.md};\n width: 100%;\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n grid-template-columns: repeat(3, 1fr);\n }\n`;\n\nconst SectionGridCell = styled.div<{ $expanded: boolean }>`\n min-width: 0;\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n ${(p) =>\n p.$expanded &&\n css`\n grid-column: 1 / -1;\n `}\n }\n`;\n\n// ---------- State components (empty / error) ----------\n\nconst StateRoot = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing['2xl']} ${tokens.spacing.lg};\n text-align: center;\n border: 1px dashed ${tokens.colors.border.subtle};\n border-radius: ${tokens.borderRadius.lg};\n background: ${tokens.colors.surface.subtle};\n`;\n\nconst StateIconWrap = styled.div<{ $tone: 'neutral' | 'error' }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 56px;\n height: 56px;\n border-radius: ${tokens.borderRadius.full};\n background: ${(p) =>\n p.$tone === 'error' ? `${tokens.colors.error}1A` : tokens.colors.surface.overlay};\n color: ${(p) => (p.$tone === 'error' ? tokens.colors.error : tokens.colors.text.tertiary)};\n margin-bottom: ${tokens.spacing.xs};\n`;\n\nconst StateTitle = styled.h3`\n margin: 0;\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n`;\n\nconst StateMessage = styled.p`\n margin: 0;\n max-width: 420px;\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst StatePrimaryButton = styled.button`\n all: unset;\n margin-top: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.lg};\n background: ${tokens.colors.primary};\n color: #fff;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: opacity ${tokens.transitions.fast};\n\n &:hover {\n opacity: 0.92;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\n// ---------- Loading skeleton ----------\n\nconst pulse = keyframes`\n 0%, 100% { opacity: 0.6; }\n 50% { opacity: 0.3; }\n`;\n\nconst SkeletonCard = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.md};\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.background.dark};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.xl};\n`;\n\nconst SkeletonHeaderRow = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.sm};\n`;\n\nconst SkeletonTitleBlock = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n flex: 1;\n min-width: 0;\n`;\n\nconst SkeletonFooterRow = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-wrap: wrap;\n`;\n\nconst SkeletonLine = styled.div<{ $width: string; $height: string }>`\n width: ${(p) => p.$width};\n height: ${(p) => p.$height};\n background: ${tokens.colors.surface.overlay};\n border-radius: ${tokens.borderRadius.sm};\n animation: ${pulse} ${tokens.animation.pulse.duration} ease-in-out infinite;\n`;\n\nconst SkeletonChip = styled.div<{\n $width: string;\n $height: string;\n $rounded?: boolean;\n}>`\n width: ${(p) => p.$width};\n height: ${(p) => p.$height};\n background: ${tokens.colors.surface.overlay};\n border-radius: ${(p) => (p.$rounded ? tokens.borderRadius.full : tokens.borderRadius.md)};\n animation: ${pulse} ${tokens.animation.pulse.duration} ease-in-out infinite;\n flex-shrink: 0;\n`;\n\n// ---------- Upgrade banner ----------\n\nconst BannerRoot = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.md};\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n background: ${tokens.colors.accent}14;\n border: 1px solid ${tokens.colors.accent}33;\n border-radius: ${tokens.borderRadius.lg};\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n }\n`;\n\nconst BannerTextColumn = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n min-width: 0;\n`;\n\nconst BannerTitle = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n`;\n\nconst BannerMessage = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n line-height: ${tokens.typography.lineHeight.normal};\n`;\n\nconst BannerCta = styled.button`\n all: unset;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background: ${tokens.colors.accent};\n color: #fff;\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n border-radius: ${tokens.borderRadius.full};\n cursor: pointer;\n flex-shrink: 0;\n transition: opacity ${tokens.transitions.fast};\n\n &:hover {\n opacity: 0.92;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport default WorkflowDiscoveryPage;\n","/**\n * WorkflowErrorAlert Component\n *\n * Displays workflow execution errors with inline, banner, or modal variants.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// Severity color mapping using design tokens\nconst severityColors = {\n error: tokens.colors.error,\n warning: tokens.colors.warning,\n info: tokens.colors.info,\n};\n\ninterface AlertContainerProps {\n variant: 'inline' | 'banner' | 'modal';\n severity: 'error' | 'warning' | 'info';\n}\n\nconst AlertContainer = styled.div<AlertContainerProps>`\n display: flex;\n flex-direction: column;\n background-color: ${(props) => {\n const alpha = props.variant === 'modal' ? '26' : props.variant === 'banner' ? '1a' : '0d';\n return `${severityColors[props.severity]}${alpha}`;\n }};\n border: 1px solid ${(props) => {\n const alpha = props.variant === 'modal' ? '66' : '4d';\n return `${severityColors[props.severity]}${alpha}`;\n }};\n border-radius: ${(props) => (props.variant === 'banner' ? '0' : tokens.borderRadius.md)};\n padding: ${(props) => (props.variant === 'modal' ? tokens.spacing.lg : tokens.spacing.md)};\n margin: ${(props) => (props.variant === 'banner' ? '0' : `${tokens.spacing.sm} 0`)};\n width: ${(props) => (props.variant === 'modal' ? 'auto' : '100%')};\n max-width: ${(props) => (props.variant === 'inline' ? '600px' : '100%')};\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst ModalOverlay = styled.div<{ isOpen: boolean }>`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${tokens.colors.overlay};\n display: ${(props) => (props.isOpen ? 'flex' : 'none')};\n align-items: center;\n justify-content: center;\n z-index: ${tokens.zIndex.modal};\n padding: ${tokens.spacing.lg};\n`;\n\nconst ModalContent = styled.div`\n background-color: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.lg};\n max-width: 500px;\n width: 100%;\n box-shadow: ${tokens.shadows.xl};\n`;\n\nconst Header = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.md};\n`;\n\nconst IconContainer = styled.div<{ severity: 'error' | 'warning' | 'info' }>`\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n color: ${(props) => severityColors[props.severity]};\n`;\n\nconst Content = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n`;\n\nconst Title = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst ErrorMessage = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst ErrorCode = styled.div`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n font-family: ${tokens.typography.fontFamily.monospace};\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst Timestamp = styled.div`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst Details = styled.details`\n margin-top: ${tokens.spacing.md};\n cursor: pointer;\n\n summary {\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n user-select: none;\n list-style: none;\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &::-webkit-details-marker {\n display: none;\n }\n }\n`;\n\nconst DetailsIcon = styled.span<{ open: boolean }>`\n display: inline-block;\n transition: transform ${tokens.transitions.fast};\n transform: ${(props) => (props.open ? 'rotate(90deg)' : 'rotate(0deg)')};\n`;\n\nconst StackTrace = styled.pre`\n margin: ${tokens.spacing.sm} 0 0 0;\n padding: ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.subtle};\n border-radius: ${tokens.borderRadius.sm};\n font-family: ${tokens.typography.fontFamily.monospace};\n font-size: ${tokens.typography.fontSize.xs};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n white-space: pre-wrap;\n word-break: break-word;\n overflow-x: auto;\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n margin-top: ${tokens.spacing.md};\n`;\n\nconst Button = styled.button<{ variant: 'primary' | 'secondary' }>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${(props) => (props.variant === 'primary' ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n background: ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.surface.overlay)};\n border: 1px solid\n ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.border.default)};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${(props) =>\n props.variant === 'primary' ? tokens.colors.error : tokens.colors.surface.overlayHover};\n border-color: ${(props) =>\n props.variant === 'primary' ? tokens.colors.error : tokens.colors.border.hover};\n }\n\n &:active {\n transform: scale(0.98);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst CloseButton = styled.button`\n position: absolute;\n top: ${tokens.spacing.md};\n right: ${tokens.spacing.md};\n width: 32px;\n height: 32px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n border-radius: ${tokens.borderRadius.sm};\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 20px;\n height: 20px;\n }\n`;\n\n// Icons\nconst ErrorIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n);\n\nconst WarningIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n </svg>\n);\n\nconst InfoIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n);\n\nconst CloseIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n);\n\nexport interface WorkflowErrorAlertProps {\n /** Error object or message */\n error: Error | string;\n /** Optional error code */\n errorCode?: string;\n /** Timestamp of the error */\n timestamp?: string;\n /** Visual variant */\n variant?: 'inline' | 'banner' | 'modal';\n /** Severity level */\n severity?: 'error' | 'warning' | 'info';\n /** Whether the error can be retried */\n retryable?: boolean;\n /** Callback when retry is clicked */\n onRetry?: () => void;\n /** Callback when dismiss is clicked */\n onDismiss?: () => void;\n /** Whether to show details section */\n showDetails?: boolean;\n /** Stack trace to display */\n stackTrace?: string;\n /** Custom title */\n title?: string;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowErrorAlert component for displaying workflow errors\n *\n * Features:\n * - Inline, banner, and modal variants\n * - Severity levels (error/warning/info)\n * - Error code and timestamp display\n * - Expandable stack trace\n * - Retry and dismiss actions\n * - Accessible error reporting\n */\nexport const WorkflowErrorAlert: React.FC<WorkflowErrorAlertProps> = ({\n error,\n errorCode,\n timestamp,\n variant = 'inline',\n severity = 'error',\n retryable = false,\n onRetry,\n onDismiss,\n showDetails = false,\n stackTrace,\n title,\n className,\n}) => {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [isModalOpen, setIsModalOpen] = useState(variant === 'modal');\n\n const errorMessage = typeof error === 'string' ? error : error.message;\n const defaultTitle =\n severity === 'error' ? 'Workflow Error' : severity === 'warning' ? 'Warning' : 'Information';\n const displayTitle = title || defaultTitle;\n\n const handleDismiss = () => {\n if (variant === 'modal') {\n setIsModalOpen(false);\n }\n onDismiss?.();\n };\n\n const getIcon = () => {\n switch (severity) {\n case 'error':\n return <ErrorIcon />;\n case 'warning':\n return <WarningIcon />;\n case 'info':\n return <InfoIcon />;\n }\n };\n\n const alertContent = (\n <AlertContainer\n variant={variant}\n severity={severity}\n className={className}\n data-testid=\"error-alert\"\n role=\"alert\"\n >\n <Header>\n <IconContainer severity={severity} aria-hidden=\"true\">\n {getIcon()}\n </IconContainer>\n <Content>\n <Title>{displayTitle}</Title>\n <ErrorMessage>{errorMessage}</ErrorMessage>\n {errorCode && <ErrorCode>Error Code: {errorCode}</ErrorCode>}\n {timestamp && <Timestamp>{new Date(timestamp).toLocaleString()}</Timestamp>}\n\n {showDetails && (stackTrace || (typeof error === 'object' && error.stack)) && (\n <Details\n open={detailsOpen}\n onToggle={(e) => setDetailsOpen((e.target as HTMLDetailsElement).open)}\n >\n <summary>\n <DetailsIcon open={detailsOpen}>\n <ChevronIcon />\n </DetailsIcon>\n Show Details\n </summary>\n <StackTrace>\n {stackTrace || (typeof error === 'object' ? error.stack : '')}\n </StackTrace>\n </Details>\n )}\n\n {(retryable || onDismiss) && (\n <Actions>\n {retryable && onRetry && (\n <Button variant=\"primary\" onClick={onRetry}>\n Retry\n </Button>\n )}\n {onDismiss && (\n <Button variant=\"secondary\" onClick={handleDismiss}>\n Dismiss\n </Button>\n )}\n </Actions>\n )}\n </Content>\n {variant !== 'modal' && onDismiss && (\n <CloseButton onClick={handleDismiss} aria-label=\"Dismiss alert\">\n <CloseIcon />\n </CloseButton>\n )}\n </Header>\n </AlertContainer>\n );\n\n if (variant === 'modal') {\n return (\n <ModalOverlay isOpen={isModalOpen} onClick={handleDismiss}>\n <ModalContent onClick={(e) => e.stopPropagation()}>\n {alertContent}\n <CloseButton onClick={handleDismiss} aria-label=\"Close modal\">\n <CloseIcon />\n </CloseButton>\n </ModalContent>\n </ModalOverlay>\n );\n }\n\n return alertContent;\n};\n\nWorkflowErrorAlert.displayName = 'WorkflowErrorAlert';\n","/**\n * WorkflowProgressBar Component\n *\n * Displays workflow execution progress with linear or circular variants.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst indeterminate = keyframes`\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(400%);\n }\n`;\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\n// Status color mapping using design tokens\nconst statusColors = {\n pending: tokens.colors.status.pending,\n running: tokens.colors.status.running,\n completed: tokens.colors.status.completed,\n failed: tokens.colors.status.failed,\n timeout: tokens.colors.status.timeout,\n};\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n width: 100%;\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst ProgressMessage = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.normal};\n`;\n\nconst ProgressInfo = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ${tokens.spacing.xs};\n`;\n\nconst PercentageText = styled.span<{ size: 'sm' | 'md' | 'lg' }>`\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n`;\n\n// Linear Progress Bar\nconst LinearTrack = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n position: relative;\n width: 100%;\n height: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return '6px';\n }\n }};\n background-color: ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.full};\n overflow: hidden;\n`;\n\ninterface LinearFillProps {\n progress: number;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n animated: boolean;\n indeterminate: boolean;\n}\n\nconst LinearFill = styled.div<LinearFillProps>`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: ${(props) => (props.indeterminate ? '25%' : `${props.progress}%`)};\n background-color: ${(props) => statusColors[props.status]};\n border-radius: ${tokens.borderRadius.full};\n transition: ${(props) => (props.animated && !props.indeterminate ? `width ${tokens.transitions.normal}` : 'none')};\n animation: ${(props) => (props.indeterminate ? indeterminate : 'none')} 1.5s ease-in-out infinite;\n`;\n\n// Circular Progress Bar\nconst CircularContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst CircularSvg = styled.svg<{ size: 'sm' | 'md' | 'lg' }>`\n width: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xl;\n case 'lg':\n return '80px';\n case 'md':\n default:\n return '60px';\n }\n }};\n height: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xl;\n case 'lg':\n return '80px';\n case 'md':\n default:\n return '60px';\n }\n }};\n transform: rotate(-90deg);\n`;\n\ninterface CircularTrackProps {\n size: 'sm' | 'md' | 'lg';\n}\n\nconst getCircularSize = (size: 'sm' | 'md' | 'lg') => {\n switch (size) {\n case 'sm':\n return { radius: 16, strokeWidth: 3 };\n case 'lg':\n return { radius: 36, strokeWidth: 6 };\n case 'md':\n default:\n return { radius: 26, strokeWidth: 4 };\n }\n};\n\nconst CircularTrack = styled.circle<CircularTrackProps>`\n fill: none;\n stroke: ${tokens.colors.border.default};\n stroke-width: ${(props) => getCircularSize(props.size).strokeWidth};\n`;\n\ninterface CircularFillProps {\n progress: number;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n size: 'sm' | 'md' | 'lg';\n animated: boolean;\n indeterminate: boolean;\n}\n\nconst CircularFill = styled.circle<CircularFillProps>`\n fill: none;\n stroke: ${(props) => statusColors[props.status]};\n stroke-width: ${(props) => getCircularSize(props.size).strokeWidth};\n stroke-dasharray: ${(props) => {\n const { radius } = getCircularSize(props.size);\n const circumference = 2 * Math.PI * radius;\n return props.indeterminate ? `${circumference * 0.25} ${circumference}` : circumference;\n }};\n stroke-dashoffset: ${(props) => {\n const { radius } = getCircularSize(props.size);\n const circumference = 2 * Math.PI * radius;\n return props.indeterminate ? 0 : circumference * (1 - props.progress / 100);\n }};\n stroke-linecap: round;\n transition: ${(props) => (props.animated && !props.indeterminate ? `stroke-dashoffset ${tokens.transitions.normal}` : 'none')};\n animation: ${(props) => (props.indeterminate ? rotate : 'none')} 1.5s linear infinite;\n`;\n\nconst CircularPercentage = styled.text<{ size: 'sm' | 'md' | 'lg' }>`\n fill: ${tokens.colors.text.primary};\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.xs;\n }\n }};\n font-weight: ${tokens.typography.fontWeight.semibold};\n text-anchor: middle;\n dominant-baseline: middle;\n transform: rotate(90deg);\n transform-origin: center;\n`;\n\nexport interface WorkflowProgressBarProps {\n /** Progress percentage (0-100), or undefined for indeterminate */\n progress?: number;\n /** Optional message to display */\n message?: string;\n /** Status affects the color */\n status?: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n /** Visual variant */\n variant?: 'linear' | 'circular';\n /** Size of the progress bar */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show percentage text */\n showPercentage?: boolean;\n /** Whether to animate progress changes */\n animated?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowProgressBar component for showing workflow execution progress\n *\n * Features:\n * - Linear and circular variants\n * - Determinate and indeterminate modes\n * - Color-coded status (gray/blue/green/red/orange)\n * - Size options (sm/md/lg)\n * - Optional percentage display\n * - Smooth animations\n * - Progress message support\n */\nexport const WorkflowProgressBar: React.FC<WorkflowProgressBarProps> = ({\n progress,\n message,\n status = 'running',\n variant = 'linear',\n size = 'md',\n showPercentage = true,\n animated = true,\n className,\n}) => {\n const isIndeterminate = progress === undefined;\n const progressValue = progress ?? 0;\n\n if (variant === 'circular') {\n const { radius } = getCircularSize(size);\n const center = radius + getCircularSize(size).strokeWidth;\n\n return (\n <Container className={className}>\n {message && <ProgressMessage size={size}>{message}</ProgressMessage>}\n <CircularContainer>\n <CircularSvg\n size={size}\n viewBox={`0 0 ${center * 2} ${center * 2}`}\n role=\"progressbar\"\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={message || `${progressValue}% complete`}\n >\n <CircularTrack size={size} cx={center} cy={center} r={radius} />\n <CircularFill\n progress={progressValue}\n status={status}\n size={size}\n animated={animated}\n indeterminate={isIndeterminate}\n cx={center}\n cy={center}\n r={radius}\n />\n {showPercentage && !isIndeterminate && (\n <CircularPercentage size={size} x={center} y={center}>\n {Math.round(progressValue)}%\n </CircularPercentage>\n )}\n </CircularSvg>\n </CircularContainer>\n </Container>\n );\n }\n\n return (\n <Container className={className}>\n {(message || showPercentage) && (\n <ProgressInfo>\n {message && <ProgressMessage size={size}>{message}</ProgressMessage>}\n {showPercentage && !isIndeterminate && (\n <PercentageText size={size}>{Math.round(progressValue)}%</PercentageText>\n )}\n </ProgressInfo>\n )}\n <LinearTrack\n size={size}\n role=\"progressbar\"\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={message || `${progressValue}% complete`}\n >\n <LinearFill\n progress={progressValue}\n status={status}\n animated={animated}\n indeterminate={isIndeterminate}\n />\n </LinearTrack>\n </Container>\n );\n};\n\nWorkflowProgressBar.displayName = 'WorkflowProgressBar';\n","/**\n * WorkflowResultPanel Component\n *\n * Displays workflow execution results with JSON/formatted/table views.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst Panel = styled.div<{ collapsible: boolean; expanded: boolean }>`\n display: flex;\n flex-direction: column;\n background-color: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n overflow: hidden;\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst Header = styled.div<{ collapsible: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.subtle};\n border-bottom: 1px solid ${tokens.colors.border.default};\n cursor: ${(props) => (props.collapsible ? 'pointer' : 'default')};\n user-select: none;\n\n &:hover {\n background-color: ${(props) => (props.collapsible ? tokens.colors.surface.overlay : tokens.colors.surface.subtle)};\n }\n`;\n\nconst Title = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n`;\n\nconst IconButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n border-color: ${tokens.colors.border.hover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nconst CollapseIcon = styled.div<{ expanded: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform ${tokens.transitions.fast};\n transform: ${(props) => (props.expanded ? 'rotate(180deg)' : 'rotate(0deg)')};\n color: ${tokens.colors.text.secondary};\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nconst Content = styled.div<{ maxHeight?: string; expanded: boolean }>`\n padding: ${tokens.spacing.md};\n max-height: ${(props) => {\n if (!props.expanded) return '0';\n return props.maxHeight || '400px';\n }};\n overflow: ${(props) => (props.expanded ? 'auto' : 'hidden')};\n transition: max-height ${tokens.transitions.normal};\n\n /* Custom scrollbar */\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: ${tokens.colors.scrollbar.thumbHover};\n }\n`;\n\nconst JsonView = styled.pre`\n margin: 0;\n font-family: ${tokens.typography.fontFamily.monospace};\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n white-space: pre-wrap;\n word-break: break-word;\n`;\n\nconst FormattedView = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst TableView = styled.table`\n width: 100%;\n border-collapse: collapse;\n font-size: ${tokens.typography.fontSize.sm};\n\n th {\n text-align: left;\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm};\n background-color: ${tokens.colors.surface.overlay};\n border-bottom: 1px solid ${tokens.colors.border.default};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n }\n\n td {\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm};\n border-bottom: 1px solid ${tokens.colors.border.subtle};\n color: ${tokens.colors.text.secondary};\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n`;\n\nconst EmptyState = styled.div`\n padding: ${tokens.spacing.xl};\n text-align: center;\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.sm};\n`;\n\n// Icons\nconst DownloadIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\" />\n </svg>\n);\n\nconst CopyIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\" />\n </svg>\n);\n\nexport interface WorkflowResultPanelProps {\n /** Output data to display */\n outputData: unknown;\n /** Visual variant */\n variant?: 'json' | 'formatted' | 'table';\n /** Whether the panel can be collapsed */\n collapsible?: boolean;\n /** Default expanded state */\n defaultExpanded?: boolean;\n /** Maximum height of content area */\n maxHeight?: string;\n /** Callback when download is clicked */\n onDownload?: () => void;\n /** Callback when copy is clicked */\n onCopy?: () => void;\n /** Custom title */\n title?: string;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowResultPanel component for displaying workflow results\n *\n * Features:\n * - JSON, formatted, and table view variants\n * - Collapsible content\n * - Download and copy actions\n * - Maximum height with scrolling\n * - Empty state handling\n * - Syntax highlighting for JSON\n */\nexport const WorkflowResultPanel: React.FC<WorkflowResultPanelProps> = ({\n outputData,\n variant = 'json',\n collapsible = true,\n defaultExpanded = true,\n maxHeight,\n onDownload,\n onCopy,\n title = 'Result',\n className,\n}) => {\n const [expanded, setExpanded] = useState(defaultExpanded);\n\n const handleToggle = () => {\n if (collapsible) {\n setExpanded(!expanded);\n }\n };\n\n const renderContent = () => {\n if (!outputData) {\n return <EmptyState>No results available</EmptyState>;\n }\n\n switch (variant) {\n case 'json':\n return <JsonView>{JSON.stringify(outputData, null, 2)}</JsonView>;\n\n case 'formatted':\n if (typeof outputData === 'object') {\n return (\n <FormattedView>\n {Object.entries(outputData as Record<string, unknown>).map(([key, value]) => (\n <div key={key}>\n <strong>{key}:</strong> {String(value)}\n </div>\n ))}\n </FormattedView>\n );\n }\n return <FormattedView>{String(outputData)}</FormattedView>;\n\n case 'table':\n if (Array.isArray(outputData) && outputData.length > 0) {\n const keys = Object.keys(outputData[0] as Record<string, unknown>);\n return (\n <TableView>\n <thead>\n <tr>\n {keys.map((key) => (\n <th key={key}>{key}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {outputData.map((row, idx) => (\n <tr key={idx}>\n {keys.map((key) => (\n <td key={key}>{String((row as Record<string, unknown>)[key])}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </TableView>\n );\n }\n return <EmptyState>Data is not in table format</EmptyState>;\n\n default:\n return <EmptyState>Unsupported variant</EmptyState>;\n }\n };\n\n return (\n <Panel\n collapsible={collapsible}\n expanded={expanded}\n className={className}\n data-testid=\"result-panel\"\n >\n <Header collapsible={collapsible} onClick={handleToggle}>\n <Title>\n {title}\n {collapsible && (\n <CollapseIcon expanded={expanded}>\n <ChevronIcon />\n </CollapseIcon>\n )}\n </Title>\n <Actions onClick={(e) => e.stopPropagation()}>\n {onCopy && (\n <IconButton onClick={onCopy} title=\"Copy to clipboard\" aria-label=\"Copy to clipboard\">\n <CopyIcon />\n </IconButton>\n )}\n {onDownload && (\n <IconButton onClick={onDownload} title=\"Download\" aria-label=\"Download results\">\n <DownloadIcon />\n </IconButton>\n )}\n </Actions>\n </Header>\n <Content maxHeight={maxHeight} expanded={expanded}>\n {renderContent()}\n </Content>\n </Panel>\n );\n};\n\nWorkflowResultPanel.displayName = 'WorkflowResultPanel';\n","/**\n * WorkflowStatusBadge Component\n *\n * Displays workflow execution status with color coding.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n`;\n\n// Status color mapping using design tokens\nconst statusColors = {\n pending: tokens.colors.status.pending,\n running: tokens.colors.status.running,\n completed: tokens.colors.status.completed,\n failed: tokens.colors.status.failed,\n timeout: tokens.colors.status.timeout,\n};\n\ninterface BadgeContainerProps {\n $status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n $size: 'sm' | 'md' | 'lg';\n}\n\nconst BadgeContainer = styled.div<BadgeContainerProps>`\n display: inline-flex;\n align-items: center;\n gap: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return '6px';\n }\n }};\n padding: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return `${tokens.spacing.xs} ${tokens.spacing.sm}`;\n case 'lg':\n return `${tokens.spacing.sm} ${tokens.spacing.md}`;\n case 'md':\n default:\n return `6px ${tokens.spacing.md}`;\n }\n }};\n background-color: ${(props) => `${statusColors[props.$status]}1A`};\n border: 1px solid ${(props) => `${statusColors[props.$status]}4D`};\n border-radius: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return tokens.borderRadius.sm;\n case 'lg':\n return tokens.borderRadius.md;\n case 'md':\n default:\n return tokens.borderRadius.md;\n }\n }};\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return '11px';\n case 'lg':\n return '15px';\n case 'md':\n default:\n return '13px';\n }\n }};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${(props) => statusColors[props.$status]};\n line-height: 1.4;\n`;\n\ninterface IconContainerProps {\n $animated?: boolean;\n $status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n}\n\nconst IconContainer = styled.div<IconContainerProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n animation: ${(props) => {\n if (props.$animated) {\n if (props.$status === 'running') return spin;\n if (props.$status === 'pending') return pulse;\n }\n return 'none';\n }}\n ${(props) => (props.$status === 'running' ? '1s' : '2s')} linear infinite;\n`;\n\n// Status icons\nconst PendingIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z\" />\n </svg>\n);\n\nconst RunningIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n opacity=\"0.3\"\n />\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" />\n </svg>\n);\n\nconst CompletedIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n);\n\nconst FailedIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\" />\n </svg>\n);\n\nconst TimeoutIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n </svg>\n);\n\nconst Label = styled.span`\n white-space: nowrap;\n`;\n\nexport interface WorkflowStatusBadgeProps {\n /** Workflow execution status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n /** Size of the badge */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show status icon */\n showIcon?: boolean;\n /** Whether to show status label */\n showLabel?: boolean;\n /** Whether to animate the icon */\n animated?: boolean;\n /** Custom status label text */\n label?: string;\n /** Custom className */\n className?: string;\n}\n\nconst getDefaultLabel = (status: WorkflowStatusBadgeProps['status']): string => {\n switch (status) {\n case 'pending':\n return 'Pending';\n case 'running':\n return 'Running';\n case 'completed':\n return 'Completed';\n case 'failed':\n return 'Failed';\n case 'timeout':\n return 'Timeout';\n }\n};\n\nconst getStatusIcon = (status: WorkflowStatusBadgeProps['status']): React.ReactNode => {\n switch (status) {\n case 'pending':\n return <PendingIcon />;\n case 'running':\n return <RunningIcon />;\n case 'completed':\n return <CompletedIcon />;\n case 'failed':\n return <FailedIcon />;\n case 'timeout':\n return <TimeoutIcon />;\n }\n};\n\n/**\n * WorkflowStatusBadge component for showing workflow execution status\n *\n * Features:\n * - Color-coded status badges (gray/blue/green/red/orange)\n * - Status icons with optional animations\n * - Size options (sm/md/lg)\n * - Optional status labels\n * - Spinning animation for running state\n * - Pulse animation for pending state\n */\nexport const WorkflowStatusBadge: React.FC<WorkflowStatusBadgeProps> = ({\n status,\n size = 'md',\n showIcon = true,\n showLabel = true,\n animated = true,\n label,\n className,\n}) => {\n const displayLabel = label || getDefaultLabel(status);\n\n return (\n <BadgeContainer\n $status={status}\n $size={size}\n className={className}\n data-testid=\"execution-status-badge\"\n role=\"status\"\n aria-label={displayLabel}\n >\n {showIcon && (\n <IconContainer $animated={animated} $status={status} aria-hidden=\"true\">\n {getStatusIcon(status)}\n </IconContainer>\n )}\n {showLabel && <Label>{displayLabel}</Label>}\n </BadgeContainer>\n );\n};\n\nWorkflowStatusBadge.displayName = 'WorkflowStatusBadge';\n"]}