@octaviaflow/core 3.1.0-beta.71 → 3.1.0-beta.72
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.
- package/dist/marketing/components/BetaAccessForm/BetaAccessForm.d.ts +7 -1
- package/dist/marketing/components/BetaAccessForm/BetaAccessForm.d.ts.map +1 -1
- package/dist/marketing/components/ContactForm/ContactForm.d.ts +2 -0
- package/dist/marketing/components/ContactForm/ContactForm.d.ts.map +1 -1
- package/dist/marketing.cjs +40 -3
- package/dist/marketing.cjs.map +1 -1
- package/dist/marketing.js +52 -15
- package/dist/marketing.js.map +1 -1
- package/package.json +2 -2
package/dist/marketing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/marketing/components/AssistantTranscript/AssistantTranscript.tsx","../src/marketing/components/BackedBy/BackedBy.tsx","../src/marketing/components/BetaAccessForm/BetaAccessForm.tsx","../src/marketing/components/WorkflowShowcase/showcaseEngine.ts","../src/marketing/components/BlogGrid/BlogGrid.tsx","../src/marketing/components/ContactForm/ContactForm.tsx","../src/marketing/components/CtaBanner/CtaBanner.tsx","../src/marketing/components/FaqSection/FaqSection.tsx","../src/marketing/components/FeatureGrid/FeatureGrid.tsx","../src/marketing/components/IntegrationsFinder/IntegrationsFinder.tsx","../src/marketing/components/IntegrationsWall/IntegrationsWall.tsx","../src/marketing/components/LiveConsole/LiveConsole.tsx","../src/marketing/components/LogoMarquee/LogoMarquee.tsx","../src/marketing/glyphs.tsx","../src/marketing/components/MarketingFooter/MarketingFooter.tsx","../src/marketing/components/MarketingHero/MarketingHero.tsx","../src/marketing/components/MarketingNav/MarketingNav.tsx","../src/marketing/components/MarketingSection/MarketingSection.tsx","../src/marketing/components/PageHero/PageHero.tsx","../src/marketing/components/PricingTiers/PricingTiers.tsx","../src/marketing/components/StatBand/StatBand.tsx","../src/marketing/components/TestimonialStrip/TestimonialStrip.tsx","../src/marketing/components/WorkflowShowcase/WorkflowShowcase.tsx","../src/marketing/components/WorkflowShowcase/ShowcaseScene.tsx","../src/marketing/components/WorkflowShowcase/ShowcaseSignup.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * AssistantTranscript — a compact \"you → / octavia →\" exchange card showing\n * the natural-language-to-workflow moment in one glance.\n * ------------------------------------------------------------------------- */\n\nexport interface AssistantTranscriptTurn {\n id: string;\n speaker: \"user\" | \"assistant\";\n content: ReactNode;\n}\n\nexport interface AssistantTranscriptProps extends Omit<ComponentPropsWithoutRef<\"div\">, \"title\"> {\n /** Header label. Defaults to \"OctaviaFlow AI Assistant\". */\n title?: ReactNode;\n turns: AssistantTranscriptTurn[];\n userLabel?: string;\n assistantLabel?: string;\n}\n\nexport function AssistantTranscript({\n title = \"OctaviaFlow AI Assistant\",\n turns,\n userLabel = \"you\",\n assistantLabel = \"octavia\",\n className,\n ...rest\n}: AssistantTranscriptProps) {\n return (\n <div {...rest} className={cn(\"ods-mkt-transcript\", className)}>\n <div className=\"ods-mkt-transcript__head\">{title}</div>\n <div className=\"ods-mkt-transcript__body\">\n {turns.map((turn) => (\n <div key={turn.id} className=\"ods-mkt-transcript__turn\">\n <span\n className={cn(\n \"ods-mkt-transcript__speaker\",\n `ods-mkt-transcript__speaker--${turn.speaker}`,\n )}\n >\n {turn.speaker === \"user\" ? userLabel : assistantLabel} →\n </span>{\" \"}\n <span className=\"ods-mkt-transcript__content\">{turn.content}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * BackedBy — the investors/backers strip. Unlike LogoMarquee (volume social\n * proof, scrolling), this is a static, prestigious row: a few marks with\n * generous spacing and an optional note underneath (\"$4.2M seed · operators\n * from …\"). The site passes real investor logos via `icon`; plain names\n * render as serif wordmarks.\n * ------------------------------------------------------------------------- */\n\nexport interface BackedByItem {\n id: string;\n name: string;\n /** Investor logo. Omit for a serif wordmark. */\n icon?: ReactNode;\n}\n\nexport interface BackedByProps extends ComponentPropsWithoutRef<\"div\"> {\n items: BackedByItem[];\n /** Mono eyebrow. Default \"BACKED BY\". */\n label?: ReactNode;\n /** Microcopy under the marks — round, notable angels, etc. */\n note?: ReactNode;\n align?: \"center\" | \"start\";\n}\n\nexport function BackedBy({\n items,\n label = \"Backed by\",\n note,\n align = \"center\",\n className,\n ...rest\n}: BackedByProps) {\n return (\n <div\n {...rest}\n className={cn(\"ods-mkt-backedby\", align === \"start\" && \"ods-mkt-backedby--start\", className)}\n >\n {label && <p className=\"ods-mkt-backedby__label\">{label}</p>}\n <div className=\"ods-mkt-backedby__row\">\n {items.map((item) => (\n <span key={item.id} className=\"ods-mkt-backedby__mark\" title={item.name}>\n {item.icon ?? <span className=\"ods-mkt-backedby__wordmark\">{item.name}</span>}\n </span>\n ))}\n </div>\n {note && <p className=\"ods-mkt-backedby__note\">{note}</p>}\n </div>\n );\n}\n","\"use client\";\n\nimport { type FormEvent, type ReactNode, useId, useState } from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { Input } from \"../../../components/Input/Input\";\nimport { Select } from \"../../../components/Select/Select\";\nimport { Textarea } from \"../../../components/Textarea/Textarea\";\nimport { cn } from \"../../../utils/cn\";\nimport { isValidEmail } from \"../WorkflowShowcase/showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * BetaAccessForm — the \"request early access\" conversion band for marketing\n * pages outside the hero funnel. Email-only by default (lowest friction), or\n * `fields=\"full\"` for name + email + company. The consuming site wires\n * `onSubmit` to its real endpoint; resolve → success card, throw → inline\n * error with the form intact.\n * ------------------------------------------------------------------------- */\n\nexport interface BetaAccessValues {\n email: string;\n name?: string;\n company?: string;\n /** Present when `teamSizes` are configured. */\n teamSize?: string;\n /** Present when `plans` are configured (e.g. preselected from ?plan=). */\n plan?: string;\n /** Present when `useCases` are configured. */\n useCase?: string;\n /** Free-text details (present when `showDetails` is set). */\n details?: string;\n}\n\nexport interface BetaAccessFormProps {\n title?: ReactNode;\n /** Mono microcopy under the title. */\n subtitle?: ReactNode;\n /** \"email\" = single-field band (default). \"full\" = name + email + company. */\n fields?: \"email\" | \"full\";\n /** \"card\" (default) = bordered band. \"inline\" = chromeless, for footers. */\n appearance?: \"card\" | \"inline\";\n /** Team-size choices (full mode). Required when provided. */\n teamSizes?: string[];\n /** Plan choices (full mode), e.g. from the pricing tiers. Optional pick. */\n plans?: string[];\n /** Preselected plan (e.g. from a ?plan= query param). */\n defaultPlan?: string;\n /** Primary use-case choices (full mode). Required when provided. */\n useCases?: string[];\n /** Show an optional free-text details textarea (full mode). */\n showDetails?: boolean;\n detailsLabel?: ReactNode;\n detailsPlaceholder?: string;\n submitLabel?: ReactNode;\n /** Mono microcopy under the form. */\n footnote?: ReactNode;\n /** Resolve → success state; throw → inline error, form kept. */\n onSubmit?: (values: BetaAccessValues) => Promise<void> | void;\n successTitle?: ReactNode;\n successBody?: ReactNode;\n disabled?: boolean;\n className?: string;\n}\n\ntype Phase = \"idle\" | \"submitting\" | \"success\";\n\nexport function BetaAccessForm({\n title = \"Request early access\",\n subtitle = \"CURRENTLY IN PRIVATE BETA — WE REVIEW ACCESS REQUESTS WEEKLY\",\n fields = \"email\",\n appearance = \"card\",\n teamSizes,\n plans,\n defaultPlan,\n useCases,\n showDetails = false,\n detailsLabel = \"Anything else we should know?\",\n detailsPlaceholder = \"Current stack, timelines, must-have connectors…\",\n submitLabel = \"Request access →\",\n footnote = \"NO CREDIT CARD · SSO & SELF-HOSTING AVAILABLE\",\n onSubmit,\n successTitle = \"Request received.\",\n successBody = \"We review access requests weekly — you'll hear from us by email.\",\n disabled = false,\n className,\n}: BetaAccessFormProps) {\n const uid = useId();\n const [values, setValues] = useState<BetaAccessValues>({\n email: \"\",\n name: \"\",\n company: \"\",\n teamSize: \"\",\n plan: defaultPlan ?? \"\",\n useCase: \"\",\n details: \"\",\n });\n const [phase, setPhase] = useState<Phase>(\"idle\");\n const [error, setError] = useState<string | null>(null);\n\n const handleSubmit = async (event: FormEvent) => {\n event.preventDefault();\n if (phase === \"submitting\") return;\n if (!isValidEmail(values.email)) {\n setError(\"Please enter a valid work email.\");\n return;\n }\n if (fields === \"full\" && !values.name?.trim()) {\n setError(\"Please enter your name.\");\n return;\n }\n if (fields === \"full\" && teamSizes?.length && !values.teamSize) {\n setError(\"Please select your team size.\");\n return;\n }\n if (fields === \"full\" && useCases?.length && !values.useCase) {\n setError(\"Please select your primary use case.\");\n return;\n }\n setError(null);\n setPhase(\"submitting\");\n try {\n await onSubmit?.(values);\n setPhase(\"success\");\n } catch {\n setError(\"Something went wrong — please try again.\");\n setPhase(\"idle\");\n }\n };\n\n const inline = appearance === \"inline\";\n\n if (phase === \"success\") {\n return (\n <div\n className={cn(\n \"ods-mkt-access\",\n \"ods-mkt-access--success\",\n inline && \"ods-mkt-access--inline\",\n className,\n )}\n role=\"status\"\n >\n <p className=\"ods-mkt-access__success-mark\">✓ {successTitle}</p>\n <p className=\"ods-mkt-access__success-body\">{successBody}</p>\n </div>\n );\n }\n\n const busy = disabled || phase === \"submitting\";\n\n return (\n <form\n className={cn(\"ods-mkt-access\", inline && \"ods-mkt-access--inline\", className)}\n onSubmit={handleSubmit}\n noValidate\n >\n <div className=\"ods-mkt-access__head\">\n <h3 className=\"ods-mkt-access__title\">{title}</h3>\n {subtitle && <p className=\"ods-mkt-access__subtitle\">{subtitle}</p>}\n </div>\n\n <div\n className={cn(\n \"ods-mkt-access__fields\",\n fields === \"full\" && \"ods-mkt-access__fields--full\",\n )}\n >\n {fields === \"full\" && (\n <div className=\"ods-mkt-access__field\">\n <label className=\"ods-mkt-access__label\" htmlFor={`${uid}-name`}>\n Full name\n </label>\n <Input\n id={`${uid}-name`}\n autoComplete=\"name\"\n placeholder=\"Ada Lovelace\"\n value={values.name ?? \"\"}\n onChange={(e) => setValues((v) => ({ ...v, name: e.target.value }))}\n disabled={busy}\n />\n </div>\n )}\n <div className=\"ods-mkt-access__field\">\n <label className=\"ods-mkt-access__label\" htmlFor={`${uid}-email`}>\n Work email\n </label>\n <Input\n id={`${uid}-email`}\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"ada@company.com\"\n value={values.email}\n onChange={(e) => setValues((v) => ({ ...v, email: e.target.value }))}\n disabled={busy}\n />\n </div>\n {fields === \"full\" && (\n <div className=\"ods-mkt-access__field\">\n <label className=\"ods-mkt-access__label\" htmlFor={`${uid}-company`}>\n Company\n </label>\n <Input\n id={`${uid}-company`}\n autoComplete=\"organization\"\n placeholder=\"Acme Inc.\"\n value={values.company ?? \"\"}\n onChange={(e) => setValues((v) => ({ ...v, company: e.target.value }))}\n disabled={busy}\n />\n </div>\n )}\n {fields === \"full\" && teamSizes && teamSizes.length > 0 && (\n <div className=\"ods-mkt-access__field\">\n <span className=\"ods-mkt-access__label\" id={`${uid}-teamsize-label`}>\n Team size\n </span>\n <Select\n aria-labelledby={`${uid}-teamsize-label`}\n placeholder=\"Select team size…\"\n options={teamSizes.map((size) => ({ value: size, label: size }))}\n value={values.teamSize ?? \"\"}\n onChange={(teamSize) => setValues((v) => ({ ...v, teamSize }))}\n disabled={busy}\n />\n </div>\n )}\n {fields === \"full\" && plans && plans.length > 0 && (\n <div className=\"ods-mkt-access__field\">\n <span className=\"ods-mkt-access__label\" id={`${uid}-plan-label`}>\n Plan (optional)\n </span>\n <Select\n aria-labelledby={`${uid}-plan-label`}\n placeholder=\"Not sure yet\"\n options={plans.map((plan) => ({ value: plan, label: plan }))}\n value={values.plan ?? \"\"}\n onChange={(plan) => setValues((v) => ({ ...v, plan }))}\n disabled={busy}\n />\n </div>\n )}\n {fields === \"full\" && useCases && useCases.length > 0 && (\n <div className=\"ods-mkt-access__field\">\n <span className=\"ods-mkt-access__label\" id={`${uid}-usecase-label`}>\n Primary use case\n </span>\n <Select\n aria-labelledby={`${uid}-usecase-label`}\n placeholder=\"Select a use case…\"\n options={useCases.map((useCase) => ({ value: useCase, label: useCase }))}\n value={values.useCase ?? \"\"}\n onChange={(useCase) => setValues((v) => ({ ...v, useCase }))}\n disabled={busy}\n />\n </div>\n )}\n {fields === \"full\" && showDetails && (\n <div className=\"ods-mkt-access__field ods-mkt-access__field--wide\">\n <label\n className=\"ods-mkt-access__label\"\n id={`${uid}-details-label`}\n htmlFor={`${uid}-details`}\n >\n {detailsLabel}\n </label>\n <Textarea\n id={`${uid}-details`}\n aria-labelledby={`${uid}-details-label`}\n placeholder={detailsPlaceholder}\n rows={3}\n value={values.details ?? \"\"}\n onChange={(e) => setValues((v) => ({ ...v, details: e.target.value }))}\n disabled={busy}\n />\n </div>\n )}\n <Button\n type=\"submit\"\n variant=\"primary\"\n loading={phase === \"submitting\"}\n disabled={disabled}\n >\n {submitLabel}\n </Button>\n </div>\n\n {error && (\n <p className=\"ods-mkt-access__error\" role=\"alert\">\n {error}\n </p>\n )}\n {footnote && <p className=\"ods-mkt-access__footnote\">{footnote}</p>}\n </form>\n );\n}\n","import type { ReactNode } from \"react\";\n\n/* ---------------------------------------------------------------------------\n * WorkflowShowcase engine — pure data + logic, no React rendering.\n *\n * Everything the marketing funnel needs to \"think\" lives here so it can be\n * unit-tested without mounting the (heavily animated) component tree:\n * connector recognition, schedule inference, plan resolution, activity-rail\n * script and prompt segmentation for the live-highlight overlay.\n * ------------------------------------------------------------------------- */\n\nexport type WorkflowShowcaseRole = \"source\" | \"destination\" | \"action\" | \"notify\";\n\nexport interface WorkflowShowcaseConnector {\n /** Canonical display name — matched case-insensitively inside the prompt. */\n name: string;\n role: WorkflowShowcaseRole;\n /** Extra strings that also count as a mention of this connector. */\n aliases?: string[];\n /** Optional icon tile. Defaults to a two-letter monogram. */\n icon?: ReactNode;\n}\n\nexport interface WorkflowShowcaseExample {\n id: string;\n /** Chip label, e.g. \"Storefront orders → Warehouse, hourly\". */\n label: string;\n /** Prompt inserted (and auto-built) when the chip is clicked. */\n prompt: string;\n}\n\nexport interface WorkflowShowcaseMetric {\n id: string;\n /** Final value once the pipeline reads as live. */\n value: number;\n /** Interim value while the workflow is still assembling. Omit → \"—\". */\n buildingValue?: number;\n decimals?: number;\n /** Small unit text after the value, e.g. \"rows/min\". */\n unit?: string;\n /** Rendered before the number, e.g. \"−\". */\n prefix?: string;\n /** Rendered flush after the number, e.g. \"%\". */\n suffix?: string;\n /** Mono microcopy under the value, e.g. \"THROUGHPUT\". */\n label: string;\n /** \"success\" tints the final value green (savings, wins). */\n tone?: \"default\" | \"success\";\n}\n\nexport type WorkflowShowcasePhase =\n | \"idle\"\n | \"analyzing\"\n | \"building\"\n | \"done\"\n | \"signup\"\n | \"creating\"\n | \"welcome\";\n\n/** Phases in which the generated workflow reads as complete. */\nexport const SETTLED_PHASES: readonly WorkflowShowcasePhase[] = [\n \"done\",\n \"signup\",\n \"creating\",\n \"welcome\",\n];\n\nexport interface WorkflowShowcasePlan {\n /** Sources, in catalog order. */\n left: WorkflowShowcaseConnector[];\n /** Destination → action → notify, in that order. */\n right: WorkflowShowcaseConnector[];\n /** Every connector in the plan (left + right). */\n all: WorkflowShowcaseConnector[];\n /** Total assemble steps: each source + schema map + each right-side node. */\n totalSteps: number;\n}\n\nexport interface WorkflowShowcaseSignupValues {\n name: string;\n email: string;\n company: string;\n teamSize: string;\n}\n\nexport interface ShowcaseActivityLine {\n id: string;\n text: string;\n tone: \"muted\" | \"faint\" | \"active\" | \"done\" | \"plain\";\n}\n\nexport interface ShowcasePromptSegment {\n text: string;\n /** Set when this segment is a recognized connector mention. */\n connector?: WorkflowShowcaseConnector;\n}\n\n/* ---------------------------------------------------------------------------\n * Defaults — deliberately vendor-neutral. The consuming site passes its real\n * connector catalog; the design system itself stays name-free.\n * ------------------------------------------------------------------------- */\n\nexport const WORKFLOW_SHOWCASE_DEFAULT_CONNECTORS: WorkflowShowcaseConnector[] = [\n { name: \"Storefront\", role: \"source\", aliases: [\"store\", \"shop orders\"] },\n { name: \"Payments\", role: \"source\", aliases: [\"payouts\"] },\n { name: \"Orders DB\", role: \"source\", aliases: [\"orders database\"] },\n { name: \"CRM\", role: \"source\", aliases: [\"crm leads\"] },\n { name: \"Warehouse\", role: \"destination\" },\n { name: \"Lakehouse\", role: \"destination\" },\n { name: \"Campaigns\", role: \"action\", aliases: [\"campaign\"] },\n { name: \"Team Chat\", role: \"notify\", aliases: [\"chat\", \"alert the team\"] },\n];\n\nexport const WORKFLOW_SHOWCASE_DEFAULT_EXAMPLES: WorkflowShowcaseExample[] = [\n {\n id: \"hourly-sync\",\n label: \"Storefront orders → Warehouse, hourly\",\n prompt: \"Sync Storefront orders to Warehouse every hour, alert sales in Team Chat\",\n },\n {\n id: \"daily-load\",\n label: \"Payments payouts → Lakehouse, daily\",\n prompt: \"Load Payments payouts into Lakehouse daily\",\n },\n {\n id: \"realtime-stream\",\n label: \"Orders DB changes → Warehouse + Team Chat\",\n prompt: \"Stream Orders DB changes to Warehouse in real-time and notify Team Chat\",\n },\n];\n\nexport const WORKFLOW_SHOWCASE_DEFAULT_METRICS: WorkflowShowcaseMetric[] = [\n { id: \"throughput\", value: 2341, buildingValue: 842, unit: \"rows/min\", label: \"THROUGHPUT\" },\n {\n id: \"latency\",\n value: 0.8,\n buildingValue: 1.1,\n decimals: 1,\n unit: \"s latency\",\n label: \"SYNC SPEED\",\n },\n { id: \"cost\", value: 43, suffix: \"%\", label: \"SAVED VS BASELINE\", tone: \"success\" },\n];\n\nexport const WORKFLOW_SHOWCASE_SCHEDULES = [\"AUTO\", \"HOURLY\", \"DAILY\", \"REAL-TIME\"] as const;\n\n/** Trigger modes the platform supports — mirrors real workflow capability. */\nexport const WORKFLOW_SHOWCASE_TRIGGERS = [\"SCHEDULE\", \"WEBHOOK\", \"APP EVENT\", \"MANUAL\"] as const;\n\n// Platform capability tiles — AI/data jobs the engine actually runs.\nexport const WORKFLOW_SHOWCASE_DEFAULT_TILES = [\n \"ELT\",\n \"CDC\",\n \"LLM\",\n \"RAG\",\n \"HEAL\",\n \"COST\",\n \"IDP\",\n \"VEC\",\n] as const;\n\n/* ---------------------------------------------------------------------------\n * Recognition\n * ------------------------------------------------------------------------- */\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\ninterface Mention {\n connector: WorkflowShowcaseConnector;\n pattern: string;\n}\n\n/** Every (connector, matchable-string) pair, longest pattern first so\n * overlapping names (\"Orders DB\" vs \"Orders\") resolve to the longest hit. */\nfunction mentionsOf(catalog: WorkflowShowcaseConnector[]): Mention[] {\n const out: Mention[] = [];\n for (const connector of catalog) {\n out.push({ connector, pattern: connector.name });\n for (const alias of connector.aliases ?? []) out.push({ connector, pattern: alias });\n }\n return out.sort((a, b) => b.pattern.length - a.pattern.length);\n}\n\n/** Connector names mentioned in the prompt, in catalog order, deduped. */\nexport function detectConnectors(prompt: string, catalog: WorkflowShowcaseConnector[]): string[] {\n const lower = prompt.toLowerCase();\n return catalog\n .filter((c) => [c.name, ...(c.aliases ?? [])].some((p) => lower.includes(p.toLowerCase())))\n .map((c) => c.name);\n}\n\n/** Split the prompt into plain / recognized-connector segments, preserving\n * the user's exact text. Powers the live-highlight overlay. */\nexport function segmentPrompt(\n prompt: string,\n catalog: WorkflowShowcaseConnector[],\n): ShowcasePromptSegment[] {\n if (!prompt) return [];\n const mentions = mentionsOf(catalog);\n if (!mentions.length) return [{ text: prompt }];\n const re = new RegExp(`(${mentions.map((m) => escapeRegExp(m.pattern)).join(\"|\")})`, \"gi\");\n const byPattern = new Map(mentions.map((m) => [m.pattern.toLowerCase(), m.connector]));\n return prompt\n .split(re)\n .filter((part) => part !== \"\")\n .map((part) => {\n const connector = byPattern.get(part.toLowerCase());\n return connector ? { text: part, connector } : { text: part };\n });\n}\n\n/** Infer a schedule from natural language; null when nothing matches. */\nexport function scheduleFromPrompt(prompt: string): string | null {\n const t = prompt.toLowerCase();\n if (/stream|real.?time|cdc/.test(t)) return \"REAL-TIME\";\n if (/hour/.test(t)) return \"HOURLY\";\n if (/dail|every day|nightly/.test(t)) return \"DAILY\";\n return null;\n}\n\n/** Two-letter monogram for the default icon tile: \"Team Chat\" → \"TC\". */\nexport function monogram(name: string): string {\n const words = name.trim().split(/\\s+/);\n const raw = words.length >= 2 ? `${words[0][0]}${words[1][0]}` : name.slice(0, 2);\n return raw.toUpperCase();\n}\n\n/* ---------------------------------------------------------------------------\n * Plan resolution\n * ------------------------------------------------------------------------- */\n\nconst RIGHT_ORDER: Record<WorkflowShowcaseRole, number> = {\n source: -1,\n destination: 0,\n action: 1,\n notify: 2,\n};\n\n/**\n * Resolve the workflow plan from explicit picks + prompt mentions. A viable\n * demo always has at least one source and one non-source, so missing sides\n * are backfilled from the catalog (first source / first notify-or-destination).\n */\nexport function resolvePlan(\n selected: string[],\n detected: string[],\n catalog: WorkflowShowcaseConnector[],\n): WorkflowShowcasePlan {\n const byName = new Map(catalog.map((c) => [c.name, c]));\n let names = [...new Set([...selected, ...detected])].filter((n) => byName.has(n));\n if (!names.length) {\n const fallback = [\n catalog.find((c) => c.role === \"source\"),\n catalog.find((c) => c.role === \"destination\"),\n catalog.find((c) => c.role === \"notify\"),\n ].filter((c): c is WorkflowShowcaseConnector => Boolean(c));\n names = fallback.map((c) => c.name);\n }\n const has = (predicate: (c: WorkflowShowcaseConnector) => boolean) =>\n names.some((n) => {\n const c = byName.get(n);\n return Boolean(c && predicate(c));\n });\n if (!has((c) => c.role === \"source\")) {\n const source = catalog.find((c) => c.role === \"source\");\n if (source) names = [source.name, ...names];\n }\n if (!has((c) => c.role !== \"source\")) {\n const sink =\n catalog.find((c) => c.role === \"notify\") ?? catalog.find((c) => c.role !== \"source\");\n if (sink) names = [...names, sink.name];\n }\n const picked = catalog.filter((c) => names.includes(c.name));\n const left = picked.filter((c) => c.role === \"source\");\n const right = picked\n .filter((c) => c.role !== \"source\")\n .sort((a, b) => RIGHT_ORDER[a.role] - RIGHT_ORDER[b.role]);\n const all = [...left, ...right];\n return { left, right, all, totalSteps: all.length + 1 };\n}\n\n/* ---------------------------------------------------------------------------\n * Activity rail script\n * ------------------------------------------------------------------------- */\n\nfunction stepVerb(role: WorkflowShowcaseRole): string {\n if (role === \"notify\") return \"alert\";\n if (role === \"action\") return \"trigger\";\n return \"load\";\n}\n\n/** Ordered assemble steps for the rail + canvas (\"storefront extract\", …). */\nexport function assembleSteps(plan: WorkflowShowcasePlan): string[] {\n return [\n ...plan.left.map((c) => `${c.name.toLowerCase()} extract`),\n \"schema map · 14 fields\",\n ...plan.right.map((c) => `${c.name.toLowerCase()} ${stepVerb(c.role)}`),\n ];\n}\n\n/**\n * Script the \"OCTAVIA IS DOING\" rail for the current moment.\n * `shown` = number of assemble steps already completed while building.\n */\nexport function buildActivity(args: {\n phase: WorkflowShowcasePhase;\n shown: number;\n plan: WorkflowShowcasePlan;\n selected: string[];\n status: string;\n}): ShowcaseActivityLine[] {\n const { phase, shown, plan, selected, status } = args;\n const settled = SETTLED_PHASES.includes(phase);\n const lines: ShowcaseActivityLine[] = [];\n if (phase === \"idle\") {\n if (!selected.length) {\n lines.push({ id: \"wait\", text: \"▸ waiting for instructions…\", tone: \"muted\" });\n lines.push({ id: \"hint\", text: \"· type a request or pick apps\", tone: \"faint\" });\n }\n for (const name of selected.slice(-6)) {\n lines.push({ id: `sel-${name}`, text: `+ ${name.toLowerCase()} connected`, tone: \"plain\" });\n }\n return lines;\n }\n if (phase === \"analyzing\") {\n for (const name of selected.slice(-4)) {\n lines.push({ id: `sel-${name}`, text: `+ ${name.toLowerCase()} connected`, tone: \"muted\" });\n }\n lines.push({ id: \"status\", text: `⟳ ${status}`, tone: \"active\" });\n return lines;\n }\n assembleSteps(plan).forEach((step, i) => {\n if (settled || shown > i) lines.push({ id: `step-${i}`, text: `✓ ${step}`, tone: \"done\" });\n else if (shown === i) lines.push({ id: `step-${i}`, text: `⟳ ${step}…`, tone: \"active\" });\n else lines.push({ id: `step-${i}`, text: `· ${step} queued`, tone: \"muted\" });\n });\n if (settled) lines.push({ id: \"errors\", text: \"✓ error handling attached\", tone: \"done\" });\n return lines.slice(-8);\n}\n\n/* ---------------------------------------------------------------------------\n * Misc\n * ------------------------------------------------------------------------- */\n\n/** \"Acme Inc.\" → \"acme-inc\" (workspace slug preview in the welcome card). */\nexport function slugify(value: string): string {\n return (\n value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\") || \"your-team\"\n );\n}\n\nexport function isValidEmail(value: string): boolean {\n return /^\\S+@\\S+\\.\\S+$/.test(value.trim());\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { BlogCard } from \"../../../components/BlogCard/BlogCard\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * BlogGrid — the marketing blog/changelog teaser section body. Composes the\n * DS BlogCard into a responsive grid with an optional \"view all\" link.\n * Pair with MarketingSection for the kicker/title band.\n * ------------------------------------------------------------------------- */\n\nexport interface BlogGridPost {\n id: string;\n title: ReactNode;\n href: string;\n excerpt?: ReactNode;\n /** Publish date / meta line, e.g. \"Jul 12, 2026\". */\n date?: ReactNode;\n /** Reading-time chip, e.g. \"6 min read\". */\n readTime?: ReactNode;\n tags?: ReactNode[];\n /** Cover artwork (usually an <img>). */\n cover?: ReactNode;\n author?: {\n name: string;\n /** Avatar spec forwarded to the DS Avatar primitive. */\n avatar?: { src?: string; initials?: string; alt?: string };\n byline?: ReactNode;\n };\n}\n\nexport interface BlogGridProps extends ComponentPropsWithoutRef<\"div\"> {\n posts: BlogGridPost[];\n columns?: 2 | 3;\n viewAllHref?: string;\n viewAllLabel?: ReactNode;\n}\n\nexport function BlogGrid({\n posts,\n columns = 3,\n viewAllHref,\n viewAllLabel = \"View all posts →\",\n className,\n ...rest\n}: BlogGridProps) {\n return (\n <div {...rest} className={cn(\"ods-mkt-blog\", className)}>\n <div className={cn(\"ods-mkt-blog__grid\", `ods-mkt-blog__grid--${columns}`)}>\n {posts.map((post) => (\n <BlogCard\n key={post.id}\n title={post.title}\n description={post.excerpt}\n href={post.href}\n meta={post.date}\n readingTime={post.readTime}\n tags={post.tags}\n cover={post.cover}\n author={post.author}\n />\n ))}\n </div>\n {viewAllHref && (\n <div className=\"ods-mkt-blog__more\">\n <a className=\"ods-mkt-blog__more-link\" href={viewAllHref}>\n {viewAllLabel}\n </a>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { type FormEvent, type ReactNode, useId, useState } from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { Input } from \"../../../components/Input/Input\";\nimport { Select } from \"../../../components/Select/Select\";\nimport { Textarea } from \"../../../components/Textarea/Textarea\";\nimport { cn } from \"../../../utils/cn\";\nimport { isValidEmail } from \"../WorkflowShowcase/showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * ContactForm — \"talk to us\" form for the contact page / sales section.\n * Same interaction contract as BetaAccessForm: async `onSubmit`, success\n * card on resolve, inline error with the form intact on failure.\n * ------------------------------------------------------------------------- */\n\nexport interface ContactFormValues {\n name: string;\n email: string;\n company?: string;\n /** Selected topic value (present when `topics` are configured). */\n topic?: string;\n message: string;\n}\n\nexport interface ContactFormTopic {\n value: string;\n label: string;\n /** Contextual hint shown under the select when this topic is chosen. */\n hint?: ReactNode;\n}\n\nexport interface ContactFormProps {\n title?: ReactNode;\n subtitle?: ReactNode;\n /** Topic choices (sales, partnership, support…). Required when provided. */\n topics?: ContactFormTopic[];\n submitLabel?: ReactNode;\n footnote?: ReactNode;\n /** Resolve → success state; throw → inline error, form kept. */\n onSubmit?: (values: ContactFormValues) => Promise<void> | void;\n successTitle?: ReactNode;\n successBody?: ReactNode;\n disabled?: boolean;\n className?: string;\n}\n\ntype Phase = \"idle\" | \"submitting\" | \"success\";\n\nexport function ContactForm({\n title = \"Talk to us\",\n subtitle = \"SALES · PARTNERSHIPS · ANYTHING ELSE — WE READ EVERYTHING\",\n topics,\n submitLabel = \"Send message →\",\n footnote = \"WE USUALLY REPLY WITHIN ONE BUSINESS DAY\",\n onSubmit,\n successTitle = \"Message sent.\",\n successBody = \"Thanks for reaching out — we'll get back to you by email.\",\n disabled = false,\n className,\n}: ContactFormProps) {\n const uid = useId();\n const [values, setValues] = useState<ContactFormValues>({\n name: \"\",\n email: \"\",\n company: \"\",\n topic: \"\",\n message: \"\",\n });\n const selectedTopic = topics?.find((t) => t.value === values.topic);\n const [phase, setPhase] = useState<Phase>(\"idle\");\n const [error, setError] = useState<string | null>(null);\n\n const handleSubmit = async (event: FormEvent) => {\n event.preventDefault();\n if (phase === \"submitting\") return;\n if (!values.name.trim()) {\n setError(\"Please enter your name.\");\n return;\n }\n if (!isValidEmail(values.email)) {\n setError(\"Please enter a valid work email.\");\n return;\n }\n if (topics?.length && !values.topic) {\n setError(\"Please choose a topic.\");\n return;\n }\n if (!values.message.trim()) {\n setError(\"Please write a short message.\");\n return;\n }\n setError(null);\n setPhase(\"submitting\");\n try {\n await onSubmit?.(values);\n setPhase(\"success\");\n } catch {\n setError(\"Something went wrong — please try again.\");\n setPhase(\"idle\");\n }\n };\n\n if (phase === \"success\") {\n return (\n <div className={cn(\"ods-mkt-contact\", \"ods-mkt-contact--success\", className)} role=\"status\">\n <p className=\"ods-mkt-contact__success-mark\">✓ {successTitle}</p>\n <p className=\"ods-mkt-contact__success-body\">{successBody}</p>\n </div>\n );\n }\n\n const busy = disabled || phase === \"submitting\";\n\n return (\n <form className={cn(\"ods-mkt-contact\", className)} onSubmit={handleSubmit} noValidate>\n <div className=\"ods-mkt-contact__head\">\n <h3 className=\"ods-mkt-contact__title\">{title}</h3>\n {subtitle && <p className=\"ods-mkt-contact__subtitle\">{subtitle}</p>}\n </div>\n\n <div className=\"ods-mkt-contact__grid\">\n <div className=\"ods-mkt-contact__field\">\n <label className=\"ods-mkt-contact__label\" htmlFor={`${uid}-name`}>\n Full name\n </label>\n <Input\n id={`${uid}-name`}\n autoComplete=\"name\"\n placeholder=\"Ada Lovelace\"\n value={values.name}\n onChange={(e) => setValues((v) => ({ ...v, name: e.target.value }))}\n disabled={busy}\n />\n </div>\n <div className=\"ods-mkt-contact__field\">\n <label className=\"ods-mkt-contact__label\" htmlFor={`${uid}-email`}>\n Work email\n </label>\n <Input\n id={`${uid}-email`}\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"ada@company.com\"\n value={values.email}\n onChange={(e) => setValues((v) => ({ ...v, email: e.target.value }))}\n disabled={busy}\n />\n </div>\n <div className=\"ods-mkt-contact__field ods-mkt-contact__field--wide\">\n <label className=\"ods-mkt-contact__label\" htmlFor={`${uid}-company`}>\n Company <span className=\"ods-mkt-contact__optional\">(optional)</span>\n </label>\n <Input\n id={`${uid}-company`}\n autoComplete=\"organization\"\n placeholder=\"Acme Inc.\"\n value={values.company ?? \"\"}\n onChange={(e) => setValues((v) => ({ ...v, company: e.target.value }))}\n disabled={busy}\n />\n </div>\n {topics && topics.length > 0 && (\n <div className=\"ods-mkt-contact__field ods-mkt-contact__field--wide\">\n <span className=\"ods-mkt-contact__label\" id={`${uid}-topic-label`}>\n Topic\n </span>\n <Select\n aria-labelledby={`${uid}-topic-label`}\n placeholder=\"Choose a topic…\"\n options={topics.map((t) => ({ value: t.value, label: t.label }))}\n value={values.topic ?? \"\"}\n onChange={(topic) => setValues((v) => ({ ...v, topic }))}\n disabled={busy}\n />\n {selectedTopic?.hint && (\n <p className=\"ods-mkt-contact__topic-hint\">{selectedTopic.hint}</p>\n )}\n </div>\n )}\n <div className=\"ods-mkt-contact__field ods-mkt-contact__field--wide\">\n {/* Textarea's react-aria field wiring owns the name computation —\n associate the external label explicitly via aria-labelledby. */}\n <label\n className=\"ods-mkt-contact__label\"\n id={`${uid}-message-label`}\n htmlFor={`${uid}-message`}\n >\n Message\n </label>\n <Textarea\n id={`${uid}-message`}\n aria-labelledby={`${uid}-message-label`}\n placeholder=\"What are you trying to build?\"\n rows={4}\n value={values.message}\n onChange={(e) => setValues((v) => ({ ...v, message: e.target.value }))}\n disabled={busy}\n />\n </div>\n </div>\n\n {error && (\n <p className=\"ods-mkt-contact__error\" role=\"alert\">\n {error}\n </p>\n )}\n\n <div className=\"ods-mkt-contact__foot\">\n {footnote && <p className=\"ods-mkt-contact__footnote\">{footnote}</p>}\n <Button\n type=\"submit\"\n variant=\"primary\"\n loading={phase === \"submitting\"}\n disabled={disabled}\n >\n {submitLabel}\n </Button>\n </div>\n </form>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * CtaBanner — the closing conversion band: display headline, lede, primary +\n * secondary calls to action, mono footnote.\n * ------------------------------------------------------------------------- */\n\nexport interface CtaBannerAction {\n label: ReactNode;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface CtaBannerProps extends Omit<ComponentPropsWithoutRef<\"section\">, \"title\"> {\n title: ReactNode;\n lede?: ReactNode;\n primary: CtaBannerAction;\n secondary?: CtaBannerAction;\n /** Mono microcopy under the actions, e.g. beta-review cadence. */\n footnote?: ReactNode;\n}\n\nfunction Action({\n action,\n variant,\n}: {\n action: CtaBannerAction;\n variant: \"primary\" | \"secondary\";\n}) {\n if (action.href) {\n return (\n <a\n className={cn(\"ods-mkt-cta__link\", `ods-mkt-cta__link--${variant}`)}\n href={action.href}\n onClick={action.onClick}\n >\n {action.label}\n </a>\n );\n }\n return (\n <Button variant={variant} onClick={action.onClick}>\n {action.label}\n </Button>\n );\n}\n\nexport function CtaBanner({\n title,\n lede,\n primary,\n secondary,\n footnote,\n className,\n ...rest\n}: CtaBannerProps) {\n return (\n <section {...rest} className={cn(\"ods-mkt-cta\", className)}>\n <h2 className=\"ods-mkt-cta__title\">{title}</h2>\n {lede && <p className=\"ods-mkt-cta__lede\">{lede}</p>}\n <div className=\"ods-mkt-cta__actions\">\n <Action action={primary} variant=\"primary\" />\n {secondary && <Action action={secondary} variant=\"secondary\" />}\n </div>\n {footnote && <p className=\"ods-mkt-cta__footnote\">{footnote}</p>}\n </section>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { Accordion } from \"../../../components/Accordion/Accordion\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * FaqSection — marketing Q&A built on the DS Accordion. One or two columns;\n * pass `defaultOpenIds` to pre-expand the questions that answer objections.\n * ------------------------------------------------------------------------- */\n\nexport interface FaqItem {\n id: string;\n question: ReactNode;\n answer: ReactNode;\n}\n\nexport interface FaqSectionProps extends ComponentPropsWithoutRef<\"div\"> {\n items: FaqItem[];\n columns?: 1 | 2;\n defaultOpenIds?: string[];\n}\n\nexport function FaqSection({\n items,\n columns = 1,\n defaultOpenIds = [],\n className,\n ...rest\n}: FaqSectionProps) {\n const half = Math.ceil(items.length / 2);\n const columnItems = columns === 2 ? [items.slice(0, half), items.slice(half)] : [items];\n\n return (\n <div {...rest} className={cn(\"ods-mkt-faq\", columns === 2 && \"ods-mkt-faq--2\", className)}>\n {columnItems.map((column, i) => (\n <Accordion\n // biome-ignore lint/suspicious/noArrayIndexKey: columns are positional\n key={i}\n mode=\"multiple\"\n defaultValue={defaultOpenIds}\n items={column.map((item) => ({\n id: item.id,\n label: item.question,\n content: <div className=\"ods-mkt-faq__answer\">{item.answer}</div>,\n }))}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * FeatureGrid — hairline-bordered capability grid (the \"Everything you need\"\n * and AI-capability sections). Cells share borders like a table of features.\n * ------------------------------------------------------------------------- */\n\nexport interface FeatureGridItem {\n id: string;\n title: ReactNode;\n body: ReactNode;\n icon?: ReactNode;\n}\n\nexport interface FeatureGridProps extends ComponentPropsWithoutRef<\"div\"> {\n items: FeatureGridItem[];\n columns?: 2 | 3 | 4;\n /** Tighter cells for dense capability lists. */\n dense?: boolean;\n}\n\nexport function FeatureGrid({\n items,\n columns = 3,\n dense = false,\n className,\n ...rest\n}: FeatureGridProps) {\n return (\n <div\n {...rest}\n className={cn(\n \"ods-mkt-features\",\n `ods-mkt-features--${columns}`,\n dense && \"ods-mkt-features--dense\",\n className,\n )}\n >\n {items.map((item) => (\n <article key={item.id} className=\"ods-mkt-features__cell\">\n {item.icon && (\n <span className=\"ods-mkt-features__icon\" aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n <h3 className=\"ods-mkt-features__title\">{item.title}</h3>\n <p className=\"ods-mkt-features__body\">{item.body}</p>\n </article>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport { CheckmarkIcon, SearchIcon } from \"@octaviaflow/icons\";\nimport { type FormEvent, type ReactNode, useMemo, useState } from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { Input } from \"../../../components/Input/Input\";\nimport { cn } from \"../../../utils/cn\";\nimport { isValidEmail } from \"../WorkflowShowcase/showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * IntegrationsFinder — the /integrations page section: searchable connector\n * gallery with category pills (+ counts), native-first ordering, a\n * \"universal\" badge for tools reachable through the open connectors (never\n * overclaim), and a request-a-connector form when the search misses.\n *\n * Data, brand icons and the request transport come from the consuming site;\n * items without an icon fall back to a neutral letter tile.\n * ------------------------------------------------------------------------- */\n\nexport interface IntegrationsFinderItem {\n name: string;\n category: string;\n /** \"native\" (real template, default) or \"universal\" (via open connectors). */\n kind?: \"native\" | \"universal\";\n /** Extra search terms. */\n aliases?: string[];\n /** Brand icon node. Omit for a letter tile. */\n icon?: ReactNode;\n}\n\nexport interface IntegrationsFinderProps {\n items: IntegrationsFinderItem[];\n /** Category pill order. Defaults to first-appearance order in `items`. */\n categories?: string[];\n searchPlaceholder?: string;\n /** Badge on universal entries. Default \"Open API\". */\n universalBadgeLabel?: ReactNode;\n /**\n * Request-a-connector submit ({ query, email }). Resolve → sent state,\n * throw → error hint. Omit to hide the request form on misses.\n */\n onRequestConnector?: (request: { query: string; email: string }) => Promise<void> | void;\n /** Fallback line under a failed request, e.g. a contact address. */\n requestErrorHint?: ReactNode;\n className?: string;\n}\n\nfunction LetterTile({ name }: { name: string }) {\n return (\n <span className=\"ods-mkt-finder__letter\" aria-hidden=\"true\">\n {name.trim().charAt(0).toUpperCase()}\n </span>\n );\n}\n\ntype RequestState = \"idle\" | \"sending\" | \"sent\" | \"error\";\n\nexport function IntegrationsFinder({\n items,\n categories,\n searchPlaceholder = \"Find your connector — search by name or category…\",\n universalBadgeLabel = \"Open API\",\n onRequestConnector,\n requestErrorHint = \"Couldn't send right now — please try again in a moment.\",\n className,\n}: IntegrationsFinderProps) {\n const [query, setQuery] = useState(\"\");\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const [email, setEmail] = useState(\"\");\n const [requestState, setRequestState] = useState<RequestState>(\"idle\");\n const [emailError, setEmailError] = useState(false);\n\n const pillCategories = useMemo(() => {\n if (categories?.length) return categories;\n const seen: string[] = [];\n for (const item of items) {\n if (!seen.includes(item.category)) seen.push(item.category);\n }\n return seen;\n }, [categories, items]);\n\n const counts = useMemo(() => {\n const map = new Map<string, number>();\n for (const item of items) map.set(item.category, (map.get(item.category) ?? 0) + 1);\n return map;\n }, [items]);\n\n const results = useMemo(() => {\n const q = query.trim().toLowerCase();\n let list = items;\n if (activeCategory) list = list.filter((c) => c.category === activeCategory);\n if (q) {\n list = list.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.category.toLowerCase().includes(q) ||\n c.aliases?.some((a) => a.toLowerCase().includes(q)),\n );\n }\n // Native connectors first, then alphabetical — the honest ordering.\n return [...list].sort((a, b) => {\n const aKind = a.kind ?? \"native\";\n const bKind = b.kind ?? \"native\";\n if (aKind !== bKind) return aKind === \"native\" ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n }, [items, query, activeCategory]);\n\n const handleRequest = async (event: FormEvent) => {\n event.preventDefault();\n if (!onRequestConnector || requestState === \"sending\") return;\n if (!isValidEmail(email)) {\n setEmailError(true);\n return;\n }\n setEmailError(false);\n setRequestState(\"sending\");\n try {\n await onRequestConnector({ query: query.trim(), email });\n setRequestState(\"sent\");\n } catch {\n setRequestState(\"error\");\n }\n };\n\n return (\n <div className={cn(\"ods-mkt-finder\", className)}>\n <div className=\"ods-mkt-finder__search\">\n <Input\n type=\"search\"\n aria-label=\"Search connectors\"\n placeholder={searchPlaceholder}\n leftIcon={<SearchIcon size=\"sm\" />}\n value={query}\n onChange={(e) => {\n setQuery(e.target.value);\n setRequestState(\"idle\");\n }}\n />\n </div>\n\n <fieldset className=\"ods-mkt-finder__pills\" aria-label=\"Connector categories\">\n <button\n type=\"button\"\n className={cn(\n \"ods-mkt-finder__pill\",\n activeCategory === null && \"ods-mkt-finder__pill--active\",\n )}\n onClick={() => setActiveCategory(null)}\n >\n All <span className=\"ods-mkt-finder__count\">{items.length}</span>\n </button>\n {pillCategories.map((category) => (\n <button\n key={category}\n type=\"button\"\n className={cn(\n \"ods-mkt-finder__pill\",\n activeCategory === category && \"ods-mkt-finder__pill--active\",\n )}\n onClick={() => setActiveCategory(activeCategory === category ? null : category)}\n >\n {category} <span className=\"ods-mkt-finder__count\">{counts.get(category) ?? 0}</span>\n </button>\n ))}\n </fieldset>\n\n {results.length > 0 ? (\n <div className=\"ods-mkt-finder__grid\">\n {results.map((item) => (\n <div key={item.name} className=\"ods-mkt-finder__card\">\n <span className=\"ods-mkt-finder__card-icon\" aria-hidden=\"true\">\n {item.icon ?? <LetterTile name={item.name} />}\n </span>\n <span className=\"ods-mkt-finder__card-name\">{item.name}</span>\n {(item.kind ?? \"native\") === \"universal\" && (\n <span className=\"ods-mkt-finder__badge\">{universalBadgeLabel}</span>\n )}\n </div>\n ))}\n </div>\n ) : (\n <div className=\"ods-mkt-finder__miss\">\n {requestState === \"sent\" ? (\n <p className=\"ods-mkt-finder__sent\" role=\"status\">\n <CheckmarkIcon size=\"sm\" aria-hidden=\"true\" /> Got it — we'll let you know when a{\" \"}\n <strong>{query.trim()}</strong> connector is available.\n </p>\n ) : (\n <>\n <h3 className=\"ods-mkt-finder__miss-title\">\n No native <strong>{query.trim()}</strong> connector yet\n </h3>\n <p className=\"ods-mkt-finder__miss-body\">\n Our universal open connectors likely cover it today — and we build native connectors\n on request. {onRequestConnector && \"Leave your email and we'll notify you.\"}\n </p>\n {onRequestConnector && (\n <form className=\"ods-mkt-finder__miss-form\" onSubmit={handleRequest} noValidate>\n <Input\n type=\"email\"\n aria-label=\"Work email for connector request\"\n placeholder=\"you@company.com\"\n value={email}\n error={emailError}\n errorMessage={emailError ? \"Please enter a valid work email.\" : undefined}\n onChange={(e) => {\n setEmail(e.target.value);\n setEmailError(false);\n }}\n />\n <Button type=\"submit\" variant=\"primary\" loading={requestState === \"sending\"}>\n Request connector\n </Button>\n </form>\n )}\n {requestState === \"error\" && (\n <p className=\"ods-mkt-finder__miss-error\" role=\"alert\">\n {requestErrorHint}\n </p>\n )}\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * IntegrationsWall — the homepage integrations section: a grid of category\n * cards (icon + category name + connector name pills) with a footnote.\n * Mirrors the real site's structure; the consuming site passes category\n * icons and real connector names. For the searchable /integrations page,\n * use IntegrationsFinder instead.\n * ------------------------------------------------------------------------- */\n\nexport interface IntegrationsWallItem {\n name: string;\n /** Optional per-pill brand icon. */\n icon?: ReactNode;\n}\n\nexport interface IntegrationsWallCategory {\n id: string;\n label: ReactNode;\n /** Category icon in the card header. */\n icon?: ReactNode;\n items: IntegrationsWallItem[];\n}\n\nexport interface IntegrationsWallProps extends ComponentPropsWithoutRef<\"div\"> {\n categories: IntegrationsWallCategory[];\n /** Mono footnote under the wall. */\n footnote?: ReactNode;\n columns?: 2 | 3;\n}\n\nexport function IntegrationsWall({\n categories,\n footnote,\n columns = 3,\n className,\n ...rest\n}: IntegrationsWallProps) {\n return (\n <div {...rest} className={cn(\"ods-mkt-wall\", className)}>\n <div className={cn(\"ods-mkt-wall__grid\", `ods-mkt-wall__grid--${columns}`)}>\n {categories.map((category) => (\n <div key={category.id} className=\"ods-mkt-wall__card\">\n <div className=\"ods-mkt-wall__card-head\">\n {category.icon && (\n <span className=\"ods-mkt-wall__card-icon\" aria-hidden=\"true\">\n {category.icon}\n </span>\n )}\n <h3 className=\"ods-mkt-wall__card-label\">{category.label}</h3>\n </div>\n <div className=\"ods-mkt-wall__pills\">\n {category.items.map((item) => (\n <span key={item.name} className=\"ods-mkt-wall__pill\">\n {item.icon && (\n <span className=\"ods-mkt-wall__pill-icon\" aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n {item.name}\n </span>\n ))}\n </div>\n </div>\n ))}\n </div>\n {footnote && <p className=\"ods-mkt-wall__footnote\">{footnote}</p>}\n </div>\n );\n}\n","\"use client\";\n\nimport { CheckmarkIcon, CloseIcon } from \"@octaviaflow/icons\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { Spinner } from \"../../../components/Spinner/Spinner\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * LiveConsole — the \"orders_pipeline · production\" terminal card: a mono log\n * of pipeline steps with staggered reveal and per-line state icons.\n *\n * State icons are real DS glyphs, not text characters: check (done), the DS\n * Spinner (running), a dashed pending circle (queued) and a cross (error) —\n * all in a fixed-width rail so labels align like a real console.\n * ------------------------------------------------------------------------- */\n\nexport type LiveConsoleState = \"done\" | \"running\" | \"queued\" | \"error\";\n\nexport interface LiveConsoleLine {\n id: string;\n /** Step label, e.g. \"warehouse.load\". */\n label: ReactNode;\n /** Trailing detail, e.g. \"— 14,204 rows · 1.2s\". */\n detail?: ReactNode;\n state?: LiveConsoleState;\n}\n\nexport interface LiveConsoleProps extends Omit<ComponentPropsWithoutRef<\"div\">, \"title\"> {\n /** Header label, e.g. \"orders_pipeline · production\". */\n title: ReactNode;\n /** Header badge. Defaults to \"LIVE\". Pass null to hide. */\n badge?: ReactNode;\n lines: LiveConsoleLine[];\n /** Staggered line reveal (disabled automatically for reduced motion). */\n animated?: boolean;\n}\n\n/** Dashed circle — \"queued/pending\", matching the flow editor's vocabulary. */\nfunction PendingGlyph() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"13\"\n height=\"13\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.4\"\n strokeLinecap=\"round\"\n strokeDasharray=\"3.5 3.5\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n </svg>\n );\n}\n\nfunction StateGlyph({ state }: { state: LiveConsoleState }) {\n switch (state) {\n case \"done\":\n return <CheckmarkIcon size=\"sm\" aria-hidden=\"true\" />;\n case \"running\":\n return <Spinner size=\"sm\" />;\n case \"error\":\n return <CloseIcon size=\"sm\" aria-hidden=\"true\" />;\n case \"queued\":\n return <PendingGlyph />;\n }\n}\n\nexport function LiveConsole({\n title,\n badge = \"LIVE\",\n lines,\n animated = true,\n className,\n ...rest\n}: LiveConsoleProps) {\n return (\n <div {...rest} className={cn(\"ods-mkt-console\", className)}>\n <div className=\"ods-mkt-console__head\">\n <span className=\"ods-mkt-console__title\">{title}</span>\n {badge != null && (\n <span className=\"ods-mkt-console__badge\">\n <span className=\"ods-mkt-console__dot\" />\n {badge}\n </span>\n )}\n </div>\n <div className=\"ods-mkt-console__body\">\n {lines.map((line, i) => {\n const state = line.state ?? \"done\";\n return (\n <div\n key={line.id}\n className={cn(\"ods-mkt-console__line\", animated && \"ods-mkt-console__line--animated\")}\n style={animated ? { animationDelay: `${0.3 + i * 0.6}s` } : undefined}\n >\n <span\n className={cn(\"ods-mkt-console__glyph\", `ods-mkt-console__glyph--${state}`)}\n aria-hidden=\"true\"\n >\n <StateGlyph state={state} />\n </span>\n <span className=\"ods-mkt-console__text\">\n <span className=\"ods-mkt-console__label\">{line.label}</span>\n {line.detail && (\n <span\n className={cn(\n \"ods-mkt-console__detail\",\n state === \"running\" && \"ods-mkt-console__detail--running\",\n state === \"error\" && \"ods-mkt-console__detail--error\",\n )}\n >\n {\" \"}\n {line.detail}\n </span>\n )}\n </span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * LogoMarquee — social-proof strip. Logos (or text wordmarks) scroll in a\n * seamless loop; the track is duplicated once (second copy aria-hidden) so\n * the animation wraps without a gap. Reduced-motion visitors get a static\n * wrapped row. The consuming site passes real logos via `icon`.\n * ------------------------------------------------------------------------- */\n\nexport interface LogoMarqueeItem {\n id: string;\n label: string;\n /** Logo mark. Omit for a plain text wordmark chip. */\n icon?: ReactNode;\n}\n\nexport interface LogoMarqueeProps extends ComponentPropsWithoutRef<\"div\"> {\n items: LogoMarqueeItem[];\n /** Mono microcopy above the strip, e.g. \"TRUSTED BY DATA TEAMS AT\". */\n label?: ReactNode;\n /** Seconds per full loop. Default 30. */\n speed?: number;\n /** Desaturate logos until hover. Default true. */\n grayscale?: boolean;\n}\n\nfunction Track({ items, hidden }: { items: LogoMarqueeItem[]; hidden?: boolean }) {\n return (\n <div className=\"ods-mkt-marquee__track\" aria-hidden={hidden || undefined}>\n {items.map((item) => (\n <span key={item.id} className=\"ods-mkt-marquee__logo\" title={item.label}>\n {item.icon ?? <span className=\"ods-mkt-marquee__wordmark\">{item.label}</span>}\n </span>\n ))}\n </div>\n );\n}\n\nexport function LogoMarquee({\n items,\n label,\n speed = 30,\n grayscale = true,\n className,\n ...rest\n}: LogoMarqueeProps) {\n return (\n <div\n {...rest}\n className={cn(\"ods-mkt-marquee\", grayscale && \"ods-mkt-marquee--gray\", className)}\n >\n {label && <p className=\"ods-mkt-marquee__label\">{label}</p>}\n <div className=\"ods-mkt-marquee__viewport\">\n <div className=\"ods-mkt-marquee__rail\" style={{ animationDuration: `${speed}s` }}>\n <Track items={items} />\n <Track items={items} hidden />\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport type { WorkflowShowcaseRole } from \"./components/WorkflowShowcase/showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * Marketing glyphs — small stroke icons used as default \"app icon\" tiles\n * across the marketing subsystem (showcase cubes/chips, integration walls).\n *\n * Kept lucide-compatible (24×24 viewBox, stroke-based, currentColor) for\n * visual harmony with the rest of the design system. Consumers pass real\n * brand icons via each component's `icon` slot; these are the neutral\n * fallbacks so nothing ever renders as a bare letter pair.\n * ------------------------------------------------------------------------- */\n\ninterface GlyphProps {\n size?: number;\n}\n\nconst base = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n};\n\n/** Database cylinder — data sources. */\nexport function SourceGlyph({ size = 12 }: GlyphProps) {\n return (\n <svg {...base} width={size} height={size} aria-hidden=\"true\">\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v14a9 3 0 0 0 18 0V5\" />\n <path d=\"M3 12a9 3 0 0 0 18 0\" />\n </svg>\n );\n}\n\n/** Archive box — warehouses / destinations. */\nexport function DestinationGlyph({ size = 12 }: GlyphProps) {\n return (\n <svg {...base} width={size} height={size} aria-hidden=\"true\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"5\" rx=\"1\" />\n <path d=\"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8\" />\n <path d=\"M10 12h4\" />\n </svg>\n );\n}\n\n/** Bolt — downstream actions / triggers. */\nexport function ActionGlyph({ size = 12 }: GlyphProps) {\n return (\n <svg {...base} width={size} height={size} aria-hidden=\"true\">\n <path d=\"M13 2 3 14h9l-1 8 10-12h-9l1-8z\" />\n </svg>\n );\n}\n\n/** Chat bubble — notification targets. */\nexport function NotifyGlyph({ size = 12 }: GlyphProps) {\n return (\n <svg {...base} width={size} height={size} aria-hidden=\"true\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n );\n}\n\n/** Plug — generic integration/connector mark (integration walls). */\nexport function ConnectorGlyph({ size = 12 }: GlyphProps) {\n return (\n <svg {...base} width={size} height={size} aria-hidden=\"true\">\n <path d=\"M12 22v-5\" />\n <path d=\"M9 8V2M15 8V2\" />\n <path d=\"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8h12z\" />\n </svg>\n );\n}\n\n/** OctaviaFlow brand mark — square with a forward arrow. */\nexport function BrandMark({ size = 18 }: GlyphProps) {\n return (\n <svg viewBox=\"0 0 18 18\" width={size} height={size} aria-hidden=\"true\">\n <rect width=\"18\" height=\"18\" fill=\"var(--ods-accent)\" />\n <path d=\"M4 9h8.5M9.5 5.5 13 9l-3.5 3.5\" stroke=\"#fff\" strokeWidth=\"1.6\" fill=\"none\" />\n </svg>\n );\n}\n\nexport function roleGlyph(role: WorkflowShowcaseRole, size = 12): ReactNode {\n switch (role) {\n case \"source\":\n return <SourceGlyph size={size} />;\n case \"destination\":\n return <DestinationGlyph size={size} />;\n case \"action\":\n return <ActionGlyph size={size} />;\n case \"notify\":\n return <NotifyGlyph size={size} />;\n }\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { BrandMark } from \"../../glyphs\";\n\n/* ---------------------------------------------------------------------------\n * MarketingFooter — brand column + link columns + legal bar.\n * ------------------------------------------------------------------------- */\n\nexport interface MarketingFooterLink {\n label: ReactNode;\n href: string;\n}\n\nexport interface MarketingFooterColumn {\n id: string;\n label: ReactNode;\n links: MarketingFooterLink[];\n}\n\nexport interface MarketingFooterProps extends ComponentPropsWithoutRef<\"footer\"> {\n /** Brand slot. Defaults to the OctaviaFlow mark + wordmark. */\n brand?: ReactNode;\n /** Short positioning line under the brand. */\n tagline?: ReactNode;\n /** Extra brand-column content (contact email, status link…). */\n meta?: ReactNode;\n columns?: MarketingFooterColumn[];\n /**\n * Newsletter / stay-in-the-loop slot rendered in the brand column —\n * typically `<BetaAccessForm appearance=\"inline\" …/>`.\n */\n newsletter?: ReactNode;\n /** Left side of the bottom bar, e.g. \"© 2026 OctaviaFlow\". */\n legal?: ReactNode;\n /** Right side of the bottom bar, e.g. social handles. */\n social?: ReactNode;\n}\n\nexport function MarketingFooter({\n brand,\n tagline,\n meta,\n columns = [],\n newsletter,\n legal,\n social,\n className,\n ...rest\n}: MarketingFooterProps) {\n return (\n <footer {...rest} className={cn(\"ods-mkt-footer\", className)}>\n <div className=\"ods-mkt-footer__grid\">\n <div className=\"ods-mkt-footer__brand-col\">\n <div className=\"ods-mkt-footer__brand\">\n {brand ?? (\n <>\n <BrandMark size={16} />\n <span>OctaviaFlow</span>\n </>\n )}\n </div>\n {tagline && <p className=\"ods-mkt-footer__tagline\">{tagline}</p>}\n {meta && <div className=\"ods-mkt-footer__meta\">{meta}</div>}\n {newsletter && <div className=\"ods-mkt-footer__newsletter\">{newsletter}</div>}\n </div>\n {columns.map((column) => (\n <nav key={column.id} className=\"ods-mkt-footer__col\" aria-label={String(column.id)}>\n <span className=\"ods-mkt-footer__col-label\">{column.label}</span>\n {column.links.map((link) => (\n <a key={link.href} className=\"ods-mkt-footer__link\" href={link.href}>\n {link.label}\n </a>\n ))}\n </nav>\n ))}\n </div>\n {(legal || social) && (\n <div className=\"ods-mkt-footer__bar\">\n <span>{legal}</span>\n <span>{social}</span>\n </div>\n )}\n </footer>\n );\n}\n","\"use client\";\n\nimport { motion, useReducedMotion } from \"framer-motion\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * MarketingHero — the opening band: kicker, word-by-word animated display\n * headline, lede, then a free slot (typically the WorkflowShowcase).\n * ------------------------------------------------------------------------- */\n\nexport interface MarketingHeroProps extends Omit<ComponentPropsWithoutRef<\"section\">, \"title\"> {\n /** Mono eyebrow, e.g. \"AI-NATIVE PLATFORM — PRIVATE BETA\". */\n kicker?: ReactNode;\n /** Plain-string headline — split into words for the rise animation. */\n title: string;\n lede?: ReactNode;\n align?: \"start\" | \"center\";\n}\n\nexport function MarketingHero({\n kicker,\n title,\n lede,\n align = \"center\",\n className,\n children,\n ...rest\n}: MarketingHeroProps) {\n const reducedMotion = useReducedMotion();\n const words = title.split(/\\s+/).filter(Boolean);\n\n return (\n <section\n {...rest}\n className={cn(\"ods-mkt-hero\", align === \"center\" && \"ods-mkt-hero--center\", className)}\n >\n {kicker && <p className=\"ods-mkt-hero__kicker\">{kicker}</p>}\n <h1 className=\"ods-mkt-hero__title\">\n {words.map((word, i) => (\n <span\n className=\"ods-mkt-hero__word-clip\"\n // biome-ignore lint/suspicious/noArrayIndexKey: words are positional\n key={i}\n >\n <motion.span\n className=\"ods-mkt-hero__word\"\n initial={reducedMotion ? false : { opacity: 0, y: \"100%\" }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n duration: 0.7,\n delay: 0.05 + i * 0.08,\n ease: [0.2, 0.7, 0.2, 1],\n }}\n >\n {word}\n </motion.span>{\" \"}\n </span>\n ))}\n </h1>\n {lede && (\n <motion.p\n className=\"ods-mkt-hero__lede\"\n initial={reducedMotion ? false : { opacity: 0, y: 12 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.8, delay: 0.6, ease: [0.2, 0.7, 0.2, 1] }}\n >\n {lede}\n </motion.p>\n )}\n {children && (\n <motion.div\n className=\"ods-mkt-hero__body\"\n initial={reducedMotion ? false : { opacity: 0, y: 12 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.8, delay: 0.75, ease: [0.2, 0.7, 0.2, 1] }}\n >\n {children}\n </motion.div>\n )}\n </section>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { BrandMark } from \"../../glyphs\";\n\n/* ---------------------------------------------------------------------------\n * MarketingNav — sticky top navigation for the marketing site.\n * Brand · links · right-aligned actions, with a hamburger + slide-down panel\n * on small screens so mobile visitors keep full navigation.\n * ------------------------------------------------------------------------- */\n\nexport interface MarketingNavLink {\n label: ReactNode;\n href: string;\n active?: boolean;\n}\n\nexport interface MarketingNavProps extends ComponentPropsWithoutRef<\"header\"> {\n /** Brand slot. Defaults to the OctaviaFlow mark + wordmark. */\n brand?: ReactNode;\n brandHref?: string;\n links?: MarketingNavLink[];\n /** Right side: login links, CTA buttons — consumer-provided. */\n actions?: ReactNode;\n sticky?: boolean;\n}\n\nfunction BurgerGlyph({ open }: { open: boolean }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n >\n {open ? <path d=\"M6 6l12 12M18 6 6 18\" /> : <path d=\"M4 7h16M4 12h16M4 17h16\" />}\n </svg>\n );\n}\n\nexport function MarketingNav({\n brand,\n brandHref = \"/\",\n links = [],\n actions,\n sticky = true,\n className,\n ...rest\n}: MarketingNavProps) {\n const [mobileOpen, setMobileOpen] = useState(false);\n\n return (\n <header {...rest} className={cn(\"ods-mkt-nav\", sticky && \"ods-mkt-nav--sticky\", className)}>\n <a className=\"ods-mkt-nav__brand\" href={brandHref}>\n {brand ?? (\n <>\n <BrandMark />\n <span>OctaviaFlow</span>\n </>\n )}\n </a>\n {links.length > 0 && (\n <nav className=\"ods-mkt-nav__links\" aria-label=\"Main\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className={cn(\"ods-mkt-nav__link\", link.active && \"ods-mkt-nav__link--active\")}\n aria-current={link.active ? \"page\" : undefined}\n >\n {link.label}\n </a>\n ))}\n </nav>\n )}\n {actions && <div className=\"ods-mkt-nav__actions\">{actions}</div>}\n\n {(links.length > 0 || actions) && (\n <button\n type=\"button\"\n className=\"ods-mkt-nav__toggle\"\n aria-expanded={mobileOpen}\n aria-label=\"Toggle menu\"\n onClick={() => setMobileOpen((open) => !open)}\n >\n <BurgerGlyph open={mobileOpen} />\n </button>\n )}\n\n {mobileOpen && (\n <nav className=\"ods-mkt-nav__mobile\" aria-label=\"Main\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className={cn(\n \"ods-mkt-nav__mobile-link\",\n link.active && \"ods-mkt-nav__mobile-link--active\",\n )}\n aria-current={link.active ? \"page\" : undefined}\n onClick={() => setMobileOpen(false)}\n >\n {link.label}\n </a>\n ))}\n {actions && <div className=\"ods-mkt-nav__mobile-actions\">{actions}</div>}\n </nav>\n )}\n </header>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * MarketingSection — the page-band primitive every marketing section sits in.\n * Kicker (mono microcopy) → display title → lede, then arbitrary children.\n * ------------------------------------------------------------------------- */\n\nexport interface MarketingSectionProps extends Omit<ComponentPropsWithoutRef<\"section\">, \"title\"> {\n /** Mono eyebrow above the title, e.g. \"PLATFORM\". */\n kicker?: ReactNode;\n title?: ReactNode;\n /** Lede paragraph under the title. */\n lede?: ReactNode;\n align?: \"start\" | \"center\";\n /** \"subtle\" gives the band a muted background. */\n tone?: \"default\" | \"subtle\";\n /** Remove the default top hairline (e.g. for the first section). */\n flushTop?: boolean;\n}\n\nexport function MarketingSection({\n kicker,\n title,\n lede,\n align = \"start\",\n tone = \"default\",\n flushTop = false,\n className,\n children,\n ...rest\n}: MarketingSectionProps) {\n return (\n <section\n {...rest}\n className={cn(\n \"ods-mkt-section\",\n align === \"center\" && \"ods-mkt-section--center\",\n tone === \"subtle\" && \"ods-mkt-section--subtle\",\n flushTop && \"ods-mkt-section--flush\",\n className,\n )}\n >\n {(kicker || title || lede) && (\n <header className=\"ods-mkt-section__head\">\n {kicker && <p className=\"ods-mkt-section__kicker\">{kicker}</p>}\n {title && <h2 className=\"ods-mkt-section__title\">{title}</h2>}\n {lede && <p className=\"ods-mkt-section__lede\">{lede}</p>}\n </header>\n )}\n {children}\n </section>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * PageHero — the inner-page opening shell (pricing, features, AI platform,\n * about…): kicker pill → h1 → subtitle, optionally a row of actions.\n * MarketingHero is the animated homepage opener; this is its calmer inner-\n * page counterpart.\n * ------------------------------------------------------------------------- */\n\nexport interface PageHeroProps extends Omit<ComponentPropsWithoutRef<\"header\">, \"title\"> {\n /** Kicker pill above the title, e.g. \"Pricing\". */\n kicker?: ReactNode;\n title: ReactNode;\n subtitle?: ReactNode;\n /** Optional action row under the subtitle. */\n actions?: ReactNode;\n align?: \"center\" | \"start\";\n}\n\nexport function PageHero({\n kicker,\n title,\n subtitle,\n actions,\n align = \"center\",\n className,\n ...rest\n}: PageHeroProps) {\n return (\n <header\n {...rest}\n className={cn(\"ods-mkt-pagehero\", align === \"start\" && \"ods-mkt-pagehero--start\", className)}\n >\n {kicker && <span className=\"ods-mkt-pagehero__kicker\">{kicker}</span>}\n <h1 className=\"ods-mkt-pagehero__title\">{title}</h1>\n {subtitle && <p className=\"ods-mkt-pagehero__subtitle\">{subtitle}</p>}\n {actions && <div className=\"ods-mkt-pagehero__actions\">{actions}</div>}\n </header>\n );\n}\n","\"use client\";\n\nimport { CheckmarkIcon } from \"@octaviaflow/icons\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * PricingTiers — the /pricing plan grid: tier cards with price, period,\n * annual note, feature checklist and per-tier CTA; the featured tier gets a\n * highlight ring and badge. Prices and copy come entirely from the consumer\n * (pricing is site policy, not design-system content).\n * ------------------------------------------------------------------------- */\n\nexport interface PricingTierCta {\n label: ReactNode;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface PricingTier {\n id: string;\n name: ReactNode;\n /** Display price, e.g. \"$300\", \"Free\", \"Custom\". */\n price: ReactNode;\n /** Under the price, e.g. \"per month\", \"14-day trial\". */\n period?: ReactNode;\n /** e.g. \"Save 10% with annual billing\". */\n annualNote?: ReactNode;\n description?: ReactNode;\n features: ReactNode[];\n cta: PricingTierCta;\n featured?: boolean;\n /** Badge on the featured card. Default \"Recommended\". */\n badge?: ReactNode;\n}\n\nexport interface PricingTiersProps extends ComponentPropsWithoutRef<\"div\"> {\n tiers: PricingTier[];\n /** Footnote under the grid, e.g. the private-beta note. */\n note?: ReactNode;\n}\n\nfunction TierCta({ cta, featured }: { cta: PricingTierCta; featured: boolean }) {\n if (cta.href) {\n return (\n <a\n className={cn(\n \"ods-mkt-pricing__cta\",\n featured ? \"ods-mkt-pricing__cta--primary\" : \"ods-mkt-pricing__cta--secondary\",\n )}\n href={cta.href}\n onClick={cta.onClick}\n >\n {cta.label}\n </a>\n );\n }\n return (\n <Button variant={featured ? \"primary\" : \"secondary\"} fullWidth onClick={cta.onClick}>\n {cta.label}\n </Button>\n );\n}\n\nexport function PricingTiers({ tiers, note, className, ...rest }: PricingTiersProps) {\n return (\n <div {...rest} className={cn(\"ods-mkt-pricing\", className)}>\n <div className=\"ods-mkt-pricing__grid\">\n {tiers.map((tier) => (\n <article\n key={tier.id}\n className={cn(\n \"ods-mkt-pricing__card\",\n tier.featured && \"ods-mkt-pricing__card--featured\",\n )}\n >\n {tier.featured && (\n <span className=\"ods-mkt-pricing__badge\">{tier.badge ?? \"Recommended\"}</span>\n )}\n <h3 className=\"ods-mkt-pricing__name\">{tier.name}</h3>\n <div className=\"ods-mkt-pricing__price-row\">\n <span className=\"ods-mkt-pricing__price\">{tier.price}</span>\n {tier.period && <span className=\"ods-mkt-pricing__period\">{tier.period}</span>}\n </div>\n {tier.annualNote && <span className=\"ods-mkt-pricing__annual\">{tier.annualNote}</span>}\n {tier.description && <p className=\"ods-mkt-pricing__desc\">{tier.description}</p>}\n <ul className=\"ods-mkt-pricing__features\">\n {tier.features.map((feature, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: features are positional copy\n <li key={i} className=\"ods-mkt-pricing__feature\">\n <CheckmarkIcon size=\"sm\" aria-hidden=\"true\" />\n <span>{feature}</span>\n </li>\n ))}\n </ul>\n <TierCta cta={tier.cta} featured={Boolean(tier.featured)} />\n </article>\n ))}\n </div>\n {note && <p className=\"ods-mkt-pricing__note\">{note}</p>}\n </div>\n );\n}\n","\"use client\";\n\nimport { useReducedMotion } from \"framer-motion\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { CountUp } from \"../../../components/CountUp/CountUp\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * StatBand — big proof numbers (\"600+ CONNECTORS · 10× FASTER SETUP …\").\n * Numeric values count up on mount; strings render as-is.\n * ------------------------------------------------------------------------- */\n\nexport interface StatBandItem {\n id: string;\n /** Number → animated count-up; string → rendered verbatim (\"10×\"). */\n value: number | string;\n label: ReactNode;\n prefix?: string;\n suffix?: string;\n}\n\nexport interface StatBandProps extends ComponentPropsWithoutRef<\"div\"> {\n items: StatBandItem[];\n /** \"row\" = horizontal band; \"column\" = stacked rail (default). */\n orientation?: \"column\" | \"row\";\n}\n\nexport function StatBand({ items, orientation = \"column\", className, ...rest }: StatBandProps) {\n const reducedMotion = useReducedMotion();\n return (\n <div\n {...rest}\n className={cn(\"ods-mkt-statband\", `ods-mkt-statband--${orientation}`, className)}\n >\n {items.map((item) => (\n <div key={item.id} className=\"ods-mkt-statband__item\">\n <div className=\"ods-mkt-statband__value\">\n {typeof item.value === \"number\" ? (\n <CountUp\n value={item.value}\n duration={900}\n disableAnimation={Boolean(reducedMotion)}\n prefix={item.prefix}\n suffix={item.suffix}\n formatValue={(v) => Math.round(v).toLocaleString(\"en-US\")}\n />\n ) : (\n <>\n {item.prefix}\n {item.value}\n {item.suffix}\n </>\n )}\n </div>\n <div className=\"ods-mkt-statband__label\">{item.label}</div>\n </div>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { TestimonialCard } from \"../../../components/TestimonialCard/TestimonialCard\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * TestimonialStrip — customer-proof grid composing the DS TestimonialCard.\n * Pair with MarketingSection for the kicker/title band.\n * ------------------------------------------------------------------------- */\n\nexport interface TestimonialStripItem {\n id: string;\n quote: ReactNode;\n author: {\n name: string;\n role?: ReactNode;\n /** Avatar spec forwarded to the DS Avatar primitive. */\n avatar?: { src?: string; initials?: string; alt?: string };\n };\n rating?: number;\n /** Customer company logo (top-right of the card). */\n logo?: ReactNode;\n}\n\nexport interface TestimonialStripProps extends ComponentPropsWithoutRef<\"div\"> {\n items: TestimonialStripItem[];\n columns?: 2 | 3;\n}\n\nexport function TestimonialStrip({\n items,\n columns = 3,\n className,\n ...rest\n}: TestimonialStripProps) {\n return (\n <div\n {...rest}\n className={cn(\"ods-mkt-testimonials\", `ods-mkt-testimonials--${columns}`, className)}\n >\n {items.map((item) => (\n <TestimonialCard\n key={item.id}\n quote={item.quote}\n author={item.author}\n rating={item.rating}\n logo={item.logo}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport { AnimatePresence, motion, useReducedMotion } from \"framer-motion\";\nimport {\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { CountUp } from \"../../../components/CountUp/CountUp\";\nimport { cn } from \"../../../utils/cn\";\nimport { roleGlyph } from \"../../glyphs\";\nimport { ShowcaseScene } from \"./ShowcaseScene\";\nimport { ShowcaseSignup } from \"./ShowcaseSignup\";\nimport {\n buildActivity,\n detectConnectors,\n isValidEmail,\n resolvePlan,\n SETTLED_PHASES,\n scheduleFromPrompt,\n segmentPrompt,\n WORKFLOW_SHOWCASE_DEFAULT_CONNECTORS,\n WORKFLOW_SHOWCASE_DEFAULT_EXAMPLES,\n WORKFLOW_SHOWCASE_DEFAULT_METRICS,\n WORKFLOW_SHOWCASE_DEFAULT_TILES,\n WORKFLOW_SHOWCASE_SCHEDULES,\n WORKFLOW_SHOWCASE_TRIGGERS,\n type WorkflowShowcaseConnector,\n type WorkflowShowcaseExample,\n type WorkflowShowcaseMetric,\n type WorkflowShowcasePhase,\n type WorkflowShowcasePlan,\n type WorkflowShowcaseSignupValues,\n} from \"./showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * WorkflowShowcase — the marketing-site \"prompt → live pipeline → signup\"\n * funnel, as one self-driving composition.\n *\n * A visitor types (or taps an example), watches Octavia recognize connectors\n * live, builds the workflow on an isometric canvas with real-feeling\n * telemetry, and converts through an in-canvas workspace form — without ever\n * leaving the hero. All product copy (connector catalog, examples, metrics)\n * is prop-driven; the defaults are deliberately vendor-neutral.\n * ------------------------------------------------------------------------- */\n\nexport interface WorkflowShowcaseBuildDetail {\n prompt: string;\n connectors: string[];\n schedule: string;\n /** Trigger mode at build time: SCHEDULE / WEBHOOK / APP EVENT / MANUAL. */\n trigger: string;\n}\n\nexport interface WorkflowShowcaseProps\n extends Omit<ComponentPropsWithoutRef<\"section\">, \"onSubmit\"> {\n /** Connector catalog to recognize/pick from. Vendor-neutral by default. */\n connectors?: WorkflowShowcaseConnector[];\n /** \"TRY:\" example chips. */\n examples?: WorkflowShowcaseExample[];\n /** Right-rail metric cards. */\n metrics?: WorkflowShowcaseMetric[];\n /** Pre-filled prompt text. */\n defaultPrompt?: string;\n /**\n * Auto-rotate through the example prompts while the visitor hasn't\n * engaged (idle phase, not hovering/focusing/edited). Ignored when\n * `defaultPrompt` is set. Default true.\n */\n rotatePrompts?: boolean;\n /** Mono label at the right edge of the toolbar. */\n modelLabel?: string;\n /** Mono label in the canvas header. */\n canvasLabel?: string;\n /** Header of the live activity rail. */\n railLabel?: string;\n /** Labels for the 8 platform tiles in the scene. */\n platformTiles?: readonly string[];\n /** Icon on the core cube. */\n coreIcon?: ReactNode;\n /** Catalog-size figure used in coach copy, e.g. \"600+\". */\n catalogNote?: string;\n /** Team-size choices in the signup form. */\n teamSizes?: string[];\n /** Domain used for the workspace-slug preview in the welcome card. */\n workspaceDomain?: string;\n dashboardHref?: string;\n onboardingHref?: string;\n /** Accessible label for the prompt textarea. */\n promptAriaLabel?: string;\n /** Fires when a build kicks off (analytics hook). */\n onBuild?: (detail: WorkflowShowcaseBuildDetail) => void;\n /** Fires on every phase transition (analytics hook). */\n onPhaseChange?: (phase: WorkflowShowcasePhase) => void;\n /**\n * Real signup handler. Resolve → welcome card; throw → inline error and\n * back to the form. Omit to simulate provisioning (pure demo mode).\n */\n onSignup?: (values: WorkflowShowcaseSignupValues) => Promise<void> | void;\n}\n\ninterface SwapState {\n name: string;\n /** Exact text the visitor typed (may be an alias) — what gets replaced. */\n text: string;\n x: number;\n y: number;\n}\n\nconst EMPTY_PLAN: WorkflowShowcasePlan = { left: [], right: [], all: [], totalSteps: 1 };\n\nfunction ConnectorTile({ connector }: { connector: WorkflowShowcaseConnector }) {\n // Decorative app tile — hidden so button names stay clean for AT.\n // Consumers pass real brand icons via `icon`; the fallback is a role glyph.\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\"ods-showcase__apptile\", `ods-showcase__apptile--${connector.role}`)}\n >\n {connector.icon ?? roleGlyph(connector.role)}\n </span>\n );\n}\n\nexport function WorkflowShowcase({\n connectors = WORKFLOW_SHOWCASE_DEFAULT_CONNECTORS,\n examples = WORKFLOW_SHOWCASE_DEFAULT_EXAMPLES,\n metrics = WORKFLOW_SHOWCASE_DEFAULT_METRICS,\n defaultPrompt = \"\",\n rotatePrompts = true,\n modelLabel = \"octavia-core-1\",\n canvasLabel = \"workflow_canvas\",\n railLabel = \"OCTAVIA IS DOING\",\n platformTiles = WORKFLOW_SHOWCASE_DEFAULT_TILES,\n coreIcon,\n catalogNote = \"600+\",\n teamSizes = [\"1–10\", \"11–50\", \"51–200\", \"200+\"],\n workspaceDomain = \"octaviaflow.com\",\n dashboardHref,\n onboardingHref = \"#\",\n promptAriaLabel = \"Describe your pipeline\",\n onBuild,\n onPhaseChange,\n onSignup,\n className,\n ...rest\n}: WorkflowShowcaseProps) {\n const reducedMotion = useReducedMotion();\n // Prefill with the first example so the hero never opens on an empty box;\n // rotation cycles through the rest until the visitor engages.\n const rotationActive = rotatePrompts && !defaultPrompt && examples.length > 0;\n const [prompt, setPrompt] = useState(\n defaultPrompt || (rotationActive ? (examples[0]?.prompt ?? \"\") : \"\"),\n );\n const [engagedWithPrompt, setEngagedWithPrompt] = useState(false);\n const [promptHovered, setPromptHovered] = useState(false);\n const [promptFocused, setPromptFocused] = useState(false);\n const rotateIdx = useRef(0);\n const [selected, setSelected] = useState<string[]>([]);\n const [phase, setPhase] = useState<WorkflowShowcasePhase>(\"idle\");\n const [shown, setShown] = useState(0);\n const [status, setStatus] = useState(\"\");\n const [pickerOpen, setPickerOpen] = useState(false);\n const [schedIdx, setSchedIdx] = useState(0);\n const [swap, setSwap] = useState<SwapState | null>(null);\n const [signupError, setSignupError] = useState<string | null>(null);\n // Where Back returns to — signup can open from the done CTA or the core.\n const signupReturnPhase = useRef<WorkflowShowcasePhase>(\"done\");\n\n const cardRef = useRef<HTMLDivElement>(null);\n const timers = useRef<ReturnType<typeof setTimeout>[]>([]);\n const clearTimers = useCallback(() => {\n for (const t of timers.current) clearTimeout(t);\n timers.current = [];\n }, []);\n useEffect(() => clearTimers, [clearTimers]);\n // Compress the choreography (not the content) when the visitor prefers\n // reduced motion — they still see every step, just sooner.\n const tempo = reducedMotion ? 0.35 : 1;\n const at = useCallback(\n (ms: number, fn: () => void) => {\n timers.current.push(setTimeout(fn, ms * tempo));\n },\n [tempo],\n );\n\n const firstPhase = useRef(true);\n useEffect(() => {\n if (firstPhase.current) {\n firstPhase.current = false;\n return;\n }\n onPhaseChange?.(phase);\n }, [phase, onPhaseChange]);\n\n // Render-time mirror of `phase` so callbacks that reset + immediately\n // rebuild (example chips) never read a stale \"building\" and bail out.\n const phaseRef = useRef(phase);\n phaseRef.current = phase;\n\n const byName = useMemo(() => new Map(connectors.map((c) => [c.name, c])), [connectors]);\n const detected = useMemo(() => detectConnectors(prompt, connectors), [prompt, connectors]);\n const union = useMemo(() => [...new Set([...selected, ...detected])], [selected, detected]);\n const settled = SETTLED_PHASES.includes(phase);\n const engaged = phase !== \"idle\";\n const buildingNow = phase === \"analyzing\" || phase === \"building\";\n\n /** Partition currently-selected connectors into scene sides (no backfill). */\n const plan = useMemo<WorkflowShowcasePlan>(() => {\n if (!selected.length) return EMPTY_PLAN;\n return resolvePlan(selected, [], connectors);\n }, [selected, connectors]);\n\n /* ── schedule ──────────────────────────────────────────────────────── */\n const schedules = WORKFLOW_SHOWCASE_SCHEDULES;\n const inferredSchedule = scheduleFromPrompt(prompt);\n const manualSchedule = schedules[schedIdx];\n const scheduleShown = inferredSchedule ?? (manualSchedule === \"AUTO\" ? \"HOURLY\" : manualSchedule);\n\n /* ── trigger mode (schedule / webhook / app event / manual) ────────── */\n const triggers = WORKFLOW_SHOWCASE_TRIGGERS;\n const [triggerIdx, setTriggerIdx] = useState(0);\n const manualTrigger = triggers[triggerIdx];\n // What the coach line shows as the cadence: the schedule when the trigger\n // is time-based, otherwise the trigger mode itself.\n const cadenceShown = manualTrigger === \"SCHEDULE\" ? scheduleShown : manualTrigger;\n\n /* ── idle prompt rotation ──────────────────────────────────────────── */\n // Rotate example prompts while nobody is engaging; stop the instant the\n // visitor hovers, focuses, or edits — the box is theirs from then on.\n useEffect(() => {\n if (\n !rotationActive ||\n engagedWithPrompt ||\n promptHovered ||\n promptFocused ||\n phase !== \"idle\"\n ) {\n return;\n }\n const timer = setInterval(() => {\n rotateIdx.current = (rotateIdx.current + 1) % examples.length;\n setPrompt(examples[rotateIdx.current].prompt);\n }, 4200);\n return () => clearInterval(timer);\n }, [rotationActive, engagedWithPrompt, promptHovered, promptFocused, phase, examples]);\n\n /* ── build choreography ────────────────────────────────────────────── */\n const startBuild = useCallback(\n (text: string, baseSelected: string[]) => {\n if (phaseRef.current === \"analyzing\" || phaseRef.current === \"building\") return;\n phaseRef.current = \"analyzing\";\n clearTimers();\n const resolved = resolvePlan(baseSelected, detectConnectors(text, connectors), connectors);\n const target = resolved.all.map((c) => c.name);\n const additions = target.filter((n) => !baseSelected.includes(n));\n setPrompt(text);\n setSelected(baseSelected);\n setPhase(\"analyzing\");\n setShown(0);\n setStatus(\"analyzing request · matching connectors\");\n setPickerOpen(false);\n setSwap(null);\n onBuild?.({\n prompt: text,\n connectors: target,\n schedule: scheduleShown,\n trigger: manualTrigger,\n });\n additions.forEach((name, i) => {\n at(250 + i * 200, () => setSelected((s) => (s.includes(name) ? s : [...s, name])));\n });\n const t0 = 250 + additions.length * 200;\n at(t0 + 750, () => setStatus(\"wiring transforms · adding error handling\"));\n at(t0 + 1500, () => {\n setPhase(\"building\");\n setStatus(\"assembling workflow · optimizing plan\");\n });\n for (let i = 0; i < resolved.totalSteps; i++) {\n at(t0 + 1600 + i * 380, () => setShown(i + 1));\n }\n at(t0 + 1600 + resolved.totalSteps * 380 + 350, () => setPhase(\"done\"));\n },\n [clearTimers, connectors, onBuild, scheduleShown, manualTrigger, at],\n );\n\n const resetToIdle = useCallback(() => {\n clearTimers();\n phaseRef.current = \"idle\";\n setPhase(\"idle\");\n setShown(0);\n setStatus(\"\");\n setSwap(null);\n }, [clearTimers]);\n\n const toggleConnector = (name: string) => {\n resetToIdle();\n setSelected((s) => (s.includes(name) ? s.filter((n) => n !== name) : [...s, name]));\n };\n\n const runExample = (example: WorkflowShowcaseExample) => {\n resetToIdle();\n startBuild(example.prompt, []);\n };\n\n /* ── swap menu ─────────────────────────────────────────────────────── */\n const openSwap = (name: string, text: string, anchor: HTMLElement) => {\n const card = cardRef.current;\n if (!card) return;\n const r = anchor.getBoundingClientRect();\n const cr = card.getBoundingClientRect();\n const x = Math.max(8, Math.min(r.left - cr.left, cr.width - 264));\n setSwap({ name, text, x, y: r.bottom - cr.top + 6 });\n };\n const doSwap = (current: SwapState, next: string) => {\n resetToIdle();\n const re = new RegExp(current.text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"), \"i\");\n setPrompt((p) => p.replace(re, next));\n setSelected((s) => s.map((n) => (n === current.name ? next : n)));\n };\n const swapRole = swap ? byName.get(swap.name)?.role : undefined;\n const swapItems = swapRole ? connectors.filter((c) => c.role === swapRole) : [];\n\n /* ── coach line ────────────────────────────────────────────────────── */\n const roles = union.map((n) => byName.get(n)?.role);\n const hasSource = roles.includes(\"source\");\n const hasSink = roles.some((r) => r && r !== \"source\");\n const hasNotify = roles.includes(\"notify\");\n let coachLine: string;\n let coachAdds: WorkflowShowcaseConnector[] = [];\n const notIn = (c: WorkflowShowcaseConnector) => !union.includes(c.name);\n if (!union.length) {\n coachLine = prompt\n ? \"LISTENING… CONNECTOR NAMES LIGHT UP AS OCTAVIA RECOGNIZES THEM\"\n : `OCTAVIA MATCHES CONNECTORS LIVE AS YOU TYPE — OR PICK FROM ${catalogNote}`;\n } else if (union.length >= connectors.length) {\n coachLine =\n \"FULL STACK — OCTAVIA SPLITS THIS INTO PARALLEL INGEST → AI TRANSFORM → SEQUENCED ACTIONS\";\n } else if (union.length >= 6) {\n coachLine = `BIG STACK — ${union.length} CONNECTORS FAN OUT ACROSS PARALLEL BRANCHES · COST OPTIMIZER ON`;\n } else if (hasSource && !hasSink) {\n coachLine = \"SOURCES WIRED — WHERE SHOULD THE DATA LAND?\";\n coachAdds = connectors.filter((c) => c.role === \"destination\" && notIn(c)).slice(0, 2);\n } else if (!hasSource && hasSink) {\n coachLine = \"DESTINATION SET — WHAT SHOULD OCTAVIA PULL FROM?\";\n coachAdds = connectors.filter((c) => c.role === \"source\" && notIn(c)).slice(0, 2);\n } else if (!hasNotify) {\n coachLine = `✓ ${union.length} CONNECTORS · ${cadenceShown} · TIP: ALERT YOUR TEAM WHEN RUNS FINISH`;\n coachAdds = connectors.filter((c) => c.role === \"notify\" && notIn(c)).slice(0, 1);\n } else {\n coachLine = `✓ ${union.length} CONNECTORS · ${cadenceShown} · CLICK A HIGHLIGHTED NAME TO SWAP IT`;\n }\n const coachTone = union.length ? (hasSource && hasSink ? \"success\" : \"accent\") : \"muted\";\n\n /* ── canvas derived state ──────────────────────────────────────────── */\n const badge = settled\n ? { label: \"LIVE\", tone: \"success\" as const, pulse: true }\n : buildingNow\n ? {\n label: phase === \"analyzing\" ? \"ANALYZING\" : \"BUILDING\",\n tone: \"accent\" as const,\n pulse: true,\n }\n : { label: \"IDLE\", tone: \"muted\" as const, pulse: false };\n const canvasSub = settled ? \"production\" : buildingNow ? \"generating\" : \"draft\";\n const sceneCaption = settled\n ? \"PIPELINE LIVE · SQUARES = ROWS IN FLIGHT\"\n : phase === \"building\"\n ? \"ASSEMBLING WORKFLOW…\"\n : phase === \"analyzing\"\n ? \"ANALYZING REQUEST…\"\n : \"CLICK THE CORE · CONNECTORS LAND AS CUBES\";\n\n const activity = buildActivity({ phase, shown, plan, selected, status });\n const costMetric = metrics.find((m) => m.tone === \"success\");\n const costLabel = costMetric\n ? `${costMetric.prefix ?? \"\"}${costMetric.value}${costMetric.suffix ?? \"\"}`\n : \"\";\n const railFoot =\n phase === \"idle\"\n ? `${catalogNote} CONNECTORS · FREE IN PRIVATE BETA`\n : settled\n ? `COST PLAN SELECTED · ${costLabel} SAVED`\n : \"COST OPTIMIZER RUNNING…\";\n\n const nLeft = plan.left.length;\n const sceneLeft = plan.left.map((c, i) => ({\n connector: c,\n active: engaged && (settled || shown > i),\n }));\n const sceneRight = plan.right.map((c, j) => ({\n connector: c,\n active: engaged && (settled || shown > nLeft + 1 + j),\n }));\n\n const stepCount = (selected.length || 3) + 1;\n const doneNote = costMetric\n ? `${stepCount}-step workflow generated · cost optimizer: ${costMetric.value}% below baseline`\n : `${stepCount}-step workflow generated`;\n\n /* ── signup ────────────────────────────────────────────────────────── */\n const submitSignup = (values: WorkflowShowcaseSignupValues) => {\n if (!values.name.trim() || !isValidEmail(values.email)) {\n setSignupError(\"Please enter your name and a valid work email.\");\n return;\n }\n setSignupError(null);\n setPhase(\"creating\");\n const finish = () => setPhase(\"welcome\");\n const fail = () => {\n setSignupError(\"Something went wrong — please try again.\");\n setPhase(\"signup\");\n };\n if (!onSignup) {\n at(1600, finish);\n return;\n }\n try {\n const result = onSignup(values);\n if (result && typeof (result as Promise<void>).then === \"function\") {\n (result as Promise<void>).then(finish, fail);\n } else {\n finish();\n }\n } catch {\n fail();\n }\n };\n\n /* ── prompt rendering ──────────────────────────────────────────────── */\n const segments = segmentPrompt(prompt, connectors);\n const onPromptKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n startBuild(prompt, selected);\n }\n };\n\n const rise = (delay = 0) =>\n reducedMotion\n ? {}\n : {\n initial: { opacity: 0, y: 10 },\n animate: { opacity: 1, y: 0 },\n transition: { duration: 0.4, delay, ease: [0.2, 0.7, 0.2, 1] as const },\n };\n\n return (\n <section {...rest} className={cn(\"ods-showcase\", className)}>\n {/* ── prompt card ─────────────────────────────────────────────── */}\n <div\n ref={cardRef}\n className=\"ods-showcase__card\"\n onMouseEnter={() => setPromptHovered(true)}\n onMouseLeave={() => setPromptHovered(false)}\n >\n <div className=\"ods-showcase__prompt\">\n <textarea\n className=\"ods-showcase__prompt-input\"\n value={prompt}\n onChange={(e) => {\n setEngagedWithPrompt(true);\n setPrompt(e.target.value);\n }}\n onKeyDown={onPromptKeyDown}\n onFocus={() => setPromptFocused(true)}\n onBlur={() => setPromptFocused(false)}\n aria-label={promptAriaLabel}\n spellCheck={false}\n rows={2}\n />\n <div className=\"ods-showcase__prompt-render\" aria-hidden=\"true\">\n {prompt ? (\n segments.map((seg, i) =>\n seg.connector ? (\n <button\n // biome-ignore lint/suspicious/noArrayIndexKey: segments are positional by nature\n key={i}\n type=\"button\"\n tabIndex={-1}\n className={cn(\n \"ods-showcase__token\",\n `ods-showcase__token--${seg.connector.role}`,\n )}\n onClick={(e) => {\n const name = seg.connector?.name;\n if (name) openSwap(name, seg.text, e.currentTarget);\n }}\n >\n {/* Icon hides while editing so the overlay stays exactly\n caret-aligned with the transparent textarea text. */}\n {!promptFocused && <ConnectorTile connector={seg.connector} />}\n {seg.text}\n </button>\n ) : (\n // biome-ignore lint/suspicious/noArrayIndexKey: segments are positional by nature\n <span key={i}>{seg.text}</span>\n ),\n )\n ) : (\n <>\n <span className=\"ods-showcase__placeholder\">Describe your pipeline — e.g. </span>\n <span className=\"ods-showcase__placeholder ods-showcase__placeholder--faint\">\n \"Sync Storefront orders to Warehouse hourly, alert sales in Team Chat\"\n </span>\n </>\n )}\n </div>\n </div>\n\n <div className=\"ods-showcase__coach\">\n <span\n className={cn(\"ods-showcase__coach-line\", `ods-showcase__coach-line--${coachTone}`)}\n >\n {coachLine}\n </span>\n {coachAdds.map((c) => (\n <button\n key={c.name}\n type=\"button\"\n className=\"ods-showcase__coach-add\"\n onClick={() => toggleConnector(c.name)}\n >\n <ConnectorTile connector={c} />+ {c.name}\n </button>\n ))}\n </div>\n\n <AnimatePresence initial={false}>\n {pickerOpen && (\n <motion.div\n className=\"ods-showcase__picker\"\n initial={reducedMotion ? false : { opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: \"auto\" }}\n exit={reducedMotion ? { opacity: 0 } : { opacity: 0, height: 0 }}\n transition={{ duration: 0.22, ease: [0.2, 0.7, 0.2, 1] }}\n >\n <div className=\"ods-showcase__picker-row\">\n <span className=\"ods-showcase__microcopy\">CONNECTORS</span>\n {connectors.map((c) => (\n <button\n key={c.name}\n type=\"button\"\n className={cn(\n \"ods-showcase__pick\",\n selected.includes(c.name) && \"ods-showcase__pick--on\",\n )}\n aria-pressed={selected.includes(c.name)}\n onClick={() => toggleConnector(c.name)}\n >\n <ConnectorTile connector={c} />\n {c.name}\n </button>\n ))}\n <span className=\"ods-showcase__microcopy ods-showcase__microcopy--faint\">\n + {catalogNote} IN THE APP\n </span>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n <div className=\"ods-showcase__toolbar\">\n <button\n type=\"button\"\n className={cn(\n \"ods-showcase__tool\",\n (pickerOpen || selected.length > 0) && \"ods-showcase__tool--on\",\n )}\n aria-expanded={pickerOpen}\n onClick={() => setPickerOpen((o) => !o)}\n >\n + Connectors{selected.length ? ` · ${selected.length}` : \"\"}\n </button>\n <button\n type=\"button\"\n className={cn(\n \"ods-showcase__tool\",\n manualTrigger !== \"SCHEDULE\" && \"ods-showcase__tool--on\",\n )}\n onClick={() => setTriggerIdx((i) => (i + 1) % triggers.length)}\n >\n ⚑ {manualTrigger}\n </button>\n {manualTrigger === \"SCHEDULE\" && (\n <button\n type=\"button\"\n className=\"ods-showcase__tool\"\n onClick={() => setSchedIdx((i) => (i + 1) % schedules.length)}\n >\n ◷ {manualSchedule}\n </button>\n )}\n <span className=\"ods-showcase__model\">{modelLabel}</span>\n <Button\n variant=\"primary\"\n onClick={() => startBuild(prompt, selected)}\n disabled={buildingNow}\n >\n {buildingNow ? \"Building…\" : \"Build workflow →\"}\n </Button>\n </div>\n\n {swap && swapRole && (\n <>\n <button\n type=\"button\"\n className=\"ods-showcase__swap-backdrop\"\n aria-label=\"Close swap menu\"\n onClick={() => setSwap(null)}\n />\n <div\n className=\"ods-showcase__swap\"\n role=\"menu\"\n style={{ left: swap.x, top: swap.y }}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") setSwap(null);\n }}\n >\n <div className=\"ods-showcase__swap-head\">\n SWAP {swapRole.toUpperCase()} — {swap.name.toUpperCase()}\n </div>\n {swapItems.map((c) => (\n <button\n key={c.name}\n type=\"button\"\n role=\"menuitem\"\n className=\"ods-showcase__swap-item\"\n onClick={() => doSwap(swap, c.name)}\n >\n <ConnectorTile connector={c} />\n <span className=\"ods-showcase__swap-name\">{c.name}</span>\n {c.name === swap.name && (\n <span className=\"ods-showcase__swap-mark\">● CURRENT</span>\n )}\n </button>\n ))}\n <div className=\"ods-showcase__swap-foot\">{catalogNote} CONNECTORS IN THE APP</div>\n </div>\n </>\n )}\n </div>\n\n {/* ── example chips ───────────────────────────────────────────── */}\n <div className=\"ods-showcase__examples\">\n <span className=\"ods-showcase__microcopy\">TRY:</span>\n {examples.map((ex) => (\n <button\n key={ex.id}\n type=\"button\"\n className=\"ods-showcase__try\"\n onClick={() => runExample(ex)}\n >\n {ex.label}\n </button>\n ))}\n </div>\n\n {/* ── canvas ──────────────────────────────────────────────────── */}\n <div className=\"ods-showcase__canvas\">\n <div className=\"ods-showcase__canvas-head\">\n <span className=\"ods-showcase__microcopy\">\n {canvasLabel} · {canvasSub}\n </span>\n <span className={cn(\"ods-showcase__badge\", `ods-showcase__badge--${badge.tone}`)}>\n <span className={cn(\"ods-showcase__dot\", badge.pulse && \"ods-showcase__dot--pulse\")} />\n {badge.label}\n </span>\n </div>\n <div className=\"ods-showcase__stage\">\n <div className=\"ods-showcase__rail\">\n <div className=\"ods-showcase__rail-head\">\n <span className=\"ods-showcase__microcopy\">{railLabel}</span>\n <span\n className={cn(\"ods-showcase__dot\", badge.pulse && \"ods-showcase__dot--pulse\")}\n />\n </div>\n <div className=\"ods-showcase__rail-body\">\n <AnimatePresence initial={false}>\n {activity.map((line) => (\n <motion.div\n key={line.id}\n className={cn(\"ods-showcase__act\", `ods-showcase__act--${line.tone}`)}\n initial={reducedMotion ? false : { opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.25 }}\n >\n {line.text}\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n <div\n className={cn(\n \"ods-showcase__rail-foot\",\n settled && \"ods-showcase__rail-foot--done\",\n buildingNow && \"ods-showcase__rail-foot--active\",\n )}\n >\n {railFoot}\n </div>\n </div>\n\n <ShowcaseScene\n left={sceneLeft}\n right={sceneRight}\n engaged={engaged}\n tiles={platformTiles}\n coreIcon={coreIcon}\n caption={sceneCaption}\n onCoreClick={() => {\n // Second door into signup: clicking the core opens the same\n // workspace form as the CTA. Blocked mid-build so pending\n // phase timers can't stomp the overlay.\n if (\n buildingNow ||\n phase === \"signup\" ||\n phase === \"creating\" ||\n phase === \"welcome\"\n ) {\n return;\n }\n signupReturnPhase.current = phase;\n setSignupError(null);\n setPhase(\"signup\");\n }}\n />\n\n <div className=\"ods-showcase__metrics\">\n {metrics.map((m, idx) => {\n const revealed = settled || (phase === \"building\" && shown > idx);\n const interim = m.buildingValue != null && !settled && revealed;\n return (\n <div key={m.id} className=\"ods-showcase__metric\">\n <div\n className={cn(\n \"ods-showcase__metric-value\",\n !revealed && \"ods-showcase__metric-value--empty\",\n m.tone === \"success\" && settled && \"ods-showcase__metric-value--success\",\n )}\n >\n {settled ? (\n <CountUp\n value={m.value}\n from={m.buildingValue ?? 0}\n decimals={m.decimals ?? 0}\n duration={reducedMotion ? 0 : 900}\n disableAnimation={Boolean(reducedMotion)}\n prefix={m.prefix}\n formatValue={\n m.decimals ? undefined : (v) => Math.round(v).toLocaleString(\"en-US\")\n }\n />\n ) : interim ? (\n `${m.prefix ?? \"\"}${m.buildingValue}`\n ) : (\n \"—\"\n )}\n {revealed && m.suffix ? m.suffix : null}\n {revealed && m.unit ? (\n <span className=\"ods-showcase__metric-unit\"> {m.unit}</span>\n ) : null}\n </div>\n <div className=\"ods-showcase__microcopy\">{m.label}</div>\n </div>\n );\n })}\n </div>\n\n <ShowcaseSignup\n phase={phase}\n stepCount={stepCount}\n workspaceDomain={workspaceDomain}\n teamSizes={teamSizes}\n error={signupError}\n onSubmit={submitSignup}\n onBack={() => {\n setSignupError(null);\n setPhase(signupReturnPhase.current);\n }}\n dashboardHref={dashboardHref}\n onboardingHref={onboardingHref}\n />\n </div>\n </div>\n\n {/* ── status / CTA band ───────────────────────────────────────── */}\n <div className=\"ods-showcase__outro\" aria-live=\"polite\">\n {buildingNow && (\n <div className=\"ods-showcase__building\">\n <span className=\"ods-showcase__spin\" aria-hidden=\"true\">\n ⟳\n </span>{\" \"}\n {status}\n </div>\n )}\n {phase === \"done\" && (\n <div className=\"ods-showcase__done\">\n <motion.div className=\"ods-showcase__done-note\" {...rise(0)}>\n ✓ {doneNote}\n </motion.div>\n <motion.div className=\"ods-showcase__cta\" {...rise(0.2)}>\n <span className=\"ods-showcase__cta-copy\">\n Deploy it on your own data — takes 2 minutes.\n </span>\n <Button\n variant=\"primary\"\n onClick={() => {\n signupReturnPhase.current = \"done\";\n setSignupError(null);\n setPhase(\"signup\");\n }}\n >\n Create free account →\n </Button>\n <a className=\"ods-showcase__text-link\" href={onboardingHref}>\n Book onboarding →\n </a>\n </motion.div>\n </div>\n )}\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport { type CSSProperties, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { roleGlyph } from \"../../glyphs\";\nimport type { WorkflowShowcaseConnector } from \"./showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * ShowcaseScene — the isometric \"workflow assembling itself\" illustration.\n *\n * Pure presentation: an isometric platform of capability tiles with the\n * Octavia core at the center, connector cubes landing on each side, and\n * particles tracing the guide paths (\"squares = rows in flight\"). The whole\n * scene is decorative — it's aria-hidden and every fact it communicates is\n * also present in the activity rail + metrics, which are real DOM text.\n * ------------------------------------------------------------------------- */\n\nexport interface ShowcaseSceneNode {\n connector: WorkflowShowcaseConnector;\n /** Whether this node's step has completed (wires + particles light up). */\n active: boolean;\n}\n\nexport interface ShowcaseSceneProps {\n left: ShowcaseSceneNode[];\n right: ShowcaseSceneNode[];\n /** Any build/run motion is happening (analyzing → welcome). */\n engaged: boolean;\n /** Platform tile labels (8). */\n tiles: readonly string[];\n /** Center-of-platform icon — any node: glyph, image, 3D asset embed. */\n coreIcon?: ReactNode;\n caption: string;\n /** Fires alongside the particle pulse when the core is clicked. */\n onCoreClick?: () => void;\n}\n\n/** Vertical slot centers for n cubes on one side (matches guide geometry). */\nfunction slots(n: number): number[] {\n return Array.from({ length: n }, (_, i) => 208 + (i - (n - 1) / 2) * 80);\n}\n\n// Entry/exit lanes across the platform edge — the tile-row centers and the\n// gaps between tiles — so each connector's line routes through its own\n// channel instead of every wire converging on one point.\nconst LANES = [228, 190, 266, 152, 304];\nconst laneFor = (index: number) => LANES[index % LANES.length];\n\nconst leftGuide = (cy: number, lane: number) => `M74 ${cy} H150 V${lane} H193`;\nconst rightGuide = (cy: number, lane: number) => `M263 ${lane} H340 V${cy} H388`;\n\ninterface ParticleSpec {\n key: string;\n path: string;\n size: number;\n duration: string;\n delay: string;\n variant: \"lead\" | \"echo\" | \"spark\";\n}\n\nfunction particlesFor(\n side: \"l\" | \"r\",\n index: number,\n path: string,\n active: boolean,\n fast: boolean,\n): ParticleSpec[] {\n const base = index * 0.4 + (side === \"r\" ? 0.5 : 0);\n const duration = fast ? (active ? \"1.1s\" : \"2.6s\") : active ? \"2.2s\" : \"4.8s\";\n const size = active ? 8 : 6;\n const out: ParticleSpec[] = [\n { key: `${side}${index}-a`, path, size, duration, delay: `${base}s`, variant: \"lead\" },\n {\n key: `${side}${index}-b`,\n path,\n size,\n duration,\n delay: `${base + (active ? 1.1 : 2.4)}s`,\n variant: \"echo\",\n },\n ];\n if (active) {\n out.push({\n key: `${side}${index}-c`,\n path,\n size: 6,\n duration,\n delay: `${base + 0.55}s`,\n variant: \"spark\",\n });\n }\n return out;\n}\n\nfunction DefaultCoreGlyph() {\n return (\n <svg viewBox=\"0 0 24 24\" width=\"30\" height=\"30\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <path\n d=\"M7 12h7M11.5 8.5 15 12l-3.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction CubeFace({ connector }: { connector: WorkflowShowcaseConnector }) {\n return (\n <span\n className={cn(\n \"ods-showcase__apptile\",\n \"ods-showcase__apptile--lg\",\n `ods-showcase__apptile--${connector.role}`,\n )}\n >\n {connector.icon ?? roleGlyph(connector.role, 18)}\n </span>\n );\n}\n\nexport function ShowcaseScene({\n left,\n right,\n engaged,\n tiles,\n coreIcon,\n caption,\n onCoreClick,\n}: ShowcaseSceneProps) {\n // Clicking the core briefly speeds particles up — a tiny reward that makes\n // the scene feel alive without changing any state that matters.\n const [pulse, setPulse] = useState(false);\n const pulseTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(\n () => () => {\n if (pulseTimer.current) clearTimeout(pulseTimer.current);\n },\n [],\n );\n const firePulse = () => {\n if (pulse) return;\n setPulse(true);\n pulseTimer.current = setTimeout(() => setPulse(false), 1500);\n };\n\n const leftYs = slots(left.length);\n const rightYs = slots(right.length);\n\n const guides: { d: string; on: boolean; delay: string }[] = [];\n const particles: ParticleSpec[] = [];\n\n // Continuous routing: each source line enters the platform, takes a lane,\n // skirts AROUND the core cuboid (bypass channel north or south of it, the\n // core spans x 193–263 / y 193–263), and continues out to its paired\n // destination — one unbroken journey across the board. Sources without a\n // destination exit down through the south pin edge instead.\n const bypassFor = (index: number) => (index % 2 === 0 ? 188 : 268);\n left.forEach((node, i) => {\n const on = engaged && node.active;\n const laneIn = laneFor(i);\n const bypass = bypassFor(i);\n let d: string;\n if (right.length) {\n const pairIdx = i % right.length;\n const laneOut = laneFor(i + 1);\n d = `M74 ${leftYs[i]} H150 V${laneIn} H186 V${bypass} H270 V${laneOut} H340 V${rightYs[pairIdx]} H388`;\n } else {\n d = `M74 ${leftYs[i]} H150 V${laneIn} H186 V${bypass} H${210 + (i % 3) * 40} V372`;\n }\n guides.push({ d, on, delay: `${i * 0.2}s` });\n particles.push(...particlesFor(\"l\", i, d, on, pulse));\n });\n // Destinations beyond the paired sources still get their own feed line.\n right.forEach((node, j) => {\n if (left.length > 0 && j < left.length) return; // already fed by a crossing\n const d = rightGuide(rightYs[j], laneFor(j + 1));\n const on = engaged && node.active;\n guides.push({ d, on, delay: `${j * 0.2 + 0.3}s` });\n particles.push(...particlesFor(\"r\", j, d, on, pulse));\n });\n if (!left.length) guides.push({ d: leftGuide(208, 228), on: false, delay: \"0s\" });\n if (!right.length) guides.push({ d: rightGuide(208, 228), on: false, delay: \"0s\" });\n\n // CPU-style pin traces on all four platform edges, each ending in a small\n // pad square (staggered accent ticks per edge).\n const pins: { d: string; accent: boolean }[] = [];\n const pads: { x: number; y: number; accent: boolean }[] = [];\n for (let x = 118; x <= 338; x += 20) {\n const south = (x / 20) % 4 === 0;\n const north = (x / 20) % 4 === 2;\n pins.push({ d: `M${x} 346 L${x} 366`, accent: south });\n pads.push({ x, y: 369, accent: south });\n pins.push({ d: `M${x} 110 L${x} 90`, accent: north });\n pads.push({ x, y: 87, accent: north });\n }\n for (let y = 118; y <= 338; y += 20) {\n const east = (y / 20) % 4 === 1;\n const west = (y / 20) % 4 === 3;\n pins.push({ d: `M346 ${y} L366 ${y}`, accent: east });\n pads.push({ x: 369, y, accent: east });\n pins.push({ d: `M110 ${y} L90 ${y}`, accent: west });\n pads.push({ x: 87, y, accent: west });\n }\n\n const tilePositions = [\n { left: 8, top: 8 },\n { left: 83, top: 8 },\n { left: 158, top: 8 },\n { left: 8, top: 83 },\n { left: 158, top: 83 },\n { left: 8, top: 158 },\n { left: 83, top: 158 },\n { left: 158, top: 158 },\n ];\n\n return (\n <div className=\"ods-showcase__scene\" aria-hidden=\"true\">\n <div className=\"ods-showcase__scene-stage\">\n <svg className=\"ods-showcase__wires\" width=\"460\" height=\"460\" aria-hidden=\"true\">\n {pins.map((pin) => (\n <path\n key={pin.d}\n d={pin.d}\n className={cn(\"ods-showcase__pin\", pin.accent && \"ods-showcase__pin--accent\")}\n />\n ))}\n {pads.map((pad) => (\n <rect\n key={`${pad.x}-${pad.y}`}\n x={pad.x - 2}\n y={pad.y - 2}\n width={4}\n height={4}\n className={cn(\"ods-showcase__pin-pad\", pad.accent && \"ods-showcase__pin-pad--accent\")}\n />\n ))}\n {guides.map((guide) => (\n <g key={guide.d}>\n <path d={guide.d} className=\"ods-showcase__guide\" />\n <path\n d={guide.d}\n className={cn(\n \"ods-showcase__guide-trace\",\n guide.on && \"ods-showcase__guide-trace--on\",\n )}\n style={{ animationDelay: guide.delay }}\n />\n </g>\n ))}\n </svg>\n\n {particles.map((p) => (\n <span\n key={p.key}\n className={cn(\"ods-showcase__particle\", `ods-showcase__particle--${p.variant}`)}\n style={\n {\n width: p.size,\n height: p.size,\n offsetPath: `path('${p.path}')`,\n animationDuration: p.duration,\n animationDelay: p.delay,\n } as CSSProperties\n }\n />\n ))}\n\n <div className=\"ods-showcase__platform\">\n <span className=\"ods-showcase__platform-south\" />\n <span className=\"ods-showcase__platform-east\" />\n <span className=\"ods-showcase__platform-top\" />\n {/* Capability tiles — flat by default; hovering lifts one into a\n complete mini glass cuboid (face rises, four walls fade in). */}\n {tiles.slice(0, 8).map((label, i) => (\n <span\n key={label}\n className=\"ods-showcase__tile\"\n style={{ left: tilePositions[i].left, top: tilePositions[i].top }}\n >\n <span className=\"ods-showcase__tile-flip\">\n <span className=\"ods-showcase__tile-wall ods-showcase__tile-wall--south\" />\n <span className=\"ods-showcase__tile-wall ods-showcase__tile-wall--east\" />\n </span>\n <span className=\"ods-showcase__tile-wall ods-showcase__tile-wall--south\" />\n <span className=\"ods-showcase__tile-wall ods-showcase__tile-wall--east\" />\n <span className=\"ods-showcase__tile-face\">{label}</span>\n </span>\n ))}\n {pulse && <span className=\"ods-showcase__core-ring\" />}\n <button\n type=\"button\"\n tabIndex={-1}\n className=\"ods-showcase__core\"\n onClick={() => {\n firePulse();\n onCoreClick?.();\n }}\n >\n {/* Glass cuboid: translucent walls so the volume reads as a 3D\n box you can see through; the lid stays solid. The north/west\n walls REUSE the proven south/east transforms inside a 180°-\n rotated wrapper — connection to the lid is guaranteed by\n construction instead of fresh rotation math. */}\n <span className=\"ods-showcase__core-flip\">\n <span className=\"ods-showcase__core-wall ods-showcase__core-wall--south ods-showcase__core-wall--back\" />\n <span className=\"ods-showcase__core-wall ods-showcase__core-wall--east ods-showcase__core-wall--back\" />\n </span>\n <span className=\"ods-showcase__core-wall ods-showcase__core-wall--south\" />\n <span className=\"ods-showcase__core-wall ods-showcase__core-wall--east\" />\n <span className=\"ods-showcase__core-top\">{coreIcon ?? <DefaultCoreGlyph />}</span>\n </button>\n </div>\n\n <span className=\"ods-showcase__floater ods-showcase__floater--a\" />\n <span className=\"ods-showcase__floater ods-showcase__floater--b\" />\n <span className=\"ods-showcase__floater ods-showcase__floater--c\" />\n\n {!left.length && (\n <span className=\"ods-showcase__ghost\" style={{ left: 8, top: 178 }}>\n +\n </span>\n )}\n {!right.length && (\n <span className=\"ods-showcase__ghost\" style={{ left: 392, top: 178 }}>\n +\n </span>\n )}\n\n {/* Each cube sits in a STATIC preserve-3d slot with the animated\n element nested inside — the exact layering the core uses\n (platform → animated core → faces). Animating the outermost\n positioned element directly under the stage is what broke the\n cubes' 3D context; don't collapse these two layers. */}\n {left.map((node, i) => (\n <span\n key={node.connector.name}\n className=\"ods-showcase__cube-slot\"\n style={{ left: 8, top: leftYs[i] - 30 }}\n >\n <span\n className={cn(\n \"ods-showcase__cube\",\n node.active && \"ods-showcase__cube--active\",\n i % 2 ? \"ods-showcase__cube--float-b\" : \"ods-showcase__cube--float-a\",\n )}\n style={{ animationDelay: `${i * 0.15}s` }}\n >\n <span className=\"ods-showcase__cube-flip\">\n <span className=\"ods-showcase__cube-south ods-showcase__cube-wall--back\" />\n <span className=\"ods-showcase__cube-east ods-showcase__cube-wall--back\" />\n </span>\n <span className=\"ods-showcase__cube-south\" />\n <span className=\"ods-showcase__cube-east\" />\n <span className=\"ods-showcase__cube-top\">\n <CubeFace connector={node.connector} />\n </span>\n </span>\n </span>\n ))}\n {right.map((node, j) => (\n <span\n key={node.connector.name}\n className=\"ods-showcase__cube-slot\"\n style={{ left: 392, top: rightYs[j] - 30 }}\n >\n <span\n className={cn(\n \"ods-showcase__cube\",\n node.active && \"ods-showcase__cube--active\",\n j % 2 ? \"ods-showcase__cube--float-a\" : \"ods-showcase__cube--float-b\",\n )}\n style={{ animationDelay: `${j * 0.15}s` }}\n >\n <span className=\"ods-showcase__cube-flip\">\n <span className=\"ods-showcase__cube-south ods-showcase__cube-wall--back\" />\n <span className=\"ods-showcase__cube-east ods-showcase__cube-wall--back\" />\n </span>\n <span className=\"ods-showcase__cube-south\" />\n <span className=\"ods-showcase__cube-east\" />\n <span className=\"ods-showcase__cube-top\">\n <CubeFace connector={node.connector} />\n </span>\n </span>\n </span>\n ))}\n </div>\n <span className=\"ods-showcase__scene-caption\">{caption}</span>\n </div>\n );\n}\n","\"use client\";\n\nimport { AnimatePresence, motion, useReducedMotion } from \"framer-motion\";\nimport { type FormEvent, useId, useState } from \"react\";\nimport { FocusScope } from \"react-aria\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { Input } from \"../../../components/Input/Input\";\nimport { Select } from \"../../../components/Select/Select\";\nimport {\n slugify,\n type WorkflowShowcasePhase,\n type WorkflowShowcaseSignupValues,\n} from \"./showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * ShowcaseSignup — the conversion overlay that floats over the canvas.\n *\n * Three moments share one glass surface: the workspace form (\"signup\"),\n * the provisioning interstitial (\"creating\") and the welcome card\n * (\"welcome\"). It follows the Dialog accessibility reference: minted ids\n * wired to aria-labelledby/-describedby, focus contained + restored.\n * ------------------------------------------------------------------------- */\n\nexport interface ShowcaseSignupProps {\n phase: WorkflowShowcasePhase;\n stepCount: number;\n workspaceDomain: string;\n teamSizes: string[];\n error: string | null;\n onSubmit: (values: WorkflowShowcaseSignupValues) => void;\n onBack: () => void;\n dashboardHref?: string;\n onboardingHref?: string;\n}\n\nconst OVERLAY_MOTION = {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n};\n\nexport function ShowcaseSignup({\n phase,\n stepCount,\n workspaceDomain,\n teamSizes,\n error,\n onSubmit,\n onBack,\n dashboardHref = \"#\",\n onboardingHref = \"#\",\n}: ShowcaseSignupProps) {\n const reducedMotion = useReducedMotion();\n const titleId = useId();\n const subtitleId = useId();\n const [values, setValues] = useState<WorkflowShowcaseSignupValues>({\n name: \"\",\n email: \"\",\n company: \"\",\n teamSize: teamSizes[0] ?? \"1–10\",\n });\n\n const open = phase === \"signup\" || phase === \"creating\" || phase === \"welcome\";\n const cardMotion = reducedMotion\n ? OVERLAY_MOTION\n : {\n initial: { opacity: 0, y: 14, scale: 0.985 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: 8, scale: 0.99 },\n };\n\n const handleSubmit = (event: FormEvent) => {\n event.preventDefault();\n onSubmit(values);\n };\n\n const firstName = values.name.trim().split(/\\s+/)[0] || \"\";\n const emailShown = values.email.trim() || \"your inbox\";\n const slug = `${slugify(values.company)}.${workspaceDomain}`;\n\n return (\n <AnimatePresence>\n {open && (\n <motion.div\n className=\"ods-showcase__veil\"\n {...OVERLAY_MOTION}\n transition={{ duration: reducedMotion ? 0 : 0.22 }}\n >\n <FocusScope contain restoreFocus autoFocus>\n {phase === \"signup\" && (\n <motion.form\n key=\"signup\"\n className=\"ods-showcase__glass-card\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={subtitleId}\n onSubmit={handleSubmit}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") onBack();\n }}\n {...cardMotion}\n transition={{ duration: reducedMotion ? 0 : 0.3, ease: [0.2, 0.7, 0.2, 1] }}\n >\n <div className=\"ods-showcase__glass-head\">\n <h3 id={titleId} className=\"ods-showcase__glass-title\">\n Create your workspace\n </h3>\n <p id={subtitleId} className=\"ods-showcase__microcopy\">\n FREE IN PRIVATE BETA · YOUR {stepCount}-STEP WORKFLOW COMES WITH YOU\n </p>\n </div>\n <div className=\"ods-showcase__form-grid\">\n <div className=\"ods-showcase__field\">\n <span className=\"ods-showcase__field-label\">FULL NAME</span>\n <Input\n aria-label=\"Full name\"\n autoComplete=\"name\"\n placeholder=\"Ada Lovelace\"\n value={values.name}\n onChange={(e) => setValues((v) => ({ ...v, name: e.target.value }))}\n />\n </div>\n <div className=\"ods-showcase__field\">\n <span className=\"ods-showcase__field-label\">WORK EMAIL</span>\n <Input\n aria-label=\"Work email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"ada@company.com\"\n value={values.email}\n onChange={(e) => setValues((v) => ({ ...v, email: e.target.value }))}\n />\n </div>\n <div className=\"ods-showcase__field\">\n <span className=\"ods-showcase__field-label\">COMPANY</span>\n <Input\n aria-label=\"Company\"\n autoComplete=\"organization\"\n placeholder=\"Acme Inc.\"\n value={values.company}\n onChange={(e) => setValues((v) => ({ ...v, company: e.target.value }))}\n />\n </div>\n <div className=\"ods-showcase__field\">\n <span className=\"ods-showcase__field-label\">TEAM SIZE</span>\n <Select\n aria-label=\"Team size\"\n options={teamSizes.map((size) => ({ value: size, label: size }))}\n value={values.teamSize}\n onChange={(teamSize) => setValues((v) => ({ ...v, teamSize }))}\n />\n </div>\n </div>\n {error && (\n <p className=\"ods-showcase__form-error\" role=\"alert\">\n {error}\n </p>\n )}\n <div className=\"ods-showcase__glass-foot\">\n <span className=\"ods-showcase__microcopy\">\n NO CREDIT CARD · SSO & SELF-HOSTING LATER\n </span>\n <div className=\"ods-showcase__glass-actions\">\n <Button type=\"button\" variant=\"secondary\" onClick={onBack}>\n Back\n </Button>\n <Button type=\"submit\" variant=\"primary\">\n Create account & deploy →\n </Button>\n </div>\n </div>\n </motion.form>\n )}\n\n {phase === \"creating\" && (\n <motion.div\n key=\"creating\"\n className=\"ods-showcase__glass-card ods-showcase__glass-card--slim\"\n role=\"status\"\n {...cardMotion}\n transition={{ duration: reducedMotion ? 0 : 0.25 }}\n >\n <span className=\"ods-showcase__spin\" aria-hidden=\"true\">\n ⟳\n </span>\n <span className=\"ods-showcase__creating-line\">\n provisioning workspace · saving draft · inviting {emailShown}\n </span>\n </motion.div>\n )}\n\n {phase === \"welcome\" && (\n <motion.div\n key=\"welcome\"\n className=\"ods-showcase__glass-card ods-showcase__glass-card--welcome\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n {...cardMotion}\n transition={{ duration: reducedMotion ? 0 : 0.3, ease: [0.2, 0.7, 0.2, 1] }}\n >\n <div className=\"ods-showcase__glass-head\">\n <p className=\"ods-showcase__microcopy ods-showcase__microcopy--success\">\n ✓ WORKSPACE READY\n </p>\n <h3 id={titleId} className=\"ods-showcase__glass-title\">\n Welcome to OctaviaFlow{firstName ? `, ${firstName}` : \"\"}.\n </h3>\n <p className=\"ods-showcase__welcome-body\">\n We emailed a sign-in link to <strong>{emailShown}</strong>. Your {stepCount}\n -step workflow is saved as a draft in{\" \"}\n <code className=\"ods-showcase__slug\">{slug}</code> — deploy it from the\n dashboard whenever you're ready.\n </p>\n </div>\n <div className=\"ods-showcase__glass-foot\">\n <div className=\"ods-showcase__glass-actions\">\n <a className=\"ods-showcase__solid-link\" href={dashboardHref}>\n Open dashboard →\n </a>\n <a className=\"ods-showcase__text-link\" href={onboardingHref}>\n Book onboarding →\n </a>\n </div>\n <span className=\"ods-showcase__microcopy ods-showcase__microcopy--right\">\n PRIVATE BETA\n <br />\n ONBOARDING INCLUDED\n </span>\n </div>\n </motion.div>\n )}\n </FocusScope>\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","jsx","jsxs","useId","useState","jsx","jsxs","useId","useState","jsx","jsxs","jsx","jsx","jsxs","useState","jsx","jsxs","useState","jsx","jsxs","CheckmarkIcon","jsx","jsxs","CheckmarkIcon","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsxs","useState","Fragment","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","CheckmarkIcon","jsx","jsxs","CheckmarkIcon","useReducedMotion","Fragment","jsx","jsxs","useReducedMotion","jsx","AnimatePresence","motion","useReducedMotion","useEffect","useMemo","useRef","useState","useState","jsx","jsxs","base","useState","motion","useReducedMotion","useId","useState","jsx","jsxs","useReducedMotion","useId","useState","motion","Fragment","jsx","jsxs","useReducedMotion","useState","useRef","useEffect","useMemo","AnimatePresence","motion"]}
|
|
1
|
+
{"version":3,"sources":["../src/marketing/components/AssistantTranscript/AssistantTranscript.tsx","../src/marketing/components/BackedBy/BackedBy.tsx","../src/marketing/components/BetaAccessForm/BetaAccessForm.tsx","../src/marketing/components/WorkflowShowcase/showcaseEngine.ts","../src/marketing/components/BlogGrid/BlogGrid.tsx","../src/marketing/components/ContactForm/ContactForm.tsx","../src/marketing/components/CtaBanner/CtaBanner.tsx","../src/marketing/components/FaqSection/FaqSection.tsx","../src/marketing/components/FeatureGrid/FeatureGrid.tsx","../src/marketing/components/IntegrationsFinder/IntegrationsFinder.tsx","../src/marketing/components/IntegrationsWall/IntegrationsWall.tsx","../src/marketing/components/LiveConsole/LiveConsole.tsx","../src/marketing/components/LogoMarquee/LogoMarquee.tsx","../src/marketing/glyphs.tsx","../src/marketing/components/MarketingFooter/MarketingFooter.tsx","../src/marketing/components/MarketingHero/MarketingHero.tsx","../src/marketing/components/MarketingNav/MarketingNav.tsx","../src/marketing/components/MarketingSection/MarketingSection.tsx","../src/marketing/components/PageHero/PageHero.tsx","../src/marketing/components/PricingTiers/PricingTiers.tsx","../src/marketing/components/StatBand/StatBand.tsx","../src/marketing/components/TestimonialStrip/TestimonialStrip.tsx","../src/marketing/components/WorkflowShowcase/WorkflowShowcase.tsx","../src/marketing/components/WorkflowShowcase/ShowcaseScene.tsx","../src/marketing/components/WorkflowShowcase/ShowcaseSignup.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * AssistantTranscript — a compact \"you → / octavia →\" exchange card showing\n * the natural-language-to-workflow moment in one glance.\n * ------------------------------------------------------------------------- */\n\nexport interface AssistantTranscriptTurn {\n id: string;\n speaker: \"user\" | \"assistant\";\n content: ReactNode;\n}\n\nexport interface AssistantTranscriptProps extends Omit<ComponentPropsWithoutRef<\"div\">, \"title\"> {\n /** Header label. Defaults to \"OctaviaFlow AI Assistant\". */\n title?: ReactNode;\n turns: AssistantTranscriptTurn[];\n userLabel?: string;\n assistantLabel?: string;\n}\n\nexport function AssistantTranscript({\n title = \"OctaviaFlow AI Assistant\",\n turns,\n userLabel = \"you\",\n assistantLabel = \"octavia\",\n className,\n ...rest\n}: AssistantTranscriptProps) {\n return (\n <div {...rest} className={cn(\"ods-mkt-transcript\", className)}>\n <div className=\"ods-mkt-transcript__head\">{title}</div>\n <div className=\"ods-mkt-transcript__body\">\n {turns.map((turn) => (\n <div key={turn.id} className=\"ods-mkt-transcript__turn\">\n <span\n className={cn(\n \"ods-mkt-transcript__speaker\",\n `ods-mkt-transcript__speaker--${turn.speaker}`,\n )}\n >\n {turn.speaker === \"user\" ? userLabel : assistantLabel} →\n </span>{\" \"}\n <span className=\"ods-mkt-transcript__content\">{turn.content}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * BackedBy — the investors/backers strip. Unlike LogoMarquee (volume social\n * proof, scrolling), this is a static, prestigious row: a few marks with\n * generous spacing and an optional note underneath (\"$4.2M seed · operators\n * from …\"). The site passes real investor logos via `icon`; plain names\n * render as serif wordmarks.\n * ------------------------------------------------------------------------- */\n\nexport interface BackedByItem {\n id: string;\n name: string;\n /** Investor logo. Omit for a serif wordmark. */\n icon?: ReactNode;\n}\n\nexport interface BackedByProps extends ComponentPropsWithoutRef<\"div\"> {\n items: BackedByItem[];\n /** Mono eyebrow. Default \"BACKED BY\". */\n label?: ReactNode;\n /** Microcopy under the marks — round, notable angels, etc. */\n note?: ReactNode;\n align?: \"center\" | \"start\";\n}\n\nexport function BackedBy({\n items,\n label = \"Backed by\",\n note,\n align = \"center\",\n className,\n ...rest\n}: BackedByProps) {\n return (\n <div\n {...rest}\n className={cn(\"ods-mkt-backedby\", align === \"start\" && \"ods-mkt-backedby--start\", className)}\n >\n {label && <p className=\"ods-mkt-backedby__label\">{label}</p>}\n <div className=\"ods-mkt-backedby__row\">\n {items.map((item) => (\n <span key={item.id} className=\"ods-mkt-backedby__mark\" title={item.name}>\n {item.icon ?? <span className=\"ods-mkt-backedby__wordmark\">{item.name}</span>}\n </span>\n ))}\n </div>\n {note && <p className=\"ods-mkt-backedby__note\">{note}</p>}\n </div>\n );\n}\n","\"use client\";\n\nimport { type FormEvent, type ReactNode, useId, useState } from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { Input } from \"../../../components/Input/Input\";\nimport { Select } from \"../../../components/Select/Select\";\nimport { Textarea } from \"../../../components/Textarea/Textarea\";\nimport { cn } from \"../../../utils/cn\";\nimport { isValidEmail } from \"../WorkflowShowcase/showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * BetaAccessForm — the \"request early access\" conversion band for marketing\n * pages outside the hero funnel. Email-only by default (lowest friction), or\n * `fields=\"full\"` for name + email + company. The consuming site wires\n * `onSubmit` to its real endpoint; resolve → success card, throw → inline\n * error with the form intact.\n * ------------------------------------------------------------------------- */\n\nexport interface BetaAccessValues {\n email: string;\n name?: string;\n /** Present when `nameLayout=\"split\"`. */\n firstName?: string;\n /** Present when `nameLayout=\"split\"`. */\n lastName?: string;\n company?: string;\n /** Present when `teamSizes` are configured. */\n teamSize?: string;\n /** Present when `plans` are configured (e.g. preselected from ?plan=). */\n plan?: string;\n /** Present when `useCases` are configured. */\n useCase?: string;\n /** Free-text details (present when `showDetails` is set). */\n details?: string;\n}\n\nexport interface BetaAccessFormProps {\n title?: ReactNode;\n /** Mono microcopy under the title. */\n subtitle?: ReactNode;\n /** \"email\" = single-field band (default). \"full\" = name + email + company. */\n fields?: \"email\" | \"full\";\n /** \"single\" (default) = one Full-name field; \"split\" = First + Last name. */\n nameLayout?: \"single\" | \"split\";\n /** \"card\" (default) = bordered band. \"inline\" = chromeless, for footers. */\n appearance?: \"card\" | \"inline\";\n /** Team-size choices (full mode). Required when provided. */\n teamSizes?: string[];\n /** Plan choices (full mode), e.g. from the pricing tiers. Optional pick. */\n plans?: string[];\n /** Preselected plan (e.g. from a ?plan= query param). */\n defaultPlan?: string;\n /** Primary use-case choices (full mode). Required when provided. */\n useCases?: string[];\n /** Show an optional free-text details textarea (full mode). */\n showDetails?: boolean;\n detailsLabel?: ReactNode;\n detailsPlaceholder?: string;\n submitLabel?: ReactNode;\n /** Mono microcopy under the form. */\n footnote?: ReactNode;\n /** Resolve → success state; throw → inline error, form kept. */\n onSubmit?: (values: BetaAccessValues) => Promise<void> | void;\n successTitle?: ReactNode;\n successBody?: ReactNode;\n disabled?: boolean;\n className?: string;\n}\n\ntype Phase = \"idle\" | \"submitting\" | \"success\";\n\nexport function BetaAccessForm({\n title = \"Request early access\",\n subtitle = \"CURRENTLY IN PRIVATE BETA — WE REVIEW ACCESS REQUESTS WEEKLY\",\n fields = \"email\",\n nameLayout = \"single\",\n appearance = \"card\",\n teamSizes,\n plans,\n defaultPlan,\n useCases,\n showDetails = false,\n detailsLabel = \"Anything else we should know?\",\n detailsPlaceholder = \"Current stack, timelines, must-have connectors…\",\n submitLabel = \"Request access →\",\n footnote = \"NO CREDIT CARD · SSO & SELF-HOSTING AVAILABLE\",\n onSubmit,\n successTitle = \"Request received.\",\n successBody = \"We review access requests weekly — you'll hear from us by email.\",\n disabled = false,\n className,\n}: BetaAccessFormProps) {\n const uid = useId();\n const [values, setValues] = useState<BetaAccessValues>({\n email: \"\",\n name: \"\",\n firstName: \"\",\n lastName: \"\",\n company: \"\",\n teamSize: \"\",\n plan: defaultPlan ?? \"\",\n useCase: \"\",\n details: \"\",\n });\n const [phase, setPhase] = useState<Phase>(\"idle\");\n const [error, setError] = useState<string | null>(null);\n\n const handleSubmit = async (event: FormEvent) => {\n event.preventDefault();\n if (phase === \"submitting\") return;\n if (!isValidEmail(values.email)) {\n setError(\"Please enter a valid work email.\");\n return;\n }\n if (fields === \"full\" && nameLayout === \"single\" && !values.name?.trim()) {\n setError(\"Please enter your name.\");\n return;\n }\n if (fields === \"full\" && nameLayout === \"split\" && !values.firstName?.trim()) {\n setError(\"Please enter your first name.\");\n return;\n }\n if (fields === \"full\" && teamSizes?.length && !values.teamSize) {\n setError(\"Please select your team size.\");\n return;\n }\n if (fields === \"full\" && useCases?.length && !values.useCase) {\n setError(\"Please select your primary use case.\");\n return;\n }\n setError(null);\n setPhase(\"submitting\");\n try {\n await onSubmit?.(values);\n setPhase(\"success\");\n } catch {\n setError(\"Something went wrong — please try again.\");\n setPhase(\"idle\");\n }\n };\n\n const inline = appearance === \"inline\";\n\n if (phase === \"success\") {\n return (\n <div\n className={cn(\n \"ods-mkt-access\",\n \"ods-mkt-access--success\",\n inline && \"ods-mkt-access--inline\",\n className,\n )}\n role=\"status\"\n >\n <p className=\"ods-mkt-access__success-mark\">✓ {successTitle}</p>\n <p className=\"ods-mkt-access__success-body\">{successBody}</p>\n </div>\n );\n }\n\n const busy = disabled || phase === \"submitting\";\n\n return (\n <form\n className={cn(\"ods-mkt-access\", inline && \"ods-mkt-access--inline\", className)}\n onSubmit={handleSubmit}\n noValidate\n >\n <div className=\"ods-mkt-access__head\">\n <h3 className=\"ods-mkt-access__title\">{title}</h3>\n {subtitle && <p className=\"ods-mkt-access__subtitle\">{subtitle}</p>}\n </div>\n\n <div\n className={cn(\n \"ods-mkt-access__fields\",\n fields === \"full\" && \"ods-mkt-access__fields--full\",\n )}\n >\n {fields === \"full\" && nameLayout === \"single\" && (\n <div className=\"ods-mkt-access__field\">\n <label className=\"ods-mkt-access__label\" htmlFor={`${uid}-name`}>\n Full name\n </label>\n <Input\n id={`${uid}-name`}\n autoComplete=\"name\"\n placeholder=\"Ada Lovelace\"\n value={values.name ?? \"\"}\n onChange={(e) => setValues((v) => ({ ...v, name: e.target.value }))}\n disabled={busy}\n />\n </div>\n )}\n {fields === \"full\" && nameLayout === \"split\" && (\n <>\n <div className=\"ods-mkt-access__field\">\n <label className=\"ods-mkt-access__label\" htmlFor={`${uid}-firstname`}>\n First name\n </label>\n <Input\n id={`${uid}-firstname`}\n autoComplete=\"given-name\"\n placeholder=\"Ada\"\n value={values.firstName ?? \"\"}\n onChange={(e) => setValues((v) => ({ ...v, firstName: e.target.value }))}\n disabled={busy}\n />\n </div>\n <div className=\"ods-mkt-access__field\">\n <label className=\"ods-mkt-access__label\" htmlFor={`${uid}-lastname`}>\n Last name\n </label>\n <Input\n id={`${uid}-lastname`}\n autoComplete=\"family-name\"\n placeholder=\"Lovelace\"\n value={values.lastName ?? \"\"}\n onChange={(e) => setValues((v) => ({ ...v, lastName: e.target.value }))}\n disabled={busy}\n />\n </div>\n </>\n )}\n <div className=\"ods-mkt-access__field\">\n <label className=\"ods-mkt-access__label\" htmlFor={`${uid}-email`}>\n Work email\n </label>\n <Input\n id={`${uid}-email`}\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"ada@company.com\"\n value={values.email}\n onChange={(e) => setValues((v) => ({ ...v, email: e.target.value }))}\n disabled={busy}\n />\n </div>\n {fields === \"full\" && (\n <div className=\"ods-mkt-access__field\">\n <label className=\"ods-mkt-access__label\" htmlFor={`${uid}-company`}>\n Company\n </label>\n <Input\n id={`${uid}-company`}\n autoComplete=\"organization\"\n placeholder=\"Acme Inc.\"\n value={values.company ?? \"\"}\n onChange={(e) => setValues((v) => ({ ...v, company: e.target.value }))}\n disabled={busy}\n />\n </div>\n )}\n {fields === \"full\" && teamSizes && teamSizes.length > 0 && (\n <div className=\"ods-mkt-access__field\">\n <span className=\"ods-mkt-access__label\" id={`${uid}-teamsize-label`}>\n Team size\n </span>\n <Select\n aria-labelledby={`${uid}-teamsize-label`}\n placeholder=\"Select team size…\"\n options={teamSizes.map((size) => ({ value: size, label: size }))}\n value={values.teamSize ?? \"\"}\n onChange={(teamSize) => setValues((v) => ({ ...v, teamSize }))}\n disabled={busy}\n />\n </div>\n )}\n {fields === \"full\" && plans && plans.length > 0 && (\n <div className=\"ods-mkt-access__field\">\n <span className=\"ods-mkt-access__label\" id={`${uid}-plan-label`}>\n Plan (optional)\n </span>\n <Select\n aria-labelledby={`${uid}-plan-label`}\n placeholder=\"Not sure yet\"\n options={plans.map((plan) => ({ value: plan, label: plan }))}\n value={values.plan ?? \"\"}\n onChange={(plan) => setValues((v) => ({ ...v, plan }))}\n disabled={busy}\n />\n </div>\n )}\n {fields === \"full\" && useCases && useCases.length > 0 && (\n <div className=\"ods-mkt-access__field\">\n <span className=\"ods-mkt-access__label\" id={`${uid}-usecase-label`}>\n Primary use case\n </span>\n <Select\n aria-labelledby={`${uid}-usecase-label`}\n placeholder=\"Select a use case…\"\n options={useCases.map((useCase) => ({ value: useCase, label: useCase }))}\n value={values.useCase ?? \"\"}\n onChange={(useCase) => setValues((v) => ({ ...v, useCase }))}\n disabled={busy}\n />\n </div>\n )}\n {fields === \"full\" && showDetails && (\n <div className=\"ods-mkt-access__field ods-mkt-access__field--wide\">\n <label\n className=\"ods-mkt-access__label\"\n id={`${uid}-details-label`}\n htmlFor={`${uid}-details`}\n >\n {detailsLabel}\n </label>\n <Textarea\n id={`${uid}-details`}\n aria-labelledby={`${uid}-details-label`}\n placeholder={detailsPlaceholder}\n rows={3}\n value={values.details ?? \"\"}\n onChange={(e) => setValues((v) => ({ ...v, details: e.target.value }))}\n disabled={busy}\n />\n </div>\n )}\n <Button\n type=\"submit\"\n variant=\"primary\"\n loading={phase === \"submitting\"}\n disabled={disabled}\n >\n {submitLabel}\n </Button>\n </div>\n\n {error && (\n <p className=\"ods-mkt-access__error\" role=\"alert\">\n {error}\n </p>\n )}\n {footnote && <p className=\"ods-mkt-access__footnote\">{footnote}</p>}\n </form>\n );\n}\n","import type { ReactNode } from \"react\";\n\n/* ---------------------------------------------------------------------------\n * WorkflowShowcase engine — pure data + logic, no React rendering.\n *\n * Everything the marketing funnel needs to \"think\" lives here so it can be\n * unit-tested without mounting the (heavily animated) component tree:\n * connector recognition, schedule inference, plan resolution, activity-rail\n * script and prompt segmentation for the live-highlight overlay.\n * ------------------------------------------------------------------------- */\n\nexport type WorkflowShowcaseRole = \"source\" | \"destination\" | \"action\" | \"notify\";\n\nexport interface WorkflowShowcaseConnector {\n /** Canonical display name — matched case-insensitively inside the prompt. */\n name: string;\n role: WorkflowShowcaseRole;\n /** Extra strings that also count as a mention of this connector. */\n aliases?: string[];\n /** Optional icon tile. Defaults to a two-letter monogram. */\n icon?: ReactNode;\n}\n\nexport interface WorkflowShowcaseExample {\n id: string;\n /** Chip label, e.g. \"Storefront orders → Warehouse, hourly\". */\n label: string;\n /** Prompt inserted (and auto-built) when the chip is clicked. */\n prompt: string;\n}\n\nexport interface WorkflowShowcaseMetric {\n id: string;\n /** Final value once the pipeline reads as live. */\n value: number;\n /** Interim value while the workflow is still assembling. Omit → \"—\". */\n buildingValue?: number;\n decimals?: number;\n /** Small unit text after the value, e.g. \"rows/min\". */\n unit?: string;\n /** Rendered before the number, e.g. \"−\". */\n prefix?: string;\n /** Rendered flush after the number, e.g. \"%\". */\n suffix?: string;\n /** Mono microcopy under the value, e.g. \"THROUGHPUT\". */\n label: string;\n /** \"success\" tints the final value green (savings, wins). */\n tone?: \"default\" | \"success\";\n}\n\nexport type WorkflowShowcasePhase =\n | \"idle\"\n | \"analyzing\"\n | \"building\"\n | \"done\"\n | \"signup\"\n | \"creating\"\n | \"welcome\";\n\n/** Phases in which the generated workflow reads as complete. */\nexport const SETTLED_PHASES: readonly WorkflowShowcasePhase[] = [\n \"done\",\n \"signup\",\n \"creating\",\n \"welcome\",\n];\n\nexport interface WorkflowShowcasePlan {\n /** Sources, in catalog order. */\n left: WorkflowShowcaseConnector[];\n /** Destination → action → notify, in that order. */\n right: WorkflowShowcaseConnector[];\n /** Every connector in the plan (left + right). */\n all: WorkflowShowcaseConnector[];\n /** Total assemble steps: each source + schema map + each right-side node. */\n totalSteps: number;\n}\n\nexport interface WorkflowShowcaseSignupValues {\n name: string;\n email: string;\n company: string;\n teamSize: string;\n}\n\nexport interface ShowcaseActivityLine {\n id: string;\n text: string;\n tone: \"muted\" | \"faint\" | \"active\" | \"done\" | \"plain\";\n}\n\nexport interface ShowcasePromptSegment {\n text: string;\n /** Set when this segment is a recognized connector mention. */\n connector?: WorkflowShowcaseConnector;\n}\n\n/* ---------------------------------------------------------------------------\n * Defaults — deliberately vendor-neutral. The consuming site passes its real\n * connector catalog; the design system itself stays name-free.\n * ------------------------------------------------------------------------- */\n\nexport const WORKFLOW_SHOWCASE_DEFAULT_CONNECTORS: WorkflowShowcaseConnector[] = [\n { name: \"Storefront\", role: \"source\", aliases: [\"store\", \"shop orders\"] },\n { name: \"Payments\", role: \"source\", aliases: [\"payouts\"] },\n { name: \"Orders DB\", role: \"source\", aliases: [\"orders database\"] },\n { name: \"CRM\", role: \"source\", aliases: [\"crm leads\"] },\n { name: \"Warehouse\", role: \"destination\" },\n { name: \"Lakehouse\", role: \"destination\" },\n { name: \"Campaigns\", role: \"action\", aliases: [\"campaign\"] },\n { name: \"Team Chat\", role: \"notify\", aliases: [\"chat\", \"alert the team\"] },\n];\n\nexport const WORKFLOW_SHOWCASE_DEFAULT_EXAMPLES: WorkflowShowcaseExample[] = [\n {\n id: \"hourly-sync\",\n label: \"Storefront orders → Warehouse, hourly\",\n prompt: \"Sync Storefront orders to Warehouse every hour, alert sales in Team Chat\",\n },\n {\n id: \"daily-load\",\n label: \"Payments payouts → Lakehouse, daily\",\n prompt: \"Load Payments payouts into Lakehouse daily\",\n },\n {\n id: \"realtime-stream\",\n label: \"Orders DB changes → Warehouse + Team Chat\",\n prompt: \"Stream Orders DB changes to Warehouse in real-time and notify Team Chat\",\n },\n];\n\nexport const WORKFLOW_SHOWCASE_DEFAULT_METRICS: WorkflowShowcaseMetric[] = [\n { id: \"throughput\", value: 2341, buildingValue: 842, unit: \"rows/min\", label: \"THROUGHPUT\" },\n {\n id: \"latency\",\n value: 0.8,\n buildingValue: 1.1,\n decimals: 1,\n unit: \"s latency\",\n label: \"SYNC SPEED\",\n },\n { id: \"cost\", value: 43, suffix: \"%\", label: \"SAVED VS BASELINE\", tone: \"success\" },\n];\n\nexport const WORKFLOW_SHOWCASE_SCHEDULES = [\"AUTO\", \"HOURLY\", \"DAILY\", \"REAL-TIME\"] as const;\n\n/** Trigger modes the platform supports — mirrors real workflow capability. */\nexport const WORKFLOW_SHOWCASE_TRIGGERS = [\"SCHEDULE\", \"WEBHOOK\", \"APP EVENT\", \"MANUAL\"] as const;\n\n// Platform capability tiles — AI/data jobs the engine actually runs.\nexport const WORKFLOW_SHOWCASE_DEFAULT_TILES = [\n \"ELT\",\n \"CDC\",\n \"LLM\",\n \"RAG\",\n \"HEAL\",\n \"COST\",\n \"IDP\",\n \"VEC\",\n] as const;\n\n/* ---------------------------------------------------------------------------\n * Recognition\n * ------------------------------------------------------------------------- */\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\ninterface Mention {\n connector: WorkflowShowcaseConnector;\n pattern: string;\n}\n\n/** Every (connector, matchable-string) pair, longest pattern first so\n * overlapping names (\"Orders DB\" vs \"Orders\") resolve to the longest hit. */\nfunction mentionsOf(catalog: WorkflowShowcaseConnector[]): Mention[] {\n const out: Mention[] = [];\n for (const connector of catalog) {\n out.push({ connector, pattern: connector.name });\n for (const alias of connector.aliases ?? []) out.push({ connector, pattern: alias });\n }\n return out.sort((a, b) => b.pattern.length - a.pattern.length);\n}\n\n/** Connector names mentioned in the prompt, in catalog order, deduped. */\nexport function detectConnectors(prompt: string, catalog: WorkflowShowcaseConnector[]): string[] {\n const lower = prompt.toLowerCase();\n return catalog\n .filter((c) => [c.name, ...(c.aliases ?? [])].some((p) => lower.includes(p.toLowerCase())))\n .map((c) => c.name);\n}\n\n/** Split the prompt into plain / recognized-connector segments, preserving\n * the user's exact text. Powers the live-highlight overlay. */\nexport function segmentPrompt(\n prompt: string,\n catalog: WorkflowShowcaseConnector[],\n): ShowcasePromptSegment[] {\n if (!prompt) return [];\n const mentions = mentionsOf(catalog);\n if (!mentions.length) return [{ text: prompt }];\n const re = new RegExp(`(${mentions.map((m) => escapeRegExp(m.pattern)).join(\"|\")})`, \"gi\");\n const byPattern = new Map(mentions.map((m) => [m.pattern.toLowerCase(), m.connector]));\n return prompt\n .split(re)\n .filter((part) => part !== \"\")\n .map((part) => {\n const connector = byPattern.get(part.toLowerCase());\n return connector ? { text: part, connector } : { text: part };\n });\n}\n\n/** Infer a schedule from natural language; null when nothing matches. */\nexport function scheduleFromPrompt(prompt: string): string | null {\n const t = prompt.toLowerCase();\n if (/stream|real.?time|cdc/.test(t)) return \"REAL-TIME\";\n if (/hour/.test(t)) return \"HOURLY\";\n if (/dail|every day|nightly/.test(t)) return \"DAILY\";\n return null;\n}\n\n/** Two-letter monogram for the default icon tile: \"Team Chat\" → \"TC\". */\nexport function monogram(name: string): string {\n const words = name.trim().split(/\\s+/);\n const raw = words.length >= 2 ? `${words[0][0]}${words[1][0]}` : name.slice(0, 2);\n return raw.toUpperCase();\n}\n\n/* ---------------------------------------------------------------------------\n * Plan resolution\n * ------------------------------------------------------------------------- */\n\nconst RIGHT_ORDER: Record<WorkflowShowcaseRole, number> = {\n source: -1,\n destination: 0,\n action: 1,\n notify: 2,\n};\n\n/**\n * Resolve the workflow plan from explicit picks + prompt mentions. A viable\n * demo always has at least one source and one non-source, so missing sides\n * are backfilled from the catalog (first source / first notify-or-destination).\n */\nexport function resolvePlan(\n selected: string[],\n detected: string[],\n catalog: WorkflowShowcaseConnector[],\n): WorkflowShowcasePlan {\n const byName = new Map(catalog.map((c) => [c.name, c]));\n let names = [...new Set([...selected, ...detected])].filter((n) => byName.has(n));\n if (!names.length) {\n const fallback = [\n catalog.find((c) => c.role === \"source\"),\n catalog.find((c) => c.role === \"destination\"),\n catalog.find((c) => c.role === \"notify\"),\n ].filter((c): c is WorkflowShowcaseConnector => Boolean(c));\n names = fallback.map((c) => c.name);\n }\n const has = (predicate: (c: WorkflowShowcaseConnector) => boolean) =>\n names.some((n) => {\n const c = byName.get(n);\n return Boolean(c && predicate(c));\n });\n if (!has((c) => c.role === \"source\")) {\n const source = catalog.find((c) => c.role === \"source\");\n if (source) names = [source.name, ...names];\n }\n if (!has((c) => c.role !== \"source\")) {\n const sink =\n catalog.find((c) => c.role === \"notify\") ?? catalog.find((c) => c.role !== \"source\");\n if (sink) names = [...names, sink.name];\n }\n const picked = catalog.filter((c) => names.includes(c.name));\n const left = picked.filter((c) => c.role === \"source\");\n const right = picked\n .filter((c) => c.role !== \"source\")\n .sort((a, b) => RIGHT_ORDER[a.role] - RIGHT_ORDER[b.role]);\n const all = [...left, ...right];\n return { left, right, all, totalSteps: all.length + 1 };\n}\n\n/* ---------------------------------------------------------------------------\n * Activity rail script\n * ------------------------------------------------------------------------- */\n\nfunction stepVerb(role: WorkflowShowcaseRole): string {\n if (role === \"notify\") return \"alert\";\n if (role === \"action\") return \"trigger\";\n return \"load\";\n}\n\n/** Ordered assemble steps for the rail + canvas (\"storefront extract\", …). */\nexport function assembleSteps(plan: WorkflowShowcasePlan): string[] {\n return [\n ...plan.left.map((c) => `${c.name.toLowerCase()} extract`),\n \"schema map · 14 fields\",\n ...plan.right.map((c) => `${c.name.toLowerCase()} ${stepVerb(c.role)}`),\n ];\n}\n\n/**\n * Script the \"OCTAVIA IS DOING\" rail for the current moment.\n * `shown` = number of assemble steps already completed while building.\n */\nexport function buildActivity(args: {\n phase: WorkflowShowcasePhase;\n shown: number;\n plan: WorkflowShowcasePlan;\n selected: string[];\n status: string;\n}): ShowcaseActivityLine[] {\n const { phase, shown, plan, selected, status } = args;\n const settled = SETTLED_PHASES.includes(phase);\n const lines: ShowcaseActivityLine[] = [];\n if (phase === \"idle\") {\n if (!selected.length) {\n lines.push({ id: \"wait\", text: \"▸ waiting for instructions…\", tone: \"muted\" });\n lines.push({ id: \"hint\", text: \"· type a request or pick apps\", tone: \"faint\" });\n }\n for (const name of selected.slice(-6)) {\n lines.push({ id: `sel-${name}`, text: `+ ${name.toLowerCase()} connected`, tone: \"plain\" });\n }\n return lines;\n }\n if (phase === \"analyzing\") {\n for (const name of selected.slice(-4)) {\n lines.push({ id: `sel-${name}`, text: `+ ${name.toLowerCase()} connected`, tone: \"muted\" });\n }\n lines.push({ id: \"status\", text: `⟳ ${status}`, tone: \"active\" });\n return lines;\n }\n assembleSteps(plan).forEach((step, i) => {\n if (settled || shown > i) lines.push({ id: `step-${i}`, text: `✓ ${step}`, tone: \"done\" });\n else if (shown === i) lines.push({ id: `step-${i}`, text: `⟳ ${step}…`, tone: \"active\" });\n else lines.push({ id: `step-${i}`, text: `· ${step} queued`, tone: \"muted\" });\n });\n if (settled) lines.push({ id: \"errors\", text: \"✓ error handling attached\", tone: \"done\" });\n return lines.slice(-8);\n}\n\n/* ---------------------------------------------------------------------------\n * Misc\n * ------------------------------------------------------------------------- */\n\n/** \"Acme Inc.\" → \"acme-inc\" (workspace slug preview in the welcome card). */\nexport function slugify(value: string): string {\n return (\n value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\") || \"your-team\"\n );\n}\n\nexport function isValidEmail(value: string): boolean {\n return /^\\S+@\\S+\\.\\S+$/.test(value.trim());\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { BlogCard } from \"../../../components/BlogCard/BlogCard\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * BlogGrid — the marketing blog/changelog teaser section body. Composes the\n * DS BlogCard into a responsive grid with an optional \"view all\" link.\n * Pair with MarketingSection for the kicker/title band.\n * ------------------------------------------------------------------------- */\n\nexport interface BlogGridPost {\n id: string;\n title: ReactNode;\n href: string;\n excerpt?: ReactNode;\n /** Publish date / meta line, e.g. \"Jul 12, 2026\". */\n date?: ReactNode;\n /** Reading-time chip, e.g. \"6 min read\". */\n readTime?: ReactNode;\n tags?: ReactNode[];\n /** Cover artwork (usually an <img>). */\n cover?: ReactNode;\n author?: {\n name: string;\n /** Avatar spec forwarded to the DS Avatar primitive. */\n avatar?: { src?: string; initials?: string; alt?: string };\n byline?: ReactNode;\n };\n}\n\nexport interface BlogGridProps extends ComponentPropsWithoutRef<\"div\"> {\n posts: BlogGridPost[];\n columns?: 2 | 3;\n viewAllHref?: string;\n viewAllLabel?: ReactNode;\n}\n\nexport function BlogGrid({\n posts,\n columns = 3,\n viewAllHref,\n viewAllLabel = \"View all posts →\",\n className,\n ...rest\n}: BlogGridProps) {\n return (\n <div {...rest} className={cn(\"ods-mkt-blog\", className)}>\n <div className={cn(\"ods-mkt-blog__grid\", `ods-mkt-blog__grid--${columns}`)}>\n {posts.map((post) => (\n <BlogCard\n key={post.id}\n title={post.title}\n description={post.excerpt}\n href={post.href}\n meta={post.date}\n readingTime={post.readTime}\n tags={post.tags}\n cover={post.cover}\n author={post.author}\n />\n ))}\n </div>\n {viewAllHref && (\n <div className=\"ods-mkt-blog__more\">\n <a className=\"ods-mkt-blog__more-link\" href={viewAllHref}>\n {viewAllLabel}\n </a>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { type FormEvent, type ReactNode, useId, useState } from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { Input } from \"../../../components/Input/Input\";\nimport { Select } from \"../../../components/Select/Select\";\nimport { Textarea } from \"../../../components/Textarea/Textarea\";\nimport { cn } from \"../../../utils/cn\";\nimport { isValidEmail } from \"../WorkflowShowcase/showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * ContactForm — \"talk to us\" form for the contact page / sales section.\n * Same interaction contract as BetaAccessForm: async `onSubmit`, success\n * card on resolve, inline error with the form intact on failure.\n * ------------------------------------------------------------------------- */\n\nexport interface ContactFormValues {\n name: string;\n email: string;\n company?: string;\n /** Selected topic value (present when `topics` are configured). */\n topic?: string;\n message: string;\n}\n\nexport interface ContactFormTopic {\n value: string;\n label: string;\n /** Contextual hint shown under the select when this topic is chosen. */\n hint?: ReactNode;\n /** Message-textarea placeholder while this topic is selected. */\n messagePlaceholder?: string;\n}\n\nexport interface ContactFormProps {\n title?: ReactNode;\n subtitle?: ReactNode;\n /** Topic choices (sales, partnership, support…). Required when provided. */\n topics?: ContactFormTopic[];\n submitLabel?: ReactNode;\n footnote?: ReactNode;\n /** Resolve → success state; throw → inline error, form kept. */\n onSubmit?: (values: ContactFormValues) => Promise<void> | void;\n successTitle?: ReactNode;\n successBody?: ReactNode;\n disabled?: boolean;\n className?: string;\n}\n\ntype Phase = \"idle\" | \"submitting\" | \"success\";\n\nexport function ContactForm({\n title = \"Talk to us\",\n subtitle = \"SALES · PARTNERSHIPS · ANYTHING ELSE — WE READ EVERYTHING\",\n topics,\n submitLabel = \"Send message →\",\n footnote = \"WE USUALLY REPLY WITHIN ONE BUSINESS DAY\",\n onSubmit,\n successTitle = \"Message sent.\",\n successBody = \"Thanks for reaching out — we'll get back to you by email.\",\n disabled = false,\n className,\n}: ContactFormProps) {\n const uid = useId();\n const [values, setValues] = useState<ContactFormValues>({\n name: \"\",\n email: \"\",\n company: \"\",\n topic: \"\",\n message: \"\",\n });\n const selectedTopic = topics?.find((t) => t.value === values.topic);\n const [phase, setPhase] = useState<Phase>(\"idle\");\n const [error, setError] = useState<string | null>(null);\n\n const handleSubmit = async (event: FormEvent) => {\n event.preventDefault();\n if (phase === \"submitting\") return;\n if (!values.name.trim()) {\n setError(\"Please enter your name.\");\n return;\n }\n if (!isValidEmail(values.email)) {\n setError(\"Please enter a valid work email.\");\n return;\n }\n if (topics?.length && !values.topic) {\n setError(\"Please choose a topic.\");\n return;\n }\n if (!values.message.trim()) {\n setError(\"Please write a short message.\");\n return;\n }\n setError(null);\n setPhase(\"submitting\");\n try {\n await onSubmit?.(values);\n setPhase(\"success\");\n } catch {\n setError(\"Something went wrong — please try again.\");\n setPhase(\"idle\");\n }\n };\n\n if (phase === \"success\") {\n return (\n <div className={cn(\"ods-mkt-contact\", \"ods-mkt-contact--success\", className)} role=\"status\">\n <p className=\"ods-mkt-contact__success-mark\">✓ {successTitle}</p>\n <p className=\"ods-mkt-contact__success-body\">{successBody}</p>\n </div>\n );\n }\n\n const busy = disabled || phase === \"submitting\";\n\n return (\n <form className={cn(\"ods-mkt-contact\", className)} onSubmit={handleSubmit} noValidate>\n <div className=\"ods-mkt-contact__head\">\n <h3 className=\"ods-mkt-contact__title\">{title}</h3>\n {subtitle && <p className=\"ods-mkt-contact__subtitle\">{subtitle}</p>}\n </div>\n\n <div className=\"ods-mkt-contact__grid\">\n <div className=\"ods-mkt-contact__field\">\n <label className=\"ods-mkt-contact__label\" htmlFor={`${uid}-name`}>\n Full name\n </label>\n <Input\n id={`${uid}-name`}\n autoComplete=\"name\"\n placeholder=\"Ada Lovelace\"\n value={values.name}\n onChange={(e) => setValues((v) => ({ ...v, name: e.target.value }))}\n disabled={busy}\n />\n </div>\n <div className=\"ods-mkt-contact__field\">\n <label className=\"ods-mkt-contact__label\" htmlFor={`${uid}-email`}>\n Work email\n </label>\n <Input\n id={`${uid}-email`}\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"ada@company.com\"\n value={values.email}\n onChange={(e) => setValues((v) => ({ ...v, email: e.target.value }))}\n disabled={busy}\n />\n </div>\n <div className=\"ods-mkt-contact__field ods-mkt-contact__field--wide\">\n <label className=\"ods-mkt-contact__label\" htmlFor={`${uid}-company`}>\n Company <span className=\"ods-mkt-contact__optional\">(optional)</span>\n </label>\n <Input\n id={`${uid}-company`}\n autoComplete=\"organization\"\n placeholder=\"Acme Inc.\"\n value={values.company ?? \"\"}\n onChange={(e) => setValues((v) => ({ ...v, company: e.target.value }))}\n disabled={busy}\n />\n </div>\n {topics && topics.length > 0 && (\n <div className=\"ods-mkt-contact__field ods-mkt-contact__field--wide\">\n <span className=\"ods-mkt-contact__label\" id={`${uid}-topic-label`}>\n Topic\n </span>\n <Select\n aria-labelledby={`${uid}-topic-label`}\n placeholder=\"Choose a topic…\"\n options={topics.map((t) => ({ value: t.value, label: t.label }))}\n value={values.topic ?? \"\"}\n onChange={(topic) => setValues((v) => ({ ...v, topic }))}\n disabled={busy}\n />\n {selectedTopic?.hint && (\n <p className=\"ods-mkt-contact__topic-hint\">{selectedTopic.hint}</p>\n )}\n </div>\n )}\n <div className=\"ods-mkt-contact__field ods-mkt-contact__field--wide\">\n {/* Textarea's react-aria field wiring owns the name computation —\n associate the external label explicitly via aria-labelledby. */}\n <label\n className=\"ods-mkt-contact__label\"\n id={`${uid}-message-label`}\n htmlFor={`${uid}-message`}\n >\n Message\n </label>\n <Textarea\n id={`${uid}-message`}\n aria-labelledby={`${uid}-message-label`}\n placeholder={selectedTopic?.messagePlaceholder ?? \"What are you trying to build?\"}\n rows={4}\n value={values.message}\n onChange={(e) => setValues((v) => ({ ...v, message: e.target.value }))}\n disabled={busy}\n />\n </div>\n </div>\n\n {error && (\n <p className=\"ods-mkt-contact__error\" role=\"alert\">\n {error}\n </p>\n )}\n\n <div className=\"ods-mkt-contact__foot\">\n {footnote && <p className=\"ods-mkt-contact__footnote\">{footnote}</p>}\n <Button\n type=\"submit\"\n variant=\"primary\"\n loading={phase === \"submitting\"}\n disabled={disabled}\n >\n {submitLabel}\n </Button>\n </div>\n </form>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * CtaBanner — the closing conversion band: display headline, lede, primary +\n * secondary calls to action, mono footnote.\n * ------------------------------------------------------------------------- */\n\nexport interface CtaBannerAction {\n label: ReactNode;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface CtaBannerProps extends Omit<ComponentPropsWithoutRef<\"section\">, \"title\"> {\n title: ReactNode;\n lede?: ReactNode;\n primary: CtaBannerAction;\n secondary?: CtaBannerAction;\n /** Mono microcopy under the actions, e.g. beta-review cadence. */\n footnote?: ReactNode;\n}\n\nfunction Action({\n action,\n variant,\n}: {\n action: CtaBannerAction;\n variant: \"primary\" | \"secondary\";\n}) {\n if (action.href) {\n return (\n <a\n className={cn(\"ods-mkt-cta__link\", `ods-mkt-cta__link--${variant}`)}\n href={action.href}\n onClick={action.onClick}\n >\n {action.label}\n </a>\n );\n }\n return (\n <Button variant={variant} onClick={action.onClick}>\n {action.label}\n </Button>\n );\n}\n\nexport function CtaBanner({\n title,\n lede,\n primary,\n secondary,\n footnote,\n className,\n ...rest\n}: CtaBannerProps) {\n return (\n <section {...rest} className={cn(\"ods-mkt-cta\", className)}>\n <h2 className=\"ods-mkt-cta__title\">{title}</h2>\n {lede && <p className=\"ods-mkt-cta__lede\">{lede}</p>}\n <div className=\"ods-mkt-cta__actions\">\n <Action action={primary} variant=\"primary\" />\n {secondary && <Action action={secondary} variant=\"secondary\" />}\n </div>\n {footnote && <p className=\"ods-mkt-cta__footnote\">{footnote}</p>}\n </section>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { Accordion } from \"../../../components/Accordion/Accordion\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * FaqSection — marketing Q&A built on the DS Accordion. One or two columns;\n * pass `defaultOpenIds` to pre-expand the questions that answer objections.\n * ------------------------------------------------------------------------- */\n\nexport interface FaqItem {\n id: string;\n question: ReactNode;\n answer: ReactNode;\n}\n\nexport interface FaqSectionProps extends ComponentPropsWithoutRef<\"div\"> {\n items: FaqItem[];\n columns?: 1 | 2;\n defaultOpenIds?: string[];\n}\n\nexport function FaqSection({\n items,\n columns = 1,\n defaultOpenIds = [],\n className,\n ...rest\n}: FaqSectionProps) {\n const half = Math.ceil(items.length / 2);\n const columnItems = columns === 2 ? [items.slice(0, half), items.slice(half)] : [items];\n\n return (\n <div {...rest} className={cn(\"ods-mkt-faq\", columns === 2 && \"ods-mkt-faq--2\", className)}>\n {columnItems.map((column, i) => (\n <Accordion\n // biome-ignore lint/suspicious/noArrayIndexKey: columns are positional\n key={i}\n mode=\"multiple\"\n defaultValue={defaultOpenIds}\n items={column.map((item) => ({\n id: item.id,\n label: item.question,\n content: <div className=\"ods-mkt-faq__answer\">{item.answer}</div>,\n }))}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * FeatureGrid — hairline-bordered capability grid (the \"Everything you need\"\n * and AI-capability sections). Cells share borders like a table of features.\n * ------------------------------------------------------------------------- */\n\nexport interface FeatureGridItem {\n id: string;\n title: ReactNode;\n body: ReactNode;\n icon?: ReactNode;\n}\n\nexport interface FeatureGridProps extends ComponentPropsWithoutRef<\"div\"> {\n items: FeatureGridItem[];\n columns?: 2 | 3 | 4;\n /** Tighter cells for dense capability lists. */\n dense?: boolean;\n}\n\nexport function FeatureGrid({\n items,\n columns = 3,\n dense = false,\n className,\n ...rest\n}: FeatureGridProps) {\n return (\n <div\n {...rest}\n className={cn(\n \"ods-mkt-features\",\n `ods-mkt-features--${columns}`,\n dense && \"ods-mkt-features--dense\",\n className,\n )}\n >\n {items.map((item) => (\n <article key={item.id} className=\"ods-mkt-features__cell\">\n {item.icon && (\n <span className=\"ods-mkt-features__icon\" aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n <h3 className=\"ods-mkt-features__title\">{item.title}</h3>\n <p className=\"ods-mkt-features__body\">{item.body}</p>\n </article>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport { CheckmarkIcon, SearchIcon } from \"@octaviaflow/icons\";\nimport { type FormEvent, type ReactNode, useMemo, useState } from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { Input } from \"../../../components/Input/Input\";\nimport { cn } from \"../../../utils/cn\";\nimport { isValidEmail } from \"../WorkflowShowcase/showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * IntegrationsFinder — the /integrations page section: searchable connector\n * gallery with category pills (+ counts), native-first ordering, a\n * \"universal\" badge for tools reachable through the open connectors (never\n * overclaim), and a request-a-connector form when the search misses.\n *\n * Data, brand icons and the request transport come from the consuming site;\n * items without an icon fall back to a neutral letter tile.\n * ------------------------------------------------------------------------- */\n\nexport interface IntegrationsFinderItem {\n name: string;\n category: string;\n /** \"native\" (real template, default) or \"universal\" (via open connectors). */\n kind?: \"native\" | \"universal\";\n /** Extra search terms. */\n aliases?: string[];\n /** Brand icon node. Omit for a letter tile. */\n icon?: ReactNode;\n}\n\nexport interface IntegrationsFinderProps {\n items: IntegrationsFinderItem[];\n /** Category pill order. Defaults to first-appearance order in `items`. */\n categories?: string[];\n searchPlaceholder?: string;\n /** Badge on universal entries. Default \"Open API\". */\n universalBadgeLabel?: ReactNode;\n /**\n * Request-a-connector submit ({ query, email }). Resolve → sent state,\n * throw → error hint. Omit to hide the request form on misses.\n */\n onRequestConnector?: (request: { query: string; email: string }) => Promise<void> | void;\n /** Fallback line under a failed request, e.g. a contact address. */\n requestErrorHint?: ReactNode;\n className?: string;\n}\n\nfunction LetterTile({ name }: { name: string }) {\n return (\n <span className=\"ods-mkt-finder__letter\" aria-hidden=\"true\">\n {name.trim().charAt(0).toUpperCase()}\n </span>\n );\n}\n\ntype RequestState = \"idle\" | \"sending\" | \"sent\" | \"error\";\n\nexport function IntegrationsFinder({\n items,\n categories,\n searchPlaceholder = \"Find your connector — search by name or category…\",\n universalBadgeLabel = \"Open API\",\n onRequestConnector,\n requestErrorHint = \"Couldn't send right now — please try again in a moment.\",\n className,\n}: IntegrationsFinderProps) {\n const [query, setQuery] = useState(\"\");\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const [email, setEmail] = useState(\"\");\n const [requestState, setRequestState] = useState<RequestState>(\"idle\");\n const [emailError, setEmailError] = useState(false);\n\n const pillCategories = useMemo(() => {\n if (categories?.length) return categories;\n const seen: string[] = [];\n for (const item of items) {\n if (!seen.includes(item.category)) seen.push(item.category);\n }\n return seen;\n }, [categories, items]);\n\n const counts = useMemo(() => {\n const map = new Map<string, number>();\n for (const item of items) map.set(item.category, (map.get(item.category) ?? 0) + 1);\n return map;\n }, [items]);\n\n const results = useMemo(() => {\n const q = query.trim().toLowerCase();\n let list = items;\n if (activeCategory) list = list.filter((c) => c.category === activeCategory);\n if (q) {\n list = list.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.category.toLowerCase().includes(q) ||\n c.aliases?.some((a) => a.toLowerCase().includes(q)),\n );\n }\n // Native connectors first, then alphabetical — the honest ordering.\n return [...list].sort((a, b) => {\n const aKind = a.kind ?? \"native\";\n const bKind = b.kind ?? \"native\";\n if (aKind !== bKind) return aKind === \"native\" ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n }, [items, query, activeCategory]);\n\n const handleRequest = async (event: FormEvent) => {\n event.preventDefault();\n if (!onRequestConnector || requestState === \"sending\") return;\n if (!isValidEmail(email)) {\n setEmailError(true);\n return;\n }\n setEmailError(false);\n setRequestState(\"sending\");\n try {\n await onRequestConnector({ query: query.trim(), email });\n setRequestState(\"sent\");\n } catch {\n setRequestState(\"error\");\n }\n };\n\n return (\n <div className={cn(\"ods-mkt-finder\", className)}>\n <div className=\"ods-mkt-finder__search\">\n <Input\n type=\"search\"\n aria-label=\"Search connectors\"\n placeholder={searchPlaceholder}\n leftIcon={<SearchIcon size=\"sm\" />}\n value={query}\n onChange={(e) => {\n setQuery(e.target.value);\n setRequestState(\"idle\");\n }}\n />\n </div>\n\n <fieldset className=\"ods-mkt-finder__pills\" aria-label=\"Connector categories\">\n <button\n type=\"button\"\n className={cn(\n \"ods-mkt-finder__pill\",\n activeCategory === null && \"ods-mkt-finder__pill--active\",\n )}\n onClick={() => setActiveCategory(null)}\n >\n All <span className=\"ods-mkt-finder__count\">{items.length}</span>\n </button>\n {pillCategories.map((category) => (\n <button\n key={category}\n type=\"button\"\n className={cn(\n \"ods-mkt-finder__pill\",\n activeCategory === category && \"ods-mkt-finder__pill--active\",\n )}\n onClick={() => setActiveCategory(activeCategory === category ? null : category)}\n >\n {category} <span className=\"ods-mkt-finder__count\">{counts.get(category) ?? 0}</span>\n </button>\n ))}\n </fieldset>\n\n {results.length > 0 ? (\n <div className=\"ods-mkt-finder__grid\">\n {results.map((item) => (\n <div key={item.name} className=\"ods-mkt-finder__card\">\n <span className=\"ods-mkt-finder__card-icon\" aria-hidden=\"true\">\n {item.icon ?? <LetterTile name={item.name} />}\n </span>\n <span className=\"ods-mkt-finder__card-name\">{item.name}</span>\n {(item.kind ?? \"native\") === \"universal\" && (\n <span className=\"ods-mkt-finder__badge\">{universalBadgeLabel}</span>\n )}\n </div>\n ))}\n </div>\n ) : (\n <div className=\"ods-mkt-finder__miss\">\n {requestState === \"sent\" ? (\n <p className=\"ods-mkt-finder__sent\" role=\"status\">\n <CheckmarkIcon size=\"sm\" aria-hidden=\"true\" /> Got it — we'll let you know when a{\" \"}\n <strong>{query.trim()}</strong> connector is available.\n </p>\n ) : (\n <>\n <h3 className=\"ods-mkt-finder__miss-title\">\n No native <strong>{query.trim()}</strong> connector yet\n </h3>\n <p className=\"ods-mkt-finder__miss-body\">\n Our universal open connectors likely cover it today — and we build native connectors\n on request. {onRequestConnector && \"Leave your email and we'll notify you.\"}\n </p>\n {onRequestConnector && (\n <form className=\"ods-mkt-finder__miss-form\" onSubmit={handleRequest} noValidate>\n <Input\n type=\"email\"\n aria-label=\"Work email for connector request\"\n placeholder=\"you@company.com\"\n value={email}\n error={emailError}\n errorMessage={emailError ? \"Please enter a valid work email.\" : undefined}\n onChange={(e) => {\n setEmail(e.target.value);\n setEmailError(false);\n }}\n />\n <Button type=\"submit\" variant=\"primary\" loading={requestState === \"sending\"}>\n Request connector\n </Button>\n </form>\n )}\n {requestState === \"error\" && (\n <p className=\"ods-mkt-finder__miss-error\" role=\"alert\">\n {requestErrorHint}\n </p>\n )}\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * IntegrationsWall — the homepage integrations section: a grid of category\n * cards (icon + category name + connector name pills) with a footnote.\n * Mirrors the real site's structure; the consuming site passes category\n * icons and real connector names. For the searchable /integrations page,\n * use IntegrationsFinder instead.\n * ------------------------------------------------------------------------- */\n\nexport interface IntegrationsWallItem {\n name: string;\n /** Optional per-pill brand icon. */\n icon?: ReactNode;\n}\n\nexport interface IntegrationsWallCategory {\n id: string;\n label: ReactNode;\n /** Category icon in the card header. */\n icon?: ReactNode;\n items: IntegrationsWallItem[];\n}\n\nexport interface IntegrationsWallProps extends ComponentPropsWithoutRef<\"div\"> {\n categories: IntegrationsWallCategory[];\n /** Mono footnote under the wall. */\n footnote?: ReactNode;\n columns?: 2 | 3;\n}\n\nexport function IntegrationsWall({\n categories,\n footnote,\n columns = 3,\n className,\n ...rest\n}: IntegrationsWallProps) {\n return (\n <div {...rest} className={cn(\"ods-mkt-wall\", className)}>\n <div className={cn(\"ods-mkt-wall__grid\", `ods-mkt-wall__grid--${columns}`)}>\n {categories.map((category) => (\n <div key={category.id} className=\"ods-mkt-wall__card\">\n <div className=\"ods-mkt-wall__card-head\">\n {category.icon && (\n <span className=\"ods-mkt-wall__card-icon\" aria-hidden=\"true\">\n {category.icon}\n </span>\n )}\n <h3 className=\"ods-mkt-wall__card-label\">{category.label}</h3>\n </div>\n <div className=\"ods-mkt-wall__pills\">\n {category.items.map((item) => (\n <span key={item.name} className=\"ods-mkt-wall__pill\">\n {item.icon && (\n <span className=\"ods-mkt-wall__pill-icon\" aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n {item.name}\n </span>\n ))}\n </div>\n </div>\n ))}\n </div>\n {footnote && <p className=\"ods-mkt-wall__footnote\">{footnote}</p>}\n </div>\n );\n}\n","\"use client\";\n\nimport { CheckmarkIcon, CloseIcon } from \"@octaviaflow/icons\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { Spinner } from \"../../../components/Spinner/Spinner\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * LiveConsole — the \"orders_pipeline · production\" terminal card: a mono log\n * of pipeline steps with staggered reveal and per-line state icons.\n *\n * State icons are real DS glyphs, not text characters: check (done), the DS\n * Spinner (running), a dashed pending circle (queued) and a cross (error) —\n * all in a fixed-width rail so labels align like a real console.\n * ------------------------------------------------------------------------- */\n\nexport type LiveConsoleState = \"done\" | \"running\" | \"queued\" | \"error\";\n\nexport interface LiveConsoleLine {\n id: string;\n /** Step label, e.g. \"warehouse.load\". */\n label: ReactNode;\n /** Trailing detail, e.g. \"— 14,204 rows · 1.2s\". */\n detail?: ReactNode;\n state?: LiveConsoleState;\n}\n\nexport interface LiveConsoleProps extends Omit<ComponentPropsWithoutRef<\"div\">, \"title\"> {\n /** Header label, e.g. \"orders_pipeline · production\". */\n title: ReactNode;\n /** Header badge. Defaults to \"LIVE\". Pass null to hide. */\n badge?: ReactNode;\n lines: LiveConsoleLine[];\n /** Staggered line reveal (disabled automatically for reduced motion). */\n animated?: boolean;\n}\n\n/** Dashed circle — \"queued/pending\", matching the flow editor's vocabulary. */\nfunction PendingGlyph() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"13\"\n height=\"13\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.4\"\n strokeLinecap=\"round\"\n strokeDasharray=\"3.5 3.5\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n </svg>\n );\n}\n\nfunction StateGlyph({ state }: { state: LiveConsoleState }) {\n switch (state) {\n case \"done\":\n return <CheckmarkIcon size=\"sm\" aria-hidden=\"true\" />;\n case \"running\":\n return <Spinner size=\"sm\" />;\n case \"error\":\n return <CloseIcon size=\"sm\" aria-hidden=\"true\" />;\n case \"queued\":\n return <PendingGlyph />;\n }\n}\n\nexport function LiveConsole({\n title,\n badge = \"LIVE\",\n lines,\n animated = true,\n className,\n ...rest\n}: LiveConsoleProps) {\n return (\n <div {...rest} className={cn(\"ods-mkt-console\", className)}>\n <div className=\"ods-mkt-console__head\">\n <span className=\"ods-mkt-console__title\">{title}</span>\n {badge != null && (\n <span className=\"ods-mkt-console__badge\">\n <span className=\"ods-mkt-console__dot\" />\n {badge}\n </span>\n )}\n </div>\n <div className=\"ods-mkt-console__body\">\n {lines.map((line, i) => {\n const state = line.state ?? \"done\";\n return (\n <div\n key={line.id}\n className={cn(\"ods-mkt-console__line\", animated && \"ods-mkt-console__line--animated\")}\n style={animated ? { animationDelay: `${0.3 + i * 0.6}s` } : undefined}\n >\n <span\n className={cn(\"ods-mkt-console__glyph\", `ods-mkt-console__glyph--${state}`)}\n aria-hidden=\"true\"\n >\n <StateGlyph state={state} />\n </span>\n <span className=\"ods-mkt-console__text\">\n <span className=\"ods-mkt-console__label\">{line.label}</span>\n {line.detail && (\n <span\n className={cn(\n \"ods-mkt-console__detail\",\n state === \"running\" && \"ods-mkt-console__detail--running\",\n state === \"error\" && \"ods-mkt-console__detail--error\",\n )}\n >\n {\" \"}\n {line.detail}\n </span>\n )}\n </span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * LogoMarquee — social-proof strip. Logos (or text wordmarks) scroll in a\n * seamless loop; the track is duplicated once (second copy aria-hidden) so\n * the animation wraps without a gap. Reduced-motion visitors get a static\n * wrapped row. The consuming site passes real logos via `icon`.\n * ------------------------------------------------------------------------- */\n\nexport interface LogoMarqueeItem {\n id: string;\n label: string;\n /** Logo mark. Omit for a plain text wordmark chip. */\n icon?: ReactNode;\n}\n\nexport interface LogoMarqueeProps extends ComponentPropsWithoutRef<\"div\"> {\n items: LogoMarqueeItem[];\n /** Mono microcopy above the strip, e.g. \"TRUSTED BY DATA TEAMS AT\". */\n label?: ReactNode;\n /** Seconds per full loop. Default 30. */\n speed?: number;\n /** Desaturate logos until hover. Default true. */\n grayscale?: boolean;\n}\n\nfunction Track({ items, hidden }: { items: LogoMarqueeItem[]; hidden?: boolean }) {\n return (\n <div className=\"ods-mkt-marquee__track\" aria-hidden={hidden || undefined}>\n {items.map((item) => (\n <span key={item.id} className=\"ods-mkt-marquee__logo\" title={item.label}>\n {item.icon ?? <span className=\"ods-mkt-marquee__wordmark\">{item.label}</span>}\n </span>\n ))}\n </div>\n );\n}\n\nexport function LogoMarquee({\n items,\n label,\n speed = 30,\n grayscale = true,\n className,\n ...rest\n}: LogoMarqueeProps) {\n return (\n <div\n {...rest}\n className={cn(\"ods-mkt-marquee\", grayscale && \"ods-mkt-marquee--gray\", className)}\n >\n {label && <p className=\"ods-mkt-marquee__label\">{label}</p>}\n <div className=\"ods-mkt-marquee__viewport\">\n <div className=\"ods-mkt-marquee__rail\" style={{ animationDuration: `${speed}s` }}>\n <Track items={items} />\n <Track items={items} hidden />\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport type { WorkflowShowcaseRole } from \"./components/WorkflowShowcase/showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * Marketing glyphs — small stroke icons used as default \"app icon\" tiles\n * across the marketing subsystem (showcase cubes/chips, integration walls).\n *\n * Kept lucide-compatible (24×24 viewBox, stroke-based, currentColor) for\n * visual harmony with the rest of the design system. Consumers pass real\n * brand icons via each component's `icon` slot; these are the neutral\n * fallbacks so nothing ever renders as a bare letter pair.\n * ------------------------------------------------------------------------- */\n\ninterface GlyphProps {\n size?: number;\n}\n\nconst base = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n};\n\n/** Database cylinder — data sources. */\nexport function SourceGlyph({ size = 12 }: GlyphProps) {\n return (\n <svg {...base} width={size} height={size} aria-hidden=\"true\">\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v14a9 3 0 0 0 18 0V5\" />\n <path d=\"M3 12a9 3 0 0 0 18 0\" />\n </svg>\n );\n}\n\n/** Archive box — warehouses / destinations. */\nexport function DestinationGlyph({ size = 12 }: GlyphProps) {\n return (\n <svg {...base} width={size} height={size} aria-hidden=\"true\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"5\" rx=\"1\" />\n <path d=\"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8\" />\n <path d=\"M10 12h4\" />\n </svg>\n );\n}\n\n/** Bolt — downstream actions / triggers. */\nexport function ActionGlyph({ size = 12 }: GlyphProps) {\n return (\n <svg {...base} width={size} height={size} aria-hidden=\"true\">\n <path d=\"M13 2 3 14h9l-1 8 10-12h-9l1-8z\" />\n </svg>\n );\n}\n\n/** Chat bubble — notification targets. */\nexport function NotifyGlyph({ size = 12 }: GlyphProps) {\n return (\n <svg {...base} width={size} height={size} aria-hidden=\"true\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n );\n}\n\n/** Plug — generic integration/connector mark (integration walls). */\nexport function ConnectorGlyph({ size = 12 }: GlyphProps) {\n return (\n <svg {...base} width={size} height={size} aria-hidden=\"true\">\n <path d=\"M12 22v-5\" />\n <path d=\"M9 8V2M15 8V2\" />\n <path d=\"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8h12z\" />\n </svg>\n );\n}\n\n/** OctaviaFlow brand mark — square with a forward arrow. */\nexport function BrandMark({ size = 18 }: GlyphProps) {\n return (\n <svg viewBox=\"0 0 18 18\" width={size} height={size} aria-hidden=\"true\">\n <rect width=\"18\" height=\"18\" fill=\"var(--ods-accent)\" />\n <path d=\"M4 9h8.5M9.5 5.5 13 9l-3.5 3.5\" stroke=\"#fff\" strokeWidth=\"1.6\" fill=\"none\" />\n </svg>\n );\n}\n\nexport function roleGlyph(role: WorkflowShowcaseRole, size = 12): ReactNode {\n switch (role) {\n case \"source\":\n return <SourceGlyph size={size} />;\n case \"destination\":\n return <DestinationGlyph size={size} />;\n case \"action\":\n return <ActionGlyph size={size} />;\n case \"notify\":\n return <NotifyGlyph size={size} />;\n }\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { BrandMark } from \"../../glyphs\";\n\n/* ---------------------------------------------------------------------------\n * MarketingFooter — brand column + link columns + legal bar.\n * ------------------------------------------------------------------------- */\n\nexport interface MarketingFooterLink {\n label: ReactNode;\n href: string;\n}\n\nexport interface MarketingFooterColumn {\n id: string;\n label: ReactNode;\n links: MarketingFooterLink[];\n}\n\nexport interface MarketingFooterProps extends ComponentPropsWithoutRef<\"footer\"> {\n /** Brand slot. Defaults to the OctaviaFlow mark + wordmark. */\n brand?: ReactNode;\n /** Short positioning line under the brand. */\n tagline?: ReactNode;\n /** Extra brand-column content (contact email, status link…). */\n meta?: ReactNode;\n columns?: MarketingFooterColumn[];\n /**\n * Newsletter / stay-in-the-loop slot rendered in the brand column —\n * typically `<BetaAccessForm appearance=\"inline\" …/>`.\n */\n newsletter?: ReactNode;\n /** Left side of the bottom bar, e.g. \"© 2026 OctaviaFlow\". */\n legal?: ReactNode;\n /** Right side of the bottom bar, e.g. social handles. */\n social?: ReactNode;\n}\n\nexport function MarketingFooter({\n brand,\n tagline,\n meta,\n columns = [],\n newsletter,\n legal,\n social,\n className,\n ...rest\n}: MarketingFooterProps) {\n return (\n <footer {...rest} className={cn(\"ods-mkt-footer\", className)}>\n <div className=\"ods-mkt-footer__grid\">\n <div className=\"ods-mkt-footer__brand-col\">\n <div className=\"ods-mkt-footer__brand\">\n {brand ?? (\n <>\n <BrandMark size={16} />\n <span>OctaviaFlow</span>\n </>\n )}\n </div>\n {tagline && <p className=\"ods-mkt-footer__tagline\">{tagline}</p>}\n {meta && <div className=\"ods-mkt-footer__meta\">{meta}</div>}\n {newsletter && <div className=\"ods-mkt-footer__newsletter\">{newsletter}</div>}\n </div>\n {columns.map((column) => (\n <nav key={column.id} className=\"ods-mkt-footer__col\" aria-label={String(column.id)}>\n <span className=\"ods-mkt-footer__col-label\">{column.label}</span>\n {column.links.map((link) => (\n <a key={link.href} className=\"ods-mkt-footer__link\" href={link.href}>\n {link.label}\n </a>\n ))}\n </nav>\n ))}\n </div>\n {(legal || social) && (\n <div className=\"ods-mkt-footer__bar\">\n <span>{legal}</span>\n <span>{social}</span>\n </div>\n )}\n </footer>\n );\n}\n","\"use client\";\n\nimport { motion, useReducedMotion } from \"framer-motion\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * MarketingHero — the opening band: kicker, word-by-word animated display\n * headline, lede, then a free slot (typically the WorkflowShowcase).\n * ------------------------------------------------------------------------- */\n\nexport interface MarketingHeroProps extends Omit<ComponentPropsWithoutRef<\"section\">, \"title\"> {\n /** Mono eyebrow, e.g. \"AI-NATIVE PLATFORM — PRIVATE BETA\". */\n kicker?: ReactNode;\n /** Plain-string headline — split into words for the rise animation. */\n title: string;\n lede?: ReactNode;\n align?: \"start\" | \"center\";\n}\n\nexport function MarketingHero({\n kicker,\n title,\n lede,\n align = \"center\",\n className,\n children,\n ...rest\n}: MarketingHeroProps) {\n const reducedMotion = useReducedMotion();\n const words = title.split(/\\s+/).filter(Boolean);\n\n return (\n <section\n {...rest}\n className={cn(\"ods-mkt-hero\", align === \"center\" && \"ods-mkt-hero--center\", className)}\n >\n {kicker && <p className=\"ods-mkt-hero__kicker\">{kicker}</p>}\n <h1 className=\"ods-mkt-hero__title\">\n {words.map((word, i) => (\n <span\n className=\"ods-mkt-hero__word-clip\"\n // biome-ignore lint/suspicious/noArrayIndexKey: words are positional\n key={i}\n >\n <motion.span\n className=\"ods-mkt-hero__word\"\n initial={reducedMotion ? false : { opacity: 0, y: \"100%\" }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n duration: 0.7,\n delay: 0.05 + i * 0.08,\n ease: [0.2, 0.7, 0.2, 1],\n }}\n >\n {word}\n </motion.span>{\" \"}\n </span>\n ))}\n </h1>\n {lede && (\n <motion.p\n className=\"ods-mkt-hero__lede\"\n initial={reducedMotion ? false : { opacity: 0, y: 12 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.8, delay: 0.6, ease: [0.2, 0.7, 0.2, 1] }}\n >\n {lede}\n </motion.p>\n )}\n {children && (\n <motion.div\n className=\"ods-mkt-hero__body\"\n initial={reducedMotion ? false : { opacity: 0, y: 12 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.8, delay: 0.75, ease: [0.2, 0.7, 0.2, 1] }}\n >\n {children}\n </motion.div>\n )}\n </section>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { BrandMark } from \"../../glyphs\";\n\n/* ---------------------------------------------------------------------------\n * MarketingNav — sticky top navigation for the marketing site.\n * Brand · links · right-aligned actions, with a hamburger + slide-down panel\n * on small screens so mobile visitors keep full navigation.\n * ------------------------------------------------------------------------- */\n\nexport interface MarketingNavLink {\n label: ReactNode;\n href: string;\n active?: boolean;\n}\n\nexport interface MarketingNavProps extends ComponentPropsWithoutRef<\"header\"> {\n /** Brand slot. Defaults to the OctaviaFlow mark + wordmark. */\n brand?: ReactNode;\n brandHref?: string;\n links?: MarketingNavLink[];\n /** Right side: login links, CTA buttons — consumer-provided. */\n actions?: ReactNode;\n sticky?: boolean;\n}\n\nfunction BurgerGlyph({ open }: { open: boolean }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n >\n {open ? <path d=\"M6 6l12 12M18 6 6 18\" /> : <path d=\"M4 7h16M4 12h16M4 17h16\" />}\n </svg>\n );\n}\n\nexport function MarketingNav({\n brand,\n brandHref = \"/\",\n links = [],\n actions,\n sticky = true,\n className,\n ...rest\n}: MarketingNavProps) {\n const [mobileOpen, setMobileOpen] = useState(false);\n\n return (\n <header {...rest} className={cn(\"ods-mkt-nav\", sticky && \"ods-mkt-nav--sticky\", className)}>\n <a className=\"ods-mkt-nav__brand\" href={brandHref}>\n {brand ?? (\n <>\n <BrandMark />\n <span>OctaviaFlow</span>\n </>\n )}\n </a>\n {links.length > 0 && (\n <nav className=\"ods-mkt-nav__links\" aria-label=\"Main\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className={cn(\"ods-mkt-nav__link\", link.active && \"ods-mkt-nav__link--active\")}\n aria-current={link.active ? \"page\" : undefined}\n >\n {link.label}\n </a>\n ))}\n </nav>\n )}\n {actions && <div className=\"ods-mkt-nav__actions\">{actions}</div>}\n\n {(links.length > 0 || actions) && (\n <button\n type=\"button\"\n className=\"ods-mkt-nav__toggle\"\n aria-expanded={mobileOpen}\n aria-label=\"Toggle menu\"\n onClick={() => setMobileOpen((open) => !open)}\n >\n <BurgerGlyph open={mobileOpen} />\n </button>\n )}\n\n {mobileOpen && (\n <nav className=\"ods-mkt-nav__mobile\" aria-label=\"Main\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className={cn(\n \"ods-mkt-nav__mobile-link\",\n link.active && \"ods-mkt-nav__mobile-link--active\",\n )}\n aria-current={link.active ? \"page\" : undefined}\n onClick={() => setMobileOpen(false)}\n >\n {link.label}\n </a>\n ))}\n {actions && <div className=\"ods-mkt-nav__mobile-actions\">{actions}</div>}\n </nav>\n )}\n </header>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * MarketingSection — the page-band primitive every marketing section sits in.\n * Kicker (mono microcopy) → display title → lede, then arbitrary children.\n * ------------------------------------------------------------------------- */\n\nexport interface MarketingSectionProps extends Omit<ComponentPropsWithoutRef<\"section\">, \"title\"> {\n /** Mono eyebrow above the title, e.g. \"PLATFORM\". */\n kicker?: ReactNode;\n title?: ReactNode;\n /** Lede paragraph under the title. */\n lede?: ReactNode;\n align?: \"start\" | \"center\";\n /** \"subtle\" gives the band a muted background. */\n tone?: \"default\" | \"subtle\";\n /** Remove the default top hairline (e.g. for the first section). */\n flushTop?: boolean;\n}\n\nexport function MarketingSection({\n kicker,\n title,\n lede,\n align = \"start\",\n tone = \"default\",\n flushTop = false,\n className,\n children,\n ...rest\n}: MarketingSectionProps) {\n return (\n <section\n {...rest}\n className={cn(\n \"ods-mkt-section\",\n align === \"center\" && \"ods-mkt-section--center\",\n tone === \"subtle\" && \"ods-mkt-section--subtle\",\n flushTop && \"ods-mkt-section--flush\",\n className,\n )}\n >\n {(kicker || title || lede) && (\n <header className=\"ods-mkt-section__head\">\n {kicker && <p className=\"ods-mkt-section__kicker\">{kicker}</p>}\n {title && <h2 className=\"ods-mkt-section__title\">{title}</h2>}\n {lede && <p className=\"ods-mkt-section__lede\">{lede}</p>}\n </header>\n )}\n {children}\n </section>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * PageHero — the inner-page opening shell (pricing, features, AI platform,\n * about…): kicker pill → h1 → subtitle, optionally a row of actions.\n * MarketingHero is the animated homepage opener; this is its calmer inner-\n * page counterpart.\n * ------------------------------------------------------------------------- */\n\nexport interface PageHeroProps extends Omit<ComponentPropsWithoutRef<\"header\">, \"title\"> {\n /** Kicker pill above the title, e.g. \"Pricing\". */\n kicker?: ReactNode;\n title: ReactNode;\n subtitle?: ReactNode;\n /** Optional action row under the subtitle. */\n actions?: ReactNode;\n align?: \"center\" | \"start\";\n}\n\nexport function PageHero({\n kicker,\n title,\n subtitle,\n actions,\n align = \"center\",\n className,\n ...rest\n}: PageHeroProps) {\n return (\n <header\n {...rest}\n className={cn(\"ods-mkt-pagehero\", align === \"start\" && \"ods-mkt-pagehero--start\", className)}\n >\n {kicker && <span className=\"ods-mkt-pagehero__kicker\">{kicker}</span>}\n <h1 className=\"ods-mkt-pagehero__title\">{title}</h1>\n {subtitle && <p className=\"ods-mkt-pagehero__subtitle\">{subtitle}</p>}\n {actions && <div className=\"ods-mkt-pagehero__actions\">{actions}</div>}\n </header>\n );\n}\n","\"use client\";\n\nimport { CheckmarkIcon } from \"@octaviaflow/icons\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * PricingTiers — the /pricing plan grid: tier cards with price, period,\n * annual note, feature checklist and per-tier CTA; the featured tier gets a\n * highlight ring and badge. Prices and copy come entirely from the consumer\n * (pricing is site policy, not design-system content).\n * ------------------------------------------------------------------------- */\n\nexport interface PricingTierCta {\n label: ReactNode;\n href?: string;\n onClick?: () => void;\n}\n\nexport interface PricingTier {\n id: string;\n name: ReactNode;\n /** Display price, e.g. \"$300\", \"Free\", \"Custom\". */\n price: ReactNode;\n /** Under the price, e.g. \"per month\", \"14-day trial\". */\n period?: ReactNode;\n /** e.g. \"Save 10% with annual billing\". */\n annualNote?: ReactNode;\n description?: ReactNode;\n features: ReactNode[];\n cta: PricingTierCta;\n featured?: boolean;\n /** Badge on the featured card. Default \"Recommended\". */\n badge?: ReactNode;\n}\n\nexport interface PricingTiersProps extends ComponentPropsWithoutRef<\"div\"> {\n tiers: PricingTier[];\n /** Footnote under the grid, e.g. the private-beta note. */\n note?: ReactNode;\n}\n\nfunction TierCta({ cta, featured }: { cta: PricingTierCta; featured: boolean }) {\n if (cta.href) {\n return (\n <a\n className={cn(\n \"ods-mkt-pricing__cta\",\n featured ? \"ods-mkt-pricing__cta--primary\" : \"ods-mkt-pricing__cta--secondary\",\n )}\n href={cta.href}\n onClick={cta.onClick}\n >\n {cta.label}\n </a>\n );\n }\n return (\n <Button variant={featured ? \"primary\" : \"secondary\"} fullWidth onClick={cta.onClick}>\n {cta.label}\n </Button>\n );\n}\n\nexport function PricingTiers({ tiers, note, className, ...rest }: PricingTiersProps) {\n return (\n <div {...rest} className={cn(\"ods-mkt-pricing\", className)}>\n <div className=\"ods-mkt-pricing__grid\">\n {tiers.map((tier) => (\n <article\n key={tier.id}\n className={cn(\n \"ods-mkt-pricing__card\",\n tier.featured && \"ods-mkt-pricing__card--featured\",\n )}\n >\n {tier.featured && (\n <span className=\"ods-mkt-pricing__badge\">{tier.badge ?? \"Recommended\"}</span>\n )}\n <h3 className=\"ods-mkt-pricing__name\">{tier.name}</h3>\n <div className=\"ods-mkt-pricing__price-row\">\n <span className=\"ods-mkt-pricing__price\">{tier.price}</span>\n {tier.period && <span className=\"ods-mkt-pricing__period\">{tier.period}</span>}\n </div>\n {tier.annualNote && <span className=\"ods-mkt-pricing__annual\">{tier.annualNote}</span>}\n {tier.description && <p className=\"ods-mkt-pricing__desc\">{tier.description}</p>}\n <ul className=\"ods-mkt-pricing__features\">\n {tier.features.map((feature, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: features are positional copy\n <li key={i} className=\"ods-mkt-pricing__feature\">\n <CheckmarkIcon size=\"sm\" aria-hidden=\"true\" />\n <span>{feature}</span>\n </li>\n ))}\n </ul>\n <TierCta cta={tier.cta} featured={Boolean(tier.featured)} />\n </article>\n ))}\n </div>\n {note && <p className=\"ods-mkt-pricing__note\">{note}</p>}\n </div>\n );\n}\n","\"use client\";\n\nimport { useReducedMotion } from \"framer-motion\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { CountUp } from \"../../../components/CountUp/CountUp\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * StatBand — big proof numbers (\"600+ CONNECTORS · 10× FASTER SETUP …\").\n * Numeric values count up on mount; strings render as-is.\n * ------------------------------------------------------------------------- */\n\nexport interface StatBandItem {\n id: string;\n /** Number → animated count-up; string → rendered verbatim (\"10×\"). */\n value: number | string;\n label: ReactNode;\n prefix?: string;\n suffix?: string;\n}\n\nexport interface StatBandProps extends ComponentPropsWithoutRef<\"div\"> {\n items: StatBandItem[];\n /** \"row\" = horizontal band; \"column\" = stacked rail (default). */\n orientation?: \"column\" | \"row\";\n}\n\nexport function StatBand({ items, orientation = \"column\", className, ...rest }: StatBandProps) {\n const reducedMotion = useReducedMotion();\n return (\n <div\n {...rest}\n className={cn(\"ods-mkt-statband\", `ods-mkt-statband--${orientation}`, className)}\n >\n {items.map((item) => (\n <div key={item.id} className=\"ods-mkt-statband__item\">\n <div className=\"ods-mkt-statband__value\">\n {typeof item.value === \"number\" ? (\n <CountUp\n value={item.value}\n duration={900}\n disableAnimation={Boolean(reducedMotion)}\n prefix={item.prefix}\n suffix={item.suffix}\n formatValue={(v) => Math.round(v).toLocaleString(\"en-US\")}\n />\n ) : (\n <>\n {item.prefix}\n {item.value}\n {item.suffix}\n </>\n )}\n </div>\n <div className=\"ods-mkt-statband__label\">{item.label}</div>\n </div>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { TestimonialCard } from \"../../../components/TestimonialCard/TestimonialCard\";\nimport { cn } from \"../../../utils/cn\";\n\n/* ---------------------------------------------------------------------------\n * TestimonialStrip — customer-proof grid composing the DS TestimonialCard.\n * Pair with MarketingSection for the kicker/title band.\n * ------------------------------------------------------------------------- */\n\nexport interface TestimonialStripItem {\n id: string;\n quote: ReactNode;\n author: {\n name: string;\n role?: ReactNode;\n /** Avatar spec forwarded to the DS Avatar primitive. */\n avatar?: { src?: string; initials?: string; alt?: string };\n };\n rating?: number;\n /** Customer company logo (top-right of the card). */\n logo?: ReactNode;\n}\n\nexport interface TestimonialStripProps extends ComponentPropsWithoutRef<\"div\"> {\n items: TestimonialStripItem[];\n columns?: 2 | 3;\n}\n\nexport function TestimonialStrip({\n items,\n columns = 3,\n className,\n ...rest\n}: TestimonialStripProps) {\n return (\n <div\n {...rest}\n className={cn(\"ods-mkt-testimonials\", `ods-mkt-testimonials--${columns}`, className)}\n >\n {items.map((item) => (\n <TestimonialCard\n key={item.id}\n quote={item.quote}\n author={item.author}\n rating={item.rating}\n logo={item.logo}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport { AnimatePresence, motion, useReducedMotion } from \"framer-motion\";\nimport {\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { CountUp } from \"../../../components/CountUp/CountUp\";\nimport { cn } from \"../../../utils/cn\";\nimport { roleGlyph } from \"../../glyphs\";\nimport { ShowcaseScene } from \"./ShowcaseScene\";\nimport { ShowcaseSignup } from \"./ShowcaseSignup\";\nimport {\n buildActivity,\n detectConnectors,\n isValidEmail,\n resolvePlan,\n SETTLED_PHASES,\n scheduleFromPrompt,\n segmentPrompt,\n WORKFLOW_SHOWCASE_DEFAULT_CONNECTORS,\n WORKFLOW_SHOWCASE_DEFAULT_EXAMPLES,\n WORKFLOW_SHOWCASE_DEFAULT_METRICS,\n WORKFLOW_SHOWCASE_DEFAULT_TILES,\n WORKFLOW_SHOWCASE_SCHEDULES,\n WORKFLOW_SHOWCASE_TRIGGERS,\n type WorkflowShowcaseConnector,\n type WorkflowShowcaseExample,\n type WorkflowShowcaseMetric,\n type WorkflowShowcasePhase,\n type WorkflowShowcasePlan,\n type WorkflowShowcaseSignupValues,\n} from \"./showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * WorkflowShowcase — the marketing-site \"prompt → live pipeline → signup\"\n * funnel, as one self-driving composition.\n *\n * A visitor types (or taps an example), watches Octavia recognize connectors\n * live, builds the workflow on an isometric canvas with real-feeling\n * telemetry, and converts through an in-canvas workspace form — without ever\n * leaving the hero. All product copy (connector catalog, examples, metrics)\n * is prop-driven; the defaults are deliberately vendor-neutral.\n * ------------------------------------------------------------------------- */\n\nexport interface WorkflowShowcaseBuildDetail {\n prompt: string;\n connectors: string[];\n schedule: string;\n /** Trigger mode at build time: SCHEDULE / WEBHOOK / APP EVENT / MANUAL. */\n trigger: string;\n}\n\nexport interface WorkflowShowcaseProps\n extends Omit<ComponentPropsWithoutRef<\"section\">, \"onSubmit\"> {\n /** Connector catalog to recognize/pick from. Vendor-neutral by default. */\n connectors?: WorkflowShowcaseConnector[];\n /** \"TRY:\" example chips. */\n examples?: WorkflowShowcaseExample[];\n /** Right-rail metric cards. */\n metrics?: WorkflowShowcaseMetric[];\n /** Pre-filled prompt text. */\n defaultPrompt?: string;\n /**\n * Auto-rotate through the example prompts while the visitor hasn't\n * engaged (idle phase, not hovering/focusing/edited). Ignored when\n * `defaultPrompt` is set. Default true.\n */\n rotatePrompts?: boolean;\n /** Mono label at the right edge of the toolbar. */\n modelLabel?: string;\n /** Mono label in the canvas header. */\n canvasLabel?: string;\n /** Header of the live activity rail. */\n railLabel?: string;\n /** Labels for the 8 platform tiles in the scene. */\n platformTiles?: readonly string[];\n /** Icon on the core cube. */\n coreIcon?: ReactNode;\n /** Catalog-size figure used in coach copy, e.g. \"600+\". */\n catalogNote?: string;\n /** Team-size choices in the signup form. */\n teamSizes?: string[];\n /** Domain used for the workspace-slug preview in the welcome card. */\n workspaceDomain?: string;\n dashboardHref?: string;\n onboardingHref?: string;\n /** Accessible label for the prompt textarea. */\n promptAriaLabel?: string;\n /** Fires when a build kicks off (analytics hook). */\n onBuild?: (detail: WorkflowShowcaseBuildDetail) => void;\n /** Fires on every phase transition (analytics hook). */\n onPhaseChange?: (phase: WorkflowShowcasePhase) => void;\n /**\n * Real signup handler. Resolve → welcome card; throw → inline error and\n * back to the form. Omit to simulate provisioning (pure demo mode).\n */\n onSignup?: (values: WorkflowShowcaseSignupValues) => Promise<void> | void;\n}\n\ninterface SwapState {\n name: string;\n /** Exact text the visitor typed (may be an alias) — what gets replaced. */\n text: string;\n x: number;\n y: number;\n}\n\nconst EMPTY_PLAN: WorkflowShowcasePlan = { left: [], right: [], all: [], totalSteps: 1 };\n\nfunction ConnectorTile({ connector }: { connector: WorkflowShowcaseConnector }) {\n // Decorative app tile — hidden so button names stay clean for AT.\n // Consumers pass real brand icons via `icon`; the fallback is a role glyph.\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\"ods-showcase__apptile\", `ods-showcase__apptile--${connector.role}`)}\n >\n {connector.icon ?? roleGlyph(connector.role)}\n </span>\n );\n}\n\nexport function WorkflowShowcase({\n connectors = WORKFLOW_SHOWCASE_DEFAULT_CONNECTORS,\n examples = WORKFLOW_SHOWCASE_DEFAULT_EXAMPLES,\n metrics = WORKFLOW_SHOWCASE_DEFAULT_METRICS,\n defaultPrompt = \"\",\n rotatePrompts = true,\n modelLabel = \"octavia-core-1\",\n canvasLabel = \"workflow_canvas\",\n railLabel = \"OCTAVIA IS DOING\",\n platformTiles = WORKFLOW_SHOWCASE_DEFAULT_TILES,\n coreIcon,\n catalogNote = \"600+\",\n teamSizes = [\"1–10\", \"11–50\", \"51–200\", \"200+\"],\n workspaceDomain = \"octaviaflow.com\",\n dashboardHref,\n onboardingHref = \"#\",\n promptAriaLabel = \"Describe your pipeline\",\n onBuild,\n onPhaseChange,\n onSignup,\n className,\n ...rest\n}: WorkflowShowcaseProps) {\n const reducedMotion = useReducedMotion();\n // Prefill with the first example so the hero never opens on an empty box;\n // rotation cycles through the rest until the visitor engages.\n const rotationActive = rotatePrompts && !defaultPrompt && examples.length > 0;\n const [prompt, setPrompt] = useState(\n defaultPrompt || (rotationActive ? (examples[0]?.prompt ?? \"\") : \"\"),\n );\n const [engagedWithPrompt, setEngagedWithPrompt] = useState(false);\n const [promptHovered, setPromptHovered] = useState(false);\n const [promptFocused, setPromptFocused] = useState(false);\n const rotateIdx = useRef(0);\n const [selected, setSelected] = useState<string[]>([]);\n const [phase, setPhase] = useState<WorkflowShowcasePhase>(\"idle\");\n const [shown, setShown] = useState(0);\n const [status, setStatus] = useState(\"\");\n const [pickerOpen, setPickerOpen] = useState(false);\n const [schedIdx, setSchedIdx] = useState(0);\n const [swap, setSwap] = useState<SwapState | null>(null);\n const [signupError, setSignupError] = useState<string | null>(null);\n // Where Back returns to — signup can open from the done CTA or the core.\n const signupReturnPhase = useRef<WorkflowShowcasePhase>(\"done\");\n\n const cardRef = useRef<HTMLDivElement>(null);\n const timers = useRef<ReturnType<typeof setTimeout>[]>([]);\n const clearTimers = useCallback(() => {\n for (const t of timers.current) clearTimeout(t);\n timers.current = [];\n }, []);\n useEffect(() => clearTimers, [clearTimers]);\n // Compress the choreography (not the content) when the visitor prefers\n // reduced motion — they still see every step, just sooner.\n const tempo = reducedMotion ? 0.35 : 1;\n const at = useCallback(\n (ms: number, fn: () => void) => {\n timers.current.push(setTimeout(fn, ms * tempo));\n },\n [tempo],\n );\n\n const firstPhase = useRef(true);\n useEffect(() => {\n if (firstPhase.current) {\n firstPhase.current = false;\n return;\n }\n onPhaseChange?.(phase);\n }, [phase, onPhaseChange]);\n\n // Render-time mirror of `phase` so callbacks that reset + immediately\n // rebuild (example chips) never read a stale \"building\" and bail out.\n const phaseRef = useRef(phase);\n phaseRef.current = phase;\n\n const byName = useMemo(() => new Map(connectors.map((c) => [c.name, c])), [connectors]);\n const detected = useMemo(() => detectConnectors(prompt, connectors), [prompt, connectors]);\n const union = useMemo(() => [...new Set([...selected, ...detected])], [selected, detected]);\n const settled = SETTLED_PHASES.includes(phase);\n const engaged = phase !== \"idle\";\n const buildingNow = phase === \"analyzing\" || phase === \"building\";\n\n /** Partition currently-selected connectors into scene sides (no backfill). */\n const plan = useMemo<WorkflowShowcasePlan>(() => {\n if (!selected.length) return EMPTY_PLAN;\n return resolvePlan(selected, [], connectors);\n }, [selected, connectors]);\n\n /* ── schedule ──────────────────────────────────────────────────────── */\n const schedules = WORKFLOW_SHOWCASE_SCHEDULES;\n const inferredSchedule = scheduleFromPrompt(prompt);\n const manualSchedule = schedules[schedIdx];\n const scheduleShown = inferredSchedule ?? (manualSchedule === \"AUTO\" ? \"HOURLY\" : manualSchedule);\n\n /* ── trigger mode (schedule / webhook / app event / manual) ────────── */\n const triggers = WORKFLOW_SHOWCASE_TRIGGERS;\n const [triggerIdx, setTriggerIdx] = useState(0);\n const manualTrigger = triggers[triggerIdx];\n // What the coach line shows as the cadence: the schedule when the trigger\n // is time-based, otherwise the trigger mode itself.\n const cadenceShown = manualTrigger === \"SCHEDULE\" ? scheduleShown : manualTrigger;\n\n /* ── idle prompt rotation ──────────────────────────────────────────── */\n // Rotate example prompts while nobody is engaging; stop the instant the\n // visitor hovers, focuses, or edits — the box is theirs from then on.\n useEffect(() => {\n if (\n !rotationActive ||\n engagedWithPrompt ||\n promptHovered ||\n promptFocused ||\n phase !== \"idle\"\n ) {\n return;\n }\n const timer = setInterval(() => {\n rotateIdx.current = (rotateIdx.current + 1) % examples.length;\n setPrompt(examples[rotateIdx.current].prompt);\n }, 4200);\n return () => clearInterval(timer);\n }, [rotationActive, engagedWithPrompt, promptHovered, promptFocused, phase, examples]);\n\n /* ── build choreography ────────────────────────────────────────────── */\n const startBuild = useCallback(\n (text: string, baseSelected: string[]) => {\n if (phaseRef.current === \"analyzing\" || phaseRef.current === \"building\") return;\n phaseRef.current = \"analyzing\";\n clearTimers();\n const resolved = resolvePlan(baseSelected, detectConnectors(text, connectors), connectors);\n const target = resolved.all.map((c) => c.name);\n const additions = target.filter((n) => !baseSelected.includes(n));\n setPrompt(text);\n setSelected(baseSelected);\n setPhase(\"analyzing\");\n setShown(0);\n setStatus(\"analyzing request · matching connectors\");\n setPickerOpen(false);\n setSwap(null);\n onBuild?.({\n prompt: text,\n connectors: target,\n schedule: scheduleShown,\n trigger: manualTrigger,\n });\n additions.forEach((name, i) => {\n at(250 + i * 200, () => setSelected((s) => (s.includes(name) ? s : [...s, name])));\n });\n const t0 = 250 + additions.length * 200;\n at(t0 + 750, () => setStatus(\"wiring transforms · adding error handling\"));\n at(t0 + 1500, () => {\n setPhase(\"building\");\n setStatus(\"assembling workflow · optimizing plan\");\n });\n for (let i = 0; i < resolved.totalSteps; i++) {\n at(t0 + 1600 + i * 380, () => setShown(i + 1));\n }\n at(t0 + 1600 + resolved.totalSteps * 380 + 350, () => setPhase(\"done\"));\n },\n [clearTimers, connectors, onBuild, scheduleShown, manualTrigger, at],\n );\n\n const resetToIdle = useCallback(() => {\n clearTimers();\n phaseRef.current = \"idle\";\n setPhase(\"idle\");\n setShown(0);\n setStatus(\"\");\n setSwap(null);\n }, [clearTimers]);\n\n const toggleConnector = (name: string) => {\n resetToIdle();\n setSelected((s) => (s.includes(name) ? s.filter((n) => n !== name) : [...s, name]));\n };\n\n const runExample = (example: WorkflowShowcaseExample) => {\n resetToIdle();\n startBuild(example.prompt, []);\n };\n\n /* ── swap menu ─────────────────────────────────────────────────────── */\n const openSwap = (name: string, text: string, anchor: HTMLElement) => {\n const card = cardRef.current;\n if (!card) return;\n const r = anchor.getBoundingClientRect();\n const cr = card.getBoundingClientRect();\n const x = Math.max(8, Math.min(r.left - cr.left, cr.width - 264));\n setSwap({ name, text, x, y: r.bottom - cr.top + 6 });\n };\n const doSwap = (current: SwapState, next: string) => {\n resetToIdle();\n const re = new RegExp(current.text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"), \"i\");\n setPrompt((p) => p.replace(re, next));\n setSelected((s) => s.map((n) => (n === current.name ? next : n)));\n };\n const swapRole = swap ? byName.get(swap.name)?.role : undefined;\n const swapItems = swapRole ? connectors.filter((c) => c.role === swapRole) : [];\n\n /* ── coach line ────────────────────────────────────────────────────── */\n const roles = union.map((n) => byName.get(n)?.role);\n const hasSource = roles.includes(\"source\");\n const hasSink = roles.some((r) => r && r !== \"source\");\n const hasNotify = roles.includes(\"notify\");\n let coachLine: string;\n let coachAdds: WorkflowShowcaseConnector[] = [];\n const notIn = (c: WorkflowShowcaseConnector) => !union.includes(c.name);\n if (!union.length) {\n coachLine = prompt\n ? \"LISTENING… CONNECTOR NAMES LIGHT UP AS OCTAVIA RECOGNIZES THEM\"\n : `OCTAVIA MATCHES CONNECTORS LIVE AS YOU TYPE — OR PICK FROM ${catalogNote}`;\n } else if (union.length >= connectors.length) {\n coachLine =\n \"FULL STACK — OCTAVIA SPLITS THIS INTO PARALLEL INGEST → AI TRANSFORM → SEQUENCED ACTIONS\";\n } else if (union.length >= 6) {\n coachLine = `BIG STACK — ${union.length} CONNECTORS FAN OUT ACROSS PARALLEL BRANCHES · COST OPTIMIZER ON`;\n } else if (hasSource && !hasSink) {\n coachLine = \"SOURCES WIRED — WHERE SHOULD THE DATA LAND?\";\n coachAdds = connectors.filter((c) => c.role === \"destination\" && notIn(c)).slice(0, 2);\n } else if (!hasSource && hasSink) {\n coachLine = \"DESTINATION SET — WHAT SHOULD OCTAVIA PULL FROM?\";\n coachAdds = connectors.filter((c) => c.role === \"source\" && notIn(c)).slice(0, 2);\n } else if (!hasNotify) {\n coachLine = `✓ ${union.length} CONNECTORS · ${cadenceShown} · TIP: ALERT YOUR TEAM WHEN RUNS FINISH`;\n coachAdds = connectors.filter((c) => c.role === \"notify\" && notIn(c)).slice(0, 1);\n } else {\n coachLine = `✓ ${union.length} CONNECTORS · ${cadenceShown} · CLICK A HIGHLIGHTED NAME TO SWAP IT`;\n }\n const coachTone = union.length ? (hasSource && hasSink ? \"success\" : \"accent\") : \"muted\";\n\n /* ── canvas derived state ──────────────────────────────────────────── */\n const badge = settled\n ? { label: \"LIVE\", tone: \"success\" as const, pulse: true }\n : buildingNow\n ? {\n label: phase === \"analyzing\" ? \"ANALYZING\" : \"BUILDING\",\n tone: \"accent\" as const,\n pulse: true,\n }\n : { label: \"IDLE\", tone: \"muted\" as const, pulse: false };\n const canvasSub = settled ? \"production\" : buildingNow ? \"generating\" : \"draft\";\n const sceneCaption = settled\n ? \"PIPELINE LIVE · SQUARES = ROWS IN FLIGHT\"\n : phase === \"building\"\n ? \"ASSEMBLING WORKFLOW…\"\n : phase === \"analyzing\"\n ? \"ANALYZING REQUEST…\"\n : \"CLICK THE CORE · CONNECTORS LAND AS CUBES\";\n\n const activity = buildActivity({ phase, shown, plan, selected, status });\n const costMetric = metrics.find((m) => m.tone === \"success\");\n const costLabel = costMetric\n ? `${costMetric.prefix ?? \"\"}${costMetric.value}${costMetric.suffix ?? \"\"}`\n : \"\";\n const railFoot =\n phase === \"idle\"\n ? `${catalogNote} CONNECTORS · FREE IN PRIVATE BETA`\n : settled\n ? `COST PLAN SELECTED · ${costLabel} SAVED`\n : \"COST OPTIMIZER RUNNING…\";\n\n const nLeft = plan.left.length;\n const sceneLeft = plan.left.map((c, i) => ({\n connector: c,\n active: engaged && (settled || shown > i),\n }));\n const sceneRight = plan.right.map((c, j) => ({\n connector: c,\n active: engaged && (settled || shown > nLeft + 1 + j),\n }));\n\n const stepCount = (selected.length || 3) + 1;\n const doneNote = costMetric\n ? `${stepCount}-step workflow generated · cost optimizer: ${costMetric.value}% below baseline`\n : `${stepCount}-step workflow generated`;\n\n /* ── signup ────────────────────────────────────────────────────────── */\n const submitSignup = (values: WorkflowShowcaseSignupValues) => {\n if (!values.name.trim() || !isValidEmail(values.email)) {\n setSignupError(\"Please enter your name and a valid work email.\");\n return;\n }\n setSignupError(null);\n setPhase(\"creating\");\n const finish = () => setPhase(\"welcome\");\n const fail = () => {\n setSignupError(\"Something went wrong — please try again.\");\n setPhase(\"signup\");\n };\n if (!onSignup) {\n at(1600, finish);\n return;\n }\n try {\n const result = onSignup(values);\n if (result && typeof (result as Promise<void>).then === \"function\") {\n (result as Promise<void>).then(finish, fail);\n } else {\n finish();\n }\n } catch {\n fail();\n }\n };\n\n /* ── prompt rendering ──────────────────────────────────────────────── */\n const segments = segmentPrompt(prompt, connectors);\n const onPromptKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n startBuild(prompt, selected);\n }\n };\n\n const rise = (delay = 0) =>\n reducedMotion\n ? {}\n : {\n initial: { opacity: 0, y: 10 },\n animate: { opacity: 1, y: 0 },\n transition: { duration: 0.4, delay, ease: [0.2, 0.7, 0.2, 1] as const },\n };\n\n return (\n <section {...rest} className={cn(\"ods-showcase\", className)}>\n {/* ── prompt card ─────────────────────────────────────────────── */}\n <div\n ref={cardRef}\n className=\"ods-showcase__card\"\n onMouseEnter={() => setPromptHovered(true)}\n onMouseLeave={() => setPromptHovered(false)}\n >\n <div className=\"ods-showcase__prompt\">\n <textarea\n className=\"ods-showcase__prompt-input\"\n value={prompt}\n onChange={(e) => {\n setEngagedWithPrompt(true);\n setPrompt(e.target.value);\n }}\n onKeyDown={onPromptKeyDown}\n onFocus={() => setPromptFocused(true)}\n onBlur={() => setPromptFocused(false)}\n aria-label={promptAriaLabel}\n spellCheck={false}\n rows={2}\n />\n <div className=\"ods-showcase__prompt-render\" aria-hidden=\"true\">\n {prompt ? (\n segments.map((seg, i) =>\n seg.connector ? (\n <button\n // biome-ignore lint/suspicious/noArrayIndexKey: segments are positional by nature\n key={i}\n type=\"button\"\n tabIndex={-1}\n className={cn(\n \"ods-showcase__token\",\n `ods-showcase__token--${seg.connector.role}`,\n )}\n onClick={(e) => {\n const name = seg.connector?.name;\n if (name) openSwap(name, seg.text, e.currentTarget);\n }}\n >\n {/* Icon hides while editing so the overlay stays exactly\n caret-aligned with the transparent textarea text. */}\n {!promptFocused && <ConnectorTile connector={seg.connector} />}\n {seg.text}\n </button>\n ) : (\n // biome-ignore lint/suspicious/noArrayIndexKey: segments are positional by nature\n <span key={i}>{seg.text}</span>\n ),\n )\n ) : (\n <>\n <span className=\"ods-showcase__placeholder\">Describe your pipeline — e.g. </span>\n <span className=\"ods-showcase__placeholder ods-showcase__placeholder--faint\">\n \"Sync Storefront orders to Warehouse hourly, alert sales in Team Chat\"\n </span>\n </>\n )}\n </div>\n </div>\n\n <div className=\"ods-showcase__coach\">\n <span\n className={cn(\"ods-showcase__coach-line\", `ods-showcase__coach-line--${coachTone}`)}\n >\n {coachLine}\n </span>\n {coachAdds.map((c) => (\n <button\n key={c.name}\n type=\"button\"\n className=\"ods-showcase__coach-add\"\n onClick={() => toggleConnector(c.name)}\n >\n <ConnectorTile connector={c} />+ {c.name}\n </button>\n ))}\n </div>\n\n <AnimatePresence initial={false}>\n {pickerOpen && (\n <motion.div\n className=\"ods-showcase__picker\"\n initial={reducedMotion ? false : { opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: \"auto\" }}\n exit={reducedMotion ? { opacity: 0 } : { opacity: 0, height: 0 }}\n transition={{ duration: 0.22, ease: [0.2, 0.7, 0.2, 1] }}\n >\n <div className=\"ods-showcase__picker-row\">\n <span className=\"ods-showcase__microcopy\">CONNECTORS</span>\n {connectors.map((c) => (\n <button\n key={c.name}\n type=\"button\"\n className={cn(\n \"ods-showcase__pick\",\n selected.includes(c.name) && \"ods-showcase__pick--on\",\n )}\n aria-pressed={selected.includes(c.name)}\n onClick={() => toggleConnector(c.name)}\n >\n <ConnectorTile connector={c} />\n {c.name}\n </button>\n ))}\n <span className=\"ods-showcase__microcopy ods-showcase__microcopy--faint\">\n + {catalogNote} IN THE APP\n </span>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n <div className=\"ods-showcase__toolbar\">\n <button\n type=\"button\"\n className={cn(\n \"ods-showcase__tool\",\n (pickerOpen || selected.length > 0) && \"ods-showcase__tool--on\",\n )}\n aria-expanded={pickerOpen}\n onClick={() => setPickerOpen((o) => !o)}\n >\n + Connectors{selected.length ? ` · ${selected.length}` : \"\"}\n </button>\n <button\n type=\"button\"\n className={cn(\n \"ods-showcase__tool\",\n manualTrigger !== \"SCHEDULE\" && \"ods-showcase__tool--on\",\n )}\n onClick={() => setTriggerIdx((i) => (i + 1) % triggers.length)}\n >\n ⚑ {manualTrigger}\n </button>\n {manualTrigger === \"SCHEDULE\" && (\n <button\n type=\"button\"\n className=\"ods-showcase__tool\"\n onClick={() => setSchedIdx((i) => (i + 1) % schedules.length)}\n >\n ◷ {manualSchedule}\n </button>\n )}\n <span className=\"ods-showcase__model\">{modelLabel}</span>\n <Button\n variant=\"primary\"\n onClick={() => startBuild(prompt, selected)}\n disabled={buildingNow}\n >\n {buildingNow ? \"Building…\" : \"Build workflow →\"}\n </Button>\n </div>\n\n {swap && swapRole && (\n <>\n <button\n type=\"button\"\n className=\"ods-showcase__swap-backdrop\"\n aria-label=\"Close swap menu\"\n onClick={() => setSwap(null)}\n />\n <div\n className=\"ods-showcase__swap\"\n role=\"menu\"\n style={{ left: swap.x, top: swap.y }}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") setSwap(null);\n }}\n >\n <div className=\"ods-showcase__swap-head\">\n SWAP {swapRole.toUpperCase()} — {swap.name.toUpperCase()}\n </div>\n {swapItems.map((c) => (\n <button\n key={c.name}\n type=\"button\"\n role=\"menuitem\"\n className=\"ods-showcase__swap-item\"\n onClick={() => doSwap(swap, c.name)}\n >\n <ConnectorTile connector={c} />\n <span className=\"ods-showcase__swap-name\">{c.name}</span>\n {c.name === swap.name && (\n <span className=\"ods-showcase__swap-mark\">● CURRENT</span>\n )}\n </button>\n ))}\n <div className=\"ods-showcase__swap-foot\">{catalogNote} CONNECTORS IN THE APP</div>\n </div>\n </>\n )}\n </div>\n\n {/* ── example chips ───────────────────────────────────────────── */}\n <div className=\"ods-showcase__examples\">\n <span className=\"ods-showcase__microcopy\">TRY:</span>\n {examples.map((ex) => (\n <button\n key={ex.id}\n type=\"button\"\n className=\"ods-showcase__try\"\n onClick={() => runExample(ex)}\n >\n {ex.label}\n </button>\n ))}\n </div>\n\n {/* ── canvas ──────────────────────────────────────────────────── */}\n <div className=\"ods-showcase__canvas\">\n <div className=\"ods-showcase__canvas-head\">\n <span className=\"ods-showcase__microcopy\">\n {canvasLabel} · {canvasSub}\n </span>\n <span className={cn(\"ods-showcase__badge\", `ods-showcase__badge--${badge.tone}`)}>\n <span className={cn(\"ods-showcase__dot\", badge.pulse && \"ods-showcase__dot--pulse\")} />\n {badge.label}\n </span>\n </div>\n <div className=\"ods-showcase__stage\">\n <div className=\"ods-showcase__rail\">\n <div className=\"ods-showcase__rail-head\">\n <span className=\"ods-showcase__microcopy\">{railLabel}</span>\n <span\n className={cn(\"ods-showcase__dot\", badge.pulse && \"ods-showcase__dot--pulse\")}\n />\n </div>\n <div className=\"ods-showcase__rail-body\">\n <AnimatePresence initial={false}>\n {activity.map((line) => (\n <motion.div\n key={line.id}\n className={cn(\"ods-showcase__act\", `ods-showcase__act--${line.tone}`)}\n initial={reducedMotion ? false : { opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.25 }}\n >\n {line.text}\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n <div\n className={cn(\n \"ods-showcase__rail-foot\",\n settled && \"ods-showcase__rail-foot--done\",\n buildingNow && \"ods-showcase__rail-foot--active\",\n )}\n >\n {railFoot}\n </div>\n </div>\n\n <ShowcaseScene\n left={sceneLeft}\n right={sceneRight}\n engaged={engaged}\n tiles={platformTiles}\n coreIcon={coreIcon}\n caption={sceneCaption}\n onCoreClick={() => {\n // Second door into signup: clicking the core opens the same\n // workspace form as the CTA. Blocked mid-build so pending\n // phase timers can't stomp the overlay.\n if (\n buildingNow ||\n phase === \"signup\" ||\n phase === \"creating\" ||\n phase === \"welcome\"\n ) {\n return;\n }\n signupReturnPhase.current = phase;\n setSignupError(null);\n setPhase(\"signup\");\n }}\n />\n\n <div className=\"ods-showcase__metrics\">\n {metrics.map((m, idx) => {\n const revealed = settled || (phase === \"building\" && shown > idx);\n const interim = m.buildingValue != null && !settled && revealed;\n return (\n <div key={m.id} className=\"ods-showcase__metric\">\n <div\n className={cn(\n \"ods-showcase__metric-value\",\n !revealed && \"ods-showcase__metric-value--empty\",\n m.tone === \"success\" && settled && \"ods-showcase__metric-value--success\",\n )}\n >\n {settled ? (\n <CountUp\n value={m.value}\n from={m.buildingValue ?? 0}\n decimals={m.decimals ?? 0}\n duration={reducedMotion ? 0 : 900}\n disableAnimation={Boolean(reducedMotion)}\n prefix={m.prefix}\n formatValue={\n m.decimals ? undefined : (v) => Math.round(v).toLocaleString(\"en-US\")\n }\n />\n ) : interim ? (\n `${m.prefix ?? \"\"}${m.buildingValue}`\n ) : (\n \"—\"\n )}\n {revealed && m.suffix ? m.suffix : null}\n {revealed && m.unit ? (\n <span className=\"ods-showcase__metric-unit\"> {m.unit}</span>\n ) : null}\n </div>\n <div className=\"ods-showcase__microcopy\">{m.label}</div>\n </div>\n );\n })}\n </div>\n\n <ShowcaseSignup\n phase={phase}\n stepCount={stepCount}\n workspaceDomain={workspaceDomain}\n teamSizes={teamSizes}\n error={signupError}\n onSubmit={submitSignup}\n onBack={() => {\n setSignupError(null);\n setPhase(signupReturnPhase.current);\n }}\n dashboardHref={dashboardHref}\n onboardingHref={onboardingHref}\n />\n </div>\n </div>\n\n {/* ── status / CTA band ───────────────────────────────────────── */}\n <div className=\"ods-showcase__outro\" aria-live=\"polite\">\n {buildingNow && (\n <div className=\"ods-showcase__building\">\n <span className=\"ods-showcase__spin\" aria-hidden=\"true\">\n ⟳\n </span>{\" \"}\n {status}\n </div>\n )}\n {phase === \"done\" && (\n <div className=\"ods-showcase__done\">\n <motion.div className=\"ods-showcase__done-note\" {...rise(0)}>\n ✓ {doneNote}\n </motion.div>\n <motion.div className=\"ods-showcase__cta\" {...rise(0.2)}>\n <span className=\"ods-showcase__cta-copy\">\n Deploy it on your own data — takes 2 minutes.\n </span>\n <Button\n variant=\"primary\"\n onClick={() => {\n signupReturnPhase.current = \"done\";\n setSignupError(null);\n setPhase(\"signup\");\n }}\n >\n Create free account →\n </Button>\n <a className=\"ods-showcase__text-link\" href={onboardingHref}>\n Book onboarding →\n </a>\n </motion.div>\n </div>\n )}\n </div>\n </section>\n );\n}\n","\"use client\";\n\nimport { type CSSProperties, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { roleGlyph } from \"../../glyphs\";\nimport type { WorkflowShowcaseConnector } from \"./showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * ShowcaseScene — the isometric \"workflow assembling itself\" illustration.\n *\n * Pure presentation: an isometric platform of capability tiles with the\n * Octavia core at the center, connector cubes landing on each side, and\n * particles tracing the guide paths (\"squares = rows in flight\"). The whole\n * scene is decorative — it's aria-hidden and every fact it communicates is\n * also present in the activity rail + metrics, which are real DOM text.\n * ------------------------------------------------------------------------- */\n\nexport interface ShowcaseSceneNode {\n connector: WorkflowShowcaseConnector;\n /** Whether this node's step has completed (wires + particles light up). */\n active: boolean;\n}\n\nexport interface ShowcaseSceneProps {\n left: ShowcaseSceneNode[];\n right: ShowcaseSceneNode[];\n /** Any build/run motion is happening (analyzing → welcome). */\n engaged: boolean;\n /** Platform tile labels (8). */\n tiles: readonly string[];\n /** Center-of-platform icon — any node: glyph, image, 3D asset embed. */\n coreIcon?: ReactNode;\n caption: string;\n /** Fires alongside the particle pulse when the core is clicked. */\n onCoreClick?: () => void;\n}\n\n/** Vertical slot centers for n cubes on one side (matches guide geometry). */\nfunction slots(n: number): number[] {\n return Array.from({ length: n }, (_, i) => 208 + (i - (n - 1) / 2) * 80);\n}\n\n// Entry/exit lanes across the platform edge — the tile-row centers and the\n// gaps between tiles — so each connector's line routes through its own\n// channel instead of every wire converging on one point.\nconst LANES = [228, 190, 266, 152, 304];\nconst laneFor = (index: number) => LANES[index % LANES.length];\n\nconst leftGuide = (cy: number, lane: number) => `M74 ${cy} H150 V${lane} H193`;\nconst rightGuide = (cy: number, lane: number) => `M263 ${lane} H340 V${cy} H388`;\n\ninterface ParticleSpec {\n key: string;\n path: string;\n size: number;\n duration: string;\n delay: string;\n variant: \"lead\" | \"echo\" | \"spark\";\n}\n\nfunction particlesFor(\n side: \"l\" | \"r\",\n index: number,\n path: string,\n active: boolean,\n fast: boolean,\n): ParticleSpec[] {\n const base = index * 0.4 + (side === \"r\" ? 0.5 : 0);\n const duration = fast ? (active ? \"1.1s\" : \"2.6s\") : active ? \"2.2s\" : \"4.8s\";\n const size = active ? 8 : 6;\n const out: ParticleSpec[] = [\n { key: `${side}${index}-a`, path, size, duration, delay: `${base}s`, variant: \"lead\" },\n {\n key: `${side}${index}-b`,\n path,\n size,\n duration,\n delay: `${base + (active ? 1.1 : 2.4)}s`,\n variant: \"echo\",\n },\n ];\n if (active) {\n out.push({\n key: `${side}${index}-c`,\n path,\n size: 6,\n duration,\n delay: `${base + 0.55}s`,\n variant: \"spark\",\n });\n }\n return out;\n}\n\nfunction DefaultCoreGlyph() {\n return (\n <svg viewBox=\"0 0 24 24\" width=\"30\" height=\"30\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <path\n d=\"M7 12h7M11.5 8.5 15 12l-3.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction CubeFace({ connector }: { connector: WorkflowShowcaseConnector }) {\n return (\n <span\n className={cn(\n \"ods-showcase__apptile\",\n \"ods-showcase__apptile--lg\",\n `ods-showcase__apptile--${connector.role}`,\n )}\n >\n {connector.icon ?? roleGlyph(connector.role, 18)}\n </span>\n );\n}\n\nexport function ShowcaseScene({\n left,\n right,\n engaged,\n tiles,\n coreIcon,\n caption,\n onCoreClick,\n}: ShowcaseSceneProps) {\n // Clicking the core briefly speeds particles up — a tiny reward that makes\n // the scene feel alive without changing any state that matters.\n const [pulse, setPulse] = useState(false);\n const pulseTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(\n () => () => {\n if (pulseTimer.current) clearTimeout(pulseTimer.current);\n },\n [],\n );\n const firePulse = () => {\n if (pulse) return;\n setPulse(true);\n pulseTimer.current = setTimeout(() => setPulse(false), 1500);\n };\n\n const leftYs = slots(left.length);\n const rightYs = slots(right.length);\n\n const guides: { d: string; on: boolean; delay: string }[] = [];\n const particles: ParticleSpec[] = [];\n\n // Continuous routing: each source line enters the platform, takes a lane,\n // skirts AROUND the core cuboid (bypass channel north or south of it, the\n // core spans x 193–263 / y 193–263), and continues out to its paired\n // destination — one unbroken journey across the board. Sources without a\n // destination exit down through the south pin edge instead.\n const bypassFor = (index: number) => (index % 2 === 0 ? 188 : 268);\n left.forEach((node, i) => {\n const on = engaged && node.active;\n const laneIn = laneFor(i);\n const bypass = bypassFor(i);\n let d: string;\n if (right.length) {\n const pairIdx = i % right.length;\n const laneOut = laneFor(i + 1);\n d = `M74 ${leftYs[i]} H150 V${laneIn} H186 V${bypass} H270 V${laneOut} H340 V${rightYs[pairIdx]} H388`;\n } else {\n d = `M74 ${leftYs[i]} H150 V${laneIn} H186 V${bypass} H${210 + (i % 3) * 40} V372`;\n }\n guides.push({ d, on, delay: `${i * 0.2}s` });\n particles.push(...particlesFor(\"l\", i, d, on, pulse));\n });\n // Destinations beyond the paired sources still get their own feed line.\n right.forEach((node, j) => {\n if (left.length > 0 && j < left.length) return; // already fed by a crossing\n const d = rightGuide(rightYs[j], laneFor(j + 1));\n const on = engaged && node.active;\n guides.push({ d, on, delay: `${j * 0.2 + 0.3}s` });\n particles.push(...particlesFor(\"r\", j, d, on, pulse));\n });\n if (!left.length) guides.push({ d: leftGuide(208, 228), on: false, delay: \"0s\" });\n if (!right.length) guides.push({ d: rightGuide(208, 228), on: false, delay: \"0s\" });\n\n // CPU-style pin traces on all four platform edges, each ending in a small\n // pad square (staggered accent ticks per edge).\n const pins: { d: string; accent: boolean }[] = [];\n const pads: { x: number; y: number; accent: boolean }[] = [];\n for (let x = 118; x <= 338; x += 20) {\n const south = (x / 20) % 4 === 0;\n const north = (x / 20) % 4 === 2;\n pins.push({ d: `M${x} 346 L${x} 366`, accent: south });\n pads.push({ x, y: 369, accent: south });\n pins.push({ d: `M${x} 110 L${x} 90`, accent: north });\n pads.push({ x, y: 87, accent: north });\n }\n for (let y = 118; y <= 338; y += 20) {\n const east = (y / 20) % 4 === 1;\n const west = (y / 20) % 4 === 3;\n pins.push({ d: `M346 ${y} L366 ${y}`, accent: east });\n pads.push({ x: 369, y, accent: east });\n pins.push({ d: `M110 ${y} L90 ${y}`, accent: west });\n pads.push({ x: 87, y, accent: west });\n }\n\n const tilePositions = [\n { left: 8, top: 8 },\n { left: 83, top: 8 },\n { left: 158, top: 8 },\n { left: 8, top: 83 },\n { left: 158, top: 83 },\n { left: 8, top: 158 },\n { left: 83, top: 158 },\n { left: 158, top: 158 },\n ];\n\n return (\n <div className=\"ods-showcase__scene\" aria-hidden=\"true\">\n <div className=\"ods-showcase__scene-stage\">\n <svg className=\"ods-showcase__wires\" width=\"460\" height=\"460\" aria-hidden=\"true\">\n {pins.map((pin) => (\n <path\n key={pin.d}\n d={pin.d}\n className={cn(\"ods-showcase__pin\", pin.accent && \"ods-showcase__pin--accent\")}\n />\n ))}\n {pads.map((pad) => (\n <rect\n key={`${pad.x}-${pad.y}`}\n x={pad.x - 2}\n y={pad.y - 2}\n width={4}\n height={4}\n className={cn(\"ods-showcase__pin-pad\", pad.accent && \"ods-showcase__pin-pad--accent\")}\n />\n ))}\n {guides.map((guide) => (\n <g key={guide.d}>\n <path d={guide.d} className=\"ods-showcase__guide\" />\n <path\n d={guide.d}\n className={cn(\n \"ods-showcase__guide-trace\",\n guide.on && \"ods-showcase__guide-trace--on\",\n )}\n style={{ animationDelay: guide.delay }}\n />\n </g>\n ))}\n </svg>\n\n {particles.map((p) => (\n <span\n key={p.key}\n className={cn(\"ods-showcase__particle\", `ods-showcase__particle--${p.variant}`)}\n style={\n {\n width: p.size,\n height: p.size,\n offsetPath: `path('${p.path}')`,\n animationDuration: p.duration,\n animationDelay: p.delay,\n } as CSSProperties\n }\n />\n ))}\n\n <div className=\"ods-showcase__platform\">\n <span className=\"ods-showcase__platform-south\" />\n <span className=\"ods-showcase__platform-east\" />\n <span className=\"ods-showcase__platform-top\" />\n {/* Capability tiles — flat by default; hovering lifts one into a\n complete mini glass cuboid (face rises, four walls fade in). */}\n {tiles.slice(0, 8).map((label, i) => (\n <span\n key={label}\n className=\"ods-showcase__tile\"\n style={{ left: tilePositions[i].left, top: tilePositions[i].top }}\n >\n <span className=\"ods-showcase__tile-flip\">\n <span className=\"ods-showcase__tile-wall ods-showcase__tile-wall--south\" />\n <span className=\"ods-showcase__tile-wall ods-showcase__tile-wall--east\" />\n </span>\n <span className=\"ods-showcase__tile-wall ods-showcase__tile-wall--south\" />\n <span className=\"ods-showcase__tile-wall ods-showcase__tile-wall--east\" />\n <span className=\"ods-showcase__tile-face\">{label}</span>\n </span>\n ))}\n {pulse && <span className=\"ods-showcase__core-ring\" />}\n <button\n type=\"button\"\n tabIndex={-1}\n className=\"ods-showcase__core\"\n onClick={() => {\n firePulse();\n onCoreClick?.();\n }}\n >\n {/* Glass cuboid: translucent walls so the volume reads as a 3D\n box you can see through; the lid stays solid. The north/west\n walls REUSE the proven south/east transforms inside a 180°-\n rotated wrapper — connection to the lid is guaranteed by\n construction instead of fresh rotation math. */}\n <span className=\"ods-showcase__core-flip\">\n <span className=\"ods-showcase__core-wall ods-showcase__core-wall--south ods-showcase__core-wall--back\" />\n <span className=\"ods-showcase__core-wall ods-showcase__core-wall--east ods-showcase__core-wall--back\" />\n </span>\n <span className=\"ods-showcase__core-wall ods-showcase__core-wall--south\" />\n <span className=\"ods-showcase__core-wall ods-showcase__core-wall--east\" />\n <span className=\"ods-showcase__core-top\">{coreIcon ?? <DefaultCoreGlyph />}</span>\n </button>\n </div>\n\n <span className=\"ods-showcase__floater ods-showcase__floater--a\" />\n <span className=\"ods-showcase__floater ods-showcase__floater--b\" />\n <span className=\"ods-showcase__floater ods-showcase__floater--c\" />\n\n {!left.length && (\n <span className=\"ods-showcase__ghost\" style={{ left: 8, top: 178 }}>\n +\n </span>\n )}\n {!right.length && (\n <span className=\"ods-showcase__ghost\" style={{ left: 392, top: 178 }}>\n +\n </span>\n )}\n\n {/* Each cube sits in a STATIC preserve-3d slot with the animated\n element nested inside — the exact layering the core uses\n (platform → animated core → faces). Animating the outermost\n positioned element directly under the stage is what broke the\n cubes' 3D context; don't collapse these two layers. */}\n {left.map((node, i) => (\n <span\n key={node.connector.name}\n className=\"ods-showcase__cube-slot\"\n style={{ left: 8, top: leftYs[i] - 30 }}\n >\n <span\n className={cn(\n \"ods-showcase__cube\",\n node.active && \"ods-showcase__cube--active\",\n i % 2 ? \"ods-showcase__cube--float-b\" : \"ods-showcase__cube--float-a\",\n )}\n style={{ animationDelay: `${i * 0.15}s` }}\n >\n <span className=\"ods-showcase__cube-flip\">\n <span className=\"ods-showcase__cube-south ods-showcase__cube-wall--back\" />\n <span className=\"ods-showcase__cube-east ods-showcase__cube-wall--back\" />\n </span>\n <span className=\"ods-showcase__cube-south\" />\n <span className=\"ods-showcase__cube-east\" />\n <span className=\"ods-showcase__cube-top\">\n <CubeFace connector={node.connector} />\n </span>\n </span>\n </span>\n ))}\n {right.map((node, j) => (\n <span\n key={node.connector.name}\n className=\"ods-showcase__cube-slot\"\n style={{ left: 392, top: rightYs[j] - 30 }}\n >\n <span\n className={cn(\n \"ods-showcase__cube\",\n node.active && \"ods-showcase__cube--active\",\n j % 2 ? \"ods-showcase__cube--float-a\" : \"ods-showcase__cube--float-b\",\n )}\n style={{ animationDelay: `${j * 0.15}s` }}\n >\n <span className=\"ods-showcase__cube-flip\">\n <span className=\"ods-showcase__cube-south ods-showcase__cube-wall--back\" />\n <span className=\"ods-showcase__cube-east ods-showcase__cube-wall--back\" />\n </span>\n <span className=\"ods-showcase__cube-south\" />\n <span className=\"ods-showcase__cube-east\" />\n <span className=\"ods-showcase__cube-top\">\n <CubeFace connector={node.connector} />\n </span>\n </span>\n </span>\n ))}\n </div>\n <span className=\"ods-showcase__scene-caption\">{caption}</span>\n </div>\n );\n}\n","\"use client\";\n\nimport { AnimatePresence, motion, useReducedMotion } from \"framer-motion\";\nimport { type FormEvent, useId, useState } from \"react\";\nimport { FocusScope } from \"react-aria\";\nimport { Button } from \"../../../components/Button/Button\";\nimport { Input } from \"../../../components/Input/Input\";\nimport { Select } from \"../../../components/Select/Select\";\nimport {\n slugify,\n type WorkflowShowcasePhase,\n type WorkflowShowcaseSignupValues,\n} from \"./showcaseEngine\";\n\n/* ---------------------------------------------------------------------------\n * ShowcaseSignup — the conversion overlay that floats over the canvas.\n *\n * Three moments share one glass surface: the workspace form (\"signup\"),\n * the provisioning interstitial (\"creating\") and the welcome card\n * (\"welcome\"). It follows the Dialog accessibility reference: minted ids\n * wired to aria-labelledby/-describedby, focus contained + restored.\n * ------------------------------------------------------------------------- */\n\nexport interface ShowcaseSignupProps {\n phase: WorkflowShowcasePhase;\n stepCount: number;\n workspaceDomain: string;\n teamSizes: string[];\n error: string | null;\n onSubmit: (values: WorkflowShowcaseSignupValues) => void;\n onBack: () => void;\n dashboardHref?: string;\n onboardingHref?: string;\n}\n\nconst OVERLAY_MOTION = {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n};\n\nexport function ShowcaseSignup({\n phase,\n stepCount,\n workspaceDomain,\n teamSizes,\n error,\n onSubmit,\n onBack,\n dashboardHref = \"#\",\n onboardingHref = \"#\",\n}: ShowcaseSignupProps) {\n const reducedMotion = useReducedMotion();\n const titleId = useId();\n const subtitleId = useId();\n const [values, setValues] = useState<WorkflowShowcaseSignupValues>({\n name: \"\",\n email: \"\",\n company: \"\",\n teamSize: teamSizes[0] ?? \"1–10\",\n });\n\n const open = phase === \"signup\" || phase === \"creating\" || phase === \"welcome\";\n const cardMotion = reducedMotion\n ? OVERLAY_MOTION\n : {\n initial: { opacity: 0, y: 14, scale: 0.985 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: 8, scale: 0.99 },\n };\n\n const handleSubmit = (event: FormEvent) => {\n event.preventDefault();\n onSubmit(values);\n };\n\n const firstName = values.name.trim().split(/\\s+/)[0] || \"\";\n const emailShown = values.email.trim() || \"your inbox\";\n const slug = `${slugify(values.company)}.${workspaceDomain}`;\n\n return (\n <AnimatePresence>\n {open && (\n <motion.div\n className=\"ods-showcase__veil\"\n {...OVERLAY_MOTION}\n transition={{ duration: reducedMotion ? 0 : 0.22 }}\n >\n <FocusScope contain restoreFocus autoFocus>\n {phase === \"signup\" && (\n <motion.form\n key=\"signup\"\n className=\"ods-showcase__glass-card\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={subtitleId}\n onSubmit={handleSubmit}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") onBack();\n }}\n {...cardMotion}\n transition={{ duration: reducedMotion ? 0 : 0.3, ease: [0.2, 0.7, 0.2, 1] }}\n >\n <div className=\"ods-showcase__glass-head\">\n <h3 id={titleId} className=\"ods-showcase__glass-title\">\n Create your workspace\n </h3>\n <p id={subtitleId} className=\"ods-showcase__microcopy\">\n FREE IN PRIVATE BETA · YOUR {stepCount}-STEP WORKFLOW COMES WITH YOU\n </p>\n </div>\n <div className=\"ods-showcase__form-grid\">\n <div className=\"ods-showcase__field\">\n <span className=\"ods-showcase__field-label\">FULL NAME</span>\n <Input\n aria-label=\"Full name\"\n autoComplete=\"name\"\n placeholder=\"Ada Lovelace\"\n value={values.name}\n onChange={(e) => setValues((v) => ({ ...v, name: e.target.value }))}\n />\n </div>\n <div className=\"ods-showcase__field\">\n <span className=\"ods-showcase__field-label\">WORK EMAIL</span>\n <Input\n aria-label=\"Work email\"\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"ada@company.com\"\n value={values.email}\n onChange={(e) => setValues((v) => ({ ...v, email: e.target.value }))}\n />\n </div>\n <div className=\"ods-showcase__field\">\n <span className=\"ods-showcase__field-label\">COMPANY</span>\n <Input\n aria-label=\"Company\"\n autoComplete=\"organization\"\n placeholder=\"Acme Inc.\"\n value={values.company}\n onChange={(e) => setValues((v) => ({ ...v, company: e.target.value }))}\n />\n </div>\n <div className=\"ods-showcase__field\">\n <span className=\"ods-showcase__field-label\">TEAM SIZE</span>\n <Select\n aria-label=\"Team size\"\n options={teamSizes.map((size) => ({ value: size, label: size }))}\n value={values.teamSize}\n onChange={(teamSize) => setValues((v) => ({ ...v, teamSize }))}\n />\n </div>\n </div>\n {error && (\n <p className=\"ods-showcase__form-error\" role=\"alert\">\n {error}\n </p>\n )}\n <div className=\"ods-showcase__glass-foot\">\n <span className=\"ods-showcase__microcopy\">\n NO CREDIT CARD · SSO & SELF-HOSTING LATER\n </span>\n <div className=\"ods-showcase__glass-actions\">\n <Button type=\"button\" variant=\"secondary\" onClick={onBack}>\n Back\n </Button>\n <Button type=\"submit\" variant=\"primary\">\n Create account & deploy →\n </Button>\n </div>\n </div>\n </motion.form>\n )}\n\n {phase === \"creating\" && (\n <motion.div\n key=\"creating\"\n className=\"ods-showcase__glass-card ods-showcase__glass-card--slim\"\n role=\"status\"\n {...cardMotion}\n transition={{ duration: reducedMotion ? 0 : 0.25 }}\n >\n <span className=\"ods-showcase__spin\" aria-hidden=\"true\">\n ⟳\n </span>\n <span className=\"ods-showcase__creating-line\">\n provisioning workspace · saving draft · inviting {emailShown}\n </span>\n </motion.div>\n )}\n\n {phase === \"welcome\" && (\n <motion.div\n key=\"welcome\"\n className=\"ods-showcase__glass-card ods-showcase__glass-card--welcome\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n {...cardMotion}\n transition={{ duration: reducedMotion ? 0 : 0.3, ease: [0.2, 0.7, 0.2, 1] }}\n >\n <div className=\"ods-showcase__glass-head\">\n <p className=\"ods-showcase__microcopy ods-showcase__microcopy--success\">\n ✓ WORKSPACE READY\n </p>\n <h3 id={titleId} className=\"ods-showcase__glass-title\">\n Welcome to OctaviaFlow{firstName ? `, ${firstName}` : \"\"}.\n </h3>\n <p className=\"ods-showcase__welcome-body\">\n We emailed a sign-in link to <strong>{emailShown}</strong>. Your {stepCount}\n -step workflow is saved as a draft in{\" \"}\n <code className=\"ods-showcase__slug\">{slug}</code> — deploy it from the\n dashboard whenever you're ready.\n </p>\n </div>\n <div className=\"ods-showcase__glass-foot\">\n <div className=\"ods-showcase__glass-actions\">\n <a className=\"ods-showcase__solid-link\" href={dashboardHref}>\n Open dashboard →\n </a>\n <a className=\"ods-showcase__text-link\" href={onboardingHref}>\n Book onboarding →\n </a>\n </div>\n <span className=\"ods-showcase__microcopy ods-showcase__microcopy--right\">\n PRIVATE BETA\n <br />\n ONBOARDING INCLUDED\n </span>\n </div>\n </motion.div>\n )}\n </FocusScope>\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","jsx","jsxs","useId","useState","jsx","jsxs","useId","useState","jsx","jsxs","jsx","jsx","jsxs","useState","Fragment","jsx","jsxs","useState","jsx","jsxs","CheckmarkIcon","jsx","jsxs","CheckmarkIcon","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsxs","useState","Fragment","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","CheckmarkIcon","jsx","jsxs","CheckmarkIcon","useReducedMotion","Fragment","jsx","jsxs","useReducedMotion","jsx","AnimatePresence","motion","useReducedMotion","useEffect","useMemo","useRef","useState","useState","jsx","jsxs","base","useState","motion","useReducedMotion","useId","useState","jsx","jsxs","useReducedMotion","useId","useState","motion","Fragment","jsx","jsxs","useReducedMotion","useState","useRef","useEffect","useMemo","AnimatePresence","motion"]}
|