@salesmind-ai/design-system 0.2.0 → 0.3.0
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/AppearancePanel-UT57J69V.d.cts +51 -0
- package/dist/AppearancePanel-UT57J69V.d.ts +51 -0
- package/dist/AppearanceProvider-C36a8-eb.d.cts +45 -0
- package/dist/AppearanceProvider-C36a8-eb.d.ts +45 -0
- package/dist/Breadcrumb-RX-B_gDV.d.cts +44 -0
- package/dist/Breadcrumb-RX-B_gDV.d.ts +44 -0
- package/dist/ExportMenu-A2TLFiVv.d.cts +311 -0
- package/dist/ExportMenu-C8qck5AT.d.ts +311 -0
- package/dist/SectionShell-BfBw5q0Y.d.cts +18 -0
- package/dist/SectionShell-BfBw5q0Y.d.ts +18 -0
- package/dist/Select-BdZmK0Lt.d.cts +66 -0
- package/dist/Select-BdZmK0Lt.d.ts +66 -0
- package/dist/admin/index.cjs +2941 -0
- package/dist/admin/index.cjs.map +1 -0
- package/dist/admin/index.css +4145 -0
- package/dist/admin/index.css.map +1 -0
- package/dist/admin/index.d.cts +491 -0
- package/dist/admin/index.d.ts +491 -0
- package/dist/admin/index.js +2918 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/{audit-CiyPkxk1.d.cts → audit-BS2fn7M4.d.ts} +2 -51
- package/dist/{audit-CiyPkxk1.d.ts → audit-DwCmg32J.d.cts} +2 -51
- package/dist/blog/index.cjs +1074 -0
- package/dist/blog/index.cjs.map +1 -0
- package/dist/blog/index.css +1422 -0
- package/dist/blog/index.css.map +1 -0
- package/dist/blog/index.d.cts +233 -0
- package/dist/blog/index.d.ts +233 -0
- package/dist/blog/index.js +1056 -0
- package/dist/blog/index.js.map +1 -0
- package/dist/chart-types-BGVVO-zl.d.cts +208 -0
- package/dist/chart-types-BGVVO-zl.d.ts +208 -0
- package/dist/charts/index.cjs +2698 -0
- package/dist/charts/index.cjs.map +1 -0
- package/dist/charts/index.css +1167 -0
- package/dist/charts/index.css.map +1 -0
- package/dist/charts/index.d.cts +453 -0
- package/dist/charts/index.d.ts +453 -0
- package/dist/charts/index.js +2682 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/core/index.cjs +526 -395
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.css +297 -2
- package/dist/core/index.css.map +1 -1
- package/dist/core/index.d.cts +7 -982
- package/dist/core/index.d.ts +7 -982
- package/dist/core/index.js +476 -351
- package/dist/core/index.js.map +1 -1
- package/dist/i18n/index.cjs +585 -0
- package/dist/i18n/index.cjs.map +1 -0
- package/dist/i18n/index.d.cts +855 -0
- package/dist/i18n/index.d.ts +855 -0
- package/dist/i18n/index.js +547 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.css +16 -6
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +22 -1290
- package/dist/index.d.ts +22 -1290
- package/dist/marketing/index.cjs +2144 -3023
- package/dist/marketing/index.cjs.map +1 -1
- package/dist/marketing/index.css +3729 -4824
- package/dist/marketing/index.css.map +1 -1
- package/dist/marketing/index.d.cts +1351 -4
- package/dist/marketing/index.d.ts +1351 -4
- package/dist/marketing/index.js +2190 -3054
- package/dist/marketing/index.js.map +1 -1
- package/dist/motion/index.cjs +1230 -0
- package/dist/motion/index.cjs.map +1 -0
- package/dist/motion/index.css +699 -0
- package/dist/motion/index.css.map +1 -0
- package/dist/motion/index.d.cts +68 -0
- package/dist/motion/index.d.ts +68 -0
- package/dist/motion/index.js +1218 -0
- package/dist/motion/index.js.map +1 -0
- package/dist/nav/index.cjs +1533 -0
- package/dist/nav/index.cjs.map +1 -0
- package/dist/nav/index.css +1984 -0
- package/dist/nav/index.css.map +1 -0
- package/dist/nav/index.d.cts +279 -0
- package/dist/nav/index.d.ts +279 -0
- package/dist/nav/index.js +1501 -0
- package/dist/nav/index.js.map +1 -0
- package/dist/report/index.cjs +26 -1649
- package/dist/report/index.cjs.map +1 -1
- package/dist/report/index.css +6 -968
- package/dist/report/index.css.map +1 -1
- package/dist/report/index.d.cts +4 -2
- package/dist/report/index.d.ts +4 -2
- package/dist/report/index.js +27 -1640
- package/dist/report/index.js.map +1 -1
- package/dist/sections/index.cjs +385 -0
- package/dist/sections/index.cjs.map +1 -0
- package/dist/sections/index.css +818 -0
- package/dist/sections/index.css.map +1 -0
- package/dist/sections/index.d.cts +69 -0
- package/dist/sections/index.d.ts +69 -0
- package/dist/sections/index.js +374 -0
- package/dist/sections/index.js.map +1 -0
- package/dist/social-proof/index.cjs +1254 -0
- package/dist/social-proof/index.cjs.map +1 -0
- package/dist/social-proof/index.css +1416 -0
- package/dist/social-proof/index.css.map +1 -0
- package/dist/social-proof/index.d.cts +258 -0
- package/dist/social-proof/index.d.ts +258 -0
- package/dist/social-proof/index.js +1237 -0
- package/dist/social-proof/index.js.map +1 -0
- package/dist/theme/index.cjs +573 -0
- package/dist/theme/index.cjs.map +1 -0
- package/dist/theme/index.css +464 -0
- package/dist/theme/index.css.map +1 -0
- package/dist/theme/index.d.cts +48 -0
- package/dist/theme/index.d.ts +48 -0
- package/dist/theme/index.js +558 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/types-DAlgDGzw.d.cts +52 -0
- package/dist/types-DAlgDGzw.d.ts +52 -0
- package/dist/web/index.d.cts +3 -2
- package/dist/web/index.d.ts +3 -2
- package/package.json +68 -9
- package/dist/ExportMenu-hEe5MhLq.d.cts +0 -1027
- package/dist/ExportMenu-hEe5MhLq.d.ts +0 -1027
- package/dist/index-B64suAAc.d.cts +0 -1498
- package/dist/index-B64suAAc.d.ts +0 -1498
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/HeroSection/HeroSection.tsx","../../src/components/SectionShell/SectionShell.tsx","../../src/components/LayoutPrimitives/Box.tsx","../../src/tokens/spacing.ts","../../src/components/LayoutPrimitives/utils.ts","../../src/components/LayoutPrimitives/Stack.tsx","../../src/components/LayoutPrimitives/Container.tsx","../../src/components/FeatureSection/FeatureSection.tsx","../../src/components/CTASection/CTASection.tsx","../../src/components/SocialProof/Card.tsx","../../src/components/StarRating/StarRating.tsx","../../src/components/PlatformBadge/PlatformBadge.tsx","../../src/components/OutboundLink/OutboundLink.tsx","../../src/web/utm/useUtmDefaults.ts","../../src/web/utm/utm-context.ts","../../src/web/utm/builders.ts","../../src/web/utm/classifiers.ts","../../src/components/OutboundLink/outbound-link-utils.ts","../../src/components/SocialProof/Grid.tsx","../../src/components/SocialProof/Logos.tsx","../../src/components/SocialProof/Featured.tsx","../../src/components/SocialProof/Carousel.tsx","../../src/tokens/motion.ts","../../src/components/SocialProof/VerticalVideoGrid.tsx","../../src/components/SocialProof/index.ts","../../src/components/PricingCard/PricingCard.tsx","../../src/components/ComparisonTable/ComparisonTable.tsx","../../src/components/ROICalculator/ROICalculator.tsx","../../src/components/GuaranteeHighlight/GuaranteeHighlight.tsx","../../src/components/ICPFilter/ICPFilter.tsx","../../src/components/ObjectionFAQ/ObjectionFAQ.tsx","../../src/components/StatsSection/StatsSection.tsx","../../src/components/ValueAnchor/ValueAnchor.tsx","../../src/components/Button/Button.tsx","../../src/components/Slider/Slider.tsx","../../src/components/TextField/TextField.tsx","../../src/components/Motion/MotionContainer.tsx","../../src/components/Motion/MotionText.tsx","../../src/components/AnnouncementBar/AnnouncementBar.tsx","../../src/web/analytics/use-analytics.tsx","../../src/web/analytics/analytics-context.ts","../../src/components/StickyActionBar/StickyActionBar.tsx","../../src/components/BookingEmbed/BookingEmbed.tsx","../../src/components/LeadCaptureForm/LeadCaptureForm.tsx","../../src/components/PricingSection/PricingSection.tsx","../../src/components/ArticleCard/ArticleCard.tsx","../../src/components/ArticleLayout/ArticleLayout.tsx","../../src/components/ProcessTimeline/ProcessTimeline.tsx","../../src/components/MetricCounter/MetricCounter.tsx","../../src/components/ProblemAgitation/ProblemAgitation.tsx","../../src/components/BrowserFrame/BrowserFrame.tsx","../../src/components/VideoEmbed/VideoEmbed.tsx","../../src/components/ExitIntentOverlay/ExitIntentOverlay.tsx","../../src/components/Dialog/Dialog.tsx","../../src/components/BeforeAfterBlock/BeforeAfterBlock.tsx","../../src/components/CompetitorDiff/CompetitorDiff.tsx","../../src/components/StakeholderTabs/StakeholderTabs.tsx","../../src/components/Tabs/Tabs.tsx","../../src/components/IntegrationShowcase/IntegrationShowcase.tsx","../../src/components/Badge/Badge.tsx","../../src/components/SecurityBlock/SecurityBlock.tsx","../../src/components/CaseStudyCard/CaseStudyCard.tsx","../../src/components/CaseStudySection/CaseStudySection.tsx","../../src/components/RelatedContent/RelatedContent.tsx","../../src/components/PricingToggle/PricingToggle.tsx","../../src/components/ToggleGroup/ToggleGroup.tsx","../../src/components/AuthorBio/AuthorBio.tsx","../../src/components/Avatar/Avatar.tsx","../../src/components/TableOfContents/TableOfContents.tsx","../../src/i18n/useMessage.ts","../../src/i18n/index.ts","../../src/components/ManifestoBlock/ManifestoBlock.tsx","../../src/components/ComplianceGrid/ComplianceGrid.tsx","../../src/components/ArchitectureDiagram/ArchitectureDiagram.tsx","../../src/components/SegmentSwitch/SegmentSwitch.tsx","../../src/components/IntentCTA/IntentCTA.tsx"],"names":["forwardRef","clsx","jsx","jsxs","useState","useEffect","Fragment","defaultCta","React","useRef","motion","useContext","createContext","ArrowRight","useCallback","useMemo"],"mappings":"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","sourcesContent":["import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, SectionShellProps } from '../SectionShell/SectionShell';\nimport { Stack, Box } from '../LayoutPrimitives';\nimport './HeroSection.css';\n\n/* ============================================================================\n Types\n ============================================================================ */\n\nexport interface HeroSectionProps extends Omit<SectionShellProps, 'title'> {\n variant?: 'left' | 'center' | 'split';\n title: React.ReactNode;\n subtitle?: React.ReactNode;\n eyebrow?: React.ReactNode;\n primaryCta?: React.ReactNode;\n secondaryCta?: React.ReactNode;\n\n /** Main visual (Image, Video, or Component) */\n media?: React.ReactNode;\n /** Adds a browser-like header bar to the media container */\n mediaBrowserFrame?: boolean;\n\n /** Optional floating elements (e.g. SocialProof cards) over the media */\n floatingElement?: React.ReactNode;\n floatingPosition?: 'top-right' | 'bottom-left';\n\n /** Background Visuals */\n withGrid?: boolean;\n withGlow?: boolean;\n\n align?: 'left' | 'center'; // Text alignment overrides variant default\n}\n\n/* ============================================================================\n Component\n ============================================================================ */\n\nexport const HeroSection = forwardRef<HTMLDivElement, HeroSectionProps>(\n (\n {\n variant = 'left',\n title,\n subtitle,\n eyebrow,\n primaryCta,\n secondaryCta,\n media,\n mediaBrowserFrame = false,\n floatingElement,\n floatingPosition = 'bottom-left',\n withGrid = false,\n withGlow = false,\n align,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n // Determine layout based on variant\n const isSplit = variant === 'split';\n const isCenter = variant === 'center';\n\n // Default alignment\n const textAlignment = align || (isCenter ? 'center' : 'left');\n\n const ContentBlock = (\n <div className={clsx('ds-hero__content', `ds-hero__content--${textAlignment}`)}>\n {eyebrow && (\n <span className=\"ds-section-header__eyebrow\" style={{ marginBottom: 'var(--space-2)' }}>\n {eyebrow}\n </span>\n )}\n <h1 className=\"ds-hero__title\">{title}</h1>\n {subtitle && <p className=\"ds-hero__subtitle\">{subtitle}</p>}\n\n {(primaryCta || secondaryCta) && (\n <div className=\"ds-hero__actions\">\n {primaryCta}\n {secondaryCta}\n </div>\n )}\n {children}\n </div>\n );\n\n const MediaBlock = media && (\n <div className=\"ds-hero__media-wrapper\">\n <div className={clsx('ds-hero__media', mediaBrowserFrame && 'ds-hero__media--browser')}>\n {media}\n </div>\n {floatingElement && (\n <div className={clsx('ds-hero__float', `ds-hero__float--${floatingPosition}`)}>\n {floatingElement}\n </div>\n )}\n </div>\n );\n\n return (\n <SectionShell\n ref={ref}\n className={clsx(\n 'ds-hero',\n `ds-hero--${variant}`,\n withGrid && 'ds-hero--bg-grid',\n withGlow && 'ds-hero--bg-glow',\n className,\n )}\n padding=\"lg\"\n {...props}\n >\n {isSplit ? (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 500px), 1fr))',\n gap: 'var(--space-16)',\n alignItems: 'center',\n }}\n >\n <Box>{ContentBlock}</Box>\n <Box>{MediaBlock}</Box>\n </div>\n ) : (\n <Stack gap={16} align={isCenter ? 'center' : 'start'}>\n {ContentBlock}\n {MediaBlock && (\n <Box\n style={{\n width: '100%',\n display: 'flex',\n justifyContent: isCenter ? 'center' : 'flex-start',\n }}\n >\n <div style={{ width: '100%', maxWidth: isCenter ? '1200px' : '100%' }}>\n {MediaBlock}\n </div>\n </Box>\n )}\n </Stack>\n )}\n </SectionShell>\n );\n },\n);\n\nHeroSection.displayName = 'HeroSection';\n","import React, { forwardRef, HTMLAttributes } from 'react';\nimport clsx from 'clsx';\nimport { Container } from '../LayoutPrimitives';\nimport './SectionShell.css';\n\n/* ============================================================================\n Section Header Component\n ============================================================================ */\n\nexport interface SectionHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n eyebrow?: React.ReactNode;\n align?: 'left' | 'center' | 'right';\n}\n\nexport const SectionHeader = forwardRef<HTMLDivElement, SectionHeaderProps>(\n ({ title, subtitle, eyebrow, align = 'center', className, ...props }, ref) => {\n if (!title && !subtitle && !eyebrow) return null;\n\n return (\n <header\n ref={ref}\n className={clsx('ds-section-header', `ds-section-header--${align}`, className)}\n {...props}\n >\n {eyebrow && <span className=\"ds-section-header__eyebrow\">{eyebrow}</span>}\n {title && <h2 className=\"ds-section-header__title\">{title}</h2>}\n {subtitle && <p className=\"ds-section-header__subtitle\">{subtitle}</p>}\n </header>\n );\n },\n);\nSectionHeader.displayName = 'SectionHeader';\n\n/* ============================================================================\n Section Shell Component\n ============================================================================ */\n\nexport interface SectionShellProps extends HTMLAttributes<HTMLDivElement> {\n background?: 'default' | 'muted' | 'brand' | 'transparent';\n padding?: 'none' | 'sm' | 'md' | 'lg';\n containerSize?: 'sm' | 'md' | 'lg' | 'xl' | 'fluid'; // Maps to Container max-width\n containerFluid?: boolean;\n}\n\nexport const SectionShell = forwardRef<HTMLDivElement, SectionShellProps>(\n (\n {\n className,\n children,\n background = 'default',\n padding = 'md',\n containerSize,\n containerFluid = false,\n ...props\n },\n ref,\n ) => {\n return (\n <section\n ref={ref}\n className={clsx(\n 'ds-section',\n `ds-section--bg-${background}`,\n `ds-section--padding-${padding}`,\n className,\n )}\n {...props}\n >\n <Container\n size={containerSize === 'fluid' ? 'full' : (containerSize as 'sm' | 'md' | 'lg' | 'xl' | undefined)}\n fluid={containerFluid || containerSize === 'fluid'}\n >\n {children}\n </Container>\n </section>\n );\n },\n);\nSectionShell.displayName = 'SectionShell';\n","import { ElementType, HTMLAttributes, forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SpacingProps, extractSpacingStyles } from './utils';\nimport './LayoutPrimitives.css';\n\nexport interface BoxProps extends HTMLAttributes<HTMLElement>, SpacingProps {\n as?: ElementType;\n}\n\nexport const Box = forwardRef<HTMLElement, BoxProps>(\n ({ as: Component = 'div', className, style, children, ...props }, ref) => {\n const spacingStyles = extractSpacingStyles(props);\n\n // Filter out spacing props from passing to DOM\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { m, mt, mb, ml, mr, mx, my, p, pt, pb, pl, pr, px, py, gap, ...domProps } = props;\n\n return (\n <Component\n ref={ref}\n className={clsx('ds-box', className)}\n style={{ ...spacingStyles, ...style }}\n {...domProps}\n >\n {children}\n </Component>\n );\n },\n);\n\nBox.displayName = 'Box';\n","export const SPACING = {\n 1: 'var(--space-1)',\n 2: 'var(--space-2)',\n 3: 'var(--space-3)',\n 4: 'var(--space-4)',\n 5: 'var(--space-5)',\n 6: 'var(--space-6)',\n 8: 'var(--space-8)',\n 10: 'var(--space-10)',\n 12: 'var(--space-12)',\n 16: 'var(--space-16)',\n 20: 'var(--space-20)',\n} as const;\n\nexport type SpacingToken = keyof typeof SPACING;\n","import { CSSProperties } from 'react';\nimport { SPACING } from '../../tokens/spacing';\n\ntype SpacingValue = keyof typeof SPACING | number | string;\n\n/**\n * Named spacing aliases that map semantic sizes to DS space tokens.\n * Allows consumers to pass gap=\"lg\" instead of gap={6}.\n */\nconst SPACING_ALIASES: Record<string, string> = {\n xs: 'var(--space-2)',\n sm: 'var(--space-3)',\n md: 'var(--space-4)',\n lg: 'var(--space-6)',\n xl: 'var(--space-8)',\n '2xl': 'var(--space-12)',\n};\n\nexport function resolveSpacing(value: SpacingValue | undefined): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'number' && SPACING[value as keyof typeof SPACING]) {\n return SPACING[value as keyof typeof SPACING];\n }\n if (typeof value === 'string' && value in SPACING_ALIASES) {\n return SPACING_ALIASES[value];\n }\n return String(value);\n}\n\nexport interface SpacingProps {\n m?: SpacingValue;\n mt?: SpacingValue;\n mb?: SpacingValue;\n ml?: SpacingValue;\n mr?: SpacingValue;\n mx?: SpacingValue;\n my?: SpacingValue;\n p?: SpacingValue;\n pt?: SpacingValue;\n pb?: SpacingValue;\n pl?: SpacingValue;\n pr?: SpacingValue;\n px?: SpacingValue;\n py?: SpacingValue;\n gap?: SpacingValue;\n}\n\nexport function extractSpacingStyles(props: SpacingProps): CSSProperties {\n const styles: CSSProperties = {};\n\n if (props.m !== undefined) styles.margin = resolveSpacing(props.m);\n if (props.mt !== undefined) styles.marginTop = resolveSpacing(props.mt);\n if (props.mb !== undefined) styles.marginBottom = resolveSpacing(props.mb);\n if (props.ml !== undefined) styles.marginLeft = resolveSpacing(props.ml);\n if (props.mr !== undefined) styles.marginRight = resolveSpacing(props.mr);\n if (props.mx !== undefined) {\n styles.marginLeft = resolveSpacing(props.mx);\n styles.marginRight = resolveSpacing(props.mx);\n }\n if (props.my !== undefined) {\n styles.marginTop = resolveSpacing(props.my);\n styles.marginBottom = resolveSpacing(props.my);\n }\n\n if (props.p !== undefined) styles.padding = resolveSpacing(props.p);\n if (props.pt !== undefined) styles.paddingTop = resolveSpacing(props.pt);\n if (props.pb !== undefined) styles.paddingBottom = resolveSpacing(props.pb);\n if (props.pl !== undefined) styles.paddingLeft = resolveSpacing(props.pl);\n if (props.pr !== undefined) styles.paddingRight = resolveSpacing(props.pr);\n if (props.px !== undefined) {\n styles.paddingLeft = resolveSpacing(props.px);\n styles.paddingRight = resolveSpacing(props.px);\n }\n if (props.py !== undefined) {\n styles.paddingTop = resolveSpacing(props.py);\n styles.paddingBottom = resolveSpacing(props.py);\n }\n\n if (props.gap !== undefined) styles.gap = resolveSpacing(props.gap);\n\n return styles;\n}\n","import { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { Box, BoxProps } from './Box';\n\nexport interface StackProps extends BoxProps {\n direction?: 'row' | 'column';\n align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n justify?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n wrap?: boolean;\n}\n\nexport const Stack = forwardRef<HTMLElement, StackProps>(\n ({ direction = 'column', align, justify, wrap, className, style, ...props }, ref) => {\n return (\n <Box\n ref={ref}\n className={clsx('ds-stack', direction === 'row' && 'ds-stack--horizontal', className)}\n style={{\n alignItems: align,\n justifyContent: justify === 'between' ? 'space-between' : justify,\n flexWrap: wrap ? 'wrap' : undefined,\n ...style,\n }}\n {...props}\n />\n );\n },\n);\n\nStack.displayName = 'Stack';\n","import { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { Box, BoxProps } from './Box';\n\nexport type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/**\n * Maps named sizes to max-width values.\n * Aligns with common web breakpoints (Tailwind `max-w-*` scale).\n */\n// eslint-disable-next-line react-refresh/only-export-components\nexport const CONTAINER_SIZE_MAP: Record<ContainerSize, string> = {\n sm: '768px', // 48rem — max-w-3xl\n md: '1024px', // 64rem — max-w-5xl\n lg: '1152px', // 72rem — max-w-6xl\n xl: '1280px', // 80rem — max-w-7xl\n full: '100%',\n};\n\nexport interface ContainerProps extends BoxProps {\n /**\n * Named size preset. Overrides `maxWidth` when set.\n * @example <Container size=\"lg\">…</Container>\n */\n size?: ContainerSize;\n /** Pass `true` to stretch to 100% width (same as `size=\"full\"`). */\n fluid?: boolean;\n /** Custom max-width value. Ignored when `size` or `fluid` is set. */\n maxWidth?: number | string;\n}\n\nexport const Container = forwardRef<HTMLElement, ContainerProps>(\n ({ size, fluid, maxWidth, className, style, ...props }, ref) => {\n let resolvedMaxWidth: string | number;\n if (fluid) {\n resolvedMaxWidth = '100%';\n } else if (size) {\n resolvedMaxWidth = CONTAINER_SIZE_MAP[size];\n } else {\n resolvedMaxWidth = maxWidth || 'var(--container-default-max, 1200px)';\n }\n\n return (\n <Box\n ref={ref}\n className={clsx('ds-container', className)}\n style={{\n maxWidth: resolvedMaxWidth,\n ...style,\n }}\n {...props}\n />\n );\n },\n);\n\nContainer.displayName = 'Container';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, SectionShellProps, SectionHeader } from '../SectionShell/SectionShell';\nimport './FeatureSection.css';\n\n/* ============================================================================\n Types\n ============================================================================ */\n\nexport interface FeatureItem {\n title: React.ReactNode;\n description: React.ReactNode;\n icon?: React.ReactNode;\n media?: React.ReactNode; // For ZigZag\n step?: string | number; // For ZigZag steps\n cta?: React.ReactNode;\n}\n\nexport interface FeatureSectionProps extends Omit<SectionShellProps, 'title'> {\n variant?: 'grid' | 'zigzag';\n columns?: 2 | 3 | 4; // For grid variant\n features: FeatureItem[];\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n eyebrow?: React.ReactNode;\n alignHeader?: 'left' | 'center' | 'right';\n}\n\n/* ============================================================================\n Components\n ============================================================================ */\n\nconst FeatureCard = ({ item }: { item: FeatureItem }) => (\n <div className=\"ds-feature-card\">\n {item.icon && <div className=\"ds-feature-card__icon\">{item.icon}</div>}\n <h3 className=\"ds-feature-card__title\">{item.title}</h3>\n <div className=\"ds-feature-card__description\">{item.description}</div>\n {item.cta && <div className=\"ds-feature-card__cta\">{item.cta}</div>}\n </div>\n);\n\nconst FeatureRow = ({ item }: { item: FeatureItem }) => (\n <div className=\"ds-feature-row\">\n <div className=\"ds-feature-row__content\">\n {item.step && <div className=\"ds-feature-row__step\">STEP {item.step}</div>}\n {item.icon && <div className=\"ds-feature-card__icon\">{item.icon}</div>}\n <h3 className=\"ds-section-header__title\" style={{ fontSize: 'var(--font-size-2xl)' }}>\n {item.title}\n </h3>\n <div className=\"ds-section-header__subtitle\" style={{ fontSize: 'var(--font-size-lg)' }}>\n {item.description}\n </div>\n {item.cta && <div className=\"ds-hero__actions\">{item.cta}</div>}\n </div>\n <div className=\"ds-feature-row__media\">\n {item.media || (\n <div style={{ paddingBottom: '56.25%', background: 'var(--glass-base-active)' }} />\n )}\n </div>\n </div>\n);\n\nexport const FeatureSection = forwardRef<HTMLDivElement, FeatureSectionProps>(\n (\n {\n variant = 'grid',\n columns = 3,\n features,\n title,\n subtitle,\n eyebrow,\n alignHeader = 'center',\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell ref={ref} className={clsx('ds-feature-section', className)} {...props}>\n <SectionHeader title={title} subtitle={subtitle} eyebrow={eyebrow} align={alignHeader} />\n\n {variant === 'grid' ? (\n <div className={clsx('ds-feature-grid', `ds-feature-grid--${columns}-col`)}>\n {features.map((feature, index) => (\n <FeatureCard key={index} item={feature} />\n ))}\n </div>\n ) : (\n <div className=\"ds-feature-zigzag\">\n {features.map((feature, index) => (\n <FeatureRow key={index} item={feature} />\n ))}\n </div>\n )}\n </SectionShell>\n );\n },\n);\nFeatureSection.displayName = 'FeatureSection';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, SectionShellProps } from '../SectionShell/SectionShell';\nimport './CTASection.css';\n\nexport interface CTASectionProps extends Omit<SectionShellProps, 'title'> {\n variant?: 'center' | 'split' | 'boxed';\n title: React.ReactNode;\n description?: React.ReactNode;\n primaryCta?: React.ReactNode;\n secondaryCta?: React.ReactNode;\n actions?: React.ReactNode; // Custom actions slot\n}\n\nexport const CTASection = forwardRef<HTMLDivElement, CTASectionProps>(\n (\n {\n variant = 'center',\n title,\n description,\n primaryCta,\n secondaryCta,\n actions,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n // \"Boxed\" is just centered content inside a card-like container within the section\n const isBoxed = variant === 'boxed';\n const effectiveVariant = isBoxed ? 'center' : variant;\n\n const Content = (\n <div className={clsx('ds-cta-section', `ds-cta-section--${effectiveVariant}`)}>\n {effectiveVariant === 'split' ? (\n <div className=\"ds-cta-section--split\">\n <div className=\"ds-cta-content\">\n <h2 className=\"ds-cta-title\">{title}</h2>\n {description && <p className=\"ds-cta-description\">{description}</p>}\n </div>\n <div className=\"ds-cta-actions\">\n {actions || (\n <>\n {primaryCta}\n {secondaryCta}\n </>\n )}\n </div>\n </div>\n ) : (\n <div className=\"ds-cta-content\">\n <h2 className=\"ds-cta-title\">{title}</h2>\n {description && <p className=\"ds-cta-description\">{description}</p>}\n <div className=\"ds-cta-actions\">\n {actions || (\n <>\n {primaryCta}\n {secondaryCta}\n </>\n )}\n </div>\n </div>\n )}\n {children}\n </div>\n );\n\n return (\n <SectionShell ref={ref} className={clsx(className)} {...props}>\n {isBoxed ? <div className=\"ds-cta-card\">{Content}</div> : Content}\n </SectionShell>\n );\n },\n);\nCTASection.displayName = 'CTASection';\n","import { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { StarRating } from '../StarRating/StarRating';\nimport { PlatformBadge, type Platform } from '../PlatformBadge/PlatformBadge';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './SocialProof.css';\n\n/* ============================================================================\n SOCIAL PROOF CARD — ELITE VARIANT SYSTEM\n ============================================================================\n Six visually distinct card variants, each optimized for its content type.\n Used in Wall of Love grids, carousels, and contextual social proof sections.\n ============================================================================ */\n\n/* --------------------------------------------------------------------------\n Icons\n -------------------------------------------------------------------------- */\n\nconst PlayIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n);\n\n/* --------------------------------------------------------------------------\n Types\n -------------------------------------------------------------------------- */\n\nexport interface Author {\n name: string;\n role?: string;\n company?: string;\n avatar?: string;\n handle?: string;\n}\n\nexport interface Media {\n src: string;\n type: 'image' | 'video';\n alt?: string;\n}\n\nexport interface CardMetric {\n value: string;\n label: string;\n prefix?: string;\n suffix?: string;\n}\n\nexport interface SocialProofCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'content'> {\n /** Card visual variant — determines layout and visual identity */\n variant?: 'simple' | 'social' | 'video' | 'case-study' | 'rating-only';\n /** Quote or text content */\n content?: React.ReactNode;\n /** Author info */\n author: Author;\n /** Media (thumbnail image for video/case-study variants) */\n media?: Media;\n /** Source icon (e.g., Twitter logo) — legacy, prefer `platform` */\n sourceIcon?: React.ReactNode;\n /** Review platform for automatic badge display */\n platform?: Platform;\n /** Star rating value (0-5) */\n starRating?: number;\n /** Date string */\n date?: string;\n /** Text badges */\n badges?: string[];\n /** CTA text override */\n ctaText?: string;\n /** If set, renders as a clickable card */\n href?: string;\n onClick?: () => void;\n /** Staggered entrance animation delay (ms) */\n animationDelay?: number;\n /** Case study: headline */\n headline?: string;\n /** Case study: company logo node */\n logo?: React.ReactNode;\n /** Case study: industry label */\n industry?: string;\n /** Case study: key metrics */\n metrics?: CardMetric[];\n}\n\n/* --------------------------------------------------------------------------\n Component\n -------------------------------------------------------------------------- */\n\nexport const SocialProofCard = forwardRef<HTMLAnchorElement | HTMLDivElement, SocialProofCardProps>(\n (\n {\n variant = 'simple',\n content,\n author,\n media,\n sourceIcon,\n platform,\n starRating,\n date,\n badges,\n ctaText,\n href,\n className,\n children,\n animationDelay,\n headline,\n logo,\n industry,\n metrics,\n ...props\n },\n ref,\n ) => {\n const cardClass = clsx(\n 'ds-social-card',\n `ds-social-card--${variant}`,\n animationDelay != null && 'ds-social-card--animated',\n className,\n );\n\n const cardStyle = animationDelay != null\n ? { '--card-delay': `${animationDelay}ms` } as React.CSSProperties\n : undefined;\n\n /* --- Rating-Only Variant (compact horizontal) --- */\n if (variant === 'rating-only') {\n const inner = (\n <>\n <div className=\"ds-social-card__rating-row\">\n {starRating != null && (\n <StarRating value={starRating} size=\"lg\" />\n )}\n <div className=\"ds-social-card__meta\">\n <span className=\"ds-social-card__name\">{author.name}</span>\n {(author.role || author.company) && (\n <span className=\"ds-social-card__role\">\n {author.role}{author.role && author.company && ' · '}{author.company}\n </span>\n )}\n </div>\n {platform && (\n <PlatformBadge platform={platform} variant=\"icon-label\" size=\"sm\" />\n )}\n </div>\n </>\n );\n\n if (href) {\n return (\n <OutboundLink ref={ref as React.Ref<HTMLAnchorElement>} href={href} context=\"social-proof-card\" className={cardClass} style={cardStyle} openInNewTab={false} {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}>\n {inner}\n </OutboundLink>\n );\n }\n return (\n <div ref={ref as React.Ref<HTMLDivElement>} className={cardClass} style={cardStyle} {...props}>\n {inner}\n </div>\n );\n }\n\n /* --- Case-Study Variant (wide, structured) --- */\n if (variant === 'case-study') {\n const defaultCta = ctaText || 'Read Case Study \\u2192';\n const inner = (\n <>\n {media && (\n <div className=\"ds-social-card__media\">\n <img src={media.src} alt={media.alt || `${author.company} case study`} />\n </div>\n )}\n <div className=\"ds-social-card__content\">\n {/* Company header */}\n <div className=\"ds-social-card__cs-header\">\n {logo && <div className=\"ds-social-card__cs-logo\">{logo}</div>}\n <div className=\"ds-social-card__cs-company\">\n <span className=\"ds-social-card__name\">{author.company || author.name}</span>\n {industry && (\n <span className=\"ds-social-card__cs-industry\">{industry}</span>\n )}\n </div>\n </div>\n\n {/* Headline */}\n {headline && (\n <h3 className=\"ds-social-card__cs-headline\">{headline}</h3>\n )}\n\n {/* Metrics strip */}\n {metrics && metrics.length > 0 && (\n <div className=\"ds-social-card__cs-metrics\">\n {metrics.map((m, i) => (\n <div key={i} className=\"ds-social-card__cs-metric\">\n <span className=\"ds-social-card__cs-metric-value\">\n {m.prefix}{m.value}{m.suffix}\n </span>\n <span className=\"ds-social-card__cs-metric-label\">{m.label}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* Quote excerpt */}\n {content && (\n <blockquote className=\"ds-social-card__quote ds-social-card__quote--excerpt\">\n “{content}”\n </blockquote>\n )}\n\n {/* CTA */}\n {href && <div className=\"ds-social-card__cta\">{defaultCta}</div>}\n </div>\n </>\n );\n\n if (href) {\n return (\n <OutboundLink ref={ref as React.Ref<HTMLAnchorElement>} href={href} context=\"social-proof-card\" className={cardClass} style={cardStyle} openInNewTab={false} {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}>\n {inner}\n </OutboundLink>\n );\n }\n return (\n <div ref={ref as React.Ref<HTMLDivElement>} className={cardClass} style={cardStyle} {...props}>\n {inner}\n </div>\n );\n }\n\n /* --- Video Variant (cinematic thumbnail) --- */\n if (variant === 'video') {\n const defaultCta = ctaText || 'Watch Video \\u2192';\n const inner = (\n <>\n <div className=\"ds-social-card__media\">\n {media ? (\n <img src={media.src} alt={media.alt || `${author.name} video`} />\n ) : (\n <div className=\"ds-social-card__media-placeholder\" />\n )}\n <div className=\"ds-social-card__play\">\n <div className=\"ds-social-card__play-icon\">\n <PlayIcon />\n </div>\n </div>\n {badges && badges.length > 0 && (\n <div className=\"ds-social-card__badges\">\n {badges.map((badge, idx) => (\n <span key={idx} className=\"ds-social-card__badge\">{badge}</span>\n ))}\n </div>\n )}\n </div>\n <div className=\"ds-social-card__content\">\n <div className=\"ds-social-card__author\">\n {author.avatar && (\n <div className=\"ds-social-card__avatar\">\n <img src={author.avatar} alt={author.name} />\n </div>\n )}\n <div className=\"ds-social-card__meta\">\n <span className=\"ds-social-card__name\">{author.name}</span>\n {(author.role || author.company) && (\n <span className=\"ds-social-card__role\">\n {author.role}{author.role && author.company && ' · '}{author.company}\n </span>\n )}\n </div>\n {platform && (\n <PlatformBadge platform={platform} variant=\"icon-only\" size=\"sm\" />\n )}\n </div>\n {content && (\n <blockquote className=\"ds-social-card__quote\">{content}</blockquote>\n )}\n {href && <div className=\"ds-social-card__cta\">{defaultCta}</div>}\n </div>\n </>\n );\n\n if (href) {\n return (\n <OutboundLink ref={ref as React.Ref<HTMLAnchorElement>} href={href} context=\"social-proof-card\" className={cardClass} style={cardStyle} openInNewTab={false} {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}>\n {inner}\n </OutboundLink>\n );\n }\n return (\n <div ref={ref as React.Ref<HTMLDivElement>} className={cardClass} style={cardStyle} {...props}>\n {inner}\n </div>\n );\n }\n\n /* --- Social Variant (rich, accent border) --- */\n if (variant === 'social') {\n const inner = (\n <>\n <div className=\"ds-social-card__content\">\n {(platform || sourceIcon) && (\n <div className=\"ds-social-card__source\">\n {platform ? <PlatformBadge platform={platform} variant=\"icon-only\" size=\"sm\" /> : sourceIcon}\n </div>\n )}\n {content && (\n <blockquote className=\"ds-social-card__quote ds-social-card__quote--clamp\">\n {content}\n </blockquote>\n )}\n <div className=\"ds-social-card__author\">\n {author.avatar && (\n <div className=\"ds-social-card__avatar\">\n <img src={author.avatar} alt={author.name} />\n </div>\n )}\n <div className=\"ds-social-card__meta\">\n <span className=\"ds-social-card__name\">{author.name}</span>\n {(author.role || author.company) && (\n <span className=\"ds-social-card__role\">\n {author.role}{author.role && author.company && ' · '}{author.company}\n </span>\n )}\n {date && <span className=\"ds-social-card__role\">{date}</span>}\n </div>\n </div>\n {starRating != null && (\n <StarRating value={starRating} size=\"sm\" />\n )}\n {children}\n </div>\n </>\n );\n\n if (href) {\n return (\n <OutboundLink ref={ref as React.Ref<HTMLAnchorElement>} href={href} context=\"social-proof-card\" className={cardClass} style={cardStyle} openInNewTab={false} {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}>\n {inner}\n </OutboundLink>\n );\n }\n return (\n <div ref={ref as React.Ref<HTMLDivElement>} className={cardClass} style={cardStyle} {...props}>\n {inner}\n </div>\n );\n }\n\n /* --- Simple Variant (default quote card with decorative marks) --- */\n const BadgeList = badges && badges.length > 0 && (\n <div className=\"ds-social-card__badges\">\n {badges.map((badge, idx) => (\n <span key={idx} className=\"ds-social-card__badge\">{badge}</span>\n ))}\n </div>\n );\n\n const defaultCta = ctaText || 'Read Story \\u2192';\n\n const simpleInner = (\n <div className=\"ds-social-card__content\">\n {/* Decorative quotation mark */}\n <div className=\"ds-social-card__deco-quote\" aria-hidden=\"true\">“</div>\n\n {(platform || sourceIcon) && (\n <div className=\"ds-social-card__source\">\n {platform ? <PlatformBadge platform={platform} variant=\"icon-only\" size=\"sm\" /> : sourceIcon}\n </div>\n )}\n\n {BadgeList}\n\n {content && (\n <blockquote className=\"ds-social-card__quote\">\n {content}\n </blockquote>\n )}\n\n {starRating != null && (\n <StarRating value={starRating} size=\"sm\" />\n )}\n\n <div className=\"ds-social-card__author\">\n {author.avatar && (\n <div className=\"ds-social-card__avatar\">\n <img src={author.avatar} alt={author.name} />\n </div>\n )}\n <div className=\"ds-social-card__meta\">\n <span className=\"ds-social-card__name\">\n {author.name}\n {author.handle && (\n <span className=\"ds-social-card__handle\">@{author.handle}</span>\n )}\n </span>\n {(author.role || author.company) && (\n <span className=\"ds-social-card__role\">\n {author.role}{author.role && author.company && ' · '}{author.company}\n </span>\n )}\n {date && <span className=\"ds-social-card__role\">{date}</span>}\n </div>\n </div>\n\n {children}\n\n {href && <div className=\"ds-social-card__cta\">{defaultCta}</div>}\n </div>\n );\n\n if (href) {\n return (\n <OutboundLink ref={ref as React.Ref<HTMLAnchorElement>} href={href} context=\"social-proof-card\" className={cardClass} style={cardStyle} openInNewTab={false} {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}>\n {simpleInner}\n </OutboundLink>\n );\n }\n\n return (\n <div ref={ref as React.Ref<HTMLDivElement>} className={cardClass} style={cardStyle} {...props}>\n {simpleInner}\n </div>\n );\n },\n);\n\nSocialProofCard.displayName = 'SocialProofCard';\n","import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport './StarRating.css';\n\n/* ============================================================================\n STAR RATING\n ============================================================================\n Animated star display with half-star support, configurable sizes, and\n optional viewport-triggered fill animation. Replaces text-character\n star displays across all social proof surfaces.\n\n Strategic objective: Instant visual trust signal\n ============================================================================ */\n\nexport interface StarRatingProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Rating value (0-5, supports decimals for half-stars) */\n value: number;\n /** Maximum number of stars */\n max?: number;\n /** Star size variant */\n size?: 'sm' | 'md' | 'lg';\n /** Animate stars filling on viewport entry */\n animate?: boolean;\n /** Show numeric value next to stars */\n showValue?: boolean;\n /** Label shown after value (e.g., \"/ 5\") */\n valueLabel?: string;\n}\n\n/**\n * Star rating display with gold-fill, half-star support, and optional\n * entrance animation. Uses inline SVGs with clip-path for precise\n * partial fills.\n *\n * @example\n * ```tsx\n * <StarRating value={4.5} size=\"lg\" animate />\n * <StarRating value={5} size=\"sm\" showValue />\n * ```\n */\nexport const StarRating = forwardRef<HTMLDivElement, StarRatingProps>(\n (\n {\n value,\n max = 5,\n size = 'md',\n animate = false,\n showValue = false,\n valueLabel,\n className,\n ...props\n },\n ref,\n ) => {\n const [visible, setVisible] = useState(!animate);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!animate) return;\n\n // Respect reduced motion\n if (typeof window !== 'undefined') {\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)');\n if (mq.matches) {\n setVisible(true);\n return;\n }\n }\n\n const target = containerRef.current;\n if (!target) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setVisible(true);\n observer.disconnect();\n }\n },\n { threshold: 0.5 },\n );\n\n observer.observe(target);\n return () => observer.disconnect();\n }, [animate]);\n\n const clampedValue = Math.min(Math.max(value, 0), max);\n\n const stars = Array.from({ length: max }, (_, i) => {\n const starIndex = i + 1;\n const fillPercent =\n clampedValue >= starIndex\n ? 100\n : clampedValue > starIndex - 1\n ? (clampedValue - (starIndex - 1)) * 100\n : 0;\n\n return (\n <span\n key={i}\n className={clsx(\n 'ds-star-rating__star',\n visible && 'ds-star-rating__star--visible',\n )}\n style={{\n '--star-fill': `${fillPercent}%`,\n '--star-delay': animate ? `${i * 100}ms` : '0ms',\n } as React.CSSProperties}\n >\n {/* Background (empty) star */}\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"ds-star-rating__svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n className=\"ds-star-rating__empty\"\n />\n </svg>\n {/* Foreground (filled) star with clip */}\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"ds-star-rating__svg ds-star-rating__svg--filled\"\n aria-hidden=\"true\"\n style={{\n clipPath: `inset(0 ${100 - fillPercent}% 0 0)`,\n }}\n >\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n className=\"ds-star-rating__filled\"\n />\n </svg>\n </span>\n );\n });\n\n return (\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={clsx('ds-star-rating', `ds-star-rating--${size}`, className)}\n role=\"img\"\n aria-label={`${clampedValue} out of ${max} stars`}\n {...props}\n >\n <span className=\"ds-star-rating__stars\">{stars}</span>\n {showValue && (\n <span className=\"ds-star-rating__value\">\n {clampedValue.toLocaleString(undefined, {\n minimumFractionDigits: clampedValue % 1 !== 0 ? 1 : 0,\n maximumFractionDigits: 1,\n })}\n {valueLabel && (\n <span className=\"ds-star-rating__value-label\">{valueLabel}</span>\n )}\n </span>\n )}\n </div>\n );\n },\n);\n\nStarRating.displayName = 'StarRating';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { StarRating } from '../StarRating/StarRating';\nimport './PlatformBadge.css';\n\n/* ============================================================================\n PLATFORM BADGE\n ============================================================================\n Recognizable review platform icons (Trustpilot, G2, Google, Chrome Web\n Store) with optional rating display. Builds instant trust through visual\n brand recognition.\n\n Strategic objective: Third-party authority signal\n ============================================================================ */\n\nexport type Platform = 'trustpilot' | 'g2' | 'google' | 'chrome-web-store';\n\nexport interface PlatformBadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Review platform */\n platform: Platform;\n /** Display mode */\n variant?: 'icon-only' | 'icon-label' | 'full';\n /** Platform rating (used in 'full' variant) */\n rating?: number;\n /** Number of reviews (used in 'full' variant) */\n count?: number;\n /** Size variant */\n size?: 'sm' | 'md';\n}\n\n/* --------------------------------------------------------------------------\n Platform SVG Icons — inline for zero-latency rendering\n -------------------------------------------------------------------------- */\n\nconst TrustpilotIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 2l2.9 8.9H24l-7.35 5.34 2.81 8.64L12 19.56l-7.46 5.32 2.81-8.64L0 10.9h9.1L12 2z\" fill=\"#00B67A\" />\n </svg>\n);\n\nconst G2Icon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z\" fill=\"#FF492C\" />\n <text x=\"50%\" y=\"54%\" dominantBaseline=\"middle\" textAnchor=\"middle\" fill=\"white\" fontWeight=\"bold\" fontSize=\"11\" fontFamily=\"Arial, sans-serif\">G2</text>\n </svg>\n);\n\nconst GoogleIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 01-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z\" fill=\"#4285F4\"/>\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" fill=\"#34A853\"/>\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18A10.96 10.96 0 001 12c0 1.77.42 3.45 1.18 4.93l3.66-2.84z\" fill=\"#FBBC05\"/>\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" fill=\"#EA4335\"/>\n </svg>\n);\n\nconst ChromeWebStoreIcon = ({ size }: { size: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"#4285F4\" opacity=\"0.1\" stroke=\"#4285F4\" strokeWidth=\"1.5\"/>\n <path d=\"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0 8.5c-1.93 0-3.5-1.57-3.5-3.5S10.07 8.5 12 8.5s3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z\" fill=\"#4285F4\"/>\n <path d=\"M7.5 10.5L4 5.5\" stroke=\"#EA4335\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n <path d=\"M16.5 10.5L20 5.5\" stroke=\"#FBBC05\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n <path d=\"M12 17l-3.5 5\" stroke=\"#34A853\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n);\n\nconst PLATFORM_ICONS: Record<Platform, React.FC<{ size: number }>> = {\n trustpilot: TrustpilotIcon,\n g2: G2Icon,\n google: GoogleIcon,\n 'chrome-web-store': ChromeWebStoreIcon,\n};\n\nconst PLATFORM_LABELS: Record<Platform, string> = {\n trustpilot: 'Trustpilot',\n g2: 'G2',\n google: 'Google',\n 'chrome-web-store': 'Chrome Web Store',\n};\n\nconst PLATFORM_COLORS: Record<Platform, string> = {\n trustpilot: '#00B67A',\n g2: '#FF492C',\n google: '#4285F4',\n 'chrome-web-store': '#4285F4',\n};\n\n/**\n * Review platform badge with recognizable brand icon, optional label,\n * and optional rating display.\n *\n * @example\n * ```tsx\n * <PlatformBadge platform=\"trustpilot\" variant=\"icon-only\" />\n * <PlatformBadge platform=\"g2\" variant=\"icon-label\" />\n * <PlatformBadge platform=\"google\" variant=\"full\" rating={4.9} count={42} />\n * ```\n */\nexport const PlatformBadge = forwardRef<HTMLDivElement, PlatformBadgeProps>(\n (\n {\n platform,\n variant = 'icon-label',\n rating,\n count,\n size = 'sm',\n className,\n ...props\n },\n ref,\n ) => {\n const Icon = PLATFORM_ICONS[platform];\n const label = PLATFORM_LABELS[platform];\n const accentColor = PLATFORM_COLORS[platform];\n const iconSize = size === 'sm' ? 18 : 22;\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-platform-badge',\n `ds-platform-badge--${variant}`,\n `ds-platform-badge--${size}`,\n className,\n )}\n style={{ '--platform-accent': accentColor } as React.CSSProperties}\n aria-label={\n variant === 'full' && rating\n ? `${label}: ${rating} stars${count ? ` from ${count} reviews` : ''}`\n : label\n }\n {...props}\n >\n <span className=\"ds-platform-badge__icon\">\n <Icon size={iconSize} />\n </span>\n\n {variant !== 'icon-only' && (\n <span className=\"ds-platform-badge__label\">{label}</span>\n )}\n\n {variant === 'full' && rating != null && (\n <span className=\"ds-platform-badge__rating\">\n <StarRating value={rating} size=\"sm\" />\n {count != null && (\n <span className=\"ds-platform-badge__count\">({count})</span>\n )}\n </span>\n )}\n </div>\n );\n },\n);\n\nPlatformBadge.displayName = 'PlatformBadge';\n","import React, { AnchorHTMLAttributes, forwardRef, MouseEvent, useState, useEffect } from 'react';\nimport type { UtmParams } from '../../web/utm/types';\nimport { useUtmDefaults } from '../../web/utm/useUtmDefaults';\nimport { isExemptUrl, appendUTMs, appendGovernedUTMs } from './outbound-link-utils';\n\nexport interface OutboundLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n href: string;\n context: string;\n campaignOverride?: string;\n mediumOverride?: string;\n preserveExistingUTM?: boolean;\n openInNewTab?: boolean;\n disableTracking?: boolean;\n /**\n * Governed UTM parameters. When provided, the link uses the UTM governance\n * system (buildUtmUrl) instead of the legacy appendUTMs approach.\n *\n * Preferred for all new code. Existing usages without utmParams continue\n * to work via the legacy path.\n */\n utmParams?: UtmParams;\n children: React.ReactNode;\n}\n\nexport interface OutboundClickEventDetail {\n destination_domain: string;\n destination_url: string;\n utm_medium_type: string;\n page_slug: string;\n component_location: string;\n timestamp: string;\n is_cross_subdomain: boolean;\n}\n\nexport const OutboundLink = forwardRef<HTMLAnchorElement, OutboundLinkProps>(\n (\n {\n href,\n context,\n campaignOverride,\n mediumOverride = 'outbound_link',\n preserveExistingUTM = true,\n openInNewTab = true,\n disableTracking = false,\n utmParams,\n onClick,\n children,\n ...props\n },\n ref\n ) => {\n // ── Resolve UTM params: explicit prop > context > legacy fallback ──\n const contextParams = useUtmDefaults();\n const resolvedUtmParams = utmParams ?? contextParams;\n\n // Parse hostname for analytics events (safe on both server/client)\n let hostname = '';\n try {\n const url = new URL(href);\n hostname = url.hostname;\n } catch {\n // Relative URL or invalid — hostname stays empty\n }\n\n // SSR and initial client render use the plain href to avoid hydration\n // mismatches. UTM params are decorated after hydration via useEffect.\n const [finalHref, setFinalHref] = useState(href);\n\n useEffect(() => {\n let isExternal = false;\n let currentMedium = mediumOverride;\n\n try {\n const url = new URL(href);\n const currentHost = window.location.hostname;\n isExternal = url.hostname !== currentHost;\n\n if (isExternal && currentHost.includes('sales-mind.ai') && url.hostname.includes('sales-mind.ai')) {\n if (currentMedium === 'outbound_link') {\n currentMedium = 'cross_subdomain';\n }\n }\n } catch {\n isExternal = false;\n }\n\n const isExempt = isExemptUrl(href) || disableTracking;\n\n if (isExternal && !isExempt) {\n if (resolvedUtmParams) {\n // Governed path: use buildUtmUrl via appendGovernedUTMs\n setFinalHref(appendGovernedUTMs(href, resolvedUtmParams, preserveExistingUTM));\n } else {\n // Legacy path: use appendUTMs with non-governed defaults\n const pageSlug = window.location.pathname.replace(/^\\/|\\/$/g, '') || 'home';\n setFinalHref(appendUTMs(href, context, pageSlug, {\n mediumOverride: currentMedium,\n campaignOverride,\n preserveExisting: preserveExistingUTM,\n }));\n }\n } else {\n setFinalHref(href);\n }\n }, [href, context, mediumOverride, campaignOverride, preserveExistingUTM, disableTracking, resolvedUtmParams]);\n\n const handleClick = (e: MouseEvent<HTMLAnchorElement>) => {\n if (typeof window === 'undefined' || disableTracking) {\n onClick?.(e);\n return;\n }\n\n let clickExternal = false;\n let clickCrossSubdomain = false;\n let clickMedium = mediumOverride;\n\n try {\n const url = new URL(href);\n const currentHost = window.location.hostname;\n clickExternal = url.hostname !== currentHost;\n\n if (clickExternal && currentHost.includes('sales-mind.ai') && url.hostname.includes('sales-mind.ai')) {\n clickCrossSubdomain = true;\n if (clickMedium === 'outbound_link') {\n clickMedium = 'cross_subdomain';\n }\n }\n } catch { /* relative URL */ }\n\n if (clickExternal) {\n const detail: OutboundClickEventDetail = {\n destination_domain: hostname,\n destination_url: finalHref,\n utm_medium_type: clickMedium,\n page_slug: window.location.pathname,\n component_location: context,\n timestamp: new Date().toISOString(),\n is_cross_subdomain: clickCrossSubdomain,\n };\n\n const event = new CustomEvent('outbound_click', { detail });\n window.dispatchEvent(event);\n }\n\n onClick?.(e);\n };\n\n // Determine SEO attributes\n const relParts = [];\n \n // Check if it's cross-subdomain for target logic (usually open internal links in same tab, external in new)\n let shouldOpenNewTab = openInNewTab;\n try {\n const url = new URL(href);\n if (typeof window !== 'undefined') {\n const currentHost = window.location.hostname;\n if (url.hostname !== currentHost && currentHost.includes('sales-mind.ai') && url.hostname.includes('sales-mind.ai')) {\n shouldOpenNewTab = false; // By default, prefer same tab for cross-subdomain ecosystem links\n }\n }\n } catch { /* empty */ }\n\n if (shouldOpenNewTab) relParts.push('noopener', 'noreferrer');\n if (mediumOverride === 'citation') relParts.push('nofollow');\n const rel = relParts.length > 0 ? relParts.join(' ') : undefined;\n\n return (\n // eslint-disable-next-line no-restricted-syntax\n <a\n ref={ref}\n href={finalHref}\n target={shouldOpenNewTab ? '_blank' : undefined}\n rel={rel}\n onClick={handleClick}\n {...props}\n >\n {children}\n </a>\n );\n }\n);\n\nOutboundLink.displayName = 'OutboundLink';\n","import { useContext } from 'react';\nimport { UtmContext } from './utm-context';\nimport type { UtmParams } from './types';\n\n/**\n * Read the nearest UtmProvider's default params.\n * Returns `null` when no provider is present (callers should fall back gracefully).\n */\nexport function useUtmDefaults(): UtmParams | null {\n return useContext(UtmContext);\n}\n","import { createContext } from 'react';\nimport type { UtmParams } from './types';\n\n/** Internal React context instance. Import via UtmProvider / useUtmDefaults — do not use directly. */\nexport const UtmContext = createContext<UtmParams | null>(null);\n","/* ============================================================================\n UTM URL Builders\n ============================================================================ */\n\nimport type { UtmParams } from './types';\n\n/** Placeholder origin used internally to parse relative URLs. Never appears in output. */\nconst PLACEHOLDER_ORIGIN = 'https://__placeholder__.internal';\n\n/**\n * Build a URL with UTM parameters appended.\n *\n * - Supports both absolute and relative URLs.\n * - Preserves existing query parameters and hash fragments.\n * - Always emits params in canonical order: source → medium → campaign → term → content.\n * - Omits optional params (term, content) when undefined.\n *\n * @example\n * buildUtmUrl('https://app.sales-mind.ai/register', { source: 'linkedin', medium: 'dm', campaign: 'discoveryCall' })\n * // → 'https://app.sales-mind.ai/register?utm_source=linkedin&utm_medium=dm&utm_campaign=discoveryCall'\n *\n * buildUtmUrl('/pricing', { source: 'website', medium: 'webHome', campaign: 'trial' })\n * // → '/pricing?utm_source=website&utm_medium=webHome&utm_campaign=trial'\n */\nexport function buildUtmUrl(baseUrl: string, params: UtmParams): string {\n const isRelative = baseUrl.startsWith('/');\n\n let url: URL;\n try {\n url = isRelative ? new URL(baseUrl, PLACEHOLDER_ORIGIN) : new URL(baseUrl);\n } catch {\n // If URL parsing fails entirely, return the base URL unchanged.\n return baseUrl;\n }\n\n // Preserve existing params by collecting them first, then clearing and re-adding in order.\n const existingParams: [string, string][] = [];\n url.searchParams.forEach((value, key) => {\n existingParams.push([key, value]);\n });\n\n // Clear all params to rebuild in canonical order.\n for (const [key] of existingParams) {\n url.searchParams.delete(key);\n }\n\n // Re-add existing non-UTM params first.\n for (const [key, value] of existingParams) {\n if (!key.startsWith('utm_')) {\n url.searchParams.set(key, value);\n }\n }\n\n // Append UTM params in canonical order.\n url.searchParams.set('utm_source', params.source);\n url.searchParams.set('utm_medium', params.medium);\n url.searchParams.set('utm_campaign', params.campaign);\n if (params.term !== undefined) {\n url.searchParams.set('utm_term', params.term);\n }\n if (params.content !== undefined) {\n url.searchParams.set('utm_content', params.content);\n }\n\n if (isRelative) {\n // Strip placeholder origin to return a relative path.\n return url.href.replace(PLACEHOLDER_ORIGIN, '');\n }\n\n return url.href;\n}\n","/* ============================================================================\n URL Classification & UTM Enforcement Logic\n ============================================================================\n Determines whether a URL requires UTM parameters based on its type.\n No imports from validators — avoids circular dependency.\n ============================================================================ */\n\nimport type { UrlClassification } from './types';\n\n// ── Patterns ─────────────────────────────────────────────────────────────────\n\n/** Internal domains — UTMs not required for same-origin navigation. */\nconst INTERNAL_PATTERNS = [\n /^\\/(?!\\/)/, // Relative paths\n /^https?:\\/\\/(www\\.)?sales-mind\\.ai/i, // Marketing site\n /^https?:\\/\\/app\\.sales-mind\\.ai/i, // Web app\n /^https?:\\/\\/apps\\.sales-mind\\.ai/i, // Web app (legacy)\n /^https?:\\/\\/meet\\.sales-mind\\.ai/i, // Booking\n /^https?:\\/\\/docs\\.sales-mind\\.ai/i, // Docs\n];\n\n/** System endpoints — never receive UTMs. */\nconst SYSTEM_PATTERNS = [\n /^https?:\\/\\/.*\\/api\\//i, // API endpoints\n /^https?:\\/\\/.*\\/webhook/i, // Webhooks\n /^https?:\\/\\/.*\\/oauth/i, // OAuth callbacks\n /^https?:\\/\\/.*\\/callback/i, // Callbacks\n /^https?:\\/\\/.*\\.supabase\\.(co|com)/i, // Supabase\n /^https?:\\/\\/.*\\.firebaseapp\\.com/i, // Firebase\n /^https?:\\/\\/.*\\.cloudfunctions\\.net/i, // Cloud Functions\n];\n\n/** Static assets — never receive UTMs. */\nconst ASSET_PATTERNS = [\n /\\.(css|js|mjs|map|woff2?|ttf|eot|svg|png|jpe?g|gif|webp|avif|ico|pdf)(\\?.*)?$/i,\n];\n\n/** Conversion destinations — always require UTMs. */\nconst CONVERSION_PATTERNS = [\n /^https?:\\/\\/(www\\.)?calendly\\.com/i,\n /^https?:\\/\\/(checkout\\.)?stripe\\.com/i,\n /^https?:\\/\\/buy\\.stripe\\.com/i,\n /^https?:\\/\\/chromewebstore\\.google\\.com/i,\n /^https?:\\/\\/meet\\.sales-mind\\.ai/i,\n];\n\n/** Protocol-level links — never receive UTMs. */\nconst PROTOCOL_EXEMPT = [\n /^mailto:/i,\n /^tel:/i,\n /^#/,\n /^javascript:/i,\n];\n\n// ── Classification ───────────────────────────────────────────────────────────\n\n/**\n * Classify a URL to determine its type.\n *\n * Classification order (first match wins):\n * 1. Protocol links (mailto, tel, anchor)\n * 2. Static assets\n * 3. System endpoints (API, webhooks, OAuth)\n * 4. Conversion destinations (Calendly, Stripe, Chrome Store)\n * 5. Internal (*.sales-mind.ai)\n * 6. External (everything else)\n */\nexport function classifyUrl(url: string): UrlClassification {\n // Protocol links\n if (PROTOCOL_EXEMPT.some(p => p.test(url))) return 'protocol';\n\n // Static assets\n if (ASSET_PATTERNS.some(p => p.test(url))) return 'asset';\n\n // System endpoints\n if (SYSTEM_PATTERNS.some(p => p.test(url))) return 'system';\n\n // Conversion destinations\n if (CONVERSION_PATTERNS.some(p => p.test(url))) return 'conversion';\n\n // Internal\n if (INTERNAL_PATTERNS.some(p => p.test(url))) return 'internal';\n\n // Everything else is external\n return 'external';\n}\n\n/**\n * Determine whether a URL requires UTM parameters.\n *\n * UTMs are mandatory for:\n * - External third-party destinations\n * - Conversion destinations (Calendly, Stripe, Chrome Web Store)\n *\n * UTMs are NOT required for:\n * - Internal navigation\n * - System endpoints\n * - Static assets\n * - Protocol links\n */\nexport function requiresUtm(url: string): boolean {\n const classification = classifyUrl(url);\n return classification === 'external' || classification === 'conversion';\n}\n\n/**\n * Check if a URL is explicitly exempt from UTM requirements.\n */\nexport function isUtmExempt(url: string): boolean {\n const classification = classifyUrl(url);\n return classification === 'protocol'\n || classification === 'asset'\n || classification === 'system'\n || classification === 'internal';\n}\n","import type { UtmParams } from '../../web/utm/types';\nimport { buildUtmUrl } from '../../web/utm/builders';\nimport { classifyUrl } from '../../web/utm/classifiers';\n\n/**\n * @deprecated Use governed `utmParams` prop on OutboundLink instead.\n * Legacy default source — superseded by governed UTM_SOURCES enum.\n */\nconst LEGACY_UTM_SOURCE = 'salesmind';\n\nconst EXEMPT_PATTERNS = [\n /^https?:\\/\\/(www\\.)?(stripe\\.com|checkout\\.stripe\\.com|paypal\\.com)/i,\n /^https?:\\/\\/(www\\.)?github\\.com\\/login\\/oauth/i,\n];\n\n/**\n * Check if a URL is exempt from UTM tagging.\n * Uses both legacy patterns and governed URL classification.\n */\nexport const isExemptUrl = (urlStr: string): boolean => {\n if (urlStr.startsWith('mailto:') || urlStr.startsWith('tel:')) return true;\n\n // Governed classification: system/protocol/asset URLs are exempt\n const classification = classifyUrl(urlStr);\n if (classification === 'system' || classification === 'protocol' || classification === 'asset') {\n return true;\n }\n\n return EXEMPT_PATTERNS.some(pattern => pattern.test(urlStr));\n};\n\n/**\n * Append governed UTM parameters to a URL using `buildUtmUrl`.\n * Preferred over the legacy `appendUTMs` function.\n */\nexport const appendGovernedUTMs = (\n href: string,\n params: UtmParams,\n preserveExisting = true,\n): string => {\n try {\n const url = new URL(href);\n\n // If preserveExisting and all UTM params are already set, return unchanged\n if (preserveExisting) {\n const hasAll = url.searchParams.has('utm_source')\n && url.searchParams.has('utm_medium')\n && url.searchParams.has('utm_campaign');\n if (hasAll) return href;\n }\n\n return buildUtmUrl(href, params);\n } catch {\n return href;\n }\n};\n\n/**\n * @deprecated Prefer `appendGovernedUTMs` with governed `UtmParams`.\n *\n * Legacy UTM append function. Uses non-governed defaults:\n * - utm_source = 'salesmind' (not in governed enum)\n * - utm_medium = 'outbound_link' (snake_case, not in governed enum)\n *\n * Retained for backward compatibility. Consumers should migrate to\n * the `utmParams` prop on OutboundLink.\n */\nexport const appendUTMs = (\n href: string,\n context: string,\n pageSlug: string,\n options: {\n mediumOverride?: string;\n campaignOverride?: string;\n preserveExisting?: boolean;\n }\n): string => {\n try {\n const url = new URL(href);\n const { mediumOverride = 'outbound_link', campaignOverride, preserveExisting = true } = options;\n\n const utms = {\n utm_source: LEGACY_UTM_SOURCE,\n utm_medium: mediumOverride,\n utm_campaign: campaignOverride || pageSlug,\n utm_content: context,\n };\n\n Object.entries(utms).forEach(([key, value]) => {\n if (value) {\n if (preserveExisting && url.searchParams.has(key)) {\n // Do not override if preserve is true\n return;\n }\n url.searchParams.set(key, value);\n }\n });\n\n return url.toString();\n } catch {\n return href; // Return original if not valid URL (e.g. relative)\n }\n};\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, SectionShellProps } from '../SectionShell/SectionShell';\nimport './SocialProof.css';\n\n/* ============================================================================\n SOCIAL PROOF GRID — VARIABLE-SIZE MASONRY\n ============================================================================\n Responsive grid supporting variable-size cards (span-2 for case studies),\n staggered entrance animations, and CSS Grid dense auto-placement.\n ============================================================================ */\n\nexport interface SocialProofGridProps extends Omit<SectionShellProps, 'title'> {\n /** Number of columns at desktop breakpoint */\n columns?: 2 | 3 | 4;\n /** Use CSS column-based masonry instead of CSS Grid */\n masonry?: boolean;\n /** Enable staggered entrance animation on children */\n staggered?: boolean;\n}\n\n/**\n * Wrap each child in a grid item. Use `span={2}` data attribute or\n * the `ds-social-grid__item--span-2` class on children to span 2 columns.\n *\n * @example\n * ```tsx\n * <SocialProofGrid columns={3} staggered>\n * <SocialProofCard variant=\"simple\" ... />\n * <div className=\"ds-social-grid__item--span-2\">\n * <SocialProofCard variant=\"case-study\" ... />\n * </div>\n * </SocialProofGrid>\n * ```\n */\nexport const SocialProofGrid = forwardRef<HTMLDivElement, SocialProofGridProps>(\n ({ columns = 3, masonry = false, staggered = false, className, children, ...props }, ref) => {\n // Add staggered animation delay to each child via CSS class + custom property\n // (avoids leaking a custom `animationDelay` React prop to the DOM)\n const enhancedChildren = staggered\n ? React.Children.map(children, (child, index) => {\n if (!React.isValidElement(child)) return child;\n const delay = Math.min(index * 50, 600); // Cap at 600ms\n const childProps = child.props as { style?: React.CSSProperties; className?: string };\n return React.cloneElement(child as React.ReactElement<{ style?: React.CSSProperties; className?: string }>, {\n style: { ...childProps.style, '--card-delay': `${delay}ms` } as React.CSSProperties,\n className: clsx(childProps.className, 'ds-social-card--animated'),\n });\n })\n : children;\n\n return (\n <SectionShell\n ref={ref}\n padding=\"md\"\n className={clsx('ds-social-proof', className)}\n {...props}\n >\n {masonry ? (\n <div className=\"ds-social-masonry\">{enhancedChildren}</div>\n ) : (\n <div className={clsx('ds-social-grid', `ds-social-grid--${columns}-col`)}>\n {enhancedChildren}\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nSocialProofGrid.displayName = 'SocialProofGrid';\n","import { forwardRef, CSSProperties } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, SectionShellProps } from '../SectionShell/SectionShell';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './SocialProof.css';\n\nexport interface LogoItem {\n id: string | number;\n alt: string;\n src?: string;\n logo?: React.ReactNode; // SVG component\n href?: string;\n badge?: string; // Optional badge text (e.g. \"Testimonial\")\n}\n\nexport interface SocialProofLogosProps extends Omit<SectionShellProps, 'title'> {\n title?: React.ReactNode;\n logos: LogoItem[];\n variant?: 'grid' | 'marquee';\n speed?: number; // Seconds\n}\n\nconst LogoItemRender = ({ item, className }: { item: LogoItem; className?: string }) => {\n const content = item.logo ? (\n item.logo\n ) : (\n <img\n src={item.src}\n alt={item.alt}\n width={120}\n height={48}\n loading=\"lazy\"\n decoding=\"async\"\n style={{ objectFit: 'contain', width: 'auto', height: '100%' }}\n />\n );\n\n const innerContent = (\n <>\n {content}\n {item.badge && <span className=\"ds-social-logos__badge\">{item.badge}</span>}\n </>\n );\n\n if (item.href) {\n const isInternal = item.href.startsWith('/');\n\n return (\n <OutboundLink\n href={item.href}\n context=\"social-proof-logo\"\n className={clsx('ds-social-logos__item', className)}\n title={item.alt}\n openInNewTab={!isInternal}\n >\n {innerContent}\n </OutboundLink>\n );\n }\n\n return (\n <div className={clsx('ds-social-logos__item', className)} title={item.alt}>\n {innerContent}\n </div>\n );\n};\n\nexport const SocialProofLogos = forwardRef<HTMLDivElement, SocialProofLogosProps>(\n ({ title, logos, variant = 'grid', speed = 40, className, ...props }, ref) => {\n return (\n <SectionShell\n ref={ref}\n padding=\"sm\"\n className={clsx('ds-social-logos', className)}\n {...props}\n >\n {title && (\n <h3\n className=\"ds-section-header__eyebrow\"\n style={{ textAlign: 'center', marginBottom: 'var(--space-8)' }}\n >\n {title}\n </h3>\n )}\n\n {variant === 'marquee' ? (\n <div\n className=\"ds-social-logos__marquee\"\n style={{ '--marquee-duration': `${speed}s` } as CSSProperties}\n >\n <div className=\"ds-social-logos__track\">\n {logos.map((item) => (\n <LogoItemRender key={`set1-${item.id}`} item={item} />\n ))}\n </div>\n <div className=\"ds-social-logos__track\" aria-hidden=\"true\">\n {logos.map((item) => (\n <LogoItemRender key={`set2-${item.id}`} item={item} />\n ))}\n </div>\n </div>\n ) : (\n <div className=\"ds-social-grid ds-social-grid--4-col\" style={{ alignItems: 'center' }}>\n {logos.map((item) => (\n <LogoItemRender key={item.id} item={item} />\n ))}\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nSocialProofLogos.displayName = 'SocialProofLogos';\n","import { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, SectionShellProps } from '../SectionShell/SectionShell';\nimport { StarRating } from '../StarRating/StarRating';\nimport { PlatformBadge, type Platform } from '../PlatformBadge/PlatformBadge';\nimport { Author } from './Card';\nimport './SocialProof.css';\n\n/* ============================================================================\n SOCIAL PROOF FEATURED — IMMERSIVE HERO TESTIMONIAL\n ============================================================================\n Three layout variants for hero-level social proof display:\n - standard: Side-by-side media + quote (existing)\n - cinematic: Dark bg, dramatic sizing, for video testimonials\n - spotlight: Centered layout with radial gradient, for text quotes\n ============================================================================ */\n\nconst PlayIconLarge = () => (\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"32\" cy=\"32\" r=\"32\" fill=\"white\" fillOpacity=\"0.9\" />\n <path d=\"M42 32L26 41.2376L26 22.7624L42 32Z\" fill=\"black\" />\n </svg>\n);\n\nexport interface SocialProofFeaturedProps extends Omit<SectionShellProps, 'title'> {\n /** Quote text */\n quote: string;\n /** Author info */\n author: Author;\n /** Media element (video component, image, or VideoLightbox) */\n media?: React.ReactNode;\n /** Quick image src for media slot */\n mediaSrc?: string;\n /** Layout orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Visual variant */\n featuredVariant?: 'standard' | 'cinematic' | 'spotlight';\n /** Star rating */\n starRating?: number;\n /** Review platform */\n platform?: Platform;\n /** Company logo node */\n logo?: React.ReactNode;\n}\n\nexport const SocialProofFeatured = forwardRef<HTMLDivElement, SocialProofFeaturedProps>(\n (\n {\n quote,\n author,\n media,\n mediaSrc,\n orientation = 'horizontal',\n featuredVariant = 'standard',\n starRating,\n platform,\n logo,\n className,\n ...props\n },\n ref,\n ) => {\n const showMedia = media || mediaSrc;\n const effectiveOrientation = featuredVariant === 'spotlight' ? 'vertical' : orientation;\n\n return (\n <SectionShell\n ref={ref}\n padding=\"md\"\n className={clsx('ds-social-featured-section', className)}\n {...props}\n >\n <div\n className={clsx(\n 'ds-social-featured',\n `ds-social-featured--${effectiveOrientation}`,\n `ds-social-featured--${featuredVariant}`,\n )}\n >\n {/* Media Side */}\n {showMedia && featuredVariant !== 'spotlight' && (\n <div className=\"ds-social-featured__media\">\n {media ? (\n media\n ) : (\n <>\n <img\n src={mediaSrc || 'https://placehold.co/1920x1080/111/FFF?text=Video+Case+Study'}\n alt={`Case study by ${author.name}`}\n style={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n <div className=\"ds-social-card__play\">\n <PlayIconLarge />\n </div>\n </>\n )}\n </div>\n )}\n\n {/* Content Side */}\n <div className=\"ds-social-featured__content\">\n {logo && (\n <div className=\"ds-social-featured__logo\">{logo}</div>\n )}\n\n <blockquote className=\"ds-social-featured__quote\">“{quote}”</blockquote>\n\n <div className=\"ds-social-featured__author-large\">\n {author.avatar && (\n <div className=\"ds-social-card__avatar\">\n <img src={author.avatar} alt={author.name} />\n </div>\n )}\n <div className=\"ds-social-card__meta\">\n <span className=\"ds-social-card__name\">{author.name}</span>\n <span className=\"ds-social-card__role\">\n {author.role}{author.role && author.company && ', '}{author.company}\n </span>\n </div>\n </div>\n\n {/* Rating & Platform */}\n {(starRating != null || platform) && (\n <div className=\"ds-social-featured__trust\">\n {starRating != null && <StarRating value={starRating} size=\"md\" showValue />}\n {platform && <PlatformBadge platform={platform} variant=\"icon-label\" size=\"md\" />}\n </div>\n )}\n </div>\n </div>\n </SectionShell>\n );\n },\n);\n\nSocialProofFeatured.displayName = 'SocialProofFeatured';\n","import { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { motion } from 'framer-motion';\nimport { SectionShell, SectionShellProps } from '../SectionShell/SectionShell';\nimport { VARIANTS } from '../../tokens/motion';\nimport './SocialProof.css';\n\nexport interface SocialProofCarouselProps extends SectionShellProps {\n children: React.ReactNode;\n}\n\nexport const SocialProofCarousel = forwardRef<HTMLDivElement, SocialProofCarouselProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <SectionShell\n ref={ref}\n padding=\"none\"\n containerFluid\n className={clsx('ds-social-carousel', className)}\n {...props}\n >\n <motion.div\n className=\"ds-social-carousel__track\"\n variants={VARIANTS.fadeIn}\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once: true, margin: '-10%' }}\n >\n {children}\n {/* Duplicate children for infinite scroll illusion */}\n {children}\n </motion.div>\n </SectionShell>\n );\n },\n);\n\nSocialProofCarousel.displayName = 'SocialProofCarousel';\n","/* ============================================================================\n MOTION TOKENS & FRAMER CONFIG\n ============================================================================ */\n\n/**\n * Duration tokens (seconds) for Framer Motion\n */\nexport const DURATION = {\n micro: 0.15, // 150ms\n short: 0.25, // 250ms\n medium: 0.5, // 500ms\n long: 1.0, // 1000ms\n} as const;\n\n/**\n * Easing definitions (cubic-bezier arrays) for Framer Motion\n */\nexport const EASING = {\n standard: [0.16, 1, 0.3, 1], // Smooth, premium feel\n emphasis: [0.34, 1.56, 0.64, 1], // Slight spring/overshoot\n exit: [0.4, 0, 0.2, 1], // Quick, decisive exit\n linear: [0, 0, 1, 1],\n} as const;\n\n/**\n * Standard transitions for Framer Motion\n */\nexport const TRANSITION = {\n standard: {\n duration: DURATION.medium,\n ease: EASING.standard,\n },\n emphasis: {\n duration: DURATION.medium,\n ease: EASING.emphasis,\n },\n quick: {\n duration: DURATION.short,\n ease: EASING.standard,\n },\n spring: {\n type: 'spring',\n stiffness: 200,\n damping: 20,\n },\n} as const;\n\n/**\n * Reusable Variants for Framer Motion\n */\nexport const VARIANTS = {\n fadeIn: {\n hidden: { opacity: 0 },\n visible: { opacity: 1, transition: { duration: DURATION.medium, ease: EASING.standard } },\n },\n fadeUp: {\n hidden: { opacity: 0, y: 12 },\n visible: { opacity: 1, y: 0, transition: { duration: DURATION.medium, ease: EASING.standard } },\n },\n scaleIn: {\n hidden: { opacity: 0, scale: 0.95 },\n visible: {\n opacity: 1,\n scale: 1,\n transition: { duration: DURATION.short, ease: EASING.emphasis },\n },\n },\n staggerContainer: {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: 0.08,\n delayChildren: 0.1,\n },\n },\n },\n pulse: {\n hidden: { scale: 1 },\n visible: {\n scale: [1, 1.05, 1],\n transition: { duration: 1.5, repeat: Infinity, ease: 'easeInOut' },\n },\n },\n impact: {\n hidden: { scale: 1 },\n trigger: {\n scale: [1, 0.95, 1.05, 1],\n transition: { duration: 0.4, ease: 'backOut' },\n },\n },\n} as const;\n\n/**\n * Layout Tokens\n */\nexport const DISTANCE = {\n sm: 4,\n md: 12,\n lg: 24,\n xl: 48,\n} as const;\n\nexport const MOTION = {\n DURATION,\n EASING,\n TRANSITION,\n VARIANTS,\n DISTANCE,\n} as const;\n","import clsx from 'clsx';\nimport { SectionShell } from '../SectionShell';\n\nexport interface VerticalVideoGridProps {\n /** Array of YouTube Shorts URLs (e.g. https://www.youtube.com/shorts/xxxxx) */\n urls: string[];\n /** Optional class name */\n className?: string;\n}\n\nfunction getShortsEmbedUrl(url: string): string {\n // Extract ID from shorts url like https://www.youtube.com/shorts/_Ot6bpzzovU\n const match = url.match(/(?:youtube\\.com\\/shorts\\/|youtu\\.be\\/|youtube\\.com\\/embed\\/)([a-zA-Z0-9_-]+)/);\n if (match) {\n // Add rel=0 and loop/playlist to ensure it stays focused on the content\n return `https://www.youtube-nocookie.com/embed/${match[1]}?rel=0&modestbranding=1&playsinline=1&controls=1`;\n }\n // Try to use youtube-nocookie for all iframes to prevent block issues\n return url.replace('youtube.com', 'youtube-nocookie.com') + (url.includes('?') ? '&' : '?') + 'rel=0&modestbranding=1&playsinline=1';\n}\n\n/**\n * Grid component optimized for displaying vertical 9:16 videos (YouTube Shorts, TikToks, Reels)\n */\nexport function VerticalVideoGrid({ urls, className }: VerticalVideoGridProps) {\n if (!urls || urls.length === 0) return null;\n\n return (\n <SectionShell className={clsx('ds-vertical-video-grid my-16', className)}>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4 md:gap-6 max-w-6xl mx-auto\">\n {urls.map((url, i) => (\n <div \n key={i} \n className=\"relative w-full overflow-hidden rounded-[20px] shadow-lg border border-white/10 bg-black\"\n style={{ aspectRatio: '9/16' }}\n >\n <iframe\n src={getShortsEmbedUrl(url)}\n title={`Short testimonial ${i + 1}`}\n className=\"absolute inset-0 w-full h-full\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n allowFullScreen\n loading=\"lazy\"\n />\n </div>\n ))}\n </div>\n </SectionShell>\n );\n}\n","import { SocialProofCard } from './Card';\nimport { SocialProofGrid } from './Grid';\nimport { SocialProofLogos } from './Logos';\nimport { SocialProofFeatured } from './Featured';\nimport { SocialProofCarousel } from './Carousel';\nimport { VerticalVideoGrid } from './VerticalVideoGrid';\n\nexport const SocialProof = {\n Card: SocialProofCard,\n Grid: SocialProofGrid,\n Logos: SocialProofLogos,\n Featured: SocialProofFeatured,\n Carousel: SocialProofCarousel,\n VerticalGrid: VerticalVideoGrid,\n};\n\nexport * from './Card';\nexport * from './Grid';\nexport * from './Logos';\nexport * from './Featured';\nexport * from './Carousel';\nexport * from './VerticalVideoGrid';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './PricingCard.css';\n\n/* ============================================================================\n PRICING CARD — Advanced pricing tier card with glass treatment\n ============================================================================ */\n\nexport interface PricingFeature {\n /** Feature label text */\n text: string;\n /** Whether this feature is included in the tier */\n included?: boolean;\n /** Optional tooltip or emphasis text */\n detail?: string;\n}\n\nexport interface PricingCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Tier label (e.g. \"Operator Mode\", \"Founder Mode\") */\n tier: string;\n /** Short tagline under the tier name */\n tagline?: string;\n /** Price display string (e.g. \"$1,499\", \"$999\") */\n price: string;\n /** Price suffix (e.g. \"/month\", \"one-time\") */\n priceSuffix?: string;\n /** Previous/anchor price for strikethrough display */\n anchorPrice?: string;\n /** Badge text (e.g. \"Most Popular\", \"Best Value\") */\n badge?: string;\n /** Whether this card is visually highlighted as the recommended option */\n highlighted?: boolean;\n /** List of features included in this tier */\n features?: PricingFeature[];\n /** Primary CTA button content */\n cta?: React.ReactNode;\n /** Optional secondary action below CTA */\n secondaryCta?: React.ReactNode;\n /** Footer note text (e.g. \"3-month minimum\") */\n footerNote?: string;\n}\n\nexport const PricingCard = React.forwardRef<HTMLDivElement, PricingCardProps>(\n (\n {\n tier,\n tagline,\n price,\n priceSuffix,\n anchorPrice,\n badge,\n highlighted = false,\n features = [],\n cta,\n secondaryCta,\n footerNote,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-pricing-card',\n highlighted && 'ds-pricing-card--highlighted',\n className,\n )}\n {...props}\n >\n {/* Badge */}\n {badge && (\n <div className=\"ds-pricing-card__badge\">{badge}</div>\n )}\n\n {/* Header */}\n <div className=\"ds-pricing-card__header\">\n <h3 className=\"ds-pricing-card__tier\">{tier}</h3>\n {tagline && (\n <p className=\"ds-pricing-card__tagline\">{tagline}</p>\n )}\n </div>\n\n {/* Price block */}\n <div className=\"ds-pricing-card__price-block\">\n {anchorPrice && (\n <span className=\"ds-pricing-card__anchor-price\">{anchorPrice}</span>\n )}\n <div className=\"ds-pricing-card__price-row\">\n <span className=\"ds-pricing-card__price\">{price}</span>\n {priceSuffix && (\n <span className=\"ds-pricing-card__price-suffix\">{priceSuffix}</span>\n )}\n </div>\n </div>\n\n {/* Features */}\n {features.length > 0 && (\n <ul className=\"ds-pricing-card__features\">\n {features.map((feature, idx) => (\n <li\n key={idx}\n className={clsx(\n 'ds-pricing-card__feature',\n feature.included === false && 'ds-pricing-card__feature--excluded',\n )}\n >\n <span className=\"ds-pricing-card__feature-icon\" aria-hidden=\"true\">\n {feature.included === false ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )}\n </span>\n <span className=\"ds-pricing-card__feature-text\">\n {feature.text}\n {feature.detail && (\n <span className=\"ds-pricing-card__feature-detail\">\n {feature.detail}\n </span>\n )}\n </span>\n </li>\n ))}\n </ul>\n )}\n\n {/* CTA area */}\n {(cta || secondaryCta) && (\n <div className=\"ds-pricing-card__cta-area\">\n {cta}\n {secondaryCta && (\n <div className=\"ds-pricing-card__secondary-cta\">{secondaryCta}</div>\n )}\n </div>\n )}\n\n {/* Footer note */}\n {footerNote && (\n <p className=\"ds-pricing-card__footer-note\">{footerNote}</p>\n )}\n\n {/* Arbitrary children */}\n {children}\n </div>\n );\n },\n);\n\nPricingCard.displayName = 'PricingCard';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './ComparisonTable.css';\n\n/* ============================================================================\n COMPARISON TABLE — Side-by-side value/feature comparison\n ============================================================================ */\n\nexport interface ComparisonColumn {\n /** Column heading (e.g. \"Hiring SDRs\", \"SalesMind\") */\n label: string;\n /** Whether this column is highlighted as the recommended option */\n highlighted?: boolean;\n /** Optional badge above the column header */\n badge?: string;\n}\n\nexport interface ComparisonRow {\n /** Row label (the thing being compared) */\n label: string;\n /** Values for each column, in the same order as columns */\n values: (string | React.ReactNode)[];\n /** Optional category divider — if true, renders as a category header */\n isCategory?: boolean;\n}\n\nexport interface ComparisonTableProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Column definitions */\n columns: ComparisonColumn[];\n /** Row data */\n rows: ComparisonRow[];\n /** Optional table caption for accessibility */\n caption?: string;\n}\n\nexport const ComparisonTable = React.forwardRef<HTMLDivElement, ComparisonTableProps>(\n ({ columns, rows, caption, className, ...props }, ref) => {\n return (\n <div ref={ref} className={clsx('ds-comparison-table', className)} {...props}>\n <div className=\"ds-comparison-table__scroll\">\n <table className=\"ds-comparison-table__table\" role=\"table\">\n {caption && <caption className=\"ds-comparison-table__caption\">{caption}</caption>}\n <thead className=\"ds-comparison-table__head\">\n <tr>\n <th className=\"ds-comparison-table__corner\" scope=\"col\">\n <span className=\"ds-visually-hidden\">Feature</span>\n </th>\n {columns.map((col, idx) => (\n <th\n key={idx}\n scope=\"col\"\n className={clsx(\n 'ds-comparison-table__col-header',\n col.highlighted && 'ds-comparison-table__col-header--highlighted',\n )}\n >\n {col.badge && (\n <span className=\"ds-comparison-table__col-badge\">{col.badge}</span>\n )}\n <span className=\"ds-comparison-table__col-label\">{col.label}</span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"ds-comparison-table__body\">\n {rows.map((row, rowIdx) =>\n row.isCategory ? (\n <tr key={rowIdx} className=\"ds-comparison-table__category-row\">\n <td\n colSpan={columns.length + 1}\n className=\"ds-comparison-table__category\"\n >\n {row.label}\n </td>\n </tr>\n ) : (\n <tr key={rowIdx} className=\"ds-comparison-table__row\">\n <td className=\"ds-comparison-table__row-label\">{row.label}</td>\n {row.values.map((val, colIdx) => (\n <td\n key={colIdx}\n className={clsx(\n 'ds-comparison-table__cell',\n columns[colIdx]?.highlighted &&\n 'ds-comparison-table__cell--highlighted',\n )}\n >\n {val}\n </td>\n ))}\n </tr>\n ),\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n },\n);\n\nComparisonTable.displayName = 'ComparisonTable';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './ROICalculator.css';\n\n/* ============================================================================\n ROI CALCULATOR — Interactive cost comparison calculator\n ============================================================================ */\n\nexport interface ROIComparisonItem {\n /** Label (e.g. \"Hiring 3 SDRs\") */\n label: string;\n /** Monthly cost string */\n monthlyCost: string;\n /** Annual cost string */\n annualCost: string;\n /** Whether this item is the \"winner\" (highlighted) */\n isRecommended?: boolean;\n /** Additional context text */\n context?: string;\n}\n\nexport interface ROICalculatorProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Section eyebrow text */\n eyebrow?: string;\n /** Section title */\n title?: string;\n /** Comparison items to display */\n items: ROIComparisonItem[];\n /** Optional summary text below the comparison */\n summary?: React.ReactNode;\n /** Optional savings callout (e.g. \"Save $120,000/year\") */\n savingsCallout?: string;\n}\n\nexport const ROICalculator = React.forwardRef<HTMLDivElement, ROICalculatorProps>(\n (\n {\n eyebrow,\n title,\n items,\n summary,\n savingsCallout,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div ref={ref} className={clsx('ds-roi-calculator', className)} {...props}>\n {/* Header */}\n {(eyebrow || title) && (\n <div className=\"ds-roi-calculator__header\">\n {eyebrow && <span className=\"ds-roi-calculator__eyebrow\">{eyebrow}</span>}\n {title && <h3 className=\"ds-roi-calculator__title\">{title}</h3>}\n </div>\n )}\n\n {/* Comparison cards */}\n <div className=\"ds-roi-calculator__grid\">\n {items.map((item, idx) => (\n <div\n key={idx}\n className={clsx(\n 'ds-roi-calculator__item',\n item.isRecommended && 'ds-roi-calculator__item--recommended',\n )}\n >\n {item.isRecommended && (\n <span className=\"ds-roi-calculator__item-badge\">Your Cost</span>\n )}\n <span className=\"ds-roi-calculator__item-label\">{item.label}</span>\n <span className=\"ds-roi-calculator__item-cost\">{item.monthlyCost}</span>\n <span className=\"ds-roi-calculator__item-annual\">{item.annualCost}</span>\n {item.context && (\n <span className=\"ds-roi-calculator__item-context\">{item.context}</span>\n )}\n </div>\n ))}\n </div>\n\n {/* Savings callout */}\n {savingsCallout && (\n <div className=\"ds-roi-calculator__savings\">{savingsCallout}</div>\n )}\n\n {/* Summary */}\n {summary && (\n <div className=\"ds-roi-calculator__summary\">{summary}</div>\n )}\n </div>\n );\n },\n);\n\nROICalculator.displayName = 'ROICalculator';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './GuaranteeHighlight.css';\n\n/* ============================================================================\n GUARANTEE HIGHLIGHT — Prominent guarantee/commitment callout\n ============================================================================ */\n\nexport interface GuaranteeHighlightProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The guarantee statement (e.g. \"10+ qualified meetings per month\") */\n guarantee: string;\n /** Supporting detail or condition text */\n detail?: string;\n /** Optional fine print (e.g. \"Guarantee activates after onboarding alignment\") */\n finePrint?: string;\n /** Visual variant */\n variant?: 'default' | 'brand' | 'minimal';\n /** Optional icon — pass a React node (e.g. an SVG) */\n icon?: React.ReactNode;\n}\n\nexport const GuaranteeHighlight = React.forwardRef<HTMLDivElement, GuaranteeHighlightProps>(\n (\n {\n guarantee,\n detail,\n finePrint,\n variant = 'default',\n icon,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-guarantee',\n `ds-guarantee--${variant}`,\n className,\n )}\n {...props}\n >\n {icon && <div className=\"ds-guarantee__icon\">{icon}</div>}\n <div className=\"ds-guarantee__content\">\n <p className=\"ds-guarantee__statement\">{guarantee}</p>\n {detail && <p className=\"ds-guarantee__detail\">{detail}</p>}\n {finePrint && <p className=\"ds-guarantee__fine-print\">{finePrint}</p>}\n </div>\n </div>\n );\n },\n);\n\nGuaranteeHighlight.displayName = 'GuaranteeHighlight';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './ICPFilter.css';\n\n/* ============================================================================\n ICP FILTER — \"Who This Is For / Not For\" qualification block\n ============================================================================ */\n\nexport interface ICPFilterItem {\n /** Description text */\n text: string;\n}\n\nexport interface ICPFilterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Items describing who this IS for */\n qualifiedItems: ICPFilterItem[];\n /** Items describing who this is NOT for */\n disqualifiedItems: ICPFilterItem[];\n /** Heading for the qualified column */\n qualifiedHeading?: string;\n /** Heading for the disqualified column */\n disqualifiedHeading?: string;\n /** Layout variant */\n variant?: 'columns' | 'stacked';\n}\n\nexport const ICPFilter = React.forwardRef<HTMLDivElement, ICPFilterProps>(\n (\n {\n qualifiedItems,\n disqualifiedItems,\n qualifiedHeading = 'This Is For You If',\n disqualifiedHeading = 'This Is Not For You If',\n variant = 'columns',\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-icp-filter',\n `ds-icp-filter--${variant}`,\n className,\n )}\n {...props}\n >\n {/* Qualified column */}\n <div className=\"ds-icp-filter__column ds-icp-filter__column--qualified\">\n <h4 className=\"ds-icp-filter__heading ds-icp-filter__heading--qualified\">\n {qualifiedHeading}\n </h4>\n <ul className=\"ds-icp-filter__list\">\n {qualifiedItems.map((item, idx) => (\n <li key={idx} className=\"ds-icp-filter__item ds-icp-filter__item--qualified\">\n <span className=\"ds-icp-filter__icon\" aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </span>\n <span className=\"ds-icp-filter__text\">{item.text}</span>\n </li>\n ))}\n </ul>\n </div>\n\n {/* Disqualified column */}\n <div className=\"ds-icp-filter__column ds-icp-filter__column--disqualified\">\n <h4 className=\"ds-icp-filter__heading ds-icp-filter__heading--disqualified\">\n {disqualifiedHeading}\n </h4>\n <ul className=\"ds-icp-filter__list\">\n {disqualifiedItems.map((item, idx) => (\n <li key={idx} className=\"ds-icp-filter__item ds-icp-filter__item--disqualified\">\n <span className=\"ds-icp-filter__icon\" aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </span>\n <span className=\"ds-icp-filter__text\">{item.text}</span>\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n },\n);\n\nICPFilter.displayName = 'ICPFilter';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './ObjectionFAQ.css';\n\n/* ============================================================================\n OBJECTION FAQ — Strategic objection-handling FAQ module\n ============================================================================ */\n\nexport interface ObjectionItem {\n /** The objection/question (e.g. \"Is this just LinkedIn automation?\") */\n question: string;\n /** The strategic answer/reframe */\n answer: string;\n /** Optional tag/category (e.g. \"Safety\", \"Quality\", \"Process\") */\n tag?: string;\n}\n\nexport interface ObjectionFAQProps extends React.HTMLAttributes<HTMLDivElement> {\n /** List of objection items */\n items: ObjectionItem[];\n /** Section title */\n title?: string;\n /** Section subtitle */\n subtitle?: string;\n /** Whether multiple items can be open simultaneously */\n allowMultiple?: boolean;\n /** Initial open item index */\n defaultOpenIndex?: number;\n}\n\nexport const ObjectionFAQ = React.forwardRef<HTMLDivElement, ObjectionFAQProps>(\n (\n {\n items,\n title,\n subtitle,\n allowMultiple = false,\n defaultOpenIndex,\n className,\n ...props\n },\n ref,\n ) => {\n const [openItems, setOpenItems] = React.useState<Set<number>>(() => {\n const initial = new Set<number>();\n if (defaultOpenIndex !== undefined) initial.add(defaultOpenIndex);\n return initial;\n });\n\n const toggle = React.useCallback(\n (index: number) => {\n setOpenItems((prev) => {\n const next = new Set(prev);\n if (next.has(index)) {\n next.delete(index);\n } else {\n if (!allowMultiple) next.clear();\n next.add(index);\n }\n return next;\n });\n },\n [allowMultiple],\n );\n\n return (\n <div ref={ref} className={clsx('ds-objection-faq', className)} {...props}>\n {/* Header */}\n {(title || subtitle) && (\n <div className=\"ds-objection-faq__header\">\n {title && <h3 className=\"ds-objection-faq__title\">{title}</h3>}\n {subtitle && <p className=\"ds-objection-faq__subtitle\">{subtitle}</p>}\n </div>\n )}\n\n {/* Items */}\n <div className=\"ds-objection-faq__list\" role=\"list\">\n {items.map((item, idx) => {\n const isOpen = openItems.has(idx);\n return (\n <div\n key={idx}\n className={clsx(\n 'ds-objection-faq__item',\n isOpen && 'ds-objection-faq__item--open',\n )}\n data-state={isOpen ? 'open' : 'closed'}\n role=\"listitem\"\n >\n <button\n type=\"button\"\n className=\"ds-objection-faq__trigger\"\n onClick={() => toggle(idx)}\n aria-expanded={isOpen}\n >\n <div className=\"ds-objection-faq__trigger-content\">\n {item.tag && (\n <span className=\"ds-objection-faq__tag\">{item.tag}</span>\n )}\n <span className=\"ds-objection-faq__question\">{item.question}</span>\n </div>\n <svg\n className=\"ds-objection-faq__chevron\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n <div\n className=\"ds-objection-faq__answer-wrapper\"\n hidden={!isOpen}\n >\n <p className=\"ds-objection-faq__answer\">{item.answer}</p>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n },\n);\n\nObjectionFAQ.displayName = 'ObjectionFAQ';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, SectionShellProps, SectionHeader } from '../SectionShell/SectionShell';\nimport './StatsSection.css';\n\nexport interface StatItem {\n label: string;\n value: string | number;\n suffix?: string;\n prefix?: string;\n}\n\nexport interface StatsSectionProps extends Omit<SectionShellProps, 'title'> {\n stats: StatItem[];\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n eyebrow?: React.ReactNode;\n}\n\nexport const StatsSection = forwardRef<HTMLDivElement, StatsSectionProps>(\n ({ stats, title, subtitle, eyebrow, className, ...props }, ref) => {\n return (\n <SectionShell ref={ref} className={clsx('ds-stats-section', className)} {...props}>\n <SectionHeader title={title} subtitle={subtitle} eyebrow={eyebrow} />\n\n <div className=\"ds-stats-grid\">\n {stats.map((stat, idx) => (\n <div key={idx} className=\"ds-stat-card\">\n <div className=\"ds-stat-value\">\n {stat.prefix}\n {stat.value}\n <span className=\"ds-stat-suffix\">{stat.suffix}</span>\n </div>\n <div className=\"ds-stat-label\">{stat.label}</div>\n </div>\n ))}\n </div>\n </SectionShell>\n );\n },\n);\nStatsSection.displayName = 'StatsSection';\n","import React, { forwardRef, useState, useMemo, useCallback } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport { Slider } from '../Slider/Slider';\nimport { TextField } from '../TextField/TextField';\nimport './ValueAnchor.css';\n\n/* ============================================================================\n VALUE ANCHOR\n ============================================================================\n Anchor the buyer on OUTCOME VALUE before showing cost. Shows pipeline\n VALUE first, then cost as a fraction. The most effective pricing psychology\n pattern: show the $500K pipeline first, then the $2K/month cost.\n\n Strategic objective: ACV (shifts conversation from cost to value ratio)\n ============================================================================ */\n\n/** Calculator input definition */\nexport interface ValueAnchorInput {\n /** Input name (form key) */\n name: string;\n /** Display label */\n label: string;\n /** Input type */\n type: 'number' | 'slider';\n /** Default value */\n defaultValue: number;\n /** Min for slider */\n min?: number;\n /** Max for slider */\n max?: number;\n /** Step for slider */\n step?: number;\n /** Display prefix (e.g., \"$\") */\n prefix?: string;\n /** Display suffix (e.g., \"%\") */\n suffix?: string;\n}\n\n/** Calculator output */\nexport interface ValueAnchorOutput {\n /** Primary metric (large display) */\n primaryMetric: { value: number; label: string; prefix?: string; suffix?: string };\n /** Supporting metrics */\n secondaryMetrics: Array<{ value: number; label: string; prefix?: string; suffix?: string }>;\n /** Optional cost comparison */\n costComparison?: {\n without: { value: number; label: string };\n with: { value: number; label: string };\n savings: { value: number; label: string };\n };\n}\n\nexport interface ValueAnchorProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Calculator inputs */\n inputs: ValueAnchorInput[];\n /** Calculation function */\n calculate: (values: Record<string, number>) => ValueAnchorOutput;\n /** CTA shown after calculation */\n cta?: { label: string; href: string };\n}\n\n/** Format a number with commas */\nfunction formatNumber(n: number, prefix?: string, suffix?: string): string {\n const formatted = n >= 1000\n ? n.toLocaleString('en-US', { maximumFractionDigits: 0 })\n : String(Math.round(n * 10) / 10);\n return `${prefix ?? ''}${formatted}${suffix ?? ''}`;\n}\n\n/**\n * Pipeline value calculator — anchors on outcome value before showing cost.\n *\n * @example\n * ```tsx\n * <ValueAnchor\n * title=\"See Your Pipeline Potential\"\n * inputs={[\n * { name: 'meetings', label: 'Monthly meetings', type: 'slider', defaultValue: 10, min: 5, max: 50 },\n * { name: 'dealSize', label: 'Avg deal size', type: 'number', defaultValue: 5000, prefix: '$' },\n * ]}\n * calculate={(v) => ({\n * primaryMetric: { value: v.meetings * 12 * v.dealSize * 0.2, label: 'Annual Pipeline Value', prefix: '$' },\n * secondaryMetrics: [...],\n * })}\n * />\n * ```\n */\nexport const ValueAnchor = forwardRef<HTMLDivElement, ValueAnchorProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n inputs,\n calculate,\n cta,\n className,\n ...props\n },\n ref,\n ) => {\n const initialValues = useMemo(() => {\n const vals: Record<string, number> = {};\n inputs.forEach((inp) => { vals[inp.name] = inp.defaultValue; });\n return vals;\n }, [inputs]);\n\n const [values, setValues] = useState(initialValues);\n\n const handleChange = useCallback((name: string, value: number) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n }, []);\n\n const output = useMemo(() => calculate(values), [values, calculate]);\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-value-anchor', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n <div className=\"ds-value-anchor__layout\">\n {/* Inputs */}\n <div className=\"ds-value-anchor__inputs\">\n {inputs.map((input) => (\n <div key={input.name} className=\"ds-value-anchor__input-group\">\n <label className=\"ds-value-anchor__input-label\">\n {input.label}\n <span className=\"ds-value-anchor__input-value\">\n {formatNumber(values[input.name], input.prefix, input.suffix)}\n </span>\n </label>\n {input.type === 'slider' ? (\n <Slider\n value={values[input.name]}\n min={input.min ?? 0}\n max={input.max ?? 100}\n step={input.step ?? 1}\n onValueChange={(v) => handleChange(input.name, v)}\n />\n ) : (\n <TextField\n type=\"number\"\n value={String(values[input.name])}\n onChange={(e) => handleChange(input.name, Number(e.target.value) || 0)}\n />\n )}\n </div>\n ))}\n </div>\n\n {/* Output */}\n <div className=\"ds-value-anchor__output\">\n {/* Primary metric — large, brand-colored */}\n <div className=\"ds-value-anchor__primary\">\n <span className=\"ds-value-anchor__primary-value\">\n {formatNumber(output.primaryMetric.value, output.primaryMetric.prefix, output.primaryMetric.suffix)}\n </span>\n <span className=\"ds-value-anchor__primary-label\">\n {output.primaryMetric.label}\n </span>\n </div>\n\n {/* Secondary metrics */}\n {output.secondaryMetrics.length > 0 && (\n <div className=\"ds-value-anchor__secondary\">\n {output.secondaryMetrics.map((m, i) => (\n <div key={i} className=\"ds-value-anchor__secondary-metric\">\n <span className=\"ds-value-anchor__secondary-value\">\n {formatNumber(m.value, m.prefix, m.suffix)}\n </span>\n <span className=\"ds-value-anchor__secondary-label\">{m.label}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* Cost comparison */}\n {output.costComparison && (\n <div className=\"ds-value-anchor__comparison\">\n <div className=\"ds-value-anchor__comparison-col ds-value-anchor__comparison-col--without\">\n <span className=\"ds-value-anchor__comparison-value\">\n {formatNumber(output.costComparison.without.value, '$')}\n </span>\n <span className=\"ds-value-anchor__comparison-label\">\n {output.costComparison.without.label}\n </span>\n </div>\n <div className=\"ds-value-anchor__comparison-col ds-value-anchor__comparison-col--with\">\n <span className=\"ds-value-anchor__comparison-value\">\n {formatNumber(output.costComparison.with.value, '$')}\n </span>\n <span className=\"ds-value-anchor__comparison-label\">\n {output.costComparison.with.label}\n </span>\n </div>\n <div className=\"ds-value-anchor__savings\">\n <span className=\"ds-value-anchor__savings-value\">\n {formatNumber(output.costComparison.savings.value, '$')}\n </span>\n <span className=\"ds-value-anchor__savings-label\">\n {output.costComparison.savings.label}\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {cta && (\n <div className=\"ds-value-anchor__cta\">\n <Button variant=\"primary\" size=\"lg\" asChild>\n <OutboundLink href={cta.href} context=\"value-anchor-cta\" openInNewTab={false}>{cta.label}</OutboundLink>\n </Button>\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nValueAnchor.displayName = 'ValueAnchor';\n","import React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport clsx from 'clsx';\nimport './Button.css';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual style variant of the button */\n variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'link' | 'destructive';\n /** Size of the button */\n size?: 'sm' | 'md' | 'lg' | 'icon';\n /** Shows a loading spinner and disables the button */\n isLoading?: boolean;\n /**\n * When true, the button renders its child as the root element via Radix Slot.\n * Use this to compose with routing Link components or anchors.\n *\n * @example\n * <Button asChild>\n * <a href=\"/about\">About</a>\n * </Button>\n */\n asChild?: boolean;\n}\n\n/**\n * Primary UI action component with multiple visual variants and polymorphic rendering.\n *\n * Supports `asChild` for rendering as any element (Link, anchor, etc.)\n * while preserving button styling.\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'primary', size = 'md', asChild = false, isLoading = false, children, disabled, ...props }, ref) => {\n const buttonClass = clsx(\n 'ds-button',\n `ds-button--${variant}`,\n size === 'icon' ? 'ds-button--icon ds-button--md' : `ds-button--${size}`,\n isLoading && 'ds-button--loading',\n className,\n );\n\n // When asChild, Slot must receive exactly one child element.\n // Loading state is handled via the ds-button--loading CSS class.\n if (asChild) {\n return (\n <Slot\n ref={ref}\n aria-disabled={isLoading || disabled || undefined}\n className={buttonClass}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n disabled={isLoading || disabled}\n className={buttonClass}\n {...props}\n >\n {isLoading && (\n <svg\n className=\"ds-button__spinner\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n )}\n <span className={clsx(\"ds-button__content\", isLoading && \"ds-button__content--hidden\")}>\n {children}\n </span>\n </button>\n );\n },\n);\n\nButton.displayName = 'Button';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Slider.css';\n\nexport interface SliderProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Current value (controlled). */\n value?: number;\n /** Default value (uncontrolled). */\n defaultValue?: number;\n /** Minimum value. */\n min?: number;\n /** Maximum value. */\n max?: number;\n /** Step increment. */\n step?: number;\n /** Callback fired when the value changes. */\n onValueChange?: (value: number) => void;\n /** Whether the slider is disabled. */\n disabled?: boolean;\n}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n className,\n value: controlledValue,\n defaultValue = 50,\n min = 0,\n max = 100,\n step = 1,\n onValueChange,\n disabled = false,\n ...props\n },\n ref,\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = Number(e.target.value);\n if (!isControlled) {\n setUncontrolledValue(next);\n }\n onValueChange?.(next);\n };\n\n const percentage = ((value - min) / (max - min)) * 100;\n\n return (\n <div\n ref={ref}\n className={clsx('ds-slider', disabled && 'ds-slider--disabled', className)}\n {...props}\n >\n <div className=\"ds-slider__track\">\n <div\n className=\"ds-slider__range\"\n style={{ width: `${percentage}%` }}\n />\n </div>\n <input\n type=\"range\"\n className=\"ds-slider__thumb\"\n role=\"slider\"\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n onChange={handleChange}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n />\n </div>\n );\n },\n);\n\nSlider.displayName = 'Slider';\n","import React from 'react';\nimport { Input as BaseInput } from '@base-ui/react/input';\nimport clsx from 'clsx';\nimport './TextField.css';\n\nexport interface TextFieldProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: boolean;\n helperText?: string;\n endAdornment?: React.ReactNode;\n}\n\nexport const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(\n ({ className, label, error, helperText, endAdornment, id, ...props }, ref) => {\n const generatedId = React.useId();\n const inputId = id || generatedId;\n\n return (\n <div className={clsx('ds-textfield', className)}>\n {label && (\n <label htmlFor={inputId} className=\"ds-textfield__label\">\n {label}\n </label>\n )}\n <div className=\"ds-textfield__input-wrapper\">\n <BaseInput\n id={inputId}\n ref={ref}\n className={clsx(\n 'ds-textfield__input',\n error && 'ds-textfield__input--error',\n endAdornment && 'ds-textfield__input--adorned',\n )}\n {...props}\n />\n {endAdornment && <div className=\"ds-textfield__adornment\">{endAdornment}</div>}\n </div>\n {helperText && (\n <span className={clsx('ds-textfield__helper', error && 'ds-textfield__helper--error')}>\n {helperText}\n </span>\n )}\n </div>\n );\n },\n);\n\nTextField.displayName = 'TextField';\n","import React, { useRef } from 'react';\nimport { motion, useInView, HTMLMotionProps } from 'framer-motion';\nimport { VARIANTS } from '../../tokens/motion';\n\nexport interface MotionContainerProps extends HTMLMotionProps<'div'> {\n children: React.ReactNode;\n viewportMargin?: string;\n once?: boolean;\n stagger?: boolean;\n delay?: number;\n}\n\nexport const MotionContainer = ({\n children,\n viewportMargin = '-10%',\n once = true,\n stagger = false,\n delay = 0,\n className,\n ...props\n}: MotionContainerProps) => {\n const ref = useRef(null);\n // viewportMargin is typed as string for consumer convenience; framer-motion\n // expects an unexported MarginType template literal — safe to assert here.\n const isInView = useInView(ref, {\n once,\n margin: viewportMargin as Parameters<typeof useInView>[1] extends\n | { margin?: infer M }\n | undefined\n ? M\n : string,\n });\n\n const variants = stagger ? VARIANTS.staggerContainer : VARIANTS.fadeIn;\n\n return (\n <motion.div\n ref={ref}\n initial=\"hidden\"\n animate={isInView ? 'visible' : 'hidden'}\n variants={variants}\n transition={{ delay }}\n className={className}\n {...props}\n >\n {children}\n </motion.div>\n );\n};\n","import { motion, HTMLMotionProps } from 'framer-motion';\nimport { MOTION } from '../../tokens/motion';\n\nexport interface MotionTextProps extends HTMLMotionProps<'div'> {\n text: string;\n type?: 'word' | 'char';\n highlightWords?: string[]; // Words to highlight (color/bold)\n className?: string;\n}\n\nexport const MotionText = ({\n text,\n type = 'word',\n highlightWords = [],\n className,\n ...props\n}: MotionTextProps) => {\n // Split text based on type\n const items = type === 'word' ? text.split(' ') : text.split('');\n\n const containerVariants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: type === 'word' ? 0.05 : 0.02,\n delayChildren: 0.1,\n },\n },\n };\n\n const itemVariants = {\n hidden: { opacity: 0, y: 10 },\n visible: {\n opacity: 1,\n y: 0,\n transition: { duration: MOTION.DURATION.short, ease: MOTION.EASING.standard },\n },\n };\n\n return (\n <motion.div\n variants={containerVariants}\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once: true, margin: '-10%' }}\n className={className}\n {...props}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: type === 'word' ? '0.25em' : '0.05em',\n ...props.style,\n }}\n >\n {items.map((item, i) => {\n const isHighlighted = highlightWords.includes(item.replace(/[^a-zA-Z0-9]/g, ''));\n return (\n <motion.span\n key={i}\n variants={itemVariants}\n style={{\n color: isHighlighted ? 'var(--brand-pink)' : 'inherit',\n fontWeight: isHighlighted ? 600 : 'inherit',\n }}\n >\n {item}\n {type === 'word' && '\\u00A0'}\n </motion.span>\n );\n })}\n </motion.div>\n );\n};\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport { ArrowRight } from 'lucide-react';\nimport './AnnouncementBar.css';\n\nexport interface AnnouncementBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The badge text, e.g., \"New Feature\" or \"Update\" */\n badge?: React.ReactNode;\n /** The main message text */\n message: React.ReactNode;\n /** The link destination. If provided, the entire bar becomes clickable */\n href?: string;\n /** The visual variant */\n variant?: 'brand' | 'success' | 'warning' | 'info' | 'dark' | 'glass';\n /** Whether the bar can be dismissed */\n dismissible?: boolean;\n /** Callback when dismissed */\n onDismiss?: () => void;\n /** Whether to show the right arrow */\n showArrow?: boolean;\n}\n\n/**\n * Top-level announcement banner used to draw attention to new features,\n * webinars, or important updates.\n */\nexport const AnnouncementBar = forwardRef<HTMLDivElement, AnnouncementBarProps>(\n (\n {\n badge,\n message,\n href,\n variant = 'brand',\n dismissible = false,\n onDismiss,\n showArrow = true,\n className,\n ...props\n },\n ref\n ) => {\n const { track } = useAnalytics();\n\n const handleClick = () => {\n if (href) {\n track('announcement_click', { href, variant });\n }\n };\n\n const handleDismiss = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n track('announcement_dismiss', { variant });\n onDismiss?.();\n };\n\n const Component = href ? 'a' : 'div';\n const componentProps = href ? { href, onClick: handleClick } : {};\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-announcement-bar',\n `ds-announcement-bar--${variant}`,\n href && 'ds-announcement-bar--clickable',\n className\n )}\n {...props}\n >\n <Component className=\"ds-announcement-bar__inner\" {...componentProps}>\n <div className=\"ds-announcement-bar__content\">\n {badge && <span className=\"ds-announcement-bar__badge\">{badge}</span>}\n <span className=\"ds-announcement-bar__message\">{message}</span>\n </div>\n \n {href && showArrow && (\n <ArrowRight className=\"ds-announcement-bar__arrow\" size={16} />\n )}\n </Component>\n\n {dismissible && (\n <button\n type=\"button\"\n className=\"ds-announcement-bar__close\"\n onClick={handleDismiss}\n aria-label=\"Dismiss announcement\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n }\n);\n\nAnnouncementBar.displayName = 'AnnouncementBar';\n","\"use client\";\nimport { useContext } from 'react';\nimport { AnalyticsContext } from './analytics-context';\nimport type { AnalyticsContextValue } from './analytics-context';\n\nconst NOOP_VALUE: AnalyticsContextValue = {\n track: () => {\n /* no-op when no provider is present */\n },\n};\n\n/**\n * Access the analytics tracking interface.\n * Returns a no-op tracker when used outside an AnalyticsProvider —\n * components never need to guard against missing providers.\n *\n * @example\n * ```tsx\n * const { track } = useAnalytics();\n * track('form_submit', { form: 'lead-capture', email: true });\n * ```\n */\nexport function useAnalytics(): AnalyticsContextValue {\n return useContext(AnalyticsContext) ?? NOOP_VALUE;\n}\n","import { createContext } from 'react';\n\n/* ============================================================================\n ANALYTICS CONTEXT — Shared types & context object\n ============================================================================ */\n\n/** Arbitrary properties bag attached to every analytics event. */\nexport type AnalyticsEventProps = Record<string, string | number | boolean | undefined>;\n\n/** Signature for the track function provided by AnalyticsProvider. */\nexport type TrackFn = (event: string, props?: AnalyticsEventProps) => void;\n\n/** Value exposed by the AnalyticsContext. */\nexport interface AnalyticsContextValue {\n track: TrackFn;\n}\n\n/**\n * React context for analytics event tracking.\n * When no provider is present the value is `null` — consumers should\n * fall back to a no-op so components remain safe in Storybook / tests / SSR.\n */\nexport const AnalyticsContext = createContext<AnalyticsContextValue | null>(null);\n","import React, { forwardRef, useState, useEffect } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport './StickyActionBar.css';\n\nexport interface StickyActionBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The main message or value prop to display */\n message: React.ReactNode;\n /** Primary call to action button */\n primaryAction: React.ReactNode;\n /** Optional secondary action */\n secondaryAction?: React.ReactNode;\n /** Threshold in pixels before showing the bar (default: 300) */\n showThreshold?: number;\n /** Position variant */\n position?: 'top' | 'bottom';\n /** Visual theme */\n variant?: 'glass' | 'solid' | 'brand';\n}\n\n/**\n * A floating action bar that appears after scrolling past a threshold,\n * keeping primary CTAs accessible on long pages.\n */\nexport const StickyActionBar = forwardRef<HTMLDivElement, StickyActionBarProps>(\n (\n {\n message,\n primaryAction,\n secondaryAction,\n showThreshold = 300,\n position = 'bottom',\n variant = 'glass',\n className,\n ...props\n },\n ref\n ) => {\n const [isVisible, setIsVisible] = useState(false);\n const { track } = useAnalytics();\n\n useEffect(() => {\n const handleScroll = () => {\n const shouldShow = window.scrollY > showThreshold;\n if (shouldShow && !isVisible) {\n setIsVisible(true);\n track('sticky_bar_show');\n } else if (!shouldShow && isVisible) {\n setIsVisible(false);\n }\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n // Initial check\n handleScroll();\n\n return () => window.removeEventListener('scroll', handleScroll);\n }, [showThreshold, isVisible, track]);\n\n if (!isVisible) return null;\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-sticky-action-bar',\n `ds-sticky-action-bar--${position}`,\n `ds-sticky-action-bar--${variant}`,\n className\n )}\n {...props}\n >\n <div className=\"ds-sticky-action-bar__container\">\n <div className=\"ds-sticky-action-bar__content\">\n {message}\n </div>\n <div className=\"ds-sticky-action-bar__actions\">\n {secondaryAction}\n {primaryAction}\n </div>\n </div>\n </div>\n );\n }\n);\n\nStickyActionBar.displayName = 'StickyActionBar';\n","import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport './BookingEmbed.css';\n\nexport interface BookingEmbedProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The Go High Level widget URL or other booking URL */\n url: string;\n /** Aspect ratio of the embed container (default: 16/9) */\n aspectRatio?: string;\n /** Title for the iframe accessibility */\n title?: string;\n /** Whether to lazy load the iframe */\n lazyLoad?: boolean;\n}\n\n/**\n * A responsive container for embedding booking widgets (like Go High Level or Calendly).\n * Includes loading states and analytics tracking.\n */\nexport const BookingEmbed = forwardRef<HTMLDivElement, BookingEmbedProps>(\n (\n {\n url,\n aspectRatio = '16/9',\n title = 'Book a call',\n lazyLoad = true,\n className,\n style,\n ...props\n },\n ref\n ) => {\n const [isLoaded, setIsLoaded] = useState(!lazyLoad);\n const [isIframeLoaded, setIsIframeLoaded] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const { track } = useAnalytics();\n\n // Intersection Observer for lazy loading\n useEffect(() => {\n if (!lazyLoad) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n setIsLoaded(true);\n track('booking_embed_visible', { url });\n observer.disconnect();\n }\n },\n { rootMargin: '200px' }\n );\n\n if (containerRef.current) {\n observer.observe(containerRef.current);\n }\n\n return () => observer.disconnect();\n }, [lazyLoad, url, track]);\n\n const handleIframeLoad = () => {\n setIsIframeLoaded(true);\n track('booking_embed_loaded', { url });\n };\n\n return (\n <div\n ref={(node) => {\n // Handle both refs\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={clsx('ds-booking-embed', className)}\n style={{ '--embed-aspect-ratio': aspectRatio, ...style } as React.CSSProperties}\n {...props}\n >\n {!isIframeLoaded && (\n <div className=\"ds-booking-embed__skeleton\">\n <div className=\"ds-booking-embed__spinner\"></div>\n <p>Loading calendar...</p>\n </div>\n )}\n \n {isLoaded && (\n <iframe\n src={url}\n title={title}\n className={clsx('ds-booking-embed__iframe', isIframeLoaded && 'ds-booking-embed__iframe--loaded')}\n onLoad={handleIframeLoad}\n frameBorder=\"0\"\n scrolling=\"no\"\n />\n )}\n </div>\n );\n }\n);\n\nBookingEmbed.displayName = 'BookingEmbed';\n","import React, { forwardRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport { TextField } from '../TextField/TextField';\nimport { Button } from '../Button/Button';\nimport './LeadCaptureForm.css';\n\nexport interface LeadCaptureFormProps extends React.FormHTMLAttributes<HTMLFormElement> {\n /** Text on the submit button */\n buttonText?: string;\n /** Label for the email input */\n emailLabel?: string;\n /** Placeholder for the email input */\n emailPlaceholder?: string;\n /** Optional subtext below the form (e.g. \"We respect your privacy\") */\n disclaimer?: React.ReactNode;\n /** Function called when form is successfully submitted */\n onSubmitSuccess?: (email: string) => void | Promise<void>;\n /** Direction variant */\n layout?: 'horizontal' | 'vertical';\n /** Current loading state */\n isLoading?: boolean;\n}\n\n/**\n * A highly optimized email capture form for newsletters, waitlists,\n * and lead magnets.\n */\nexport const LeadCaptureForm = forwardRef<HTMLFormElement, LeadCaptureFormProps>(\n (\n {\n buttonText = 'Subscribe',\n emailLabel = 'Work Email',\n emailPlaceholder = 'you@company.com',\n disclaimer,\n onSubmitSuccess,\n layout = 'horizontal',\n isLoading = false,\n className,\n onSubmit,\n ...props\n },\n ref\n ) => {\n const [email, setEmail] = useState('');\n const [error, setError] = useState<string | undefined>();\n const [internalLoading, setInternalLoading] = useState(false);\n const { track } = useAnalytics();\n\n const isCurrentlyLoading = isLoading || internalLoading;\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n \n if (!email) {\n setError('Email is required');\n return;\n }\n \n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\n setError('Please enter a valid email address');\n return;\n }\n \n setError(undefined);\n setInternalLoading(true);\n \n track('lead_capture_submit', { email_domain: email.split('@')[1] });\n \n try {\n if (onSubmitSuccess) {\n await onSubmitSuccess(email);\n }\n track('lead_capture_success');\n } catch (err) {\n setError('Something went wrong. Please try again.');\n track('lead_capture_error', { error: String(err) });\n } finally {\n setInternalLoading(false);\n }\n \n if (onSubmit) {\n onSubmit(e);\n }\n };\n\n return (\n <form\n ref={ref}\n className={clsx(\n 'ds-lead-capture',\n `ds-lead-capture--${layout}`,\n className\n )}\n onSubmit={handleSubmit}\n noValidate\n {...props}\n >\n <div className=\"ds-lead-capture__inputs\">\n <div className=\"ds-lead-capture__input-wrapper\">\n {layout === 'vertical' && (\n <label htmlFor=\"lead-email\" className=\"ds-lead-capture__label\">\n {emailLabel}\n </label>\n )}\n <TextField\n id=\"lead-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={emailPlaceholder}\n disabled={isCurrentlyLoading}\n aria-label={layout === 'horizontal' ? emailLabel : undefined}\n className={clsx('ds-lead-capture__input', error && 'ds-lead-capture__input--error')}\n />\n {error && <div className=\"ds-lead-capture__error\">{error}</div>}\n </div>\n <Button \n type=\"submit\" \n isLoading={isCurrentlyLoading}\n className=\"ds-lead-capture__submit\"\n >\n {buttonText}\n </Button>\n </div>\n \n {disclaimer && (\n <div className=\"ds-lead-capture__disclaimer\">\n {disclaimer}\n </div>\n )}\n </form>\n );\n }\n);\n\nLeadCaptureForm.displayName = 'LeadCaptureForm';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { PricingCard, PricingCardProps } from '../PricingCard/PricingCard';\nimport './PricingSection.css';\n\nexport interface PricingSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The headline/title of the pricing section */\n title: string;\n /** Optional subtitle or description */\n description?: React.ReactNode;\n /** Pricing plans to display */\n plans: PricingCardProps[];\n /** Optional toggle control for billing periods (e.g. Monthly/Yearly) */\n toggle?: React.ReactNode;\n}\n\n/**\n * Standardized pricing section layout that renders a grid of PricingCards.\n * Handles responsive wrapping and visual hierarchy automatically.\n */\nexport const PricingSection = forwardRef<HTMLDivElement, PricingSectionProps>(\n (\n {\n title,\n description,\n plans,\n toggle,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <section\n ref={ref}\n className={clsx('ds-pricing-section', className)}\n {...props}\n >\n <div className=\"ds-pricing-section__header\">\n <h2 className=\"ds-pricing-section__title\">{title}</h2>\n {description && (\n <p className=\"ds-pricing-section__description\">{description}</p>\n )}\n {toggle && (\n <div className=\"ds-pricing-section__toggle\">\n {toggle}\n </div>\n )}\n </div>\n \n <div className=\"ds-pricing-section__grid\">\n {plans.map((plan, index) => (\n <PricingCard \n key={index}\n {...plan}\n className={clsx(\n 'ds-pricing-section__card',\n plan.highlighted && 'ds-pricing-section__card--popular'\n )}\n />\n ))}\n </div>\n </section>\n );\n }\n);\n\nPricingSection.displayName = 'PricingSection';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport { ArrowRight, Clock, FileText } from 'lucide-react';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './ArticleCard.css';\n\nexport interface ArticleCardProps extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> {\n /** Target URL */\n href: string;\n /** Article title */\n title: string;\n /** Short excerpt or description */\n excerpt: string;\n /** Image URL for the thumbnail */\n imageUrl?: string;\n /** Image alt text */\n imageAlt?: string;\n /** Category or tag label */\n category?: string;\n /** Publication date */\n date?: string;\n /** Reading time in minutes */\n readingTime?: number;\n /** Author name */\n author?: string;\n /** Variant for different grid layouts */\n variant?: 'vertical' | 'horizontal' | 'featured';\n}\n\n/**\n * Standardized card for blog posts, resources, and case studies.\n * Acts as a block-level link.\n */\nexport const ArticleCard = forwardRef<HTMLAnchorElement, ArticleCardProps>(\n (\n {\n href,\n title,\n excerpt,\n imageUrl,\n imageAlt = '',\n category,\n date,\n readingTime,\n author,\n variant = 'vertical',\n className,\n onClick,\n ...props\n },\n ref\n ) => {\n const { track } = useAnalytics();\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n track('article_click', { url: href, title, category });\n if (onClick) onClick(e);\n };\n\n return (\n <OutboundLink\n ref={ref}\n href={href}\n context=\"article-card\"\n className={clsx(\n 'ds-article-card',\n `ds-article-card--${variant}`,\n !imageUrl && 'ds-article-card--no-image',\n className\n )}\n onClick={handleClick}\n {...props}\n >\n {imageUrl ? (\n <div className=\"ds-article-card__image-wrapper\">\n <img \n src={imageUrl} \n alt={imageAlt} \n className=\"ds-article-card__image\" \n loading=\"lazy\" \n />\n {category && (\n <span className=\"ds-article-card__category-badge\">{category}</span>\n )}\n </div>\n ) : (\n <div className=\"ds-article-card__placeholder\">\n <FileText className=\"ds-article-card__placeholder-icon\" aria-hidden=\"true\" />\n {category && (\n <span className=\"ds-article-card__category-badge\">{category}</span>\n )}\n </div>\n )}\n \n <div className=\"ds-article-card__content\">\n \n <h3 className=\"ds-article-card__title\">{title}</h3>\n <p className=\"ds-article-card__excerpt\">{excerpt}</p>\n \n <div className=\"ds-article-card__meta\">\n {(date || author) && (\n <div className=\"ds-article-card__meta-primary\">\n {author && <span className=\"ds-article-card__author\">{author}</span>}\n {author && date && <span className=\"ds-article-card__dot\" aria-hidden=\"true\">•</span>}\n {date && <time dateTime={date} className=\"ds-article-card__date\">{date}</time>}\n </div>\n )}\n \n {readingTime && (\n <div className=\"ds-article-card__meta-secondary\">\n <Clock size={14} aria-hidden=\"true\" />\n <span>{readingTime} min read</span>\n </div>\n )}\n </div>\n \n <div className=\"ds-article-card__footer\">\n <span className=\"ds-article-card__read-more\">\n Read article\n <ArrowRight size={16} className=\"ds-article-card__arrow\" />\n </span>\n </div>\n </div>\n </OutboundLink>\n );\n }\n);\n\nArticleCard.displayName = 'ArticleCard';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport './ArticleLayout.css';\n\nexport interface ArticleLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The main content of the article */\n children: React.ReactNode;\n /** Article title */\n title: string;\n /** Author name */\n author?: React.ReactNode;\n /** Publish date */\n date?: React.ReactNode;\n /** Main hero image */\n heroImage?: string;\n /** Sidebar content (like TOC or related articles) */\n sidebar?: React.ReactNode;\n}\n\n/**\n * Standardized layout for long-form content (blog posts, resources, case studies).\n * Handles responsive wrapping, prose width constraints, and sidebar positioning.\n */\nexport const ArticleLayout = forwardRef<HTMLDivElement, ArticleLayoutProps>(\n (\n {\n children,\n title,\n author,\n date,\n heroImage,\n sidebar,\n className,\n ...props\n },\n ref\n ) => {\n // Add scroll tracking\n const { track } = useAnalytics();\n \n React.useEffect(() => {\n let maxScroll = 0;\n \n const handleScroll = () => {\n const docHeight = document.documentElement.scrollHeight - window.innerHeight;\n if (docHeight > 0) {\n const scrollPercent = Math.round((window.scrollY / docHeight) * 100);\n \n if (scrollPercent > maxScroll) {\n maxScroll = scrollPercent;\n \n // Track milestones\n if (maxScroll === 25) track('article_scroll', { milestone: 25 });\n if (maxScroll === 50) track('article_scroll', { milestone: 50 });\n if (maxScroll === 75) track('article_scroll', { milestone: 75 });\n if (maxScroll === 100) track('article_scroll', { milestone: 100 });\n }\n }\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, [track]);\n\n return (\n <article\n ref={ref}\n className={clsx('ds-article-layout', className)}\n {...props}\n >\n <header className=\"ds-article-layout__header\">\n <h1 className=\"ds-article-layout__title\">{title}</h1>\n \n {(author || date) && (\n <div className=\"ds-article-layout__meta\">\n {author && <div className=\"ds-article-layout__author\">{author}</div>}\n {author && date && <span className=\"ds-article-layout__dot\" aria-hidden=\"true\">•</span>}\n {date && <time className=\"ds-article-layout__date\">{date}</time>}\n </div>\n )}\n </header>\n\n {heroImage && (\n <div className=\"ds-article-layout__hero\">\n <img src={heroImage} alt=\"\" aria-hidden=\"true\" />\n </div>\n )}\n\n <div className={clsx(\n 'ds-article-layout__body',\n sidebar && 'ds-article-layout__body--with-sidebar'\n )}>\n <div className=\"ds-article-layout__content ds-prose\">\n {children}\n </div>\n \n {sidebar && (\n <aside className=\"ds-article-layout__sidebar\">\n <div className=\"ds-article-layout__sidebar-inner\">\n {sidebar}\n </div>\n </aside>\n )}\n </div>\n </article>\n );\n }\n);\n\nArticleLayout.displayName = 'ArticleLayout';\n","import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport './ProcessTimeline.css';\n\nexport interface TimelineStep {\n /** The step number or icon */\n indicator: React.ReactNode;\n /** Step title */\n title: React.ReactNode;\n /** Step description */\n description: React.ReactNode;\n}\n\nexport interface ProcessTimelineProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The steps to display in the timeline */\n steps: TimelineStep[];\n /** Whether to animate the line drawing on scroll */\n animated?: boolean;\n}\n\n/**\n * A vertical timeline component used to explain \"How it works\" or\n * onboarding processes.\n */\nexport const ProcessTimeline = forwardRef<HTMLDivElement, ProcessTimelineProps>(\n (\n {\n steps,\n animated = true,\n className,\n ...props\n },\n ref\n ) => {\n const [progress, setProgress] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n const { track } = useAnalytics();\n const hasTrackedRef = useRef(false);\n\n useEffect(() => {\n if (!animated) return;\n\n const handleScroll = () => {\n if (!containerRef.current) return;\n \n const rect = containerRef.current.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n \n // Start drawing when top of container hits middle of screen\n const startDraw = windowHeight * 0.5;\n \n // Distance the container travels while drawing\n const travelDistance = rect.height;\n \n // Current position of the top of the container relative to start point\n const currentPos = startDraw - rect.top;\n \n if (currentPos < 0) {\n setProgress(0);\n } else if (currentPos > travelDistance) {\n setProgress(100);\n if (!hasTrackedRef.current) {\n hasTrackedRef.current = true;\n track('timeline_complete');\n }\n } else {\n setProgress((currentPos / travelDistance) * 100);\n }\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n handleScroll(); // Initial check\n\n return () => window.removeEventListener('scroll', handleScroll);\n }, [animated, track]);\n\n return (\n <div\n ref={(node) => {\n // Handle both refs\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={clsx(\n 'ds-process-timeline',\n animated && 'ds-process-timeline--animated',\n className\n )}\n {...props}\n >\n <div className=\"ds-process-timeline__track\">\n <div \n className=\"ds-process-timeline__progress\" \n style={{ height: animated ? `${progress}%` : '100%' }}\n />\n </div>\n \n <div className=\"ds-process-timeline__steps\">\n {steps.map((step, index) => {\n const stepProgress = (index / (steps.length - 1)) * 100;\n const isActive = !animated || progress >= stepProgress;\n \n return (\n <div \n key={index} \n className={clsx(\n 'ds-process-timeline__step',\n isActive && 'ds-process-timeline__step--active'\n )}\n >\n <div className=\"ds-process-timeline__indicator\">\n {step.indicator}\n </div>\n <div className=\"ds-process-timeline__content\">\n <h3 className=\"ds-process-timeline__title\">{step.title}</h3>\n <p className=\"ds-process-timeline__description\">{step.description}</p>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\nProcessTimeline.displayName = 'ProcessTimeline';\n","import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport './MetricCounter.css';\n\nexport interface MetricCounterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The target number to count up to */\n value: number;\n /** Optional prefix (e.g. \"$\", \"+\") */\n prefix?: string;\n /** Optional suffix (e.g. \"%\", \"M\") */\n suffix?: string;\n /** Duration of the animation in milliseconds (default: 1500) */\n duration?: number;\n /** Number of decimal places to show (default: 0) */\n decimals?: number;\n /** A label to display below the number */\n label?: React.ReactNode;\n}\n\n/**\n * An animated counter for displaying key metrics and social proof.\n * Uses requestAnimationFrame for smooth counting and IntersectionObserver\n * to trigger only when visible. Respects prefers-reduced-motion.\n */\nexport const MetricCounter = forwardRef<HTMLDivElement, MetricCounterProps>(\n (\n {\n value,\n prefix = '',\n suffix = '',\n duration = 1500,\n decimals = 0,\n label,\n className,\n ...props\n },\n ref\n ) => {\n const [displayValue, setDisplayValue] = useState(0);\n const [hasAnimated, setHasAnimated] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const prefersReducedMotion = useRef(false);\n\n useEffect(() => {\n prefersReducedMotion.current = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n \n if (prefersReducedMotion.current) {\n setDisplayValue(value);\n setHasAnimated(true);\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && !hasAnimated) {\n startAnimation();\n observer.disconnect();\n }\n },\n { threshold: 0.5 }\n );\n\n if (containerRef.current) {\n observer.observe(containerRef.current);\n }\n\n return () => observer.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- startAnimation is stable and intentionally omitted to avoid re-triggering\n }, [value, hasAnimated]);\n\n const startAnimation = () => {\n let startTime: number;\n setHasAnimated(true);\n\n const easeOutExpo = (t: number): number => {\n return t === 1 ? 1 : 1 - Math.pow(2, -10 * t);\n };\n\n const animate = (currentTime: number) => {\n if (!startTime) startTime = currentTime;\n const progress = Math.min((currentTime - startTime) / duration, 1);\n \n const currentMultiplier = easeOutExpo(progress);\n const nextValue = value * currentMultiplier;\n \n setDisplayValue(nextValue);\n\n if (progress < 1) {\n requestAnimationFrame(animate);\n } else {\n setDisplayValue(value);\n }\n };\n\n requestAnimationFrame(animate);\n };\n\n const formattedValue = displayValue.toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n\n return (\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={clsx('ds-metric-counter', className)}\n {...props}\n >\n <div className=\"ds-metric-counter__value-wrapper\">\n {prefix && <span className=\"ds-metric-counter__prefix\">{prefix}</span>}\n <span className=\"ds-metric-counter__value\">{formattedValue}</span>\n {suffix && <span className=\"ds-metric-counter__suffix\">{suffix}</span>}\n </div>\n {label && <div className=\"ds-metric-counter__label\">{label}</div>}\n </div>\n );\n }\n);\n\nMetricCounter.displayName = 'MetricCounter';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { Check, X } from 'lucide-react';\nimport './ProblemAgitation.css';\n\nexport interface AgitationPoint {\n /** The problem state (old way) */\n problem: React.ReactNode;\n /** The solution state (new way) */\n solution: React.ReactNode;\n}\n\nexport interface ProblemAgitationProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Section title */\n title: string;\n /** Section description */\n description?: React.ReactNode;\n /** The points to compare */\n points: AgitationPoint[];\n /** Label for the old way column */\n oldWayLabel?: string;\n /** Label for the new way column */\n newWayLabel?: string;\n}\n\n/**\n * A \"Before & After\" or \"Old Way vs New Way\" comparison block,\n * frequently used in marketing to agitate a problem before presenting\n * the product as the solution.\n */\nexport const ProblemAgitation = forwardRef<HTMLDivElement, ProblemAgitationProps>(\n (\n {\n title,\n description,\n points,\n oldWayLabel = 'The Old Way',\n newWayLabel = 'The New Way',\n className,\n ...props\n },\n ref\n ) => {\n return (\n <section\n ref={ref}\n className={clsx('ds-problem-agitation', className)}\n {...props}\n >\n <div className=\"ds-problem-agitation__header\">\n <h2 className=\"ds-problem-agitation__title\">{title}</h2>\n {description && (\n <p className=\"ds-problem-agitation__description\">{description}</p>\n )}\n </div>\n\n <div className=\"ds-problem-agitation__grid\">\n {/* Mobile Labels (Hidden on Desktop) */}\n <div className=\"ds-problem-agitation__mobile-label ds-problem-agitation__mobile-label--old\">\n {oldWayLabel}\n </div>\n <div className=\"ds-problem-agitation__mobile-label ds-problem-agitation__mobile-label--new\">\n {newWayLabel}\n </div>\n\n {/* Desktop Headers */}\n <div className=\"ds-problem-agitation__column-header ds-problem-agitation__column-header--old\">\n {oldWayLabel}\n </div>\n <div className=\"ds-problem-agitation__column-header ds-problem-agitation__column-header--new\">\n {newWayLabel}\n </div>\n\n {/* Data Rows */}\n {points.map((point, index) => (\n <React.Fragment key={index}>\n <div className=\"ds-problem-agitation__cell ds-problem-agitation__cell--old\">\n <div className=\"ds-problem-agitation__icon-wrapper ds-problem-agitation__icon-wrapper--old\">\n <X size={20} aria-hidden=\"true\" />\n </div>\n <div className=\"ds-problem-agitation__content\">{point.problem}</div>\n </div>\n <div className=\"ds-problem-agitation__cell ds-problem-agitation__cell--new\">\n <div className=\"ds-problem-agitation__icon-wrapper ds-problem-agitation__icon-wrapper--new\">\n <Check size={20} aria-hidden=\"true\" />\n </div>\n <div className=\"ds-problem-agitation__content\">{point.solution}</div>\n </div>\n </React.Fragment>\n ))}\n </div>\n </section>\n );\n }\n);\n\nProblemAgitation.displayName = 'ProblemAgitation';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport './BrowserFrame.css';\n\n/* ============================================================================\n BROWSER FRAME\n ============================================================================\n Realistic browser/device mockup frame for product screenshots and videos.\n Makes static screenshots feel like live product demos.\n\n Strategic objective: Trust (product visualization builds desire)\n ============================================================================ */\n\nexport interface BrowserFrameProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Frame type */\n variant?: 'browser' | 'app' | 'mobile' | 'minimal';\n /** Content to frame (image, video, or React element) */\n children: React.ReactNode;\n /** Optional URL bar text */\n url?: string;\n /** Show traffic light dots (default: true for browser/app) */\n showControls?: boolean;\n /** Optional glow effect behind frame */\n withGlow?: boolean;\n /** Aspect ratio */\n aspectRatio?: '16/9' | '4/3' | '3/2' | 'auto';\n}\n\n/**\n * Device mockup frame for product screenshots.\n *\n * @example\n * ```tsx\n * <BrowserFrame variant=\"browser\" url=\"app.sales-mind.ai\" withGlow>\n * <img src=\"/screenshot.png\" alt=\"SalesMind dashboard\" />\n * </BrowserFrame>\n * ```\n */\nexport const BrowserFrame = forwardRef<HTMLDivElement, BrowserFrameProps>(\n (\n {\n variant = 'browser',\n children,\n url,\n showControls,\n withGlow = false,\n aspectRatio = '16/9',\n className,\n ...props\n },\n ref,\n ) => {\n const hasControls = showControls ?? (variant === 'browser' || variant === 'app');\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-browser-frame',\n `ds-browser-frame--${variant}`,\n withGlow && 'ds-browser-frame--glow',\n className,\n )}\n {...props}\n >\n {/* Chrome header */}\n {variant !== 'minimal' && (\n <div className=\"ds-browser-frame__chrome\">\n {hasControls && (\n <div className=\"ds-browser-frame__controls\" aria-hidden=\"true\">\n <span className=\"ds-browser-frame__dot ds-browser-frame__dot--red\" />\n <span className=\"ds-browser-frame__dot ds-browser-frame__dot--yellow\" />\n <span className=\"ds-browser-frame__dot ds-browser-frame__dot--green\" />\n </div>\n )}\n {variant === 'browser' && url && (\n <div className=\"ds-browser-frame__url-bar\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" className=\"ds-browser-frame__lock\">\n <path d=\"M3 5V4a3 3 0 116 0v1\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n <rect x=\"2\" y=\"5\" width=\"8\" height=\"6\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n </svg>\n <span className=\"ds-browser-frame__url-text\">{url}</span>\n </div>\n )}\n </div>\n )}\n\n {/* Content area */}\n <div\n className=\"ds-browser-frame__content\"\n style={aspectRatio !== 'auto' ? { aspectRatio } : undefined}\n >\n {children}\n </div>\n\n {/* Mobile notch */}\n {variant === 'mobile' && (\n <div className=\"ds-browser-frame__notch\" aria-hidden=\"true\" />\n )}\n </div>\n );\n },\n);\n\nBrowserFrame.displayName = 'BrowserFrame';\n","import React, { forwardRef, useState, useCallback, useEffect, useRef } from 'react';\nimport clsx from 'clsx';\nimport { BrowserFrame } from '../BrowserFrame/BrowserFrame';\nimport './VideoEmbed.css';\n\n/* ============================================================================\n VIDEO EMBED\n ============================================================================\n Responsive video embed with poster image, play button overlay, and lazy\n iframe injection on play. Supports YouTube, Vimeo, Loom, and direct URLs.\n\n Strategic objective: Trust (video converts 80% better than text-only)\n ============================================================================ */\n\nexport interface VideoEmbedProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Video source URL (YouTube, Vimeo, Loom, or direct) */\n src: string;\n /** Poster image shown before play */\n poster?: string;\n /** Video title for accessibility */\n title: string;\n /** Aspect ratio */\n aspectRatio?: '16/9' | '4/3' | '1/1';\n /** Auto-play when visible (muted, respects prefers-reduced-motion) */\n autoPlay?: boolean;\n /** Wrap embed inside a BrowserFrame */\n withFrame?: boolean;\n /** Analytics event on play */\n onPlay?: () => void;\n}\n\nfunction getEmbedUrl(src: string, muted = false): string {\n // YouTube\n const ytMatch = src.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/|youtube\\.com\\/embed\\/)([a-zA-Z0-9_-]+)/);\n if (ytMatch) {\n const params = muted ? 'autoplay=1&mute=1&rel=0' : 'autoplay=1&rel=0';\n return `https://www.youtube.com/embed/${ytMatch[1]}?${params}`;\n }\n\n // Vimeo\n const vimeoMatch = src.match(/(?:vimeo\\.com\\/)(\\d+)/);\n if (vimeoMatch) {\n const params = muted ? 'autoplay=1&muted=1' : 'autoplay=1';\n return `https://player.vimeo.com/video/${vimeoMatch[1]}?${params}`;\n }\n\n // Loom\n const loomMatch = src.match(/(?:loom\\.com\\/share\\/)([a-zA-Z0-9]+)/);\n if (loomMatch) return `https://www.loom.com/embed/${loomMatch[1]}?autoplay=1`;\n\n return src;\n}\n\n/**\n * Responsive video embed with poster + play button overlay.\n * Supports autoPlay via IntersectionObserver (muted, reduced-motion aware)\n * and optional BrowserFrame wrapping for product screenshots.\n *\n * @example\n * ```tsx\n * <VideoEmbed\n * src=\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\"\n * poster=\"/thumbnails/demo.jpg\"\n * title=\"Product demo video\"\n * />\n *\n * <VideoEmbed\n * src=\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\"\n * title=\"Product demo\"\n * autoPlay\n * withFrame\n * />\n * ```\n */\nexport const VideoEmbed = forwardRef<HTMLDivElement, VideoEmbedProps>(\n (\n {\n src,\n poster,\n title,\n aspectRatio = '16/9',\n autoPlay = false,\n withFrame = false,\n onPlay,\n className,\n ...props\n },\n ref,\n ) => {\n const [playing, setPlaying] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const handlePlay = useCallback(() => {\n setPlaying(true);\n onPlay?.();\n }, [onPlay]);\n\n // autoPlay via IntersectionObserver — respects prefers-reduced-motion\n useEffect(() => {\n if (!autoPlay || playing) return;\n if (typeof window === 'undefined') return;\n\n // Respect reduced-motion preference\n const motionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n if (motionQuery.matches) return;\n\n const target = containerRef.current;\n if (!target) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n handlePlay();\n observer.disconnect();\n }\n },\n { threshold: 0.5 },\n );\n\n observer.observe(target);\n return () => observer.disconnect();\n }, [autoPlay, playing, handlePlay]);\n\n const embedContent = (\n <div\n ref={containerRef}\n className={clsx('ds-video-embed', withFrame && 'ds-video-embed--framed', className)}\n style={{ aspectRatio }}\n >\n {!playing ? (\n <button\n type=\"button\"\n className=\"ds-video-embed__poster-btn\"\n onClick={handlePlay}\n aria-label={`Play video: ${title}`}\n >\n {poster && (\n <img\n src={poster}\n alt=\"\"\n className=\"ds-video-embed__poster\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n )}\n <div className=\"ds-video-embed__overlay\" />\n <div className=\"ds-video-embed__play\" aria-hidden=\"true\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"rgba(0,0,0,0.5)\" />\n <path d=\"M19 15l14 9-14 9V15z\" fill=\"white\" />\n </svg>\n </div>\n </button>\n ) : (\n <iframe\n src={getEmbedUrl(src, autoPlay)}\n title={title}\n className=\"ds-video-embed__iframe\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n </div>\n );\n\n if (withFrame) {\n return (\n <BrowserFrame ref={ref} variant=\"browser\" url={src} {...props}>\n {embedContent}\n </BrowserFrame>\n );\n }\n\n return React.cloneElement(embedContent, { ref, ...props });\n },\n);\n\nVideoEmbed.displayName = 'VideoEmbed';\n","import React, { forwardRef, useState, useEffect, useCallback, useRef } from 'react';\nimport clsx from 'clsx';\nimport { Dialog, DialogContent } from '../Dialog/Dialog';\nimport './ExitIntentOverlay.css';\n\n/* ============================================================================\n EXIT INTENT OVERLAY\n ============================================================================\n Overlay triggered when cursor moves toward browser close/back button\n (desktop) or after inactivity timeout (mobile). Last chance to capture\n abandoning visitors.\n\n Strategic objective: Distribution (recovers 5-15% of abandoning visitors)\n ============================================================================ */\n\n/** Default suppression: 7 days */\nconst DEFAULT_SUPPRESSION = 7 * 24 * 60 * 60 * 1000;\n/** Default activation delay: 5 seconds */\nconst DEFAULT_ACTIVATION_DELAY = 5000;\n/** Default mobile inactivity timeout: 45 seconds */\nconst MOBILE_INACTIVITY_TIMEOUT = 45_000;\n\nexport interface ExitIntentOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Content to display in overlay */\n children: React.ReactNode;\n /** Whether exit intent detection is active (default: true) */\n enabled?: boolean;\n /** Delay before activation in ms (prevents trigger on initial load) */\n activationDelay?: number;\n /** Pages where overlay should NOT show */\n excludePaths?: string[];\n /** Storage key for suppression after dismiss/convert */\n storageKey?: string;\n /** Suppression duration after dismiss in ms (default: 7 days) */\n suppressionDuration?: number;\n /** Callback on show */\n onShow?: () => void;\n /** Callback on dismiss */\n onDismiss?: () => void;\n}\n\nfunction isSuppressed(key: string, duration: number): boolean {\n if (typeof window === 'undefined') return true;\n try {\n const ts = localStorage.getItem(key);\n if (!ts) return false;\n return Date.now() - Number(ts) < duration;\n } catch {\n return false;\n }\n}\n\nfunction suppress(key: string): void {\n try {\n localStorage.setItem(key, String(Date.now()));\n } catch {\n // Storage unavailable\n }\n}\n\nfunction isMobile(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(max-width: 768px)').matches || 'ontouchstart' in window;\n}\n\n/**\n * Exit-intent triggered overlay.\n *\n * @example\n * ```tsx\n * <ExitIntentOverlay storageKey=\"exit-homepage\">\n * <LeadCaptureForm\n * variant=\"card\"\n * title=\"Before you go...\"\n * description=\"Get our AI prospecting playbook — free.\"\n * submitLabel=\"Send Me the Playbook\"\n * onSubmit={handleSubmit}\n * />\n * </ExitIntentOverlay>\n * ```\n */\nexport const ExitIntentOverlay = forwardRef<HTMLDivElement, ExitIntentOverlayProps>(\n (\n {\n children,\n enabled = true,\n activationDelay = DEFAULT_ACTIVATION_DELAY,\n excludePaths,\n storageKey = 'ds-exit-intent',\n suppressionDuration = DEFAULT_SUPPRESSION,\n onShow,\n onDismiss,\n className,\n ...props\n },\n ref,\n ) => {\n const [open, setOpen] = useState(false);\n const activatedRef = useRef(false);\n const shownRef = useRef(false);\n\n const show = useCallback(() => {\n if (shownRef.current) return;\n shownRef.current = true;\n setOpen(true);\n onShow?.();\n }, [onShow]);\n\n const handleDismiss = useCallback(() => {\n setOpen(false);\n suppress(storageKey);\n onDismiss?.();\n }, [storageKey, onDismiss]);\n\n useEffect(() => {\n if (!enabled) return;\n if (typeof window === 'undefined') return;\n\n // Check path exclusions\n if (excludePaths?.some((p) => window.location.pathname.startsWith(p))) return;\n\n // Check suppression\n if (isSuppressed(storageKey, suppressionDuration)) return;\n\n // Activation delay\n const activationTimer = setTimeout(() => {\n activatedRef.current = true;\n }, activationDelay);\n\n // Desktop: mouseout near top of viewport\n const handleMouseOut = (e: MouseEvent) => {\n if (!activatedRef.current) return;\n if (e.clientY < 10 && e.relatedTarget === null) {\n show();\n }\n };\n\n // Mobile: inactivity timeout\n let mobileTimer: ReturnType<typeof setTimeout> | null = null;\n const resetMobileTimer = () => {\n if (mobileTimer) clearTimeout(mobileTimer);\n if (!activatedRef.current) return;\n mobileTimer = setTimeout(show, MOBILE_INACTIVITY_TIMEOUT);\n };\n\n if (isMobile()) {\n // Start inactivity detection after activation delay\n const mobileStart = setTimeout(() => {\n resetMobileTimer();\n document.addEventListener('touchstart', resetMobileTimer, { passive: true });\n document.addEventListener('scroll', resetMobileTimer, { passive: true });\n }, activationDelay);\n\n return () => {\n clearTimeout(activationTimer);\n clearTimeout(mobileStart);\n if (mobileTimer) clearTimeout(mobileTimer);\n document.removeEventListener('touchstart', resetMobileTimer);\n document.removeEventListener('scroll', resetMobileTimer);\n };\n }\n\n document.addEventListener('mouseout', handleMouseOut);\n\n return () => {\n clearTimeout(activationTimer);\n document.removeEventListener('mouseout', handleMouseOut);\n };\n }, [enabled, activationDelay, excludePaths, storageKey, suppressionDuration, show]);\n\n return (\n <div ref={ref} className={clsx('ds-exit-intent-overlay', className)} {...props}>\n <Dialog open={open} onOpenChange={(isOpen) => { if (!isOpen) handleDismiss(); }}>\n <DialogContent className=\"ds-exit-intent-overlay__dialog\">\n {children}\n </DialogContent>\n </Dialog>\n </div>\n );\n },\n);\n\nExitIntentOverlay.displayName = 'ExitIntentOverlay';\n","import React from 'react';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\nimport clsx from 'clsx';\nimport './Dialog.css';\n\nexport const Dialog = BaseDialog.Root;\nexport const DialogTrigger = BaseDialog.Trigger;\nexport const DialogClose = BaseDialog.Close;\nexport const DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <BaseDialog.Title ref={ref} className={clsx('ds-dialog__title', className)} {...props} />\n));\nDialogTitle.displayName = 'DialogTitle';\n\nexport const DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <BaseDialog.Description\n ref={ref}\n className={clsx('ds-dialog__description', className)}\n {...props}\n />\n));\nDialogDescription.displayName = 'DialogDescription';\n\nexport const DialogContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => (\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className=\"ds-dialog__backdrop\" />\n <BaseDialog.Popup ref={ref} className={clsx('ds-dialog__content', className)} {...props}>\n {children}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n ),\n);\nDialogContent.displayName = 'DialogContent';\n\n/**\n * Semantic header section for a dialog, typically containing\n * DialogTitle and DialogDescription.\n */\nexport const DialogHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-dialog__header', className)} {...props} />\n ),\n);\nDialogHeader.displayName = 'DialogHeader';\n\n/**\n * Footer section for dialog actions (confirm, cancel, etc.).\n * Renders children in a right-aligned flex row with standard gap.\n */\nexport const DialogFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-dialog__footer', className)} {...props} />\n ),\n);\nDialogFooter.displayName = 'DialogFooter';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport './BeforeAfterBlock.css';\n\n/* ============================================================================\n BEFORE/AFTER BLOCK\n ============================================================================\n Side-by-side or sequential comparison showing the transformation from\n current state to desired state.\n\n Strategic objective: Differentiation (transformation visualization)\n ============================================================================ */\n\n/** Item in the before or after column */\nexport interface BeforeAfterItem {\n /** Item text */\n text: string;\n /** Sentiment affects visual treatment */\n sentiment?: 'negative' | 'positive' | 'neutral';\n}\n\n/** One side of the comparison */\nexport interface BeforeAfterSide {\n /** Column label (e.g., \"Before SalesMind\", \"After SalesMind\") */\n label: string;\n /** List of items */\n items: BeforeAfterItem[];\n /** Optional media */\n media?: React.ReactNode;\n}\n\nexport interface BeforeAfterBlockProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title?: React.ReactNode;\n /** Before state */\n before: BeforeAfterSide;\n /** After state */\n after: BeforeAfterSide;\n /** Layout variant */\n variant?: 'split' | 'slider' | 'stacked';\n}\n\n/**\n * Transformation visualization: before vs. after comparison.\n *\n * @example\n * ```tsx\n * <BeforeAfterBlock\n * title=\"The SalesMind Transformation\"\n * before={{\n * label: 'Without SalesMind',\n * items: [\n * { text: 'Manual prospecting 40hrs/week', sentiment: 'negative' },\n * { text: 'Unpredictable pipeline', sentiment: 'negative' },\n * ],\n * }}\n * after={{\n * label: 'With SalesMind',\n * items: [\n * { text: 'AI handles outreach 24/7', sentiment: 'positive' },\n * { text: 'Predictable qualified meetings', sentiment: 'positive' },\n * ],\n * }}\n * variant=\"split\"\n * />\n * ```\n */\nexport const BeforeAfterBlock = forwardRef<HTMLDivElement, BeforeAfterBlockProps>(\n (\n {\n eyebrow,\n title,\n before,\n after,\n variant = 'split',\n className,\n ...props\n },\n ref,\n ) => {\n const renderItems = (items: BeforeAfterItem[], side: 'before' | 'after') =>\n items.map((item, i) => (\n <li\n key={i}\n className={clsx(\n 'ds-before-after__item',\n item.sentiment && `ds-before-after__item--${item.sentiment}`,\n )}\n >\n <span className=\"ds-before-after__item-icon\" aria-hidden=\"true\">\n {side === 'before' ? '\\u2717' : '\\u2713'}\n </span>\n <span>{item.text}</span>\n </li>\n ));\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-before-after', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} />\n\n <div className={clsx('ds-before-after__layout', `ds-before-after__layout--${variant}`)}>\n {/* Before column */}\n <div className=\"ds-before-after__column ds-before-after__column--before\">\n <h3 className=\"ds-before-after__label\">{before.label}</h3>\n <ul className=\"ds-before-after__list\">\n {renderItems(before.items, 'before')}\n </ul>\n {before.media && (\n <div className=\"ds-before-after__media\">{before.media}</div>\n )}\n </div>\n\n {/* Divider */}\n {variant === 'split' && (\n <div className=\"ds-before-after__divider\" aria-hidden=\"true\">\n <span className=\"ds-before-after__arrow\">→</span>\n </div>\n )}\n\n {/* After column */}\n <div className=\"ds-before-after__column ds-before-after__column--after\">\n <h3 className=\"ds-before-after__label\">{after.label}</h3>\n <ul className=\"ds-before-after__list\">\n {renderItems(after.items, 'after')}\n </ul>\n {after.media && (\n <div className=\"ds-before-after__media\">{after.media}</div>\n )}\n </div>\n </div>\n </SectionShell>\n );\n },\n);\n\nBeforeAfterBlock.displayName = 'BeforeAfterBlock';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './CompetitorDiff.css';\n\n/* ============================================================================\n COMPETITOR DIFF\n ============================================================================\n \"Us vs. Them\" competitive differentiation block. Narrative comparison,\n not a feature table (that's ComparisonTable).\n\n Strategic objective: Differentiation + Narrative Control\n ============================================================================ */\n\n/** A single comparison dimension */\nexport interface CompetitorDiffItem {\n /** The dimension being compared (e.g., \"Approach\") */\n dimension: string;\n /** How the competitor/category handles it */\n them: string;\n /** How we handle it */\n us: string;\n}\n\nexport interface CompetitorDiffProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Comparison items */\n items: CompetitorDiffItem[];\n /** Competitor/category label (e.g., \"Traditional SDR tools\") */\n competitorLabel?: string;\n /** Our label (e.g., \"SalesMind AI\") */\n ourLabel?: string;\n /** Layout variant */\n variant?: 'table' | 'cards' | 'narrative';\n /** Optional CTA */\n cta?: { label: string; href: string };\n}\n\n/**\n * Competitive differentiation block.\n *\n * @example\n * ```tsx\n * <CompetitorDiff\n * eyebrow=\"Why SalesMind\"\n * title=\"Not Another LinkedIn Tool\"\n * items={[\n * { dimension: 'Approach', them: 'Spray-and-pray sequences', us: 'AI-personalized at scale' },\n * { dimension: 'Setup', them: 'Weeks of configuration', us: 'Live in 48 hours' },\n * ]}\n * variant=\"table\"\n * />\n * ```\n */\nexport const CompetitorDiff = forwardRef<HTMLDivElement, CompetitorDiffProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n items,\n competitorLabel = 'Others',\n ourLabel = 'SalesMind AI',\n variant = 'table',\n cta,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-competitor-diff', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n {variant === 'table' && (\n <div className=\"ds-competitor-diff__table\" role=\"table\" aria-label=\"Feature comparison\">\n <div className=\"ds-competitor-diff__thead\" role=\"row\">\n <div className=\"ds-competitor-diff__th\" role=\"columnheader\" />\n <div className=\"ds-competitor-diff__th ds-competitor-diff__th--them\" role=\"columnheader\">\n {competitorLabel}\n </div>\n <div className=\"ds-competitor-diff__th ds-competitor-diff__th--us\" role=\"columnheader\">\n {ourLabel}\n </div>\n </div>\n {items.map((item, i) => (\n <div key={i} className=\"ds-competitor-diff__row\" role=\"row\">\n <div className=\"ds-competitor-diff__dimension\" role=\"rowheader\">{item.dimension}</div>\n <div className=\"ds-competitor-diff__cell ds-competitor-diff__cell--them\" role=\"cell\">\n <span className=\"ds-competitor-diff__icon\" aria-hidden=\"true\">✗</span>\n {item.them}\n </div>\n <div className=\"ds-competitor-diff__cell ds-competitor-diff__cell--us\" role=\"cell\">\n <span className=\"ds-competitor-diff__icon\" aria-hidden=\"true\">✓</span>\n {item.us}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {variant === 'cards' && (\n <div className=\"ds-competitor-diff__cards\">\n <div className=\"ds-competitor-diff__card ds-competitor-diff__card--them\">\n <h3 className=\"ds-competitor-diff__card-label\">{competitorLabel}</h3>\n <ul className=\"ds-competitor-diff__card-list\">\n {items.map((item, i) => (\n <li key={i}>\n <strong>{item.dimension}:</strong> {item.them}\n </li>\n ))}\n </ul>\n </div>\n <div className=\"ds-competitor-diff__card ds-competitor-diff__card--us\">\n <h3 className=\"ds-competitor-diff__card-label\">{ourLabel}</h3>\n <ul className=\"ds-competitor-diff__card-list\">\n {items.map((item, i) => (\n <li key={i}>\n <strong>{item.dimension}:</strong> {item.us}\n </li>\n ))}\n </ul>\n </div>\n </div>\n )}\n\n {variant === 'narrative' && (\n <div className=\"ds-competitor-diff__narrative\">\n {items.map((item, i) => (\n <div key={i} className=\"ds-competitor-diff__narrative-item\">\n <p className=\"ds-competitor-diff__narrative-them\">\n <span className=\"ds-competitor-diff__narrative-label\">Instead of</span> {item.them}\n </p>\n <p className=\"ds-competitor-diff__narrative-us\">\n <span className=\"ds-competitor-diff__narrative-label\">{ourLabel}</span> {item.us}\n </p>\n </div>\n ))}\n </div>\n )}\n\n {cta && (\n <div className=\"ds-competitor-diff__cta\">\n <Button variant=\"primary\" asChild>\n <OutboundLink href={cta.href} context=\"competitor-diff-cta\" openInNewTab={false}>{cta.label}</OutboundLink>\n </Button>\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nCompetitorDiff.displayName = 'CompetitorDiff';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../Tabs';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './StakeholderTabs.css';\n\n/* ============================================================================\n STAKEHOLDER TABS\n ============================================================================\n Persona-specific content switcher. Shows different messaging, features,\n and CTAs to different stakeholders.\n\n Strategic objective: Pipeline Quality (message-market fit per persona)\n ============================================================================ */\n\n/** Content for a single stakeholder tab */\nexport interface StakeholderContent {\n /** Tab headline */\n headline: string;\n /** Tab description */\n description: string;\n /** Feature list */\n features?: Array<{ title: string; description: string; icon?: React.ReactNode }>;\n /** Testimonial (render as ReactNode for flexibility) */\n testimonial?: React.ReactNode;\n /** CTA */\n cta: { label: string; href: string };\n}\n\n/** A single stakeholder definition */\nexport interface StakeholderDefinition {\n /** Tab label */\n label: string;\n /** Tab icon */\n icon?: React.ReactNode;\n /** Content for this stakeholder */\n content: StakeholderContent;\n}\n\nexport interface StakeholderTabsProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title?: React.ReactNode;\n /** Stakeholder definitions */\n stakeholders: StakeholderDefinition[];\n /** Default active tab index */\n defaultIndex?: number;\n}\n\n/**\n * Persona-specific content switcher using DS Tabs.\n *\n * @example\n * ```tsx\n * <StakeholderTabs\n * eyebrow=\"Built For You\"\n * title=\"Whether You Run Outreach or We Do\"\n * stakeholders={[\n * {\n * label: 'Founders',\n * content: { headline: '...', description: '...', cta: { label: 'Book Strategy Call', href: '/demo' } },\n * },\n * {\n * label: 'Sales Leaders',\n * content: { headline: '...', description: '...', cta: { label: 'Book Demo', href: '/demo' } },\n * },\n * ]}\n * />\n * ```\n */\nexport const StakeholderTabs = forwardRef<HTMLDivElement, StakeholderTabsProps>(\n (\n {\n eyebrow,\n title,\n stakeholders,\n defaultIndex = 0,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-stakeholder-tabs', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} />\n\n <Tabs defaultValue={defaultIndex}>\n <TabsList className=\"ds-stakeholder-tabs__list\">\n {stakeholders.map((s, i) => (\n <TabsTrigger key={i} value={i} className=\"ds-stakeholder-tabs__trigger\">\n {s.icon && <span className=\"ds-stakeholder-tabs__icon\" aria-hidden=\"true\">{s.icon}</span>}\n {s.label}\n </TabsTrigger>\n ))}\n </TabsList>\n\n {stakeholders.map((s, i) => (\n <TabsContent key={i} value={i} className=\"ds-stakeholder-tabs__content\">\n <div className=\"ds-stakeholder-tabs__panel\">\n <div className=\"ds-stakeholder-tabs__text\">\n <h3 className=\"ds-stakeholder-tabs__headline\">{s.content.headline}</h3>\n <p className=\"ds-stakeholder-tabs__desc\">{s.content.description}</p>\n\n {s.content.features && s.content.features.length > 0 && (\n <ul className=\"ds-stakeholder-tabs__features\">\n {s.content.features.map((f, j) => (\n <li key={j} className=\"ds-stakeholder-tabs__feature\">\n {f.icon && <span className=\"ds-stakeholder-tabs__feature-icon\" aria-hidden=\"true\">{f.icon}</span>}\n <div>\n <strong>{f.title}</strong>\n <span>{f.description}</span>\n </div>\n </li>\n ))}\n </ul>\n )}\n\n <div className=\"ds-stakeholder-tabs__cta-wrap\">\n <Button variant=\"primary\" asChild>\n <OutboundLink href={s.content.cta.href} context=\"stakeholder-tabs-cta\" openInNewTab={false}>{s.content.cta.label}</OutboundLink>\n </Button>\n </div>\n </div>\n\n {s.content.testimonial && (\n <div className=\"ds-stakeholder-tabs__testimonial\">\n {s.content.testimonial}\n </div>\n )}\n </div>\n </TabsContent>\n ))}\n </Tabs>\n </SectionShell>\n );\n },\n);\n\nStakeholderTabs.displayName = 'StakeholderTabs';\n","import React from 'react';\nimport { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport clsx from 'clsx';\nimport './Tabs.css';\n\n/* ============================================================================\n TABS ROOT\n ============================================================================ */\n\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n defaultValue?: string | number;\n value?: string | number;\n onValueChange?: (value: string | number) => void;\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n ({ className, orientation = 'horizontal', ...props }, ref) => {\n return (\n <BaseTabs.Root\n ref={ref}\n className={clsx('ds-tabs', `ds-tabs--${orientation}`, className)}\n orientation={orientation}\n {...props}\n />\n );\n },\n);\n\nTabs.displayName = 'Tabs';\n\n/* ============================================================================\n TABS LIST\n ============================================================================ */\n\nexport interface TabsListProps extends React.HTMLAttributes<HTMLDivElement> {\n loop?: boolean;\n}\n\nexport const TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, ...props }, ref) => {\n return <BaseTabs.List ref={ref} className={clsx('ds-tabs__list', className)} {...props} />;\n },\n);\n\nTabsList.displayName = 'TabsList';\n\n/* ============================================================================\n TABS TRIGGER\n ============================================================================ */\n\nexport interface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string | number;\n disabled?: boolean;\n}\n\nexport const TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <BaseTabs.Tab ref={ref} className={clsx('ds-tabs__trigger', className)} {...props}>\n {children}\n </BaseTabs.Tab>\n );\n },\n);\n\nTabsTrigger.displayName = 'TabsTrigger';\n\n/* ============================================================================\n TABS CONTENT\n ============================================================================ */\n\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string | number;\n}\n\nexport const TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, ...props }, ref) => {\n return <BaseTabs.Panel ref={ref} className={clsx('ds-tabs__content', className)} {...props} />;\n },\n);\n\nTabsContent.displayName = 'TabsContent';\n","import React, { forwardRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../Tabs';\nimport { Badge } from '../Badge/Badge';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './IntegrationShowcase.css';\n\n/* ============================================================================\n INTEGRATION SHOWCASE\n ============================================================================\n Integration grid with category filtering. Shows available integrations\n to reduce \"will it work with my stack\" objection.\n\n Strategic objective: Trust + Moat (ecosystem stickiness)\n ============================================================================ */\n\n/** A single integration entry */\nexport interface IntegrationEntry {\n /** Integration name */\n name: string;\n /** Logo (React element or img) */\n logo: React.ReactNode;\n /** Short description */\n description?: string;\n /** Category for filtering */\n category: string;\n /** Link to docs/details */\n href?: string;\n /** Optional badge (e.g., \"New\", \"Popular\") */\n badge?: string;\n}\n\nexport interface IntegrationShowcaseProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Integration entries */\n integrations: IntegrationEntry[];\n /** Category labels for filtering */\n categories?: string[];\n /** Layout variant */\n variant?: 'grid' | 'list' | 'compact';\n /** Enable category filtering (default: true if categories provided) */\n filterable?: boolean;\n}\n\n/**\n * Integration grid with category filtering.\n *\n * @example\n * ```tsx\n * <IntegrationShowcase\n * eyebrow=\"Integrations\"\n * title=\"Works With Your Stack\"\n * integrations={[\n * { name: 'Salesforce', logo: <SalesforceLogo />, category: 'CRM' },\n * { name: 'HubSpot', logo: <HubSpotLogo />, category: 'CRM' },\n * { name: 'Slack', logo: <SlackLogo />, category: 'Communication' },\n * ]}\n * categories={['All', 'CRM', 'Communication']}\n * filterable\n * />\n * ```\n */\nexport const IntegrationShowcase = forwardRef<HTMLDivElement, IntegrationShowcaseProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n integrations,\n categories,\n variant = 'grid',\n filterable = !!categories,\n className,\n ...props\n },\n ref,\n ) => {\n const [activeCategory, setActiveCategory] = useState<string>('All');\n\n const allCategories = categories ?? ['All', ...new Set(integrations.map((i) => i.category))];\n const filtered =\n activeCategory === 'All'\n ? integrations\n : integrations.filter((i) => i.category === activeCategory);\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-integration-showcase', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n {filterable && allCategories.length > 1 && (\n <Tabs\n value={allCategories.indexOf(activeCategory)}\n onValueChange={(v) => setActiveCategory(allCategories[v as number] ?? 'All')}\n >\n <TabsList className=\"ds-integration-showcase__filters\">\n {allCategories.map((cat, i) => (\n <TabsTrigger key={cat} value={i} className=\"ds-integration-showcase__filter\">\n {cat}\n </TabsTrigger>\n ))}\n </TabsList>\n {/* TabsContent not needed — we filter inline */}\n {allCategories.map((_, i) => (\n <TabsContent key={i} value={i} className=\"ds-integration-showcase__tab-content\" />\n ))}\n </Tabs>\n )}\n\n <div className={clsx('ds-integration-showcase__grid', `ds-integration-showcase__grid--${variant}`)}>\n {filtered.map((integration, i) => {\n const Card = (\n <div key={i} className=\"ds-integration-showcase__card\">\n <div className=\"ds-integration-showcase__logo\">{integration.logo}</div>\n <div className=\"ds-integration-showcase__info\">\n <span className=\"ds-integration-showcase__name\">\n {integration.name}\n {integration.badge && (\n <Badge variant=\"secondary\" className=\"ds-integration-showcase__badge\">\n {integration.badge}\n </Badge>\n )}\n </span>\n {integration.description && variant !== 'compact' && (\n <span className=\"ds-integration-showcase__desc\">{integration.description}</span>\n )}\n </div>\n </div>\n );\n\n return integration.href ? (\n <OutboundLink key={i} href={integration.href} context=\"integration-showcase-card\" className=\"ds-integration-showcase__card-link\">\n {Card}\n </OutboundLink>\n ) : (\n Card\n );\n })}\n </div>\n </SectionShell>\n );\n },\n);\n\nIntegrationShowcase.displayName = 'IntegrationShowcase';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Badge.css';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Visual style variant */\n variant?: 'default' | 'secondary' | 'outline' | 'destructive';\n}\n\n/**\n * General-purpose badge for tags, labels, categories, and status indicators.\n *\n * For status-specific badges (success/warning/error/info), use `StatusBadge` instead.\n *\n * @example\n * <Badge>New</Badge>\n * <Badge variant=\"secondary\">Category</Badge>\n * <Badge variant=\"outline\">v2.1.0</Badge>\n * <Badge variant=\"destructive\">Breaking</Badge>\n */\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant = 'default', ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={clsx('ds-badge', `ds-badge--${variant}`, className)}\n {...props}\n />\n );\n },\n);\n\nBadge.displayName = 'Badge';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './SecurityBlock.css';\n\n/* ============================================================================\n SECURITY BLOCK\n ============================================================================\n Security/compliance trust display. Shows certifications, security features,\n and compliance badges to reduce enterprise procurement friction.\n\n Strategic objective: Trust + Authority (enterprise readiness signal)\n ============================================================================ */\n\n/** A certification or compliance badge */\nexport interface SecurityCertification {\n /** Certification name (e.g., \"SOC 2 Type II\") */\n name: string;\n /** Icon or badge image */\n icon: React.ReactNode;\n /** Description (shown in detailed variant) */\n description?: string;\n /** Link to details/documentation */\n href?: string;\n}\n\nexport interface SecurityBlockProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Certifications/badges */\n certifications?: SecurityCertification[];\n /** Security feature descriptions */\n features?: Array<{ title: string; description: string; icon?: React.ReactNode }>;\n /** Layout variant */\n variant?: 'badges' | 'detailed' | 'compact';\n}\n\n/**\n * Security and compliance trust display.\n *\n * @example\n * ```tsx\n * <SecurityBlock\n * eyebrow=\"Enterprise Security\"\n * title=\"Your Data, Our Priority\"\n * certifications={[\n * { name: 'SOC 2 Type II', icon: <ShieldIcon />, description: 'Annual audit...' },\n * { name: 'GDPR Compliant', icon: <EUIcon /> },\n * ]}\n * features={[\n * { title: 'End-to-end encryption', description: '256-bit AES at rest, TLS 1.3 in transit' },\n * ]}\n * variant=\"detailed\"\n * />\n * ```\n */\nexport const SecurityBlock = forwardRef<HTMLDivElement, SecurityBlockProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n certifications,\n features,\n variant = 'badges',\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-security-block', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n {certifications && certifications.length > 0 && (\n <div className={clsx('ds-security-block__certs', `ds-security-block__certs--${variant}`)}>\n {certifications.map((cert, i) => {\n const inner = (\n <div key={i} className=\"ds-security-block__cert\">\n <div className=\"ds-security-block__cert-icon\">{cert.icon}</div>\n <div className=\"ds-security-block__cert-info\">\n <span className=\"ds-security-block__cert-name\">{cert.name}</span>\n {variant === 'detailed' && cert.description && (\n <span className=\"ds-security-block__cert-desc\">{cert.description}</span>\n )}\n </div>\n </div>\n );\n\n return cert.href ? (\n <OutboundLink key={i} href={cert.href} context=\"security-block-cert\" className=\"ds-security-block__cert-link\">\n {inner}\n </OutboundLink>\n ) : (\n <React.Fragment key={i}>{inner}</React.Fragment>\n );\n })}\n </div>\n )}\n\n {features && features.length > 0 && (\n <div className=\"ds-security-block__features\">\n {features.map((feature, i) => (\n <div key={i} className=\"ds-security-block__feature\">\n {feature.icon && (\n <span className=\"ds-security-block__feature-icon\" aria-hidden=\"true\">\n {feature.icon}\n </span>\n )}\n <div>\n <h4 className=\"ds-security-block__feature-title\">{feature.title}</h4>\n <p className=\"ds-security-block__feature-desc\">{feature.description}</p>\n </div>\n </div>\n ))}\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nSecurityBlock.displayName = 'SecurityBlock';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { Badge } from '../Badge/Badge';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './CaseStudyCard.css';\n\n/* ============================================================================\n CASE STUDY CARD\n ============================================================================\n Case study preview card with company info, key metrics, and outcome summary.\n\n Strategic objective: Trust + Authority (social proof artifact)\n ============================================================================ */\n\n/** A single metric shown on the card */\nexport interface CaseStudyMetric {\n /** Metric value (e.g., \"312%\") */\n value: string;\n /** Metric label (e.g., \"increase in meetings\") */\n label: string;\n /** Value prefix (e.g., \"+\") */\n prefix?: string;\n /** Value suffix (e.g., \"%\") */\n suffix?: string;\n}\n\nexport interface CaseStudyCardProps extends React.HTMLAttributes<HTMLElement> {\n /** Company name */\n company: string;\n /** Company logo */\n logo?: React.ReactNode;\n /** Industry tag */\n industry?: string;\n /** One-line outcome summary */\n headline: string;\n /** Key metrics achieved */\n metrics?: CaseStudyMetric[];\n /** Link to full case study */\n href: string;\n /** Optional cover image */\n coverImage?: string;\n /** Optional quote excerpt */\n quote?: string;\n}\n\n/**\n * Case study preview card with company info and key metrics.\n *\n * @example\n * ```tsx\n * <CaseStudyCard\n * company=\"Acme Corp\"\n * industry=\"SaaS\"\n * headline=\"312% increase in qualified meetings in 90 days\"\n * metrics={[\n * { value: '312', suffix: '%', label: 'More meetings' },\n * { value: '45', suffix: '%', label: 'Lower cost per lead' },\n * ]}\n * href=\"/case-studies/acme-corp\"\n * />\n * ```\n */\nexport const CaseStudyCard = forwardRef<HTMLElement, CaseStudyCardProps>(\n (\n {\n company,\n logo,\n industry,\n headline,\n metrics,\n href,\n coverImage,\n quote,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <article\n ref={ref}\n className={clsx('ds-case-study-card', className)}\n {...props}\n >\n <OutboundLink href={href} context=\"case-study-card\" className=\"ds-case-study-card__link\" openInNewTab={false}>\n {coverImage && (\n <div className=\"ds-case-study-card__image-wrap\">\n <img\n src={coverImage}\n alt=\"\"\n className=\"ds-case-study-card__image\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n </div>\n )}\n\n <div className=\"ds-case-study-card__body\">\n <div className=\"ds-case-study-card__header\">\n {logo && <div className=\"ds-case-study-card__logo\">{logo}</div>}\n <div className=\"ds-case-study-card__company-info\">\n <span className=\"ds-case-study-card__company\">{company}</span>\n {industry && (\n <Badge variant=\"secondary\" className=\"ds-case-study-card__industry\">\n {industry}\n </Badge>\n )}\n </div>\n </div>\n\n <h3 className=\"ds-case-study-card__headline\">{headline}</h3>\n\n {metrics && metrics.length > 0 && (\n <div className=\"ds-case-study-card__metrics\">\n {metrics.map((metric, i) => (\n <div key={i} className=\"ds-case-study-card__metric\">\n <span className=\"ds-case-study-card__metric-value\">\n {metric.prefix}{metric.value}{metric.suffix}\n </span>\n <span className=\"ds-case-study-card__metric-label\">{metric.label}</span>\n </div>\n ))}\n </div>\n )}\n\n {quote && (\n <blockquote className=\"ds-case-study-card__quote\">\n <p>“{quote}”</p>\n </blockquote>\n )}\n </div>\n </OutboundLink>\n </article>\n );\n },\n);\n\nCaseStudyCard.displayName = 'CaseStudyCard';\n","import React, { forwardRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { CaseStudyCard, type CaseStudyCardProps } from '../CaseStudyCard/CaseStudyCard';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../Tabs';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './CaseStudySection.css';\n\n/* ============================================================================\n CASE STUDY SECTION\n ============================================================================\n Case study showcase with optional industry filtering. Wraps CaseStudyCard\n grid in a SectionShell.\n\n Strategic objective: Trust + Authority\n ============================================================================ */\n\nexport interface CaseStudySectionProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Case study items */\n caseStudies: CaseStudyCardProps[];\n /** Enable industry filtering */\n filterable?: boolean;\n /** Filter labels (derived from caseStudies.industry if not provided) */\n filters?: string[];\n /** Max visible items */\n maxVisible?: number;\n /** \"See all\" link */\n seeAllHref?: string;\n}\n\n/**\n * Case study showcase section with optional filtering.\n *\n * @example\n * ```tsx\n * <CaseStudySection\n * eyebrow=\"Customer Stories\"\n * title=\"How Teams Win With SalesMind\"\n * caseStudies={caseStudies}\n * filterable\n * seeAllHref=\"/case-studies\"\n * />\n * ```\n */\nexport const CaseStudySection = forwardRef<HTMLDivElement, CaseStudySectionProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n caseStudies,\n filterable = false,\n filters,\n maxVisible,\n seeAllHref,\n className,\n ...props\n },\n ref,\n ) => {\n const allFilters = filters ?? [\n 'All',\n ...new Set(caseStudies.map((cs) => cs.industry).filter(Boolean) as string[]),\n ];\n const [activeFilter, setActiveFilter] = useState('All');\n\n const filtered =\n activeFilter === 'All'\n ? caseStudies\n : caseStudies.filter((cs) => cs.industry === activeFilter);\n\n const visible = maxVisible ? filtered.slice(0, maxVisible) : filtered;\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-case-study-section', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n {filterable && allFilters.length > 1 && (\n <Tabs\n value={allFilters.indexOf(activeFilter)}\n onValueChange={(v) => setActiveFilter(allFilters[v as number] ?? 'All')}\n >\n <TabsList className=\"ds-case-study-section__filters\">\n {allFilters.map((filter, i) => (\n <TabsTrigger key={filter} value={i} className=\"ds-case-study-section__filter\">\n {filter}\n </TabsTrigger>\n ))}\n </TabsList>\n {allFilters.map((_, i) => (\n <TabsContent key={i} value={i} className=\"ds-case-study-section__tab-content\" />\n ))}\n </Tabs>\n )}\n\n <div className=\"ds-case-study-section__grid\">\n {visible.map((cs, i) => (\n <CaseStudyCard key={i} {...cs} />\n ))}\n </div>\n\n {seeAllHref && (\n <div className=\"ds-case-study-section__see-all\">\n <Button variant=\"outline\" asChild>\n <OutboundLink href={seeAllHref} context=\"case-study-section-see-all\" openInNewTab={false}>See all case studies</OutboundLink>\n </Button>\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nCaseStudySection.displayName = 'CaseStudySection';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { ArticleCard, type ArticleCardProps } from '../ArticleCard/ArticleCard';\nimport './RelatedContent.css';\n\n/* ============================================================================\n RELATED CONTENT\n ============================================================================\n Related articles/resources section. Drives internal linking and increases\n session duration.\n\n Strategic objective: Distribution (internal linking + session depth)\n ============================================================================ */\n\nexport interface RelatedContentProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title?: React.ReactNode;\n /** Related article items (uses ArticleCard props) */\n items: ArticleCardProps[];\n /** Max items to display */\n maxVisible?: number;\n}\n\n/**\n * Related articles section using ArticleCard grid.\n *\n * @example\n * ```tsx\n * <RelatedContent\n * title=\"Related Articles\"\n * items={[\n * { title: 'AI Outreach Guide', href: '/blog/ai-outreach', ... },\n * { title: 'Pipeline Automation', href: '/blog/pipeline', ... },\n * ]}\n * background=\"muted\"\n * />\n * ```\n */\nexport const RelatedContent = forwardRef<HTMLDivElement, RelatedContentProps>(\n (\n {\n eyebrow,\n title = 'Related Articles',\n items,\n maxVisible,\n className,\n ...props\n },\n ref,\n ) => {\n const visibleItems = maxVisible ? items.slice(0, maxVisible) : items;\n\n if (visibleItems.length === 0) return null;\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-related-content', className)}\n background=\"muted\"\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} />\n\n <div className=\"ds-related-content__grid\">\n {visibleItems.map((item, i) => (\n <ArticleCard key={i} {...item} />\n ))}\n </div>\n </SectionShell>\n );\n },\n);\n\nRelatedContent.displayName = 'RelatedContent';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { ToggleGroup, ToggleGroupItem } from '../ToggleGroup/ToggleGroup';\nimport { Badge } from '../Badge/Badge';\nimport './PricingToggle.css';\n\n/* ============================================================================\n PRICING TOGGLE\n ============================================================================\n Monthly/annual billing period toggle with savings badge. Uses ToggleGroup\n internally for accessible keyboard navigation.\n\n Strategic objective: ACV (anchors annual pricing, increases LTV)\n ============================================================================ */\n\nexport interface PricingToggleProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Current billing period */\n value: 'monthly' | 'annual';\n /** Change handler */\n onChange: (period: 'monthly' | 'annual') => void;\n /** Monthly label (default: \"Monthly\") */\n monthlyLabel?: string;\n /** Annual label (default: \"Annual\") */\n annualLabel?: string;\n /** Savings badge text (e.g., \"Save 20%\") */\n savingsBadge?: string;\n}\n\n/**\n * Billing period toggle for pricing sections.\n *\n * @example\n * ```tsx\n * const [period, setPeriod] = useState<'monthly' | 'annual'>('annual');\n *\n * <PricingToggle\n * value={period}\n * onChange={setPeriod}\n * savingsBadge=\"Save 20%\"\n * />\n * ```\n */\nexport const PricingToggle = forwardRef<HTMLDivElement, PricingToggleProps>(\n (\n {\n value,\n onChange,\n monthlyLabel = 'Monthly',\n annualLabel = 'Annual',\n savingsBadge,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={clsx('ds-pricing-toggle', className)}\n {...props}\n >\n <ToggleGroup\n type=\"single\"\n value={value}\n onValueChange={(v) => {\n if (v && typeof v === 'string') {\n onChange(v as 'monthly' | 'annual');\n }\n }}\n >\n <ToggleGroupItem value=\"monthly\">{monthlyLabel}</ToggleGroupItem>\n <ToggleGroupItem value=\"annual\">\n {annualLabel}\n </ToggleGroupItem>\n </ToggleGroup>\n\n {savingsBadge && (\n <Badge className=\"ds-pricing-toggle__badge\">{savingsBadge}</Badge>\n )}\n </div>\n );\n },\n);\n\nPricingToggle.displayName = 'PricingToggle';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './ToggleGroup.css';\n\n/* ==========================================================================\n Context\n ========================================================================== */\n\ninterface ToggleGroupContextValue {\n type: 'single' | 'multiple';\n value: string[];\n onItemToggle: (itemValue: string) => void;\n}\n\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue>({\n type: 'single',\n value: [],\n onItemToggle: () => {},\n});\n\n/* ==========================================================================\n ToggleGroup (div — role=\"group\")\n ========================================================================== */\n\nexport interface ToggleGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether a single or multiple items can be pressed at once. */\n type: 'single' | 'multiple';\n /** The controlled value(s). String for single, string[] for multiple. */\n value?: string | string[];\n /** Callback when value changes. */\n onValueChange?: (value: string | string[]) => void;\n}\n\n/**\n * A group of toggle buttons where one or more can be selected.\n *\n * @example\n * <ToggleGroup type=\"single\" value=\"center\" onValueChange={setValue}>\n * <ToggleGroupItem value=\"left\">Left</ToggleGroupItem>\n * <ToggleGroupItem value=\"center\">Center</ToggleGroupItem>\n * <ToggleGroupItem value=\"right\">Right</ToggleGroupItem>\n * </ToggleGroup>\n */\nexport const ToggleGroup = React.forwardRef<HTMLDivElement, ToggleGroupProps>(\n ({ className, type, value, onValueChange, children, ...props }, ref) => {\n const normalizedValue = React.useMemo<string[]>(() => {\n if (value === undefined) return [];\n return Array.isArray(value) ? value : [value];\n }, [value]);\n\n const onItemToggle = React.useCallback(\n (itemValue: string) => {\n if (type === 'single') {\n const next = normalizedValue.includes(itemValue) ? '' : itemValue;\n onValueChange?.(next);\n } else {\n const next = normalizedValue.includes(itemValue)\n ? normalizedValue.filter((v) => v !== itemValue)\n : [...normalizedValue, itemValue];\n onValueChange?.(next);\n }\n },\n [type, normalizedValue, onValueChange],\n );\n\n const ctx = React.useMemo<ToggleGroupContextValue>(\n () => ({ type, value: normalizedValue, onItemToggle }),\n [type, normalizedValue, onItemToggle],\n );\n\n return (\n <ToggleGroupContext.Provider value={ctx}>\n <div\n ref={ref}\n role=\"group\"\n className={clsx('ds-toggle-group', className)}\n {...props}\n >\n {children}\n </div>\n </ToggleGroupContext.Provider>\n );\n },\n);\n\nToggleGroup.displayName = 'ToggleGroup';\n\n/* ==========================================================================\n ToggleGroupItem (button)\n ========================================================================== */\n\nexport interface ToggleGroupItemProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** The value this item represents. */\n value: string;\n}\n\nexport const ToggleGroupItem = React.forwardRef<\n HTMLButtonElement,\n ToggleGroupItemProps\n>(({ className, value, children, onClick, ...props }, ref) => {\n const ctx = React.useContext(ToggleGroupContext);\n const pressed = ctx.value.includes(value);\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.onItemToggle(value);\n onClick?.(e);\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={pressed}\n className={clsx(\n 'ds-toggle-group__item',\n pressed && 'ds-toggle-group__item--pressed',\n className,\n )}\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n );\n});\n\nToggleGroupItem.displayName = 'ToggleGroupItem';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { Avatar, AvatarImage, AvatarFallback } from '../Avatar/Avatar';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './AuthorBio.css';\n\n/* ============================================================================\n AUTHOR BIO\n ============================================================================\n Author biography card for blog posts and articles.\n\n Strategic objective: Authority (expert credibility signal)\n ============================================================================ */\n\n/** Social/external link */\nexport interface AuthorLink {\n /** Link label (e.g., \"Twitter\", \"LinkedIn\") */\n label: string;\n /** Link URL */\n href: string;\n /** Optional icon */\n icon?: React.ReactNode;\n}\n\nexport interface AuthorBioProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Author name */\n name: string;\n /** Author role or title */\n role?: string;\n /** Avatar image URL */\n avatar?: string;\n /** Biography text */\n bio?: string;\n /** External links */\n links?: AuthorLink[];\n /** Layout variant */\n variant?: 'inline' | 'card' | 'compact' | 'longform';\n}\n\n/**\n * Author biography card.\n *\n * @example\n * ```tsx\n * <AuthorBio\n * name=\"Alex Chen\"\n * role=\"Head of Growth at SalesMind AI\"\n * avatar=\"/team/alex.jpg\"\n * bio=\"Alex has 10+ years of experience in B2B growth...\"\n * links={[{ label: 'LinkedIn', href: 'https://linkedin.com/in/alexchen' }]}\n * variant=\"card\"\n * />\n * ```\n */\nexport const AuthorBio = forwardRef<HTMLDivElement, AuthorBioProps>(\n (\n {\n name,\n role,\n avatar,\n bio,\n links,\n variant = 'card',\n className,\n ...props\n },\n ref,\n ) => {\n const initials = name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .slice(0, 2);\n\n return (\n <div\n ref={ref}\n className={clsx('ds-author-bio', `ds-author-bio--${variant}`, className)}\n {...props}\n >\n <Avatar size={variant === 'compact' ? 'sm' : variant === 'longform' ? 'lg' : 'md'} className=\"ds-author-bio__avatar\">\n {avatar && <AvatarImage src={avatar} alt={name} />}\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n\n <div className=\"ds-author-bio__info\">\n <span className=\"ds-author-bio__name\">{name}</span>\n {role && <span className=\"ds-author-bio__role\">{role}</span>}\n {bio && variant !== 'compact' && (\n <p className=\"ds-author-bio__bio\">{bio}</p>\n )}\n {links && links.length > 0 && variant !== 'compact' && (\n <div className=\"ds-author-bio__links\">\n {links.map((link, i) => (\n <OutboundLink\n key={i}\n href={link.href}\n context=\"author-bio-link\"\n className=\"ds-author-bio__link\"\n >\n {link.icon && <span className=\"ds-author-bio__link-icon\">{link.icon}</span>}\n {link.label}\n </OutboundLink>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nAuthorBio.displayName = 'AuthorBio';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Avatar.css';\n\n/* ==========================================================================\n Context\n ========================================================================== */\n\ninterface AvatarContextValue {\n hasImage: boolean;\n imageError: boolean;\n onImageError: () => void;\n}\n\nconst AvatarContext = React.createContext<AvatarContextValue>({\n hasImage: false,\n imageError: false,\n onImageError: () => {},\n});\n\n/* ==========================================================================\n Avatar (root)\n ========================================================================== */\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n}\n\n/**\n * User avatar with image and fallback support.\n *\n * @example\n * <Avatar>\n * <AvatarImage src=\"/photo.jpg\" alt=\"User\" />\n * <AvatarFallback>JD</AvatarFallback>\n * </Avatar>\n */\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n ({ size = 'md', className, children, ...props }, ref) => {\n const [imageError, setImageError] = React.useState(false);\n const [hasImage, setHasImage] = React.useState(false);\n\n // Scan children to detect if an AvatarImage is present\n React.useEffect(() => {\n let found = false;\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && child.type === AvatarImage) {\n found = true;\n }\n });\n setHasImage(found);\n }, [children]);\n\n const onImageError = React.useCallback(() => {\n setImageError(true);\n }, []);\n\n return (\n <AvatarContext.Provider value={{ hasImage, imageError, onImageError }}>\n <span\n ref={ref}\n className={clsx('ds-avatar', `ds-avatar--${size}`, className)}\n {...props}\n >\n {children}\n </span>\n </AvatarContext.Provider>\n );\n },\n);\n\nAvatar.displayName = 'Avatar';\n\n/* ==========================================================================\n AvatarImage\n ========================================================================== */\n\nexport const AvatarImage = React.forwardRef<\n HTMLImageElement,\n React.ImgHTMLAttributes<HTMLImageElement>\n>(({ className, onError, ...props }, ref) => {\n const { imageError, onImageError } = React.useContext(AvatarContext);\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n onImageError();\n onError?.(e);\n };\n\n if (imageError) return null;\n\n return (\n <img\n ref={ref}\n className={clsx('ds-avatar__image', className)}\n onError={handleError}\n {...props}\n />\n );\n});\n\nAvatarImage.displayName = 'AvatarImage';\n\n/* ==========================================================================\n AvatarFallback\n ========================================================================== */\n\nexport const AvatarFallback = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => {\n const { hasImage, imageError } = React.useContext(AvatarContext);\n\n // Show fallback when there is no image, or the image failed to load\n if (hasImage && !imageError) return null;\n\n return (\n <span ref={ref} className={clsx('ds-avatar__fallback', className)} {...props} />\n );\n});\n\nAvatarFallback.displayName = 'AvatarFallback';\n","import React, { forwardRef, useState, useEffect } from 'react';\nimport clsx from 'clsx';\nimport { useMessage } from '../../i18n';\nimport './TableOfContents.css';\n\n/* ============================================================================\n TABLE OF CONTENTS\n ============================================================================\n Sticky article TOC with active heading detection via IntersectionObserver.\n\n Strategic objective: Distribution (increases article dwell time)\n ============================================================================ */\n\n/** A TOC item mapping to a heading */\nexport interface TOCItem {\n /** Heading element ID */\n id: string;\n /** Heading text */\n title: string;\n /** Heading level (2 = h2, 3 = h3, etc.) */\n level: number;\n}\n\nexport interface TableOfContentsProps extends React.HTMLAttributes<HTMLElement> {\n /** TOC items (typically extracted from article headings) */\n items: TOCItem[];\n /** Currently active heading ID (controlled) */\n activeId?: string;\n /** Position variant */\n position?: 'sidebar' | 'inline' | 'floating';\n /** Label text */\n label?: string;\n /** Callback when an item is clicked */\n onItemClick?: (id: string) => void;\n}\n\n/**\n * Sticky table of contents with active heading tracking.\n *\n * @example\n * ```tsx\n * <TableOfContents\n * items={[\n * { id: 'intro', title: 'Introduction', level: 2 },\n * { id: 'setup', title: 'Getting Started', level: 2 },\n * { id: 'config', title: 'Configuration', level: 3 },\n * ]}\n * position=\"sidebar\"\n * />\n * ```\n */\nexport const TableOfContents = forwardRef<HTMLElement, TableOfContentsProps>(\n (\n {\n items,\n activeId: controlledActiveId,\n position = 'sidebar',\n label,\n onItemClick,\n className,\n ...props\n },\n ref,\n ) => {\n const t = useMessage();\n const defaultLabel = t({ id: 'ds.toc.label', defaultMessage: 'On this page' });\n const finalLabel = label || defaultLabel;\n\n const [observedActiveId, setObservedActiveId] = useState<string>('');\n const activeId = controlledActiveId ?? observedActiveId;\n\n // Auto-detect active heading via Scroll Listener (more robust than IO for long sections)\n useEffect(() => {\n if (controlledActiveId !== undefined) return;\n if (items.length === 0) return;\n\n const handleScroll = () => {\n const headingElements = items\n .map((item) => ({\n id: item.id,\n el: document.getElementById(item.id),\n }))\n .filter((h): h is { id: string; el: HTMLElement } => !!h.el);\n\n if (headingElements.length === 0) return;\n\n // Offset for sticky header\n const topOffset = 120; \n\n // Find the first heading that is clearly below the top offset\n const firstBelowIndex = headingElements.findIndex((h) => {\n const rect = h.el.getBoundingClientRect();\n return rect.top > topOffset;\n });\n\n let newActiveId = '';\n if (firstBelowIndex === -1) {\n // All headings are above the offset -> last one is active\n newActiveId = headingElements[headingElements.length - 1].id;\n } else if (firstBelowIndex === 0) {\n // First heading is below offset -> none active (or first if we want to be generous)\n newActiveId = ''; // Or headingElements[0].id\n } else {\n // The heading immediately before the one that is below is the active one\n newActiveId = headingElements[firstBelowIndex - 1].id;\n }\n\n setObservedActiveId(newActiveId);\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n // Initial check\n handleScroll();\n\n return () => window.removeEventListener('scroll', handleScroll);\n }, [items, controlledActiveId]);\n\n const handleClick = (id: string) => {\n const el = document.getElementById(id);\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n if (onItemClick) onItemClick(id);\n };\n\n if (items.length === 0) return null;\n\n return (\n <nav\n ref={ref}\n className={clsx('ds-toc', `ds-toc--${position}`, className)}\n aria-label={finalLabel}\n {...props}\n >\n <span className=\"ds-toc__label\">{finalLabel}</span>\n <ul className=\"ds-toc__list\">\n {items.map((item) => (\n <li key={item.id} className=\"ds-toc__item\" style={{ paddingLeft: `${(item.level - 2) * 12}px` }}>\n <button\n type=\"button\"\n className={clsx(\n 'ds-toc__link',\n activeId === item.id && 'ds-toc__link--active',\n )}\n onClick={() => handleClick(item.id)}\n >\n {item.title}\n </button>\n </li>\n ))}\n </ul>\n </nav>\n );\n },\n);\n\nTableOfContents.displayName = 'TableOfContents';\n","/**\n * Design System Message Hooks\n *\n * Provides hooks for accessing internationalized messages in components.\n * These hooks are optional - components can still accept string props directly.\n *\n * @example\n * ```tsx\n * import { useMessage, commonMessages } from '@salesmind-ai/design-system';\n *\n * function MyComponent() {\n * const t = useMessage();\n * return <button>{t(commonMessages.save)}</button>;\n * }\n * ```\n */\n\nimport { useIntl, MessageDescriptor, PrimitiveType } from 'react-intl';\nimport { useCallback } from 'react';\n\n/**\n * Format message values type\n */\nexport type MessageValues = Record<string, PrimitiveType>;\n\n/**\n * Hook to get a message formatter function\n *\n * @returns A function that formats messages\n *\n * @example\n * ```tsx\n * const t = useMessage();\n * return <span>{t(commonMessages.loading)}</span>;\n * ```\n */\nexport function useMessage() {\n const intl = useIntl();\n\n const formatMessage = useCallback(\n (descriptor: MessageDescriptor, values?: MessageValues): string => {\n return intl.formatMessage(descriptor, values);\n },\n [intl],\n );\n\n return formatMessage;\n}\n\n/**\n * Hook to get the current locale\n *\n * @returns The current locale string (e.g., 'en', 'fr')\n *\n * @example\n * ```tsx\n * const locale = useLocale();\n * console.log(locale); // 'en'\n * ```\n */\nexport function useLocale(): string {\n const intl = useIntl();\n return intl.locale;\n}\n\n/**\n * Hook to check if RTL is needed for current locale\n *\n * @returns true if the current locale is RTL\n *\n * @example\n * ```tsx\n * const isRTL = useIsRTL();\n * return <div style={{ direction: isRTL ? 'rtl' : 'ltr' }}>...</div>;\n * ```\n */\nexport function useIsRTL(): boolean {\n const locale = useLocale();\n\n // RTL locales\n const rtlLocales = [\n 'ar', // Arabic\n 'he', // Hebrew\n 'fa', // Persian/Farsi\n 'ur', // Urdu\n 'ps', // Pashto\n 'sd', // Sindhi\n 'yi', // Yiddish\n ];\n\n return rtlLocales.some((rtl) => locale === rtl || locale.startsWith(`${rtl}-`));\n}\n\n/**\n * Hook to get the current text direction\n *\n * @returns 'rtl' or 'ltr' based on locale\n *\n * @example\n * ```tsx\n * const dir = useTextDirection();\n * return <div dir={dir}>...</div>;\n * ```\n */\nexport function useTextDirection(): 'rtl' | 'ltr' {\n const isRTL = useIsRTL();\n return isRTL ? 'rtl' : 'ltr';\n}\n\n/**\n * Hook to format a number according to locale\n *\n * @returns A number formatter function\n *\n * @example\n * ```tsx\n * const formatNumber = useNumberFormat();\n * return <span>{formatNumber(1234.56)}</span>; // \"1,234.56\" in en-US\n * ```\n */\nexport function useNumberFormat() {\n const intl = useIntl();\n\n const formatNumber = useCallback(\n (value: number, options?: Intl.NumberFormatOptions): string => {\n return intl.formatNumber(value, options as Parameters<typeof intl.formatNumber>[1]);\n },\n [intl],\n );\n\n return formatNumber;\n}\n\n/**\n * Hook to format a date according to locale\n *\n * @returns A date formatter function\n *\n * @example\n * ```tsx\n * const formatDate = useDateFormat();\n * return <span>{formatDate(new Date())}</span>;\n * ```\n */\nexport function useDateFormat() {\n const intl = useIntl();\n\n const formatDate = useCallback(\n (value: Date | number, options?: Intl.DateTimeFormatOptions): string => {\n return intl.formatDate(value, options);\n },\n [intl],\n );\n\n return formatDate;\n}\n\n/**\n * Hook to format a relative time (e.g., \"2 days ago\")\n *\n * @returns A relative time formatter function\n *\n * @example\n * ```tsx\n * const formatRelative = useRelativeTime();\n * return <span>{formatRelative(-2, 'day')}</span>; // \"2 days ago\"\n * ```\n */\nexport function useRelativeTime() {\n const intl = useIntl();\n\n const formatRelativeTime = useCallback(\n (\n value: number,\n unit: Intl.RelativeTimeFormatUnit,\n options?: Intl.RelativeTimeFormatOptions,\n ): string => {\n return intl.formatRelativeTime(value, unit, options as Parameters<typeof intl.formatRelativeTime>[2]);\n },\n [intl],\n );\n\n return formatRelativeTime;\n}\n","/**\n * Design System Internationalization Module\n *\n * Provides i18n infrastructure for design system components.\n *\n * @module i18n\n */\n\n// Provider\nexport { DSIntlProvider, type DSIntlProviderProps } from './IntlProvider';\n\n// Hooks\nexport {\n useMessage,\n useLocale,\n useIsRTL,\n useTextDirection,\n useNumberFormat,\n useDateFormat,\n useRelativeTime,\n type MessageValues,\n} from './useMessage';\n\n// Messages\nexport {\n commonMessages,\n alertMessages,\n toastMessages,\n dialogMessages,\n formMessages,\n authMessages,\n navigationMessages,\n reportMessages,\n appearanceMessages,\n paginationMessages,\n calendarMessages,\n carouselMessages,\n methodologyMessages,\n allMessages,\n} from './messages';\n\n// Re-export react-intl types for convenience\nexport type { MessageDescriptor } from 'react-intl';\nexport { defineMessages, FormattedMessage, FormattedNumber, FormattedDate } from 'react-intl';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { Avatar, AvatarImage, AvatarFallback } from '../Avatar/Avatar';\nimport './ManifestoBlock.css';\n\n/* ============================================================================\n MANIFESTO BLOCK\n ============================================================================\n Brand philosophy / manifesto statement. A bold, typographic block that\n communicates company beliefs and values.\n\n Strategic objective: Narrative Control (brand alignment filter)\n ============================================================================ */\n\n/** Attribution for the manifesto */\nexport interface ManifestoAttribution {\n /** Name */\n name: string;\n /** Role */\n role: string;\n /** Avatar URL */\n avatar?: string;\n}\n\nexport interface ManifestoBlockProps extends Omit<SectionShellProps, 'children'> {\n /** The manifesto statement (plain text or ReactNode) */\n statement: React.ReactNode;\n /** Attribution (e.g., founder) */\n attribution?: ManifestoAttribution;\n /** Visual variant */\n variant?: 'centered' | 'editorial' | 'quote';\n}\n\n/**\n * Bold brand philosophy statement.\n *\n * @example\n * ```tsx\n * <ManifestoBlock\n * statement=\"We believe pipeline shouldn't be a prayer. It should be infrastructure.\"\n * attribution={{ name: 'Julien', role: 'Founder & CEO' }}\n * variant=\"quote\"\n * padding=\"lg\"\n * />\n * ```\n */\nexport const ManifestoBlock = forwardRef<HTMLDivElement, ManifestoBlockProps>(\n (\n {\n statement,\n attribution,\n variant = 'centered',\n className,\n ...props\n },\n ref,\n ) => {\n const initials = attribution\n ? attribution.name.split(' ').map((n) => n[0]).join('').slice(0, 2)\n : '';\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-manifesto', `ds-manifesto--${variant}`, className)}\n {...props}\n >\n <div className=\"ds-manifesto__inner\">\n {variant === 'quote' && (\n <span className=\"ds-manifesto__quote-mark\" aria-hidden=\"true\">“</span>\n )}\n\n <blockquote className=\"ds-manifesto__statement\">\n {statement}\n </blockquote>\n\n {attribution && (\n <div className=\"ds-manifesto__attribution\">\n <Avatar size=\"sm\">\n {attribution.avatar && <AvatarImage src={attribution.avatar} alt={attribution.name} />}\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n <div className=\"ds-manifesto__attribution-text\">\n <span className=\"ds-manifesto__attribution-name\">{attribution.name}</span>\n <span className=\"ds-manifesto__attribution-role\">{attribution.role}</span>\n </div>\n </div>\n )}\n </div>\n </SectionShell>\n );\n },\n);\n\nManifestoBlock.displayName = 'ManifestoBlock';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Badge } from '../Badge/Badge';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './ComplianceGrid.css';\n\n/* ============================================================================\n COMPLIANCE GRID\n ============================================================================\n Compliance certifications grid with status indicators. Shows certification\n progress to enterprise buyers.\n\n Strategic objective: Trust + Authority (enterprise procurement readiness)\n ============================================================================ */\n\n/** Status of a compliance certification */\nexport type ComplianceStatus = 'certified' | 'in-progress' | 'planned';\n\n/** A single compliance item */\nexport interface ComplianceItem {\n /** Certification name */\n name: string;\n /** Current status */\n status: ComplianceStatus;\n /** Icon */\n icon?: React.ReactNode;\n /** Description */\n description?: string;\n /** Link to documentation or certificate */\n documentHref?: string;\n}\n\nexport interface ComplianceGridProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Compliance items */\n items: ComplianceItem[];\n}\n\nconst STATUS_LABELS: Record<ComplianceStatus, string> = {\n certified: 'Certified',\n 'in-progress': 'In Progress',\n planned: 'Planned',\n};\n\n/**\n * Compliance certifications grid with status badges.\n *\n * @example\n * ```tsx\n * <ComplianceGrid\n * eyebrow=\"Compliance\"\n * title=\"Enterprise-Grade Security\"\n * items={[\n * { name: 'SOC 2 Type II', status: 'certified', icon: <ShieldIcon /> },\n * { name: 'ISO 27001', status: 'in-progress', icon: <LockIcon /> },\n * { name: 'HIPAA', status: 'planned', icon: <HospitalIcon /> },\n * ]}\n * />\n * ```\n */\nexport const ComplianceGrid = forwardRef<HTMLDivElement, ComplianceGridProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n items,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-compliance-grid', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n <div className=\"ds-compliance-grid__items\">\n {items.map((item, i) => {\n const inner = (\n <div\n key={i}\n className={clsx(\n 'ds-compliance-grid__item',\n `ds-compliance-grid__item--${item.status}`,\n )}\n >\n {item.icon && (\n <div className=\"ds-compliance-grid__icon\">{item.icon}</div>\n )}\n <div className=\"ds-compliance-grid__info\">\n <span className=\"ds-compliance-grid__name\">{item.name}</span>\n <Badge\n className={clsx(\n 'ds-compliance-grid__status',\n `ds-compliance-grid__status--${item.status}`,\n )}\n variant=\"outline\"\n >\n {STATUS_LABELS[item.status]}\n </Badge>\n {item.description && (\n <span className=\"ds-compliance-grid__desc\">{item.description}</span>\n )}\n </div>\n </div>\n );\n\n return item.documentHref ? (\n <OutboundLink key={i} href={item.documentHref} context=\"compliance-grid-doc\" className=\"ds-compliance-grid__link\">\n {inner}\n </OutboundLink>\n ) : (\n <React.Fragment key={i}>{inner}</React.Fragment>\n );\n })}\n </div>\n </SectionShell>\n );\n },\n);\n\nComplianceGrid.displayName = 'ComplianceGrid';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport './ArchitectureDiagram.css';\n\n/* ============================================================================\n ARCHITECTURE DIAGRAM\n ============================================================================\n SVG-based system architecture visualization showing integration flow.\n Renders nodes and connections as a directed graph.\n\n Strategic objective: Moat (visualizes ecosystem complexity as value)\n ============================================================================ */\n\n/** Node type determines visual treatment */\nexport type ArchitectureNodeType = 'source' | 'process' | 'destination' | 'integration';\n\n/** A node in the architecture diagram */\nexport interface ArchitectureNode {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Optional icon */\n icon?: React.ReactNode;\n /** Node type affects styling */\n type: ArchitectureNodeType;\n /** Tooltip description */\n description?: string;\n}\n\n/** A connection between two nodes */\nexport interface ArchitectureConnection {\n /** Source node ID */\n from: string;\n /** Destination node ID */\n to: string;\n /** Connection label */\n label?: string;\n /** Show animated dashes */\n animated?: boolean;\n}\n\nexport interface ArchitectureDiagramProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Nodes in the diagram */\n nodes: ArchitectureNode[];\n /** Connections between nodes */\n connections: ArchitectureConnection[];\n /** Flow direction */\n direction?: 'horizontal' | 'vertical';\n}\n\n/**\n * System architecture visualization with nodes and connections.\n *\n * @example\n * ```tsx\n * <ArchitectureDiagram\n * nodes={[\n * { id: 'linkedin', label: 'LinkedIn', type: 'source' },\n * { id: 'ai', label: 'SalesMind AI', type: 'process' },\n * { id: 'crm', label: 'CRM', type: 'destination' },\n * ]}\n * connections={[\n * { from: 'linkedin', to: 'ai', animated: true },\n * { from: 'ai', to: 'crm', animated: true },\n * ]}\n * direction=\"horizontal\"\n * />\n * ```\n */\nexport const ArchitectureDiagram = forwardRef<HTMLDivElement, ArchitectureDiagramProps>(\n (\n {\n nodes,\n connections,\n direction = 'horizontal',\n className,\n ...props\n },\n ref,\n ) => {\n // Simple linear layout — nodes spaced evenly\n const isHorizontal = direction === 'horizontal';\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-architecture',\n `ds-architecture--${direction}`,\n className,\n )}\n role=\"img\"\n aria-label=\"Architecture diagram\"\n {...props}\n >\n <div className=\"ds-architecture__nodes\">\n {nodes.map((node, i) => (\n <React.Fragment key={node.id}>\n {/* Connection arrow before node (except first) */}\n {i > 0 && (\n <div className=\"ds-architecture__connection\" aria-hidden=\"true\">\n <div\n className={clsx(\n 'ds-architecture__line',\n connections.find(\n (c) => c.from === nodes[i - 1]?.id && c.to === node.id,\n )?.animated && 'ds-architecture__line--animated',\n )}\n />\n <span className=\"ds-architecture__arrow\">\n {isHorizontal ? '\\u2192' : '\\u2193'}\n </span>\n {connections.find(\n (c) => c.from === nodes[i - 1]?.id && c.to === node.id,\n )?.label && (\n <span className=\"ds-architecture__connection-label\">\n {connections.find(\n (c) => c.from === nodes[i - 1]?.id && c.to === node.id,\n )?.label}\n </span>\n )}\n </div>\n )}\n\n {/* Node */}\n <div\n className={clsx(\n 'ds-architecture__node',\n `ds-architecture__node--${node.type}`,\n )}\n title={node.description}\n >\n {node.icon && (\n <span className=\"ds-architecture__node-icon\" aria-hidden=\"true\">\n {node.icon}\n </span>\n )}\n <span className=\"ds-architecture__node-label\">{node.label}</span>\n </div>\n </React.Fragment>\n ))}\n </div>\n </div>\n );\n },\n);\n\nArchitectureDiagram.displayName = 'ArchitectureDiagram';\n","import React, { forwardRef, useMemo } from 'react';\nimport clsx from 'clsx';\n\n/* ============================================================================\n SEGMENT SWITCH\n ============================================================================\n Renders content based on visitor segment. Pure logic wrapper — no visual\n output of its own. Reads segment from UTM params, cookie, or manual prop.\n\n Strategic objective: Pipeline Quality (personalized conversion paths)\n ============================================================================ */\n\nexport interface SegmentSwitchProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Active segment key */\n segment?: string;\n /** Map of segment keys to content */\n segments: Record<string, React.ReactNode>;\n /** Fallback content when no segment matches */\n fallback?: React.ReactNode;\n /** Segment source for auto-detection */\n source?: 'utm' | 'cookie' | 'manual';\n /** UTM parameter name (default: \"utm_segment\") */\n utmParam?: string;\n /** Cookie name (default: \"ds_segment\") */\n cookieName?: string;\n}\n\nfunction getUtmSegment(param: string): string | null {\n if (typeof window === 'undefined') return null;\n const url = new URL(window.location.href);\n return url.searchParams.get(param);\n}\n\nfunction getCookieSegment(name: string): string | null {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp(`(?:^|;\\\\s*)${name}=([^;]*)`));\n return match ? decodeURIComponent(match[1]) : null;\n}\n\n/**\n * Segment-based content renderer.\n *\n * @example\n * ```tsx\n * <SegmentSwitch\n * segment=\"founder\"\n * segments={{\n * founder: <FounderContent />,\n * operator: <OperatorContent />,\n * }}\n * fallback={<DefaultContent />}\n * />\n * ```\n */\nexport const SegmentSwitch = forwardRef<HTMLDivElement, SegmentSwitchProps>(\n (\n {\n segment: controlledSegment,\n segments,\n fallback = null,\n source = 'manual',\n utmParam = 'utm_segment',\n cookieName = 'ds_segment',\n className,\n ...props\n },\n ref,\n ) => {\n const resolvedSegment = useMemo(() => {\n if (controlledSegment) return controlledSegment;\n\n switch (source) {\n case 'utm':\n return getUtmSegment(utmParam) ?? undefined;\n case 'cookie':\n return getCookieSegment(cookieName) ?? undefined;\n default:\n return undefined;\n }\n }, [controlledSegment, source, utmParam, cookieName]);\n\n const content = resolvedSegment && segments[resolvedSegment]\n ? segments[resolvedSegment]\n : fallback;\n\n if (!content) return null;\n\n return (\n <div ref={ref} className={clsx(className)} {...props}>\n {content}\n </div>\n );\n },\n);\n\nSegmentSwitch.displayName = 'SegmentSwitch';\n","import React, { forwardRef, useState, useEffect, useRef } from 'react';\nimport clsx from 'clsx';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './IntentCTA.css';\n\n/* ============================================================================\n INTENT CTA\n ============================================================================\n Commitment-level adaptive CTA that escalates based on demonstrated intent\n (scroll depth, time on page, pages visited). As visitor engagement\n increases, CTA copy and urgency increase.\n\n Strategic objective: Pipeline Quality (progressive commitment ladder)\n ============================================================================ */\n\n/** What triggers a stage change */\nexport type IntentTriggerType = 'scroll' | 'time' | 'pages';\n\n/** A single CTA stage */\nexport interface IntentStage {\n /** What triggers this stage */\n trigger: { type: IntentTriggerType; threshold: number };\n /** CTA label */\n label: string;\n /** CTA link */\n href: string;\n /** Button variant (escalates with intent) */\n variant?: 'outline' | 'primary';\n}\n\nexport interface IntentCTAProps extends React.HTMLAttributes<HTMLDivElement> {\n /** CTA stages ordered by escalation */\n stages: IntentStage[];\n /** Default CTA (shown before any stage triggers) */\n defaultCta: { label: string; href: string; variant?: 'outline' | 'primary' };\n /** External page count for 'pages' trigger type (tracked by consuming app) */\n pageCount?: number;\n}\n\n/**\n * Adaptive CTA that escalates with demonstrated visitor intent.\n *\n * @example\n * ```tsx\n * <IntentCTA\n * defaultCta={{ label: 'Learn More', href: '/about', variant: 'outline' }}\n * stages={[\n * { trigger: { type: 'scroll', threshold: 50 }, label: 'See Pricing', href: '/pricing', variant: 'outline' },\n * { trigger: { type: 'time', threshold: 30 }, label: 'Book a Demo', href: '/demo', variant: 'primary' },\n * { trigger: { type: 'scroll', threshold: 80 }, label: 'Start Free Trial', href: '/signup', variant: 'primary' },\n * ]}\n * />\n * ```\n */\nexport const IntentCTA = forwardRef<HTMLDivElement, IntentCTAProps>(\n (\n {\n stages,\n defaultCta,\n pageCount = 0,\n className,\n ...props\n },\n ref,\n ) => {\n const [activeStageIndex, setActiveStageIndex] = useState(-1);\n const timeRef = useRef(0);\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const pageCountRef = useRef(pageCount);\n\n // Keep pageCount ref in sync\n useEffect(() => {\n pageCountRef.current = pageCount;\n }, [pageCount]);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n // Track time on page\n timerRef.current = setInterval(() => {\n timeRef.current += 1;\n checkStages();\n }, 1000);\n\n // Track scroll depth\n const handleScroll = () => {\n checkStages();\n };\n window.addEventListener('scroll', handleScroll, { passive: true });\n\n function checkStages() {\n const scrollPercent = typeof document !== 'undefined'\n ? Math.round(\n (window.scrollY / (document.documentElement.scrollHeight - window.innerHeight)) * 100,\n )\n : 0;\n\n let highestTriggered = -1;\n\n for (let i = 0; i < stages.length; i++) {\n const stage = stages[i];\n let triggered = false;\n\n switch (stage.trigger.type) {\n case 'scroll':\n triggered = scrollPercent >= stage.trigger.threshold;\n break;\n case 'time':\n triggered = timeRef.current >= stage.trigger.threshold;\n break;\n case 'pages':\n triggered = pageCountRef.current >= stage.trigger.threshold;\n break;\n }\n\n if (triggered) highestTriggered = i;\n }\n\n setActiveStageIndex((prev) => Math.max(prev, highestTriggered));\n }\n\n // Run initial check (pageCount may already exceed threshold)\n checkStages();\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n if (timerRef.current) clearInterval(timerRef.current);\n };\n }, [stages]);\n\n const activeCta = activeStageIndex >= 0 ? stages[activeStageIndex] : defaultCta;\n\n return (\n <div\n ref={ref}\n className={clsx('ds-intent-cta', className)}\n {...props}\n >\n <Button\n variant={activeCta.variant ?? 'primary'}\n asChild\n >\n <OutboundLink href={activeCta.href} context=\"intent-cta\" openInNewTab={false}>{activeCta.label}</OutboundLink>\n </Button>\n </div>\n );\n },\n);\n\nIntentCTA.displayName = 'IntentCTA';\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/PricingCard/PricingCard.tsx","../../src/components/PricingSection/PricingSection.tsx","../../src/components/PricingToggle/PricingToggle.tsx","../../src/components/ToggleGroup/ToggleGroup.tsx","../../src/components/Badge/Badge.tsx","../../src/components/ComparisonTable/ComparisonTable.tsx","../../src/components/ROICalculator/ROICalculator.tsx","../../src/components/GuaranteeHighlight/GuaranteeHighlight.tsx","../../src/components/ICPFilter/ICPFilter.tsx","../../src/components/ObjectionFAQ/ObjectionFAQ.tsx","../../src/components/IntentCTA/IntentCTA.tsx","../../src/components/Button/Button.tsx","../../src/components/OutboundLink/OutboundLink.tsx","../../src/web/utm/useUtmDefaults.ts","../../src/web/utm/utm-context.ts","../../src/web/utm/builders.ts","../../src/web/utm/classifiers.ts","../../src/components/OutboundLink/outbound-link-utils.ts","../../src/components/StickyActionBar/StickyActionBar.tsx","../../src/web/analytics/use-analytics.tsx","../../src/web/analytics/analytics-context.ts","../../src/components/ExitIntentOverlay/ExitIntentOverlay.tsx","../../src/components/Dialog/Dialog.tsx","../../src/components/LeadCaptureForm/LeadCaptureForm.tsx","../../src/components/TextField/TextField.tsx","../../src/components/BookingEmbed/BookingEmbed.tsx","../../src/components/CompetitorDiff/CompetitorDiff.tsx","../../src/components/SectionShell/SectionShell.tsx","../../src/components/LayoutPrimitives/Box.tsx","../../src/tokens/spacing.ts","../../src/components/LayoutPrimitives/utils.ts","../../src/components/LayoutPrimitives/Container.tsx","../../src/components/BeforeAfterBlock/BeforeAfterBlock.tsx","../../src/components/ValueAnchor/ValueAnchor.tsx","../../src/components/Slider/Slider.tsx","../../src/components/EnterpriseSignaling/EnterpriseSignaling.tsx","../../src/components/IntelligenceBlock/IntelligenceBlock.tsx","../../src/components/MetricCounter/MetricCounter.tsx","../../src/components/PartnerValueProp/PartnerValueProp.tsx","../../src/components/EvolutionTimeline/EvolutionTimeline.tsx","../../src/components/EcosystemDiagram/EcosystemDiagram.tsx","../../src/components/ManifestoBlock/ManifestoBlock.tsx","../../src/components/Avatar/Avatar.tsx","../../src/components/AnnouncementBar/AnnouncementBar.tsx","../../src/components/ProcessTimeline/ProcessTimeline.tsx","../../src/components/ProblemAgitation/ProblemAgitation.tsx","../../src/components/StakeholderTabs/StakeholderTabs.tsx","../../src/components/Tabs/Tabs.tsx","../../src/components/IntegrationShowcase/IntegrationShowcase.tsx","../../src/components/SecurityBlock/SecurityBlock.tsx","../../src/components/CaseStudyCard/CaseStudyCard.tsx","../../src/components/CaseStudySection/CaseStudySection.tsx","../../src/components/ComplianceGrid/ComplianceGrid.tsx","../../src/components/ArchitectureDiagram/ArchitectureDiagram.tsx","../../src/components/SegmentSwitch/SegmentSwitch.tsx","../../src/components/VideoEmbed/VideoEmbed.tsx","../../src/components/BrowserFrame/BrowserFrame.tsx"],"names":["clsx","jsx","jsxs","forwardRef","React","useState","useEffect","useContext","createContext","useRef","useCallback","useMemo","STATUS_LABELS"],"mappings":"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","sourcesContent":["import React from 'react';\nimport clsx from 'clsx';\nimport './PricingCard.css';\n\n/* ============================================================================\n PRICING CARD — Advanced pricing tier card with glass treatment\n ============================================================================ */\n\nexport interface PricingFeature {\n /** Feature label text */\n text: string;\n /** Whether this feature is included in the tier */\n included?: boolean;\n /** Optional tooltip or emphasis text */\n detail?: string;\n}\n\nexport interface PricingCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Tier label (e.g. \"Operator Mode\", \"Founder Mode\") */\n tier: string;\n /** Short tagline under the tier name */\n tagline?: string;\n /** Price display string (e.g. \"$1,499\", \"$999\") */\n price: string;\n /** Price suffix (e.g. \"/month\", \"one-time\") */\n priceSuffix?: string;\n /** Previous/anchor price for strikethrough display */\n anchorPrice?: string;\n /** Badge text (e.g. \"Most Popular\", \"Best Value\") */\n badge?: string;\n /** Whether this card is visually highlighted as the recommended option */\n highlighted?: boolean;\n /** List of features included in this tier */\n features?: PricingFeature[];\n /** Primary CTA button content */\n cta?: React.ReactNode;\n /** Optional secondary action below CTA */\n secondaryCta?: React.ReactNode;\n /** Footer note text (e.g. \"3-month minimum\") */\n footerNote?: string;\n}\n\nexport const PricingCard = React.forwardRef<HTMLDivElement, PricingCardProps>(\n (\n {\n tier,\n tagline,\n price,\n priceSuffix,\n anchorPrice,\n badge,\n highlighted = false,\n features = [],\n cta,\n secondaryCta,\n footerNote,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-pricing-card',\n highlighted && 'ds-pricing-card--highlighted',\n className,\n )}\n {...props}\n >\n {/* Badge */}\n {badge && (\n <div className=\"ds-pricing-card__badge\">{badge}</div>\n )}\n\n {/* Header */}\n <div className=\"ds-pricing-card__header\">\n <h3 className=\"ds-pricing-card__tier\">{tier}</h3>\n {tagline && (\n <p className=\"ds-pricing-card__tagline\">{tagline}</p>\n )}\n </div>\n\n {/* Price block */}\n <div className=\"ds-pricing-card__price-block\">\n {anchorPrice && (\n <span className=\"ds-pricing-card__anchor-price\">{anchorPrice}</span>\n )}\n <div className=\"ds-pricing-card__price-row\">\n <span className=\"ds-pricing-card__price\">{price}</span>\n {priceSuffix && (\n <span className=\"ds-pricing-card__price-suffix\">{priceSuffix}</span>\n )}\n </div>\n </div>\n\n {/* Features */}\n {features.length > 0 && (\n <ul className=\"ds-pricing-card__features\">\n {features.map((feature, idx) => (\n <li\n key={idx}\n className={clsx(\n 'ds-pricing-card__feature',\n feature.included === false && 'ds-pricing-card__feature--excluded',\n )}\n >\n <span className=\"ds-pricing-card__feature-icon\" aria-hidden=\"true\">\n {feature.included === false ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )}\n </span>\n <span className=\"ds-pricing-card__feature-text\">\n {feature.text}\n {feature.detail && (\n <span className=\"ds-pricing-card__feature-detail\">\n {feature.detail}\n </span>\n )}\n </span>\n </li>\n ))}\n </ul>\n )}\n\n {/* CTA area */}\n {(cta || secondaryCta) && (\n <div className=\"ds-pricing-card__cta-area\">\n {cta}\n {secondaryCta && (\n <div className=\"ds-pricing-card__secondary-cta\">{secondaryCta}</div>\n )}\n </div>\n )}\n\n {/* Footer note */}\n {footerNote && (\n <p className=\"ds-pricing-card__footer-note\">{footerNote}</p>\n )}\n\n {/* Arbitrary children */}\n {children}\n </div>\n );\n },\n);\n\nPricingCard.displayName = 'PricingCard';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { PricingCard, PricingCardProps } from '../PricingCard/PricingCard';\nimport './PricingSection.css';\n\nexport interface PricingSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The headline/title of the pricing section */\n title: string;\n /** Optional subtitle or description */\n description?: React.ReactNode;\n /** Pricing plans to display */\n plans: PricingCardProps[];\n /** Optional toggle control for billing periods (e.g. Monthly/Yearly) */\n toggle?: React.ReactNode;\n}\n\n/**\n * Standardized pricing section layout that renders a grid of PricingCards.\n * Handles responsive wrapping and visual hierarchy automatically.\n */\nexport const PricingSection = forwardRef<HTMLDivElement, PricingSectionProps>(\n (\n {\n title,\n description,\n plans,\n toggle,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <section\n ref={ref}\n className={clsx('ds-pricing-section', className)}\n {...props}\n >\n <div className=\"ds-pricing-section__header\">\n <h2 className=\"ds-pricing-section__title\">{title}</h2>\n {description && (\n <p className=\"ds-pricing-section__description\">{description}</p>\n )}\n {toggle && (\n <div className=\"ds-pricing-section__toggle\">\n {toggle}\n </div>\n )}\n </div>\n \n <div className=\"ds-pricing-section__grid\">\n {plans.map((plan, index) => (\n <PricingCard \n key={index}\n {...plan}\n className={clsx(\n 'ds-pricing-section__card',\n plan.highlighted && 'ds-pricing-section__card--popular'\n )}\n />\n ))}\n </div>\n </section>\n );\n }\n);\n\nPricingSection.displayName = 'PricingSection';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { ToggleGroup, ToggleGroupItem } from '../ToggleGroup/ToggleGroup';\nimport { Badge } from '../Badge/Badge';\nimport './PricingToggle.css';\n\n/* ============================================================================\n PRICING TOGGLE\n ============================================================================\n Monthly/annual billing period toggle with savings badge. Uses ToggleGroup\n internally for accessible keyboard navigation.\n\n Strategic objective: ACV (anchors annual pricing, increases LTV)\n ============================================================================ */\n\nexport interface PricingToggleProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Current billing period */\n value: 'monthly' | 'annual';\n /** Change handler */\n onChange: (period: 'monthly' | 'annual') => void;\n /** Monthly label (default: \"Monthly\") */\n monthlyLabel?: string;\n /** Annual label (default: \"Annual\") */\n annualLabel?: string;\n /** Savings badge text (e.g., \"Save 20%\") */\n savingsBadge?: string;\n}\n\n/**\n * Billing period toggle for pricing sections.\n *\n * @example\n * ```tsx\n * const [period, setPeriod] = useState<'monthly' | 'annual'>('annual');\n *\n * <PricingToggle\n * value={period}\n * onChange={setPeriod}\n * savingsBadge=\"Save 20%\"\n * />\n * ```\n */\nexport const PricingToggle = forwardRef<HTMLDivElement, PricingToggleProps>(\n (\n {\n value,\n onChange,\n monthlyLabel = 'Monthly',\n annualLabel = 'Annual',\n savingsBadge,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={clsx('ds-pricing-toggle', className)}\n {...props}\n >\n <ToggleGroup\n type=\"single\"\n value={value}\n onValueChange={(v) => {\n if (v && typeof v === 'string') {\n onChange(v as 'monthly' | 'annual');\n }\n }}\n >\n <ToggleGroupItem value=\"monthly\">{monthlyLabel}</ToggleGroupItem>\n <ToggleGroupItem value=\"annual\">\n {annualLabel}\n </ToggleGroupItem>\n </ToggleGroup>\n\n {savingsBadge && (\n <Badge className=\"ds-pricing-toggle__badge\">{savingsBadge}</Badge>\n )}\n </div>\n );\n },\n);\n\nPricingToggle.displayName = 'PricingToggle';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './ToggleGroup.css';\n\n/* ==========================================================================\n Context\n ========================================================================== */\n\ninterface ToggleGroupContextValue {\n type: 'single' | 'multiple';\n value: string[];\n onItemToggle: (itemValue: string) => void;\n}\n\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue>({\n type: 'single',\n value: [],\n onItemToggle: () => {},\n});\n\n/* ==========================================================================\n ToggleGroup (div — role=\"group\")\n ========================================================================== */\n\nexport interface ToggleGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Whether a single or multiple items can be pressed at once. */\n type: 'single' | 'multiple';\n /** The controlled value(s). String for single, string[] for multiple. */\n value?: string | string[];\n /** Callback when value changes. */\n onValueChange?: (value: string | string[]) => void;\n}\n\n/**\n * A group of toggle buttons where one or more can be selected.\n *\n * @example\n * <ToggleGroup type=\"single\" value=\"center\" onValueChange={setValue}>\n * <ToggleGroupItem value=\"left\">Left</ToggleGroupItem>\n * <ToggleGroupItem value=\"center\">Center</ToggleGroupItem>\n * <ToggleGroupItem value=\"right\">Right</ToggleGroupItem>\n * </ToggleGroup>\n */\nexport const ToggleGroup = React.forwardRef<HTMLDivElement, ToggleGroupProps>(\n ({ className, type, value, onValueChange, children, ...props }, ref) => {\n const normalizedValue = React.useMemo<string[]>(() => {\n if (value === undefined) return [];\n return Array.isArray(value) ? value : [value];\n }, [value]);\n\n const onItemToggle = React.useCallback(\n (itemValue: string) => {\n if (type === 'single') {\n const next = normalizedValue.includes(itemValue) ? '' : itemValue;\n onValueChange?.(next);\n } else {\n const next = normalizedValue.includes(itemValue)\n ? normalizedValue.filter((v) => v !== itemValue)\n : [...normalizedValue, itemValue];\n onValueChange?.(next);\n }\n },\n [type, normalizedValue, onValueChange],\n );\n\n const ctx = React.useMemo<ToggleGroupContextValue>(\n () => ({ type, value: normalizedValue, onItemToggle }),\n [type, normalizedValue, onItemToggle],\n );\n\n return (\n <ToggleGroupContext.Provider value={ctx}>\n <div\n ref={ref}\n role=\"group\"\n className={clsx('ds-toggle-group', className)}\n {...props}\n >\n {children}\n </div>\n </ToggleGroupContext.Provider>\n );\n },\n);\n\nToggleGroup.displayName = 'ToggleGroup';\n\n/* ==========================================================================\n ToggleGroupItem (button)\n ========================================================================== */\n\nexport interface ToggleGroupItemProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** The value this item represents. */\n value: string;\n}\n\nexport const ToggleGroupItem = React.forwardRef<\n HTMLButtonElement,\n ToggleGroupItemProps\n>(({ className, value, children, onClick, ...props }, ref) => {\n const ctx = React.useContext(ToggleGroupContext);\n const pressed = ctx.value.includes(value);\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.onItemToggle(value);\n onClick?.(e);\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={pressed}\n className={clsx(\n 'ds-toggle-group__item',\n pressed && 'ds-toggle-group__item--pressed',\n className,\n )}\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n );\n});\n\nToggleGroupItem.displayName = 'ToggleGroupItem';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Badge.css';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Visual style variant */\n variant?: 'default' | 'secondary' | 'outline' | 'destructive';\n}\n\n/**\n * General-purpose badge for tags, labels, categories, and status indicators.\n *\n * For status-specific badges (success/warning/error/info), use `StatusBadge` instead.\n *\n * @example\n * <Badge>New</Badge>\n * <Badge variant=\"secondary\">Category</Badge>\n * <Badge variant=\"outline\">v2.1.0</Badge>\n * <Badge variant=\"destructive\">Breaking</Badge>\n */\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant = 'default', ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={clsx('ds-badge', `ds-badge--${variant}`, className)}\n {...props}\n />\n );\n },\n);\n\nBadge.displayName = 'Badge';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './ComparisonTable.css';\n\n/* ============================================================================\n COMPARISON TABLE — Side-by-side value/feature comparison\n ============================================================================ */\n\nexport interface ComparisonColumn {\n /** Column heading (e.g. \"Hiring SDRs\", \"SalesMind\") */\n label: string;\n /** Whether this column is highlighted as the recommended option */\n highlighted?: boolean;\n /** Optional badge above the column header */\n badge?: string;\n}\n\nexport interface ComparisonRow {\n /** Row label (the thing being compared) */\n label: string;\n /** Values for each column, in the same order as columns */\n values: (string | React.ReactNode)[];\n /** Optional category divider — if true, renders as a category header */\n isCategory?: boolean;\n}\n\nexport interface ComparisonTableProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Column definitions */\n columns: ComparisonColumn[];\n /** Row data */\n rows: ComparisonRow[];\n /** Optional table caption for accessibility */\n caption?: string;\n}\n\nexport const ComparisonTable = React.forwardRef<HTMLDivElement, ComparisonTableProps>(\n ({ columns, rows, caption, className, ...props }, ref) => {\n return (\n <div ref={ref} className={clsx('ds-comparison-table', className)} {...props}>\n <div className=\"ds-comparison-table__scroll\">\n <table className=\"ds-comparison-table__table\" role=\"table\">\n {caption && <caption className=\"ds-comparison-table__caption\">{caption}</caption>}\n <thead className=\"ds-comparison-table__head\">\n <tr>\n <th className=\"ds-comparison-table__corner\" scope=\"col\">\n <span className=\"ds-visually-hidden\">Feature</span>\n </th>\n {columns.map((col, idx) => (\n <th\n key={idx}\n scope=\"col\"\n className={clsx(\n 'ds-comparison-table__col-header',\n col.highlighted && 'ds-comparison-table__col-header--highlighted',\n )}\n >\n {col.badge && (\n <span className=\"ds-comparison-table__col-badge\">{col.badge}</span>\n )}\n <span className=\"ds-comparison-table__col-label\">{col.label}</span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"ds-comparison-table__body\">\n {rows.map((row, rowIdx) =>\n row.isCategory ? (\n <tr key={rowIdx} className=\"ds-comparison-table__category-row\">\n <td\n colSpan={columns.length + 1}\n className=\"ds-comparison-table__category\"\n >\n {row.label}\n </td>\n </tr>\n ) : (\n <tr key={rowIdx} className=\"ds-comparison-table__row\">\n <td className=\"ds-comparison-table__row-label\">{row.label}</td>\n {row.values.map((val, colIdx) => (\n <td\n key={colIdx}\n className={clsx(\n 'ds-comparison-table__cell',\n columns[colIdx]?.highlighted &&\n 'ds-comparison-table__cell--highlighted',\n )}\n >\n {val}\n </td>\n ))}\n </tr>\n ),\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n },\n);\n\nComparisonTable.displayName = 'ComparisonTable';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './ROICalculator.css';\n\n/* ============================================================================\n ROI CALCULATOR — Interactive cost comparison calculator\n ============================================================================ */\n\nexport interface ROIComparisonItem {\n /** Label (e.g. \"Hiring 3 SDRs\") */\n label: string;\n /** Monthly cost string */\n monthlyCost: string;\n /** Annual cost string */\n annualCost: string;\n /** Whether this item is the \"winner\" (highlighted) */\n isRecommended?: boolean;\n /** Additional context text */\n context?: string;\n}\n\nexport interface ROICalculatorProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Section eyebrow text */\n eyebrow?: string;\n /** Section title */\n title?: string;\n /** Comparison items to display */\n items: ROIComparisonItem[];\n /** Optional summary text below the comparison */\n summary?: React.ReactNode;\n /** Optional savings callout (e.g. \"Save $120,000/year\") */\n savingsCallout?: string;\n}\n\nexport const ROICalculator = React.forwardRef<HTMLDivElement, ROICalculatorProps>(\n (\n {\n eyebrow,\n title,\n items,\n summary,\n savingsCallout,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div ref={ref} className={clsx('ds-roi-calculator', className)} {...props}>\n {/* Header */}\n {(eyebrow || title) && (\n <div className=\"ds-roi-calculator__header\">\n {eyebrow && <span className=\"ds-roi-calculator__eyebrow\">{eyebrow}</span>}\n {title && <h3 className=\"ds-roi-calculator__title\">{title}</h3>}\n </div>\n )}\n\n {/* Comparison cards */}\n <div className=\"ds-roi-calculator__grid\">\n {items.map((item, idx) => (\n <div\n key={idx}\n className={clsx(\n 'ds-roi-calculator__item',\n item.isRecommended && 'ds-roi-calculator__item--recommended',\n )}\n >\n {item.isRecommended && (\n <span className=\"ds-roi-calculator__item-badge\">Your Cost</span>\n )}\n <span className=\"ds-roi-calculator__item-label\">{item.label}</span>\n <span className=\"ds-roi-calculator__item-cost\">{item.monthlyCost}</span>\n <span className=\"ds-roi-calculator__item-annual\">{item.annualCost}</span>\n {item.context && (\n <span className=\"ds-roi-calculator__item-context\">{item.context}</span>\n )}\n </div>\n ))}\n </div>\n\n {/* Savings callout */}\n {savingsCallout && (\n <div className=\"ds-roi-calculator__savings\">{savingsCallout}</div>\n )}\n\n {/* Summary */}\n {summary && (\n <div className=\"ds-roi-calculator__summary\">{summary}</div>\n )}\n </div>\n );\n },\n);\n\nROICalculator.displayName = 'ROICalculator';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './GuaranteeHighlight.css';\n\n/* ============================================================================\n GUARANTEE HIGHLIGHT — Prominent guarantee/commitment callout\n ============================================================================ */\n\nexport interface GuaranteeHighlightProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The guarantee statement (e.g. \"10+ qualified meetings per month\") */\n guarantee: string;\n /** Supporting detail or condition text */\n detail?: string;\n /** Optional fine print (e.g. \"Guarantee activates after onboarding alignment\") */\n finePrint?: string;\n /** Visual variant */\n variant?: 'default' | 'brand' | 'minimal';\n /** Optional icon — pass a React node (e.g. an SVG) */\n icon?: React.ReactNode;\n}\n\nexport const GuaranteeHighlight = React.forwardRef<HTMLDivElement, GuaranteeHighlightProps>(\n (\n {\n guarantee,\n detail,\n finePrint,\n variant = 'default',\n icon,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-guarantee',\n `ds-guarantee--${variant}`,\n className,\n )}\n {...props}\n >\n {icon && <div className=\"ds-guarantee__icon\">{icon}</div>}\n <div className=\"ds-guarantee__content\">\n <p className=\"ds-guarantee__statement\">{guarantee}</p>\n {detail && <p className=\"ds-guarantee__detail\">{detail}</p>}\n {finePrint && <p className=\"ds-guarantee__fine-print\">{finePrint}</p>}\n </div>\n </div>\n );\n },\n);\n\nGuaranteeHighlight.displayName = 'GuaranteeHighlight';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './ICPFilter.css';\n\n/* ============================================================================\n ICP FILTER — \"Who This Is For / Not For\" qualification block\n ============================================================================ */\n\nexport interface ICPFilterItem {\n /** Description text */\n text: string;\n}\n\nexport interface ICPFilterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Items describing who this IS for */\n qualifiedItems: ICPFilterItem[];\n /** Items describing who this is NOT for */\n disqualifiedItems: ICPFilterItem[];\n /** Heading for the qualified column */\n qualifiedHeading?: string;\n /** Heading for the disqualified column */\n disqualifiedHeading?: string;\n /** Layout variant */\n variant?: 'columns' | 'stacked';\n}\n\nexport const ICPFilter = React.forwardRef<HTMLDivElement, ICPFilterProps>(\n (\n {\n qualifiedItems,\n disqualifiedItems,\n qualifiedHeading = 'This Is For You If',\n disqualifiedHeading = 'This Is Not For You If',\n variant = 'columns',\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-icp-filter',\n `ds-icp-filter--${variant}`,\n className,\n )}\n {...props}\n >\n {/* Qualified column */}\n <div className=\"ds-icp-filter__column ds-icp-filter__column--qualified\">\n <h4 className=\"ds-icp-filter__heading ds-icp-filter__heading--qualified\">\n {qualifiedHeading}\n </h4>\n <ul className=\"ds-icp-filter__list\">\n {qualifiedItems.map((item, idx) => (\n <li key={idx} className=\"ds-icp-filter__item ds-icp-filter__item--qualified\">\n <span className=\"ds-icp-filter__icon\" aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </span>\n <span className=\"ds-icp-filter__text\">{item.text}</span>\n </li>\n ))}\n </ul>\n </div>\n\n {/* Disqualified column */}\n <div className=\"ds-icp-filter__column ds-icp-filter__column--disqualified\">\n <h4 className=\"ds-icp-filter__heading ds-icp-filter__heading--disqualified\">\n {disqualifiedHeading}\n </h4>\n <ul className=\"ds-icp-filter__list\">\n {disqualifiedItems.map((item, idx) => (\n <li key={idx} className=\"ds-icp-filter__item ds-icp-filter__item--disqualified\">\n <span className=\"ds-icp-filter__icon\" aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </span>\n <span className=\"ds-icp-filter__text\">{item.text}</span>\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n },\n);\n\nICPFilter.displayName = 'ICPFilter';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './ObjectionFAQ.css';\n\n/* ============================================================================\n OBJECTION FAQ — Strategic objection-handling FAQ module\n ============================================================================ */\n\nexport interface ObjectionItem {\n /** The objection/question (e.g. \"Is this just LinkedIn automation?\") */\n question: string;\n /** The strategic answer/reframe */\n answer: string;\n /** Optional tag/category (e.g. \"Safety\", \"Quality\", \"Process\") */\n tag?: string;\n}\n\nexport interface ObjectionFAQProps extends React.HTMLAttributes<HTMLDivElement> {\n /** List of objection items */\n items: ObjectionItem[];\n /** Section title */\n title?: string;\n /** Section subtitle */\n subtitle?: string;\n /** Whether multiple items can be open simultaneously */\n allowMultiple?: boolean;\n /** Initial open item index */\n defaultOpenIndex?: number;\n}\n\nexport const ObjectionFAQ = React.forwardRef<HTMLDivElement, ObjectionFAQProps>(\n (\n {\n items,\n title,\n subtitle,\n allowMultiple = false,\n defaultOpenIndex,\n className,\n ...props\n },\n ref,\n ) => {\n const [openItems, setOpenItems] = React.useState<Set<number>>(() => {\n const initial = new Set<number>();\n if (defaultOpenIndex !== undefined) initial.add(defaultOpenIndex);\n return initial;\n });\n\n const toggle = React.useCallback(\n (index: number) => {\n setOpenItems((prev) => {\n const next = new Set(prev);\n if (next.has(index)) {\n next.delete(index);\n } else {\n if (!allowMultiple) next.clear();\n next.add(index);\n }\n return next;\n });\n },\n [allowMultiple],\n );\n\n return (\n <div ref={ref} className={clsx('ds-objection-faq', className)} {...props}>\n {/* Header */}\n {(title || subtitle) && (\n <div className=\"ds-objection-faq__header\">\n {title && <h3 className=\"ds-objection-faq__title\">{title}</h3>}\n {subtitle && <p className=\"ds-objection-faq__subtitle\">{subtitle}</p>}\n </div>\n )}\n\n {/* Items */}\n <div className=\"ds-objection-faq__list\" role=\"list\">\n {items.map((item, idx) => {\n const isOpen = openItems.has(idx);\n return (\n <div\n key={idx}\n className={clsx(\n 'ds-objection-faq__item',\n isOpen && 'ds-objection-faq__item--open',\n )}\n data-state={isOpen ? 'open' : 'closed'}\n role=\"listitem\"\n >\n <button\n type=\"button\"\n className=\"ds-objection-faq__trigger\"\n onClick={() => toggle(idx)}\n aria-expanded={isOpen}\n >\n <div className=\"ds-objection-faq__trigger-content\">\n {item.tag && (\n <span className=\"ds-objection-faq__tag\">{item.tag}</span>\n )}\n <span className=\"ds-objection-faq__question\">{item.question}</span>\n </div>\n <svg\n className=\"ds-objection-faq__chevron\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n <div\n className=\"ds-objection-faq__answer-wrapper\"\n hidden={!isOpen}\n >\n <p className=\"ds-objection-faq__answer\">{item.answer}</p>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n },\n);\n\nObjectionFAQ.displayName = 'ObjectionFAQ';\n","import React, { forwardRef, useState, useEffect, useRef } from 'react';\nimport clsx from 'clsx';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './IntentCTA.css';\n\n/* ============================================================================\n INTENT CTA\n ============================================================================\n Commitment-level adaptive CTA that escalates based on demonstrated intent\n (scroll depth, time on page, pages visited). As visitor engagement\n increases, CTA copy and urgency increase.\n\n Strategic objective: Pipeline Quality (progressive commitment ladder)\n ============================================================================ */\n\n/** What triggers a stage change */\nexport type IntentTriggerType = 'scroll' | 'time' | 'pages';\n\n/** A single CTA stage */\nexport interface IntentStage {\n /** What triggers this stage */\n trigger: { type: IntentTriggerType; threshold: number };\n /** CTA label */\n label: string;\n /** CTA link */\n href: string;\n /** Button variant (escalates with intent) */\n variant?: 'outline' | 'primary';\n}\n\nexport interface IntentCTAProps extends React.HTMLAttributes<HTMLDivElement> {\n /** CTA stages ordered by escalation */\n stages: IntentStage[];\n /** Default CTA (shown before any stage triggers) */\n defaultCta: { label: string; href: string; variant?: 'outline' | 'primary' };\n /** External page count for 'pages' trigger type (tracked by consuming app) */\n pageCount?: number;\n}\n\n/**\n * Adaptive CTA that escalates with demonstrated visitor intent.\n *\n * @example\n * ```tsx\n * <IntentCTA\n * defaultCta={{ label: 'Learn More', href: '/about', variant: 'outline' }}\n * stages={[\n * { trigger: { type: 'scroll', threshold: 50 }, label: 'See Pricing', href: '/pricing', variant: 'outline' },\n * { trigger: { type: 'time', threshold: 30 }, label: 'Book a Demo', href: '/demo', variant: 'primary' },\n * { trigger: { type: 'scroll', threshold: 80 }, label: 'Start Free Trial', href: '/signup', variant: 'primary' },\n * ]}\n * />\n * ```\n */\nexport const IntentCTA = forwardRef<HTMLDivElement, IntentCTAProps>(\n (\n {\n stages,\n defaultCta,\n pageCount = 0,\n className,\n ...props\n },\n ref,\n ) => {\n const [activeStageIndex, setActiveStageIndex] = useState(-1);\n const timeRef = useRef(0);\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const pageCountRef = useRef(pageCount);\n\n // Keep pageCount ref in sync\n useEffect(() => {\n pageCountRef.current = pageCount;\n }, [pageCount]);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n // Track time on page\n timerRef.current = setInterval(() => {\n timeRef.current += 1;\n checkStages();\n }, 1000);\n\n // Track scroll depth\n const handleScroll = () => {\n checkStages();\n };\n window.addEventListener('scroll', handleScroll, { passive: true });\n\n function checkStages() {\n const scrollPercent = typeof document !== 'undefined'\n ? Math.round(\n (window.scrollY / (document.documentElement.scrollHeight - window.innerHeight)) * 100,\n )\n : 0;\n\n let highestTriggered = -1;\n\n for (let i = 0; i < stages.length; i++) {\n const stage = stages[i];\n let triggered = false;\n\n switch (stage.trigger.type) {\n case 'scroll':\n triggered = scrollPercent >= stage.trigger.threshold;\n break;\n case 'time':\n triggered = timeRef.current >= stage.trigger.threshold;\n break;\n case 'pages':\n triggered = pageCountRef.current >= stage.trigger.threshold;\n break;\n }\n\n if (triggered) highestTriggered = i;\n }\n\n setActiveStageIndex((prev) => Math.max(prev, highestTriggered));\n }\n\n // Run initial check (pageCount may already exceed threshold)\n checkStages();\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n if (timerRef.current) clearInterval(timerRef.current);\n };\n }, [stages]);\n\n const activeCta = activeStageIndex >= 0 ? stages[activeStageIndex] : defaultCta;\n\n return (\n <div\n ref={ref}\n className={clsx('ds-intent-cta', className)}\n {...props}\n >\n <Button\n variant={activeCta.variant ?? 'primary'}\n asChild\n >\n <OutboundLink href={activeCta.href} context=\"intent-cta\" openInNewTab={false}>{activeCta.label}</OutboundLink>\n </Button>\n </div>\n );\n },\n);\n\nIntentCTA.displayName = 'IntentCTA';\n","import React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport clsx from 'clsx';\nimport './Button.css';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual style variant of the button */\n variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'link' | 'destructive';\n /** Size of the button */\n size?: 'sm' | 'md' | 'lg' | 'icon';\n /** Shows a loading spinner and disables the button */\n isLoading?: boolean;\n /**\n * When true, the button renders its child as the root element via Radix Slot.\n * Use this to compose with routing Link components or anchors.\n *\n * @example\n * <Button asChild>\n * <a href=\"/about\">About</a>\n * </Button>\n */\n asChild?: boolean;\n}\n\n/**\n * Primary UI action component with multiple visual variants and polymorphic rendering.\n *\n * Supports `asChild` for rendering as any element (Link, anchor, etc.)\n * while preserving button styling.\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'primary', size = 'md', asChild = false, isLoading = false, children, disabled, ...props }, ref) => {\n const buttonClass = clsx(\n 'ds-button',\n `ds-button--${variant}`,\n size === 'icon' ? 'ds-button--icon ds-button--md' : `ds-button--${size}`,\n isLoading && 'ds-button--loading',\n className,\n );\n\n // When asChild, Slot must receive exactly one child element.\n // Loading state is handled via the ds-button--loading CSS class.\n if (asChild) {\n return (\n <Slot\n ref={ref}\n aria-disabled={isLoading || disabled || undefined}\n className={buttonClass}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n disabled={isLoading || disabled}\n className={buttonClass}\n {...props}\n >\n {isLoading && (\n <svg\n className=\"ds-button__spinner\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n )}\n <span className={clsx(\"ds-button__content\", isLoading && \"ds-button__content--hidden\")}>\n {children}\n </span>\n </button>\n );\n },\n);\n\nButton.displayName = 'Button';\n","import React, { AnchorHTMLAttributes, forwardRef, MouseEvent, useState, useEffect } from 'react';\nimport type { UtmParams } from '../../web/utm/types';\nimport { useUtmDefaults } from '../../web/utm/useUtmDefaults';\nimport { isExemptUrl, appendUTMs, appendGovernedUTMs } from './outbound-link-utils';\n\nexport interface OutboundLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n href: string;\n context: string;\n campaignOverride?: string;\n mediumOverride?: string;\n preserveExistingUTM?: boolean;\n openInNewTab?: boolean;\n disableTracking?: boolean;\n /**\n * Governed UTM parameters. When provided, the link uses the UTM governance\n * system (buildUtmUrl) instead of the legacy appendUTMs approach.\n *\n * Preferred for all new code. Existing usages without utmParams continue\n * to work via the legacy path.\n */\n utmParams?: UtmParams;\n children: React.ReactNode;\n}\n\nexport interface OutboundClickEventDetail {\n destination_domain: string;\n destination_url: string;\n utm_medium_type: string;\n page_slug: string;\n component_location: string;\n timestamp: string;\n is_cross_subdomain: boolean;\n}\n\nexport const OutboundLink = forwardRef<HTMLAnchorElement, OutboundLinkProps>(\n (\n {\n href,\n context,\n campaignOverride,\n mediumOverride = 'outbound_link',\n preserveExistingUTM = true,\n openInNewTab = true,\n disableTracking = false,\n utmParams,\n onClick,\n children,\n ...props\n },\n ref\n ) => {\n // ── Resolve UTM params: explicit prop > context > legacy fallback ──\n const contextParams = useUtmDefaults();\n const resolvedUtmParams = utmParams ?? contextParams;\n\n // Parse hostname for analytics events (safe on both server/client)\n let hostname = '';\n try {\n const url = new URL(href);\n hostname = url.hostname;\n } catch {\n // Relative URL or invalid — hostname stays empty\n }\n\n // SSR and initial client render use the plain href to avoid hydration\n // mismatches. UTM params are decorated after hydration via useEffect.\n const [finalHref, setFinalHref] = useState(href);\n\n useEffect(() => {\n let isExternal = false;\n let currentMedium = mediumOverride;\n\n try {\n const url = new URL(href);\n const currentHost = window.location.hostname;\n isExternal = url.hostname !== currentHost;\n\n if (isExternal && currentHost.includes('sales-mind.ai') && url.hostname.includes('sales-mind.ai')) {\n if (currentMedium === 'outbound_link') {\n currentMedium = 'cross_subdomain';\n }\n }\n } catch {\n isExternal = false;\n }\n\n const isExempt = isExemptUrl(href) || disableTracking;\n\n if (isExternal && !isExempt) {\n if (resolvedUtmParams) {\n // Governed path: use buildUtmUrl via appendGovernedUTMs\n setFinalHref(appendGovernedUTMs(href, resolvedUtmParams, preserveExistingUTM));\n } else {\n // Legacy path: use appendUTMs with non-governed defaults\n const pageSlug = window.location.pathname.replace(/^\\/|\\/$/g, '') || 'home';\n setFinalHref(appendUTMs(href, context, pageSlug, {\n mediumOverride: currentMedium,\n campaignOverride,\n preserveExisting: preserveExistingUTM,\n }));\n }\n } else {\n setFinalHref(href);\n }\n }, [href, context, mediumOverride, campaignOverride, preserveExistingUTM, disableTracking, resolvedUtmParams]);\n\n const handleClick = (e: MouseEvent<HTMLAnchorElement>) => {\n if (typeof window === 'undefined' || disableTracking) {\n onClick?.(e);\n return;\n }\n\n let clickExternal = false;\n let clickCrossSubdomain = false;\n let clickMedium = mediumOverride;\n\n try {\n const url = new URL(href);\n const currentHost = window.location.hostname;\n clickExternal = url.hostname !== currentHost;\n\n if (clickExternal && currentHost.includes('sales-mind.ai') && url.hostname.includes('sales-mind.ai')) {\n clickCrossSubdomain = true;\n if (clickMedium === 'outbound_link') {\n clickMedium = 'cross_subdomain';\n }\n }\n } catch { /* relative URL */ }\n\n if (clickExternal) {\n const detail: OutboundClickEventDetail = {\n destination_domain: hostname,\n destination_url: finalHref,\n utm_medium_type: clickMedium,\n page_slug: window.location.pathname,\n component_location: context,\n timestamp: new Date().toISOString(),\n is_cross_subdomain: clickCrossSubdomain,\n };\n\n const event = new CustomEvent('outbound_click', { detail });\n window.dispatchEvent(event);\n }\n\n onClick?.(e);\n };\n\n // Determine SEO attributes\n const relParts = [];\n \n // Check if it's cross-subdomain for target logic (usually open internal links in same tab, external in new)\n let shouldOpenNewTab = openInNewTab;\n try {\n const url = new URL(href);\n if (typeof window !== 'undefined') {\n const currentHost = window.location.hostname;\n if (url.hostname !== currentHost && currentHost.includes('sales-mind.ai') && url.hostname.includes('sales-mind.ai')) {\n shouldOpenNewTab = false; // By default, prefer same tab for cross-subdomain ecosystem links\n }\n }\n } catch { /* empty */ }\n\n if (shouldOpenNewTab) relParts.push('noopener', 'noreferrer');\n if (mediumOverride === 'citation') relParts.push('nofollow');\n const rel = relParts.length > 0 ? relParts.join(' ') : undefined;\n\n return (\n // eslint-disable-next-line no-restricted-syntax\n <a\n ref={ref}\n href={finalHref}\n target={shouldOpenNewTab ? '_blank' : undefined}\n rel={rel}\n onClick={handleClick}\n {...props}\n >\n {children}\n </a>\n );\n }\n);\n\nOutboundLink.displayName = 'OutboundLink';\n","import { useContext } from 'react';\nimport { UtmContext } from './utm-context';\nimport type { UtmParams } from './types';\n\n/**\n * Read the nearest UtmProvider's default params.\n * Returns `null` when no provider is present (callers should fall back gracefully).\n */\nexport function useUtmDefaults(): UtmParams | null {\n return useContext(UtmContext);\n}\n","import { createContext } from 'react';\nimport type { UtmParams } from './types';\n\n/** Internal React context instance. Import via UtmProvider / useUtmDefaults — do not use directly. */\nexport const UtmContext = createContext<UtmParams | null>(null);\n","/* ============================================================================\n UTM URL Builders\n ============================================================================ */\n\nimport type { UtmParams } from './types';\n\n/** Placeholder origin used internally to parse relative URLs. Never appears in output. */\nconst PLACEHOLDER_ORIGIN = 'https://__placeholder__.internal';\n\n/**\n * Build a URL with UTM parameters appended.\n *\n * - Supports both absolute and relative URLs.\n * - Preserves existing query parameters and hash fragments.\n * - Always emits params in canonical order: source → medium → campaign → term → content.\n * - Omits optional params (term, content) when undefined.\n *\n * @example\n * buildUtmUrl('https://app.sales-mind.ai/register', { source: 'linkedin', medium: 'dm', campaign: 'discoveryCall' })\n * // → 'https://app.sales-mind.ai/register?utm_source=linkedin&utm_medium=dm&utm_campaign=discoveryCall'\n *\n * buildUtmUrl('/pricing', { source: 'website', medium: 'webHome', campaign: 'trial' })\n * // → '/pricing?utm_source=website&utm_medium=webHome&utm_campaign=trial'\n */\nexport function buildUtmUrl(baseUrl: string, params: UtmParams): string {\n const isRelative = baseUrl.startsWith('/');\n\n let url: URL;\n try {\n url = isRelative ? new URL(baseUrl, PLACEHOLDER_ORIGIN) : new URL(baseUrl);\n } catch {\n // If URL parsing fails entirely, return the base URL unchanged.\n return baseUrl;\n }\n\n // Preserve existing params by collecting them first, then clearing and re-adding in order.\n const existingParams: [string, string][] = [];\n url.searchParams.forEach((value, key) => {\n existingParams.push([key, value]);\n });\n\n // Clear all params to rebuild in canonical order.\n for (const [key] of existingParams) {\n url.searchParams.delete(key);\n }\n\n // Re-add existing non-UTM params first.\n for (const [key, value] of existingParams) {\n if (!key.startsWith('utm_')) {\n url.searchParams.set(key, value);\n }\n }\n\n // Append UTM params in canonical order.\n url.searchParams.set('utm_source', params.source);\n url.searchParams.set('utm_medium', params.medium);\n url.searchParams.set('utm_campaign', params.campaign);\n if (params.term !== undefined) {\n url.searchParams.set('utm_term', params.term);\n }\n if (params.content !== undefined) {\n url.searchParams.set('utm_content', params.content);\n }\n\n if (isRelative) {\n // Strip placeholder origin to return a relative path.\n return url.href.replace(PLACEHOLDER_ORIGIN, '');\n }\n\n return url.href;\n}\n","/* ============================================================================\n URL Classification & UTM Enforcement Logic\n ============================================================================\n Determines whether a URL requires UTM parameters based on its type.\n No imports from validators — avoids circular dependency.\n ============================================================================ */\n\nimport type { UrlClassification } from './types';\n\n// ── Patterns ─────────────────────────────────────────────────────────────────\n\n/** Internal domains — UTMs not required for same-origin navigation. */\nconst INTERNAL_PATTERNS = [\n /^\\/(?!\\/)/, // Relative paths\n /^https?:\\/\\/(www\\.)?sales-mind\\.ai/i, // Marketing site\n /^https?:\\/\\/app\\.sales-mind\\.ai/i, // Web app\n /^https?:\\/\\/apps\\.sales-mind\\.ai/i, // Web app (legacy)\n /^https?:\\/\\/meet\\.sales-mind\\.ai/i, // Booking\n /^https?:\\/\\/docs\\.sales-mind\\.ai/i, // Docs\n];\n\n/** System endpoints — never receive UTMs. */\nconst SYSTEM_PATTERNS = [\n /^https?:\\/\\/.*\\/api\\//i, // API endpoints\n /^https?:\\/\\/.*\\/webhook/i, // Webhooks\n /^https?:\\/\\/.*\\/oauth/i, // OAuth callbacks\n /^https?:\\/\\/.*\\/callback/i, // Callbacks\n /^https?:\\/\\/.*\\.supabase\\.(co|com)/i, // Supabase\n /^https?:\\/\\/.*\\.firebaseapp\\.com/i, // Firebase\n /^https?:\\/\\/.*\\.cloudfunctions\\.net/i, // Cloud Functions\n];\n\n/** Static assets — never receive UTMs. */\nconst ASSET_PATTERNS = [\n /\\.(css|js|mjs|map|woff2?|ttf|eot|svg|png|jpe?g|gif|webp|avif|ico|pdf)(\\?.*)?$/i,\n];\n\n/** Conversion destinations — always require UTMs. */\nconst CONVERSION_PATTERNS = [\n /^https?:\\/\\/(www\\.)?calendly\\.com/i,\n /^https?:\\/\\/(checkout\\.)?stripe\\.com/i,\n /^https?:\\/\\/buy\\.stripe\\.com/i,\n /^https?:\\/\\/chromewebstore\\.google\\.com/i,\n /^https?:\\/\\/meet\\.sales-mind\\.ai/i,\n];\n\n/** Protocol-level links — never receive UTMs. */\nconst PROTOCOL_EXEMPT = [\n /^mailto:/i,\n /^tel:/i,\n /^#/,\n /^javascript:/i,\n];\n\n// ── Classification ───────────────────────────────────────────────────────────\n\n/**\n * Classify a URL to determine its type.\n *\n * Classification order (first match wins):\n * 1. Protocol links (mailto, tel, anchor)\n * 2. Static assets\n * 3. System endpoints (API, webhooks, OAuth)\n * 4. Conversion destinations (Calendly, Stripe, Chrome Store)\n * 5. Internal (*.sales-mind.ai)\n * 6. External (everything else)\n */\nexport function classifyUrl(url: string): UrlClassification {\n // Protocol links\n if (PROTOCOL_EXEMPT.some(p => p.test(url))) return 'protocol';\n\n // Static assets\n if (ASSET_PATTERNS.some(p => p.test(url))) return 'asset';\n\n // System endpoints\n if (SYSTEM_PATTERNS.some(p => p.test(url))) return 'system';\n\n // Conversion destinations\n if (CONVERSION_PATTERNS.some(p => p.test(url))) return 'conversion';\n\n // Internal\n if (INTERNAL_PATTERNS.some(p => p.test(url))) return 'internal';\n\n // Everything else is external\n return 'external';\n}\n\n/**\n * Determine whether a URL requires UTM parameters.\n *\n * UTMs are mandatory for:\n * - External third-party destinations\n * - Conversion destinations (Calendly, Stripe, Chrome Web Store)\n *\n * UTMs are NOT required for:\n * - Internal navigation\n * - System endpoints\n * - Static assets\n * - Protocol links\n */\nexport function requiresUtm(url: string): boolean {\n const classification = classifyUrl(url);\n return classification === 'external' || classification === 'conversion';\n}\n\n/**\n * Check if a URL is explicitly exempt from UTM requirements.\n */\nexport function isUtmExempt(url: string): boolean {\n const classification = classifyUrl(url);\n return classification === 'protocol'\n || classification === 'asset'\n || classification === 'system'\n || classification === 'internal';\n}\n","import type { UtmParams } from '../../web/utm/types';\nimport { buildUtmUrl } from '../../web/utm/builders';\nimport { classifyUrl } from '../../web/utm/classifiers';\n\n/**\n * @deprecated Use governed `utmParams` prop on OutboundLink instead.\n * Legacy default source — superseded by governed UTM_SOURCES enum.\n */\nconst LEGACY_UTM_SOURCE = 'salesmind';\n\nconst EXEMPT_PATTERNS = [\n /^https?:\\/\\/(www\\.)?(stripe\\.com|checkout\\.stripe\\.com|paypal\\.com)/i,\n /^https?:\\/\\/(www\\.)?github\\.com\\/login\\/oauth/i,\n];\n\n/**\n * Check if a URL is exempt from UTM tagging.\n * Uses both legacy patterns and governed URL classification.\n */\nexport const isExemptUrl = (urlStr: string): boolean => {\n if (urlStr.startsWith('mailto:') || urlStr.startsWith('tel:')) return true;\n\n // Governed classification: system/protocol/asset URLs are exempt\n const classification = classifyUrl(urlStr);\n if (classification === 'system' || classification === 'protocol' || classification === 'asset') {\n return true;\n }\n\n return EXEMPT_PATTERNS.some(pattern => pattern.test(urlStr));\n};\n\n/**\n * Append governed UTM parameters to a URL using `buildUtmUrl`.\n * Preferred over the legacy `appendUTMs` function.\n */\nexport const appendGovernedUTMs = (\n href: string,\n params: UtmParams,\n preserveExisting = true,\n): string => {\n try {\n const url = new URL(href);\n\n // If preserveExisting and all UTM params are already set, return unchanged\n if (preserveExisting) {\n const hasAll = url.searchParams.has('utm_source')\n && url.searchParams.has('utm_medium')\n && url.searchParams.has('utm_campaign');\n if (hasAll) return href;\n }\n\n return buildUtmUrl(href, params);\n } catch {\n return href;\n }\n};\n\n/**\n * @deprecated Prefer `appendGovernedUTMs` with governed `UtmParams`.\n *\n * Legacy UTM append function. Uses non-governed defaults:\n * - utm_source = 'salesmind' (not in governed enum)\n * - utm_medium = 'outbound_link' (snake_case, not in governed enum)\n *\n * Retained for backward compatibility. Consumers should migrate to\n * the `utmParams` prop on OutboundLink.\n */\nexport const appendUTMs = (\n href: string,\n context: string,\n pageSlug: string,\n options: {\n mediumOverride?: string;\n campaignOverride?: string;\n preserveExisting?: boolean;\n }\n): string => {\n try {\n const url = new URL(href);\n const { mediumOverride = 'outbound_link', campaignOverride, preserveExisting = true } = options;\n\n const utms = {\n utm_source: LEGACY_UTM_SOURCE,\n utm_medium: mediumOverride,\n utm_campaign: campaignOverride || pageSlug,\n utm_content: context,\n };\n\n Object.entries(utms).forEach(([key, value]) => {\n if (value) {\n if (preserveExisting && url.searchParams.has(key)) {\n // Do not override if preserve is true\n return;\n }\n url.searchParams.set(key, value);\n }\n });\n\n return url.toString();\n } catch {\n return href; // Return original if not valid URL (e.g. relative)\n }\n};\n","import React, { forwardRef, useState, useEffect } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport './StickyActionBar.css';\n\nexport interface StickyActionBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The main message or value prop to display */\n message: React.ReactNode;\n /** Primary call to action button */\n primaryAction: React.ReactNode;\n /** Optional secondary action */\n secondaryAction?: React.ReactNode;\n /** Threshold in pixels before showing the bar (default: 300) */\n showThreshold?: number;\n /** Position variant */\n position?: 'top' | 'bottom';\n /** Visual theme */\n variant?: 'glass' | 'solid' | 'brand';\n}\n\n/**\n * A floating action bar that appears after scrolling past a threshold,\n * keeping primary CTAs accessible on long pages.\n */\nexport const StickyActionBar = forwardRef<HTMLDivElement, StickyActionBarProps>(\n (\n {\n message,\n primaryAction,\n secondaryAction,\n showThreshold = 300,\n position = 'bottom',\n variant = 'glass',\n className,\n ...props\n },\n ref\n ) => {\n const [isVisible, setIsVisible] = useState(false);\n const { track } = useAnalytics();\n\n useEffect(() => {\n const handleScroll = () => {\n const shouldShow = window.scrollY > showThreshold;\n if (shouldShow && !isVisible) {\n setIsVisible(true);\n track('sticky_bar_show');\n } else if (!shouldShow && isVisible) {\n setIsVisible(false);\n }\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n // Initial check\n handleScroll();\n\n return () => window.removeEventListener('scroll', handleScroll);\n }, [showThreshold, isVisible, track]);\n\n if (!isVisible) return null;\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-sticky-action-bar',\n `ds-sticky-action-bar--${position}`,\n `ds-sticky-action-bar--${variant}`,\n className\n )}\n {...props}\n >\n <div className=\"ds-sticky-action-bar__container\">\n <div className=\"ds-sticky-action-bar__content\">\n {message}\n </div>\n <div className=\"ds-sticky-action-bar__actions\">\n {secondaryAction}\n {primaryAction}\n </div>\n </div>\n </div>\n );\n }\n);\n\nStickyActionBar.displayName = 'StickyActionBar';\n","\"use client\";\nimport { useContext } from 'react';\nimport { AnalyticsContext } from './analytics-context';\nimport type { AnalyticsContextValue } from './analytics-context';\n\nconst NOOP_VALUE: AnalyticsContextValue = {\n track: () => {\n /* no-op when no provider is present */\n },\n};\n\n/**\n * Access the analytics tracking interface.\n * Returns a no-op tracker when used outside an AnalyticsProvider —\n * components never need to guard against missing providers.\n *\n * @example\n * ```tsx\n * const { track } = useAnalytics();\n * track('form_submit', { form: 'lead-capture', email: true });\n * ```\n */\nexport function useAnalytics(): AnalyticsContextValue {\n return useContext(AnalyticsContext) ?? NOOP_VALUE;\n}\n","import { createContext } from 'react';\n\n/* ============================================================================\n ANALYTICS CONTEXT — Shared types & context object\n ============================================================================ */\n\n/** Arbitrary properties bag attached to every analytics event. */\nexport type AnalyticsEventProps = Record<string, string | number | boolean | undefined>;\n\n/** Signature for the track function provided by AnalyticsProvider. */\nexport type TrackFn = (event: string, props?: AnalyticsEventProps) => void;\n\n/** Value exposed by the AnalyticsContext. */\nexport interface AnalyticsContextValue {\n track: TrackFn;\n}\n\n/**\n * React context for analytics event tracking.\n * When no provider is present the value is `null` — consumers should\n * fall back to a no-op so components remain safe in Storybook / tests / SSR.\n */\nexport const AnalyticsContext = createContext<AnalyticsContextValue | null>(null);\n","import React, { forwardRef, useState, useEffect, useCallback, useRef } from 'react';\nimport clsx from 'clsx';\nimport { Dialog, DialogContent } from '../Dialog/Dialog';\nimport './ExitIntentOverlay.css';\n\n/* ============================================================================\n EXIT INTENT OVERLAY\n ============================================================================\n Overlay triggered when cursor moves toward browser close/back button\n (desktop) or after inactivity timeout (mobile). Last chance to capture\n abandoning visitors.\n\n Strategic objective: Distribution (recovers 5-15% of abandoning visitors)\n ============================================================================ */\n\n/** Default suppression: 7 days */\nconst DEFAULT_SUPPRESSION = 7 * 24 * 60 * 60 * 1000;\n/** Default activation delay: 5 seconds */\nconst DEFAULT_ACTIVATION_DELAY = 5000;\n/** Default mobile inactivity timeout: 45 seconds */\nconst MOBILE_INACTIVITY_TIMEOUT = 45_000;\n\nexport interface ExitIntentOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Content to display in overlay */\n children: React.ReactNode;\n /** Whether exit intent detection is active (default: true) */\n enabled?: boolean;\n /** Delay before activation in ms (prevents trigger on initial load) */\n activationDelay?: number;\n /** Pages where overlay should NOT show */\n excludePaths?: string[];\n /** Storage key for suppression after dismiss/convert */\n storageKey?: string;\n /** Suppression duration after dismiss in ms (default: 7 days) */\n suppressionDuration?: number;\n /** Callback on show */\n onShow?: () => void;\n /** Callback on dismiss */\n onDismiss?: () => void;\n}\n\nfunction isSuppressed(key: string, duration: number): boolean {\n if (typeof window === 'undefined') return true;\n try {\n const ts = localStorage.getItem(key);\n if (!ts) return false;\n return Date.now() - Number(ts) < duration;\n } catch {\n return false;\n }\n}\n\nfunction suppress(key: string): void {\n try {\n localStorage.setItem(key, String(Date.now()));\n } catch {\n // Storage unavailable\n }\n}\n\nfunction isMobile(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(max-width: 768px)').matches || 'ontouchstart' in window;\n}\n\n/**\n * Exit-intent triggered overlay.\n *\n * @example\n * ```tsx\n * <ExitIntentOverlay storageKey=\"exit-homepage\">\n * <LeadCaptureForm\n * variant=\"card\"\n * title=\"Before you go...\"\n * description=\"Get our AI prospecting playbook — free.\"\n * submitLabel=\"Send Me the Playbook\"\n * onSubmit={handleSubmit}\n * />\n * </ExitIntentOverlay>\n * ```\n */\nexport const ExitIntentOverlay = forwardRef<HTMLDivElement, ExitIntentOverlayProps>(\n (\n {\n children,\n enabled = true,\n activationDelay = DEFAULT_ACTIVATION_DELAY,\n excludePaths,\n storageKey = 'ds-exit-intent',\n suppressionDuration = DEFAULT_SUPPRESSION,\n onShow,\n onDismiss,\n className,\n ...props\n },\n ref,\n ) => {\n const [open, setOpen] = useState(false);\n const activatedRef = useRef(false);\n const shownRef = useRef(false);\n\n const show = useCallback(() => {\n if (shownRef.current) return;\n shownRef.current = true;\n setOpen(true);\n onShow?.();\n }, [onShow]);\n\n const handleDismiss = useCallback(() => {\n setOpen(false);\n suppress(storageKey);\n onDismiss?.();\n }, [storageKey, onDismiss]);\n\n useEffect(() => {\n if (!enabled) return;\n if (typeof window === 'undefined') return;\n\n // Check path exclusions\n if (excludePaths?.some((p) => window.location.pathname.startsWith(p))) return;\n\n // Check suppression\n if (isSuppressed(storageKey, suppressionDuration)) return;\n\n // Activation delay\n const activationTimer = setTimeout(() => {\n activatedRef.current = true;\n }, activationDelay);\n\n // Desktop: mouseout near top of viewport\n const handleMouseOut = (e: MouseEvent) => {\n if (!activatedRef.current) return;\n if (e.clientY < 10 && e.relatedTarget === null) {\n show();\n }\n };\n\n // Mobile: inactivity timeout\n let mobileTimer: ReturnType<typeof setTimeout> | null = null;\n const resetMobileTimer = () => {\n if (mobileTimer) clearTimeout(mobileTimer);\n if (!activatedRef.current) return;\n mobileTimer = setTimeout(show, MOBILE_INACTIVITY_TIMEOUT);\n };\n\n if (isMobile()) {\n // Start inactivity detection after activation delay\n const mobileStart = setTimeout(() => {\n resetMobileTimer();\n document.addEventListener('touchstart', resetMobileTimer, { passive: true });\n document.addEventListener('scroll', resetMobileTimer, { passive: true });\n }, activationDelay);\n\n return () => {\n clearTimeout(activationTimer);\n clearTimeout(mobileStart);\n if (mobileTimer) clearTimeout(mobileTimer);\n document.removeEventListener('touchstart', resetMobileTimer);\n document.removeEventListener('scroll', resetMobileTimer);\n };\n }\n\n document.addEventListener('mouseout', handleMouseOut);\n\n return () => {\n clearTimeout(activationTimer);\n document.removeEventListener('mouseout', handleMouseOut);\n };\n }, [enabled, activationDelay, excludePaths, storageKey, suppressionDuration, show]);\n\n return (\n <div ref={ref} className={clsx('ds-exit-intent-overlay', className)} {...props}>\n <Dialog open={open} onOpenChange={(isOpen) => { if (!isOpen) handleDismiss(); }}>\n <DialogContent className=\"ds-exit-intent-overlay__dialog\">\n {children}\n </DialogContent>\n </Dialog>\n </div>\n );\n },\n);\n\nExitIntentOverlay.displayName = 'ExitIntentOverlay';\n","import React from 'react';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\nimport clsx from 'clsx';\nimport './Dialog.css';\n\nexport const Dialog = BaseDialog.Root;\nexport const DialogTrigger = BaseDialog.Trigger;\nexport const DialogClose = BaseDialog.Close;\nexport const DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <BaseDialog.Title ref={ref} className={clsx('ds-dialog__title', className)} {...props} />\n));\nDialogTitle.displayName = 'DialogTitle';\n\nexport const DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <BaseDialog.Description\n ref={ref}\n className={clsx('ds-dialog__description', className)}\n {...props}\n />\n));\nDialogDescription.displayName = 'DialogDescription';\n\nexport const DialogContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => (\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className=\"ds-dialog__backdrop\" />\n <BaseDialog.Popup ref={ref} className={clsx('ds-dialog__content', className)} {...props}>\n {children}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n ),\n);\nDialogContent.displayName = 'DialogContent';\n\n/**\n * Semantic header section for a dialog, typically containing\n * DialogTitle and DialogDescription.\n */\nexport const DialogHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-dialog__header', className)} {...props} />\n ),\n);\nDialogHeader.displayName = 'DialogHeader';\n\n/**\n * Footer section for dialog actions (confirm, cancel, etc.).\n * Renders children in a right-aligned flex row with standard gap.\n */\nexport const DialogFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={clsx('ds-dialog__footer', className)} {...props} />\n ),\n);\nDialogFooter.displayName = 'DialogFooter';\n","import React, { forwardRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport { TextField } from '../TextField/TextField';\nimport { Button } from '../Button/Button';\nimport './LeadCaptureForm.css';\n\nexport interface LeadCaptureFormProps extends React.FormHTMLAttributes<HTMLFormElement> {\n /** Text on the submit button */\n buttonText?: string;\n /** Label for the email input */\n emailLabel?: string;\n /** Placeholder for the email input */\n emailPlaceholder?: string;\n /** Optional subtext below the form (e.g. \"We respect your privacy\") */\n disclaimer?: React.ReactNode;\n /** Function called when form is successfully submitted */\n onSubmitSuccess?: (email: string) => void | Promise<void>;\n /** Direction variant */\n layout?: 'horizontal' | 'vertical';\n /** Current loading state */\n isLoading?: boolean;\n}\n\n/**\n * A highly optimized email capture form for newsletters, waitlists,\n * and lead magnets.\n */\nexport const LeadCaptureForm = forwardRef<HTMLFormElement, LeadCaptureFormProps>(\n (\n {\n buttonText = 'Subscribe',\n emailLabel = 'Work Email',\n emailPlaceholder = 'you@company.com',\n disclaimer,\n onSubmitSuccess,\n layout = 'horizontal',\n isLoading = false,\n className,\n onSubmit,\n ...props\n },\n ref\n ) => {\n const [email, setEmail] = useState('');\n const [error, setError] = useState<string | undefined>();\n const [internalLoading, setInternalLoading] = useState(false);\n const { track } = useAnalytics();\n\n const isCurrentlyLoading = isLoading || internalLoading;\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n \n if (!email) {\n setError('Email is required');\n return;\n }\n \n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\n setError('Please enter a valid email address');\n return;\n }\n \n setError(undefined);\n setInternalLoading(true);\n \n track('lead_capture_submit', { email_domain: email.split('@')[1] });\n \n try {\n if (onSubmitSuccess) {\n await onSubmitSuccess(email);\n }\n track('lead_capture_success');\n } catch (err) {\n setError('Something went wrong. Please try again.');\n track('lead_capture_error', { error: String(err) });\n } finally {\n setInternalLoading(false);\n }\n \n if (onSubmit) {\n onSubmit(e);\n }\n };\n\n return (\n <form\n ref={ref}\n className={clsx(\n 'ds-lead-capture',\n `ds-lead-capture--${layout}`,\n className\n )}\n onSubmit={handleSubmit}\n noValidate\n {...props}\n >\n <div className=\"ds-lead-capture__inputs\">\n <div className=\"ds-lead-capture__input-wrapper\">\n {layout === 'vertical' && (\n <label htmlFor=\"lead-email\" className=\"ds-lead-capture__label\">\n {emailLabel}\n </label>\n )}\n <TextField\n id=\"lead-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={emailPlaceholder}\n disabled={isCurrentlyLoading}\n aria-label={layout === 'horizontal' ? emailLabel : undefined}\n className={clsx('ds-lead-capture__input', error && 'ds-lead-capture__input--error')}\n />\n {error && <div className=\"ds-lead-capture__error\">{error}</div>}\n </div>\n <Button \n type=\"submit\" \n isLoading={isCurrentlyLoading}\n className=\"ds-lead-capture__submit\"\n >\n {buttonText}\n </Button>\n </div>\n \n {disclaimer && (\n <div className=\"ds-lead-capture__disclaimer\">\n {disclaimer}\n </div>\n )}\n </form>\n );\n }\n);\n\nLeadCaptureForm.displayName = 'LeadCaptureForm';\n","import React from 'react';\nimport { Input as BaseInput } from '@base-ui/react/input';\nimport clsx from 'clsx';\nimport './TextField.css';\n\nexport interface TextFieldProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: boolean;\n helperText?: string;\n endAdornment?: React.ReactNode;\n}\n\nexport const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(\n ({ className, label, error, helperText, endAdornment, id, ...props }, ref) => {\n const generatedId = React.useId();\n const inputId = id || generatedId;\n\n return (\n <div className={clsx('ds-textfield', className)}>\n {label && (\n <label htmlFor={inputId} className=\"ds-textfield__label\">\n {label}\n </label>\n )}\n <div className=\"ds-textfield__input-wrapper\">\n <BaseInput\n id={inputId}\n ref={ref}\n className={clsx(\n 'ds-textfield__input',\n error && 'ds-textfield__input--error',\n endAdornment && 'ds-textfield__input--adorned',\n )}\n {...props}\n />\n {endAdornment && <div className=\"ds-textfield__adornment\">{endAdornment}</div>}\n </div>\n {helperText && (\n <span className={clsx('ds-textfield__helper', error && 'ds-textfield__helper--error')}>\n {helperText}\n </span>\n )}\n </div>\n );\n },\n);\n\nTextField.displayName = 'TextField';\n","import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport './BookingEmbed.css';\n\nexport interface BookingEmbedProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The Go High Level widget URL or other booking URL */\n url: string;\n /** Aspect ratio of the embed container (default: 16/9) */\n aspectRatio?: string;\n /** Title for the iframe accessibility */\n title?: string;\n /** Whether to lazy load the iframe */\n lazyLoad?: boolean;\n}\n\n/**\n * A responsive container for embedding booking widgets (like Go High Level or Calendly).\n * Includes loading states and analytics tracking.\n */\nexport const BookingEmbed = forwardRef<HTMLDivElement, BookingEmbedProps>(\n (\n {\n url,\n aspectRatio = '16/9',\n title = 'Book a call',\n lazyLoad = true,\n className,\n style,\n ...props\n },\n ref\n ) => {\n const [isLoaded, setIsLoaded] = useState(!lazyLoad);\n const [isIframeLoaded, setIsIframeLoaded] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const { track } = useAnalytics();\n\n // Intersection Observer for lazy loading\n useEffect(() => {\n if (!lazyLoad) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n setIsLoaded(true);\n track('booking_embed_visible', { url });\n observer.disconnect();\n }\n },\n { rootMargin: '200px' }\n );\n\n if (containerRef.current) {\n observer.observe(containerRef.current);\n }\n\n return () => observer.disconnect();\n }, [lazyLoad, url, track]);\n\n const handleIframeLoad = () => {\n setIsIframeLoaded(true);\n track('booking_embed_loaded', { url });\n };\n\n return (\n <div\n ref={(node) => {\n // Handle both refs\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={clsx('ds-booking-embed', className)}\n style={{ '--embed-aspect-ratio': aspectRatio, ...style } as React.CSSProperties}\n {...props}\n >\n {!isIframeLoaded && (\n <div className=\"ds-booking-embed__skeleton\">\n <div className=\"ds-booking-embed__spinner\"></div>\n <p>Loading calendar...</p>\n </div>\n )}\n \n {isLoaded && (\n <iframe\n src={url}\n title={title}\n className={clsx('ds-booking-embed__iframe', isIframeLoaded && 'ds-booking-embed__iframe--loaded')}\n onLoad={handleIframeLoad}\n frameBorder=\"0\"\n scrolling=\"no\"\n />\n )}\n </div>\n );\n }\n);\n\nBookingEmbed.displayName = 'BookingEmbed';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './CompetitorDiff.css';\n\n/* ============================================================================\n COMPETITOR DIFF\n ============================================================================\n \"Us vs. Them\" competitive differentiation block. Narrative comparison,\n not a feature table (that's ComparisonTable).\n\n Strategic objective: Differentiation + Narrative Control\n ============================================================================ */\n\n/** A single comparison dimension */\nexport interface CompetitorDiffItem {\n /** The dimension being compared (e.g., \"Approach\") */\n dimension: string;\n /** How the competitor/category handles it */\n them: string;\n /** How we handle it */\n us: string;\n}\n\nexport interface CompetitorDiffProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Comparison items */\n items: CompetitorDiffItem[];\n /** Competitor/category label (e.g., \"Traditional SDR tools\") */\n competitorLabel?: string;\n /** Our label (e.g., \"SalesMind AI\") */\n ourLabel?: string;\n /** Layout variant */\n variant?: 'table' | 'cards' | 'narrative';\n /** Optional CTA */\n cta?: { label: string; href: string };\n}\n\n/**\n * Competitive differentiation block.\n *\n * @example\n * ```tsx\n * <CompetitorDiff\n * eyebrow=\"Why SalesMind\"\n * title=\"Not Another LinkedIn Tool\"\n * items={[\n * { dimension: 'Approach', them: 'Spray-and-pray sequences', us: 'AI-personalized at scale' },\n * { dimension: 'Setup', them: 'Weeks of configuration', us: 'Live in 48 hours' },\n * ]}\n * variant=\"table\"\n * />\n * ```\n */\nexport const CompetitorDiff = forwardRef<HTMLDivElement, CompetitorDiffProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n items,\n competitorLabel = 'Others',\n ourLabel = 'SalesMind AI',\n variant = 'table',\n cta,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-competitor-diff', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n {variant === 'table' && (\n <div className=\"ds-competitor-diff__table\" role=\"table\" aria-label=\"Feature comparison\">\n <div className=\"ds-competitor-diff__thead\" role=\"row\">\n <div className=\"ds-competitor-diff__th\" role=\"columnheader\" />\n <div className=\"ds-competitor-diff__th ds-competitor-diff__th--them\" role=\"columnheader\">\n {competitorLabel}\n </div>\n <div className=\"ds-competitor-diff__th ds-competitor-diff__th--us\" role=\"columnheader\">\n {ourLabel}\n </div>\n </div>\n {items.map((item, i) => (\n <div key={i} className=\"ds-competitor-diff__row\" role=\"row\">\n <div className=\"ds-competitor-diff__dimension\" role=\"rowheader\">{item.dimension}</div>\n <div className=\"ds-competitor-diff__cell ds-competitor-diff__cell--them\" role=\"cell\">\n <span className=\"ds-competitor-diff__icon\" aria-hidden=\"true\">✗</span>\n {item.them}\n </div>\n <div className=\"ds-competitor-diff__cell ds-competitor-diff__cell--us\" role=\"cell\">\n <span className=\"ds-competitor-diff__icon\" aria-hidden=\"true\">✓</span>\n {item.us}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {variant === 'cards' && (\n <div className=\"ds-competitor-diff__cards\">\n <div className=\"ds-competitor-diff__card ds-competitor-diff__card--them\">\n <h3 className=\"ds-competitor-diff__card-label\">{competitorLabel}</h3>\n <ul className=\"ds-competitor-diff__card-list\">\n {items.map((item, i) => (\n <li key={i}>\n <strong>{item.dimension}:</strong> {item.them}\n </li>\n ))}\n </ul>\n </div>\n <div className=\"ds-competitor-diff__card ds-competitor-diff__card--us\">\n <h3 className=\"ds-competitor-diff__card-label\">{ourLabel}</h3>\n <ul className=\"ds-competitor-diff__card-list\">\n {items.map((item, i) => (\n <li key={i}>\n <strong>{item.dimension}:</strong> {item.us}\n </li>\n ))}\n </ul>\n </div>\n </div>\n )}\n\n {variant === 'narrative' && (\n <div className=\"ds-competitor-diff__narrative\">\n {items.map((item, i) => (\n <div key={i} className=\"ds-competitor-diff__narrative-item\">\n <p className=\"ds-competitor-diff__narrative-them\">\n <span className=\"ds-competitor-diff__narrative-label\">Instead of</span> {item.them}\n </p>\n <p className=\"ds-competitor-diff__narrative-us\">\n <span className=\"ds-competitor-diff__narrative-label\">{ourLabel}</span> {item.us}\n </p>\n </div>\n ))}\n </div>\n )}\n\n {cta && (\n <div className=\"ds-competitor-diff__cta\">\n <Button variant=\"primary\" asChild>\n <OutboundLink href={cta.href} context=\"competitor-diff-cta\" openInNewTab={false}>{cta.label}</OutboundLink>\n </Button>\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nCompetitorDiff.displayName = 'CompetitorDiff';\n","import React, { forwardRef, HTMLAttributes } from 'react';\nimport clsx from 'clsx';\nimport { Container } from '../LayoutPrimitives';\nimport './SectionShell.css';\n\n/* ============================================================================\n Section Header Component\n ============================================================================ */\n\nexport interface SectionHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n eyebrow?: React.ReactNode;\n align?: 'left' | 'center' | 'right';\n}\n\nexport const SectionHeader = forwardRef<HTMLDivElement, SectionHeaderProps>(\n ({ title, subtitle, eyebrow, align = 'center', className, ...props }, ref) => {\n if (!title && !subtitle && !eyebrow) return null;\n\n return (\n <header\n ref={ref}\n className={clsx('ds-section-header', `ds-section-header--${align}`, className)}\n {...props}\n >\n {eyebrow && <span className=\"ds-section-header__eyebrow\">{eyebrow}</span>}\n {title && <h2 className=\"ds-section-header__title\">{title}</h2>}\n {subtitle && <p className=\"ds-section-header__subtitle\">{subtitle}</p>}\n </header>\n );\n },\n);\nSectionHeader.displayName = 'SectionHeader';\n\n/* ============================================================================\n Section Shell Component\n ============================================================================ */\n\nexport interface SectionShellProps extends HTMLAttributes<HTMLDivElement> {\n background?: 'default' | 'muted' | 'brand' | 'transparent';\n padding?: 'none' | 'sm' | 'md' | 'lg';\n containerSize?: 'sm' | 'md' | 'lg' | 'xl' | 'fluid'; // Maps to Container max-width\n containerFluid?: boolean;\n}\n\nexport const SectionShell = forwardRef<HTMLDivElement, SectionShellProps>(\n (\n {\n className,\n children,\n background = 'default',\n padding = 'md',\n containerSize,\n containerFluid = false,\n ...props\n },\n ref,\n ) => {\n return (\n <section\n ref={ref}\n className={clsx(\n 'ds-section',\n `ds-section--bg-${background}`,\n `ds-section--padding-${padding}`,\n className,\n )}\n {...props}\n >\n <Container\n size={containerSize === 'fluid' ? 'full' : (containerSize as 'sm' | 'md' | 'lg' | 'xl' | undefined)}\n fluid={containerFluid || containerSize === 'fluid'}\n >\n {children}\n </Container>\n </section>\n );\n },\n);\nSectionShell.displayName = 'SectionShell';\n","import { ElementType, HTMLAttributes, forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SpacingProps, extractSpacingStyles } from './utils';\nimport './LayoutPrimitives.css';\n\nexport interface BoxProps extends HTMLAttributes<HTMLElement>, SpacingProps {\n as?: ElementType;\n}\n\nexport const Box = forwardRef<HTMLElement, BoxProps>(\n ({ as: Component = 'div', className, style, children, ...props }, ref) => {\n const spacingStyles = extractSpacingStyles(props);\n\n // Filter out spacing props from passing to DOM\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { m, mt, mb, ml, mr, mx, my, p, pt, pb, pl, pr, px, py, gap, ...domProps } = props;\n\n return (\n <Component\n ref={ref}\n className={clsx('ds-box', className)}\n style={{ ...spacingStyles, ...style }}\n {...domProps}\n >\n {children}\n </Component>\n );\n },\n);\n\nBox.displayName = 'Box';\n","export const SPACING = {\n 1: 'var(--space-1)',\n 2: 'var(--space-2)',\n 3: 'var(--space-3)',\n 4: 'var(--space-4)',\n 5: 'var(--space-5)',\n 6: 'var(--space-6)',\n 8: 'var(--space-8)',\n 10: 'var(--space-10)',\n 12: 'var(--space-12)',\n 16: 'var(--space-16)',\n 20: 'var(--space-20)',\n} as const;\n\nexport type SpacingToken = keyof typeof SPACING;\n","import { CSSProperties } from 'react';\nimport { SPACING } from '../../tokens/spacing';\n\ntype SpacingValue = keyof typeof SPACING | number | string;\n\n/**\n * Named spacing aliases that map semantic sizes to DS space tokens.\n * Allows consumers to pass gap=\"lg\" instead of gap={6}.\n */\nconst SPACING_ALIASES: Record<string, string> = {\n xs: 'var(--space-2)',\n sm: 'var(--space-3)',\n md: 'var(--space-4)',\n lg: 'var(--space-6)',\n xl: 'var(--space-8)',\n '2xl': 'var(--space-12)',\n};\n\nexport function resolveSpacing(value: SpacingValue | undefined): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'number' && SPACING[value as keyof typeof SPACING]) {\n return SPACING[value as keyof typeof SPACING];\n }\n if (typeof value === 'string' && value in SPACING_ALIASES) {\n return SPACING_ALIASES[value];\n }\n return String(value);\n}\n\nexport interface SpacingProps {\n m?: SpacingValue;\n mt?: SpacingValue;\n mb?: SpacingValue;\n ml?: SpacingValue;\n mr?: SpacingValue;\n mx?: SpacingValue;\n my?: SpacingValue;\n p?: SpacingValue;\n pt?: SpacingValue;\n pb?: SpacingValue;\n pl?: SpacingValue;\n pr?: SpacingValue;\n px?: SpacingValue;\n py?: SpacingValue;\n gap?: SpacingValue;\n}\n\nexport function extractSpacingStyles(props: SpacingProps): CSSProperties {\n const styles: CSSProperties = {};\n\n if (props.m !== undefined) styles.margin = resolveSpacing(props.m);\n if (props.mt !== undefined) styles.marginTop = resolveSpacing(props.mt);\n if (props.mb !== undefined) styles.marginBottom = resolveSpacing(props.mb);\n if (props.ml !== undefined) styles.marginLeft = resolveSpacing(props.ml);\n if (props.mr !== undefined) styles.marginRight = resolveSpacing(props.mr);\n if (props.mx !== undefined) {\n styles.marginLeft = resolveSpacing(props.mx);\n styles.marginRight = resolveSpacing(props.mx);\n }\n if (props.my !== undefined) {\n styles.marginTop = resolveSpacing(props.my);\n styles.marginBottom = resolveSpacing(props.my);\n }\n\n if (props.p !== undefined) styles.padding = resolveSpacing(props.p);\n if (props.pt !== undefined) styles.paddingTop = resolveSpacing(props.pt);\n if (props.pb !== undefined) styles.paddingBottom = resolveSpacing(props.pb);\n if (props.pl !== undefined) styles.paddingLeft = resolveSpacing(props.pl);\n if (props.pr !== undefined) styles.paddingRight = resolveSpacing(props.pr);\n if (props.px !== undefined) {\n styles.paddingLeft = resolveSpacing(props.px);\n styles.paddingRight = resolveSpacing(props.px);\n }\n if (props.py !== undefined) {\n styles.paddingTop = resolveSpacing(props.py);\n styles.paddingBottom = resolveSpacing(props.py);\n }\n\n if (props.gap !== undefined) styles.gap = resolveSpacing(props.gap);\n\n return styles;\n}\n","import { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { Box, BoxProps } from './Box';\n\nexport type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/**\n * Maps named sizes to max-width values.\n * Aligns with common web breakpoints (Tailwind `max-w-*` scale).\n */\n// eslint-disable-next-line react-refresh/only-export-components\nexport const CONTAINER_SIZE_MAP: Record<ContainerSize, string> = {\n sm: '768px', // 48rem — max-w-3xl\n md: '1024px', // 64rem — max-w-5xl\n lg: '1152px', // 72rem — max-w-6xl\n xl: '1280px', // 80rem — max-w-7xl\n full: '100%',\n};\n\nexport interface ContainerProps extends BoxProps {\n /**\n * Named size preset. Overrides `maxWidth` when set.\n * @example <Container size=\"lg\">…</Container>\n */\n size?: ContainerSize;\n /** Pass `true` to stretch to 100% width (same as `size=\"full\"`). */\n fluid?: boolean;\n /** Custom max-width value. Ignored when `size` or `fluid` is set. */\n maxWidth?: number | string;\n}\n\nexport const Container = forwardRef<HTMLElement, ContainerProps>(\n ({ size, fluid, maxWidth, className, style, ...props }, ref) => {\n let resolvedMaxWidth: string | number;\n if (fluid) {\n resolvedMaxWidth = '100%';\n } else if (size) {\n resolvedMaxWidth = CONTAINER_SIZE_MAP[size];\n } else {\n resolvedMaxWidth = maxWidth || 'var(--container-default-max, 1200px)';\n }\n\n return (\n <Box\n ref={ref}\n className={clsx('ds-container', className)}\n style={{\n maxWidth: resolvedMaxWidth,\n ...style,\n }}\n {...props}\n />\n );\n },\n);\n\nContainer.displayName = 'Container';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport './BeforeAfterBlock.css';\n\n/* ============================================================================\n BEFORE/AFTER BLOCK\n ============================================================================\n Side-by-side or sequential comparison showing the transformation from\n current state to desired state.\n\n Strategic objective: Differentiation (transformation visualization)\n ============================================================================ */\n\n/** Item in the before or after column */\nexport interface BeforeAfterItem {\n /** Item text */\n text: string;\n /** Sentiment affects visual treatment */\n sentiment?: 'negative' | 'positive' | 'neutral';\n}\n\n/** One side of the comparison */\nexport interface BeforeAfterSide {\n /** Column label (e.g., \"Before SalesMind\", \"After SalesMind\") */\n label: string;\n /** List of items */\n items: BeforeAfterItem[];\n /** Optional media */\n media?: React.ReactNode;\n}\n\nexport interface BeforeAfterBlockProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title?: React.ReactNode;\n /** Before state */\n before: BeforeAfterSide;\n /** After state */\n after: BeforeAfterSide;\n /** Layout variant */\n variant?: 'split' | 'slider' | 'stacked';\n}\n\n/**\n * Transformation visualization: before vs. after comparison.\n *\n * @example\n * ```tsx\n * <BeforeAfterBlock\n * title=\"The SalesMind Transformation\"\n * before={{\n * label: 'Without SalesMind',\n * items: [\n * { text: 'Manual prospecting 40hrs/week', sentiment: 'negative' },\n * { text: 'Unpredictable pipeline', sentiment: 'negative' },\n * ],\n * }}\n * after={{\n * label: 'With SalesMind',\n * items: [\n * { text: 'AI handles outreach 24/7', sentiment: 'positive' },\n * { text: 'Predictable qualified meetings', sentiment: 'positive' },\n * ],\n * }}\n * variant=\"split\"\n * />\n * ```\n */\nexport const BeforeAfterBlock = forwardRef<HTMLDivElement, BeforeAfterBlockProps>(\n (\n {\n eyebrow,\n title,\n before,\n after,\n variant = 'split',\n className,\n ...props\n },\n ref,\n ) => {\n const renderItems = (items: BeforeAfterItem[], side: 'before' | 'after') =>\n items.map((item, i) => (\n <li\n key={i}\n className={clsx(\n 'ds-before-after__item',\n item.sentiment && `ds-before-after__item--${item.sentiment}`,\n )}\n >\n <span className=\"ds-before-after__item-icon\" aria-hidden=\"true\">\n {side === 'before' ? '\\u2717' : '\\u2713'}\n </span>\n <span>{item.text}</span>\n </li>\n ));\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-before-after', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} />\n\n <div className={clsx('ds-before-after__layout', `ds-before-after__layout--${variant}`)}>\n {/* Before column */}\n <div className=\"ds-before-after__column ds-before-after__column--before\">\n <h3 className=\"ds-before-after__label\">{before.label}</h3>\n <ul className=\"ds-before-after__list\">\n {renderItems(before.items, 'before')}\n </ul>\n {before.media && (\n <div className=\"ds-before-after__media\">{before.media}</div>\n )}\n </div>\n\n {/* Divider */}\n {variant === 'split' && (\n <div className=\"ds-before-after__divider\" aria-hidden=\"true\">\n <span className=\"ds-before-after__arrow\">→</span>\n </div>\n )}\n\n {/* After column */}\n <div className=\"ds-before-after__column ds-before-after__column--after\">\n <h3 className=\"ds-before-after__label\">{after.label}</h3>\n <ul className=\"ds-before-after__list\">\n {renderItems(after.items, 'after')}\n </ul>\n {after.media && (\n <div className=\"ds-before-after__media\">{after.media}</div>\n )}\n </div>\n </div>\n </SectionShell>\n );\n },\n);\n\nBeforeAfterBlock.displayName = 'BeforeAfterBlock';\n","import React, { forwardRef, useState, useMemo, useCallback } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport { Slider } from '../Slider/Slider';\nimport { TextField } from '../TextField/TextField';\nimport './ValueAnchor.css';\n\n/* ============================================================================\n VALUE ANCHOR\n ============================================================================\n Anchor the buyer on OUTCOME VALUE before showing cost. Shows pipeline\n VALUE first, then cost as a fraction. The most effective pricing psychology\n pattern: show the $500K pipeline first, then the $2K/month cost.\n\n Strategic objective: ACV (shifts conversation from cost to value ratio)\n ============================================================================ */\n\n/** Calculator input definition */\nexport interface ValueAnchorInput {\n /** Input name (form key) */\n name: string;\n /** Display label */\n label: string;\n /** Input type */\n type: 'number' | 'slider';\n /** Default value */\n defaultValue: number;\n /** Min for slider */\n min?: number;\n /** Max for slider */\n max?: number;\n /** Step for slider */\n step?: number;\n /** Display prefix (e.g., \"$\") */\n prefix?: string;\n /** Display suffix (e.g., \"%\") */\n suffix?: string;\n}\n\n/** Calculator output */\nexport interface ValueAnchorOutput {\n /** Primary metric (large display) */\n primaryMetric: { value: number; label: string; prefix?: string; suffix?: string };\n /** Supporting metrics */\n secondaryMetrics: Array<{ value: number; label: string; prefix?: string; suffix?: string }>;\n /** Optional cost comparison */\n costComparison?: {\n without: { value: number; label: string };\n with: { value: number; label: string };\n savings: { value: number; label: string };\n };\n}\n\nexport interface ValueAnchorProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Calculator inputs */\n inputs: ValueAnchorInput[];\n /** Calculation function */\n calculate: (values: Record<string, number>) => ValueAnchorOutput;\n /** CTA shown after calculation */\n cta?: { label: string; href: string };\n}\n\n/** Format a number with commas */\nfunction formatNumber(n: number, prefix?: string, suffix?: string): string {\n const formatted = n >= 1000\n ? n.toLocaleString('en-US', { maximumFractionDigits: 0 })\n : String(Math.round(n * 10) / 10);\n return `${prefix ?? ''}${formatted}${suffix ?? ''}`;\n}\n\n/**\n * Pipeline value calculator — anchors on outcome value before showing cost.\n *\n * @example\n * ```tsx\n * <ValueAnchor\n * title=\"See Your Pipeline Potential\"\n * inputs={[\n * { name: 'meetings', label: 'Monthly meetings', type: 'slider', defaultValue: 10, min: 5, max: 50 },\n * { name: 'dealSize', label: 'Avg deal size', type: 'number', defaultValue: 5000, prefix: '$' },\n * ]}\n * calculate={(v) => ({\n * primaryMetric: { value: v.meetings * 12 * v.dealSize * 0.2, label: 'Annual Pipeline Value', prefix: '$' },\n * secondaryMetrics: [...],\n * })}\n * />\n * ```\n */\nexport const ValueAnchor = forwardRef<HTMLDivElement, ValueAnchorProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n inputs,\n calculate,\n cta,\n className,\n ...props\n },\n ref,\n ) => {\n const initialValues = useMemo(() => {\n const vals: Record<string, number> = {};\n inputs.forEach((inp) => { vals[inp.name] = inp.defaultValue; });\n return vals;\n }, [inputs]);\n\n const [values, setValues] = useState(initialValues);\n\n const handleChange = useCallback((name: string, value: number) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n }, []);\n\n const output = useMemo(() => calculate(values), [values, calculate]);\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-value-anchor', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n <div className=\"ds-value-anchor__layout\">\n {/* Inputs */}\n <div className=\"ds-value-anchor__inputs\">\n {inputs.map((input) => (\n <div key={input.name} className=\"ds-value-anchor__input-group\">\n <label className=\"ds-value-anchor__input-label\">\n {input.label}\n <span className=\"ds-value-anchor__input-value\">\n {formatNumber(values[input.name], input.prefix, input.suffix)}\n </span>\n </label>\n {input.type === 'slider' ? (\n <Slider\n value={values[input.name]}\n min={input.min ?? 0}\n max={input.max ?? 100}\n step={input.step ?? 1}\n onValueChange={(v) => handleChange(input.name, v)}\n />\n ) : (\n <TextField\n type=\"number\"\n value={String(values[input.name])}\n onChange={(e) => handleChange(input.name, Number(e.target.value) || 0)}\n />\n )}\n </div>\n ))}\n </div>\n\n {/* Output */}\n <div className=\"ds-value-anchor__output\">\n {/* Primary metric — large, brand-colored */}\n <div className=\"ds-value-anchor__primary\">\n <span className=\"ds-value-anchor__primary-value\">\n {formatNumber(output.primaryMetric.value, output.primaryMetric.prefix, output.primaryMetric.suffix)}\n </span>\n <span className=\"ds-value-anchor__primary-label\">\n {output.primaryMetric.label}\n </span>\n </div>\n\n {/* Secondary metrics */}\n {output.secondaryMetrics.length > 0 && (\n <div className=\"ds-value-anchor__secondary\">\n {output.secondaryMetrics.map((m, i) => (\n <div key={i} className=\"ds-value-anchor__secondary-metric\">\n <span className=\"ds-value-anchor__secondary-value\">\n {formatNumber(m.value, m.prefix, m.suffix)}\n </span>\n <span className=\"ds-value-anchor__secondary-label\">{m.label}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* Cost comparison */}\n {output.costComparison && (\n <div className=\"ds-value-anchor__comparison\">\n <div className=\"ds-value-anchor__comparison-col ds-value-anchor__comparison-col--without\">\n <span className=\"ds-value-anchor__comparison-value\">\n {formatNumber(output.costComparison.without.value, '$')}\n </span>\n <span className=\"ds-value-anchor__comparison-label\">\n {output.costComparison.without.label}\n </span>\n </div>\n <div className=\"ds-value-anchor__comparison-col ds-value-anchor__comparison-col--with\">\n <span className=\"ds-value-anchor__comparison-value\">\n {formatNumber(output.costComparison.with.value, '$')}\n </span>\n <span className=\"ds-value-anchor__comparison-label\">\n {output.costComparison.with.label}\n </span>\n </div>\n <div className=\"ds-value-anchor__savings\">\n <span className=\"ds-value-anchor__savings-value\">\n {formatNumber(output.costComparison.savings.value, '$')}\n </span>\n <span className=\"ds-value-anchor__savings-label\">\n {output.costComparison.savings.label}\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {cta && (\n <div className=\"ds-value-anchor__cta\">\n <Button variant=\"primary\" size=\"lg\" asChild>\n <OutboundLink href={cta.href} context=\"value-anchor-cta\" openInNewTab={false}>{cta.label}</OutboundLink>\n </Button>\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nValueAnchor.displayName = 'ValueAnchor';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Slider.css';\n\nexport interface SliderProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Current value (controlled). */\n value?: number;\n /** Default value (uncontrolled). */\n defaultValue?: number;\n /** Minimum value. */\n min?: number;\n /** Maximum value. */\n max?: number;\n /** Step increment. */\n step?: number;\n /** Callback fired when the value changes. */\n onValueChange?: (value: number) => void;\n /** Whether the slider is disabled. */\n disabled?: boolean;\n}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n className,\n value: controlledValue,\n defaultValue = 50,\n min = 0,\n max = 100,\n step = 1,\n onValueChange,\n disabled = false,\n ...props\n },\n ref,\n ) => {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = Number(e.target.value);\n if (!isControlled) {\n setUncontrolledValue(next);\n }\n onValueChange?.(next);\n };\n\n const percentage = ((value - min) / (max - min)) * 100;\n\n return (\n <div\n ref={ref}\n className={clsx('ds-slider', disabled && 'ds-slider--disabled', className)}\n {...props}\n >\n <div className=\"ds-slider__track\">\n <div\n className=\"ds-slider__range\"\n style={{ width: `${percentage}%` }}\n />\n </div>\n <input\n type=\"range\"\n className=\"ds-slider__thumb\"\n role=\"slider\"\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n onChange={handleChange}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n />\n </div>\n );\n },\n);\n\nSlider.displayName = 'Slider';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Badge } from '../Badge/Badge';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './EnterpriseSignaling.css';\n\n/* ============================================================================\n ENTERPRISE SIGNALING\n ============================================================================\n Enterprise trust and procurement enablement. Shows SLA commitments,\n uptime guarantees, security certifications, and team capabilities in\n a structured, scannable format.\n\n Strategic objective: Trust + Authority (enterprise procurement readiness)\n ============================================================================ */\n\n/** Status of a trust signal item */\nexport type EnterpriseSignalStatus = 'active' | 'in-progress' | 'planned';\n\n/** A single trust signal item */\nexport interface EnterpriseSignalItem {\n /** Signal name (e.g., \"SOC 2 Type II\") */\n name: string;\n /** Status */\n status: EnterpriseSignalStatus;\n /** Detail text */\n detail?: string;\n /** Link to documentation */\n href?: string;\n}\n\n/** A category of trust signals */\nexport interface EnterpriseSignalCategory {\n /** Category name (e.g., \"Security\") */\n name: string;\n /** Category icon */\n icon?: React.ReactNode;\n /** Items in this category */\n items: EnterpriseSignalItem[];\n}\n\n/** SLA commitment */\nexport interface EnterpriseSLA {\n /** Metric name */\n metric: string;\n /** SLA commitment */\n commitment: string;\n /** Current actual value */\n current?: string;\n}\n\nexport interface EnterpriseSignalingProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Trust signal categories */\n categories: EnterpriseSignalCategory[];\n /** SLA commitments */\n sla?: EnterpriseSLA[];\n /** Layout variant */\n variant?: 'full' | 'compact' | 'strip';\n}\n\nconst STATUS_LABELS: Record<EnterpriseSignalStatus, string> = {\n active: 'Active',\n 'in-progress': 'In Progress',\n planned: 'Planned',\n};\n\n/**\n * Enterprise trust and procurement enablement block.\n *\n * @example\n * ```tsx\n * <EnterpriseSignaling\n * title=\"Enterprise-Ready\"\n * categories={[\n * { name: 'Security', items: [{ name: 'GDPR', status: 'active' }] },\n * ]}\n * sla={[{ metric: 'Uptime', commitment: '99.9%', current: '99.97%' }]}\n * variant=\"full\"\n * />\n * ```\n */\nexport const EnterpriseSignaling = forwardRef<HTMLDivElement, EnterpriseSignalingProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n categories,\n sla,\n variant = 'full',\n className,\n ...props\n },\n ref,\n ) => {\n if (variant === 'strip') {\n return (\n <div\n ref={ref}\n className={clsx('ds-enterprise-signaling', 'ds-enterprise-signaling--strip', className)}\n {...props}\n >\n <div className=\"ds-enterprise-signaling__strip-inner\">\n {categories.flatMap((cat) => cat.items.filter((i) => i.status === 'active')).map((item, i) => (\n <span key={i} className=\"ds-enterprise-signaling__strip-item\">\n {item.name}\n </span>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-enterprise-signaling', `ds-enterprise-signaling--${variant}`, className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n {/* Categories */}\n <div className=\"ds-enterprise-signaling__categories\">\n {categories.map((cat, ci) => (\n <div key={ci} className=\"ds-enterprise-signaling__category\">\n <div className=\"ds-enterprise-signaling__category-header\">\n {cat.icon && <span className=\"ds-enterprise-signaling__category-icon\">{cat.icon}</span>}\n <h3 className=\"ds-enterprise-signaling__category-name\">{cat.name}</h3>\n </div>\n <div className=\"ds-enterprise-signaling__items\">\n {cat.items.map((item, ii) => {\n const inner = (\n <div\n key={ii}\n className={clsx(\n 'ds-enterprise-signaling__item',\n `ds-enterprise-signaling__item--${item.status}`,\n )}\n >\n <span className=\"ds-enterprise-signaling__item-name\">{item.name}</span>\n <Badge\n className={clsx('ds-enterprise-signaling__item-status', `ds-enterprise-signaling__item-status--${item.status}`)}\n variant=\"outline\"\n >\n {STATUS_LABELS[item.status]}\n </Badge>\n {variant === 'full' && item.detail && (\n <span className=\"ds-enterprise-signaling__item-detail\">{item.detail}</span>\n )}\n </div>\n );\n\n return item.href ? (\n <OutboundLink key={ii} href={item.href} context=\"enterprise-signaling-item\" className=\"ds-enterprise-signaling__item-link\">{inner}</OutboundLink>\n ) : (\n <React.Fragment key={ii}>{inner}</React.Fragment>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n\n {/* SLA Table */}\n {sla && sla.length > 0 && (\n <div className=\"ds-enterprise-signaling__sla\">\n <h3 className=\"ds-enterprise-signaling__sla-title\">Service Level Agreements</h3>\n <table className=\"ds-enterprise-signaling__sla-table\">\n <thead>\n <tr>\n <th>Metric</th>\n <th>SLA</th>\n {sla.some((s) => s.current) && <th>Current</th>}\n </tr>\n </thead>\n <tbody>\n {sla.map((s, i) => (\n <tr key={i}>\n <td>{s.metric}</td>\n <td>{s.commitment}</td>\n {sla.some((sl) => sl.current) && (\n <td className=\"ds-enterprise-signaling__sla-current\">{s.current ?? '—'}</td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nEnterpriseSignaling.displayName = 'EnterpriseSignaling';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { MetricCounter } from '../MetricCounter/MetricCounter';\nimport './IntelligenceBlock.css';\n\n/* ============================================================================\n INTELLIGENCE BLOCK\n ============================================================================\n Visualizes the data compound effect — SalesMind's AI gets smarter over\n time. This makes the data moat narrative tangible and creates real urgency.\n\n Strategic objective: Moat (data moat signaling)\n ============================================================================ */\n\n/** A compound intelligence metric */\nexport interface IntelligenceMetric {\n /** Target value */\n value: number;\n /** Label below the number */\n label: string;\n /** Value prefix */\n prefix?: string;\n /** Value suffix */\n suffix?: string;\n /** Growth indicator text */\n growth?: string;\n}\n\n/** A compound intelligence capability */\nexport interface IntelligenceCapability {\n /** Capability title */\n title: string;\n /** Description */\n description: string;\n /** Icon */\n icon?: React.ReactNode;\n /** Compounding example */\n compoundingExample?: {\n before: string;\n after: string;\n timeframe: string;\n };\n}\n\nexport interface IntelligenceBlockProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Intelligence metrics */\n metrics: IntelligenceMetric[];\n /** Intelligence capabilities */\n capabilities: IntelligenceCapability[];\n /** Visual variant */\n variant?: 'metrics-first' | 'capabilities-first' | 'timeline';\n}\n\n/**\n * Data compound effect visualization.\n *\n * @example\n * ```tsx\n * <IntelligenceBlock\n * title=\"Intelligence That Compounds\"\n * metrics={[\n * { value: 2000000, suffix: '+', label: 'Prospect Interactions' },\n * ]}\n * capabilities={[\n * { title: 'Message Optimization', description: '...',\n * compoundingExample: { before: 'Generic templates', after: 'Persona-specific scripts', timeframe: '6 months' } },\n * ]}\n * />\n * ```\n */\nexport const IntelligenceBlock = forwardRef<HTMLDivElement, IntelligenceBlockProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n metrics,\n capabilities,\n variant = 'metrics-first',\n className,\n ...props\n },\n ref,\n ) => {\n const metricsBlock = (\n <div className=\"ds-intelligence__metrics\">\n {metrics.map((m, i) => (\n <div key={i} className=\"ds-intelligence__metric\">\n <MetricCounter\n value={m.value}\n prefix={m.prefix}\n suffix={m.suffix}\n label={m.label}\n \n />\n {m.growth && (\n <span className=\"ds-intelligence__growth\">{m.growth}</span>\n )}\n </div>\n ))}\n </div>\n );\n\n const capabilitiesBlock = (\n <div className=\"ds-intelligence__capabilities\">\n {capabilities.map((cap, i) => (\n <div key={i} className=\"ds-intelligence__capability\">\n {cap.icon && (\n <div className=\"ds-intelligence__capability-icon\" aria-hidden=\"true\">\n {cap.icon}\n </div>\n )}\n <div className=\"ds-intelligence__capability-content\">\n <h3 className=\"ds-intelligence__capability-title\">{cap.title}</h3>\n <p className=\"ds-intelligence__capability-desc\">{cap.description}</p>\n {cap.compoundingExample && (\n <div className=\"ds-intelligence__compound\">\n <div className=\"ds-intelligence__compound-before\">\n <span className=\"ds-intelligence__compound-label\">Before</span>\n <span className=\"ds-intelligence__compound-text\">{cap.compoundingExample.before}</span>\n </div>\n <span className=\"ds-intelligence__compound-arrow\" aria-hidden=\"true\">\\u2192</span>\n <div className=\"ds-intelligence__compound-after\">\n <span className=\"ds-intelligence__compound-label\">{cap.compoundingExample.timeframe}</span>\n <span className=\"ds-intelligence__compound-text\">{cap.compoundingExample.after}</span>\n </div>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n );\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-intelligence', `ds-intelligence--${variant}`, className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n {variant === 'capabilities-first' ? (\n <>{capabilitiesBlock}{metricsBlock}</>\n ) : (\n <>{metricsBlock}{capabilitiesBlock}</>\n )}\n </SectionShell>\n );\n },\n);\n\nIntelligenceBlock.displayName = 'IntelligenceBlock';\n","import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport './MetricCounter.css';\n\nexport interface MetricCounterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The target number to count up to */\n value: number;\n /** Optional prefix (e.g. \"$\", \"+\") */\n prefix?: string;\n /** Optional suffix (e.g. \"%\", \"M\") */\n suffix?: string;\n /** Duration of the animation in milliseconds (default: 1500) */\n duration?: number;\n /** Number of decimal places to show (default: 0) */\n decimals?: number;\n /** A label to display below the number */\n label?: React.ReactNode;\n}\n\n/**\n * An animated counter for displaying key metrics and social proof.\n * Uses requestAnimationFrame for smooth counting and IntersectionObserver\n * to trigger only when visible. Respects prefers-reduced-motion.\n */\nexport const MetricCounter = forwardRef<HTMLDivElement, MetricCounterProps>(\n (\n {\n value,\n prefix = '',\n suffix = '',\n duration = 1500,\n decimals = 0,\n label,\n className,\n ...props\n },\n ref\n ) => {\n const [displayValue, setDisplayValue] = useState(0);\n const [hasAnimated, setHasAnimated] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const prefersReducedMotion = useRef(false);\n\n useEffect(() => {\n prefersReducedMotion.current = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n \n if (prefersReducedMotion.current) {\n setDisplayValue(value);\n setHasAnimated(true);\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && !hasAnimated) {\n startAnimation();\n observer.disconnect();\n }\n },\n { threshold: 0.5 }\n );\n\n if (containerRef.current) {\n observer.observe(containerRef.current);\n }\n\n return () => observer.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- startAnimation is stable and intentionally omitted to avoid re-triggering\n }, [value, hasAnimated]);\n\n const startAnimation = () => {\n let startTime: number;\n setHasAnimated(true);\n\n const easeOutExpo = (t: number): number => {\n return t === 1 ? 1 : 1 - Math.pow(2, -10 * t);\n };\n\n const animate = (currentTime: number) => {\n if (!startTime) startTime = currentTime;\n const progress = Math.min((currentTime - startTime) / duration, 1);\n \n const currentMultiplier = easeOutExpo(progress);\n const nextValue = value * currentMultiplier;\n \n setDisplayValue(nextValue);\n\n if (progress < 1) {\n requestAnimationFrame(animate);\n } else {\n setDisplayValue(value);\n }\n };\n\n requestAnimationFrame(animate);\n };\n\n const formattedValue = displayValue.toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n\n return (\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={clsx('ds-metric-counter', className)}\n {...props}\n >\n <div className=\"ds-metric-counter__value-wrapper\">\n {prefix && <span className=\"ds-metric-counter__prefix\">{prefix}</span>}\n <span className=\"ds-metric-counter__value\">{formattedValue}</span>\n {suffix && <span className=\"ds-metric-counter__suffix\">{suffix}</span>}\n </div>\n {label && <div className=\"ds-metric-counter__label\">{label}</div>}\n </div>\n );\n }\n);\n\nMetricCounter.displayName = 'MetricCounter';\n","import React, { forwardRef, useState, useMemo, useCallback } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport { Slider } from '../Slider/Slider';\nimport './PartnerValueProp.css';\n\n/* ============================================================================\n PARTNER VALUE PROP\n ============================================================================\n White-label / agency partner value proposition. Shows partner economics\n with a margin calculator, benefits grid, and build-vs-buy comparison.\n\n Strategic objective: Distribution (white-label adoption)\n ============================================================================ */\n\n/** Calculator input */\nexport interface PartnerCalcInput {\n /** Input name */\n name: string;\n /** Display label */\n label: string;\n /** Input type */\n type: 'number' | 'slider';\n /** Default value */\n defaultValue: number;\n /** Min value */\n min?: number;\n /** Max value */\n max?: number;\n /** Display prefix */\n prefix?: string;\n /** Display suffix */\n suffix?: string;\n}\n\n/** Calculator output */\nexport interface PartnerCalcOutput {\n monthlyRevenue: number;\n monthlyCost: number;\n monthlyMargin: number;\n marginPercentage: number;\n annualRevenue: number;\n}\n\n/** Partner benefit */\nexport interface PartnerBenefit {\n title: string;\n description: string;\n icon?: React.ReactNode;\n}\n\n/** Build-vs-buy differentiator */\nexport interface PartnerDifferentiator {\n dimension: string;\n buildInHouse: string;\n withPartner: string;\n}\n\nexport interface PartnerValuePropProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Calculator configuration */\n calculator?: {\n inputs: PartnerCalcInput[];\n calculate: (values: Record<string, number>) => PartnerCalcOutput;\n };\n /** Partner benefits */\n benefits: PartnerBenefit[];\n /** Build-vs-buy comparison */\n differentiators?: PartnerDifferentiator[];\n /** Comparison section title */\n differentiatorTitle?: string;\n /** Column header for the \"build\" option */\n differentiatorBuildLabel?: string;\n /** Column header for the partner/white-label option */\n differentiatorPartnerLabel?: string;\n /** CTA */\n cta: { label: string; href: string };\n}\n\n/** Format a number with commas */\nfunction fmtNum(n: number, prefix?: string, suffix?: string): string {\n return `${prefix ?? ''}${n.toLocaleString('en-US', { maximumFractionDigits: 0 })}${suffix ?? ''}`;\n}\n\n/**\n * White-label partner economics and value proposition.\n *\n * @example\n * ```tsx\n * <PartnerValueProp\n * title=\"Partner With SalesMind\"\n * benefits={[{ title: 'White-Label', description: 'Your brand, our tech.' }]}\n * cta={{ label: 'Apply Now', href: '/partners/apply' }}\n * />\n * ```\n */\nexport const PartnerValueProp = forwardRef<HTMLDivElement, PartnerValuePropProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n calculator,\n benefits,\n differentiators,\n differentiatorTitle = 'Build In-House vs. White-Label',\n differentiatorBuildLabel = 'Build In-House',\n differentiatorPartnerLabel = 'White-Label',\n cta,\n className,\n ...props\n },\n ref,\n ) => {\n const initialValues = useMemo(() => {\n if (!calculator) return {};\n const vals: Record<string, number> = {};\n calculator.inputs.forEach((inp) => { vals[inp.name] = inp.defaultValue; });\n return vals;\n }, [calculator]);\n\n const [values, setValues] = useState(initialValues);\n\n const handleChange = useCallback((name: string, value: number) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n }, []);\n\n const calcOutput = useMemo(() => {\n if (!calculator) return null;\n return calculator.calculate(values);\n }, [values, calculator]);\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-partner-vp', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n <div className=\"ds-partner-vp__layout\">\n {/* Benefits */}\n <div className=\"ds-partner-vp__benefits\">\n {benefits.map((b, i) => (\n <div key={i} className=\"ds-partner-vp__benefit\">\n {b.icon && <div className=\"ds-partner-vp__benefit-icon\" aria-hidden=\"true\">{b.icon}</div>}\n <div>\n <h3 className=\"ds-partner-vp__benefit-title\">{b.title}</h3>\n <p className=\"ds-partner-vp__benefit-desc\">{b.description}</p>\n </div>\n </div>\n ))}\n </div>\n\n {/* Calculator */}\n {calculator && calcOutput && (\n <div className=\"ds-partner-vp__calculator\">\n <h3 className=\"ds-partner-vp__calc-title\">Partner Economics</h3>\n\n {calculator.inputs.map((input) => (\n <div key={input.name} className=\"ds-partner-vp__calc-input\">\n <label className=\"ds-partner-vp__calc-label\">\n {input.label}\n <span className=\"ds-partner-vp__calc-value\">\n {fmtNum(values[input.name], input.prefix, input.suffix)}\n </span>\n </label>\n <Slider\n value={values[input.name]}\n min={input.min ?? 0}\n max={input.max ?? 100}\n onValueChange={(v) => handleChange(input.name, v)}\n />\n </div>\n ))}\n\n <div className=\"ds-partner-vp__calc-results\">\n <div className=\"ds-partner-vp__calc-margin\">\n <span className=\"ds-partner-vp__calc-margin-value\">\n {Math.round(calcOutput.marginPercentage)}%\n </span>\n <span className=\"ds-partner-vp__calc-margin-label\">Margin</span>\n </div>\n <div className=\"ds-partner-vp__calc-metrics\">\n <div className=\"ds-partner-vp__calc-metric\">\n <span className=\"ds-partner-vp__calc-metric-value\">{fmtNum(calcOutput.monthlyRevenue, '$')}</span>\n <span className=\"ds-partner-vp__calc-metric-label\">Monthly Revenue</span>\n </div>\n <div className=\"ds-partner-vp__calc-metric\">\n <span className=\"ds-partner-vp__calc-metric-value\">{fmtNum(calcOutput.monthlyCost, '$')}</span>\n <span className=\"ds-partner-vp__calc-metric-label\">Monthly Cost</span>\n </div>\n <div className=\"ds-partner-vp__calc-metric\">\n <span className=\"ds-partner-vp__calc-metric-value ds-partner-vp__calc-metric-value--positive\">{fmtNum(calcOutput.monthlyMargin, '$')}</span>\n <span className=\"ds-partner-vp__calc-metric-label\">Monthly Profit</span>\n </div>\n <div className=\"ds-partner-vp__calc-metric\">\n <span className=\"ds-partner-vp__calc-metric-value\">{fmtNum(calcOutput.annualRevenue, '$')}</span>\n <span className=\"ds-partner-vp__calc-metric-label\">Annual Revenue</span>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* Differentiators */}\n {differentiators && differentiators.length > 0 && (\n <div className=\"ds-partner-vp__diff\">\n <h3 className=\"ds-partner-vp__diff-title\">{differentiatorTitle}</h3>\n <table className=\"ds-partner-vp__diff-table\">\n <thead>\n <tr>\n <th>Dimension</th>\n <th>{differentiatorBuildLabel}</th>\n <th>{differentiatorPartnerLabel}</th>\n </tr>\n </thead>\n <tbody>\n {differentiators.map((d, i) => (\n <tr key={i}>\n <td className=\"ds-partner-vp__diff-dimension\">{d.dimension}</td>\n <td className=\"ds-partner-vp__diff-build\">{d.buildInHouse}</td>\n <td className=\"ds-partner-vp__diff-sm\">{d.withPartner}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n\n <div className=\"ds-partner-vp__cta\">\n <Button variant=\"primary\" size=\"lg\" asChild>\n <OutboundLink href={cta.href} context=\"partner-value-prop-cta\" openInNewTab={false}>{cta.label}</OutboundLink>\n </Button>\n </div>\n </SectionShell>\n );\n },\n);\n\nPartnerValueProp.displayName = 'PartnerValueProp';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Badge } from '../Badge/Badge';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './EvolutionTimeline.css';\n\n/* ============================================================================\n EVOLUTION TIMELINE\n ============================================================================\n Visualizes category evolution from Manual → Tools → Infrastructure.\n Positions SalesMind as the inevitable next phase. NOT ProcessTimeline\n (which shows user steps) — this shows MARKET evolution.\n\n Strategic objective: Differentiation + Narrative Control\n ============================================================================ */\n\n/** Sentiment determines visual treatment */\nexport type EraSentiment = 'past' | 'present' | 'future';\n\n/** A single era in the evolution */\nexport interface EvolutionEra {\n /** Era label (e.g., \"Manual SDRs\") */\n label: string;\n /** Time period (e.g., \"2010-2018\") */\n period: string;\n /** Era description */\n description: string;\n /** Characteristics of this era */\n traits: string[];\n /** Whether this is the current/highlighted era */\n current?: boolean;\n /** Icon or illustration */\n icon?: React.ReactNode;\n /** Visual sentiment — past eras fade, future glows */\n sentiment: EraSentiment;\n}\n\nexport interface EvolutionTimelineProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Evolution eras */\n eras: EvolutionEra[];\n /** \"You are here\" indicator (index) */\n youAreHere?: number;\n /** CTA after timeline */\n cta?: { label: string; href: string };\n}\n\n/**\n * Category evolution timeline — positions SalesMind as the inevitable next phase.\n *\n * @example\n * ```tsx\n * <EvolutionTimeline\n * eyebrow=\"The Evolution\"\n * title=\"From Tools to Infrastructure\"\n * eras={[\n * { label: 'Manual SDRs', period: '2010-2018', description: '...', traits: [...], sentiment: 'past' },\n * { label: 'Automation Tools', period: '2018-2024', description: '...', traits: [...], sentiment: 'present', current: true },\n * { label: 'Pipeline Infrastructure', period: '2024+', description: '...', traits: [...], sentiment: 'future' },\n * ]}\n * youAreHere={1}\n * />\n * ```\n */\nexport const EvolutionTimeline = forwardRef<HTMLDivElement, EvolutionTimelineProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n eras,\n youAreHere,\n cta,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-evolution-timeline', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n <div className=\"ds-evolution-timeline__track\">\n {/* Connecting line */}\n <div className=\"ds-evolution-timeline__line\" aria-hidden=\"true\" />\n\n {eras.map((era, i) => (\n <div\n key={i}\n className={clsx(\n 'ds-evolution-timeline__era',\n `ds-evolution-timeline__era--${era.sentiment}`,\n era.current && 'ds-evolution-timeline__era--current',\n )}\n >\n {/* Era marker dot */}\n <div className=\"ds-evolution-timeline__marker\" aria-hidden=\"true\" />\n\n {/* \"You are here\" indicator */}\n {youAreHere === i && (\n <Badge className=\"ds-evolution-timeline__you-are-here\">\n Most tools are here\n </Badge>\n )}\n\n {era.icon && (\n <div className=\"ds-evolution-timeline__icon\" aria-hidden=\"true\">\n {era.icon}\n </div>\n )}\n\n <div className=\"ds-evolution-timeline__content\">\n <span className=\"ds-evolution-timeline__period\">{era.period}</span>\n <h3 className=\"ds-evolution-timeline__label\">{era.label}</h3>\n <p className=\"ds-evolution-timeline__desc\">{era.description}</p>\n\n <ul className=\"ds-evolution-timeline__traits\">\n {era.traits.map((trait, j) => (\n <li key={j} className=\"ds-evolution-timeline__trait\">\n <span className=\"ds-evolution-timeline__trait-icon\" aria-hidden=\"true\">\n {era.sentiment === 'future' ? '\\u2713' : era.sentiment === 'past' ? '\\u2717' : '\\u2022'}\n </span>\n {trait}\n </li>\n ))}\n </ul>\n </div>\n </div>\n ))}\n </div>\n\n {cta && (\n <div className=\"ds-evolution-timeline__cta\">\n <Button variant=\"primary\" asChild>\n <OutboundLink href={cta.href} context=\"evolution-timeline-cta\" openInNewTab={false}>{cta.label}</OutboundLink>\n </Button>\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nEvolutionTimeline.displayName = 'EvolutionTimeline';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport './EcosystemDiagram.css';\n\n/* ============================================================================\n ECOSYSTEM DIAGRAM\n ============================================================================\n Visualizes SalesMind's Software + Data + People trifecta as a\n self-reinforcing flywheel. Shows that SalesMind is not just software —\n it's an integrated ecosystem where each layer strengthens the others.\n\n Strategic objective: Moat + ACV (justifies higher pricing)\n ============================================================================ */\n\n/** A single ecosystem layer */\nexport interface EcosystemLayer {\n /** Layer name */\n name: string;\n /** Short description */\n description: string;\n /** Key capabilities */\n capabilities: string[];\n /** Icon */\n icon?: React.ReactNode;\n}\n\n/** A connection between layers */\nexport interface EcosystemConnection {\n /** From layer index */\n from: number;\n /** To layer index */\n to: number;\n /** What flows between layers */\n label: string;\n}\n\nexport interface EcosystemDiagramProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Ecosystem layers (typically 3) */\n layers: EcosystemLayer[];\n /** Connections between layers (flywheel arrows) */\n connections: EcosystemConnection[];\n /** Layout variant */\n variant?: 'flywheel' | 'pyramid' | 'concentric';\n /** Center label (e.g., \"Predictable Pipeline\") */\n centerLabel?: string;\n}\n\n/**\n * Ecosystem flywheel / pyramid / concentric diagram.\n *\n * @example\n * ```tsx\n * <EcosystemDiagram\n * title=\"The SalesMind Ecosystem\"\n * layers={[\n * { name: 'AI Software', description: '...', capabilities: ['...'] },\n * { name: 'Compound Intelligence', description: '...', capabilities: ['...'] },\n * { name: 'Expert Operations', description: '...', capabilities: ['...'] },\n * ]}\n * connections={[\n * { from: 0, to: 1, label: 'Interaction data' },\n * { from: 1, to: 2, label: 'AI insights' },\n * { from: 2, to: 0, label: 'Human refinements' },\n * ]}\n * centerLabel=\"Predictable Pipeline\"\n * variant=\"flywheel\"\n * />\n * ```\n */\nexport const EcosystemDiagram = forwardRef<HTMLDivElement, EcosystemDiagramProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n layers,\n connections,\n variant = 'flywheel',\n centerLabel,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-ecosystem', `ds-ecosystem--${variant}`, className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n <div className=\"ds-ecosystem__diagram\" role=\"img\" aria-label=\"Ecosystem diagram\">\n {/* Center label */}\n {centerLabel && (\n <div className=\"ds-ecosystem__center\">\n <span className=\"ds-ecosystem__center-label\">{centerLabel}</span>\n </div>\n )}\n\n {/* Layers */}\n <div className=\"ds-ecosystem__layers\">\n {layers.map((layer, i) => (\n <div key={i} className=\"ds-ecosystem__layer\">\n {layer.icon && (\n <div className=\"ds-ecosystem__layer-icon\" aria-hidden=\"true\">\n {layer.icon}\n </div>\n )}\n <h3 className=\"ds-ecosystem__layer-name\">{layer.name}</h3>\n <p className=\"ds-ecosystem__layer-desc\">{layer.description}</p>\n <ul className=\"ds-ecosystem__capabilities\">\n {layer.capabilities.map((cap, j) => (\n <li key={j} className=\"ds-ecosystem__capability\">{cap}</li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n\n {/* Connections */}\n <div className=\"ds-ecosystem__connections\" aria-hidden=\"true\">\n {connections.map((conn, i) => (\n <div key={i} className=\"ds-ecosystem__connection\">\n <span className=\"ds-ecosystem__connection-arrow\">\\u2192</span>\n <span className=\"ds-ecosystem__connection-label\">{conn.label}</span>\n </div>\n ))}\n </div>\n </div>\n </SectionShell>\n );\n },\n);\n\nEcosystemDiagram.displayName = 'EcosystemDiagram';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { Avatar, AvatarImage, AvatarFallback } from '../Avatar/Avatar';\nimport './ManifestoBlock.css';\n\n/* ============================================================================\n MANIFESTO BLOCK\n ============================================================================\n Brand philosophy / manifesto statement. A bold, typographic block that\n communicates company beliefs and values.\n\n Strategic objective: Narrative Control (brand alignment filter)\n ============================================================================ */\n\n/** Attribution for the manifesto */\nexport interface ManifestoAttribution {\n /** Name */\n name: string;\n /** Role */\n role: string;\n /** Avatar URL */\n avatar?: string;\n}\n\nexport interface ManifestoBlockProps extends Omit<SectionShellProps, 'children'> {\n /** The manifesto statement (plain text or ReactNode) */\n statement: React.ReactNode;\n /** Attribution (e.g., founder) */\n attribution?: ManifestoAttribution;\n /** Visual variant */\n variant?: 'centered' | 'editorial' | 'quote';\n}\n\n/**\n * Bold brand philosophy statement.\n *\n * @example\n * ```tsx\n * <ManifestoBlock\n * statement=\"We believe pipeline shouldn't be a prayer. It should be infrastructure.\"\n * attribution={{ name: 'Julien', role: 'Founder & CEO' }}\n * variant=\"quote\"\n * padding=\"lg\"\n * />\n * ```\n */\nexport const ManifestoBlock = forwardRef<HTMLDivElement, ManifestoBlockProps>(\n (\n {\n statement,\n attribution,\n variant = 'centered',\n className,\n ...props\n },\n ref,\n ) => {\n const initials = attribution\n ? attribution.name.split(' ').map((n) => n[0]).join('').slice(0, 2)\n : '';\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-manifesto', `ds-manifesto--${variant}`, className)}\n {...props}\n >\n <div className=\"ds-manifesto__inner\">\n {variant === 'quote' && (\n <span className=\"ds-manifesto__quote-mark\" aria-hidden=\"true\">“</span>\n )}\n\n <blockquote className=\"ds-manifesto__statement\">\n {statement}\n </blockquote>\n\n {attribution && (\n <div className=\"ds-manifesto__attribution\">\n <Avatar size=\"sm\">\n {attribution.avatar && <AvatarImage src={attribution.avatar} alt={attribution.name} />}\n <AvatarFallback>{initials}</AvatarFallback>\n </Avatar>\n <div className=\"ds-manifesto__attribution-text\">\n <span className=\"ds-manifesto__attribution-name\">{attribution.name}</span>\n <span className=\"ds-manifesto__attribution-role\">{attribution.role}</span>\n </div>\n </div>\n )}\n </div>\n </SectionShell>\n );\n },\n);\n\nManifestoBlock.displayName = 'ManifestoBlock';\n","import React from 'react';\nimport clsx from 'clsx';\nimport './Avatar.css';\n\n/* ==========================================================================\n Context\n ========================================================================== */\n\ninterface AvatarContextValue {\n hasImage: boolean;\n imageError: boolean;\n onImageError: () => void;\n}\n\nconst AvatarContext = React.createContext<AvatarContextValue>({\n hasImage: false,\n imageError: false,\n onImageError: () => {},\n});\n\n/* ==========================================================================\n Avatar (root)\n ========================================================================== */\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n}\n\n/**\n * User avatar with image and fallback support.\n *\n * @example\n * <Avatar>\n * <AvatarImage src=\"/photo.jpg\" alt=\"User\" />\n * <AvatarFallback>JD</AvatarFallback>\n * </Avatar>\n */\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n ({ size = 'md', className, children, ...props }, ref) => {\n const [imageError, setImageError] = React.useState(false);\n const [hasImage, setHasImage] = React.useState(false);\n\n // Scan children to detect if an AvatarImage is present\n React.useEffect(() => {\n let found = false;\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && child.type === AvatarImage) {\n found = true;\n }\n });\n setHasImage(found);\n }, [children]);\n\n const onImageError = React.useCallback(() => {\n setImageError(true);\n }, []);\n\n return (\n <AvatarContext.Provider value={{ hasImage, imageError, onImageError }}>\n <span\n ref={ref}\n className={clsx('ds-avatar', `ds-avatar--${size}`, className)}\n {...props}\n >\n {children}\n </span>\n </AvatarContext.Provider>\n );\n },\n);\n\nAvatar.displayName = 'Avatar';\n\n/* ==========================================================================\n AvatarImage\n ========================================================================== */\n\nexport const AvatarImage = React.forwardRef<\n HTMLImageElement,\n React.ImgHTMLAttributes<HTMLImageElement>\n>(({ className, onError, ...props }, ref) => {\n const { imageError, onImageError } = React.useContext(AvatarContext);\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n onImageError();\n onError?.(e);\n };\n\n if (imageError) return null;\n\n return (\n <img\n ref={ref}\n className={clsx('ds-avatar__image', className)}\n onError={handleError}\n {...props}\n />\n );\n});\n\nAvatarImage.displayName = 'AvatarImage';\n\n/* ==========================================================================\n AvatarFallback\n ========================================================================== */\n\nexport const AvatarFallback = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => {\n const { hasImage, imageError } = React.useContext(AvatarContext);\n\n // Show fallback when there is no image, or the image failed to load\n if (hasImage && !imageError) return null;\n\n return (\n <span ref={ref} className={clsx('ds-avatar__fallback', className)} {...props} />\n );\n});\n\nAvatarFallback.displayName = 'AvatarFallback';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport { ArrowRight } from 'lucide-react';\nimport './AnnouncementBar.css';\n\nexport interface AnnouncementBarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The badge text, e.g., \"New Feature\" or \"Update\" */\n badge?: React.ReactNode;\n /** The main message text */\n message: React.ReactNode;\n /** The link destination. If provided, the entire bar becomes clickable */\n href?: string;\n /** The visual variant */\n variant?: 'brand' | 'success' | 'warning' | 'info' | 'dark' | 'glass';\n /** Whether the bar can be dismissed */\n dismissible?: boolean;\n /** Callback when dismissed */\n onDismiss?: () => void;\n /** Whether to show the right arrow */\n showArrow?: boolean;\n}\n\n/**\n * Top-level announcement banner used to draw attention to new features,\n * webinars, or important updates.\n */\nexport const AnnouncementBar = forwardRef<HTMLDivElement, AnnouncementBarProps>(\n (\n {\n badge,\n message,\n href,\n variant = 'brand',\n dismissible = false,\n onDismiss,\n showArrow = true,\n className,\n ...props\n },\n ref\n ) => {\n const { track } = useAnalytics();\n\n const handleClick = () => {\n if (href) {\n track('announcement_click', { href, variant });\n }\n };\n\n const handleDismiss = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n track('announcement_dismiss', { variant });\n onDismiss?.();\n };\n\n const Component = href ? 'a' : 'div';\n const componentProps = href ? { href, onClick: handleClick } : {};\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-announcement-bar',\n `ds-announcement-bar--${variant}`,\n href && 'ds-announcement-bar--clickable',\n className\n )}\n {...props}\n >\n <Component className=\"ds-announcement-bar__inner\" {...componentProps}>\n <div className=\"ds-announcement-bar__content\">\n {badge && <span className=\"ds-announcement-bar__badge\">{badge}</span>}\n <span className=\"ds-announcement-bar__message\">{message}</span>\n </div>\n \n {href && showArrow && (\n <ArrowRight className=\"ds-announcement-bar__arrow\" size={16} />\n )}\n </Component>\n\n {dismissible && (\n <button\n type=\"button\"\n className=\"ds-announcement-bar__close\"\n onClick={handleDismiss}\n aria-label=\"Dismiss announcement\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n }\n);\n\nAnnouncementBar.displayName = 'AnnouncementBar';\n","import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { useAnalytics } from '../../web/analytics/use-analytics';\nimport './ProcessTimeline.css';\n\nexport interface TimelineStep {\n /** The step number or icon */\n indicator: React.ReactNode;\n /** Step title */\n title: React.ReactNode;\n /** Step description */\n description: React.ReactNode;\n}\n\nexport interface ProcessTimelineProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The steps to display in the timeline */\n steps: TimelineStep[];\n /** Whether to animate the line drawing on scroll */\n animated?: boolean;\n}\n\n/**\n * A vertical timeline component used to explain \"How it works\" or\n * onboarding processes.\n */\nexport const ProcessTimeline = forwardRef<HTMLDivElement, ProcessTimelineProps>(\n (\n {\n steps,\n animated = true,\n className,\n ...props\n },\n ref\n ) => {\n const [progress, setProgress] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n const { track } = useAnalytics();\n const hasTrackedRef = useRef(false);\n\n useEffect(() => {\n if (!animated) return;\n\n const handleScroll = () => {\n if (!containerRef.current) return;\n \n const rect = containerRef.current.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n \n // Start drawing when top of container hits middle of screen\n const startDraw = windowHeight * 0.5;\n \n // Distance the container travels while drawing\n const travelDistance = rect.height;\n \n // Current position of the top of the container relative to start point\n const currentPos = startDraw - rect.top;\n \n if (currentPos < 0) {\n setProgress(0);\n } else if (currentPos > travelDistance) {\n setProgress(100);\n if (!hasTrackedRef.current) {\n hasTrackedRef.current = true;\n track('timeline_complete');\n }\n } else {\n setProgress((currentPos / travelDistance) * 100);\n }\n };\n\n window.addEventListener('scroll', handleScroll, { passive: true });\n handleScroll(); // Initial check\n\n return () => window.removeEventListener('scroll', handleScroll);\n }, [animated, track]);\n\n return (\n <div\n ref={(node) => {\n // Handle both refs\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={clsx(\n 'ds-process-timeline',\n animated && 'ds-process-timeline--animated',\n className\n )}\n {...props}\n >\n <div className=\"ds-process-timeline__track\">\n <div \n className=\"ds-process-timeline__progress\" \n style={{ height: animated ? `${progress}%` : '100%' }}\n />\n </div>\n \n <div className=\"ds-process-timeline__steps\">\n {steps.map((step, index) => {\n const stepProgress = (index / (steps.length - 1)) * 100;\n const isActive = !animated || progress >= stepProgress;\n \n return (\n <div \n key={index} \n className={clsx(\n 'ds-process-timeline__step',\n isActive && 'ds-process-timeline__step--active'\n )}\n >\n <div className=\"ds-process-timeline__indicator\">\n {step.indicator}\n </div>\n <div className=\"ds-process-timeline__content\">\n <h3 className=\"ds-process-timeline__title\">{step.title}</h3>\n <p className=\"ds-process-timeline__description\">{step.description}</p>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n);\n\nProcessTimeline.displayName = 'ProcessTimeline';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { Check, X } from 'lucide-react';\nimport './ProblemAgitation.css';\n\nexport interface AgitationPoint {\n /** The problem state (old way) */\n problem: React.ReactNode;\n /** The solution state (new way) */\n solution: React.ReactNode;\n}\n\nexport interface ProblemAgitationProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Section title */\n title: string;\n /** Section description */\n description?: React.ReactNode;\n /** The points to compare */\n points: AgitationPoint[];\n /** Label for the old way column */\n oldWayLabel?: string;\n /** Label for the new way column */\n newWayLabel?: string;\n}\n\n/**\n * A \"Before & After\" or \"Old Way vs New Way\" comparison block,\n * frequently used in marketing to agitate a problem before presenting\n * the product as the solution.\n */\nexport const ProblemAgitation = forwardRef<HTMLDivElement, ProblemAgitationProps>(\n (\n {\n title,\n description,\n points,\n oldWayLabel = 'The Old Way',\n newWayLabel = 'The New Way',\n className,\n ...props\n },\n ref\n ) => {\n return (\n <section\n ref={ref}\n className={clsx('ds-problem-agitation', className)}\n {...props}\n >\n <div className=\"ds-problem-agitation__header\">\n <h2 className=\"ds-problem-agitation__title\">{title}</h2>\n {description && (\n <p className=\"ds-problem-agitation__description\">{description}</p>\n )}\n </div>\n\n <div className=\"ds-problem-agitation__grid\">\n {/* Mobile Labels (Hidden on Desktop) */}\n <div className=\"ds-problem-agitation__mobile-label ds-problem-agitation__mobile-label--old\">\n {oldWayLabel}\n </div>\n <div className=\"ds-problem-agitation__mobile-label ds-problem-agitation__mobile-label--new\">\n {newWayLabel}\n </div>\n\n {/* Desktop Headers */}\n <div className=\"ds-problem-agitation__column-header ds-problem-agitation__column-header--old\">\n {oldWayLabel}\n </div>\n <div className=\"ds-problem-agitation__column-header ds-problem-agitation__column-header--new\">\n {newWayLabel}\n </div>\n\n {/* Data Rows */}\n {points.map((point, index) => (\n <React.Fragment key={index}>\n <div className=\"ds-problem-agitation__cell ds-problem-agitation__cell--old\">\n <div className=\"ds-problem-agitation__icon-wrapper ds-problem-agitation__icon-wrapper--old\">\n <X size={20} aria-hidden=\"true\" />\n </div>\n <div className=\"ds-problem-agitation__content\">{point.problem}</div>\n </div>\n <div className=\"ds-problem-agitation__cell ds-problem-agitation__cell--new\">\n <div className=\"ds-problem-agitation__icon-wrapper ds-problem-agitation__icon-wrapper--new\">\n <Check size={20} aria-hidden=\"true\" />\n </div>\n <div className=\"ds-problem-agitation__content\">{point.solution}</div>\n </div>\n </React.Fragment>\n ))}\n </div>\n </section>\n );\n }\n);\n\nProblemAgitation.displayName = 'ProblemAgitation';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../Tabs';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './StakeholderTabs.css';\n\n/* ============================================================================\n STAKEHOLDER TABS\n ============================================================================\n Persona-specific content switcher. Shows different messaging, features,\n and CTAs to different stakeholders.\n\n Strategic objective: Pipeline Quality (message-market fit per persona)\n ============================================================================ */\n\n/** Content for a single stakeholder tab */\nexport interface StakeholderContent {\n /** Tab headline */\n headline: string;\n /** Tab description */\n description: string;\n /** Feature list */\n features?: Array<{ title: string; description: string; icon?: React.ReactNode }>;\n /** Testimonial (render as ReactNode for flexibility) */\n testimonial?: React.ReactNode;\n /** CTA */\n cta: { label: string; href: string };\n}\n\n/** A single stakeholder definition */\nexport interface StakeholderDefinition {\n /** Tab label */\n label: string;\n /** Tab icon */\n icon?: React.ReactNode;\n /** Content for this stakeholder */\n content: StakeholderContent;\n}\n\nexport interface StakeholderTabsProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title?: React.ReactNode;\n /** Stakeholder definitions */\n stakeholders: StakeholderDefinition[];\n /** Default active tab index */\n defaultIndex?: number;\n}\n\n/**\n * Persona-specific content switcher using DS Tabs.\n *\n * @example\n * ```tsx\n * <StakeholderTabs\n * eyebrow=\"Built For You\"\n * title=\"Whether You Run Outreach or We Do\"\n * stakeholders={[\n * {\n * label: 'Founders',\n * content: { headline: '...', description: '...', cta: { label: 'Book Strategy Call', href: '/demo' } },\n * },\n * {\n * label: 'Sales Leaders',\n * content: { headline: '...', description: '...', cta: { label: 'Book Demo', href: '/demo' } },\n * },\n * ]}\n * />\n * ```\n */\nexport const StakeholderTabs = forwardRef<HTMLDivElement, StakeholderTabsProps>(\n (\n {\n eyebrow,\n title,\n stakeholders,\n defaultIndex = 0,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-stakeholder-tabs', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} />\n\n <Tabs defaultValue={defaultIndex}>\n <TabsList className=\"ds-stakeholder-tabs__list\">\n {stakeholders.map((s, i) => (\n <TabsTrigger key={i} value={i} className=\"ds-stakeholder-tabs__trigger\">\n {s.icon && <span className=\"ds-stakeholder-tabs__icon\" aria-hidden=\"true\">{s.icon}</span>}\n {s.label}\n </TabsTrigger>\n ))}\n </TabsList>\n\n {stakeholders.map((s, i) => (\n <TabsContent key={i} value={i} className=\"ds-stakeholder-tabs__content\">\n <div className=\"ds-stakeholder-tabs__panel\">\n <div className=\"ds-stakeholder-tabs__text\">\n <h3 className=\"ds-stakeholder-tabs__headline\">{s.content.headline}</h3>\n <p className=\"ds-stakeholder-tabs__desc\">{s.content.description}</p>\n\n {s.content.features && s.content.features.length > 0 && (\n <ul className=\"ds-stakeholder-tabs__features\">\n {s.content.features.map((f, j) => (\n <li key={j} className=\"ds-stakeholder-tabs__feature\">\n {f.icon && <span className=\"ds-stakeholder-tabs__feature-icon\" aria-hidden=\"true\">{f.icon}</span>}\n <div>\n <strong>{f.title}</strong>\n <span>{f.description}</span>\n </div>\n </li>\n ))}\n </ul>\n )}\n\n <div className=\"ds-stakeholder-tabs__cta-wrap\">\n <Button variant=\"primary\" asChild>\n <OutboundLink href={s.content.cta.href} context=\"stakeholder-tabs-cta\" openInNewTab={false}>{s.content.cta.label}</OutboundLink>\n </Button>\n </div>\n </div>\n\n {s.content.testimonial && (\n <div className=\"ds-stakeholder-tabs__testimonial\">\n {s.content.testimonial}\n </div>\n )}\n </div>\n </TabsContent>\n ))}\n </Tabs>\n </SectionShell>\n );\n },\n);\n\nStakeholderTabs.displayName = 'StakeholderTabs';\n","import React from 'react';\nimport { Tabs as BaseTabs } from '@base-ui/react/tabs';\nimport clsx from 'clsx';\nimport './Tabs.css';\n\n/* ============================================================================\n TABS ROOT\n ============================================================================ */\n\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n defaultValue?: string | number;\n value?: string | number;\n onValueChange?: (value: string | number) => void;\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n ({ className, orientation = 'horizontal', ...props }, ref) => {\n return (\n <BaseTabs.Root\n ref={ref}\n className={clsx('ds-tabs', `ds-tabs--${orientation}`, className)}\n orientation={orientation}\n {...props}\n />\n );\n },\n);\n\nTabs.displayName = 'Tabs';\n\n/* ============================================================================\n TABS LIST\n ============================================================================ */\n\nexport interface TabsListProps extends React.HTMLAttributes<HTMLDivElement> {\n loop?: boolean;\n}\n\nexport const TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, ...props }, ref) => {\n return <BaseTabs.List ref={ref} className={clsx('ds-tabs__list', className)} {...props} />;\n },\n);\n\nTabsList.displayName = 'TabsList';\n\n/* ============================================================================\n TABS TRIGGER\n ============================================================================ */\n\nexport interface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string | number;\n disabled?: boolean;\n}\n\nexport const TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <BaseTabs.Tab ref={ref} className={clsx('ds-tabs__trigger', className)} {...props}>\n {children}\n </BaseTabs.Tab>\n );\n },\n);\n\nTabsTrigger.displayName = 'TabsTrigger';\n\n/* ============================================================================\n TABS CONTENT\n ============================================================================ */\n\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string | number;\n}\n\nexport const TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, ...props }, ref) => {\n return <BaseTabs.Panel ref={ref} className={clsx('ds-tabs__content', className)} {...props} />;\n },\n);\n\nTabsContent.displayName = 'TabsContent';\n","import React, { forwardRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../Tabs';\nimport { Badge } from '../Badge/Badge';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './IntegrationShowcase.css';\n\n/* ============================================================================\n INTEGRATION SHOWCASE\n ============================================================================\n Integration grid with category filtering. Shows available integrations\n to reduce \"will it work with my stack\" objection.\n\n Strategic objective: Trust + Moat (ecosystem stickiness)\n ============================================================================ */\n\n/** A single integration entry */\nexport interface IntegrationEntry {\n /** Integration name */\n name: string;\n /** Logo (React element or img) */\n logo: React.ReactNode;\n /** Short description */\n description?: string;\n /** Category for filtering */\n category: string;\n /** Link to docs/details */\n href?: string;\n /** Optional badge (e.g., \"New\", \"Popular\") */\n badge?: string;\n}\n\nexport interface IntegrationShowcaseProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Integration entries */\n integrations: IntegrationEntry[];\n /** Category labels for filtering */\n categories?: string[];\n /** Layout variant */\n variant?: 'grid' | 'list' | 'compact';\n /** Enable category filtering (default: true if categories provided) */\n filterable?: boolean;\n}\n\n/**\n * Integration grid with category filtering.\n *\n * @example\n * ```tsx\n * <IntegrationShowcase\n * eyebrow=\"Integrations\"\n * title=\"Works With Your Stack\"\n * integrations={[\n * { name: 'Salesforce', logo: <SalesforceLogo />, category: 'CRM' },\n * { name: 'HubSpot', logo: <HubSpotLogo />, category: 'CRM' },\n * { name: 'Slack', logo: <SlackLogo />, category: 'Communication' },\n * ]}\n * categories={['All', 'CRM', 'Communication']}\n * filterable\n * />\n * ```\n */\nexport const IntegrationShowcase = forwardRef<HTMLDivElement, IntegrationShowcaseProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n integrations,\n categories,\n variant = 'grid',\n filterable = !!categories,\n className,\n ...props\n },\n ref,\n ) => {\n const [activeCategory, setActiveCategory] = useState<string>('All');\n\n const allCategories = categories ?? ['All', ...new Set(integrations.map((i) => i.category))];\n const filtered =\n activeCategory === 'All'\n ? integrations\n : integrations.filter((i) => i.category === activeCategory);\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-integration-showcase', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n {filterable && allCategories.length > 1 && (\n <Tabs\n value={allCategories.indexOf(activeCategory)}\n onValueChange={(v) => setActiveCategory(allCategories[v as number] ?? 'All')}\n >\n <TabsList className=\"ds-integration-showcase__filters\">\n {allCategories.map((cat, i) => (\n <TabsTrigger key={cat} value={i} className=\"ds-integration-showcase__filter\">\n {cat}\n </TabsTrigger>\n ))}\n </TabsList>\n {/* TabsContent not needed — we filter inline */}\n {allCategories.map((_, i) => (\n <TabsContent key={i} value={i} className=\"ds-integration-showcase__tab-content\" />\n ))}\n </Tabs>\n )}\n\n <div className={clsx('ds-integration-showcase__grid', `ds-integration-showcase__grid--${variant}`)}>\n {filtered.map((integration, i) => {\n const Card = (\n <div key={i} className=\"ds-integration-showcase__card\">\n <div className=\"ds-integration-showcase__logo\">{integration.logo}</div>\n <div className=\"ds-integration-showcase__info\">\n <span className=\"ds-integration-showcase__name\">\n {integration.name}\n {integration.badge && (\n <Badge variant=\"secondary\" className=\"ds-integration-showcase__badge\">\n {integration.badge}\n </Badge>\n )}\n </span>\n {integration.description && variant !== 'compact' && (\n <span className=\"ds-integration-showcase__desc\">{integration.description}</span>\n )}\n </div>\n </div>\n );\n\n return integration.href ? (\n <OutboundLink key={i} href={integration.href} context=\"integration-showcase-card\" className=\"ds-integration-showcase__card-link\">\n {Card}\n </OutboundLink>\n ) : (\n Card\n );\n })}\n </div>\n </SectionShell>\n );\n },\n);\n\nIntegrationShowcase.displayName = 'IntegrationShowcase';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './SecurityBlock.css';\n\n/* ============================================================================\n SECURITY BLOCK\n ============================================================================\n Security/compliance trust display. Shows certifications, security features,\n and compliance badges to reduce enterprise procurement friction.\n\n Strategic objective: Trust + Authority (enterprise readiness signal)\n ============================================================================ */\n\n/** A certification or compliance badge */\nexport interface SecurityCertification {\n /** Certification name (e.g., \"SOC 2 Type II\") */\n name: string;\n /** Icon or badge image */\n icon: React.ReactNode;\n /** Description (shown in detailed variant) */\n description?: string;\n /** Link to details/documentation */\n href?: string;\n}\n\nexport interface SecurityBlockProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Certifications/badges */\n certifications?: SecurityCertification[];\n /** Security feature descriptions */\n features?: Array<{ title: string; description: string; icon?: React.ReactNode }>;\n /** Layout variant */\n variant?: 'badges' | 'detailed' | 'compact';\n}\n\n/**\n * Security and compliance trust display.\n *\n * @example\n * ```tsx\n * <SecurityBlock\n * eyebrow=\"Enterprise Security\"\n * title=\"Your Data, Our Priority\"\n * certifications={[\n * { name: 'SOC 2 Type II', icon: <ShieldIcon />, description: 'Annual audit...' },\n * { name: 'GDPR Compliant', icon: <EUIcon /> },\n * ]}\n * features={[\n * { title: 'End-to-end encryption', description: '256-bit AES at rest, TLS 1.3 in transit' },\n * ]}\n * variant=\"detailed\"\n * />\n * ```\n */\nexport const SecurityBlock = forwardRef<HTMLDivElement, SecurityBlockProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n certifications,\n features,\n variant = 'badges',\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-security-block', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n {certifications && certifications.length > 0 && (\n <div className={clsx('ds-security-block__certs', `ds-security-block__certs--${variant}`)}>\n {certifications.map((cert, i) => {\n const inner = (\n <div key={i} className=\"ds-security-block__cert\">\n <div className=\"ds-security-block__cert-icon\">{cert.icon}</div>\n <div className=\"ds-security-block__cert-info\">\n <span className=\"ds-security-block__cert-name\">{cert.name}</span>\n {variant === 'detailed' && cert.description && (\n <span className=\"ds-security-block__cert-desc\">{cert.description}</span>\n )}\n </div>\n </div>\n );\n\n return cert.href ? (\n <OutboundLink key={i} href={cert.href} context=\"security-block-cert\" className=\"ds-security-block__cert-link\">\n {inner}\n </OutboundLink>\n ) : (\n <React.Fragment key={i}>{inner}</React.Fragment>\n );\n })}\n </div>\n )}\n\n {features && features.length > 0 && (\n <div className=\"ds-security-block__features\">\n {features.map((feature, i) => (\n <div key={i} className=\"ds-security-block__feature\">\n {feature.icon && (\n <span className=\"ds-security-block__feature-icon\" aria-hidden=\"true\">\n {feature.icon}\n </span>\n )}\n <div>\n <h4 className=\"ds-security-block__feature-title\">{feature.title}</h4>\n <p className=\"ds-security-block__feature-desc\">{feature.description}</p>\n </div>\n </div>\n ))}\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nSecurityBlock.displayName = 'SecurityBlock';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { Badge } from '../Badge/Badge';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './CaseStudyCard.css';\n\n/* ============================================================================\n CASE STUDY CARD\n ============================================================================\n Case study preview card with company info, key metrics, and outcome summary.\n\n Strategic objective: Trust + Authority (social proof artifact)\n ============================================================================ */\n\n/** A single metric shown on the card */\nexport interface CaseStudyMetric {\n /** Metric value (e.g., \"312%\") */\n value: string;\n /** Metric label (e.g., \"increase in meetings\") */\n label: string;\n /** Value prefix (e.g., \"+\") */\n prefix?: string;\n /** Value suffix (e.g., \"%\") */\n suffix?: string;\n}\n\nexport interface CaseStudyCardProps extends React.HTMLAttributes<HTMLElement> {\n /** Company name */\n company: string;\n /** Company logo */\n logo?: React.ReactNode;\n /** Industry tag */\n industry?: string;\n /** One-line outcome summary */\n headline: string;\n /** Key metrics achieved */\n metrics?: CaseStudyMetric[];\n /** Link to full case study */\n href: string;\n /** Optional cover image */\n coverImage?: string;\n /** Optional quote excerpt */\n quote?: string;\n}\n\n/**\n * Case study preview card with company info and key metrics.\n *\n * @example\n * ```tsx\n * <CaseStudyCard\n * company=\"Acme Corp\"\n * industry=\"SaaS\"\n * headline=\"312% increase in qualified meetings in 90 days\"\n * metrics={[\n * { value: '312', suffix: '%', label: 'More meetings' },\n * { value: '45', suffix: '%', label: 'Lower cost per lead' },\n * ]}\n * href=\"/case-studies/acme-corp\"\n * />\n * ```\n */\nexport const CaseStudyCard = forwardRef<HTMLElement, CaseStudyCardProps>(\n (\n {\n company,\n logo,\n industry,\n headline,\n metrics,\n href,\n coverImage,\n quote,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <article\n ref={ref}\n className={clsx('ds-case-study-card', className)}\n {...props}\n >\n <OutboundLink href={href} context=\"case-study-card\" className=\"ds-case-study-card__link\" openInNewTab={false}>\n {coverImage && (\n <div className=\"ds-case-study-card__image-wrap\">\n <img\n src={coverImage}\n alt=\"\"\n className=\"ds-case-study-card__image\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n </div>\n )}\n\n <div className=\"ds-case-study-card__body\">\n <div className=\"ds-case-study-card__header\">\n {logo && <div className=\"ds-case-study-card__logo\">{logo}</div>}\n <div className=\"ds-case-study-card__company-info\">\n <span className=\"ds-case-study-card__company\">{company}</span>\n {industry && (\n <Badge variant=\"secondary\" className=\"ds-case-study-card__industry\">\n {industry}\n </Badge>\n )}\n </div>\n </div>\n\n <h3 className=\"ds-case-study-card__headline\">{headline}</h3>\n\n {metrics && metrics.length > 0 && (\n <div className=\"ds-case-study-card__metrics\">\n {metrics.map((metric, i) => (\n <div key={i} className=\"ds-case-study-card__metric\">\n <span className=\"ds-case-study-card__metric-value\">\n {metric.prefix}{metric.value}{metric.suffix}\n </span>\n <span className=\"ds-case-study-card__metric-label\">{metric.label}</span>\n </div>\n ))}\n </div>\n )}\n\n {quote && (\n <blockquote className=\"ds-case-study-card__quote\">\n <p>“{quote}”</p>\n </blockquote>\n )}\n </div>\n </OutboundLink>\n </article>\n );\n },\n);\n\nCaseStudyCard.displayName = 'CaseStudyCard';\n","import React, { forwardRef, useState } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { CaseStudyCard, type CaseStudyCardProps } from '../CaseStudyCard/CaseStudyCard';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../Tabs';\nimport { Button } from '../Button/Button';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './CaseStudySection.css';\n\n/* ============================================================================\n CASE STUDY SECTION\n ============================================================================\n Case study showcase with optional industry filtering. Wraps CaseStudyCard\n grid in a SectionShell.\n\n Strategic objective: Trust + Authority\n ============================================================================ */\n\nexport interface CaseStudySectionProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Case study items */\n caseStudies: CaseStudyCardProps[];\n /** Enable industry filtering */\n filterable?: boolean;\n /** Filter labels (derived from caseStudies.industry if not provided) */\n filters?: string[];\n /** Max visible items */\n maxVisible?: number;\n /** \"See all\" link */\n seeAllHref?: string;\n}\n\n/**\n * Case study showcase section with optional filtering.\n *\n * @example\n * ```tsx\n * <CaseStudySection\n * eyebrow=\"Customer Stories\"\n * title=\"How Teams Win With SalesMind\"\n * caseStudies={caseStudies}\n * filterable\n * seeAllHref=\"/case-studies\"\n * />\n * ```\n */\nexport const CaseStudySection = forwardRef<HTMLDivElement, CaseStudySectionProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n caseStudies,\n filterable = false,\n filters,\n maxVisible,\n seeAllHref,\n className,\n ...props\n },\n ref,\n ) => {\n const allFilters = filters ?? [\n 'All',\n ...new Set(caseStudies.map((cs) => cs.industry).filter(Boolean) as string[]),\n ];\n const [activeFilter, setActiveFilter] = useState('All');\n\n const filtered =\n activeFilter === 'All'\n ? caseStudies\n : caseStudies.filter((cs) => cs.industry === activeFilter);\n\n const visible = maxVisible ? filtered.slice(0, maxVisible) : filtered;\n\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-case-study-section', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n {filterable && allFilters.length > 1 && (\n <Tabs\n value={allFilters.indexOf(activeFilter)}\n onValueChange={(v) => setActiveFilter(allFilters[v as number] ?? 'All')}\n >\n <TabsList className=\"ds-case-study-section__filters\">\n {allFilters.map((filter, i) => (\n <TabsTrigger key={filter} value={i} className=\"ds-case-study-section__filter\">\n {filter}\n </TabsTrigger>\n ))}\n </TabsList>\n {allFilters.map((_, i) => (\n <TabsContent key={i} value={i} className=\"ds-case-study-section__tab-content\" />\n ))}\n </Tabs>\n )}\n\n <div className=\"ds-case-study-section__grid\">\n {visible.map((cs, i) => (\n <CaseStudyCard key={i} {...cs} />\n ))}\n </div>\n\n {seeAllHref && (\n <div className=\"ds-case-study-section__see-all\">\n <Button variant=\"outline\" asChild>\n <OutboundLink href={seeAllHref} context=\"case-study-section-see-all\" openInNewTab={false}>See all case studies</OutboundLink>\n </Button>\n </div>\n )}\n </SectionShell>\n );\n },\n);\n\nCaseStudySection.displayName = 'CaseStudySection';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { SectionShell, type SectionShellProps } from '../SectionShell/SectionShell';\nimport { SectionHeader } from '../SectionShell/SectionShell';\nimport { Badge } from '../Badge/Badge';\nimport { OutboundLink } from '../OutboundLink/OutboundLink';\nimport './ComplianceGrid.css';\n\n/* ============================================================================\n COMPLIANCE GRID\n ============================================================================\n Compliance certifications grid with status indicators. Shows certification\n progress to enterprise buyers.\n\n Strategic objective: Trust + Authority (enterprise procurement readiness)\n ============================================================================ */\n\n/** Status of a compliance certification */\nexport type ComplianceStatus = 'certified' | 'in-progress' | 'planned';\n\n/** A single compliance item */\nexport interface ComplianceItem {\n /** Certification name */\n name: string;\n /** Current status */\n status: ComplianceStatus;\n /** Icon */\n icon?: React.ReactNode;\n /** Description */\n description?: string;\n /** Link to documentation or certificate */\n documentHref?: string;\n}\n\nexport interface ComplianceGridProps extends Omit<SectionShellProps, 'title'> {\n /** Section eyebrow */\n eyebrow?: React.ReactNode;\n /** Section title */\n title: React.ReactNode;\n /** Section subtitle */\n subtitle?: React.ReactNode;\n /** Compliance items */\n items: ComplianceItem[];\n}\n\nconst STATUS_LABELS: Record<ComplianceStatus, string> = {\n certified: 'Certified',\n 'in-progress': 'In Progress',\n planned: 'Planned',\n};\n\n/**\n * Compliance certifications grid with status badges.\n *\n * @example\n * ```tsx\n * <ComplianceGrid\n * eyebrow=\"Compliance\"\n * title=\"Enterprise-Grade Security\"\n * items={[\n * { name: 'SOC 2 Type II', status: 'certified', icon: <ShieldIcon /> },\n * { name: 'ISO 27001', status: 'in-progress', icon: <LockIcon /> },\n * { name: 'HIPAA', status: 'planned', icon: <HospitalIcon /> },\n * ]}\n * />\n * ```\n */\nexport const ComplianceGrid = forwardRef<HTMLDivElement, ComplianceGridProps>(\n (\n {\n eyebrow,\n title,\n subtitle,\n items,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <SectionShell\n ref={ref}\n className={clsx('ds-compliance-grid', className)}\n {...props}\n >\n <SectionHeader eyebrow={eyebrow} title={title} subtitle={subtitle} />\n\n <div className=\"ds-compliance-grid__items\">\n {items.map((item, i) => {\n const inner = (\n <div\n key={i}\n className={clsx(\n 'ds-compliance-grid__item',\n `ds-compliance-grid__item--${item.status}`,\n )}\n >\n {item.icon && (\n <div className=\"ds-compliance-grid__icon\">{item.icon}</div>\n )}\n <div className=\"ds-compliance-grid__info\">\n <span className=\"ds-compliance-grid__name\">{item.name}</span>\n <Badge\n className={clsx(\n 'ds-compliance-grid__status',\n `ds-compliance-grid__status--${item.status}`,\n )}\n variant=\"outline\"\n >\n {STATUS_LABELS[item.status]}\n </Badge>\n {item.description && (\n <span className=\"ds-compliance-grid__desc\">{item.description}</span>\n )}\n </div>\n </div>\n );\n\n return item.documentHref ? (\n <OutboundLink key={i} href={item.documentHref} context=\"compliance-grid-doc\" className=\"ds-compliance-grid__link\">\n {inner}\n </OutboundLink>\n ) : (\n <React.Fragment key={i}>{inner}</React.Fragment>\n );\n })}\n </div>\n </SectionShell>\n );\n },\n);\n\nComplianceGrid.displayName = 'ComplianceGrid';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport './ArchitectureDiagram.css';\n\n/* ============================================================================\n ARCHITECTURE DIAGRAM\n ============================================================================\n SVG-based system architecture visualization showing integration flow.\n Renders nodes and connections as a directed graph.\n\n Strategic objective: Moat (visualizes ecosystem complexity as value)\n ============================================================================ */\n\n/** Node type determines visual treatment */\nexport type ArchitectureNodeType = 'source' | 'process' | 'destination' | 'integration';\n\n/** A node in the architecture diagram */\nexport interface ArchitectureNode {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Optional icon */\n icon?: React.ReactNode;\n /** Node type affects styling */\n type: ArchitectureNodeType;\n /** Tooltip description */\n description?: string;\n}\n\n/** A connection between two nodes */\nexport interface ArchitectureConnection {\n /** Source node ID */\n from: string;\n /** Destination node ID */\n to: string;\n /** Connection label */\n label?: string;\n /** Show animated dashes */\n animated?: boolean;\n}\n\nexport interface ArchitectureDiagramProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Nodes in the diagram */\n nodes: ArchitectureNode[];\n /** Connections between nodes */\n connections: ArchitectureConnection[];\n /** Flow direction */\n direction?: 'horizontal' | 'vertical';\n}\n\n/**\n * System architecture visualization with nodes and connections.\n *\n * @example\n * ```tsx\n * <ArchitectureDiagram\n * nodes={[\n * { id: 'linkedin', label: 'LinkedIn', type: 'source' },\n * { id: 'ai', label: 'SalesMind AI', type: 'process' },\n * { id: 'crm', label: 'CRM', type: 'destination' },\n * ]}\n * connections={[\n * { from: 'linkedin', to: 'ai', animated: true },\n * { from: 'ai', to: 'crm', animated: true },\n * ]}\n * direction=\"horizontal\"\n * />\n * ```\n */\nexport const ArchitectureDiagram = forwardRef<HTMLDivElement, ArchitectureDiagramProps>(\n (\n {\n nodes,\n connections,\n direction = 'horizontal',\n className,\n ...props\n },\n ref,\n ) => {\n // Simple linear layout — nodes spaced evenly\n const isHorizontal = direction === 'horizontal';\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-architecture',\n `ds-architecture--${direction}`,\n className,\n )}\n role=\"img\"\n aria-label=\"Architecture diagram\"\n {...props}\n >\n <div className=\"ds-architecture__nodes\">\n {nodes.map((node, i) => (\n <React.Fragment key={node.id}>\n {/* Connection arrow before node (except first) */}\n {i > 0 && (\n <div className=\"ds-architecture__connection\" aria-hidden=\"true\">\n <div\n className={clsx(\n 'ds-architecture__line',\n connections.find(\n (c) => c.from === nodes[i - 1]?.id && c.to === node.id,\n )?.animated && 'ds-architecture__line--animated',\n )}\n />\n <span className=\"ds-architecture__arrow\">\n {isHorizontal ? '\\u2192' : '\\u2193'}\n </span>\n {connections.find(\n (c) => c.from === nodes[i - 1]?.id && c.to === node.id,\n )?.label && (\n <span className=\"ds-architecture__connection-label\">\n {connections.find(\n (c) => c.from === nodes[i - 1]?.id && c.to === node.id,\n )?.label}\n </span>\n )}\n </div>\n )}\n\n {/* Node */}\n <div\n className={clsx(\n 'ds-architecture__node',\n `ds-architecture__node--${node.type}`,\n )}\n title={node.description}\n >\n {node.icon && (\n <span className=\"ds-architecture__node-icon\" aria-hidden=\"true\">\n {node.icon}\n </span>\n )}\n <span className=\"ds-architecture__node-label\">{node.label}</span>\n </div>\n </React.Fragment>\n ))}\n </div>\n </div>\n );\n },\n);\n\nArchitectureDiagram.displayName = 'ArchitectureDiagram';\n","import React, { forwardRef, useMemo } from 'react';\nimport clsx from 'clsx';\n\n/* ============================================================================\n SEGMENT SWITCH\n ============================================================================\n Renders content based on visitor segment. Pure logic wrapper — no visual\n output of its own. Reads segment from UTM params, cookie, or manual prop.\n\n Strategic objective: Pipeline Quality (personalized conversion paths)\n ============================================================================ */\n\nexport interface SegmentSwitchProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Active segment key */\n segment?: string;\n /** Map of segment keys to content */\n segments: Record<string, React.ReactNode>;\n /** Fallback content when no segment matches */\n fallback?: React.ReactNode;\n /** Segment source for auto-detection */\n source?: 'utm' | 'cookie' | 'manual';\n /** UTM parameter name (default: \"utm_segment\") */\n utmParam?: string;\n /** Cookie name (default: \"ds_segment\") */\n cookieName?: string;\n}\n\nfunction getUtmSegment(param: string): string | null {\n if (typeof window === 'undefined') return null;\n const url = new URL(window.location.href);\n return url.searchParams.get(param);\n}\n\nfunction getCookieSegment(name: string): string | null {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp(`(?:^|;\\\\s*)${name}=([^;]*)`));\n return match ? decodeURIComponent(match[1]) : null;\n}\n\n/**\n * Segment-based content renderer.\n *\n * @example\n * ```tsx\n * <SegmentSwitch\n * segment=\"founder\"\n * segments={{\n * founder: <FounderContent />,\n * operator: <OperatorContent />,\n * }}\n * fallback={<DefaultContent />}\n * />\n * ```\n */\nexport const SegmentSwitch = forwardRef<HTMLDivElement, SegmentSwitchProps>(\n (\n {\n segment: controlledSegment,\n segments,\n fallback = null,\n source = 'manual',\n utmParam = 'utm_segment',\n cookieName = 'ds_segment',\n className,\n ...props\n },\n ref,\n ) => {\n const resolvedSegment = useMemo(() => {\n if (controlledSegment) return controlledSegment;\n\n switch (source) {\n case 'utm':\n return getUtmSegment(utmParam) ?? undefined;\n case 'cookie':\n return getCookieSegment(cookieName) ?? undefined;\n default:\n return undefined;\n }\n }, [controlledSegment, source, utmParam, cookieName]);\n\n const content = resolvedSegment && segments[resolvedSegment]\n ? segments[resolvedSegment]\n : fallback;\n\n if (!content) return null;\n\n return (\n <div ref={ref} className={clsx(className)} {...props}>\n {content}\n </div>\n );\n },\n);\n\nSegmentSwitch.displayName = 'SegmentSwitch';\n","import React, { forwardRef, useState, useCallback, useEffect, useRef } from 'react';\nimport clsx from 'clsx';\nimport { BrowserFrame } from '../BrowserFrame/BrowserFrame';\nimport './VideoEmbed.css';\n\n/* ============================================================================\n VIDEO EMBED\n ============================================================================\n Responsive video embed with poster image, play button overlay, and lazy\n iframe injection on play. Supports YouTube, Vimeo, Loom, and direct URLs.\n\n Strategic objective: Trust (video converts 80% better than text-only)\n ============================================================================ */\n\nexport interface VideoEmbedProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Video source URL (YouTube, Vimeo, Loom, or direct) */\n src: string;\n /** Poster image shown before play */\n poster?: string;\n /** Video title for accessibility */\n title: string;\n /** Aspect ratio */\n aspectRatio?: '16/9' | '4/3' | '1/1';\n /** Auto-play when visible (muted, respects prefers-reduced-motion) */\n autoPlay?: boolean;\n /** Wrap embed inside a BrowserFrame */\n withFrame?: boolean;\n /** Analytics event on play */\n onPlay?: () => void;\n}\n\nfunction getEmbedUrl(src: string, muted = false): string {\n // YouTube\n const ytMatch = src.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/|youtube\\.com\\/embed\\/)([a-zA-Z0-9_-]+)/);\n if (ytMatch) {\n const params = muted ? 'autoplay=1&mute=1&rel=0' : 'autoplay=1&rel=0';\n return `https://www.youtube.com/embed/${ytMatch[1]}?${params}`;\n }\n\n // Vimeo\n const vimeoMatch = src.match(/(?:vimeo\\.com\\/)(\\d+)/);\n if (vimeoMatch) {\n const params = muted ? 'autoplay=1&muted=1' : 'autoplay=1';\n return `https://player.vimeo.com/video/${vimeoMatch[1]}?${params}`;\n }\n\n // Loom\n const loomMatch = src.match(/(?:loom\\.com\\/share\\/)([a-zA-Z0-9]+)/);\n if (loomMatch) return `https://www.loom.com/embed/${loomMatch[1]}?autoplay=1`;\n\n return src;\n}\n\n/**\n * Responsive video embed with poster + play button overlay.\n * Supports autoPlay via IntersectionObserver (muted, reduced-motion aware)\n * and optional BrowserFrame wrapping for product screenshots.\n *\n * @example\n * ```tsx\n * <VideoEmbed\n * src=\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\"\n * poster=\"/thumbnails/demo.jpg\"\n * title=\"Product demo video\"\n * />\n *\n * <VideoEmbed\n * src=\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\"\n * title=\"Product demo\"\n * autoPlay\n * withFrame\n * />\n * ```\n */\nexport const VideoEmbed = forwardRef<HTMLDivElement, VideoEmbedProps>(\n (\n {\n src,\n poster,\n title,\n aspectRatio = '16/9',\n autoPlay = false,\n withFrame = false,\n onPlay,\n className,\n ...props\n },\n ref,\n ) => {\n const [playing, setPlaying] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const handlePlay = useCallback(() => {\n setPlaying(true);\n onPlay?.();\n }, [onPlay]);\n\n // autoPlay via IntersectionObserver — respects prefers-reduced-motion\n useEffect(() => {\n if (!autoPlay || playing) return;\n if (typeof window === 'undefined') return;\n\n // Respect reduced-motion preference\n const motionQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n if (motionQuery.matches) return;\n\n const target = containerRef.current;\n if (!target) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n handlePlay();\n observer.disconnect();\n }\n },\n { threshold: 0.5 },\n );\n\n observer.observe(target);\n return () => observer.disconnect();\n }, [autoPlay, playing, handlePlay]);\n\n const embedContent = (\n <div\n ref={containerRef}\n className={clsx('ds-video-embed', withFrame && 'ds-video-embed--framed', className)}\n style={{ aspectRatio }}\n >\n {!playing ? (\n <button\n type=\"button\"\n className=\"ds-video-embed__poster-btn\"\n onClick={handlePlay}\n aria-label={`Play video: ${title}`}\n >\n {poster && (\n <img\n src={poster}\n alt=\"\"\n className=\"ds-video-embed__poster\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n )}\n <div className=\"ds-video-embed__overlay\" />\n <div className=\"ds-video-embed__play\" aria-hidden=\"true\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\">\n <circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"rgba(0,0,0,0.5)\" />\n <path d=\"M19 15l14 9-14 9V15z\" fill=\"white\" />\n </svg>\n </div>\n </button>\n ) : (\n <iframe\n src={getEmbedUrl(src, autoPlay)}\n title={title}\n className=\"ds-video-embed__iframe\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n )}\n </div>\n );\n\n if (withFrame) {\n return (\n <BrowserFrame ref={ref} variant=\"browser\" url={src} {...props}>\n {embedContent}\n </BrowserFrame>\n );\n }\n\n return React.cloneElement(embedContent, { ref, ...props });\n },\n);\n\nVideoEmbed.displayName = 'VideoEmbed';\n","import React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport './BrowserFrame.css';\n\n/* ============================================================================\n BROWSER FRAME\n ============================================================================\n Realistic browser/device mockup frame for product screenshots and videos.\n Makes static screenshots feel like live product demos.\n\n Strategic objective: Trust (product visualization builds desire)\n ============================================================================ */\n\nexport interface BrowserFrameProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Frame type */\n variant?: 'browser' | 'app' | 'mobile' | 'minimal';\n /** Content to frame (image, video, or React element) */\n children: React.ReactNode;\n /** Optional URL bar text */\n url?: string;\n /** Show traffic light dots (default: true for browser/app) */\n showControls?: boolean;\n /** Optional glow effect behind frame */\n withGlow?: boolean;\n /** Aspect ratio */\n aspectRatio?: '16/9' | '4/3' | '3/2' | 'auto';\n}\n\n/**\n * Device mockup frame for product screenshots.\n *\n * @example\n * ```tsx\n * <BrowserFrame variant=\"browser\" url=\"app.sales-mind.ai\" withGlow>\n * <img src=\"/screenshot.png\" alt=\"SalesMind dashboard\" />\n * </BrowserFrame>\n * ```\n */\nexport const BrowserFrame = forwardRef<HTMLDivElement, BrowserFrameProps>(\n (\n {\n variant = 'browser',\n children,\n url,\n showControls,\n withGlow = false,\n aspectRatio = '16/9',\n className,\n ...props\n },\n ref,\n ) => {\n const hasControls = showControls ?? (variant === 'browser' || variant === 'app');\n\n return (\n <div\n ref={ref}\n className={clsx(\n 'ds-browser-frame',\n `ds-browser-frame--${variant}`,\n withGlow && 'ds-browser-frame--glow',\n className,\n )}\n {...props}\n >\n {/* Chrome header */}\n {variant !== 'minimal' && (\n <div className=\"ds-browser-frame__chrome\">\n {hasControls && (\n <div className=\"ds-browser-frame__controls\" aria-hidden=\"true\">\n <span className=\"ds-browser-frame__dot ds-browser-frame__dot--red\" />\n <span className=\"ds-browser-frame__dot ds-browser-frame__dot--yellow\" />\n <span className=\"ds-browser-frame__dot ds-browser-frame__dot--green\" />\n </div>\n )}\n {variant === 'browser' && url && (\n <div className=\"ds-browser-frame__url-bar\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" className=\"ds-browser-frame__lock\">\n <path d=\"M3 5V4a3 3 0 116 0v1\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n <rect x=\"2\" y=\"5\" width=\"8\" height=\"6\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n </svg>\n <span className=\"ds-browser-frame__url-text\">{url}</span>\n </div>\n )}\n </div>\n )}\n\n {/* Content area */}\n <div\n className=\"ds-browser-frame__content\"\n style={aspectRatio !== 'auto' ? { aspectRatio } : undefined}\n >\n {children}\n </div>\n\n {/* Mobile notch */}\n {variant === 'mobile' && (\n <div className=\"ds-browser-frame__notch\" aria-hidden=\"true\" />\n )}\n </div>\n );\n },\n);\n\nBrowserFrame.displayName = 'BrowserFrame';\n"]}
|